whale-code 6.5.4 → 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 +29 -0
- package/dist/cli/services/agent-config.js +91 -0
- 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 +978 -669
- 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.d.ts +2 -3
- package/dist/cli/services/error-logger.js +189 -180
- 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 +606 -430
- 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 +862 -560
- 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.d.ts +6 -0
- package/dist/server/handlers/api-docs.js +1613 -0
- package/dist/server/handlers/api-docs.js.map +1 -0
- package/dist/server/handlers/api-keys.js +295 -232
- 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.d.ts +0 -53
- package/dist/server/handlers/comms.js +1443 -970
- 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 -1017
- 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 +3166 -2390
- 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.d.ts +1 -1
- package/dist/server/lib/pdf-renderer.js +954 -776
- 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 +9 -0
- package/dist/server/lib/server-agent-loop.js +906 -624
- package/dist/server/lib/server-agent-loop.js.map +1 -0
- package/dist/server/lib/server-subagent.d.ts +2 -0
- package/dist/server/lib/server-subagent.js +260 -162
- 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 +254 -176
- package/dist/server/providers/anthropic.js.map +1 -0
- package/dist/server/providers/bedrock.js +221 -162
- 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.d.ts +13 -0
- package/dist/server/tool-router.js +960 -598
- 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 +191 -24
- package/dist/shared/agent-core.js +971 -462
- 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 +17 -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 -2
- 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":"api-client.js","names":["getContextManagement","getMaxOutputTokens","getThinkingConfig","isRetryableError","addPromptCaching","getProvider","MAX_RETRIES","RETRY_BASE_DELAY_MS","buildAPIRequest","opts","model","contextProfile","thinkingEnabled","maxOutputTokens","contextOverrides","provider","isAnthropicModel","betas","edits","ctxMgmt","config","type","keep","value","trigger","supportsCompaction","includes","push","pause_after_compaction","instructions","thinkingCfg","beta","maxTokens","thinking","budget_tokens","Math","min","filter","e","contextManagement","callServerProxy","proxyUrl","signal","timeoutMs","tokenRefreshed","attempt","body","mode","messages","system","tools","max_tokens","apiConfig","stream","length","context_management","temperature","storeId","store_id","Array","isArray","msgs","keepFrom","max","i","msg","content","block","source","text","sub","serialized","JSON","stringify","fetchOpts","method","headers","token","String","Buffer","byteLength","controller","timeout","AbortController","setTimeout","abort","response","fetch","clearTimeout","ok","errorBody","status","onTokenRefresh","newToken","Object","assign","Error","err","aborted","errMsg","message","onRetry","delay","pow","Promise","resolve","reject","reason","timer","onAbort","addEventListener","once","fallbackModel","fromModel","onFallback","buildSystemBlocks","systemPrompt","costContext","enableCaching","cache_control","prepareWithCaching","trimGeminiContext","estimatedTokens","threshold","keepRecent","toolResultCount","trimCount","trimmed","map","callTranscribe","audioBase64","mediaType","Authorization","audio_base64","media_type","errText","data","json","success","transcript","error","trimOpenAIContext","COMPACTION_TIMEOUT_MS","requestProviderCompaction","system_prompt","compaction_content"],"sources":["../../src/shared/api-client.ts"],"sourcesContent":["/**\n * Unified API Client — ONE server proxy caller with retry and config builder.\n *\n * Replaces proxy+direct call paths in agent-loop, subagent, teammate.\n * CLI-only: always calls through server proxy (no direct Anthropic SDK usage).\n */\n\nimport {\n getContextManagement,\n getMaxOutputTokens,\n getThinkingConfig,\n isRetryableError,\n addPromptCaching,\n} from \"./agent-core.js\";\nimport type { CompactableMessage } from \"./compaction.js\";\nimport { getProvider } from \"./constants.js\";\nimport type { ContextProfile, APIRequestConfig } from \"./types.js\";\n\n// ============================================================================\n// CONSTANTS\n// ============================================================================\n\nconst MAX_RETRIES = 3;\nconst RETRY_BASE_DELAY_MS = 1000;\n\n// ============================================================================\n// API REQUEST CONFIG BUILDER\n// ============================================================================\n\n/**\n * Build all Anthropic API config from a simple profile.\n *\n * Profiles:\n * - 'main': clear at 80K/keep 3, compact at 120K (Opus only)\n * - 'subagent': clear at 60K/keep 2, no compaction, 8192 max tokens\n * - 'teammate': clear at 80K/keep 3, no compaction\n */\nexport function buildAPIRequest(opts: {\n model: string;\n contextProfile: ContextProfile;\n thinkingEnabled?: boolean;\n maxOutputTokens?: number;\n contextOverrides?: import(\"./agent-core.js\").ContextManagementOverrides;\n}): APIRequestConfig {\n const { model, contextProfile, thinkingEnabled = false, maxOutputTokens, contextOverrides } = opts;\n\n // Context management config per profile\n // Non-Anthropic models (Gemini, OpenAI, etc.) don't support Anthropic betas or context management\n const provider = getProvider(model);\n const isAnthropicModel = provider === \"anthropic\" || provider === \"bedrock\";\n let betas: string[] = isAnthropicModel ? [\"context-management-2025-06-27\"] : [];\n let edits: Array<Record<string, unknown>> = [];\n\n switch (contextProfile) {\n case \"main\": {\n const ctxMgmt = getContextManagement(model, contextOverrides);\n betas = [...ctxMgmt.betas];\n edits = ctxMgmt.config.edits;\n break;\n }\n case \"subagent\":\n if (isAnthropicModel) {\n edits = [\n {\n type: \"clear_thinking_20251015\",\n keep: { type: \"thinking_turns\", value: 1 },\n },\n {\n type: \"clear_tool_uses_20250919\",\n trigger: { type: \"input_tokens\", value: 60_000 },\n keep: { type: \"tool_uses\", value: 2 },\n },\n ];\n // Compaction for sub-agents on models that support it (lower threshold than main agent).\n // Trigger at 80K — above the 60K clear_tool_uses threshold so clearing fires first.\n const supportsCompaction = model.includes(\"opus-4-6\") || model.includes(\"sonnet-4-6\");\n if (supportsCompaction) {\n edits.push({\n type: \"compact_20260112\",\n trigger: { type: \"input_tokens\", value: 80_000 },\n pause_after_compaction: true,\n instructions: \"Summarize preserving: task goal, files found/modified, key findings, next steps.\",\n });\n betas.push(\"compact-2026-01-12\");\n }\n }\n break;\n case \"teammate\": {\n const ctxMgmt = getContextManagement(model);\n betas = [...ctxMgmt.betas];\n edits = ctxMgmt.config.edits;\n break;\n }\n }\n\n // Thinking config\n const thinkingCfg = getThinkingConfig(model, thinkingEnabled);\n if (thinkingCfg.beta) betas.push(thinkingCfg.beta);\n\n // Max tokens — caller is responsible for setting appropriate limits per context\n const maxTokens = getMaxOutputTokens(model, maxOutputTokens);\n\n // Build thinking param (ensure budget < maxTokens)\n // Only include for Anthropic/Bedrock — Gemini/OpenAI handle thinking internally\n let thinking: { type: string; budget_tokens?: number } | undefined;\n if (isAnthropicModel && thinkingCfg.thinking.type !== \"disabled\") {\n thinking = thinkingCfg.thinking.budget_tokens\n ? { ...thinkingCfg.thinking, budget_tokens: Math.min(thinkingCfg.thinking.budget_tokens, maxTokens - 1) }\n : thinkingCfg.thinking;\n }\n\n // Strip clear_thinking edits when thinking is disabled — API requires thinking\n // to be enabled or adaptive for clear_thinking_20251015 to be accepted\n if (!thinking) {\n edits = edits.filter(e => e.type !== \"clear_thinking_20251015\");\n }\n\n return {\n betas,\n contextManagement: { edits },\n thinking,\n maxTokens,\n };\n}\n\n// ============================================================================\n// SERVER PROXY CALLER\n// ============================================================================\n\nexport interface CallServerProxyConfig {\n proxyUrl: string;\n token: string;\n model: string;\n system: object[];\n messages: object[];\n tools: object[];\n apiConfig: APIRequestConfig;\n signal?: AbortSignal;\n timeoutMs?: number;\n fallbackModel?: string;\n storeId?: string; // Required for non-Anthropic providers (credential resolution)\n onFallback?: (fromModel: string, toModel: string) => void;\n onRetry?: (attempt: number, maxRetries: number, error: string) => void;\n /** Called on 401 to refresh the auth token. Returns new token or null. */\n onTokenRefresh?: () => Promise<string | null>;\n}\n\n/**\n * Call server proxy endpoint and return raw SSE stream.\n * Retries with exponential backoff on 429/500/529.\n */\nexport async function callServerProxy(\n config: CallServerProxyConfig,\n): Promise<ReadableStream<Uint8Array>> {\n const { proxyUrl, signal, timeoutMs } = config;\n let tokenRefreshed = false;\n\n for (let attempt = 0; attempt <= MAX_RETRIES; attempt++) {\n try {\n const body: Record<string, unknown> = {\n mode: \"proxy\",\n messages: config.messages,\n system: config.system,\n tools: config.tools,\n model: config.model,\n max_tokens: config.apiConfig.maxTokens,\n stream: true,\n betas: config.apiConfig.betas,\n ...(config.apiConfig.contextManagement?.edits?.length\n ? { context_management: config.apiConfig.contextManagement }\n : {}),\n };\n if (config.apiConfig.thinking) {\n body.thinking = config.apiConfig.thinking;\n // Anthropic requires temperature=1.0 when thinking is enabled — enforce client-side\n if (config.apiConfig.thinking.type !== \"disabled\") {\n body.temperature = 1.0;\n }\n }\n if (config.storeId) {\n body.store_id = config.storeId;\n }\n\n // Prune old base64 images from conversation history before serializing.\n // Keep images only in the last 2 messages to avoid multi-MB request bodies\n // that can cause \"Invalid JSON\" errors from body truncation on the proxy.\n if (Array.isArray(body.messages) && (body.messages as any[]).length > 4) {\n const msgs = body.messages as any[];\n const keepFrom = Math.max(0, msgs.length - 2);\n for (let i = 0; i < keepFrom; i++) {\n const msg = msgs[i];\n if (!Array.isArray(msg?.content)) continue;\n for (const block of msg.content) {\n if (block.type === \"image\" && block.source?.type === \"base64\") {\n block.type = \"text\";\n block.text = \"[image]\";\n delete block.source;\n }\n if (block.type === \"tool_result\" && Array.isArray(block.content)) {\n for (const sub of block.content) {\n if (sub.type === \"image\" && sub.source?.type === \"base64\") {\n sub.type = \"text\";\n sub.text = \"[image]\";\n delete sub.source;\n }\n }\n }\n }\n }\n }\n\n const serialized = JSON.stringify(body);\n\n const fetchOpts: RequestInit = {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"Authorization\": `Bearer ${config.token}`,\n \"Content-Length\": String(Buffer.byteLength(serialized)),\n },\n body: serialized,\n signal,\n };\n\n // Apply timeout only when the caller did NOT already supply a signal\n let controller: AbortController | undefined;\n let timeout: ReturnType<typeof setTimeout> | undefined;\n if (timeoutMs && !signal) {\n controller = new AbortController();\n timeout = setTimeout(() => controller!.abort(), timeoutMs);\n fetchOpts.signal = controller.signal;\n }\n\n try {\n const response = await fetch(proxyUrl, fetchOpts);\n if (timeout) clearTimeout(timeout);\n\n if (response.ok && response.body) {\n return response.body;\n }\n\n const errorBody = await response.text();\n\n // Auto-refresh on 401 (token invalidated server-side before local expiry)\n if (response.status === 401 && config.onTokenRefresh && !tokenRefreshed) {\n const newToken = await config.onTokenRefresh();\n if (newToken) {\n tokenRefreshed = true;\n config.token = newToken;\n continue; // retry with new token\n }\n }\n\n throw Object.assign(\n new Error(`Proxy error (${response.status}): ${errorBody}`),\n { status: response.status },\n );\n } catch (err) {\n if (timeout) clearTimeout(timeout);\n throw err;\n }\n } catch (err: unknown) {\n if (signal?.aborted) throw err;\n\n if (attempt < MAX_RETRIES && isRetryableError(err)) {\n const errMsg = err instanceof Error ? err.message : String(err);\n config.onRetry?.(attempt + 1, MAX_RETRIES, errMsg);\n const delay = RETRY_BASE_DELAY_MS * Math.pow(2, attempt);\n\n // Abort-aware backoff — ESC can interrupt the wait immediately\n await new Promise<void>((resolve, reject) => {\n if (signal?.aborted) { reject(signal.reason ?? new Error(\"Aborted\")); return; }\n const timer = setTimeout(resolve, delay);\n const onAbort = () => { clearTimeout(timer); reject(signal!.reason ?? new Error(\"Aborted\")); };\n signal?.addEventListener(\"abort\", onAbort, { once: true });\n });\n\n // Fallback model on last retry\n if (attempt === MAX_RETRIES - 1 && config.fallbackModel) {\n const fromModel = config.model;\n config.model = config.fallbackModel;\n config.onFallback?.(fromModel, config.model);\n }\n continue;\n }\n throw err;\n }\n }\n\n throw new Error(\"Failed to get response after retries\");\n}\n\n// ============================================================================\n// HELPERS — system prompt + caching setup\n// ============================================================================\n\n/**\n * Build system blocks with prompt caching.\n * Cached system prompt + optional dynamic cost context (after cache breakpoint).\n */\nexport function buildSystemBlocks(\n systemPrompt: string,\n costContext?: string,\n enableCaching = true,\n): Array<Record<string, unknown>> {\n const system: Array<Record<string, unknown>> = [];\n\n if (enableCaching) {\n system.push({\n type: \"text\",\n text: systemPrompt,\n cache_control: { type: \"ephemeral\" },\n });\n } else {\n system.push({ type: \"text\", text: systemPrompt });\n }\n\n if (costContext) {\n system.push({ type: \"text\", text: costContext });\n }\n\n return system;\n}\n\n/**\n * Prepare messages and tools with prompt caching.\n * Skips cache_control injection for Gemini (uses implicit caching).\n */\nexport function prepareWithCaching<\n T extends object = object,\n M extends { role: string; content: unknown } = { role: string; content: unknown },\n>(\n tools: T[],\n messages: M[],\n model?: string,\n): { tools: T[]; messages: M[] } {\n if (model) {\n const provider = getProvider(model);\n if (provider === \"gemini\" || provider === \"openai\") {\n return { tools, messages };\n }\n }\n return addPromptCaching(tools, messages);\n}\n\n// ============================================================================\n// GEMINI CONTEXT TRIMMING\n// ============================================================================\n\n/**\n * Client-side context trimming for Gemini (no server-side context management).\n * When estimated input tokens exceed threshold, replaces old tool result contents\n * with \"[trimmed]\" to stay within Gemini's 1M context window.\n */\nexport function trimGeminiContext<T extends CompactableMessage>(\n messages: T[],\n estimatedTokens: number,\n threshold = 950_000,\n keepRecent = 5,\n): T[] {\n if (estimatedTokens < threshold) return messages;\n\n type Block = { type?: string; content?: unknown };\n let toolResultCount = 0;\n for (const msg of messages) {\n if (Array.isArray(msg.content)) {\n for (const block of msg.content as Block[]) {\n if (block.type === \"tool_result\") toolResultCount++;\n }\n }\n }\n\n if (toolResultCount <= keepRecent) return messages;\n\n const trimCount = toolResultCount - keepRecent;\n let trimmed = 0;\n\n return messages.map((msg) => {\n if (!Array.isArray(msg.content)) return msg;\n const content = (msg.content as Block[]).map((block) => {\n if (block.type === \"tool_result\" && trimmed < trimCount) {\n trimmed++;\n if (typeof block.content === \"string\") {\n return { ...block, content: \"[trimmed]\" };\n } else if (Array.isArray(block.content)) {\n return { ...block, content: [{ type: \"text\", text: \"[trimmed]\" }] };\n }\n }\n return block;\n });\n return { ...msg, content } as T;\n });\n}\n\n// ============================================================================\n// OPENAI CONTEXT TRIMMING\n// ============================================================================\n\n/**\n * Client-side context trimming for OpenAI (no server-side context management).\n * When estimated input tokens exceed threshold, replaces old tool result contents\n * with \"[trimmed]\" to stay within OpenAI's 200K context window.\n */\n// ============================================================================\n// AUDIO TRANSCRIPTION CLIENT\n// ============================================================================\n\n/**\n * Call server transcription endpoint (OpenAI Whisper via our Fly.io proxy).\n * Used by tool-dispatch when __AUDIO__ marker is detected in tool results.\n */\nexport async function callTranscribe(opts: {\n proxyUrl: string;\n token: string;\n storeId: string;\n audioBase64: string;\n mediaType: string;\n}): Promise<string> {\n const { proxyUrl, token, storeId, audioBase64, mediaType } = opts;\n\n // Use same server URL as proxy, just different mode\n const response = await fetch(proxyUrl, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${token}`,\n },\n body: JSON.stringify({\n mode: \"transcribe\",\n audio_base64: audioBase64,\n media_type: mediaType,\n store_id: storeId,\n }),\n });\n\n if (!response.ok) {\n const errText = await response.text();\n throw new Error(`Transcription failed (${response.status}): ${errText}`);\n }\n\n const data = (await response.json()) as { success: boolean; transcript?: string; error?: string };\n if (!data.success || !data.transcript) {\n throw new Error(data.error || \"Transcription returned no transcript\");\n }\n\n return data.transcript;\n}\n\n// ============================================================================\n// OPENAI CONTEXT TRIMMING\n// ============================================================================\n\nexport function trimOpenAIContext<T extends CompactableMessage>(\n messages: T[],\n estimatedTokens: number,\n threshold = 190_000,\n keepRecent = 5,\n): T[] {\n if (estimatedTokens < threshold) return messages;\n\n type Block = { type?: string; content?: unknown };\n let toolResultCount = 0;\n for (const msg of messages) {\n if (Array.isArray(msg.content)) {\n for (const block of msg.content as Block[]) {\n if (block.type === \"tool_result\") toolResultCount++;\n }\n }\n }\n\n if (toolResultCount <= keepRecent) return messages;\n\n const trimCount = toolResultCount - keepRecent;\n let trimmed = 0;\n\n return messages.map((msg) => {\n if (!Array.isArray(msg.content)) return msg;\n const content = (msg.content as Block[]).map((block) => {\n if (block.type === \"tool_result\" && trimmed < trimCount) {\n trimmed++;\n if (typeof block.content === \"string\") {\n return { ...block, content: \"[trimmed]\" };\n } else if (Array.isArray(block.content)) {\n return { ...block, content: [{ type: \"text\", text: \"[trimmed]\" }] };\n }\n }\n return block;\n });\n return { ...msg, content } as T;\n });\n}\n\n// ============================================================================\n// PROVIDER COMPACTION CLIENT\n// ============================================================================\n\nconst COMPACTION_TIMEOUT_MS = 30_000;\n\n/**\n * Request conversation compaction from the server (Haiku summarization).\n * Used by non-Anthropic providers (OpenAI, Gemini) that lack native compaction.\n * Returns summary string or null on failure (caller keeps unsummarized history).\n */\nexport async function requestProviderCompaction(opts: {\n proxyUrl: string;\n token: string;\n messages: object[];\n systemPrompt: string;\n}): Promise<string | null> {\n const { proxyUrl, token, messages, systemPrompt } = opts;\n\n try {\n const controller = new AbortController();\n const timeout = setTimeout(() => controller.abort(), COMPACTION_TIMEOUT_MS);\n\n try {\n const response = await fetch(proxyUrl, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${token}`,\n },\n body: JSON.stringify({\n mode: \"compact\",\n messages,\n system_prompt: systemPrompt,\n }),\n signal: controller.signal,\n });\n\n clearTimeout(timeout);\n\n if (!response.ok) return null;\n\n const data = (await response.json()) as {\n success: boolean;\n compaction_content?: string;\n error?: string;\n };\n\n return data.success && data.compaction_content ? data.compaction_content : null;\n } finally {\n clearTimeout(timeout);\n }\n } catch {\n return null; // Graceful failure — caller keeps unsummarized history\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared Compaction Utilities — pre-compaction pass for context management.
|
|
3
|
+
*
|
|
4
|
+
* Pure TypeScript, no runtime-specific APIs. Used by:
|
|
5
|
+
* - CLI subagent.ts (trim context after each tool turn)
|
|
6
|
+
* - Server compaction-service.ts (pre-process before LLM summarization)
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* Minimal structural interface for messages passed to preCompact/addPromptCaching.
|
|
10
|
+
* Anthropic.MessageParam satisfies this via structural subtyping — no casts needed.
|
|
11
|
+
*/
|
|
12
|
+
export interface CompactableMessage {
|
|
13
|
+
role: string;
|
|
14
|
+
content: unknown;
|
|
15
|
+
}
|
|
16
|
+
export interface PreCompactOptions {
|
|
17
|
+
/** Max chars for a tool result before it gets replaced with a summary.
|
|
18
|
+
* Default: 2048 (matches Anthropic's pattern of stripping consumed results). */
|
|
19
|
+
maxToolResultChars?: number;
|
|
20
|
+
/** Strip thinking blocks older than N turns from the end. Default: true (3 turns). */
|
|
21
|
+
stripThinking?: boolean;
|
|
22
|
+
}
|
|
23
|
+
export interface PreCompactResult<T = CompactableMessage> {
|
|
24
|
+
messages: T[];
|
|
25
|
+
bytesRemoved: number;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Pre-compaction pass: strip redundant data from message history.
|
|
29
|
+
* Mechanically removes large tool results already processed by the agent
|
|
30
|
+
* and thinking blocks from older turns. Returns modified messages array
|
|
31
|
+
* with reduced content.
|
|
32
|
+
*
|
|
33
|
+
* Generic over the message type so callers (e.g. Anthropic.MessageParam[])
|
|
34
|
+
* don't need double type assertions.
|
|
35
|
+
*/
|
|
36
|
+
export declare function preCompact<T extends CompactableMessage>(messages: T[], options?: PreCompactOptions): PreCompactResult<T>;
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared Compaction Utilities — pre-compaction pass for context management.
|
|
3
|
+
*
|
|
4
|
+
* Pure TypeScript, no runtime-specific APIs. Used by:
|
|
5
|
+
* - CLI subagent.ts (trim context after each tool turn)
|
|
6
|
+
* - Server compaction-service.ts (pre-process before LLM summarization)
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
import { djb2Hash } from "./agent-core.js";
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Minimal structural interface for messages passed to preCompact/addPromptCaching.
|
|
13
|
+
* Anthropic.MessageParam satisfies this via structural subtyping — no casts needed.
|
|
14
|
+
*/
|
|
15
|
+
|
|
16
|
+
/** Structural interface for content blocks inside messages */
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Pre-compaction pass: strip redundant data from message history.
|
|
20
|
+
* Mechanically removes large tool results already processed by the agent
|
|
21
|
+
* and thinking blocks from older turns. Returns modified messages array
|
|
22
|
+
* with reduced content.
|
|
23
|
+
*
|
|
24
|
+
* Generic over the message type so callers (e.g. Anthropic.MessageParam[])
|
|
25
|
+
* don't need double type assertions.
|
|
26
|
+
*/
|
|
27
|
+
export function preCompact(messages, options) {
|
|
28
|
+
const maxChars = options?.maxToolResultChars ?? 2048;
|
|
29
|
+
const stripThinking = options?.stripThinking ?? true;
|
|
30
|
+
let bytesRemoved = 0;
|
|
31
|
+
const compacted = messages.map((msg, idx) => {
|
|
32
|
+
if (msg.role !== "user") return msg;
|
|
33
|
+
const content = msg.content;
|
|
34
|
+
if (!Array.isArray(content)) return msg;
|
|
35
|
+
const newContent = content.map(block => {
|
|
36
|
+
// 1. Replace large tool results that the agent already acted on
|
|
37
|
+
if (block.type === "tool_result") {
|
|
38
|
+
const rc = typeof block.content === "string" ? block.content : JSON.stringify(block.content);
|
|
39
|
+
if (rc.length > maxChars) {
|
|
40
|
+
// Check if there's a subsequent assistant message (meaning agent processed this)
|
|
41
|
+
const hasFollowup = messages.slice(idx + 1).some(m => m.role === "assistant");
|
|
42
|
+
if (hasFollowup) {
|
|
43
|
+
const originalSize = rc.length;
|
|
44
|
+
bytesRemoved += originalSize - 100;
|
|
45
|
+
return {
|
|
46
|
+
...block,
|
|
47
|
+
content: `[Tool result: ${block.tool_use_id || "unknown"} returned ${Math.round(originalSize / 1024)}KB — agent processed and continued]`
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
return block;
|
|
53
|
+
});
|
|
54
|
+
return {
|
|
55
|
+
...msg,
|
|
56
|
+
content: newContent
|
|
57
|
+
};
|
|
58
|
+
});
|
|
59
|
+
|
|
60
|
+
// 2. Deduplicate tool results — detect identical content (e.g. same file read multiple times)
|
|
61
|
+
// and replace duplicates with a pointer to the first occurrence.
|
|
62
|
+
const contentHashes = new Map();
|
|
63
|
+
for (let i = 0; i < compacted.length; i++) {
|
|
64
|
+
const msg = compacted[i];
|
|
65
|
+
if (msg.role !== "user" || !Array.isArray(msg.content)) continue;
|
|
66
|
+
for (const block of msg.content) {
|
|
67
|
+
if (block.type !== "tool_result") continue;
|
|
68
|
+
const rc = typeof block.content === "string" ? block.content : JSON.stringify(block.content);
|
|
69
|
+
if (rc.length < 200) continue; // Skip small results — not worth deduping
|
|
70
|
+
const hashKey = djb2Hash(rc);
|
|
71
|
+
const existing = contentHashes.get(hashKey);
|
|
72
|
+
if (existing) {
|
|
73
|
+
existing.count++;
|
|
74
|
+
} else {
|
|
75
|
+
contentHashes.set(hashKey, {
|
|
76
|
+
count: 1,
|
|
77
|
+
firstIdx: i
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
// Second pass: replace duplicates (not the first occurrence) with pointer
|
|
83
|
+
for (let i = 0; i < compacted.length; i++) {
|
|
84
|
+
const msg = compacted[i];
|
|
85
|
+
if (msg.role !== "user" || !Array.isArray(msg.content)) continue;
|
|
86
|
+
const newContent = msg.content.map(block => {
|
|
87
|
+
if (block.type !== "tool_result") return block;
|
|
88
|
+
const rc = typeof block.content === "string" ? block.content : JSON.stringify(block.content);
|
|
89
|
+
if (rc.length < 200) return block;
|
|
90
|
+
const hashKey = djb2Hash(rc);
|
|
91
|
+
const entry = contentHashes.get(hashKey);
|
|
92
|
+
if (entry && entry.count >= 2 && i !== entry.firstIdx) {
|
|
93
|
+
bytesRemoved += rc.length - 50;
|
|
94
|
+
return {
|
|
95
|
+
...block,
|
|
96
|
+
content: "[Duplicate — same content as earlier read]"
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
return block;
|
|
100
|
+
});
|
|
101
|
+
compacted[i] = {
|
|
102
|
+
...msg,
|
|
103
|
+
content: newContent
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
// 3. Remove thinking blocks older than 3 turns from the end
|
|
108
|
+
if (stripThinking) {
|
|
109
|
+
const thinkingCutoff = Math.max(0, compacted.length - 6); // 3 turns = ~6 messages
|
|
110
|
+
const result = compacted.map((msg, idx) => {
|
|
111
|
+
if (idx >= thinkingCutoff) return msg;
|
|
112
|
+
if (msg.role !== "assistant") return msg;
|
|
113
|
+
const content = msg.content;
|
|
114
|
+
if (!Array.isArray(content)) return msg;
|
|
115
|
+
const filtered = content.filter(block => {
|
|
116
|
+
if (block.type === "thinking") {
|
|
117
|
+
bytesRemoved += String(block.thinking || "").length;
|
|
118
|
+
return false;
|
|
119
|
+
}
|
|
120
|
+
return true;
|
|
121
|
+
});
|
|
122
|
+
if (filtered.length === 0) return msg; // Keep at least something
|
|
123
|
+
return {
|
|
124
|
+
...msg,
|
|
125
|
+
content: filtered
|
|
126
|
+
};
|
|
127
|
+
});
|
|
128
|
+
return {
|
|
129
|
+
messages: result,
|
|
130
|
+
bytesRemoved
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
return {
|
|
134
|
+
messages: compacted,
|
|
135
|
+
bytesRemoved
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
//# sourceMappingURL=compaction.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compaction.js","names":["djb2Hash","preCompact","messages","options","maxChars","maxToolResultChars","stripThinking","bytesRemoved","compacted","map","msg","idx","role","content","Array","isArray","newContent","block","type","rc","JSON","stringify","length","hasFollowup","slice","some","m","originalSize","tool_use_id","Math","round","contentHashes","Map","i","hashKey","existing","get","count","set","firstIdx","entry","thinkingCutoff","max","result","filtered","filter","String","thinking"],"sources":["../../src/shared/compaction.ts"],"sourcesContent":["/**\n * Shared Compaction Utilities — pre-compaction pass for context management.\n *\n * Pure TypeScript, no runtime-specific APIs. Used by:\n * - CLI subagent.ts (trim context after each tool turn)\n * - Server compaction-service.ts (pre-process before LLM summarization)\n */\n\nimport { djb2Hash } from \"./agent-core.js\";\n\n/**\n * Minimal structural interface for messages passed to preCompact/addPromptCaching.\n * Anthropic.MessageParam satisfies this via structural subtyping — no casts needed.\n */\nexport interface CompactableMessage {\n role: string;\n content: unknown;\n}\n\n/** Structural interface for content blocks inside messages */\ninterface CompactableBlock {\n type?: string;\n content?: unknown;\n tool_use_id?: string;\n thinking?: string;\n}\n\nexport interface PreCompactOptions {\n /** Max chars for a tool result before it gets replaced with a summary.\n * Default: 2048 (matches Anthropic's pattern of stripping consumed results). */\n maxToolResultChars?: number;\n /** Strip thinking blocks older than N turns from the end. Default: true (3 turns). */\n stripThinking?: boolean;\n}\n\nexport interface PreCompactResult<T = CompactableMessage> {\n messages: T[];\n bytesRemoved: number;\n}\n\n/**\n * Pre-compaction pass: strip redundant data from message history.\n * Mechanically removes large tool results already processed by the agent\n * and thinking blocks from older turns. Returns modified messages array\n * with reduced content.\n *\n * Generic over the message type so callers (e.g. Anthropic.MessageParam[])\n * don't need double type assertions.\n */\nexport function preCompact<T extends CompactableMessage>(\n messages: T[],\n options?: PreCompactOptions,\n): PreCompactResult<T> {\n const maxChars = options?.maxToolResultChars ?? 2048;\n const stripThinking = options?.stripThinking ?? true;\n let bytesRemoved = 0;\n\n const compacted = messages.map((msg, idx) => {\n if (msg.role !== \"user\") return msg;\n\n const content = msg.content;\n if (!Array.isArray(content)) return msg;\n\n const newContent = (content as CompactableBlock[]).map((block) => {\n // 1. Replace large tool results that the agent already acted on\n if (block.type === \"tool_result\") {\n const rc =\n typeof block.content === \"string\"\n ? block.content\n : JSON.stringify(block.content);\n if (rc.length > maxChars) {\n // Check if there's a subsequent assistant message (meaning agent processed this)\n const hasFollowup = messages\n .slice(idx + 1)\n .some((m) => m.role === \"assistant\");\n if (hasFollowup) {\n const originalSize = rc.length;\n bytesRemoved += originalSize - 100;\n return {\n ...block,\n content: `[Tool result: ${block.tool_use_id || \"unknown\"} returned ${Math.round(originalSize / 1024)}KB — agent processed and continued]`,\n };\n }\n }\n }\n return block;\n });\n\n return { ...msg, content: newContent };\n });\n\n // 2. Deduplicate tool results — detect identical content (e.g. same file read multiple times)\n // and replace duplicates with a pointer to the first occurrence.\n const contentHashes = new Map<string, { count: number; firstIdx: number }>();\n for (let i = 0; i < compacted.length; i++) {\n const msg = compacted[i];\n if (msg.role !== \"user\" || !Array.isArray(msg.content)) continue;\n for (const block of msg.content as CompactableBlock[]) {\n if (block.type !== \"tool_result\") continue;\n const rc = typeof block.content === \"string\" ? block.content : JSON.stringify(block.content);\n if (rc.length < 200) continue; // Skip small results — not worth deduping\n const hashKey = djb2Hash(rc);\n const existing = contentHashes.get(hashKey);\n if (existing) {\n existing.count++;\n } else {\n contentHashes.set(hashKey, { count: 1, firstIdx: i });\n }\n }\n }\n // Second pass: replace duplicates (not the first occurrence) with pointer\n for (let i = 0; i < compacted.length; i++) {\n const msg = compacted[i];\n if (msg.role !== \"user\" || !Array.isArray(msg.content)) continue;\n const newContent = (msg.content as CompactableBlock[]).map((block) => {\n if (block.type !== \"tool_result\") return block;\n const rc = typeof block.content === \"string\" ? block.content : JSON.stringify(block.content);\n if (rc.length < 200) return block;\n const hashKey = djb2Hash(rc);\n const entry = contentHashes.get(hashKey);\n if (entry && entry.count >= 2 && i !== entry.firstIdx) {\n bytesRemoved += rc.length - 50;\n return { ...block, content: \"[Duplicate — same content as earlier read]\" };\n }\n return block;\n });\n compacted[i] = { ...msg, content: newContent };\n }\n\n // 3. Remove thinking blocks older than 3 turns from the end\n if (stripThinking) {\n const thinkingCutoff = Math.max(0, compacted.length - 6); // 3 turns = ~6 messages\n const result = compacted.map((msg, idx) => {\n if (idx >= thinkingCutoff) return msg;\n if (msg.role !== \"assistant\") return msg;\n\n const content = msg.content;\n if (!Array.isArray(content)) return msg;\n\n const filtered = (content as CompactableBlock[]).filter(\n (block) => {\n if (block.type === \"thinking\") {\n bytesRemoved += String(block.thinking || \"\").length;\n return false;\n }\n return true;\n },\n );\n\n if (filtered.length === 0) return msg; // Keep at least something\n return { ...msg, content: filtered };\n });\n\n return { messages: result, bytesRemoved };\n }\n\n return { messages: compacted, bytesRemoved };\n}\n"],"mappings":"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","ignoreList":[]}
|
package/dist/shared/constants.js
CHANGED
|
@@ -1,80 +1,83 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Shared constants — single source of truth for model IDs, thresholds, and limits.
|
|
3
3
|
*/
|
|
4
|
+
|
|
4
5
|
export const MODELS = {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
6
|
+
// Anthropic (direct API)
|
|
7
|
+
OPUS: "claude-opus-4-6",
|
|
8
|
+
SONNET: "claude-sonnet-4-6",
|
|
9
|
+
SONNET_4: "claude-sonnet-4-20250514",
|
|
10
|
+
HAIKU: "claude-haiku-4-5-20251001",
|
|
11
|
+
// Bedrock (Claude on AWS)
|
|
12
|
+
BEDROCK_SONNET: "anthropic.claude-sonnet-4-6",
|
|
13
|
+
BEDROCK_SONNET_4: "us.anthropic.claude-sonnet-4-20250514-v1:0",
|
|
14
|
+
BEDROCK_SONNET_45: "us.anthropic.claude-sonnet-4-5-20250929-v1:0",
|
|
15
|
+
BEDROCK_HAIKU: "us.anthropic.claude-haiku-4-5-20251001-v1:0",
|
|
16
|
+
// Google Gemini
|
|
17
|
+
GEMINI_3_PRO: "gemini-3-pro-preview",
|
|
18
|
+
GEMINI_3_FLASH: "gemini-3-flash-preview",
|
|
19
|
+
GEMINI_25_PRO: "gemini-2.5-pro",
|
|
20
|
+
GEMINI_25_FLASH: "gemini-2.5-flash",
|
|
21
|
+
GEMINI_25_FLASH_LITE: "gemini-2.5-flash-lite",
|
|
22
|
+
// OpenAI
|
|
23
|
+
GPT_5: "gpt-5",
|
|
24
|
+
GPT_5_MINI: "gpt-5-mini",
|
|
25
|
+
GPT_5_NANO: "gpt-5-nano",
|
|
26
|
+
O3: "o3",
|
|
27
|
+
O4_MINI: "o4-mini",
|
|
28
|
+
GPT_4O: "gpt-4o"
|
|
28
29
|
};
|
|
30
|
+
|
|
29
31
|
/** Maps short model aliases to full model IDs */
|
|
30
32
|
export const MODEL_MAP = {
|
|
31
|
-
|
|
32
|
-
|
|
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
|
-
|
|
33
|
+
// Auto-routing (resolved at runtime by model-router)
|
|
34
|
+
auto: "auto",
|
|
35
|
+
// Anthropic
|
|
36
|
+
"whale/agent": MODELS.OPUS,
|
|
37
|
+
// OpenClaw bridge sends this model ID
|
|
38
|
+
opus: MODELS.OPUS,
|
|
39
|
+
sonnet: MODELS.SONNET,
|
|
40
|
+
"sonnet-4.6": MODELS.SONNET,
|
|
41
|
+
"sonnet-4": MODELS.SONNET_4,
|
|
42
|
+
haiku: MODELS.HAIKU,
|
|
43
|
+
// Bedrock
|
|
44
|
+
"bedrock-sonnet": MODELS.BEDROCK_SONNET,
|
|
45
|
+
"bedrock-sonnet-4": MODELS.BEDROCK_SONNET_4,
|
|
46
|
+
"bedrock-sonnet-4.5": MODELS.BEDROCK_SONNET_45,
|
|
47
|
+
"bedrock-haiku": MODELS.BEDROCK_HAIKU,
|
|
48
|
+
// Gemini
|
|
49
|
+
"gemini-3-pro": MODELS.GEMINI_3_PRO,
|
|
50
|
+
"gemini-3-flash": MODELS.GEMINI_3_FLASH,
|
|
51
|
+
"gemini-pro": MODELS.GEMINI_25_PRO,
|
|
52
|
+
"gemini-flash": MODELS.GEMINI_25_FLASH,
|
|
53
|
+
"gemini-flash-lite": MODELS.GEMINI_25_FLASH_LITE,
|
|
54
|
+
// OpenAI
|
|
55
|
+
"gpt-5": MODELS.GPT_5,
|
|
56
|
+
"5": MODELS.GPT_5,
|
|
57
|
+
"gpt-5-mini": MODELS.GPT_5_MINI,
|
|
58
|
+
"5-mini": MODELS.GPT_5_MINI,
|
|
59
|
+
"gpt-5-nano": MODELS.GPT_5_NANO,
|
|
60
|
+
"5-nano": MODELS.GPT_5_NANO,
|
|
61
|
+
"o3": MODELS.O3,
|
|
62
|
+
"o4-mini": MODELS.O4_MINI,
|
|
63
|
+
"gpt-4o": MODELS.GPT_4O,
|
|
64
|
+
"4o": MODELS.GPT_4O
|
|
62
65
|
};
|
|
66
|
+
|
|
63
67
|
/** Allowed model IDs for server validation */
|
|
64
68
|
export const ALLOWED_MODELS = [...Object.values(MODELS), "auto"];
|
|
69
|
+
|
|
65
70
|
/** Detect provider from full model ID */
|
|
66
71
|
export function getProvider(modelId) {
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
return "gemini";
|
|
73
|
-
if (modelId.startsWith("gpt-") || /^o\d/.test(modelId))
|
|
74
|
-
return "openai";
|
|
75
|
-
return "anthropic";
|
|
72
|
+
if (modelId === "auto") return "anthropic"; // auto resolves to Claude models
|
|
73
|
+
if (modelId.includes(".anthropic.") || modelId.startsWith("anthropic.")) return "bedrock";
|
|
74
|
+
if (modelId.startsWith("gemini-")) return "gemini";
|
|
75
|
+
if (modelId.startsWith("gpt-") || /^o\d/.test(modelId)) return "openai";
|
|
76
|
+
return "anthropic";
|
|
76
77
|
}
|
|
78
|
+
|
|
77
79
|
/** Check if an OpenAI model is a reasoning model (o-series) */
|
|
78
80
|
export function isOpenAIReasoningModel(modelId) {
|
|
79
|
-
|
|
81
|
+
return /^o\d/.test(modelId);
|
|
80
82
|
}
|
|
83
|
+
//# sourceMappingURL=constants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.js","names":["MODELS","OPUS","SONNET","SONNET_4","HAIKU","BEDROCK_SONNET","BEDROCK_SONNET_4","BEDROCK_SONNET_45","BEDROCK_HAIKU","GEMINI_3_PRO","GEMINI_3_FLASH","GEMINI_25_PRO","GEMINI_25_FLASH","GEMINI_25_FLASH_LITE","GPT_5","GPT_5_MINI","GPT_5_NANO","O3","O4_MINI","GPT_4O","MODEL_MAP","auto","opus","sonnet","haiku","ALLOWED_MODELS","Object","values","getProvider","modelId","includes","startsWith","test","isOpenAIReasoningModel"],"sources":["../../src/shared/constants.ts"],"sourcesContent":["/**\n * Shared constants — single source of truth for model IDs, thresholds, and limits.\n */\n\nexport type ModelProvider = \"anthropic\" | \"bedrock\" | \"gemini\" | \"openai\";\n\nexport const MODELS = {\n // Anthropic (direct API)\n OPUS: \"claude-opus-4-6\",\n SONNET: \"claude-sonnet-4-6\",\n SONNET_4: \"claude-sonnet-4-20250514\",\n HAIKU: \"claude-haiku-4-5-20251001\",\n\n // Bedrock (Claude on AWS)\n BEDROCK_SONNET: \"anthropic.claude-sonnet-4-6\",\n BEDROCK_SONNET_4: \"us.anthropic.claude-sonnet-4-20250514-v1:0\",\n BEDROCK_SONNET_45: \"us.anthropic.claude-sonnet-4-5-20250929-v1:0\",\n BEDROCK_HAIKU: \"us.anthropic.claude-haiku-4-5-20251001-v1:0\",\n\n // Google Gemini\n GEMINI_3_PRO: \"gemini-3-pro-preview\",\n GEMINI_3_FLASH: \"gemini-3-flash-preview\",\n GEMINI_25_PRO: \"gemini-2.5-pro\",\n GEMINI_25_FLASH: \"gemini-2.5-flash\",\n GEMINI_25_FLASH_LITE: \"gemini-2.5-flash-lite\",\n\n // OpenAI\n GPT_5: \"gpt-5\",\n GPT_5_MINI: \"gpt-5-mini\",\n GPT_5_NANO: \"gpt-5-nano\",\n O3: \"o3\",\n O4_MINI: \"o4-mini\",\n GPT_4O: \"gpt-4o\",\n} as const;\n\n/** Maps short model aliases to full model IDs */\nexport const MODEL_MAP: Record<string, string> = {\n // Auto-routing (resolved at runtime by model-router)\n auto: \"auto\",\n\n // Anthropic\n \"whale/agent\": MODELS.OPUS, // OpenClaw bridge sends this model ID\n opus: MODELS.OPUS,\n sonnet: MODELS.SONNET,\n \"sonnet-4.6\": MODELS.SONNET,\n \"sonnet-4\": MODELS.SONNET_4,\n haiku: MODELS.HAIKU,\n\n // Bedrock\n \"bedrock-sonnet\": MODELS.BEDROCK_SONNET,\n \"bedrock-sonnet-4\": MODELS.BEDROCK_SONNET_4,\n \"bedrock-sonnet-4.5\": MODELS.BEDROCK_SONNET_45,\n \"bedrock-haiku\": MODELS.BEDROCK_HAIKU,\n\n // Gemini\n \"gemini-3-pro\": MODELS.GEMINI_3_PRO,\n \"gemini-3-flash\": MODELS.GEMINI_3_FLASH,\n \"gemini-pro\": MODELS.GEMINI_25_PRO,\n \"gemini-flash\": MODELS.GEMINI_25_FLASH,\n \"gemini-flash-lite\": MODELS.GEMINI_25_FLASH_LITE,\n\n // OpenAI\n \"gpt-5\": MODELS.GPT_5,\n \"5\": MODELS.GPT_5,\n \"gpt-5-mini\": MODELS.GPT_5_MINI,\n \"5-mini\": MODELS.GPT_5_MINI,\n \"gpt-5-nano\": MODELS.GPT_5_NANO,\n \"5-nano\": MODELS.GPT_5_NANO,\n \"o3\": MODELS.O3,\n \"o4-mini\": MODELS.O4_MINI,\n \"gpt-4o\": MODELS.GPT_4O,\n \"4o\": MODELS.GPT_4O,\n};\n\n/** Allowed model IDs for server validation */\nexport const ALLOWED_MODELS = [...Object.values(MODELS), \"auto\"] as string[];\n\n/** Detect provider from full model ID */\nexport function getProvider(modelId: string): ModelProvider {\n if (modelId === \"auto\") return \"anthropic\"; // auto resolves to Claude models\n if (modelId.includes(\".anthropic.\") || modelId.startsWith(\"anthropic.\")) return \"bedrock\";\n if (modelId.startsWith(\"gemini-\")) return \"gemini\";\n if (modelId.startsWith(\"gpt-\") || /^o\\d/.test(modelId)) return \"openai\";\n return \"anthropic\";\n}\n\n/** Check if an OpenAI model is a reasoning model (o-series) */\nexport function isOpenAIReasoningModel(modelId: string): boolean {\n return /^o\\d/.test(modelId);\n}\n"],"mappings":"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","ignoreList":[]}
|