whale-code 6.5.5 → 6.5.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +39 -31
- package/bin/{swagmanager-mcp.js → whale-code.js} +17 -2
- package/dist/cli/app.js +148 -72
- package/dist/cli/app.js.map +1 -0
- package/dist/cli/chat/AgentSelector.js +105 -10
- package/dist/cli/chat/AgentSelector.js.map +1 -0
- package/dist/cli/chat/ChatApp.d.ts +31 -0
- package/dist/cli/chat/ChatApp.js +539 -286
- package/dist/cli/chat/ChatApp.js.map +1 -0
- package/dist/cli/chat/ChatInput.js +1088 -770
- package/dist/cli/chat/ChatInput.js.map +1 -0
- package/dist/cli/chat/MarkdownText.js +39 -14
- package/dist/cli/chat/MarkdownText.js.map +1 -0
- package/dist/cli/chat/MemoryManager.js +181 -46
- package/dist/cli/chat/MemoryManager.js.map +1 -0
- package/dist/cli/chat/MessageList.d.ts +2 -3
- package/dist/cli/chat/MessageList.js +186 -45
- package/dist/cli/chat/MessageList.js.map +1 -0
- package/dist/cli/chat/ModelSelector.js +282 -63
- package/dist/cli/chat/ModelSelector.js.map +1 -0
- package/dist/cli/chat/NodeManager.js +165 -75
- package/dist/cli/chat/NodeManager.js.map +1 -0
- package/dist/cli/chat/NodeSelector.js +171 -30
- package/dist/cli/chat/NodeSelector.js.map +1 -0
- package/dist/cli/chat/PlanApproval.js +281 -57
- package/dist/cli/chat/PlanApproval.js.map +1 -0
- package/dist/cli/chat/RewindViewer.js +559 -144
- package/dist/cli/chat/RewindViewer.js.map +1 -0
- package/dist/cli/chat/SessionManager.js +137 -30
- package/dist/cli/chat/SessionManager.js.map +1 -0
- package/dist/cli/chat/SlashMenu.js +293 -164
- package/dist/cli/chat/SlashMenu.js.map +1 -0
- package/dist/cli/chat/StatusBar.js +172 -9
- package/dist/cli/chat/StatusBar.js.map +1 -0
- package/dist/cli/chat/StoreSelector.js +147 -18
- package/dist/cli/chat/StoreSelector.js.map +1 -0
- package/dist/cli/chat/StreamingText.d.ts +1 -5
- package/dist/cli/chat/StreamingText.js +22 -7
- package/dist/cli/chat/StreamingText.js.map +1 -0
- package/dist/cli/chat/SubagentPanel.d.ts +1 -2
- package/dist/cli/chat/SubagentPanel.js +612 -72
- package/dist/cli/chat/SubagentPanel.js.map +1 -0
- package/dist/cli/chat/TeamPanel.d.ts +1 -0
- package/dist/cli/chat/TeamPanel.js +230 -30
- package/dist/cli/chat/TeamPanel.js.map +1 -0
- package/dist/cli/chat/ThemeSelector.js +84 -24
- package/dist/cli/chat/ThemeSelector.js.map +1 -0
- package/dist/cli/chat/ToolIndicator.js +1476 -371
- package/dist/cli/chat/ToolIndicator.js.map +1 -0
- package/dist/cli/chat/hooks/useAgentLoop.d.ts +1 -0
- package/dist/cli/chat/hooks/useAgentLoop.js +481 -367
- package/dist/cli/chat/hooks/useAgentLoop.js.map +1 -0
- package/dist/cli/chat/hooks/useSlashCommands.d.ts +3 -14
- package/dist/cli/chat/hooks/useSlashCommands.js +744 -572
- package/dist/cli/chat/hooks/useSlashCommands.js.map +1 -0
- package/dist/cli/commands/config-cmd.js +56 -57
- package/dist/cli/commands/config-cmd.js.map +1 -0
- package/dist/cli/commands/db.js +184 -169
- package/dist/cli/commands/db.js.map +1 -0
- package/dist/cli/commands/doctor.js +212 -122
- package/dist/cli/commands/doctor.js.map +1 -0
- package/dist/cli/commands/init.js +211 -244
- package/dist/cli/commands/init.js.map +1 -0
- package/dist/cli/commands/mcp.js +127 -122
- package/dist/cli/commands/mcp.js.map +1 -0
- package/dist/cli/login/LoginApp.js +355 -141
- package/dist/cli/login/LoginApp.js.map +1 -0
- package/dist/cli/print-mode.js +196 -177
- package/dist/cli/print-mode.js.map +1 -0
- package/dist/cli/serve-mode.js +615 -530
- package/dist/cli/serve-mode.js.map +1 -0
- package/dist/cli/services/agent-config.d.ts +5 -1
- package/dist/cli/services/agent-config.js +66 -36
- package/dist/cli/services/agent-config.js.map +1 -0
- package/dist/cli/services/agent-definitions.d.ts +4 -1
- package/dist/cli/services/agent-definitions.js +97 -56
- package/dist/cli/services/agent-definitions.js.map +1 -0
- package/dist/cli/services/agent-events.js +225 -162
- package/dist/cli/services/agent-events.js.map +1 -0
- package/dist/cli/services/agent-loop.js +976 -688
- package/dist/cli/services/agent-loop.js.map +1 -0
- package/dist/cli/services/agent-worker-base.d.ts +35 -5
- package/dist/cli/services/agent-worker-base.js +337 -153
- package/dist/cli/services/agent-worker-base.js.map +1 -0
- package/dist/cli/services/api-retry.js +69 -64
- package/dist/cli/services/api-retry.js.map +1 -0
- package/dist/cli/services/auth-service.d.ts +3 -3
- package/dist/cli/services/auth-service.js +209 -132
- package/dist/cli/services/auth-service.js.map +1 -0
- package/dist/cli/services/background-processes.js +343 -267
- package/dist/cli/services/background-processes.js.map +1 -0
- package/dist/cli/services/browser-auth.d.ts +2 -2
- package/dist/cli/services/browser-auth.js +159 -118
- package/dist/cli/services/browser-auth.js.map +1 -0
- package/dist/cli/services/claude-md-loader.js +40 -36
- package/dist/cli/services/claude-md-loader.js.map +1 -0
- package/dist/cli/services/config-store.d.ts +9 -4
- package/dist/cli/services/config-store.js +164 -117
- package/dist/cli/services/config-store.js.map +1 -0
- package/dist/cli/services/debug-log.d.ts +1 -1
- package/dist/cli/services/debug-log.js +34 -35
- package/dist/cli/services/debug-log.js.map +1 -0
- package/dist/cli/services/env-detect.d.ts +7 -0
- package/dist/cli/services/env-detect.js +9 -0
- package/dist/cli/services/env-detect.js.map +1 -0
- package/dist/cli/services/error-logger.js +187 -169
- package/dist/cli/services/error-logger.js.map +1 -0
- package/dist/cli/services/file-history.d.ts +1 -1
- package/dist/cli/services/file-history.js +50 -54
- package/dist/cli/services/file-history.js.map +1 -0
- package/dist/cli/services/format-server-response.js +332 -372
- package/dist/cli/services/format-server-response.js.map +1 -0
- package/dist/cli/services/git-context.js +61 -45
- package/dist/cli/services/git-context.js.map +1 -0
- package/dist/cli/services/hooks.d.ts +2 -2
- package/dist/cli/services/hooks.js +195 -180
- package/dist/cli/services/hooks.js.map +1 -0
- package/dist/cli/services/ink-incremental.d.ts +19 -0
- package/dist/cli/services/ink-incremental.js +59 -0
- package/dist/cli/services/ink-incremental.js.map +1 -0
- package/dist/cli/services/ink-resize-fix.js +54 -44
- package/dist/cli/services/ink-resize-fix.js.map +1 -0
- package/dist/cli/services/ink-sync-output.d.ts +12 -0
- package/dist/cli/services/ink-sync-output.js +16 -0
- package/dist/cli/services/ink-sync-output.js.map +1 -0
- package/dist/cli/services/interactive-tools.js +268 -212
- package/dist/cli/services/interactive-tools.js.map +1 -0
- package/dist/cli/services/keybinding-manager.d.ts +11 -1
- package/dist/cli/services/keybinding-manager.js +126 -63
- package/dist/cli/services/keybinding-manager.js.map +1 -0
- package/dist/cli/services/local-tools.d.ts +1 -1
- package/dist/cli/services/local-tools.js +939 -656
- package/dist/cli/services/local-tools.js.map +1 -0
- package/dist/cli/services/lsp-manager.js +757 -594
- package/dist/cli/services/lsp-manager.js.map +1 -0
- package/dist/cli/services/mcp-client.d.ts +1 -1
- package/dist/cli/services/mcp-client.js +173 -134
- package/dist/cli/services/mcp-client.js.map +1 -0
- package/dist/cli/services/memory-manager.js +53 -40
- package/dist/cli/services/memory-manager.js.map +1 -0
- package/dist/cli/services/model-manager.js +55 -40
- package/dist/cli/services/model-manager.js.map +1 -0
- package/dist/cli/services/model-router.js +115 -85
- package/dist/cli/services/model-router.js.map +1 -0
- package/dist/cli/services/paths.d.ts +30 -0
- package/dist/cli/services/paths.js +81 -0
- package/dist/cli/services/paths.js.map +1 -0
- package/dist/cli/services/permission-modes.js +32 -25
- package/dist/cli/services/permission-modes.js.map +1 -0
- package/dist/cli/services/rewind.js +182 -168
- package/dist/cli/services/rewind.js.map +1 -0
- package/dist/cli/services/ripgrep.js +115 -115
- package/dist/cli/services/ripgrep.js.map +1 -0
- package/dist/cli/services/sandbox.d.ts +1 -1
- package/dist/cli/services/sandbox.js +58 -37
- package/dist/cli/services/sandbox.js.map +1 -0
- package/dist/cli/services/server-tools.js +738 -565
- package/dist/cli/services/server-tools.js.map +1 -0
- package/dist/cli/services/session-persistence.js +69 -74
- package/dist/cli/services/session-persistence.js.map +1 -0
- package/dist/cli/services/subagent-worker.js +42 -27
- package/dist/cli/services/subagent-worker.js.map +1 -0
- package/dist/cli/services/subagent.d.ts +2 -0
- package/dist/cli/services/subagent.js +605 -433
- package/dist/cli/services/subagent.js.map +1 -0
- package/dist/cli/services/system-prompt.js +86 -78
- package/dist/cli/services/system-prompt.js.map +1 -0
- package/dist/cli/services/task-decomposer.d.ts +1 -1
- package/dist/cli/services/task-decomposer.js +172 -139
- package/dist/cli/services/task-decomposer.js.map +1 -0
- package/dist/cli/services/team-lead.d.ts +2 -2
- package/dist/cli/services/team-lead.js +727 -529
- package/dist/cli/services/team-lead.js.map +1 -0
- package/dist/cli/services/team-state.js +319 -319
- package/dist/cli/services/team-state.js.map +1 -0
- package/dist/cli/services/teammate.d.ts +8 -2
- package/dist/cli/services/teammate.js +857 -569
- package/dist/cli/services/teammate.js.map +1 -0
- package/dist/cli/services/telemetry.d.ts +6 -1
- package/dist/cli/services/telemetry.js +180 -157
- package/dist/cli/services/telemetry.js.map +1 -0
- package/dist/cli/services/tools/agent-tools.d.ts +3 -3
- package/dist/cli/services/tools/agent-tools.js +480 -322
- package/dist/cli/services/tools/agent-tools.js.map +1 -0
- package/dist/cli/services/tools/file-ops.js +563 -450
- package/dist/cli/services/tools/file-ops.js.map +1 -0
- package/dist/cli/services/tools/search-tools.js +231 -162
- package/dist/cli/services/tools/search-tools.js.map +1 -0
- package/dist/cli/services/tools/shell-exec.js +197 -151
- package/dist/cli/services/tools/shell-exec.js.map +1 -0
- package/dist/cli/services/tools/task-manager.js +206 -173
- package/dist/cli/services/tools/task-manager.js.map +1 -0
- package/dist/cli/services/tools/web-tools.js +388 -341
- package/dist/cli/services/tools/web-tools.js.map +1 -0
- package/dist/cli/setup/SetupApp.d.ts +2 -2
- package/dist/cli/setup/SetupApp.js +608 -160
- package/dist/cli/setup/SetupApp.js.map +1 -0
- package/dist/cli/shared/ErrorBoundary.d.ts +22 -0
- package/dist/cli/shared/ErrorBoundary.js +73 -0
- package/dist/cli/shared/ErrorBoundary.js.map +1 -0
- package/dist/cli/shared/MatrixIntro.js +66 -69
- package/dist/cli/shared/MatrixIntro.js.map +1 -0
- package/dist/cli/shared/SpinnerSlot.d.ts +14 -0
- package/dist/cli/shared/SpinnerSlot.js +63 -0
- package/dist/cli/shared/SpinnerSlot.js.map +1 -0
- package/dist/cli/shared/Theme.d.ts +1 -1
- package/dist/cli/shared/Theme.js +136 -92
- package/dist/cli/shared/Theme.js.map +1 -0
- package/dist/cli/shared/WhaleBanner.js +99 -11
- package/dist/cli/shared/WhaleBanner.js.map +1 -0
- package/dist/cli/shared/markdown.d.ts +3 -1
- package/dist/cli/shared/markdown.js +736 -674
- package/dist/cli/shared/markdown.js.map +1 -0
- package/dist/cli/shared/marked-terminal.d.js +2 -0
- package/dist/cli/shared/marked-terminal.d.js.map +1 -0
- package/dist/cli/shared/theme-manager.js +99 -90
- package/dist/cli/shared/theme-manager.js.map +1 -0
- package/dist/cli/shared/theme-presets.js +256 -254
- package/dist/cli/shared/theme-presets.js.map +1 -0
- package/dist/cli/status/StatusApp.js +235 -86
- package/dist/cli/status/StatusApp.js.map +1 -0
- package/dist/cli/stores/StoreApp.js +275 -65
- package/dist/cli/stores/StoreApp.js.map +1 -0
- package/dist/index.d.ts +2 -2
- package/dist/index.js +509 -396
- package/dist/index.js.map +1 -0
- package/dist/local-agent/connection.d.ts +2 -2
- package/dist/local-agent/connection.js +352 -293
- package/dist/local-agent/connection.js.map +1 -0
- package/dist/local-agent/discovery.js +259 -122
- package/dist/local-agent/discovery.js.map +1 -0
- package/dist/local-agent/executor.js +216 -193
- package/dist/local-agent/executor.js.map +1 -0
- package/dist/local-agent/index.d.ts +2 -2
- package/dist/local-agent/index.js +156 -156
- package/dist/local-agent/index.js.map +1 -0
- package/dist/node/adapters/base.js +18 -8
- package/dist/node/adapters/base.js.map +1 -0
- package/dist/node/adapters/discord.js +286 -275
- package/dist/node/adapters/discord.js.map +1 -0
- package/dist/node/adapters/email.js +189 -202
- package/dist/node/adapters/email.js.map +1 -0
- package/dist/node/adapters/imessage.js +145 -142
- package/dist/node/adapters/imessage.js.map +1 -0
- package/dist/node/adapters/slack.js +237 -236
- package/dist/node/adapters/slack.js.map +1 -0
- package/dist/node/adapters/sms.js +149 -151
- package/dist/node/adapters/sms.js.map +1 -0
- package/dist/node/adapters/telegram.js +88 -92
- package/dist/node/adapters/telegram.js.map +1 -0
- package/dist/node/adapters/webchat.js +160 -136
- package/dist/node/adapters/webchat.js.map +1 -0
- package/dist/node/adapters/whatsapp.js +212 -215
- package/dist/node/adapters/whatsapp.js.map +1 -0
- package/dist/node/cli.js +884 -653
- package/dist/node/cli.js.map +1 -0
- package/dist/node/config.js +20 -18
- package/dist/node/config.js.map +1 -0
- package/dist/node/gateway-client.js +191 -181
- package/dist/node/gateway-client.js.map +1 -0
- package/dist/node/portal/clipboard.js +161 -130
- package/dist/node/portal/clipboard.js.map +1 -0
- package/dist/node/portal/discovery.js +51 -45
- package/dist/node/portal/discovery.js.map +1 -0
- package/dist/node/portal/forward.js +64 -58
- package/dist/node/portal/forward.js.map +1 -0
- package/dist/node/portal/index.js +246 -221
- package/dist/node/portal/index.js.map +1 -0
- package/dist/node/portal/multiplexer.js +192 -182
- package/dist/node/portal/multiplexer.js.map +1 -0
- package/dist/node/portal/permissions.js +102 -70
- package/dist/node/portal/permissions.js.map +1 -0
- package/dist/node/portal/protocol.js +153 -116
- package/dist/node/portal/protocol.js.map +1 -0
- package/dist/node/portal/screen.js +80 -69
- package/dist/node/portal/screen.js.map +1 -0
- package/dist/node/portal/session.js +124 -117
- package/dist/node/portal/session.js.map +1 -0
- package/dist/node/portal/shell.js +140 -113
- package/dist/node/portal/shell.js.map +1 -0
- package/dist/node/portal/stream.js +77 -75
- package/dist/node/portal/stream.js.map +1 -0
- package/dist/node/portal/transfer.js +190 -167
- package/dist/node/portal/transfer.js.map +1 -0
- package/dist/node/portal/ui.js +124 -99
- package/dist/node/portal/ui.js.map +1 -0
- package/dist/node/remote-desktop/compile-helper.js +50 -45
- package/dist/node/remote-desktop/compile-helper.js.map +1 -0
- package/dist/node/remote-desktop/index.js +215 -187
- package/dist/node/remote-desktop/index.js.map +1 -0
- package/dist/node/remote-desktop/protocol.js +45 -29
- package/dist/node/remote-desktop/protocol.js.map +1 -0
- package/dist/node/runtime.js +493 -410
- package/dist/node/runtime.js.map +1 -0
- package/dist/server/handlers/__test-utils__/test-db.js +39 -89
- package/dist/server/handlers/__test-utils__/test-db.js.map +1 -0
- package/dist/server/handlers/analytics.js +467 -261
- package/dist/server/handlers/analytics.js.map +1 -0
- package/dist/server/handlers/api-docs.js +1030 -895
- package/dist/server/handlers/api-docs.js.map +1 -0
- package/dist/server/handlers/api-keys.js +291 -242
- package/dist/server/handlers/api-keys.js.map +1 -0
- package/dist/server/handlers/billing.js +330 -239
- package/dist/server/handlers/billing.js.map +1 -0
- package/dist/server/handlers/browser.js +468 -395
- package/dist/server/handlers/browser.js.map +1 -0
- package/dist/server/handlers/catalog.js +1377 -978
- package/dist/server/handlers/catalog.js.map +1 -0
- package/dist/server/handlers/clickhouse.js +157 -109
- package/dist/server/handlers/clickhouse.js.map +1 -0
- package/dist/server/handlers/comms.js +1439 -984
- package/dist/server/handlers/comms.js.map +1 -0
- package/dist/server/handlers/creations.js +461 -394
- package/dist/server/handlers/creations.js.map +1 -0
- package/dist/server/handlers/crm.js +1082 -791
- package/dist/server/handlers/crm.js.map +1 -0
- package/dist/server/handlers/discovery.js +251 -232
- package/dist/server/handlers/discovery.js.map +1 -0
- package/dist/server/handlers/embeddings.js +241 -164
- package/dist/server/handlers/embeddings.js.map +1 -0
- package/dist/server/handlers/enrichment.js +887 -718
- package/dist/server/handlers/enrichment.js.map +1 -0
- package/dist/server/handlers/image-gen.js +467 -376
- package/dist/server/handlers/image-gen.js.map +1 -0
- package/dist/server/handlers/inventory.js +797 -424
- package/dist/server/handlers/inventory.js.map +1 -0
- package/dist/server/handlers/kali.js +272 -230
- package/dist/server/handlers/kali.js.map +1 -0
- package/dist/server/handlers/llm-providers.js +803 -580
- package/dist/server/handlers/llm-providers.js.map +1 -0
- package/dist/server/handlers/local-agent.js +133 -105
- package/dist/server/handlers/local-agent.js.map +1 -0
- package/dist/server/handlers/media.js +1179 -857
- package/dist/server/handlers/media.js.map +1 -0
- package/dist/server/handlers/meta-ads.js +2669 -2093
- package/dist/server/handlers/meta-ads.js.map +1 -0
- package/dist/server/handlers/nodes.js +1321 -913
- package/dist/server/handlers/nodes.js.map +1 -0
- package/dist/server/handlers/operations.js +183 -157
- package/dist/server/handlers/operations.js.map +1 -0
- package/dist/server/handlers/platform.js +346 -210
- package/dist/server/handlers/platform.js.map +1 -0
- package/dist/server/handlers/remove-bg.js +118 -86
- package/dist/server/handlers/remove-bg.js.map +1 -0
- package/dist/server/handlers/storefront.js +586 -446
- package/dist/server/handlers/storefront.js.map +1 -0
- package/dist/server/handlers/supply-chain.js +546 -326
- package/dist/server/handlers/supply-chain.js.map +1 -0
- package/dist/server/handlers/transcription.js +106 -97
- package/dist/server/handlers/transcription.js.map +1 -0
- package/dist/server/handlers/video-gen.js +593 -424
- package/dist/server/handlers/video-gen.js.map +1 -0
- package/dist/server/handlers/voice.js +1458 -1039
- package/dist/server/handlers/voice.js.map +1 -0
- package/dist/server/handlers/workflow-steps.js +2837 -2116
- package/dist/server/handlers/workflow-steps.js.map +1 -0
- package/dist/server/handlers/workflows.js +1630 -933
- package/dist/server/handlers/workflows.js.map +1 -0
- package/dist/server/index.js +3167 -2422
- package/dist/server/index.js.map +1 -0
- package/dist/server/lib/batch-client.js +471 -409
- package/dist/server/lib/batch-client.js.map +1 -0
- package/dist/server/lib/clickhouse-buffer.js +118 -104
- package/dist/server/lib/clickhouse-buffer.js.map +1 -0
- package/dist/server/lib/clickhouse-client.js +107 -107
- package/dist/server/lib/clickhouse-client.js.map +1 -0
- package/dist/server/lib/coa-renderer.js +1786 -356
- package/dist/server/lib/coa-renderer.js.map +1 -0
- package/dist/server/lib/code-worker-pool.js +227 -177
- package/dist/server/lib/code-worker-pool.js.map +1 -0
- package/dist/server/lib/code-worker.js +174 -164
- package/dist/server/lib/code-worker.js.map +1 -0
- package/dist/server/lib/compaction-service.d.ts +2 -12
- package/dist/server/lib/compaction-service.js +74 -184
- package/dist/server/lib/compaction-service.js.map +1 -0
- package/dist/server/lib/logger.js +36 -24
- package/dist/server/lib/logger.js.map +1 -0
- package/dist/server/lib/otel.js +101 -80
- package/dist/server/lib/otel.js.map +1 -0
- package/dist/server/lib/pdf-renderer.js +952 -788
- package/dist/server/lib/pdf-renderer.js.map +1 -0
- package/dist/server/lib/prompt-sanitizer.js +188 -108
- package/dist/server/lib/prompt-sanitizer.js.map +1 -0
- package/dist/server/lib/provider-capabilities.js +136 -138
- package/dist/server/lib/provider-capabilities.js.map +1 -0
- package/dist/server/lib/provider-failover.js +190 -168
- package/dist/server/lib/provider-failover.js.map +1 -0
- package/dist/server/lib/rate-limiter.js +186 -117
- package/dist/server/lib/rate-limiter.js.map +1 -0
- package/dist/server/lib/react-pdf-layout.js +551 -382
- package/dist/server/lib/react-pdf-layout.js.map +1 -0
- package/dist/server/lib/server-agent-loop.d.ts +4 -1
- package/dist/server/lib/server-agent-loop.js +906 -634
- package/dist/server/lib/server-agent-loop.js.map +1 -0
- package/dist/server/lib/server-subagent.js +260 -164
- package/dist/server/lib/server-subagent.js.map +1 -0
- package/dist/server/lib/session-checkpoint.js +105 -96
- package/dist/server/lib/session-checkpoint.js.map +1 -0
- package/dist/server/lib/ssrf-guard.js +193 -184
- package/dist/server/lib/ssrf-guard.js.map +1 -0
- package/dist/server/lib/supabase-client.js +94 -82
- package/dist/server/lib/supabase-client.js.map +1 -0
- package/dist/server/lib/template-resolver.js +154 -176
- package/dist/server/lib/template-resolver.js.map +1 -0
- package/dist/server/lib/utils.js +242 -133
- package/dist/server/lib/utils.js.map +1 -0
- package/dist/server/local-agent-gateway.d.ts +2 -2
- package/dist/server/local-agent-gateway.js +785 -627
- package/dist/server/local-agent-gateway.js.map +1 -0
- package/dist/server/providers/anthropic.js +250 -172
- package/dist/server/providers/anthropic.js.map +1 -0
- package/dist/server/providers/bedrock.js +217 -158
- package/dist/server/providers/bedrock.js.map +1 -0
- package/dist/server/providers/gemini.js +548 -418
- package/dist/server/providers/gemini.js.map +1 -0
- package/dist/server/providers/openai.js +571 -437
- package/dist/server/providers/openai.js.map +1 -0
- package/dist/server/providers/registry.js +23 -18
- package/dist/server/providers/registry.js.map +1 -0
- package/dist/server/providers/shared.js +123 -95
- package/dist/server/providers/shared.js.map +1 -0
- package/dist/server/providers/types.js +1 -11
- package/dist/server/providers/types.js.map +1 -0
- package/dist/server/proxy-handlers.js +209 -165
- package/dist/server/proxy-handlers.js.map +1 -0
- package/dist/server/tool-router.js +959 -599
- package/dist/server/tool-router.js.map +1 -0
- package/dist/server/validation.js +248 -188
- package/dist/server/validation.js.map +1 -0
- package/dist/server/worker.js +202 -133
- package/dist/server/worker.js.map +1 -0
- package/dist/setup.d.ts +2 -2
- package/dist/setup.js +151 -147
- package/dist/setup.js.map +1 -0
- package/dist/shared/agent-core.d.ts +115 -26
- package/dist/shared/agent-core.js +956 -522
- package/dist/shared/agent-core.js.map +1 -0
- package/dist/shared/anthropic-types.js +1 -6
- package/dist/shared/anthropic-types.js.map +1 -0
- package/dist/shared/api-client.d.ts +16 -9
- package/dist/shared/api-client.js +419 -327
- package/dist/shared/api-client.js.map +1 -0
- package/dist/shared/compaction.d.ts +36 -0
- package/dist/shared/compaction.js +138 -0
- package/dist/shared/compaction.js.map +1 -0
- package/dist/shared/constants.js +67 -64
- package/dist/shared/constants.js.map +1 -0
- package/dist/shared/sse-parser.js +221 -219
- package/dist/shared/sse-parser.js.map +1 -0
- package/dist/shared/tool-dispatch.d.ts +4 -0
- package/dist/shared/tool-dispatch.js +226 -165
- package/dist/shared/tool-dispatch.js.map +1 -0
- package/dist/shared/types.js +1 -6
- package/dist/shared/types.js.map +1 -0
- package/dist/types/cli-highlight.d.js +2 -0
- package/dist/types/cli-highlight.d.js.map +1 -0
- package/dist/types/diff.d.js +2 -0
- package/dist/types/diff.d.js.map +1 -0
- package/dist/types/pdf-parse.d.js +2 -0
- package/dist/types/pdf-parse.d.js.map +1 -0
- package/dist/updater.d.ts +1 -1
- package/dist/updater.js +118 -92
- package/dist/updater.js.map +1 -0
- package/dist/webchat/widget.js +227 -380
- package/dist/webchat/widget.js.map +1 -0
- package/package.json +22 -10
- package/vendor/ink/build/ansi-tokenizer.d.ts +38 -0
- package/vendor/ink/build/ansi-tokenizer.js +316 -0
- package/vendor/ink/build/ansi-tokenizer.js.map +1 -0
- package/vendor/ink/build/apply-styles.js +175 -0
- package/vendor/ink/build/build-layout.js +77 -0
- package/vendor/ink/build/calculate-wrapped-text.js +53 -0
- package/vendor/ink/build/colorize.d.ts +3 -0
- package/vendor/ink/build/colorize.js +48 -0
- package/vendor/ink/build/colorize.js.map +1 -0
- package/vendor/ink/build/components/AccessibilityContext.d.ts +3 -0
- package/vendor/ink/build/components/AccessibilityContext.js +5 -0
- package/vendor/ink/build/components/AccessibilityContext.js.map +1 -0
- package/vendor/ink/build/components/App.d.ts +18 -0
- package/vendor/ink/build/components/App.js +351 -0
- package/vendor/ink/build/components/App.js.map +1 -0
- package/vendor/ink/build/components/AppContext.d.ts +15 -0
- package/vendor/ink/build/components/AppContext.js +11 -0
- package/vendor/ink/build/components/AppContext.js.map +1 -0
- package/vendor/ink/build/components/BackgroundContext.d.ts +4 -0
- package/vendor/ink/build/components/BackgroundContext.js +3 -0
- package/vendor/ink/build/components/BackgroundContext.js.map +1 -0
- package/vendor/ink/build/components/Box.d.ts +117 -0
- package/vendor/ink/build/components/Box.js +34 -0
- package/vendor/ink/build/components/Box.js.map +1 -0
- package/vendor/ink/build/components/Color.js +62 -0
- package/vendor/ink/build/components/Cursor.d.ts +83 -0
- package/vendor/ink/build/components/Cursor.js +53 -0
- package/vendor/ink/build/components/Cursor.js.map +1 -0
- package/vendor/ink/build/components/CursorContext.d.ts +11 -0
- package/vendor/ink/build/components/CursorContext.js +8 -0
- package/vendor/ink/build/components/CursorContext.js.map +1 -0
- package/vendor/ink/build/components/ErrorBoundary.d.ts +18 -0
- package/vendor/ink/build/components/ErrorBoundary.js +23 -0
- package/vendor/ink/build/components/ErrorBoundary.js.map +1 -0
- package/vendor/ink/build/components/ErrorOverview.d.ts +6 -0
- package/vendor/ink/build/components/ErrorOverview.js +84 -0
- package/vendor/ink/build/components/ErrorOverview.js.map +1 -0
- package/vendor/ink/build/components/FocusContext.d.ts +16 -0
- package/vendor/ink/build/components/FocusContext.js +17 -0
- package/vendor/ink/build/components/FocusContext.js.map +1 -0
- package/vendor/ink/build/components/Newline.d.ts +13 -0
- package/vendor/ink/build/components/Newline.js +8 -0
- package/vendor/ink/build/components/Newline.js.map +1 -0
- package/vendor/ink/build/components/Spacer.d.ts +7 -0
- package/vendor/ink/build/components/Spacer.js +11 -0
- package/vendor/ink/build/components/Spacer.js.map +1 -0
- package/vendor/ink/build/components/Static.d.ts +24 -0
- package/vendor/ink/build/components/Static.js +28 -0
- package/vendor/ink/build/components/Static.js.map +1 -0
- package/vendor/ink/build/components/StderrContext.d.ts +15 -0
- package/vendor/ink/build/components/StderrContext.js +13 -0
- package/vendor/ink/build/components/StderrContext.js.map +1 -0
- package/vendor/ink/build/components/StdinContext.d.ts +22 -0
- package/vendor/ink/build/components/StdinContext.js +19 -0
- package/vendor/ink/build/components/StdinContext.js.map +1 -0
- package/vendor/ink/build/components/StdoutContext.d.ts +15 -0
- package/vendor/ink/build/components/StdoutContext.js +13 -0
- package/vendor/ink/build/components/StdoutContext.js.map +1 -0
- package/vendor/ink/build/components/Text.d.ts +55 -0
- package/vendor/ink/build/components/Text.js +50 -0
- package/vendor/ink/build/components/Text.js.map +1 -0
- package/vendor/ink/build/components/Transform.d.ts +16 -0
- package/vendor/ink/build/components/Transform.js +15 -0
- package/vendor/ink/build/components/Transform.js.map +1 -0
- package/vendor/ink/build/cursor-helpers.d.ts +38 -0
- package/vendor/ink/build/cursor-helpers.js +56 -0
- package/vendor/ink/build/cursor-helpers.js.map +1 -0
- package/vendor/ink/build/devtools-window-polyfill.d.ts +1 -0
- package/vendor/ink/build/devtools-window-polyfill.js +65 -0
- package/vendor/ink/build/devtools-window-polyfill.js.map +1 -0
- package/vendor/ink/build/devtools.d.ts +1 -0
- package/vendor/ink/build/devtools.js +11 -0
- package/vendor/ink/build/devtools.js.map +1 -0
- package/vendor/ink/build/dom.d.ts +56 -0
- package/vendor/ink/build/dom.js +124 -0
- package/vendor/ink/build/dom.js.map +1 -0
- package/vendor/ink/build/experimental/apply-style.js +140 -0
- package/vendor/ink/build/experimental/dom.js +123 -0
- package/vendor/ink/build/experimental/output.js +91 -0
- package/vendor/ink/build/experimental/reconciler.js +141 -0
- package/vendor/ink/build/experimental/renderer.js +81 -0
- package/vendor/ink/build/get-max-width.d.ts +3 -0
- package/vendor/ink/build/get-max-width.js +10 -0
- package/vendor/ink/build/get-max-width.js.map +1 -0
- package/vendor/ink/build/hooks/use-app.d.ts +5 -0
- package/vendor/ink/build/hooks/use-app.js +8 -0
- package/vendor/ink/build/hooks/use-app.js.map +1 -0
- package/vendor/ink/build/hooks/use-cursor.d.ts +12 -0
- package/vendor/ink/build/hooks/use-cursor.js +29 -0
- package/vendor/ink/build/hooks/use-cursor.js.map +1 -0
- package/vendor/ink/build/hooks/use-focus-manager.d.ts +28 -0
- package/vendor/ink/build/hooks/use-focus-manager.js +17 -0
- package/vendor/ink/build/hooks/use-focus-manager.js.map +1 -0
- package/vendor/ink/build/hooks/use-focus.d.ts +29 -0
- package/vendor/ink/build/hooks/use-focus.js +42 -0
- package/vendor/ink/build/hooks/use-focus.js.map +1 -0
- package/vendor/ink/build/hooks/use-input.d.ts +131 -0
- package/vendor/ink/build/hooks/use-input.js +124 -0
- package/vendor/ink/build/hooks/use-input.js.map +1 -0
- package/vendor/ink/build/hooks/use-is-screen-reader-enabled.d.ts +5 -0
- package/vendor/ink/build/hooks/use-is-screen-reader-enabled.js +11 -0
- package/vendor/ink/build/hooks/use-is-screen-reader-enabled.js.map +1 -0
- package/vendor/ink/build/hooks/use-stderr.d.ts +5 -0
- package/vendor/ink/build/hooks/use-stderr.js +8 -0
- package/vendor/ink/build/hooks/use-stderr.js.map +1 -0
- package/vendor/ink/build/hooks/use-stdin.d.ts +5 -0
- package/vendor/ink/build/hooks/use-stdin.js +8 -0
- package/vendor/ink/build/hooks/use-stdin.js.map +1 -0
- package/vendor/ink/build/hooks/use-stdout.d.ts +5 -0
- package/vendor/ink/build/hooks/use-stdout.js +8 -0
- package/vendor/ink/build/hooks/use-stdout.js.map +1 -0
- package/vendor/ink/build/hooks/useInput.js +38 -0
- package/vendor/ink/build/index.d.ts +34 -0
- package/vendor/ink/build/index.js +20 -0
- package/vendor/ink/build/index.js.map +1 -0
- package/vendor/ink/build/ink.d.ts +90 -0
- package/vendor/ink/build/ink.js +654 -0
- package/vendor/ink/build/ink.js.map +1 -0
- package/vendor/ink/build/input-parser.d.ts +7 -0
- package/vendor/ink/build/input-parser.js +154 -0
- package/vendor/ink/build/input-parser.js.map +1 -0
- package/vendor/ink/build/instance.js +205 -0
- package/vendor/ink/build/instances.d.ts +3 -0
- package/vendor/ink/build/instances.js +8 -0
- package/vendor/ink/build/instances.js.map +1 -0
- package/vendor/ink/build/kitty-keyboard.d.ts +23 -0
- package/vendor/ink/build/kitty-keyboard.js +32 -0
- package/vendor/ink/build/kitty-keyboard.js.map +1 -0
- package/vendor/ink/build/layout.d.ts +7 -0
- package/vendor/ink/build/layout.js +33 -0
- package/vendor/ink/build/layout.js.map +1 -0
- package/vendor/ink/build/log-update.d.ts +19 -0
- package/vendor/ink/build/log-update.js +243 -0
- package/vendor/ink/build/log-update.js.map +1 -0
- package/vendor/ink/build/measure-element.d.ts +16 -0
- package/vendor/ink/build/measure-element.js +9 -0
- package/vendor/ink/build/measure-element.js.map +1 -0
- package/vendor/ink/build/measure-text.d.ts +6 -0
- package/vendor/ink/build/measure-text.js +21 -0
- package/vendor/ink/build/measure-text.js.map +1 -0
- package/vendor/ink/build/options.d.ts +52 -0
- package/vendor/ink/build/options.js +2 -0
- package/vendor/ink/build/options.js.map +1 -0
- package/vendor/ink/build/output.d.ts +35 -0
- package/vendor/ink/build/output.js +183 -0
- package/vendor/ink/build/output.js.map +1 -0
- package/vendor/ink/build/parse-keypress.d.ts +22 -0
- package/vendor/ink/build/parse-keypress.js +493 -0
- package/vendor/ink/build/parse-keypress.js.map +1 -0
- package/vendor/ink/build/reconciler.d.ts +4 -0
- package/vendor/ink/build/reconciler.js +274 -0
- package/vendor/ink/build/reconciler.js.map +1 -0
- package/vendor/ink/build/render-background.d.ts +4 -0
- package/vendor/ink/build/render-background.js +25 -0
- package/vendor/ink/build/render-background.js.map +1 -0
- package/vendor/ink/build/render-border.d.ts +4 -0
- package/vendor/ink/build/render-border.js +73 -0
- package/vendor/ink/build/render-border.js.map +1 -0
- package/vendor/ink/build/render-node-to-output.d.ts +14 -0
- package/vendor/ink/build/render-node-to-output.js +147 -0
- package/vendor/ink/build/render-node-to-output.js.map +1 -0
- package/vendor/ink/build/render-to-string.d.ts +38 -0
- package/vendor/ink/build/render-to-string.js +115 -0
- package/vendor/ink/build/render-to-string.js.map +1 -0
- package/vendor/ink/build/render.d.ts +121 -0
- package/vendor/ink/build/render.js +55 -0
- package/vendor/ink/build/render.js.map +1 -0
- package/vendor/ink/build/renderer.d.ts +8 -0
- package/vendor/ink/build/renderer.js +55 -0
- package/vendor/ink/build/renderer.js.map +1 -0
- package/vendor/ink/build/sanitize-ansi.d.ts +2 -0
- package/vendor/ink/build/sanitize-ansi.js +27 -0
- package/vendor/ink/build/sanitize-ansi.js.map +1 -0
- package/vendor/ink/build/screen-reader-update.d.ts +13 -0
- package/vendor/ink/build/screen-reader-update.js +38 -0
- package/vendor/ink/build/screen-reader-update.js.map +1 -0
- package/vendor/ink/build/squash-text-nodes.d.ts +3 -0
- package/vendor/ink/build/squash-text-nodes.js +36 -0
- package/vendor/ink/build/squash-text-nodes.js.map +1 -0
- package/vendor/ink/build/styles.d.ts +240 -0
- package/vendor/ink/build/styles.js +232 -0
- package/vendor/ink/build/styles.js.map +1 -0
- package/vendor/ink/build/utils.d.ts +2 -0
- package/vendor/ink/build/utils.js +4 -0
- package/vendor/ink/build/utils.js.map +1 -0
- package/vendor/ink/build/wrap-text.d.ts +3 -0
- package/vendor/ink/build/wrap-text.js +31 -0
- package/vendor/ink/build/wrap-text.js.map +1 -0
- package/vendor/ink/build/write-synchronized.d.ts +4 -0
- package/vendor/ink/build/write-synchronized.js +7 -0
- package/vendor/ink/build/write-synchronized.js.map +1 -0
- package/vendor/ink/license +10 -0
- package/vendor/ink/node_modules/@types/node/LICENSE +21 -0
- package/vendor/ink/node_modules/@types/node/README.md +15 -0
- package/vendor/ink/node_modules/@types/node/assert/strict.d.ts +105 -0
- package/vendor/ink/node_modules/@types/node/assert.d.ts +955 -0
- package/vendor/ink/node_modules/@types/node/async_hooks.d.ts +623 -0
- package/vendor/ink/node_modules/@types/node/buffer.buffer.d.ts +466 -0
- package/vendor/ink/node_modules/@types/node/buffer.d.ts +1810 -0
- package/vendor/ink/node_modules/@types/node/child_process.d.ts +1428 -0
- package/vendor/ink/node_modules/@types/node/cluster.d.ts +486 -0
- package/vendor/ink/node_modules/@types/node/compatibility/iterators.d.ts +21 -0
- package/vendor/ink/node_modules/@types/node/console.d.ts +151 -0
- package/vendor/ink/node_modules/@types/node/constants.d.ts +20 -0
- package/vendor/ink/node_modules/@types/node/crypto.d.ts +4065 -0
- package/vendor/ink/node_modules/@types/node/dgram.d.ts +564 -0
- package/vendor/ink/node_modules/@types/node/diagnostics_channel.d.ts +576 -0
- package/vendor/ink/node_modules/@types/node/dns/promises.d.ts +503 -0
- package/vendor/ink/node_modules/@types/node/dns.d.ts +922 -0
- package/vendor/ink/node_modules/@types/node/domain.d.ts +166 -0
- package/vendor/ink/node_modules/@types/node/events.d.ts +1054 -0
- package/vendor/ink/node_modules/@types/node/fs/promises.d.ts +1329 -0
- package/vendor/ink/node_modules/@types/node/fs.d.ts +4676 -0
- package/vendor/ink/node_modules/@types/node/globals.d.ts +150 -0
- package/vendor/ink/node_modules/@types/node/globals.typedarray.d.ts +101 -0
- package/vendor/ink/node_modules/@types/node/http.d.ts +2167 -0
- package/vendor/ink/node_modules/@types/node/http2.d.ts +2480 -0
- package/vendor/ink/node_modules/@types/node/https.d.ts +405 -0
- package/vendor/ink/node_modules/@types/node/index.d.ts +115 -0
- package/vendor/ink/node_modules/@types/node/inspector/promises.d.ts +41 -0
- package/vendor/ink/node_modules/@types/node/inspector.d.ts +224 -0
- package/vendor/ink/node_modules/@types/node/inspector.generated.d.ts +4226 -0
- package/vendor/ink/node_modules/@types/node/module.d.ts +819 -0
- package/vendor/ink/node_modules/@types/node/net.d.ts +933 -0
- package/vendor/ink/node_modules/@types/node/os.d.ts +507 -0
- package/vendor/ink/node_modules/@types/node/package.json +155 -0
- package/vendor/ink/node_modules/@types/node/path/posix.d.ts +8 -0
- package/vendor/ink/node_modules/@types/node/path/win32.d.ts +8 -0
- package/vendor/ink/node_modules/@types/node/path.d.ts +187 -0
- package/vendor/ink/node_modules/@types/node/perf_hooks.d.ts +643 -0
- package/vendor/ink/node_modules/@types/node/process.d.ts +2156 -0
- package/vendor/ink/node_modules/@types/node/punycode.d.ts +117 -0
- package/vendor/ink/node_modules/@types/node/querystring.d.ts +152 -0
- package/vendor/ink/node_modules/@types/node/quic.d.ts +910 -0
- package/vendor/ink/node_modules/@types/node/readline/promises.d.ts +161 -0
- package/vendor/ink/node_modules/@types/node/readline.d.ts +541 -0
- package/vendor/ink/node_modules/@types/node/repl.d.ts +415 -0
- package/vendor/ink/node_modules/@types/node/sea.d.ts +162 -0
- package/vendor/ink/node_modules/@types/node/sqlite.d.ts +955 -0
- package/vendor/ink/node_modules/@types/node/stream/consumers.d.ts +38 -0
- package/vendor/ink/node_modules/@types/node/stream/promises.d.ts +211 -0
- package/vendor/ink/node_modules/@types/node/stream/web.d.ts +296 -0
- package/vendor/ink/node_modules/@types/node/stream.d.ts +1760 -0
- package/vendor/ink/node_modules/@types/node/string_decoder.d.ts +67 -0
- package/vendor/ink/node_modules/@types/node/test/reporters.d.ts +96 -0
- package/vendor/ink/node_modules/@types/node/test.d.ts +2240 -0
- package/vendor/ink/node_modules/@types/node/timers/promises.d.ts +108 -0
- package/vendor/ink/node_modules/@types/node/timers.d.ts +159 -0
- package/vendor/ink/node_modules/@types/node/tls.d.ts +1198 -0
- package/vendor/ink/node_modules/@types/node/trace_events.d.ts +197 -0
- package/vendor/ink/node_modules/@types/node/ts5.6/buffer.buffer.d.ts +462 -0
- package/vendor/ink/node_modules/@types/node/ts5.6/compatibility/float16array.d.ts +71 -0
- package/vendor/ink/node_modules/@types/node/ts5.6/globals.typedarray.d.ts +36 -0
- package/vendor/ink/node_modules/@types/node/ts5.6/index.d.ts +117 -0
- package/vendor/ink/node_modules/@types/node/ts5.7/compatibility/float16array.d.ts +72 -0
- package/vendor/ink/node_modules/@types/node/ts5.7/index.d.ts +117 -0
- package/vendor/ink/node_modules/@types/node/tty.d.ts +250 -0
- package/vendor/ink/node_modules/@types/node/url.d.ts +519 -0
- package/vendor/ink/node_modules/@types/node/util/types.d.ts +558 -0
- package/vendor/ink/node_modules/@types/node/util.d.ts +1662 -0
- package/vendor/ink/node_modules/@types/node/v8.d.ts +983 -0
- package/vendor/ink/node_modules/@types/node/vm.d.ts +1208 -0
- package/vendor/ink/node_modules/@types/node/wasi.d.ts +202 -0
- package/vendor/ink/node_modules/@types/node/web-globals/abortcontroller.d.ts +59 -0
- package/vendor/ink/node_modules/@types/node/web-globals/blob.d.ts +23 -0
- package/vendor/ink/node_modules/@types/node/web-globals/console.d.ts +9 -0
- package/vendor/ink/node_modules/@types/node/web-globals/crypto.d.ts +39 -0
- package/vendor/ink/node_modules/@types/node/web-globals/domexception.d.ts +68 -0
- package/vendor/ink/node_modules/@types/node/web-globals/encoding.d.ts +11 -0
- package/vendor/ink/node_modules/@types/node/web-globals/events.d.ts +106 -0
- package/vendor/ink/node_modules/@types/node/web-globals/fetch.d.ts +69 -0
- package/vendor/ink/node_modules/@types/node/web-globals/importmeta.d.ts +13 -0
- package/vendor/ink/node_modules/@types/node/web-globals/messaging.d.ts +23 -0
- package/vendor/ink/node_modules/@types/node/web-globals/navigator.d.ts +25 -0
- package/vendor/ink/node_modules/@types/node/web-globals/performance.d.ts +45 -0
- package/vendor/ink/node_modules/@types/node/web-globals/storage.d.ts +24 -0
- package/vendor/ink/node_modules/@types/node/web-globals/streams.d.ts +115 -0
- package/vendor/ink/node_modules/@types/node/web-globals/timers.d.ts +44 -0
- package/vendor/ink/node_modules/@types/node/web-globals/url.d.ts +24 -0
- package/vendor/ink/node_modules/@types/node/worker_threads.d.ts +717 -0
- package/vendor/ink/node_modules/@types/node/zlib.d.ts +618 -0
- package/vendor/ink/node_modules/node-pty/LICENSE +69 -0
- package/vendor/ink/node_modules/node-pty/README.md +164 -0
- package/vendor/ink/node_modules/node-pty/binding.gyp +150 -0
- package/vendor/ink/node_modules/node-pty/lib/conpty_console_list_agent.js +25 -0
- package/vendor/ink/node_modules/node-pty/lib/eventEmitter2.js +47 -0
- package/vendor/ink/node_modules/node-pty/lib/index.js +52 -0
- package/vendor/ink/node_modules/node-pty/lib/interfaces.js +7 -0
- package/vendor/ink/node_modules/node-pty/lib/shared/conout.js +11 -0
- package/vendor/ink/node_modules/node-pty/lib/terminal.js +190 -0
- package/vendor/ink/node_modules/node-pty/lib/types.js +7 -0
- package/vendor/ink/node_modules/node-pty/lib/unixTerminal.js +349 -0
- package/vendor/ink/node_modules/node-pty/lib/utils.js +39 -0
- package/vendor/ink/node_modules/node-pty/lib/windowsConoutConnection.js +125 -0
- package/vendor/ink/node_modules/node-pty/lib/windowsPtyAgent.js +287 -0
- package/vendor/ink/node_modules/node-pty/lib/windowsTerminal.js +201 -0
- package/vendor/ink/node_modules/node-pty/lib/worker/conoutSocketWorker.js +22 -0
- package/vendor/ink/node_modules/node-pty/package.json +65 -0
- package/vendor/ink/node_modules/node-pty/prebuilds/darwin-arm64/pty.node +0 -0
- package/vendor/ink/node_modules/node-pty/prebuilds/darwin-arm64/spawn-helper +0 -0
- package/vendor/ink/node_modules/node-pty/prebuilds/darwin-x64/pty.node +0 -0
- package/vendor/ink/node_modules/node-pty/prebuilds/darwin-x64/spawn-helper +0 -0
- package/vendor/ink/node_modules/node-pty/prebuilds/linux-arm64/pty.node +0 -0
- package/vendor/ink/node_modules/node-pty/prebuilds/linux-x64/pty.node +0 -0
- package/vendor/ink/node_modules/node-pty/prebuilds/win32-arm64/conpty/OpenConsole.exe +0 -0
- package/vendor/ink/node_modules/node-pty/prebuilds/win32-arm64/conpty/conpty.dll +0 -0
- package/vendor/ink/node_modules/node-pty/prebuilds/win32-arm64/conpty.node +0 -0
- package/vendor/ink/node_modules/node-pty/prebuilds/win32-arm64/conpty.pdb +0 -0
- package/vendor/ink/node_modules/node-pty/prebuilds/win32-arm64/conpty_console_list.node +0 -0
- package/vendor/ink/node_modules/node-pty/prebuilds/win32-arm64/conpty_console_list.pdb +0 -0
- package/vendor/ink/node_modules/node-pty/prebuilds/win32-x64/conpty/OpenConsole.exe +0 -0
- package/vendor/ink/node_modules/node-pty/prebuilds/win32-x64/conpty/conpty.dll +0 -0
- package/vendor/ink/node_modules/node-pty/prebuilds/win32-x64/conpty.node +0 -0
- package/vendor/ink/node_modules/node-pty/prebuilds/win32-x64/conpty.pdb +0 -0
- package/vendor/ink/node_modules/node-pty/prebuilds/win32-x64/conpty_console_list.node +0 -0
- package/vendor/ink/node_modules/node-pty/prebuilds/win32-x64/conpty_console_list.pdb +0 -0
- package/vendor/ink/node_modules/node-pty/scripts/post-install.js +76 -0
- package/vendor/ink/node_modules/node-pty/scripts/prebuild.js +34 -0
- package/vendor/ink/node_modules/node-pty/src/unix/pty.cc +875 -0
- package/vendor/ink/node_modules/node-pty/src/unix/spawn-helper.cc +23 -0
- package/vendor/ink/node_modules/node-pty/src/win/conpty.cc +582 -0
- package/vendor/ink/node_modules/node-pty/src/win/conpty.h +41 -0
- package/vendor/ink/node_modules/node-pty/src/win/conpty_console_list.cc +44 -0
- package/vendor/ink/node_modules/node-pty/src/win/path_util.cc +95 -0
- package/vendor/ink/node_modules/node-pty/src/win/path_util.h +26 -0
- package/vendor/ink/node_modules/node-pty/third_party/conpty/1.23.251008001/win10-arm64/OpenConsole.exe +0 -0
- package/vendor/ink/node_modules/node-pty/third_party/conpty/1.23.251008001/win10-arm64/conpty.dll +0 -0
- package/vendor/ink/node_modules/node-pty/third_party/conpty/1.23.251008001/win10-x64/OpenConsole.exe +0 -0
- package/vendor/ink/node_modules/node-pty/third_party/conpty/1.23.251008001/win10-x64/conpty.dll +0 -0
- package/vendor/ink/node_modules/node-pty/typings/node-pty.d.ts +215 -0
- package/vendor/ink/node_modules/undici-types/LICENSE +21 -0
- package/vendor/ink/node_modules/undici-types/README.md +6 -0
- package/vendor/ink/node_modules/undici-types/agent.d.ts +32 -0
- package/vendor/ink/node_modules/undici-types/api.d.ts +43 -0
- package/vendor/ink/node_modules/undici-types/balanced-pool.d.ts +30 -0
- package/vendor/ink/node_modules/undici-types/cache-interceptor.d.ts +173 -0
- package/vendor/ink/node_modules/undici-types/cache.d.ts +36 -0
- package/vendor/ink/node_modules/undici-types/client-stats.d.ts +15 -0
- package/vendor/ink/node_modules/undici-types/client.d.ts +108 -0
- package/vendor/ink/node_modules/undici-types/connector.d.ts +34 -0
- package/vendor/ink/node_modules/undici-types/content-type.d.ts +21 -0
- package/vendor/ink/node_modules/undici-types/cookies.d.ts +30 -0
- package/vendor/ink/node_modules/undici-types/diagnostics-channel.d.ts +74 -0
- package/vendor/ink/node_modules/undici-types/dispatcher.d.ts +276 -0
- package/vendor/ink/node_modules/undici-types/env-http-proxy-agent.d.ts +22 -0
- package/vendor/ink/node_modules/undici-types/errors.d.ts +161 -0
- package/vendor/ink/node_modules/undici-types/eventsource.d.ts +66 -0
- package/vendor/ink/node_modules/undici-types/fetch.d.ts +211 -0
- package/vendor/ink/node_modules/undici-types/formdata.d.ts +108 -0
- package/vendor/ink/node_modules/undici-types/global-dispatcher.d.ts +9 -0
- package/vendor/ink/node_modules/undici-types/global-origin.d.ts +7 -0
- package/vendor/ink/node_modules/undici-types/h2c-client.d.ts +73 -0
- package/vendor/ink/node_modules/undici-types/handlers.d.ts +15 -0
- package/vendor/ink/node_modules/undici-types/header.d.ts +160 -0
- package/vendor/ink/node_modules/undici-types/index.d.ts +88 -0
- package/vendor/ink/node_modules/undici-types/interceptors.d.ts +73 -0
- package/vendor/ink/node_modules/undici-types/mock-agent.d.ts +68 -0
- package/vendor/ink/node_modules/undici-types/mock-call-history.d.ts +111 -0
- package/vendor/ink/node_modules/undici-types/mock-client.d.ts +27 -0
- package/vendor/ink/node_modules/undici-types/mock-errors.d.ts +12 -0
- package/vendor/ink/node_modules/undici-types/mock-interceptor.d.ts +94 -0
- package/vendor/ink/node_modules/undici-types/mock-pool.d.ts +27 -0
- package/vendor/ink/node_modules/undici-types/package.json +55 -0
- package/vendor/ink/node_modules/undici-types/patch.d.ts +29 -0
- package/vendor/ink/node_modules/undici-types/pool-stats.d.ts +19 -0
- package/vendor/ink/node_modules/undici-types/pool.d.ts +41 -0
- package/vendor/ink/node_modules/undici-types/proxy-agent.d.ts +29 -0
- package/vendor/ink/node_modules/undici-types/readable.d.ts +68 -0
- package/vendor/ink/node_modules/undici-types/retry-agent.d.ts +8 -0
- package/vendor/ink/node_modules/undici-types/retry-handler.d.ts +125 -0
- package/vendor/ink/node_modules/undici-types/round-robin-pool.d.ts +41 -0
- package/vendor/ink/node_modules/undici-types/snapshot-agent.d.ts +109 -0
- package/vendor/ink/node_modules/undici-types/util.d.ts +18 -0
- package/vendor/ink/node_modules/undici-types/utility.d.ts +7 -0
- package/vendor/ink/node_modules/undici-types/webidl.d.ts +341 -0
- package/vendor/ink/node_modules/undici-types/websocket.d.ts +186 -0
- package/vendor/ink/package.json +201 -0
- package/vendor/ink/readme.md +2636 -0
- package/bin/swag-agent.js +0 -9
- package/dist/server/lib/pg-rate-limiter.d.ts +0 -21
- package/dist/server/lib/pg-rate-limiter.js +0 -86
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"catalog.js","names":["sanitizeFilterValue","handleProducts","sb","args","storeId","sid","action","data","cats","error","catErr","from","select","eq","order","ascending","success","message","count","activeCount","head","neq","archivedCount","categories","product_status_summary","active","archived","tip","offset","q","limit","range","query","sq","String","or","category","category_id","catInput","catVal","matchedCatId","test","ilike","length","id","children","catIds","map","c","in","catalog_id","status","include_archived","featured","undefined","totalCount","flattened","row","rest","category_name","name","total","pid","product_id","product","pErr","single","fieldSchemas","pricingSchemas","inventory","field_schemas","fs","field_schema","pricing_schemas","ps","pricing_schema","insert","store_id","sku","description","short_description","type","cost_price","wholesale_price","stock_quantity","manage_stock","weight","tax_status","tax_class","pricing_data","featured_image","image_gallery","is_wholesale","wholesale_only","minimum_wholesale_quantity","catArg","primary_category_id","pricing_schema_id","field_schema_ids","Array","isArray","rows","fsId","field_schema_id","pricing_schema_ids","psId","productUpdates","inherited","categoryId","cat","upsert","onConflict","fields","schemaKeys","Set","fieldValues","f","key","add","default","agentValues","custom_fields","k","v","Object","entries","has","push","catFieldSchemas","cat2","filter","r","tiers","keys","update","full","updates","agentFV","pfs","fsDef","existing","base","filtered","Boolean","updateCatArg","hard","delete","deleted","parent_id","active_only","catId","fieldAssigns","pricingAssigns","a","sort_order","subcategories","slug","toLowerCase","replace","icon","display_order","i","is_active","public_only","schema_id","assignments","assigned_categories","catalogId","defaultCatalog","is_public","deleted_at","Date","toISOString","quality_tier","store","owner_user_id","vertical","is_default","settings","target","schemaType","schema_type","targetId","target_id","schemaId","targetTable","ownerCheck","ownerErr","schemaTable","schemaCheck","schemaErr","table","fkCol","schemaCol","schema","rebuilt","removed","all","allErr","nameMap","Map","p","normalized","trim","set","get","duplicates","_","products","normalizedName","normalized_name","created_at","skuMap","skuDupes","totalNameDupes","reduce","s","d","totalSkuDupes","lines","group","slice","join","primaryId","primary_product_id","secondaryId","secondary_product_id","primary","secondary","reassignResults","secInv","quantity","priRow","location_id","maybeSingle","updated_at","oiErr","oiCount","order_items","ciErr","ciCount","cart_items","poiErr","poiCount","purchase_order_items","prErr","prCount","product_reviews","fillFields","fills","field","merged","field_fills","merged_product","archived_product","reassign_results","handleCollections","sn"],"sources":["../../../src/server/handlers/catalog.ts"],"sourcesContent":["import type { SupabaseClient } from \"@supabase/supabase-js\";\nimport { sanitizeFilterValue } from \"../lib/utils.js\";\n\n// ============================================================================\n// PRODUCTS — Full product catalog management\n// Products, categories, field schemas, pricing schemas, catalogs, assignments\n// ============================================================================\n\nexport async function handleProducts(sb: SupabaseClient, args: Record<string, unknown>, storeId?: string) {\n const sid = storeId as string;\n switch (args.action) {\n\n // ======================== PRODUCTS ========================\n\n case \"browse\": {\n // Category summary with product counts, price ranges, stock status\n const { data: cats, error: catErr } = await sb.from(\"categories\")\n .select(\"id, name, slug, parent_id, display_order, product_count, catalog_id\")\n .eq(\"store_id\", sid)\n .eq(\"is_active\", true)\n .order(\"display_order\", { ascending: true });\n if (catErr) return { success: false, error: catErr.message };\n\n // Status distribution via count queries\n const { count: activeCount } = await sb.from(\"products\").select(\"id\", { count: \"exact\", head: true }).eq(\"store_id\", sid).neq(\"status\", \"archived\");\n const { count: archivedCount } = await sb.from(\"products\").select(\"id\", { count: \"exact\", head: true }).eq(\"store_id\", sid).eq(\"status\", \"archived\");\n\n return {\n success: true,\n data: {\n categories: cats,\n product_status_summary: { active: activeCount || 0, archived: archivedCount || 0 },\n tip: \"Use products.find with category or status filters to drill into a specific set. Use products.get for full product detail.\"\n }\n };\n }\n\n case \"find\": {\n const offset = args.offset as number || 0;\n let q = sb.from(\"products\")\n .select(\"id, name, sku, status, type, stock_quantity, category:categories!primary_category_id(name)\", { count: \"exact\" })\n .eq(\"store_id\", sid)\n .order(\"created_at\", { ascending: false });\n if (args.limit) {\n q = q.range(offset, offset + (args.limit as number) - 1);\n } else if (offset > 0) {\n q = q.range(offset, offset + 999);\n }\n if (args.query) { const sq = sanitizeFilterValue(String(args.query)); q = q.or(`name.ilike.%${sq}%,sku.ilike.%${sq}%,description.ilike.%${sq}%`); }\n if (args.category || args.category_id) {\n // Accept both category (name or UUID) and category_id (UUID)\n const catInput = (args.category_id || args.category) as string;\n const catVal = sanitizeFilterValue(catInput);\n let matchedCatId: string | null = null;\n if (/^[0-9a-f]{8}-/.test(catVal)) {\n matchedCatId = catVal;\n } else {\n const { data: cats } = await sb.from(\"categories\").select(\"id\").ilike(\"name\", `%${catVal}%`).eq(\"store_id\", sid).limit(1);\n if (cats?.length) matchedCatId = cats[0].id;\n }\n if (matchedCatId) {\n // Include sub-categories (children of the matched category)\n const { data: children } = await sb.from(\"categories\").select(\"id\").eq(\"parent_id\", matchedCatId).eq(\"store_id\", sid);\n const catIds = [matchedCatId, ...(children || []).map(c => c.id)];\n q = q.in(\"primary_category_id\", catIds);\n } else {\n // Category not found — return empty result\n q = q.eq(\"primary_category_id\", \"00000000-0000-0000-0000-000000000000\");\n }\n }\n if (args.catalog_id) q = q.eq(\"catalog_id\", args.catalog_id as string);\n if (args.status) q = q.eq(\"status\", args.status as string);\n // Exclude archived unless explicitly requested or filtering by status\n if (!args.status && !args.include_archived) {\n q = q.neq(\"status\", \"archived\");\n }\n if (args.featured !== undefined) q = q.eq(\"featured\", args.featured as boolean);\n const { data, error, count: totalCount } = await q;\n if (error) return { success: false, error: error.message };\n // Flatten nested category for display\n const flattened = (data || []).map((row: any) => {\n const { category, ...rest } = row;\n return { ...rest, category_name: category?.name || null };\n });\n return { success: true, total: totalCount, count: flattened.length, offset, ...(args.limit ? { limit: args.limit } : {}), data: flattened };\n }\n\n case \"get\": {\n const pid = args.product_id as string;\n const { data: product, error: pErr } = await sb.from(\"products\")\n .select(\"*, category:categories!primary_category_id(id, name, slug)\")\n .eq(\"id\", pid).eq(\"store_id\", sid).single();\n if (pErr) return { success: false, error: pErr.message };\n\n const { data: fieldSchemas } = await sb.from(\"product_field_schemas\")\n .select(\"field_schema_id, field_schema:field_schemas!field_schema_id(id, name, fields, icon)\")\n .eq(\"product_id\", pid);\n\n const { data: pricingSchemas } = await sb.from(\"product_pricing_schemas\")\n .select(\"pricing_schema_id, pricing_schema:pricing_schemas!pricing_schema_id(id, name, tiers, quality_tier)\")\n .eq(\"product_id\", pid);\n\n const { data: inventory } = await sb.from(\"inventory\")\n .select(\"id, quantity, location:locations!location_id(id, name)\")\n .eq(\"product_id\", pid).eq(\"store_id\", sid);\n\n return {\n success: true,\n data: {\n ...product,\n field_schemas: fieldSchemas?.map(fs => fs.field_schema) || [],\n pricing_schemas: pricingSchemas?.map(ps => ps.pricing_schema) || [],\n inventory: inventory || []\n }\n };\n }\n\n case \"create\": {\n const name = args.name as string;\n if (!name) return { success: false, error: \"name is required\" };\n const insert: Record<string, unknown> = { store_id: sid, name };\n if (args.sku) insert.sku = args.sku;\n if (args.description) insert.description = args.description;\n if (args.short_description) insert.short_description = args.short_description;\n if (args.type) insert.type = args.type;\n if (args.status) insert.status = args.status;\n if (args.cost_price !== undefined) insert.cost_price = args.cost_price;\n if (args.wholesale_price !== undefined) insert.wholesale_price = args.wholesale_price;\n if (args.featured !== undefined) insert.featured = args.featured;\n if (args.stock_quantity !== undefined) insert.stock_quantity = args.stock_quantity;\n if (args.manage_stock !== undefined) insert.manage_stock = args.manage_stock;\n if (args.weight !== undefined) insert.weight = args.weight;\n if (args.tax_status) insert.tax_status = args.tax_status;\n if (args.tax_class) insert.tax_class = args.tax_class;\n if (args.catalog_id) insert.catalog_id = args.catalog_id;\n if (args.pricing_data) insert.pricing_data = args.pricing_data;\n // custom_fields NOT inserted directly — schema is the source of truth\n // Agent-provided custom_fields are filtered against schema keys post-insert\n if (args.featured_image !== undefined) insert.featured_image = args.featured_image;\n if (args.image_gallery !== undefined) insert.image_gallery = args.image_gallery;\n if (args.is_wholesale !== undefined) insert.is_wholesale = args.is_wholesale;\n if (args.wholesale_only !== undefined) insert.wholesale_only = args.wholesale_only;\n if (args.minimum_wholesale_quantity !== undefined) insert.minimum_wholesale_quantity = args.minimum_wholesale_quantity;\n const catArg = (args.category || args.primary_category_id || args.category_id) as string | undefined;\n if (catArg) {\n if (/^[0-9a-f]{8}-/.test(catArg)) {\n insert.primary_category_id = catArg;\n } else {\n const { data: cats } = await sb.from(\"categories\").select(\"id\").ilike(\"name\", `%${catArg}%`).eq(\"store_id\", sid).limit(1);\n if (cats?.length) insert.primary_category_id = cats[0].id;\n }\n }\n if (args.pricing_schema_id) insert.pricing_schema_id = args.pricing_schema_id;\n\n const { data, error } = await sb.from(\"products\").insert(insert).select(\"id, name, sku, slug, status, primary_category_id, pricing_schema_id, created_at\").single();\n if (error) return { success: false, error: error.message };\n\n // Explicit schema assignments from args\n if (args.field_schema_ids && Array.isArray(args.field_schema_ids)) {\n const rows = (args.field_schema_ids as string[]).map(fsId => ({ product_id: data.id, field_schema_id: fsId }));\n await sb.from(\"product_field_schemas\").insert(rows);\n }\n if (args.pricing_schema_ids && Array.isArray(args.pricing_schema_ids)) {\n const rows = (args.pricing_schema_ids as string[]).map(psId => ({ product_id: data.id, pricing_schema_id: psId }));\n await sb.from(\"product_pricing_schemas\").insert(rows);\n }\n\n const productUpdates: Record<string, unknown> = {};\n const inherited: string[] = [];\n\n // Auto-inherit field schema from category — ALWAYS merge with schema template\n const categoryId = insert.primary_category_id as string | undefined;\n if (categoryId && !args.field_schema_ids) {\n const { data: cat } = await sb.from(\"categories\").select(\"field_schema_id\").eq(\"id\", categoryId).single();\n if (cat?.field_schema_id) {\n await sb.from(\"product_field_schemas\").upsert(\n { product_id: data.id, field_schema_id: cat.field_schema_id },\n { onConflict: \"product_id,field_schema_id\" }\n );\n // Schema is source of truth — only schema keys allowed\n const { data: fs } = await sb.from(\"field_schemas\").select(\"fields\").eq(\"id\", cat.field_schema_id).single();\n if (fs?.fields && Array.isArray(fs.fields)) {\n const schemaKeys = new Set<string>();\n const fieldValues: Record<string, unknown> = {};\n for (const f of fs.fields) {\n const key = (f as any).key;\n if (key) { schemaKeys.add(key); fieldValues[key] = (f as any).default ?? null; }\n }\n // Only accept agent values for keys that exist in the schema\n const agentValues = (args.custom_fields as Record<string, unknown>) || {};\n for (const [k, v] of Object.entries(agentValues)) {\n if (schemaKeys.has(k)) fieldValues[k] = v;\n }\n productUpdates.custom_fields = fieldValues;\n }\n inherited.push(`field_schema:${cat.field_schema_id}`);\n }\n // Also check junction table for additional schemas\n const { data: catFieldSchemas } = await sb.from(\"category_field_schemas\").select(\"field_schema_id\").eq(\"category_id\", categoryId);\n if (catFieldSchemas?.length) {\n const cat2 = await sb.from(\"categories\").select(\"field_schema_id\").eq(\"id\", categoryId).single();\n const rows = catFieldSchemas.filter(r => r.field_schema_id !== cat2?.data?.field_schema_id).map(r => ({ product_id: data.id, field_schema_id: r.field_schema_id }));\n if (rows.length) await sb.from(\"product_field_schemas\").insert(rows);\n }\n }\n\n // If pricing_schema_id provided, hydrate pricing_data from schema\n if (insert.pricing_schema_id && !args.pricing_data) {\n const { data: ps } = await sb.from(\"pricing_schemas\").select(\"tiers\").eq(\"id\", insert.pricing_schema_id as string).single();\n if (ps?.tiers) productUpdates.pricing_data = ps.tiers;\n }\n\n // Apply any post-insert updates\n if (Object.keys(productUpdates).length > 0) {\n await sb.from(\"products\").update(productUpdates).eq(\"id\", data.id);\n }\n\n // Re-read the full product for response\n const { data: full } = await sb.from(\"products\")\n .select(\"id, name, sku, slug, status, primary_category_id, pricing_schema_id, custom_fields, pricing_data, created_at\")\n .eq(\"id\", data.id).single();\n if (inherited.length && full) (full as any).inherited = inherited;\n\n return { success: true, data: full || data };\n }\n\n case \"update\": {\n const pid = args.product_id as string;\n if (!pid) return { success: false, error: \"product_id is required\" };\n const updates: Record<string, unknown> = {};\n if (args.name !== undefined) updates.name = args.name;\n if (args.sku !== undefined) updates.sku = args.sku;\n if (args.description !== undefined) updates.description = args.description;\n if (args.short_description !== undefined) updates.short_description = args.short_description;\n if (args.type !== undefined) updates.type = args.type;\n if (args.status !== undefined) updates.status = args.status;\n if (args.cost_price !== undefined) updates.cost_price = args.cost_price;\n if (args.wholesale_price !== undefined) updates.wholesale_price = args.wholesale_price;\n if (args.featured !== undefined) updates.featured = args.featured;\n if (args.stock_quantity !== undefined) updates.stock_quantity = args.stock_quantity;\n if (args.manage_stock !== undefined) updates.manage_stock = args.manage_stock;\n if (args.weight !== undefined) updates.weight = args.weight;\n if (args.tax_status !== undefined) updates.tax_status = args.tax_status;\n if (args.tax_class !== undefined) updates.tax_class = args.tax_class;\n if (args.catalog_id !== undefined) updates.catalog_id = args.catalog_id;\n if (args.pricing_schema_id !== undefined) updates.pricing_schema_id = args.pricing_schema_id;\n if (args.pricing_data !== undefined) updates.pricing_data = args.pricing_data;\n // custom_fields filtered to schema keys only (schema = source of truth)\n if (args.custom_fields !== undefined) {\n const agentFV = args.custom_fields as Record<string, unknown>;\n // Look up product's linked field schema to get allowed keys\n const { data: pfs } = await sb.from(\"product_field_schemas\").select(\"field_schema_id\").eq(\"product_id\", pid).limit(1);\n if (pfs?.length) {\n const { data: fsDef } = await sb.from(\"field_schemas\").select(\"fields\").eq(\"id\", pfs[0].field_schema_id).single();\n if (fsDef?.fields && Array.isArray(fsDef.fields)) {\n const { data: existing } = await sb.from(\"products\").select(\"custom_fields\").eq(\"id\", pid).single();\n const base = (existing?.custom_fields as Record<string, unknown>) || {};\n const filtered: Record<string, unknown> = { ...base };\n const schemaKeys = new Set(fsDef.fields.map((f: any) => f.key).filter(Boolean));\n for (const [k, v] of Object.entries(agentFV)) {\n if (schemaKeys.has(k)) filtered[k] = v;\n }\n updates.custom_fields = filtered;\n } else {\n updates.custom_fields = agentFV; // no schema definition found, pass through\n }\n } else {\n updates.custom_fields = agentFV; // no schema linked, pass through\n }\n }\n if (args.is_wholesale !== undefined) updates.is_wholesale = args.is_wholesale;\n if (args.wholesale_only !== undefined) updates.wholesale_only = args.wholesale_only;\n if (args.minimum_wholesale_quantity !== undefined) updates.minimum_wholesale_quantity = args.minimum_wholesale_quantity;\n if (args.featured_image !== undefined) updates.featured_image = args.featured_image;\n if (args.image_gallery !== undefined) updates.image_gallery = args.image_gallery;\n const updateCatArg = (args.category ?? args.primary_category_id ?? args.category_id) as string | undefined;\n if (updateCatArg !== undefined) {\n if (!updateCatArg) { updates.primary_category_id = null; }\n else if (/^[0-9a-f]{8}-/.test(updateCatArg)) { updates.primary_category_id = updateCatArg; }\n else {\n const { data: cats } = await sb.from(\"categories\").select(\"id\").ilike(\"name\", `%${updateCatArg}%`).eq(\"store_id\", sid).limit(1);\n if (cats?.length) updates.primary_category_id = cats[0].id;\n }\n }\n\n const { data, error } = await sb.from(\"products\")\n .update(updates).eq(\"id\", pid).eq(\"store_id\", sid)\n .select(\"id, name, sku, slug, status, cost_price, pricing_schema_id, updated_at\").single();\n return error ? { success: false, error: error.message } : { success: true, data };\n }\n\n case \"delete\": {\n const pid = args.product_id as string;\n if (!pid) return { success: false, error: \"product_id is required\" };\n if (args.hard === true) {\n const { error } = await sb.from(\"products\").delete().eq(\"id\", pid).eq(\"store_id\", sid);\n return error ? { success: false, error: error.message } : { success: true, data: { id: pid, deleted: true } };\n }\n const { data, error } = await sb.from(\"products\")\n .update({ status: \"archived\" }).eq(\"id\", pid).eq(\"store_id\", sid)\n .select(\"id, name, status\").single();\n return error ? { success: false, error: error.message } : { success: true, data };\n }\n\n // ======================== CATEGORIES ========================\n\n case \"list_categories\": {\n let q = sb.from(\"categories\")\n .select(\"id, name, slug, description, icon, parent_id, display_order, is_active, featured, product_count, catalog_id, field_schema_id, created_at\")\n .eq(\"store_id\", sid)\n .order(\"display_order\", { ascending: true });\n if (args.catalog_id) q = q.eq(\"catalog_id\", args.catalog_id as string);\n if (args.parent_id) q = q.eq(\"parent_id\", args.parent_id as string);\n if (args.active_only !== false) q = q.eq(\"is_active\", true);\n const { data, error } = await q.limit(args.limit as number || 100);\n return error ? { success: false, error: error.message } : { success: true, count: data?.length, data };\n }\n\n case \"get_category\": {\n const catId = args.category_id as string;\n const { data: cat, error: catErr } = await sb.from(\"categories\")\n .select(\"*\").eq(\"id\", catId).eq(\"store_id\", sid).single();\n if (catErr) return { success: false, error: catErr.message };\n\n const { data: fieldAssigns } = await sb.from(\"category_field_schemas\")\n .select(\"sort_order, is_active, field_schema:field_schemas!field_schema_id(id, name, fields, icon)\")\n .eq(\"category_id\", catId).eq(\"is_active\", true).order(\"sort_order\");\n\n const { data: pricingAssigns } = await sb.from(\"category_pricing_schemas\")\n .select(\"sort_order, is_active, pricing_schema:pricing_schemas!pricing_schema_id(id, name, tiers, quality_tier)\")\n .eq(\"category_id\", catId).eq(\"is_active\", true).order(\"sort_order\");\n\n const { data: children } = await sb.from(\"categories\")\n .select(\"id, name, slug, display_order, is_active, product_count\")\n .eq(\"parent_id\", catId).order(\"display_order\");\n\n return {\n success: true,\n data: {\n ...cat,\n field_schemas: fieldAssigns?.map(a => ({ ...a.field_schema, sort_order: a.sort_order })) || [],\n pricing_schemas: pricingAssigns?.map(a => ({ ...a.pricing_schema, sort_order: a.sort_order })) || [],\n subcategories: children || []\n }\n };\n }\n\n case \"create_category\": {\n const name = args.name as string;\n if (!name) return { success: false, error: \"name is required\" };\n const insert: Record<string, unknown> = { store_id: sid, name, slug: name.toLowerCase().replace(/[^a-z0-9]+/g, \"-\").replace(/^-|-$/g, \"\") };\n if (args.description) insert.description = args.description;\n if (args.icon) insert.icon = args.icon;\n if (args.parent_id) insert.parent_id = args.parent_id;\n if (args.catalog_id) insert.catalog_id = args.catalog_id;\n if (args.display_order !== undefined) insert.display_order = args.display_order;\n if (args.field_schema_id) insert.field_schema_id = args.field_schema_id;\n\n const { data, error } = await sb.from(\"categories\").insert(insert)\n .select(\"id, name, slug, parent_id, catalog_id, display_order, created_at\").single();\n if (error) return { success: false, error: error.message };\n\n if (args.field_schema_ids && Array.isArray(args.field_schema_ids)) {\n const rows = (args.field_schema_ids as string[]).map((fsId, i) => ({ category_id: data.id, field_schema_id: fsId, sort_order: i + 1 }));\n await sb.from(\"category_field_schemas\").insert(rows);\n }\n if (args.pricing_schema_ids && Array.isArray(args.pricing_schema_ids)) {\n const rows = (args.pricing_schema_ids as string[]).map((psId, i) => ({ category_id: data.id, pricing_schema_id: psId, sort_order: i + 1 }));\n await sb.from(\"category_pricing_schemas\").insert(rows);\n }\n\n return { success: true, data };\n }\n\n case \"update_category\": {\n const catId = args.category_id as string;\n if (!catId) return { success: false, error: \"category_id is required\" };\n const updates: Record<string, unknown> = {};\n if (args.name !== undefined) updates.name = args.name;\n if (args.description !== undefined) updates.description = args.description;\n if (args.icon !== undefined) updates.icon = args.icon;\n if (args.parent_id !== undefined) updates.parent_id = args.parent_id;\n if (args.catalog_id !== undefined) updates.catalog_id = args.catalog_id;\n if (args.display_order !== undefined) updates.display_order = args.display_order;\n if (args.is_active !== undefined) updates.is_active = args.is_active;\n if (args.featured !== undefined) updates.featured = args.featured;\n if (args.field_schema_id !== undefined) updates.field_schema_id = args.field_schema_id;\n\n const { data, error } = await sb.from(\"categories\")\n .update(updates).eq(\"id\", catId).eq(\"store_id\", sid)\n .select(\"id, name, slug, is_active, display_order, updated_at\").single();\n return error ? { success: false, error: error.message } : { success: true, data };\n }\n\n case \"delete_category\": {\n const catId = args.category_id as string;\n if (!catId) return { success: false, error: \"category_id is required\" };\n if (args.hard === true) {\n const { error } = await sb.from(\"categories\").delete().eq(\"id\", catId).eq(\"store_id\", sid);\n return error ? { success: false, error: error.message } : { success: true, data: { id: catId, deleted: true } };\n }\n const { data, error } = await sb.from(\"categories\")\n .update({ is_active: false }).eq(\"id\", catId).eq(\"store_id\", sid)\n .select(\"id, name, is_active\").single();\n return error ? { success: false, error: error.message } : { success: true, data };\n }\n\n // ======================== FIELD SCHEMAS ========================\n\n case \"list_field_schemas\": {\n let q = sb.from(\"field_schemas\")\n .select(\"id, name, slug, description, icon, fields, is_public, is_active, catalog_id, store_id, install_count, created_at\")\n .eq(\"is_active\", true);\n // Show store-owned schemas AND public schemas (prevent IDOR)\n if (args.public_only === true) {\n q = q.eq(\"is_public\", true);\n } else {\n q = q.or(`store_id.eq.${sid},is_public.eq.true`);\n }\n if (args.catalog_id) q = q.eq(\"catalog_id\", args.catalog_id as string);\n if (args.limit) q = q.limit(args.limit as number);\n const { data, error } = await q.order(\"name\");\n return error ? { success: false, error: error.message } : { success: true, count: data?.length, data };\n }\n\n case \"get_field_schema\": {\n const fsId = (args.field_schema_id || args.schema_id) as string;\n if (!fsId) return { success: false, error: \"field_schema_id is required\" };\n // Allow access to own schemas OR public schemas (prevent IDOR)\n const { data, error } = await sb.from(\"field_schemas\").select(\"*\").eq(\"id\", fsId)\n .or(`store_id.eq.${sid},is_public.eq.true`).single();\n if (error) return { success: false, error: error.message };\n\n const { data: assignments } = await sb.from(\"category_field_schemas\")\n .select(\"category:categories!category_id(id, name)\").eq(\"field_schema_id\", fsId).eq(\"is_active\", true);\n\n return { success: true, data: { ...data, assigned_categories: assignments?.map(a => a.category) || [] } };\n }\n\n case \"create_field_schema\": {\n const name = args.name as string;\n if (!name) return { success: false, error: \"name is required\" };\n if (!args.fields || !Array.isArray(args.fields)) return { success: false, error: \"fields array is required\" };\n\n // Auto-resolve catalog_id: use provided value, or fall back to store's default catalog\n let catalogId = args.catalog_id as string | undefined;\n if (!catalogId) {\n const { data: defaultCatalog } = await sb.from(\"catalogs\")\n .select(\"id\").eq(\"store_id\", sid).eq(\"is_default\", true).single();\n if (defaultCatalog) catalogId = defaultCatalog.id;\n }\n\n const insert: Record<string, unknown> = {\n store_id: sid,\n name,\n slug: name.toLowerCase().replace(/[^a-z0-9]+/g, \"-\").replace(/^-|-$/g, \"\"),\n fields: args.fields\n };\n if (args.description) insert.description = args.description;\n if (args.icon) insert.icon = args.icon;\n if (catalogId) insert.catalog_id = catalogId;\n if (args.is_public !== undefined) insert.is_public = args.is_public;\n\n const { data, error } = await sb.from(\"field_schemas\").insert(insert)\n .select(\"id, name, slug, fields, icon, is_active, catalog_id, created_at\").single();\n return error ? { success: false, error: error.message } : { success: true, data };\n }\n\n case \"update_field_schema\": {\n const fsId = (args.field_schema_id || args.schema_id) as string;\n if (!fsId) return { success: false, error: \"field_schema_id is required\" };\n const updates: Record<string, unknown> = {};\n if (args.name !== undefined) updates.name = args.name;\n if (args.description !== undefined) updates.description = args.description;\n if (args.icon !== undefined) updates.icon = args.icon;\n if (args.fields !== undefined) updates.fields = args.fields;\n if (args.is_public !== undefined) updates.is_public = args.is_public;\n if (args.is_active !== undefined) updates.is_active = args.is_active;\n if (args.catalog_id !== undefined) updates.catalog_id = args.catalog_id;\n\n // Only allow modification of own schemas (prevent IDOR)\n const { data, error } = await sb.from(\"field_schemas\")\n .update(updates).eq(\"id\", fsId).eq(\"store_id\", sid)\n .select(\"id, name, slug, fields, icon, is_active, catalog_id, updated_at\").single();\n return error ? { success: false, error: error.message } : { success: true, data };\n }\n\n case \"delete_field_schema\": {\n const fsId = (args.field_schema_id || args.schema_id) as string;\n if (!fsId) return { success: false, error: \"field_schema_id is required\" };\n // Only allow deletion of own schemas (prevent IDOR)\n const { data, error } = await sb.from(\"field_schemas\")\n .update({ is_active: false, deleted_at: new Date().toISOString() }).eq(\"id\", fsId).eq(\"store_id\", sid)\n .select(\"id, name, is_active\").single();\n return error ? { success: false, error: error.message } : { success: true, data };\n }\n\n // ======================== PRICING SCHEMAS ========================\n\n case \"list_pricing_schemas\": {\n let q = sb.from(\"pricing_schemas\")\n .select(\"id, name, slug, description, tiers, quality_tier, is_public, is_active, catalog_id, store_id, install_count, created_at\")\n .eq(\"is_active\", true);\n // Show store-owned schemas AND public schemas (prevent IDOR)\n if (args.public_only === true) {\n q = q.eq(\"is_public\", true);\n } else {\n q = q.or(`store_id.eq.${sid},is_public.eq.true`);\n }\n if (args.catalog_id) q = q.eq(\"catalog_id\", args.catalog_id as string);\n if (args.limit) q = q.limit(args.limit as number);\n const { data, error } = await q.order(\"name\");\n return error ? { success: false, error: error.message } : { success: true, count: data?.length, data };\n }\n\n case \"get_pricing_schema\": {\n const psId = (args.pricing_schema_id || args.schema_id) as string;\n if (!psId) return { success: false, error: \"pricing_schema_id is required\" };\n // Allow access to own schemas OR public schemas (prevent IDOR)\n const { data, error } = await sb.from(\"pricing_schemas\").select(\"*\").eq(\"id\", psId)\n .or(`store_id.eq.${sid},is_public.eq.true`).single();\n if (error) return { success: false, error: error.message };\n\n const { data: assignments } = await sb.from(\"category_pricing_schemas\")\n .select(\"category:categories!category_id(id, name)\").eq(\"pricing_schema_id\", psId).eq(\"is_active\", true);\n\n return { success: true, data: { ...data, assigned_categories: assignments?.map(a => a.category) || [] } };\n }\n\n case \"create_pricing_schema\": {\n const name = args.name as string;\n if (!name) return { success: false, error: \"name is required\" };\n if (!args.tiers || !Array.isArray(args.tiers)) return { success: false, error: \"tiers array is required\" };\n\n // Auto-resolve catalog_id: use provided value, or fall back to store's default catalog\n let catalogId = args.catalog_id as string | undefined;\n if (!catalogId) {\n const { data: defaultCatalog } = await sb.from(\"catalogs\")\n .select(\"id\").eq(\"store_id\", sid).eq(\"is_default\", true).single();\n if (defaultCatalog) catalogId = defaultCatalog.id;\n }\n\n const insert: Record<string, unknown> = {\n store_id: sid,\n name,\n slug: name.toLowerCase().replace(/[^a-z0-9]+/g, \"-\").replace(/^-|-$/g, \"\"),\n tiers: args.tiers\n };\n if (args.description) insert.description = args.description;\n if (args.quality_tier) insert.quality_tier = args.quality_tier;\n if (catalogId) insert.catalog_id = catalogId;\n if (args.is_public !== undefined) insert.is_public = args.is_public;\n\n const { data, error } = await sb.from(\"pricing_schemas\").insert(insert)\n .select(\"id, name, slug, tiers, quality_tier, is_active, catalog_id, created_at\").single();\n return error ? { success: false, error: error.message } : { success: true, data };\n }\n\n case \"update_pricing_schema\": {\n const psId = (args.pricing_schema_id || args.schema_id) as string;\n if (!psId) return { success: false, error: \"pricing_schema_id is required\" };\n const updates: Record<string, unknown> = {};\n if (args.name !== undefined) updates.name = args.name;\n if (args.description !== undefined) updates.description = args.description;\n if (args.tiers !== undefined) updates.tiers = args.tiers;\n if (args.quality_tier !== undefined) updates.quality_tier = args.quality_tier;\n if (args.is_public !== undefined) updates.is_public = args.is_public;\n if (args.is_active !== undefined) updates.is_active = args.is_active;\n if (args.catalog_id !== undefined) updates.catalog_id = args.catalog_id;\n\n // Only allow modification of own schemas (prevent IDOR)\n const { data, error } = await sb.from(\"pricing_schemas\")\n .update(updates).eq(\"id\", psId).eq(\"store_id\", sid)\n .select(\"id, name, slug, tiers, quality_tier, is_active, catalog_id, updated_at\").single();\n return error ? { success: false, error: error.message } : { success: true, data };\n }\n\n case \"delete_pricing_schema\": {\n const psId = (args.pricing_schema_id || args.schema_id) as string;\n if (!psId) return { success: false, error: \"pricing_schema_id is required\" };\n // Only allow deletion of own schemas (prevent IDOR)\n const { data, error } = await sb.from(\"pricing_schemas\")\n .update({ is_active: false, deleted_at: new Date().toISOString() }).eq(\"id\", psId).eq(\"store_id\", sid)\n .select(\"id, name, is_active\").single();\n return error ? { success: false, error: error.message } : { success: true, data };\n }\n\n // ======================== CATALOGS ========================\n\n case \"list_catalogs\": {\n const { data, error } = await sb.from(\"catalogs\")\n .select(\"id, name, slug, description, vertical, is_active, is_default, display_order, created_at\")\n .eq(\"store_id\", sid).order(\"display_order\");\n return error ? { success: false, error: error.message } : { success: true, count: data?.length, data };\n }\n\n case \"create_catalog\": {\n const name = args.name as string;\n if (!name) return { success: false, error: \"name is required\" };\n // Resolve owner_user_id from store\n const { data: store } = await sb.from(\"stores\").select(\"owner_user_id\").eq(\"id\", sid).single();\n const insert: Record<string, unknown> = {\n store_id: sid, name,\n slug: name.toLowerCase().replace(/[^a-z0-9]+/g, \"-\").replace(/^-|-$/g, \"\"),\n owner_user_id: store?.owner_user_id\n };\n if (args.description) insert.description = args.description;\n if (args.vertical) insert.vertical = args.vertical;\n if (args.is_default !== undefined) insert.is_default = args.is_default;\n if (args.settings) insert.settings = args.settings;\n\n const { data, error } = await sb.from(\"catalogs\").insert(insert)\n .select(\"id, name, slug, vertical, is_default, created_at\").single();\n return error ? { success: false, error: error.message } : { success: true, data };\n }\n\n case \"update_catalog\": {\n const catId = args.catalog_id as string;\n if (!catId) return { success: false, error: \"catalog_id is required\" };\n const updates: Record<string, unknown> = {};\n if (args.name !== undefined) updates.name = args.name;\n if (args.description !== undefined) updates.description = args.description;\n if (args.vertical !== undefined) updates.vertical = args.vertical;\n if (args.is_active !== undefined) updates.is_active = args.is_active;\n if (args.is_default !== undefined) updates.is_default = args.is_default;\n if (args.settings !== undefined) updates.settings = args.settings;\n if (args.display_order !== undefined) updates.display_order = args.display_order;\n\n const { data, error } = await sb.from(\"catalogs\")\n .update(updates).eq(\"id\", catId).eq(\"store_id\", sid)\n .select(\"id, name, slug, vertical, is_active, is_default, updated_at\").single();\n return error ? { success: false, error: error.message } : { success: true, data };\n }\n\n // ======================== SCHEMA ASSIGNMENTS ========================\n\n case \"assign_schema\": {\n const target = args.target as string; // \"category\" or \"product\"\n const schemaType = args.schema_type as string; // \"field\" or \"pricing\"\n const targetId = args.target_id as string;\n const schemaId = args.schema_id as string;\n if (!target || !schemaType || !targetId || !schemaId) {\n return { success: false, error: \"target (category|product), schema_type (field|pricing), target_id, and schema_id are required\" };\n }\n\n // Verify target product/category belongs to this store (prevent IDOR)\n const targetTable = target === \"product\" ? \"products\" : \"categories\";\n const { data: ownerCheck, error: ownerErr } = await sb.from(targetTable)\n .select(\"id\").eq(\"id\", targetId).eq(\"store_id\", sid).single();\n if (ownerErr || !ownerCheck) {\n return { success: false, error: `${target} not found or does not belong to this store` };\n }\n\n // Verify schema is accessible (own schema or public)\n const schemaTable = schemaType === \"field\" ? \"field_schemas\" : \"pricing_schemas\";\n const { data: schemaCheck, error: schemaErr } = await sb.from(schemaTable)\n .select(\"id\").eq(\"id\", schemaId).or(`store_id.eq.${sid},is_public.eq.true`).single();\n if (schemaErr || !schemaCheck) {\n return { success: false, error: `${schemaType} schema not found or not accessible` };\n }\n\n const table = target === \"product\"\n ? (schemaType === \"field\" ? \"product_field_schemas\" : \"product_pricing_schemas\")\n : (schemaType === \"field\" ? \"category_field_schemas\" : \"category_pricing_schemas\");\n const fkCol = target === \"product\" ? \"product_id\" : \"category_id\";\n const schemaCol = schemaType === \"field\" ? \"field_schema_id\" : \"pricing_schema_id\";\n\n const row: Record<string, unknown> = { [fkCol]: targetId, [schemaCol]: schemaId };\n if (args.sort_order !== undefined) row.sort_order = args.sort_order;\n\n const { data, error } = await sb.from(table).upsert(row, { onConflict: `${fkCol},${schemaCol}` }).select().single();\n if (error) return { success: false, error: error.message };\n\n // Hydrate product with schema data\n if (target === \"product\") {\n const productUpdates: Record<string, unknown> = {};\n if (schemaType === \"pricing\") {\n const { data: schema } = await sb.from(\"pricing_schemas\").select(\"tiers, quality_tier\").eq(\"id\", schemaId).single();\n productUpdates.pricing_schema_id = schemaId;\n if (schema?.tiers) productUpdates.pricing_data = schema.tiers;\n }\n if (schemaType === \"field\") {\n // Schema is source of truth — rebuild custom_fields from schema keys only\n const { data: schema } = await sb.from(\"field_schemas\").select(\"fields\").eq(\"id\", schemaId).single();\n if (schema?.fields && Array.isArray(schema.fields)) {\n const { data: product } = await sb.from(\"products\").select(\"custom_fields\").eq(\"id\", targetId).eq(\"store_id\", sid).single();\n const existing = (product?.custom_fields as Record<string, unknown>) || {};\n const rebuilt: Record<string, unknown> = {};\n for (const f of schema.fields) {\n const key = (f as any).key;\n if (key) rebuilt[key] = (key in existing) ? existing[key] : ((f as any).default ?? null);\n }\n productUpdates.custom_fields = rebuilt;\n }\n }\n if (Object.keys(productUpdates).length > 0) {\n await sb.from(\"products\").update(productUpdates).eq(\"id\", targetId).eq(\"store_id\", sid);\n }\n }\n\n return { success: true, data };\n }\n\n case \"unassign_schema\": {\n const target = args.target as string;\n const schemaType = args.schema_type as string;\n const targetId = args.target_id as string;\n const schemaId = args.schema_id as string;\n if (!target || !schemaType || !targetId || !schemaId) {\n return { success: false, error: \"target (category|product), schema_type (field|pricing), target_id, and schema_id are required\" };\n }\n\n // Verify target product/category belongs to this store (prevent IDOR)\n const targetTable = target === \"product\" ? \"products\" : \"categories\";\n const { data: ownerCheck, error: ownerErr } = await sb.from(targetTable)\n .select(\"id\").eq(\"id\", targetId).eq(\"store_id\", sid).single();\n if (ownerErr || !ownerCheck) {\n return { success: false, error: `${target} not found or does not belong to this store` };\n }\n\n const table = target === \"product\"\n ? (schemaType === \"field\" ? \"product_field_schemas\" : \"product_pricing_schemas\")\n : (schemaType === \"field\" ? \"category_field_schemas\" : \"category_pricing_schemas\");\n const fkCol = target === \"product\" ? \"product_id\" : \"category_id\";\n const schemaCol = schemaType === \"field\" ? \"field_schema_id\" : \"pricing_schema_id\";\n\n const { error } = await sb.from(table).delete().eq(fkCol, targetId).eq(schemaCol, schemaId);\n return error ? { success: false, error: error.message } : { success: true, data: { removed: true, target, schema_type: schemaType, target_id: targetId, schema_id: schemaId } };\n }\n\n // ======================== PRODUCT DEDUP / MERGE ========================\n\n case \"find_duplicates\": {\n // Find products with similar names (potential duplicates)\n const { data: all, error: allErr } = await sb.from(\"products\")\n .select(\"id, name, sku, status, stock_quantity, cost_price, created_at\")\n .eq(\"store_id\", sid).neq(\"status\", \"archived\")\n .order(\"name\");\n if (allErr) return { success: false, error: allErr.message };\n\n // Group by normalized name (lowercase, trim, strip common suffixes like \"(TEMP)\", \"(OLD)\", \"(COPY)\")\n const nameMap = new Map<string, typeof all>();\n for (const p of all || []) {\n const normalized = (p.name || \"\").toLowerCase().trim()\n .replace(/\\s*\\((temp|old|copy|duplicate|dup|new|v2)\\)\\s*/gi, \"\")\n .replace(/\\s+/g, \" \");\n if (!normalized) continue;\n if (!nameMap.has(normalized)) nameMap.set(normalized, []);\n nameMap.get(normalized)!.push(p);\n }\n\n const duplicates = Array.from(nameMap.entries())\n .filter(([_, products]) => products.length > 1)\n .map(([normalizedName, products]) => ({\n normalized_name: normalizedName,\n count: products.length,\n products: products.map(p => ({\n id: p.id, name: p.name, sku: p.sku, status: p.status,\n stock_quantity: p.stock_quantity, cost_price: p.cost_price, created_at: p.created_at,\n })),\n }));\n\n // Also check by exact SKU match\n const skuMap = new Map<string, typeof all>();\n for (const p of all || []) {\n if (!p.sku) continue;\n const key = p.sku.toLowerCase().trim();\n if (!skuMap.has(key)) skuMap.set(key, []);\n skuMap.get(key)!.push(p);\n }\n const skuDupes = Array.from(skuMap.entries())\n .filter(([_, products]) => products.length > 1)\n .map(([sku, products]) => ({ sku, count: products.length, products }));\n\n // Pre-format as markdown — formatter drops nested products arrays\n const totalNameDupes = duplicates.reduce((s, d) => s + d.count, 0);\n const totalSkuDupes = skuDupes.reduce((s, d) => s + d.count, 0);\n const lines: string[] = [\n `## Duplicate Products`,\n `**By Name**: ${duplicates.length} groups (${totalNameDupes} products) | **By SKU**: ${skuDupes.length} groups (${totalSkuDupes} products)\\n`,\n ];\n if (duplicates.length > 0) {\n lines.push(\"### Name Duplicates\");\n for (const group of duplicates.slice(0, 20)) {\n lines.push(`\\n**\"${group.normalized_name}\"** (${group.count} products):`);\n lines.push(\"| Name | SKU | Status | Stock | Created |\");\n lines.push(\"| --- | --- | --- | ---: | --- |\");\n for (const p of group.products) {\n lines.push(`| ${p.name} | ${p.sku || \"—\"} | ${p.status} | ${p.stock_quantity ?? \"—\"} | ${p.created_at?.slice(0, 10) || \"—\"} |`);\n }\n }\n }\n if (skuDupes.length > 0) {\n lines.push(\"\\n### SKU Duplicates\");\n for (const group of skuDupes.slice(0, 20)) {\n lines.push(`\\n**SKU \"${group.sku}\"** (${group.count} products):`);\n lines.push(\"| Name | SKU | Status | Stock | Created |\");\n lines.push(\"| --- | --- | --- | ---: | --- |\");\n for (const p of group.products) {\n lines.push(`| ${(p as any).name} | ${(p as any).sku || \"—\"} | ${(p as any).status} | ${(p as any).stock_quantity ?? \"—\"} | ${(p as any).created_at?.slice(0, 10) || \"—\"} |`);\n }\n }\n }\n if (duplicates.length === 0 && skuDupes.length === 0) {\n lines.push(\"\\nNo duplicates found.\");\n }\n return { success: true, data: lines.join(\"\\n\") };\n }\n\n case \"merge\": {\n const primaryId = args.primary_product_id as string;\n const secondaryId = args.secondary_product_id as string;\n if (!primaryId || !secondaryId) return { success: false, error: \"primary_product_id and secondary_product_id required\" };\n if (primaryId === secondaryId) return { success: false, error: \"Cannot merge a product with itself\" };\n\n // Verify both exist and belong to this store\n const { data: primary } = await sb.from(\"products\").select(\"*\").eq(\"id\", primaryId).eq(\"store_id\", sid).single();\n const { data: secondary } = await sb.from(\"products\").select(\"*\").eq(\"id\", secondaryId).eq(\"store_id\", sid).single();\n if (!primary) return { success: false, error: `Primary product ${primaryId} not found` };\n if (!secondary) return { success: false, error: `Secondary product ${secondaryId} not found` };\n\n const reassignResults: Record<string, string> = {};\n\n // 1. Consolidate inventory — sum quantities per location\n const { data: secInv } = await sb.from(\"inventory\")\n .select(\"product_id, location_id, quantity\")\n .eq(\"product_id\", secondaryId).eq(\"store_id\", sid);\n if (secInv?.length) {\n for (const row of secInv) {\n if (!row.quantity || row.quantity <= 0) continue;\n // Try to add to existing primary inventory at same location\n const { data: priRow } = await sb.from(\"inventory\")\n .select(\"id, quantity\")\n .eq(\"product_id\", primaryId).eq(\"location_id\", row.location_id).eq(\"store_id\", sid)\n .maybeSingle();\n if (priRow) {\n await sb.from(\"inventory\").update({ quantity: (priRow.quantity || 0) + row.quantity, updated_at: new Date().toISOString() }).eq(\"id\", priRow.id);\n } else {\n await sb.from(\"inventory\").insert({ store_id: sid, product_id: primaryId, location_id: row.location_id, quantity: row.quantity });\n }\n }\n // Zero out secondary inventory\n await sb.from(\"inventory\").update({ quantity: 0 }).eq(\"product_id\", secondaryId).eq(\"store_id\", sid);\n reassignResults.inventory = `consolidated ${secInv.length} location(s)`;\n } else {\n reassignResults.inventory = \"no inventory to consolidate\";\n }\n\n // 2. Reassign order_items\n const { error: oiErr, count: oiCount } = await sb.from(\"order_items\")\n .update({ product_id: primaryId }).eq(\"product_id\", secondaryId);\n reassignResults.order_items = oiErr ? `error: ${oiErr.message}` : `moved ${oiCount ?? 0} rows`;\n\n // 3. Reassign cart_items\n const { error: ciErr, count: ciCount } = await sb.from(\"cart_items\")\n .update({ product_id: primaryId }).eq(\"product_id\", secondaryId);\n reassignResults.cart_items = ciErr ? `error: ${ciErr.message}` : `moved ${ciCount ?? 0} rows`;\n\n // 4. Reassign purchase_order_items\n const { error: poiErr, count: poiCount } = await sb.from(\"purchase_order_items\")\n .update({ product_id: primaryId }).eq(\"product_id\", secondaryId);\n reassignResults.purchase_order_items = poiErr ? `error: ${poiErr.message}` : `moved ${poiCount ?? 0} rows`;\n\n // 5. Reassign product_reviews\n const { error: prErr, count: prCount } = await sb.from(\"product_reviews\")\n .update({ product_id: primaryId }).eq(\"product_id\", secondaryId);\n reassignResults.product_reviews = prErr ? `error: ${prErr.message}` : `moved ${prCount ?? 0} rows`;\n\n // 6. Fill in missing fields on primary from secondary\n const fillFields = [\"description\", \"short_description\", \"cost_price\", \"wholesale_price\", \"weight\", \"featured_image\", \"image_gallery\"] as const;\n const fills: Record<string, unknown> = {};\n for (const field of fillFields) {\n if (!primary[field] && secondary[field]) fills[field] = secondary[field];\n }\n // Merge custom_fields (secondary fills gaps)\n if (secondary.custom_fields && typeof secondary.custom_fields === \"object\") {\n const merged = { ...(secondary.custom_fields as Record<string, unknown>), ...(primary.custom_fields as Record<string, unknown> || {}) };\n fills.custom_fields = merged;\n }\n if (Object.keys(fills).length > 0) {\n await sb.from(\"products\").update(fills).eq(\"id\", primaryId).eq(\"store_id\", sid);\n reassignResults.field_fills = Object.keys(fills).join(\", \");\n }\n\n // 7. Archive the secondary product\n await sb.from(\"products\").update({\n status: \"archived\",\n name: `[MERGED] ${secondary.name}`,\n }).eq(\"id\", secondaryId).eq(\"store_id\", sid);\n\n // Re-read primary\n const { data: merged } = await sb.from(\"products\")\n .select(\"id, name, sku, status, stock_quantity, cost_price, created_at, updated_at\")\n .eq(\"id\", primaryId).single();\n\n return {\n success: true,\n data: {\n merged_product: merged,\n archived_product: { id: secondaryId, name: secondary.name },\n reassign_results: reassignResults,\n }\n };\n }\n\n default:\n return { success: false, error: `Unknown products action: ${args.action}. Valid: browse, find, get, create, update, delete, find_duplicates, merge, list_categories, get_category, create_category, update_category, delete_category, list_field_schemas, get_field_schema, create_field_schema, update_field_schema, delete_field_schema, list_pricing_schemas, get_pricing_schema, create_pricing_schema, update_pricing_schema, delete_pricing_schema, list_catalogs, create_catalog, update_catalog, assign_schema, unassign_schema` };\n }\n}\n\nexport async function handleCollections(sb: SupabaseClient, args: Record<string, unknown>, storeId?: string) {\n const sid = storeId as string;\n switch (args.action) {\n case \"find\": {\n let q = sb.from(\"creation_collections\").select(\"*\").eq(\"store_id\", sid);\n if (args.name) { const sn = sanitizeFilterValue(args.name as string); q = q.ilike(\"name\", `%${sn}%`); }\n const { data, error } = await q.limit(100);\n return error ? { success: false, error: error.message } : { success: true, data };\n }\n case \"create\": {\n const slug = (args.slug as string) || (args.name as string || \"\").toLowerCase().replace(/[^a-z0-9]+/g, \"-\").replace(/^-|-$/g, \"\");\n const { data, error } = await sb.from(\"creation_collections\")\n .insert({ store_id: sid, name: args.name, slug }).select().single();\n return error ? { success: false, error: error.message } : { success: true, data };\n }\n default:\n return { success: false, error: `Unknown collections action: ${args.action}` };\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,21 +1,26 @@
|
|
|
1
1
|
import { getClickHouseClient } from "../lib/clickhouse-client.js";
|
|
2
|
+
|
|
2
3
|
/**
|
|
3
4
|
* ClickHouse observability handler — platform-level metrics via direct HTTP queries.
|
|
4
5
|
* Replaces FDW RPCs with direct ClickHouse queries for lower latency.
|
|
5
6
|
*/
|
|
6
7
|
export async function handleClickHouse(sb, args, storeId) {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
8
|
+
const sid = storeId;
|
|
9
|
+
const hoursBack = args.hours_back || 24;
|
|
10
|
+
const limit = Math.min(args.limit || 50, 200);
|
|
11
|
+
const ch = getClickHouseClient();
|
|
12
|
+
if (!ch.isEnabled) {
|
|
13
|
+
return {
|
|
14
|
+
success: false,
|
|
15
|
+
error: "ClickHouse is not configured"
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
const storeFilter = sid ? `AND store_id = '${esc(sid)}'` : "";
|
|
19
|
+
switch (args.action) {
|
|
20
|
+
// ---- traces: List recent traces ----
|
|
21
|
+
case "traces":
|
|
22
|
+
{
|
|
23
|
+
const data = await ch.query(`
|
|
19
24
|
SELECT
|
|
20
25
|
trace_id,
|
|
21
26
|
arrayElement(groupArrayIf(service_name, parent_span_id = '' OR parent_span_id IS NULL), 1) AS root_service,
|
|
@@ -31,14 +36,21 @@ export async function handleClickHouse(sb, args, storeId) {
|
|
|
31
36
|
ORDER BY min(started_at) DESC
|
|
32
37
|
LIMIT ${limit}
|
|
33
38
|
`);
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
39
|
+
return {
|
|
40
|
+
success: true,
|
|
41
|
+
data
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
// ---- trace_detail: Full trace waterfall ----
|
|
46
|
+
case "trace_detail":
|
|
47
|
+
{
|
|
48
|
+
const traceId = args.trace_id;
|
|
49
|
+
if (!traceId) return {
|
|
50
|
+
success: false,
|
|
51
|
+
error: "trace_id is required"
|
|
52
|
+
};
|
|
53
|
+
const spans = await ch.query(`
|
|
42
54
|
SELECT
|
|
43
55
|
span_id, parent_span_id, trace_id, operation_name,
|
|
44
56
|
service_name, duration_ms AS duration,
|
|
@@ -49,11 +61,19 @@ export async function handleClickHouse(sb, args, storeId) {
|
|
|
49
61
|
WHERE trace_id = '${esc(traceId)}'
|
|
50
62
|
ORDER BY started_at ASC
|
|
51
63
|
`);
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
64
|
+
return {
|
|
65
|
+
success: true,
|
|
66
|
+
data: {
|
|
67
|
+
trace_id: traceId,
|
|
68
|
+
spans
|
|
69
|
+
}
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
// ---- function_health: Service health metrics ----
|
|
74
|
+
case "function_health":
|
|
75
|
+
{
|
|
76
|
+
const data = await ch.query(`
|
|
57
77
|
SELECT
|
|
58
78
|
service_name AS function_name,
|
|
59
79
|
sum(total_requests) AS total_reqs,
|
|
@@ -70,15 +90,22 @@ export async function handleClickHouse(sb, args, storeId) {
|
|
|
70
90
|
${storeFilter}
|
|
71
91
|
GROUP BY service_name
|
|
72
92
|
`);
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
93
|
+
return {
|
|
94
|
+
success: true,
|
|
95
|
+
data
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
// ---- function_logs: Request logs ----
|
|
100
|
+
case "function_logs":
|
|
101
|
+
{
|
|
102
|
+
const functionName = args.function_name;
|
|
103
|
+
if (!functionName) return {
|
|
104
|
+
success: false,
|
|
105
|
+
error: "function_name is required"
|
|
106
|
+
};
|
|
107
|
+
const levelFilter = args.level ? `AND severity = '${esc(args.level)}'` : "";
|
|
108
|
+
const data = await ch.query(`
|
|
82
109
|
SELECT
|
|
83
110
|
request_id, service_name AS function_name, http_status AS status,
|
|
84
111
|
duration_ms, http_method AS method, http_path AS path,
|
|
@@ -91,48 +118,59 @@ export async function handleClickHouse(sb, args, storeId) {
|
|
|
91
118
|
ORDER BY started_at DESC
|
|
92
119
|
LIMIT ${limit}
|
|
93
120
|
`);
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
121
|
+
return {
|
|
122
|
+
success: true,
|
|
123
|
+
data
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
// ---- cost_budgets: Budget utilization ----
|
|
128
|
+
case "cost_budgets":
|
|
129
|
+
{
|
|
130
|
+
if (!sid) return {
|
|
131
|
+
success: false,
|
|
132
|
+
error: "store_id is required for cost_budgets"
|
|
133
|
+
};
|
|
134
|
+
// Cost budgets require Postgres for ai_cost_budgets table + ClickHouse for spend
|
|
135
|
+
const {
|
|
136
|
+
data: budgets,
|
|
137
|
+
error: budgetErr
|
|
138
|
+
} = await sb.from("ai_cost_budgets").select("agent_id, limit_usd, is_active, created_at").eq("is_active", true).eq("store_id", sid);
|
|
139
|
+
if (budgetErr) return {
|
|
140
|
+
success: false,
|
|
141
|
+
error: budgetErr.message
|
|
142
|
+
};
|
|
143
|
+
const agentIds = (budgets || []).map(b => `'${esc(b.agent_id)}'`).join(",");
|
|
144
|
+
const spendRows = agentIds ? await ch.query(`
|
|
111
145
|
SELECT agent_id, sum(total_cost_usd) AS total_cost_usd
|
|
112
146
|
FROM token_usage_hourly
|
|
113
147
|
WHERE agent_id IN (${agentIds})
|
|
114
148
|
AND store_id = '${esc(sid)}'
|
|
115
149
|
GROUP BY agent_id
|
|
116
|
-
`)
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
150
|
+
`) : [];
|
|
151
|
+
const spendMap = new Map(spendRows.map(r => [r.agent_id, r.total_cost_usd]));
|
|
152
|
+
const data = (budgets || []).map(b => {
|
|
153
|
+
const spend = spendMap.get(b.agent_id) || 0;
|
|
154
|
+
return {
|
|
155
|
+
agent_id: b.agent_id,
|
|
156
|
+
budget_amount: b.limit_usd,
|
|
157
|
+
current_spend: spend,
|
|
158
|
+
period_start: b.created_at,
|
|
159
|
+
period_end: new Date().toISOString(),
|
|
160
|
+
utilization_pct: b.limit_usd > 0 ? spend / b.limit_usd * 100 : 0,
|
|
161
|
+
is_over_budget: spend > b.limit_usd
|
|
162
|
+
};
|
|
163
|
+
});
|
|
164
|
+
return {
|
|
165
|
+
success: true,
|
|
166
|
+
data
|
|
167
|
+
};
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
// ---- error_groups: Error fingerprints grouped ----
|
|
171
|
+
case "error_groups":
|
|
172
|
+
{
|
|
173
|
+
const data = await ch.query(`
|
|
136
174
|
SELECT
|
|
137
175
|
fingerprint,
|
|
138
176
|
any(error_type) AS error_type,
|
|
@@ -147,12 +185,20 @@ export async function handleClickHouse(sb, args, storeId) {
|
|
|
147
185
|
ORDER BY count DESC
|
|
148
186
|
LIMIT ${limit}
|
|
149
187
|
`);
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
188
|
+
return {
|
|
189
|
+
success: true,
|
|
190
|
+
data: {
|
|
191
|
+
groups: data,
|
|
192
|
+
total_groups: data.length,
|
|
193
|
+
hours_back: hoursBack
|
|
194
|
+
}
|
|
195
|
+
};
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
// ---- system_status: Combined overview ----
|
|
199
|
+
case "system_status":
|
|
200
|
+
{
|
|
201
|
+
const [functions, traces, budgetData] = await Promise.all([ch.query(`
|
|
156
202
|
SELECT
|
|
157
203
|
service_name AS function_name,
|
|
158
204
|
sum(total_requests) AS total_reqs,
|
|
@@ -163,8 +209,7 @@ export async function handleClickHouse(sb, args, storeId) {
|
|
|
163
209
|
WHERE bucket >= now() - INTERVAL ${Math.min(hoursBack, 1)} HOUR
|
|
164
210
|
${storeFilter}
|
|
165
211
|
GROUP BY service_name
|
|
166
|
-
`),
|
|
167
|
-
ch.query(`
|
|
212
|
+
`), ch.query(`
|
|
168
213
|
SELECT
|
|
169
214
|
trace_id,
|
|
170
215
|
arrayElement(groupArrayIf(service_name, parent_span_id = '' OR parent_span_id IS NULL), 1) AS root_service,
|
|
@@ -179,37 +224,40 @@ export async function handleClickHouse(sb, args, storeId) {
|
|
|
179
224
|
GROUP BY trace_id
|
|
180
225
|
ORDER BY min(started_at) DESC
|
|
181
226
|
LIMIT 10
|
|
182
|
-
`),
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
}
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
227
|
+
`), sid ? handleClickHouse(sb, {
|
|
228
|
+
action: "cost_budgets"
|
|
229
|
+
}, sid) : Promise.resolve({
|
|
230
|
+
success: true,
|
|
231
|
+
data: null
|
|
232
|
+
})]);
|
|
233
|
+
const totalRequests = functions.reduce((sum, f) => sum + (f.total_requests || 0), 0);
|
|
234
|
+
const totalErrors = functions.reduce((sum, f) => sum + (f.error_count || 0), 0);
|
|
235
|
+
return {
|
|
236
|
+
success: true,
|
|
237
|
+
data: {
|
|
238
|
+
summary: {
|
|
239
|
+
function_count: functions.length,
|
|
240
|
+
total_requests: totalRequests,
|
|
241
|
+
total_errors: totalErrors,
|
|
242
|
+
error_rate: totalRequests > 0 ? Math.round(totalErrors / totalRequests * 10000) / 100 : 0
|
|
243
|
+
},
|
|
244
|
+
functions,
|
|
245
|
+
recent_traces: traces,
|
|
246
|
+
cost_budgets: budgetData.data,
|
|
247
|
+
hours_back: hoursBack
|
|
248
|
+
}
|
|
249
|
+
};
|
|
250
|
+
}
|
|
251
|
+
default:
|
|
252
|
+
return {
|
|
253
|
+
success: false,
|
|
254
|
+
error: `Unknown clickhouse action: ${args.action}. Available: traces, trace_detail, function_health, function_logs, cost_budgets, error_groups, system_status`
|
|
255
|
+
};
|
|
256
|
+
}
|
|
211
257
|
}
|
|
258
|
+
|
|
212
259
|
/** Escape single quotes for ClickHouse SQL */
|
|
213
260
|
function esc(s) {
|
|
214
|
-
|
|
261
|
+
return s.replace(/'/g, "\\'");
|
|
215
262
|
}
|
|
263
|
+
//# sourceMappingURL=clickhouse.js.map
|