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
|
@@ -2,10 +2,12 @@
|
|
|
2
2
|
// Fixes intermittent 520 errors from Cloudflare by retrying failed requests
|
|
3
3
|
// and reusing client instances instead of creating new ones per request.
|
|
4
4
|
// Circuit breaker prevents retry storms when Supabase is down.
|
|
5
|
+
|
|
5
6
|
import { createClient } from "@supabase/supabase-js";
|
|
6
7
|
const MAX_RETRIES = 3;
|
|
7
8
|
const INITIAL_BACKOFF_MS = 500;
|
|
8
9
|
const MAX_BACKOFF_MS = 5_000;
|
|
10
|
+
|
|
9
11
|
// ── Circuit breaker ──
|
|
10
12
|
// When Supabase is consistently failing, stop retrying to prevent:
|
|
11
13
|
// 1. Retry storms that make Supabase worse
|
|
@@ -13,114 +15,124 @@ const MAX_BACKOFF_MS = 5_000;
|
|
|
13
15
|
// 3. SSE stream stalls that freeze the CLI
|
|
14
16
|
const CIRCUIT_FAILURE_THRESHOLD = 10; // Open circuit after 10 consecutive failures
|
|
15
17
|
const CIRCUIT_RESET_MS = 30_000; // Try again after 30s
|
|
18
|
+
|
|
16
19
|
let circuitFailures = 0;
|
|
17
20
|
let circuitOpenUntil = 0;
|
|
21
|
+
|
|
18
22
|
/** Check if circuit breaker allows the request */
|
|
19
23
|
function isCircuitOpen() {
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
return true;
|
|
24
|
+
if (circuitFailures < CIRCUIT_FAILURE_THRESHOLD) return false;
|
|
25
|
+
if (Date.now() >= circuitOpenUntil) {
|
|
26
|
+
// Half-open: allow one probe request
|
|
27
|
+
return false;
|
|
28
|
+
}
|
|
29
|
+
return true;
|
|
27
30
|
}
|
|
28
31
|
function recordCircuitFailure() {
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
}
|
|
32
|
+
circuitFailures++;
|
|
33
|
+
if (circuitFailures >= CIRCUIT_FAILURE_THRESHOLD) {
|
|
34
|
+
circuitOpenUntil = Date.now() + CIRCUIT_RESET_MS;
|
|
35
|
+
if (circuitFailures === CIRCUIT_FAILURE_THRESHOLD) {
|
|
36
|
+
console.warn(`[supabase] Circuit breaker OPEN — ${circuitFailures} consecutive failures, pausing for ${CIRCUIT_RESET_MS / 1000}s`);
|
|
35
37
|
}
|
|
38
|
+
}
|
|
36
39
|
}
|
|
37
40
|
function recordCircuitSuccess() {
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
41
|
+
if (circuitFailures > 0) {
|
|
42
|
+
console.info(`[supabase] Circuit breaker reset — connection recovered`);
|
|
43
|
+
}
|
|
44
|
+
circuitFailures = 0;
|
|
45
|
+
circuitOpenUntil = 0;
|
|
43
46
|
}
|
|
47
|
+
|
|
44
48
|
/** Custom fetch with retry for 5xx errors + circuit breaker */
|
|
45
49
|
function createRetryFetch(maxRetries = MAX_RETRIES) {
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
+
return async (input, init) => {
|
|
51
|
+
// Circuit breaker: fail fast when Supabase is known to be down
|
|
52
|
+
if (isCircuitOpen()) {
|
|
53
|
+
throw new Error("Supabase circuit breaker open — skipping request");
|
|
54
|
+
}
|
|
55
|
+
let lastError = null;
|
|
56
|
+
for (let attempt = 0; attempt <= maxRetries; attempt++) {
|
|
57
|
+
try {
|
|
58
|
+
const res = await fetch(input, {
|
|
59
|
+
...init,
|
|
60
|
+
// Keep connection alive to reduce TCP handshake overhead
|
|
61
|
+
keepalive: true
|
|
62
|
+
});
|
|
63
|
+
|
|
64
|
+
// Retry on 5xx errors (Cloudflare 520 = origin error, 522 = timeout, 524 = timeout)
|
|
65
|
+
if (res.status >= 500 && attempt < maxRetries) {
|
|
66
|
+
recordCircuitFailure();
|
|
67
|
+
if (isCircuitOpen()) {
|
|
68
|
+
return res; // Don't retry if circuit just opened
|
|
69
|
+
}
|
|
70
|
+
const backoff = Math.min(INITIAL_BACKOFF_MS * Math.pow(2, attempt), MAX_BACKOFF_MS);
|
|
71
|
+
console.warn(`[supabase] ${res.status} on ${typeof input === 'string' ? input.split('?')[0] : 'request'}, retry ${attempt + 1}/${maxRetries} in ${backoff}ms`);
|
|
72
|
+
await new Promise(r => setTimeout(r, backoff));
|
|
73
|
+
continue;
|
|
74
|
+
}
|
|
75
|
+
if (res.status < 500) {
|
|
76
|
+
recordCircuitSuccess();
|
|
50
77
|
}
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
if (isCircuitOpen()) {
|
|
63
|
-
return res; // Don't retry if circuit just opened
|
|
64
|
-
}
|
|
65
|
-
const backoff = Math.min(INITIAL_BACKOFF_MS * Math.pow(2, attempt), MAX_BACKOFF_MS);
|
|
66
|
-
console.warn(`[supabase] ${res.status} on ${typeof input === 'string' ? input.split('?')[0] : 'request'}, retry ${attempt + 1}/${maxRetries} in ${backoff}ms`);
|
|
67
|
-
await new Promise(r => setTimeout(r, backoff));
|
|
68
|
-
continue;
|
|
69
|
-
}
|
|
70
|
-
if (res.status < 500) {
|
|
71
|
-
recordCircuitSuccess();
|
|
72
|
-
}
|
|
73
|
-
return res;
|
|
74
|
-
}
|
|
75
|
-
catch (err) {
|
|
76
|
-
lastError = err;
|
|
77
|
-
recordCircuitFailure();
|
|
78
|
-
// Retry on network errors (ECONNRESET, ETIMEDOUT, etc.)
|
|
79
|
-
if (attempt < maxRetries && !isCircuitOpen()) {
|
|
80
|
-
const backoff = Math.min(INITIAL_BACKOFF_MS * Math.pow(2, attempt), MAX_BACKOFF_MS);
|
|
81
|
-
console.warn(`[supabase] Network error: ${lastError.message}, retry ${attempt + 1}/${maxRetries} in ${backoff}ms`);
|
|
82
|
-
await new Promise(r => setTimeout(r, backoff));
|
|
83
|
-
continue;
|
|
84
|
-
}
|
|
85
|
-
}
|
|
78
|
+
return res;
|
|
79
|
+
} catch (err) {
|
|
80
|
+
lastError = err;
|
|
81
|
+
recordCircuitFailure();
|
|
82
|
+
|
|
83
|
+
// Retry on network errors (ECONNRESET, ETIMEDOUT, etc.)
|
|
84
|
+
if (attempt < maxRetries && !isCircuitOpen()) {
|
|
85
|
+
const backoff = Math.min(INITIAL_BACKOFF_MS * Math.pow(2, attempt), MAX_BACKOFF_MS);
|
|
86
|
+
console.warn(`[supabase] Network error: ${lastError.message}, retry ${attempt + 1}/${maxRetries} in ${backoff}ms`);
|
|
87
|
+
await new Promise(r => setTimeout(r, backoff));
|
|
88
|
+
continue;
|
|
86
89
|
}
|
|
87
|
-
|
|
88
|
-
}
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
throw lastError || new Error("Supabase request failed after retries");
|
|
93
|
+
};
|
|
89
94
|
}
|
|
95
|
+
|
|
90
96
|
// Singleton service role client — reused across all requests
|
|
91
97
|
let _serviceClient = null;
|
|
92
98
|
let _supabaseUrl = "";
|
|
93
99
|
let _serviceRoleKey = "";
|
|
100
|
+
|
|
94
101
|
/** Initialize the shared Supabase client (call once at startup) */
|
|
95
102
|
export function initSupabase(url, serviceRoleKey) {
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
103
|
+
_supabaseUrl = url;
|
|
104
|
+
_serviceRoleKey = serviceRoleKey;
|
|
105
|
+
_serviceClient = null; // Reset on re-init
|
|
99
106
|
}
|
|
107
|
+
|
|
100
108
|
/** Get the shared service role Supabase client (singleton, retry-enabled) */
|
|
101
109
|
export function getServiceClient() {
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
}
|
|
106
|
-
_serviceClient = createClient(_supabaseUrl, _serviceRoleKey, {
|
|
107
|
-
global: {
|
|
108
|
-
fetch: createRetryFetch(),
|
|
109
|
-
},
|
|
110
|
-
auth: {
|
|
111
|
-
autoRefreshToken: false,
|
|
112
|
-
persistSession: false,
|
|
113
|
-
},
|
|
114
|
-
});
|
|
110
|
+
if (!_serviceClient) {
|
|
111
|
+
if (!_supabaseUrl || !_serviceRoleKey) {
|
|
112
|
+
throw new Error("Supabase not initialized. Call initSupabase() first.");
|
|
115
113
|
}
|
|
116
|
-
|
|
114
|
+
_serviceClient = createClient(_supabaseUrl, _serviceRoleKey, {
|
|
115
|
+
global: {
|
|
116
|
+
fetch: createRetryFetch()
|
|
117
|
+
},
|
|
118
|
+
auth: {
|
|
119
|
+
autoRefreshToken: false,
|
|
120
|
+
persistSession: false
|
|
121
|
+
}
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
return _serviceClient;
|
|
117
125
|
}
|
|
126
|
+
|
|
118
127
|
/** Create a user-scoped client (for RLS context) — uses retry fetch */
|
|
119
128
|
export function createUserClient(url, anonKey, token) {
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
129
|
+
return createClient(url, anonKey, {
|
|
130
|
+
global: {
|
|
131
|
+
headers: {
|
|
132
|
+
Authorization: `Bearer ${token}`
|
|
133
|
+
},
|
|
134
|
+
fetch: createRetryFetch(2) // Fewer retries for user requests
|
|
135
|
+
}
|
|
136
|
+
});
|
|
126
137
|
}
|
|
138
|
+
//# sourceMappingURL=supabase-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"supabase-client.js","names":["createClient","MAX_RETRIES","INITIAL_BACKOFF_MS","MAX_BACKOFF_MS","CIRCUIT_FAILURE_THRESHOLD","CIRCUIT_RESET_MS","circuitFailures","circuitOpenUntil","isCircuitOpen","Date","now","recordCircuitFailure","console","warn","recordCircuitSuccess","info","createRetryFetch","maxRetries","input","init","Error","lastError","attempt","res","fetch","keepalive","status","backoff","Math","min","pow","split","Promise","r","setTimeout","err","message","_serviceClient","_supabaseUrl","_serviceRoleKey","initSupabase","url","serviceRoleKey","getServiceClient","global","auth","autoRefreshToken","persistSession","createUserClient","anonKey","token","headers","Authorization"],"sources":["../../../src/server/lib/supabase-client.ts"],"sourcesContent":["// lib/supabase-client.ts — Resilient Supabase client with circuit breaker\n// Fixes intermittent 520 errors from Cloudflare by retrying failed requests\n// and reusing client instances instead of creating new ones per request.\n// Circuit breaker prevents retry storms when Supabase is down.\n\nimport { createClient, type SupabaseClient } from \"@supabase/supabase-js\";\n\nconst MAX_RETRIES = 3;\nconst INITIAL_BACKOFF_MS = 500;\nconst MAX_BACKOFF_MS = 5_000;\n\n// ── Circuit breaker ──\n// When Supabase is consistently failing, stop retrying to prevent:\n// 1. Retry storms that make Supabase worse\n// 2. Event loop blocking that causes health check failures\n// 3. SSE stream stalls that freeze the CLI\nconst CIRCUIT_FAILURE_THRESHOLD = 10; // Open circuit after 10 consecutive failures\nconst CIRCUIT_RESET_MS = 30_000; // Try again after 30s\n\nlet circuitFailures = 0;\nlet circuitOpenUntil = 0;\n\n/** Check if circuit breaker allows the request */\nfunction isCircuitOpen(): boolean {\n if (circuitFailures < CIRCUIT_FAILURE_THRESHOLD) return false;\n if (Date.now() >= circuitOpenUntil) {\n // Half-open: allow one probe request\n return false;\n }\n return true;\n}\n\nfunction recordCircuitFailure(): void {\n circuitFailures++;\n if (circuitFailures >= CIRCUIT_FAILURE_THRESHOLD) {\n circuitOpenUntil = Date.now() + CIRCUIT_RESET_MS;\n if (circuitFailures === CIRCUIT_FAILURE_THRESHOLD) {\n console.warn(`[supabase] Circuit breaker OPEN — ${circuitFailures} consecutive failures, pausing for ${CIRCUIT_RESET_MS / 1000}s`);\n }\n }\n}\n\nfunction recordCircuitSuccess(): void {\n if (circuitFailures > 0) {\n console.info(`[supabase] Circuit breaker reset — connection recovered`);\n }\n circuitFailures = 0;\n circuitOpenUntil = 0;\n}\n\n/** Custom fetch with retry for 5xx errors + circuit breaker */\nfunction createRetryFetch(maxRetries = MAX_RETRIES): typeof fetch {\n return async (input: RequestInfo | URL, init?: RequestInit): Promise<Response> => {\n // Circuit breaker: fail fast when Supabase is known to be down\n if (isCircuitOpen()) {\n throw new Error(\"Supabase circuit breaker open — skipping request\");\n }\n\n let lastError: Error | null = null;\n\n for (let attempt = 0; attempt <= maxRetries; attempt++) {\n try {\n const res = await fetch(input, {\n ...init,\n // Keep connection alive to reduce TCP handshake overhead\n keepalive: true,\n });\n\n // Retry on 5xx errors (Cloudflare 520 = origin error, 522 = timeout, 524 = timeout)\n if (res.status >= 500 && attempt < maxRetries) {\n recordCircuitFailure();\n if (isCircuitOpen()) {\n return res; // Don't retry if circuit just opened\n }\n const backoff = Math.min(INITIAL_BACKOFF_MS * Math.pow(2, attempt), MAX_BACKOFF_MS);\n console.warn(`[supabase] ${res.status} on ${typeof input === 'string' ? input.split('?')[0] : 'request'}, retry ${attempt + 1}/${maxRetries} in ${backoff}ms`);\n await new Promise(r => setTimeout(r, backoff));\n continue;\n }\n\n if (res.status < 500) {\n recordCircuitSuccess();\n }\n\n return res;\n } catch (err) {\n lastError = err as Error;\n recordCircuitFailure();\n\n // Retry on network errors (ECONNRESET, ETIMEDOUT, etc.)\n if (attempt < maxRetries && !isCircuitOpen()) {\n const backoff = Math.min(INITIAL_BACKOFF_MS * Math.pow(2, attempt), MAX_BACKOFF_MS);\n console.warn(`[supabase] Network error: ${lastError.message}, retry ${attempt + 1}/${maxRetries} in ${backoff}ms`);\n await new Promise(r => setTimeout(r, backoff));\n continue;\n }\n }\n }\n\n throw lastError || new Error(\"Supabase request failed after retries\");\n };\n}\n\n// Singleton service role client — reused across all requests\nlet _serviceClient: SupabaseClient | null = null;\nlet _supabaseUrl: string = \"\";\nlet _serviceRoleKey: string = \"\";\n\n/** Initialize the shared Supabase client (call once at startup) */\nexport function initSupabase(url: string, serviceRoleKey: string): void {\n _supabaseUrl = url;\n _serviceRoleKey = serviceRoleKey;\n _serviceClient = null; // Reset on re-init\n}\n\n/** Get the shared service role Supabase client (singleton, retry-enabled) */\nexport function getServiceClient(): SupabaseClient {\n if (!_serviceClient) {\n if (!_supabaseUrl || !_serviceRoleKey) {\n throw new Error(\"Supabase not initialized. Call initSupabase() first.\");\n }\n _serviceClient = createClient(_supabaseUrl, _serviceRoleKey, {\n global: {\n fetch: createRetryFetch(),\n },\n auth: {\n autoRefreshToken: false,\n persistSession: false,\n },\n });\n }\n return _serviceClient;\n}\n\n/** Create a user-scoped client (for RLS context) — uses retry fetch */\nexport function createUserClient(url: string, anonKey: string, token: string): SupabaseClient {\n return createClient(url, anonKey, {\n global: {\n headers: { Authorization: `Bearer ${token}` },\n fetch: createRetryFetch(2), // Fewer retries for user requests\n },\n });\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -2,99 +2,88 @@
|
|
|
2
2
|
//
|
|
3
3
|
// Used by workflow engine to flow data between steps.
|
|
4
4
|
// Extends the fillTemplate() pattern from utils.ts with workflow-specific contexts.
|
|
5
|
+
|
|
5
6
|
const TEMPLATE_REGEX = /\{\{([^}]+)\}\}/g;
|
|
7
|
+
|
|
6
8
|
/** Block prototype pollution / traversal attacks */
|
|
7
|
-
const BLOCKED_PROPS = new Set([
|
|
8
|
-
|
|
9
|
-
"__defineGetter__", "__defineSetter__",
|
|
10
|
-
"__lookupGetter__", "__lookupSetter__",
|
|
11
|
-
]);
|
|
9
|
+
const BLOCKED_PROPS = new Set(["__proto__", "constructor", "prototype", "__defineGetter__", "__defineSetter__", "__lookupGetter__", "__lookupSetter__"]);
|
|
10
|
+
|
|
12
11
|
/**
|
|
13
12
|
* Safely walk a dot-path into an object, blocking dangerous property names.
|
|
14
13
|
*/
|
|
15
14
|
function walkPath(value, parts, startIndex) {
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
current = current[parts[i]];
|
|
25
|
-
}
|
|
26
|
-
return current;
|
|
15
|
+
let current = value;
|
|
16
|
+
for (let i = startIndex; i < parts.length; i++) {
|
|
17
|
+
if (current === null || current === undefined) return undefined;
|
|
18
|
+
if (typeof current !== "object") return undefined;
|
|
19
|
+
if (BLOCKED_PROPS.has(parts[i])) return undefined; // Block prototype traversal
|
|
20
|
+
current = current[parts[i]];
|
|
21
|
+
}
|
|
22
|
+
return current;
|
|
27
23
|
}
|
|
24
|
+
|
|
28
25
|
/**
|
|
29
26
|
* Resolve a single template expression like "steps.check.output.count" against the context.
|
|
30
27
|
* Returns the resolved value, or undefined if the path doesn't exist.
|
|
31
28
|
*/
|
|
32
29
|
function resolveExpression(expr, ctx) {
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
const ALLOWED_ENV_KEYS = new Set(["APP_URL", "APP_NAME", "NODE_ENV"]);
|
|
67
|
-
if (parts.length >= 2 && !ALLOWED_ENV_KEYS.has(parts[1]))
|
|
68
|
-
return undefined;
|
|
69
|
-
value = walkPath(ctx.env, parts, 1);
|
|
70
|
-
}
|
|
71
|
-
else {
|
|
72
|
-
return undefined;
|
|
73
|
-
}
|
|
74
|
-
return value;
|
|
30
|
+
const trimmed = expr.trim();
|
|
31
|
+
|
|
32
|
+
// Built-in variables
|
|
33
|
+
if (trimmed === "now") return new Date().toISOString();
|
|
34
|
+
if (trimmed === "today") return new Date().toISOString().slice(0, 10);
|
|
35
|
+
if (trimmed === "timestamp") return Date.now();
|
|
36
|
+
|
|
37
|
+
// Navigate the dot path
|
|
38
|
+
const parts = trimmed.split(".");
|
|
39
|
+
const root = parts[0];
|
|
40
|
+
let value;
|
|
41
|
+
if (root === "steps" && parts.length >= 2) {
|
|
42
|
+
const stepKey = parts[1];
|
|
43
|
+
const stepData = ctx.steps[stepKey];
|
|
44
|
+
if (!stepData) return undefined;
|
|
45
|
+
value = walkPath(stepData, parts, 2);
|
|
46
|
+
} else if (root === "trigger") {
|
|
47
|
+
value = walkPath(ctx.trigger, parts, 1);
|
|
48
|
+
} else if (root === "input") {
|
|
49
|
+
value = walkPath(ctx.input, parts, 1);
|
|
50
|
+
} else if (root === "workflow" && ctx.workflow) {
|
|
51
|
+
value = walkPath(ctx.workflow, parts, 1);
|
|
52
|
+
} else if (root === "run" && ctx.run) {
|
|
53
|
+
value = walkPath(ctx.run, parts, 1);
|
|
54
|
+
} else if (root === "env" && ctx.env) {
|
|
55
|
+
// P0 FIX: Only allow explicitly whitelisted env keys — never expose process.env
|
|
56
|
+
const ALLOWED_ENV_KEYS = new Set(["APP_URL", "APP_NAME", "NODE_ENV"]);
|
|
57
|
+
if (parts.length >= 2 && !ALLOWED_ENV_KEYS.has(parts[1])) return undefined;
|
|
58
|
+
value = walkPath(ctx.env, parts, 1);
|
|
59
|
+
} else {
|
|
60
|
+
return undefined;
|
|
61
|
+
}
|
|
62
|
+
return value;
|
|
75
63
|
}
|
|
64
|
+
|
|
76
65
|
/**
|
|
77
66
|
* Resolve all {{...}} placeholders in a string.
|
|
78
67
|
* If the entire string is a single template AND the resolved value is not a string,
|
|
79
68
|
* return the raw value (preserving numbers, objects, arrays, booleans).
|
|
80
69
|
*/
|
|
81
70
|
function resolveString(template, ctx) {
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
});
|
|
71
|
+
// Check if the entire string is a single template expression
|
|
72
|
+
const singleMatch = template.match(/^\{\{([^}]+)\}\}$/);
|
|
73
|
+
if (singleMatch) {
|
|
74
|
+
const resolved = resolveExpression(singleMatch[1], ctx);
|
|
75
|
+
return resolved !== undefined ? resolved : template;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
// Multiple templates or mixed text — string interpolation
|
|
79
|
+
return template.replace(TEMPLATE_REGEX, (match, expr) => {
|
|
80
|
+
const resolved = resolveExpression(expr, ctx);
|
|
81
|
+
if (resolved === undefined) return match;
|
|
82
|
+
if (typeof resolved === "object" && resolved !== null) return JSON.stringify(resolved);
|
|
83
|
+
return String(resolved);
|
|
84
|
+
});
|
|
97
85
|
}
|
|
86
|
+
|
|
98
87
|
/**
|
|
99
88
|
* Recursively resolve templates in any JSON-compatible value.
|
|
100
89
|
* - Strings: resolve {{...}} patterns
|
|
@@ -103,24 +92,24 @@ function resolveString(template, ctx) {
|
|
|
103
92
|
* - Primitives: return as-is
|
|
104
93
|
*/
|
|
105
94
|
export function resolveTemplate(value, ctx, depth = 0) {
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
95
|
+
// Guard against infinite recursion from circular or deeply nested structures
|
|
96
|
+
if (depth > 20) return value;
|
|
97
|
+
if (typeof value === "string") {
|
|
98
|
+
return resolveString(value, ctx);
|
|
99
|
+
}
|
|
100
|
+
if (Array.isArray(value)) {
|
|
101
|
+
return value.map(item => resolveTemplate(item, ctx, depth + 1));
|
|
102
|
+
}
|
|
103
|
+
if (value !== null && typeof value === "object") {
|
|
104
|
+
const resolved = {};
|
|
105
|
+
for (const [k, v] of Object.entries(value)) {
|
|
106
|
+
resolved[k] = resolveTemplate(v, ctx, depth + 1);
|
|
111
107
|
}
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
if (value !== null && typeof value === "object") {
|
|
116
|
-
const resolved = {};
|
|
117
|
-
for (const [k, v] of Object.entries(value)) {
|
|
118
|
-
resolved[k] = resolveTemplate(v, ctx, depth + 1);
|
|
119
|
-
}
|
|
120
|
-
return resolved;
|
|
121
|
-
}
|
|
122
|
-
return value;
|
|
108
|
+
return resolved;
|
|
109
|
+
}
|
|
110
|
+
return value;
|
|
123
111
|
}
|
|
112
|
+
|
|
124
113
|
/**
|
|
125
114
|
* Evaluate a simple condition expression.
|
|
126
115
|
* Supports: ==, !=, >, <, >=, <=, contains, !contains, exists, !exists
|
|
@@ -132,94 +121,83 @@ export function resolveTemplate(value, ctx, depth = 0) {
|
|
|
132
121
|
* "{{trigger.type}} != 'test'"
|
|
133
122
|
*/
|
|
134
123
|
export function evaluateCondition(expression, ctx) {
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
124
|
+
// Resolve all templates in the expression first
|
|
125
|
+
const resolved = resolveString(expression, ctx);
|
|
126
|
+
const expr = typeof resolved === 'object' && resolved !== null ? JSON.stringify(resolved) : String(resolved);
|
|
127
|
+
|
|
128
|
+
// exists / !exists checks
|
|
129
|
+
if (expr.includes(" exists")) {
|
|
130
|
+
const parts = expr.split(/\s+exists/);
|
|
131
|
+
const val = parts[0].trim();
|
|
132
|
+
const isNegated = expression.trim().startsWith("!");
|
|
133
|
+
const exists = val !== "" && val !== "undefined" && val !== "null" && !val.includes("{{");
|
|
134
|
+
return isNegated ? !exists : exists;
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
// P1 FIX: Use regex-based matching with word boundaries to prevent data containing
|
|
138
|
+
// operator strings (e.g., "value >= 10" in a field) from being misinterpreted
|
|
139
|
+
const operatorPatterns = [[/\s!==\s/, "!=="], [/\s===\s/, "==="], [/\s!=\s/, "!="], [/\s==\s/, "=="], [/\s>=\s/, ">="], [/\s<=\s/, "<="], [/\s>\s/, ">"], [/\s<\s/, "<"], [/\scontains\s/, "contains"], [/\s!contains\s/, "!contains"]];
|
|
140
|
+
// Identify quoted regions to avoid matching operators inside them
|
|
141
|
+
const quoteRegions = [];
|
|
142
|
+
const quoteRe = /(['"])(?:(?!\1).)*\1/g;
|
|
143
|
+
let qm;
|
|
144
|
+
while ((qm = quoteRe.exec(expr)) !== null) {
|
|
145
|
+
quoteRegions.push([qm.index, qm.index + qm[0].length]);
|
|
146
|
+
}
|
|
147
|
+
for (const [pattern, op] of operatorPatterns) {
|
|
148
|
+
// Use the LAST match that is NOT inside a quoted string.
|
|
149
|
+
const globalRe = new RegExp(pattern.source, "g");
|
|
150
|
+
let lastMatch = null;
|
|
151
|
+
let m;
|
|
152
|
+
while ((m = globalRe.exec(expr)) !== null) {
|
|
153
|
+
const idx = m.index;
|
|
154
|
+
const insideQuotes = quoteRegions.some(([s, e]) => idx > s && idx < e);
|
|
155
|
+
if (!insideQuotes) lastMatch = m;
|
|
156
|
+
}
|
|
157
|
+
if (!lastMatch || lastMatch.index === undefined) continue;
|
|
158
|
+
let left = expr.substring(0, lastMatch.index).trim();
|
|
159
|
+
let right = expr.substring(lastMatch.index + lastMatch[0].length).trim();
|
|
160
|
+
|
|
161
|
+
// Strip quotes from right side
|
|
162
|
+
if (right.startsWith("'") && right.endsWith("'") || right.startsWith('"') && right.endsWith('"')) {
|
|
163
|
+
right = right.slice(1, -1);
|
|
147
164
|
}
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
const operatorPatterns = [
|
|
151
|
-
[/\s!==\s/, "!=="],
|
|
152
|
-
[/\s===\s/, "==="],
|
|
153
|
-
[/\s!=\s/, "!="],
|
|
154
|
-
[/\s==\s/, "=="],
|
|
155
|
-
[/\s>=\s/, ">="],
|
|
156
|
-
[/\s<=\s/, "<="],
|
|
157
|
-
[/\s>\s/, ">"],
|
|
158
|
-
[/\s<\s/, "<"],
|
|
159
|
-
[/\scontains\s/, "contains"],
|
|
160
|
-
[/\s!contains\s/, "!contains"],
|
|
161
|
-
];
|
|
162
|
-
// Identify quoted regions to avoid matching operators inside them
|
|
163
|
-
const quoteRegions = [];
|
|
164
|
-
const quoteRe = /(['"])(?:(?!\1).)*\1/g;
|
|
165
|
-
let qm;
|
|
166
|
-
while ((qm = quoteRe.exec(expr)) !== null) {
|
|
167
|
-
quoteRegions.push([qm.index, qm.index + qm[0].length]);
|
|
165
|
+
if (left.startsWith("'") && left.endsWith("'") || left.startsWith('"') && left.endsWith('"')) {
|
|
166
|
+
left = left.slice(1, -1);
|
|
168
167
|
}
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
const numLeft = Number(left);
|
|
192
|
-
const numRight = Number(right);
|
|
193
|
-
const bothNumeric = !isNaN(numLeft) && !isNaN(numRight) && left !== "" && right !== "";
|
|
194
|
-
switch (op.trim()) {
|
|
195
|
-
case "===":
|
|
196
|
-
case "==":
|
|
197
|
-
return bothNumeric ? numLeft === numRight : left === right;
|
|
198
|
-
case "!==":
|
|
199
|
-
case "!=":
|
|
200
|
-
return bothNumeric ? numLeft !== numRight : left !== right;
|
|
201
|
-
case ">":
|
|
202
|
-
return bothNumeric ? numLeft > numRight : left > right;
|
|
203
|
-
case "<":
|
|
204
|
-
return bothNumeric ? numLeft < numRight : left < right;
|
|
205
|
-
case ">=":
|
|
206
|
-
return bothNumeric ? numLeft >= numRight : left >= right;
|
|
207
|
-
case "<=":
|
|
208
|
-
return bothNumeric ? numLeft <= numRight : left <= right;
|
|
209
|
-
case "contains":
|
|
210
|
-
return left.includes(right);
|
|
211
|
-
case "!contains":
|
|
212
|
-
return !left.includes(right);
|
|
213
|
-
}
|
|
168
|
+
const numLeft = Number(left);
|
|
169
|
+
const numRight = Number(right);
|
|
170
|
+
const bothNumeric = !isNaN(numLeft) && !isNaN(numRight) && left !== "" && right !== "";
|
|
171
|
+
switch (op.trim()) {
|
|
172
|
+
case "===":
|
|
173
|
+
case "==":
|
|
174
|
+
return bothNumeric ? numLeft === numRight : left === right;
|
|
175
|
+
case "!==":
|
|
176
|
+
case "!=":
|
|
177
|
+
return bothNumeric ? numLeft !== numRight : left !== right;
|
|
178
|
+
case ">":
|
|
179
|
+
return bothNumeric ? numLeft > numRight : left > right;
|
|
180
|
+
case "<":
|
|
181
|
+
return bothNumeric ? numLeft < numRight : left < right;
|
|
182
|
+
case ">=":
|
|
183
|
+
return bothNumeric ? numLeft >= numRight : left >= right;
|
|
184
|
+
case "<=":
|
|
185
|
+
return bothNumeric ? numLeft <= numRight : left <= right;
|
|
186
|
+
case "contains":
|
|
187
|
+
return left.includes(right);
|
|
188
|
+
case "!contains":
|
|
189
|
+
return !left.includes(right);
|
|
214
190
|
}
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
// Truthy/falsy check — if expression resolved to a value
|
|
194
|
+
if (expr === "true" || expr === "1") return true;
|
|
195
|
+
if (expr === "false" || expr === "0" || expr === "" || expr === "null" || expr === "undefined") return false;
|
|
196
|
+
|
|
197
|
+
// If there are still unresolved templates, condition is false
|
|
198
|
+
if (expr.includes("{{")) return false;
|
|
199
|
+
|
|
200
|
+
// Non-empty string is truthy
|
|
201
|
+
return expr.length > 0;
|
|
225
202
|
}
|
|
203
|
+
//# sourceMappingURL=template-resolver.js.map
|