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
|
@@ -3,121 +3,13 @@
|
|
|
3
3
|
// Used for non-Anthropic providers (OpenAI, Gemini) that lack native
|
|
4
4
|
// server-side compaction. Calls Haiku to produce a transparent summary
|
|
5
5
|
// using the same instructions as compact_20260112.
|
|
6
|
-
|
|
6
|
+
|
|
7
|
+
// Re-export preCompact from shared module — single source of truth
|
|
8
|
+
export { preCompact } from "../../shared/compaction.js";
|
|
7
9
|
const COMPACTION_MODEL = "claude-haiku-4-5-20251001";
|
|
8
10
|
const COMPACTION_MAX_TOKENS = 4096;
|
|
9
11
|
const COMPACTION_TIMEOUT_MS = 30_000;
|
|
10
|
-
const COMPACTION_INSTRUCTIONS = "Summarize the conversation preserving: (1) task goals and constraints, " +
|
|
11
|
-
"(2) files created/modified with paths, (3) decisions made and rationale, " +
|
|
12
|
-
"(4) errors encountered and resolutions, (5) exact next steps. " +
|
|
13
|
-
"Be concise but preserve all state needed to continue work without repeating mistakes.";
|
|
14
|
-
/**
|
|
15
|
-
* Pre-compaction pass: strip redundant data before calling LLM summarizer.
|
|
16
|
-
* Mechanically removes large tool results already processed by the agent
|
|
17
|
-
* and thinking blocks from older turns. Returns modified messages array
|
|
18
|
-
* with reduced content so the LLM summarizer (or API context_management)
|
|
19
|
-
* has less to work with.
|
|
20
|
-
*/
|
|
21
|
-
export function preCompact(messages) {
|
|
22
|
-
let bytesRemoved = 0;
|
|
23
|
-
const compacted = messages.map((msg, idx) => {
|
|
24
|
-
if (msg.role !== "user")
|
|
25
|
-
return msg;
|
|
26
|
-
const content = msg.content;
|
|
27
|
-
if (!Array.isArray(content))
|
|
28
|
-
return msg;
|
|
29
|
-
const newContent = content.map((block) => {
|
|
30
|
-
// 1. Replace large tool results (>2KB) that the agent already acted on
|
|
31
|
-
if (block.type === "tool_result") {
|
|
32
|
-
const rc = typeof block.content === "string"
|
|
33
|
-
? block.content
|
|
34
|
-
: JSON.stringify(block.content);
|
|
35
|
-
if (rc.length > 2048) {
|
|
36
|
-
// Check if there's a subsequent assistant message (meaning agent processed this)
|
|
37
|
-
const hasFollowup = messages
|
|
38
|
-
.slice(idx + 1)
|
|
39
|
-
.some((m) => m.role === "assistant");
|
|
40
|
-
if (hasFollowup) {
|
|
41
|
-
const originalSize = rc.length;
|
|
42
|
-
bytesRemoved += originalSize - 100;
|
|
43
|
-
return {
|
|
44
|
-
...block,
|
|
45
|
-
content: `[Tool result: ${block.tool_use_id || "unknown"} returned ${Math.round(originalSize / 1024)}KB — agent processed and continued]`,
|
|
46
|
-
};
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
return block;
|
|
51
|
-
});
|
|
52
|
-
return { ...msg, content: newContent };
|
|
53
|
-
});
|
|
54
|
-
// 2. Deduplicate tool results — detect identical content (e.g. same file read multiple times)
|
|
55
|
-
// and replace duplicates with a pointer to the first occurrence.
|
|
56
|
-
const contentHashes = new Map();
|
|
57
|
-
for (let i = 0; i < compacted.length; i++) {
|
|
58
|
-
const msg = compacted[i];
|
|
59
|
-
if (msg.role !== "user" || !Array.isArray(msg.content))
|
|
60
|
-
continue;
|
|
61
|
-
for (const block of msg.content) {
|
|
62
|
-
if (block.type !== "tool_result")
|
|
63
|
-
continue;
|
|
64
|
-
const rc = typeof block.content === "string" ? block.content : JSON.stringify(block.content);
|
|
65
|
-
if (rc.length < 200)
|
|
66
|
-
continue; // Skip small results — not worth deduping
|
|
67
|
-
const hashKey = djb2Hash(rc);
|
|
68
|
-
const existing = contentHashes.get(hashKey);
|
|
69
|
-
if (existing) {
|
|
70
|
-
existing.count++;
|
|
71
|
-
}
|
|
72
|
-
else {
|
|
73
|
-
contentHashes.set(hashKey, { count: 1, firstIdx: i });
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
// Second pass: replace duplicates (not the first occurrence) with pointer
|
|
78
|
-
for (let i = 0; i < compacted.length; i++) {
|
|
79
|
-
const msg = compacted[i];
|
|
80
|
-
if (msg.role !== "user" || !Array.isArray(msg.content))
|
|
81
|
-
continue;
|
|
82
|
-
const newContent = msg.content.map((block) => {
|
|
83
|
-
if (block.type !== "tool_result")
|
|
84
|
-
return block;
|
|
85
|
-
const rc = typeof block.content === "string" ? block.content : JSON.stringify(block.content);
|
|
86
|
-
if (rc.length < 200)
|
|
87
|
-
return block;
|
|
88
|
-
const hashKey = djb2Hash(rc);
|
|
89
|
-
const entry = contentHashes.get(hashKey);
|
|
90
|
-
if (entry && entry.count >= 2 && i !== entry.firstIdx) {
|
|
91
|
-
bytesRemoved += rc.length - 50;
|
|
92
|
-
return { ...block, content: "[Duplicate — same content as earlier read]" };
|
|
93
|
-
}
|
|
94
|
-
return block;
|
|
95
|
-
});
|
|
96
|
-
compacted[i] = { ...msg, content: newContent };
|
|
97
|
-
}
|
|
98
|
-
// 3. Remove thinking blocks older than 3 turns from the end
|
|
99
|
-
const thinkingCutoff = Math.max(0, compacted.length - 6); // 3 turns = ~6 messages
|
|
100
|
-
const result = compacted.map((msg, idx) => {
|
|
101
|
-
if (idx >= thinkingCutoff)
|
|
102
|
-
return msg;
|
|
103
|
-
if (msg.role !== "assistant")
|
|
104
|
-
return msg;
|
|
105
|
-
const content = msg.content;
|
|
106
|
-
if (!Array.isArray(content))
|
|
107
|
-
return msg;
|
|
108
|
-
const filtered = content.filter((block) => {
|
|
109
|
-
if (block.type === "thinking") {
|
|
110
|
-
bytesRemoved += String(block.thinking || "").length;
|
|
111
|
-
return false;
|
|
112
|
-
}
|
|
113
|
-
return true;
|
|
114
|
-
});
|
|
115
|
-
if (filtered.length === 0)
|
|
116
|
-
return msg; // Keep at least something
|
|
117
|
-
return { ...msg, content: filtered };
|
|
118
|
-
});
|
|
119
|
-
return { messages: result, bytesRemoved };
|
|
120
|
-
}
|
|
12
|
+
const COMPACTION_INSTRUCTIONS = "Summarize the conversation preserving: (1) task goals and constraints, " + "(2) files created/modified with paths, (3) decisions made and rationale, " + "(4) errors encountered and resolutions, (5) exact next steps. " + "Be concise but preserve all state needed to continue work without repeating mistakes.";
|
|
121
13
|
/**
|
|
122
14
|
* Generate a compaction summary using Haiku.
|
|
123
15
|
*
|
|
@@ -127,81 +19,79 @@ export function preCompact(messages) {
|
|
|
127
19
|
* caller can keep the unsummarized history.
|
|
128
20
|
*/
|
|
129
21
|
export async function generateCompaction(opts) {
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
}
|
|
155
|
-
return "[tool_result]";
|
|
156
|
-
}
|
|
157
|
-
if (block.type === "compaction")
|
|
158
|
-
return `[Previous summary: ${block.content.slice(0, 200)}...]`;
|
|
159
|
-
return `[${block.type}]`;
|
|
160
|
-
})
|
|
161
|
-
.join("\n");
|
|
162
|
-
}
|
|
163
|
-
else {
|
|
164
|
-
content = String(msg.content);
|
|
165
|
-
}
|
|
166
|
-
return `${role.toUpperCase()}:\n${content}`;
|
|
167
|
-
})
|
|
168
|
-
.join("\n\n---\n\n");
|
|
169
|
-
// Truncate if conversation is very long (Haiku has 200K context)
|
|
170
|
-
const maxInputChars = 400_000; // ~100K tokens
|
|
171
|
-
const truncatedConversation = conversationText.length > maxInputChars
|
|
172
|
-
? conversationText.slice(-maxInputChars) + "\n\n... (earlier messages truncated)"
|
|
173
|
-
: conversationText;
|
|
174
|
-
const summaryInstructions = instructions || COMPACTION_INSTRUCTIONS;
|
|
175
|
-
try {
|
|
176
|
-
const controller = new AbortController();
|
|
177
|
-
const timeout = setTimeout(() => controller.abort(), COMPACTION_TIMEOUT_MS);
|
|
178
|
-
try {
|
|
179
|
-
const response = await anthropic.messages.create({
|
|
180
|
-
model: COMPACTION_MODEL,
|
|
181
|
-
max_tokens: COMPACTION_MAX_TOKENS,
|
|
182
|
-
system: `You are summarizing an AI agent conversation for context compaction. ${summaryInstructions}`,
|
|
183
|
-
messages: [
|
|
184
|
-
{
|
|
185
|
-
role: "user",
|
|
186
|
-
content: `Summarize this conversation. The agent's system prompt was:\n\n${systemPrompt.slice(0, 2000)}\n\n---\n\nConversation:\n\n${truncatedConversation}`,
|
|
187
|
-
},
|
|
188
|
-
],
|
|
189
|
-
}, { signal: controller.signal });
|
|
190
|
-
clearTimeout(timeout);
|
|
191
|
-
const textBlock = response.content.find((b) => b.type === "text");
|
|
192
|
-
if (!textBlock || textBlock.type !== "text") {
|
|
193
|
-
return { success: false, error: "No text in compaction response" };
|
|
194
|
-
}
|
|
195
|
-
return { success: true, content: textBlock.text };
|
|
196
|
-
}
|
|
197
|
-
finally {
|
|
198
|
-
clearTimeout(timeout);
|
|
22
|
+
const {
|
|
23
|
+
anthropic,
|
|
24
|
+
messages,
|
|
25
|
+
systemPrompt,
|
|
26
|
+
instructions
|
|
27
|
+
} = opts;
|
|
28
|
+
|
|
29
|
+
// Build a text representation of the conversation for summarization
|
|
30
|
+
const conversationText = messages.map(msg => {
|
|
31
|
+
const role = msg.role;
|
|
32
|
+
let content;
|
|
33
|
+
if (typeof msg.content === "string") {
|
|
34
|
+
content = msg.content;
|
|
35
|
+
} else if (Array.isArray(msg.content)) {
|
|
36
|
+
content = msg.content.map(block => {
|
|
37
|
+
if (block.type === "text") return block.text;
|
|
38
|
+
if (block.type === "tool_use") return `[Tool: ${block.name}]`;
|
|
39
|
+
if (block.type === "tool_result") {
|
|
40
|
+
const rc = block.content;
|
|
41
|
+
if (typeof rc === "string") return rc.slice(0, 500);
|
|
42
|
+
if (Array.isArray(rc)) {
|
|
43
|
+
return rc.map(b => b.type === "text" ? b.text.slice(0, 500) : `[${b.type}]`).join(" ");
|
|
44
|
+
}
|
|
45
|
+
return "[tool_result]";
|
|
199
46
|
}
|
|
47
|
+
if (block.type === "compaction") return `[Previous summary: ${block.content.slice(0, 200)}...]`;
|
|
48
|
+
return `[${block.type}]`;
|
|
49
|
+
}).join("\n");
|
|
50
|
+
} else {
|
|
51
|
+
content = String(msg.content);
|
|
200
52
|
}
|
|
201
|
-
|
|
53
|
+
return `${role.toUpperCase()}:\n${content}`;
|
|
54
|
+
}).join("\n\n---\n\n");
|
|
55
|
+
|
|
56
|
+
// Truncate if conversation is very long (Haiku has 200K context)
|
|
57
|
+
const maxInputChars = 400_000; // ~100K tokens
|
|
58
|
+
const truncatedConversation = conversationText.length > maxInputChars ? conversationText.slice(-maxInputChars) + "\n\n... (earlier messages truncated)" : conversationText;
|
|
59
|
+
const summaryInstructions = instructions || COMPACTION_INSTRUCTIONS;
|
|
60
|
+
try {
|
|
61
|
+
const controller = new AbortController();
|
|
62
|
+
const timeout = setTimeout(() => controller.abort(), COMPACTION_TIMEOUT_MS);
|
|
63
|
+
try {
|
|
64
|
+
const response = await anthropic.messages.create({
|
|
65
|
+
model: COMPACTION_MODEL,
|
|
66
|
+
max_tokens: COMPACTION_MAX_TOKENS,
|
|
67
|
+
system: `You are summarizing an AI agent conversation for context compaction. ${summaryInstructions}`,
|
|
68
|
+
messages: [{
|
|
69
|
+
role: "user",
|
|
70
|
+
content: `Summarize this conversation. The agent's system prompt was:\n\n${systemPrompt.slice(0, 2000)}\n\n---\n\nConversation:\n\n${truncatedConversation}`
|
|
71
|
+
}]
|
|
72
|
+
}, {
|
|
73
|
+
signal: controller.signal
|
|
74
|
+
});
|
|
75
|
+
clearTimeout(timeout);
|
|
76
|
+
const textBlock = response.content.find(b => b.type === "text");
|
|
77
|
+
if (!textBlock || textBlock.type !== "text") {
|
|
202
78
|
return {
|
|
203
|
-
|
|
204
|
-
|
|
79
|
+
success: false,
|
|
80
|
+
error: "No text in compaction response"
|
|
205
81
|
};
|
|
82
|
+
}
|
|
83
|
+
return {
|
|
84
|
+
success: true,
|
|
85
|
+
content: textBlock.text
|
|
86
|
+
};
|
|
87
|
+
} finally {
|
|
88
|
+
clearTimeout(timeout);
|
|
206
89
|
}
|
|
90
|
+
} catch (err) {
|
|
91
|
+
return {
|
|
92
|
+
success: false,
|
|
93
|
+
error: `Compaction failed: ${err.message}`
|
|
94
|
+
};
|
|
95
|
+
}
|
|
207
96
|
}
|
|
97
|
+
//# sourceMappingURL=compaction-service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compaction-service.js","names":["preCompact","COMPACTION_MODEL","COMPACTION_MAX_TOKENS","COMPACTION_TIMEOUT_MS","COMPACTION_INSTRUCTIONS","generateCompaction","opts","anthropic","messages","systemPrompt","instructions","conversationText","map","msg","role","content","Array","isArray","block","type","text","name","rc","slice","b","join","String","toUpperCase","maxInputChars","truncatedConversation","length","summaryInstructions","controller","AbortController","timeout","setTimeout","abort","response","create","model","max_tokens","system","signal","clearTimeout","textBlock","find","success","error","err","message"],"sources":["../../../src/server/lib/compaction-service.ts"],"sourcesContent":["// server/lib/compaction-service.ts — Haiku-based conversation compaction\n//\n// Used for non-Anthropic providers (OpenAI, Gemini) that lack native\n// server-side compaction. Calls Haiku to produce a transparent summary\n// using the same instructions as compact_20260112.\n\nimport Anthropic from \"@anthropic-ai/sdk\";\n\n// Re-export preCompact from shared module — single source of truth\nexport { preCompact } from \"../../shared/compaction.js\";\nexport type { PreCompactResult, PreCompactOptions } from \"../../shared/compaction.js\";\n\nconst COMPACTION_MODEL = \"claude-haiku-4-5-20251001\";\nconst COMPACTION_MAX_TOKENS = 4096;\nconst COMPACTION_TIMEOUT_MS = 30_000;\n\nconst COMPACTION_INSTRUCTIONS =\n \"Summarize the conversation preserving: (1) task goals and constraints, \" +\n \"(2) files created/modified with paths, (3) decisions made and rationale, \" +\n \"(4) errors encountered and resolutions, (5) exact next steps. \" +\n \"Be concise but preserve all state needed to continue work without repeating mistakes.\";\n\nexport interface CompactionResult {\n success: boolean;\n content?: string;\n error?: string;\n}\n\n/**\n * Generate a compaction summary using Haiku.\n *\n * Takes the full conversation history and produces a concise summary\n * that preserves all state needed to continue the conversation.\n * Falls back gracefully — returns null content on failure so the\n * caller can keep the unsummarized history.\n */\nexport async function generateCompaction(opts: {\n anthropic: Anthropic;\n messages: Array<Record<string, unknown>>;\n systemPrompt: string;\n instructions?: string;\n}): Promise<CompactionResult> {\n const { anthropic, messages, systemPrompt, instructions } = opts;\n\n // Build a text representation of the conversation for summarization\n const conversationText = messages\n .map((msg) => {\n const role = msg.role as string;\n let content: string;\n if (typeof msg.content === \"string\") {\n content = msg.content;\n } else if (Array.isArray(msg.content)) {\n content = (msg.content as Array<Record<string, unknown>>)\n .map((block) => {\n if (block.type === \"text\") return block.text as string;\n if (block.type === \"tool_use\") return `[Tool: ${block.name}]`;\n if (block.type === \"tool_result\") {\n const rc = block.content;\n if (typeof rc === \"string\") return rc.slice(0, 500);\n if (Array.isArray(rc)) {\n return (rc as Array<Record<string, unknown>>)\n .map((b) => (b.type === \"text\" ? (b.text as string).slice(0, 500) : `[${b.type}]`))\n .join(\" \");\n }\n return \"[tool_result]\";\n }\n if (block.type === \"compaction\") return `[Previous summary: ${(block.content as string).slice(0, 200)}...]`;\n return `[${block.type}]`;\n })\n .join(\"\\n\");\n } else {\n content = String(msg.content);\n }\n return `${role.toUpperCase()}:\\n${content}`;\n })\n .join(\"\\n\\n---\\n\\n\");\n\n // Truncate if conversation is very long (Haiku has 200K context)\n const maxInputChars = 400_000; // ~100K tokens\n const truncatedConversation =\n conversationText.length > maxInputChars\n ? conversationText.slice(-maxInputChars) + \"\\n\\n... (earlier messages truncated)\"\n : conversationText;\n\n const summaryInstructions = instructions || COMPACTION_INSTRUCTIONS;\n\n try {\n const controller = new AbortController();\n const timeout = setTimeout(() => controller.abort(), COMPACTION_TIMEOUT_MS);\n\n try {\n const response = await anthropic.messages.create(\n {\n model: COMPACTION_MODEL,\n max_tokens: COMPACTION_MAX_TOKENS,\n system: `You are summarizing an AI agent conversation for context compaction. ${summaryInstructions}`,\n messages: [\n {\n role: \"user\",\n content: `Summarize this conversation. The agent's system prompt was:\\n\\n${systemPrompt.slice(0, 2000)}\\n\\n---\\n\\nConversation:\\n\\n${truncatedConversation}`,\n },\n ],\n },\n { signal: controller.signal },\n );\n\n clearTimeout(timeout);\n\n const textBlock = response.content.find((b) => b.type === \"text\");\n if (!textBlock || textBlock.type !== \"text\") {\n return { success: false, error: \"No text in compaction response\" };\n }\n\n return { success: true, content: textBlock.text };\n } finally {\n clearTimeout(timeout);\n }\n } catch (err) {\n return {\n success: false,\n error: `Compaction failed: ${(err as Error).message}`,\n };\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -4,43 +4,55 @@
|
|
|
4
4
|
* JSON output in production, optional pino-pretty in dev.
|
|
5
5
|
* Provides child loggers with context and correlation IDs.
|
|
6
6
|
*/
|
|
7
|
+
|
|
7
8
|
import pino from "pino";
|
|
8
9
|
const logger = pino({
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
}
|
|
27
|
-
|
|
10
|
+
level: process.env.LOG_LEVEL || "info",
|
|
11
|
+
formatters: {
|
|
12
|
+
level(label) {
|
|
13
|
+
return {
|
|
14
|
+
level: label
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
},
|
|
18
|
+
// Pretty print in dev if pino-pretty is installed, JSON in production
|
|
19
|
+
transport: process.env.NODE_ENV !== "production" ? (() => {
|
|
20
|
+
try {
|
|
21
|
+
// pino-pretty is optional — if not installed, fall back to JSON
|
|
22
|
+
require.resolve("pino-pretty");
|
|
23
|
+
return {
|
|
24
|
+
target: "pino-pretty",
|
|
25
|
+
options: {
|
|
26
|
+
colorize: true
|
|
27
|
+
}
|
|
28
|
+
};
|
|
29
|
+
} catch {
|
|
30
|
+
return undefined;
|
|
31
|
+
}
|
|
32
|
+
})() : undefined
|
|
28
33
|
});
|
|
34
|
+
|
|
29
35
|
/**
|
|
30
36
|
* Create a child logger bound to a specific context (module name).
|
|
31
37
|
* Usage: const log = createLogger('agent-loop');
|
|
32
38
|
*/
|
|
33
39
|
export function createLogger(context) {
|
|
34
|
-
|
|
40
|
+
return logger.child({
|
|
41
|
+
context
|
|
42
|
+
});
|
|
35
43
|
}
|
|
44
|
+
|
|
36
45
|
/**
|
|
37
46
|
* Create a child logger with correlation IDs for request tracing.
|
|
38
47
|
* Usage: const log = withTrace(traceId, conversationId);
|
|
39
48
|
*/
|
|
40
49
|
export function withTrace(traceId, conversationId) {
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
50
|
+
return logger.child({
|
|
51
|
+
traceId,
|
|
52
|
+
...(conversationId ? {
|
|
53
|
+
conversationId
|
|
54
|
+
} : {})
|
|
55
|
+
});
|
|
45
56
|
}
|
|
46
57
|
export default logger;
|
|
58
|
+
//# sourceMappingURL=logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.js","names":["pino","logger","level","process","env","LOG_LEVEL","formatters","label","transport","NODE_ENV","require","resolve","target","options","colorize","undefined","createLogger","context","child","withTrace","traceId","conversationId"],"sources":["../../../src/server/lib/logger.ts"],"sourcesContent":["/**\n * Structured logging with pino — Phase 6.1\n *\n * JSON output in production, optional pino-pretty in dev.\n * Provides child loggers with context and correlation IDs.\n */\n\nimport pino from \"pino\";\n\nconst logger = pino({\n level: process.env.LOG_LEVEL || \"info\",\n formatters: {\n level(label: string) {\n return { level: label };\n },\n },\n // Pretty print in dev if pino-pretty is installed, JSON in production\n transport:\n process.env.NODE_ENV !== \"production\"\n ? (() => {\n try {\n // pino-pretty is optional — if not installed, fall back to JSON\n require.resolve(\"pino-pretty\");\n return { target: \"pino-pretty\", options: { colorize: true } };\n } catch {\n return undefined;\n }\n })()\n : undefined,\n});\n\n/**\n * Create a child logger bound to a specific context (module name).\n * Usage: const log = createLogger('agent-loop');\n */\nexport function createLogger(context: string): pino.Logger {\n return logger.child({ context });\n}\n\n/**\n * Create a child logger with correlation IDs for request tracing.\n * Usage: const log = withTrace(traceId, conversationId);\n */\nexport function withTrace(traceId: string, conversationId?: string): pino.Logger {\n return logger.child({\n traceId,\n ...(conversationId ? { conversationId } : {}),\n });\n}\n\nexport default logger;\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;;AAEA,OAAOA,IAAI,MAAM,MAAM;AAEvB,MAAMC,MAAM,GAAGD,IAAI,CAAC;EAClBE,KAAK,EAAEC,OAAO,CAACC,GAAG,CAACC,SAAS,IAAI,MAAM;EACtCC,UAAU,EAAE;IACVJ,KAAKA,CAACK,KAAa,EAAE;MACnB,OAAO;QAAEL,KAAK,EAAEK;MAAM,CAAC;IACzB;EACF,CAAC;EACD;EACAC,SAAS,EACPL,OAAO,CAACC,GAAG,CAACK,QAAQ,KAAK,YAAY,GACjC,CAAC,MAAM;IACL,IAAI;MACF;MACAC,OAAO,CAACC,OAAO,CAAC,aAAa,CAAC;MAC9B,OAAO;QAAEC,MAAM,EAAE,aAAa;QAAEC,OAAO,EAAE;UAAEC,QAAQ,EAAE;QAAK;MAAE,CAAC;IAC/D,CAAC,CAAC,MAAM;MACN,OAAOC,SAAS;IAClB;EACF,CAAC,EAAE,CAAC,GACJA;AACR,CAAC,CAAC;;AAEF;AACA;AACA;AACA;AACA,OAAO,SAASC,YAAYA,CAACC,OAAe,EAAe;EACzD,OAAOhB,MAAM,CAACiB,KAAK,CAAC;IAAED;EAAQ,CAAC,CAAC;AAClC;;AAEA;AACA;AACA;AACA;AACA,OAAO,SAASE,SAASA,CAACC,OAAe,EAAEC,cAAuB,EAAe;EAC/E,OAAOpB,MAAM,CAACiB,KAAK,CAAC;IAClBE,OAAO;IACP,IAAIC,cAAc,GAAG;MAAEA;IAAe,CAAC,GAAG,CAAC,CAAC;EAC9C,CAAC,CAAC;AACJ;AAEA,eAAepB,MAAM","ignoreList":[]}
|
package/dist/server/lib/otel.js
CHANGED
|
@@ -11,116 +11,137 @@
|
|
|
11
11
|
*
|
|
12
12
|
* Backward compatible: If OTEL is not enabled, all functions are no-ops.
|
|
13
13
|
*/
|
|
14
|
+
|
|
15
|
+
// Types for OTEL spans — allows code to use these without requiring the SDK
|
|
16
|
+
|
|
14
17
|
const OTEL_ENABLED = process.env.OTEL_ENABLED === "true";
|
|
15
18
|
const OTEL_ENDPOINT = process.env.OTEL_EXPORTER_OTLP_ENDPOINT || "";
|
|
16
19
|
const SERVICE_NAME = process.env.OTEL_SERVICE_NAME || "whale-workflow-engine";
|
|
20
|
+
|
|
17
21
|
// Lazy-loaded SDK references
|
|
18
22
|
let _tracer = null;
|
|
19
23
|
let _sdk = null;
|
|
24
|
+
|
|
20
25
|
/**
|
|
21
26
|
* Initialize OpenTelemetry SDK. Call once at startup.
|
|
22
27
|
* No-op if OTEL_ENABLED !== "true".
|
|
23
28
|
*/
|
|
24
29
|
export async function initOtel() {
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
try
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
30
|
+
if (!OTEL_ENABLED || !OTEL_ENDPOINT) return;
|
|
31
|
+
try {
|
|
32
|
+
// @ts-ignore — optional runtime dependency, gracefully handled by try/catch
|
|
33
|
+
const {
|
|
34
|
+
NodeSDK
|
|
35
|
+
} = await import("@opentelemetry/sdk-node");
|
|
36
|
+
// @ts-ignore
|
|
37
|
+
const {
|
|
38
|
+
OTLPTraceExporter
|
|
39
|
+
} = await import("@opentelemetry/exporter-trace-otlp-http");
|
|
40
|
+
// @ts-ignore
|
|
41
|
+
const {
|
|
42
|
+
Resource
|
|
43
|
+
} = await import("@opentelemetry/resources");
|
|
44
|
+
// @ts-ignore
|
|
45
|
+
const {
|
|
46
|
+
ATTR_SERVICE_NAME
|
|
47
|
+
} = await import("@opentelemetry/semantic-conventions");
|
|
48
|
+
// @ts-ignore
|
|
49
|
+
const {
|
|
50
|
+
trace
|
|
51
|
+
} = await import("@opentelemetry/api");
|
|
52
|
+
const exporter = new OTLPTraceExporter({
|
|
53
|
+
url: `${OTEL_ENDPOINT}/v1/traces`
|
|
54
|
+
});
|
|
55
|
+
_sdk = new NodeSDK({
|
|
56
|
+
resource: new Resource({
|
|
57
|
+
[ATTR_SERVICE_NAME]: SERVICE_NAME
|
|
58
|
+
}),
|
|
59
|
+
traceExporter: exporter
|
|
60
|
+
});
|
|
61
|
+
_sdk.start();
|
|
62
|
+
_tracer = trace.getTracer(SERVICE_NAME);
|
|
63
|
+
console.log(`[otel] initialized — exporting to ${OTEL_ENDPOINT}`);
|
|
64
|
+
} catch (err) {
|
|
65
|
+
console.warn("[otel] Failed to initialize (SDK not installed?):", err.message);
|
|
66
|
+
// Non-fatal — all functions remain no-ops
|
|
67
|
+
}
|
|
51
68
|
}
|
|
69
|
+
|
|
52
70
|
/**
|
|
53
71
|
* Graceful shutdown — flush pending spans.
|
|
54
72
|
*/
|
|
55
73
|
export async function shutdownOtel() {
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
}
|
|
74
|
+
if (_sdk) {
|
|
75
|
+
try {
|
|
76
|
+
await _sdk.shutdown();
|
|
77
|
+
} catch {/* ignore */}
|
|
78
|
+
}
|
|
62
79
|
}
|
|
80
|
+
|
|
63
81
|
/** No-op span for when OTEL is disabled */
|
|
64
82
|
const noopSpan = {
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
83
|
+
end: () => {},
|
|
84
|
+
setError: () => {},
|
|
85
|
+
setAttribute: () => {},
|
|
86
|
+
addEvent: () => {}
|
|
69
87
|
};
|
|
88
|
+
|
|
70
89
|
/**
|
|
71
90
|
* Start a new span for tracking an operation.
|
|
72
91
|
* Returns a SpanContext that wraps the OTEL span API.
|
|
73
92
|
* If OTEL is disabled, returns a no-op.
|
|
74
93
|
*/
|
|
75
94
|
export function startSpan(name, attributes) {
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
95
|
+
if (!_tracer) return noopSpan;
|
|
96
|
+
try {
|
|
97
|
+
const span = _tracer.startSpan(name, {
|
|
98
|
+
attributes: attributes || {}
|
|
99
|
+
});
|
|
100
|
+
return {
|
|
101
|
+
end: attrs => {
|
|
102
|
+
if (attrs) {
|
|
103
|
+
for (const [k, v] of Object.entries(attrs)) {
|
|
104
|
+
if (typeof v === "string" || typeof v === "number" || typeof v === "boolean") {
|
|
105
|
+
span.setAttribute(k, v);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
span.end();
|
|
110
|
+
},
|
|
111
|
+
setError: err => {
|
|
112
|
+
span.setStatus({
|
|
113
|
+
code: 2 /* ERROR */,
|
|
114
|
+
message: typeof err === "string" ? err : err.message
|
|
81
115
|
});
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
span.recordException(err);
|
|
97
|
-
}
|
|
98
|
-
},
|
|
99
|
-
setAttribute: (key, value) => {
|
|
100
|
-
span.setAttribute(key, value);
|
|
101
|
-
},
|
|
102
|
-
addEvent: (eventName, attrs) => {
|
|
103
|
-
span.addEvent(eventName, attrs);
|
|
104
|
-
},
|
|
105
|
-
};
|
|
106
|
-
}
|
|
107
|
-
catch {
|
|
108
|
-
return noopSpan;
|
|
109
|
-
}
|
|
116
|
+
if (err instanceof Error) {
|
|
117
|
+
span.recordException(err);
|
|
118
|
+
}
|
|
119
|
+
},
|
|
120
|
+
setAttribute: (key, value) => {
|
|
121
|
+
span.setAttribute(key, value);
|
|
122
|
+
},
|
|
123
|
+
addEvent: (eventName, attrs) => {
|
|
124
|
+
span.addEvent(eventName, attrs);
|
|
125
|
+
}
|
|
126
|
+
};
|
|
127
|
+
} catch {
|
|
128
|
+
return noopSpan;
|
|
129
|
+
}
|
|
110
130
|
}
|
|
131
|
+
|
|
111
132
|
/**
|
|
112
133
|
* Convenience: wrap an async function in a span.
|
|
113
134
|
*/
|
|
114
135
|
export async function withSpan(name, attributes, fn) {
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
}
|
|
136
|
+
const span = startSpan(name, attributes);
|
|
137
|
+
try {
|
|
138
|
+
const result = await fn(span);
|
|
139
|
+
span.end();
|
|
140
|
+
return result;
|
|
141
|
+
} catch (err) {
|
|
142
|
+
span.setError(err);
|
|
143
|
+
span.end();
|
|
144
|
+
throw err;
|
|
145
|
+
}
|
|
126
146
|
}
|
|
147
|
+
//# sourceMappingURL=otel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"otel.js","names":["OTEL_ENABLED","process","env","OTEL_ENDPOINT","OTEL_EXPORTER_OTLP_ENDPOINT","SERVICE_NAME","OTEL_SERVICE_NAME","_tracer","_sdk","initOtel","NodeSDK","OTLPTraceExporter","Resource","ATTR_SERVICE_NAME","trace","exporter","url","resource","traceExporter","start","getTracer","console","log","err","warn","message","shutdownOtel","shutdown","noopSpan","end","setError","setAttribute","addEvent","startSpan","name","attributes","span","attrs","k","v","Object","entries","setStatus","code","Error","recordException","key","value","eventName","withSpan","fn","result"],"sources":["../../../src/server/lib/otel.ts"],"sourcesContent":["/**\n * lib/otel.ts — OpenTelemetry SDK setup for workflow engine observability\n *\n * Phase 3.3: Adds distributed tracing spans for step execution, tool calls, LLM calls.\n * Exports to any OTLP-compatible collector (Jaeger, Grafana Tempo, Honeycomb, etc.)\n *\n * Configuration:\n * OTEL_EXPORTER_OTLP_ENDPOINT — Collector endpoint (e.g., http://localhost:4318)\n * OTEL_SERVICE_NAME — Service name (default: \"whale-workflow-engine\")\n * OTEL_ENABLED — Set to \"true\" to enable (disabled by default)\n *\n * Backward compatible: If OTEL is not enabled, all functions are no-ops.\n */\n\n// Types for OTEL spans — allows code to use these without requiring the SDK\nexport interface SpanContext {\n end: (attrs?: Record<string, unknown>) => void;\n setError: (err: Error | string) => void;\n setAttribute: (key: string, value: string | number | boolean) => void;\n addEvent: (name: string, attrs?: Record<string, unknown>) => void;\n}\n\nconst OTEL_ENABLED = process.env.OTEL_ENABLED === \"true\";\nconst OTEL_ENDPOINT = process.env.OTEL_EXPORTER_OTLP_ENDPOINT || \"\";\nconst SERVICE_NAME = process.env.OTEL_SERVICE_NAME || \"whale-workflow-engine\";\n\n// Lazy-loaded SDK references\nlet _tracer: any = null;\nlet _sdk: any = null;\n\n/**\n * Initialize OpenTelemetry SDK. Call once at startup.\n * No-op if OTEL_ENABLED !== \"true\".\n */\nexport async function initOtel(): Promise<void> {\n if (!OTEL_ENABLED || !OTEL_ENDPOINT) return;\n\n try {\n // @ts-ignore — optional runtime dependency, gracefully handled by try/catch\n const { NodeSDK } = await import(\"@opentelemetry/sdk-node\");\n // @ts-ignore\n const { OTLPTraceExporter } = await import(\"@opentelemetry/exporter-trace-otlp-http\");\n // @ts-ignore\n const { Resource } = await import(\"@opentelemetry/resources\");\n // @ts-ignore\n const { ATTR_SERVICE_NAME } = await import(\"@opentelemetry/semantic-conventions\");\n // @ts-ignore\n const { trace } = await import(\"@opentelemetry/api\");\n\n const exporter = new OTLPTraceExporter({ url: `${OTEL_ENDPOINT}/v1/traces` });\n\n _sdk = new NodeSDK({\n resource: new Resource({ [ATTR_SERVICE_NAME]: SERVICE_NAME }),\n traceExporter: exporter,\n });\n\n _sdk.start();\n _tracer = trace.getTracer(SERVICE_NAME);\n console.log(`[otel] initialized — exporting to ${OTEL_ENDPOINT}`);\n } catch (err) {\n console.warn(\"[otel] Failed to initialize (SDK not installed?):\", (err as Error).message);\n // Non-fatal — all functions remain no-ops\n }\n}\n\n/**\n * Graceful shutdown — flush pending spans.\n */\nexport async function shutdownOtel(): Promise<void> {\n if (_sdk) {\n try {\n await _sdk.shutdown();\n } catch { /* ignore */ }\n }\n}\n\n/** No-op span for when OTEL is disabled */\nconst noopSpan: SpanContext = {\n end: () => {},\n setError: () => {},\n setAttribute: () => {},\n addEvent: () => {},\n};\n\n/**\n * Start a new span for tracking an operation.\n * Returns a SpanContext that wraps the OTEL span API.\n * If OTEL is disabled, returns a no-op.\n */\nexport function startSpan(\n name: string,\n attributes?: Record<string, string | number | boolean>,\n): SpanContext {\n if (!_tracer) return noopSpan;\n\n try {\n const span = _tracer.startSpan(name, {\n attributes: attributes || {},\n });\n\n return {\n end: (attrs?: Record<string, unknown>) => {\n if (attrs) {\n for (const [k, v] of Object.entries(attrs)) {\n if (typeof v === \"string\" || typeof v === \"number\" || typeof v === \"boolean\") {\n span.setAttribute(k, v);\n }\n }\n }\n span.end();\n },\n setError: (err: Error | string) => {\n span.setStatus({ code: 2 /* ERROR */, message: typeof err === \"string\" ? err : err.message });\n if (err instanceof Error) {\n span.recordException(err);\n }\n },\n setAttribute: (key: string, value: string | number | boolean) => {\n span.setAttribute(key, value);\n },\n addEvent: (eventName: string, attrs?: Record<string, unknown>) => {\n span.addEvent(eventName, attrs);\n },\n };\n } catch {\n return noopSpan;\n }\n}\n\n/**\n * Convenience: wrap an async function in a span.\n */\nexport async function withSpan<T>(\n name: string,\n attributes: Record<string, string | number | boolean>,\n fn: (span: SpanContext) => Promise<T>,\n): Promise<T> {\n const span = startSpan(name, attributes);\n try {\n const result = await fn(span);\n span.end();\n return result;\n } catch (err) {\n span.setError(err as Error);\n span.end();\n throw err;\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -75,7 +75,7 @@ interface Calculation {
|
|
|
75
75
|
formula: string;
|
|
76
76
|
decimals?: number;
|
|
77
77
|
}
|
|
78
|
-
export declare function applyCalculations(calculations: Calculation[] | undefined | null, constants: Record<string, unknown>, data: Record<string, unknown>): Record<string, unknown>;
|
|
78
|
+
export declare function applyCalculations(calculations: Calculation[] | Record<string, string> | undefined | null, constants: Record<string, unknown>, data: Record<string, unknown>): Record<string, unknown>;
|
|
79
79
|
interface ValidationRule {
|
|
80
80
|
name: string;
|
|
81
81
|
formula: string;
|