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":"teammate.js","names":["fork","fileURLToPath","loadTeam","claimTask","completeTask","failTask","getAvailableTasks","sendMessage","getUnreadMessages","markMessagesRead","updateTeammate","LoopDetector","estimateCostUsd","AGENT_DEFAULTS","resolveAgentLoopConfig","preCompact","loadCLIAgentConfig","MODEL_MAP","LOCAL_TOOL_DEFINITIONS","loadServerToolDefinitions","getValidToken","logSpan","generateSpanId","generateTraceId","getConversationId","initializeTelemetryClient","flushCliSpans","PKG_VERSION","callAgentAPI","executeToolBlocks","extractTextBlocks","extractToolUseBlocks","deduplicateTools","assertUniqueToolNames","TEAMMATE_MAX_TURNS_PER_TASK","subagentMaxTurns","TEAMMATE_MAX_OUTPUT_TOKENS","subagentMaxTokens","TEAMMATE_MAX_TOTAL_TURNS","teammateMaxTotalTurns","TEAMMATE_MAX_DURATION_MS","maxDurationMs","API_TIMEOUT_MS","apiTimeoutMs","TOOL_TIMEOUT_MS","toolTimeoutMs","resolvedTeammateConfig","resolveTeammateConfig","dbAgent","context_config","cc","subagent_max_turns","subagent_max_tokens","max_duration_ms","teammate_max_total_turns","api_timeout_ms","tool_timeout_ms","buildTeammatePrompt","teammateName","team","currentTask","cwd","taskList","tasks","map","t","status","assignedTo","teammates","find","tm","id","name","description","join","files","length","dependencies","TEAM_TOOLS","input_schema","type","properties","to","message","required","task_id","result","executeTeamTool","toolName","input","teamId","teammateId","currentTaskId","success","output","taskId","task","messages","msgList","m","from","content","callAPI","modelId","systemPrompt","tools","thinkingEnabled","onHeartbeat","contextProfile","maxOutputTokens","timeoutMs","runTeammateLoop","data","model","parentConversationId","teamName","authToken","preloadedConfig","preloadedServerTools","opus","startTime","Date","now","teammateConversationId","teammateTraceId","teammateSpanId","action","durationMs","context","traceId","spanId","conversationId","source","serviceName","serviceVersion","details","is_team","is_teammate","team_id","teammate_id","teammate_name","team_name","parent_conversation_id","display_name","display_icon","display_color","report","msg","process","send","localTools","serverTools","allTools","loopDetector","fromResolved","totalIn","totalOut","currentTaskModelId","currentTaskThinking","tasksCompleted","logTeammateComplete","reason","teammateCost","parentSpanId","inputTokens","outputTokens","totalCost","tasks_completed","completion_reason","outerTurn","tokensUsed","Math","round","available","inProgress","filter","Promise","r","setTimeout","claimed","taskModel","role","freshTeam","freshTask","apiError","lastTurn","taskTurnLimit","Number","MAX_SAFE_INTEGER","turn","apiStart","response","err","String","slice","severity","error","undefined","turn_number","apiDuration","usage","input_tokens","output_tokens","turnCostUsd","cache_read_tokens","cache_creation_tokens","cacheReadTokens","cacheCreationTokens","stop_reason","textBlocks","toolBlocks","text","compactionBlock","b","taskCompleted","toolResults","customExecutor","some","task_result","callbacks","onToolEnd","toolCategory","tool_category","push","maxToolResultChars","compactedMessages","stripThinking","hitTurnLimit","lastText","partialResult","Array","isArray","txt","argv","includes","on","exit","Error","catch","finally","spawnTeammate","__filename","import","meta","url","child","stdio","env"],"sources":["../../../src/cli/services/teammate.ts"],"sourcesContent":["/**\n * Teammate — Independent agent instance in a Team\n *\n * Following Anthropic's official patterns:\n * - Runs in separate context window (worker thread)\n * - Works on tasks from shared task list\n * - Can message other teammates directly\n * - Full tool access (not restricted like subagents)\n */\n\nimport type Anthropic from \"@anthropic-ai/sdk\";\nimport { fork, type ChildProcess } from \"child_process\";\nimport { fileURLToPath } from \"url\";\nimport {\n TeamState,\n TeamTask,\n loadTeam,\n claimTask,\n completeTask,\n failTask,\n getAvailableTasks,\n sendMessage,\n getUnreadMessages,\n markMessagesRead,\n updateTeammate,\n} from \"./team-state.js\";\nimport { LoopDetector, estimateCostUsd, AGENT_DEFAULTS, resolveAgentLoopConfig } from \"../../shared/agent-core.js\";\nimport { preCompact } from \"../../shared/compaction.js\";\nimport { loadCLIAgentConfig, type CLIAgentConfig } from \"./agent-config.js\";\nimport { MODEL_MAP } from \"../../shared/constants.js\";\nimport {\n LOCAL_TOOL_DEFINITIONS,\n} from \"./local-tools.js\";\nimport {\n loadServerToolDefinitions,\n} from \"./server-tools.js\";\nimport { getValidToken } from \"./auth-service.js\";\nimport { logSpan, generateSpanId, generateTraceId, getConversationId, initializeTelemetryClient, flushCliSpans, PKG_VERSION } from \"./telemetry.js\";\nimport {\n callAgentAPI,\n executeToolBlocks,\n extractTextBlocks,\n extractToolUseBlocks,\n deduplicateTools,\n assertUniqueToolNames,\n} from \"./agent-worker-base.js\";\nimport type { AgentAPIResponse, ToolExecResult } from \"./agent-worker-base.js\";\n\n// ============================================================================\n// TYPES\n// ============================================================================\n\nexport interface TeammateWorkerData {\n teamId: string;\n teammateId: string;\n teammateName: string;\n model: string;\n cwd: string;\n parentConversationId: string; // Link to parent trace for hierarchy\n teamName: string; // For display in telemetry\n authToken?: string; // User's access token for telemetry\n /** Pre-loaded config from parent — avoids each child making redundant DB calls */\n preloadedConfig?: CLIAgentConfig | null;\n /** Pre-loaded server tool definitions — avoids each child making redundant API calls */\n preloadedServerTools?: Anthropic.Tool[];\n}\n\nexport interface TeammateMessage {\n type: \"progress\" | \"task_started\" | \"task_completed\" | \"message_sent\" | \"done\" | \"error\";\n teammateId: string;\n taskId?: string;\n content: string;\n tokensUsed?: { input: number; output: number };\n}\n\n// ============================================================================\n// CONSTANTS\n// ============================================================================\n\n// Teammate constants — ALL from DB via AGENT_DEFAULTS, nothing hardcoded\nlet TEAMMATE_MAX_TURNS_PER_TASK: number = AGENT_DEFAULTS.subagentMaxTurns; // DB overridable\nlet TEAMMATE_MAX_OUTPUT_TOKENS: number = AGENT_DEFAULTS.subagentMaxTokens; // DB overridable\nlet TEAMMATE_MAX_TOTAL_TURNS: number = AGENT_DEFAULTS.teammateMaxTotalTurns;\nlet TEAMMATE_MAX_DURATION_MS: number = AGENT_DEFAULTS.maxDurationMs;\nlet API_TIMEOUT_MS: number = AGENT_DEFAULTS.apiTimeoutMs; // DB overridable\nlet TOOL_TIMEOUT_MS: number = AGENT_DEFAULTS.toolTimeoutMs; // DB overridable\n\n// Cached resolved config for LoopDetector creation\nlet resolvedTeammateConfig: import(\"../../shared/agent-core.js\").ResolvedAgentLoopConfig | null = null;\n\n// Lazy init from DB — called once per teammate spawn. ALL knobs from DB, nothing hardcoded.\nasync function resolveTeammateConfig(): Promise<void> {\n const dbAgent = await loadCLIAgentConfig();\n if (!dbAgent?.context_config) return;\n const cc = dbAgent.context_config;\n TEAMMATE_MAX_TURNS_PER_TASK = cc.subagent_max_turns ?? TEAMMATE_MAX_TURNS_PER_TASK;\n TEAMMATE_MAX_OUTPUT_TOKENS = cc.subagent_max_tokens ?? TEAMMATE_MAX_OUTPUT_TOKENS;\n TEAMMATE_MAX_DURATION_MS = cc.max_duration_ms ?? TEAMMATE_MAX_DURATION_MS;\n TEAMMATE_MAX_TOTAL_TURNS = cc.teammate_max_total_turns ?? TEAMMATE_MAX_TOTAL_TURNS;\n API_TIMEOUT_MS = cc.api_timeout_ms ?? API_TIMEOUT_MS;\n TOOL_TIMEOUT_MS = cc.tool_timeout_ms ?? TOOL_TIMEOUT_MS;\n // Cache resolved config for LoopDetector\n resolvedTeammateConfig = resolveAgentLoopConfig(dbAgent, \"sse\");\n}\n\n// ============================================================================\n// TEAMMATE SYSTEM PROMPT\n// ============================================================================\n\nfunction buildTeammatePrompt(\n teammateName: string,\n team: TeamState,\n currentTask: TeamTask | null,\n cwd: string\n): string {\n const taskList = team.tasks.map(t => {\n const status = t.status === \"in_progress\" && t.assignedTo\n ? `in_progress (${team.teammates.find(tm => tm.id === t.assignedTo)?.name || \"unknown\"})`\n : t.status;\n return `- [${status}] ${t.description}${t.id === currentTask?.id ? \" (YOUR TASK)\" : \"\"}`;\n }).join(\"\\n\");\n\n const teammates = team.teammates.map(t =>\n `- ${t.name} (${t.id}): ${t.status}${t.currentTask ? ` - working on task` : \"\"}`\n ).join(\"\\n\");\n\n return `You are ${teammateName}, a teammate in the \"${team.name}\" team.\n\n## Working Directory\n${cwd}\n\n## Your Current Task\n${currentTask ? `\n**Task ID**: ${currentTask.id}\n**Description**: ${currentTask.description}\n${currentTask.files?.length ? `**Files to modify**: ${currentTask.files.join(\", \")}` : \"\"}\n${currentTask.dependencies?.length ? `**Dependencies**: ${currentTask.dependencies.join(\", \")} (all completed)` : \"\"}\n` : \"No task assigned yet. Use team_claim_task to claim an available task.\"}\n\n## Team Task List\n${taskList}\n\n## Teammates\n${teammates}\n\n## Team Communication Tools\nYou have special tools to communicate with your team:\n- **team_message**: Send a message to another teammate or the team lead\n- **team_broadcast**: Send a message to all teammates\n- **team_claim_task**: Claim an available task to work on\n- **team_complete_task**: Mark your current task as complete with results\n- **team_check_messages**: Check for messages from teammates\n\n## Subagent Delegation (task tool)\nYou can delegate sub-tasks to specialized subagents using the 'task' tool:\n- Use subagent_type=\"explore\" for quick file/code searches\n- Use subagent_type=\"general-purpose\" for autonomous sub-tasks\n- Use model=\"haiku\" for simple lookups (cheapest/fastest)\n- This lets you work on multiple things in parallel while staying focused on your main task\n\n## CRITICAL: Task Completion Protocol\nYou MUST call team_complete_task when your work is done. This is NOT optional.\n- Your task is NOT considered complete until you call team_complete_task\n- Include a structured summary: what files were changed, what was done, any issues found\n- If you cannot complete the task, still call team_complete_task with what you accomplished and what remains\n\n## Guidelines\n1. Focus on YOUR assigned task — don't work on others' tasks\n2. Communicate blockers or discoveries that affect other tasks via team_message\n3. Check messages periodically for updates from teammates\n4. Avoid modifying files assigned to other teammates' tasks\n5. Delegate research or exploration to subagents when your task requires checking multiple areas\n\n## Self-Monitoring\nIf a tool fails, use audit_trail (action=\"errors\") to check patterns before retrying.\nUse audit_trail (action=\"tool_stats\") to see your tool success rates.\nIf a tool fails repeatedly, try a different approach instead of retrying the same call.\n\n## Output\nBe concise. Report progress and results clearly. Use tools to do the work.`;\n}\n\n// ============================================================================\n// TEAM-SPECIFIC TOOLS\n// ============================================================================\n\nconst TEAM_TOOLS: Anthropic.Tool[] = [\n {\n name: \"team_message\",\n description: \"Send a message to a specific teammate or the team lead\",\n input_schema: {\n type: \"object\",\n properties: {\n to: {\n type: \"string\",\n description: \"Teammate ID or 'lead' for team lead\",\n },\n message: {\n type: \"string\",\n description: \"Message content\",\n },\n },\n required: [\"to\", \"message\"],\n },\n },\n {\n name: \"team_broadcast\",\n description: \"Send a message to all teammates\",\n input_schema: {\n type: \"object\",\n properties: {\n message: {\n type: \"string\",\n description: \"Message to broadcast\",\n },\n },\n required: [\"message\"],\n },\n },\n {\n name: \"team_claim_task\",\n description: \"Claim an available task to work on\",\n input_schema: {\n type: \"object\",\n properties: {\n task_id: {\n type: \"string\",\n description: \"ID of the task to claim\",\n },\n },\n required: [\"task_id\"],\n },\n },\n {\n name: \"team_complete_task\",\n description: \"REQUIRED: Mark your current task as complete. You MUST call this tool when done — your task is not considered complete without it. Include a summary of files changed and work done.\",\n input_schema: {\n type: \"object\",\n properties: {\n result: {\n type: \"string\",\n description: \"Summary of what was accomplished\",\n },\n },\n required: [\"result\"],\n },\n },\n {\n name: \"team_check_messages\",\n description: \"Check for unread messages from teammates\",\n input_schema: {\n type: \"object\",\n properties: {},\n },\n },\n];\n\n// ============================================================================\n// TOOL EXECUTION\n// ============================================================================\n\nasync function executeTeamTool(\n toolName: string,\n input: Record<string, unknown>,\n teamId: string,\n teammateId: string,\n currentTaskId: string | null\n): Promise<{ success: boolean; output: string }> {\n switch (toolName) {\n case \"team_message\": {\n const to = input.to as string;\n const message = input.message as string;\n const result = await sendMessage(teamId, teammateId, to, message);\n return result\n ? { success: true, output: `Message sent to ${to}` }\n : { success: false, output: \"Failed to send message\" };\n }\n\n case \"team_broadcast\": {\n const message = input.message as string;\n const result = await sendMessage(teamId, teammateId, \"all\", message);\n return result\n ? { success: true, output: \"Message broadcast to all teammates\" }\n : { success: false, output: \"Failed to broadcast message\" };\n }\n\n case \"team_claim_task\": {\n const taskId = input.task_id as string;\n const task = await claimTask(teamId, taskId, teammateId);\n return task\n ? { success: true, output: `Claimed task: ${task.description}` }\n : { success: false, output: \"Failed to claim task (may be unavailable or have unmet dependencies)\" };\n }\n\n case \"team_complete_task\": {\n if (!currentTaskId) {\n return { success: false, output: \"No task currently assigned\" };\n }\n const result = input.result as string;\n const success = await completeTask(teamId, currentTaskId, result);\n return success\n ? { success: true, output: `Task completed: ${result}` }\n : { success: false, output: \"Failed to complete task\" };\n }\n\n case \"team_check_messages\": {\n const messages = await getUnreadMessages(teamId, teammateId);\n if (messages.length === 0) {\n return { success: true, output: \"No unread messages\" };\n }\n const msgList = messages.map(m => `From ${m.from}: ${m.content}`).join(\"\\n\");\n await markMessagesRead(teamId, messages.map(m => m.id));\n return { success: true, output: `${messages.length} messages:\\n${msgList}` };\n }\n\n default:\n return { success: false, output: `Unknown team tool: ${toolName}` };\n }\n}\n\n// ============================================================================\n// API CLIENT — uses shared callAgentAPI from agent-worker-base\n// ============================================================================\n\nasync function callAPI(\n modelId: string,\n systemPrompt: string,\n messages: Anthropic.MessageParam[],\n tools: Anthropic.Tool[],\n thinkingEnabled: boolean = false,\n onHeartbeat?: () => void,\n): Promise<AgentAPIResponse> {\n return callAgentAPI({\n modelId,\n contextProfile: \"teammate\",\n systemPrompt,\n messages,\n tools,\n thinkingEnabled,\n maxOutputTokens: TEAMMATE_MAX_OUTPUT_TOKENS,\n timeoutMs: API_TIMEOUT_MS,\n onHeartbeat,\n });\n}\n\n// ============================================================================\n// TEAMMATE WORKER LOOP\n// ============================================================================\n\nasync function runTeammateLoop(data: TeammateWorkerData): Promise<void> {\n const { teamId, teammateId, teammateName, model, cwd, parentConversationId, teamName, authToken, preloadedConfig, preloadedServerTools } = data;\n const modelId = MODEL_MAP[model] || MODEL_MAP.opus; // Inherit parent default\n const startTime = Date.now();\n\n // Initialize telemetry client with auth token if provided (do first for early spans)\n if (authToken) {\n initializeTelemetryClient(authToken);\n }\n\n // Use pre-loaded config from parent if available (avoids redundant DB call per child).\n // Falls back to direct DB load if parent didn't pre-load.\n if (preloadedConfig?.context_config) {\n const cc = preloadedConfig.context_config;\n TEAMMATE_MAX_TURNS_PER_TASK = cc.subagent_max_turns ?? TEAMMATE_MAX_TURNS_PER_TASK;\n TEAMMATE_MAX_OUTPUT_TOKENS = cc.subagent_max_tokens ?? TEAMMATE_MAX_OUTPUT_TOKENS;\n TEAMMATE_MAX_DURATION_MS = cc.max_duration_ms ?? TEAMMATE_MAX_DURATION_MS;\n TEAMMATE_MAX_TOTAL_TURNS = cc.teammate_max_total_turns ?? TEAMMATE_MAX_TOTAL_TURNS;\n API_TIMEOUT_MS = cc.api_timeout_ms ?? API_TIMEOUT_MS;\n TOOL_TIMEOUT_MS = cc.tool_timeout_ms ?? TOOL_TIMEOUT_MS;\n resolvedTeammateConfig = resolveAgentLoopConfig(preloadedConfig, \"sse\");\n } else {\n await resolveTeammateConfig();\n }\n\n // Each teammate gets its own conversation_id (separate trace)\n // but links to parent via parent_conversation_id\n const teammateConversationId = getConversationId(); // Worker's own ID\n\n // Create trace context for this teammate\n const teammateTraceId = generateTraceId();\n const teammateSpanId = generateSpanId();\n\n // Log teammate start - links to parent for tree hierarchy\n logSpan({\n action: \"team.teammate_start\",\n durationMs: 0,\n context: {\n traceId: teammateTraceId,\n spanId: teammateSpanId,\n conversationId: teammateConversationId,\n source: \"claude_code\",\n serviceName: \"whale-cli\",\n serviceVersion: PKG_VERSION,\n model: modelId,\n },\n details: {\n is_team: true,\n is_teammate: true,\n team_id: teamId,\n teammate_id: teammateId,\n teammate_name: teammateName,\n team_name: teamName,\n parent_conversation_id: parentConversationId, // Link to parent trace\n model: model,\n display_name: teammateName,\n display_icon: \"person.fill\",\n display_color: \"#3B82F6\",\n },\n });\n\n const report = (msg: TeammateMessage) => {\n if (process.send) {\n process.send(msg);\n }\n };\n\n // Report early — let parent know we're alive before async init\n report({ type: \"progress\", teammateId, content: `${teammateName} initializing...` });\n\n // Get all tools (local + server + team)\n const localTools: Anthropic.Tool[] = LOCAL_TOOL_DEFINITIONS.map(t => ({\n name: t.name,\n description: t.description,\n input_schema: t.input_schema as Anthropic.Tool[\"input_schema\"],\n }));\n\n // Use pre-loaded server tools from parent if available (avoids redundant API call per child)\n let serverTools: Anthropic.Tool[] = preloadedServerTools || [];\n if (!preloadedServerTools) {\n try {\n serverTools = await loadServerToolDefinitions();\n } catch { /* server tools unavailable — continue with local tools only */ }\n }\n\n // Deduplicate: local tools take priority, then server tools, then team tools\n const allTools = deduplicateTools([...localTools, ...serverTools, ...TEAM_TOOLS]);\n assertUniqueToolNames(allTools);\n\n const loopDetector = resolvedTeammateConfig\n ? LoopDetector.fromResolved(resolvedTeammateConfig)\n : new LoopDetector();\n\n let totalIn = 0;\n let totalOut = 0;\n let currentTaskId: string | null = null;\n let currentTaskModelId: string = modelId; // Per-task model (defaults to team model)\n let currentTaskThinking: boolean = false; // Per-task thinking toggle\n let messages: Anthropic.MessageParam[] = [];\n let tasksCompleted = 0;\n\n report({ type: \"progress\", teammateId, content: `${teammateName} ready (${allTools.length} tools)` });\n\n // Helper to log teammate completion\n const logTeammateComplete = (reason: string) => {\n const teammateCost = estimateCostUsd(totalIn, totalOut, modelId);\n logSpan({\n action: \"team.teammate_done\",\n durationMs: Date.now() - startTime,\n context: {\n traceId: teammateTraceId,\n spanId: generateSpanId(),\n parentSpanId: teammateSpanId,\n conversationId: teammateConversationId,\n source: \"claude_code\",\n serviceName: \"whale-cli\",\n serviceVersion: PKG_VERSION,\n model: modelId,\n inputTokens: totalIn,\n outputTokens: totalOut,\n totalCost: teammateCost,\n },\n details: {\n is_team: true,\n is_teammate: true,\n team_id: teamId,\n teammate_id: teammateId,\n teammate_name: teammateName,\n team_name: teamName,\n parent_conversation_id: parentConversationId,\n tasks_completed: tasksCompleted,\n completion_reason: reason,\n \"gen_ai.request.model\": modelId,\n \"gen_ai.usage.input_tokens\": totalIn,\n \"gen_ai.usage.output_tokens\": totalOut,\n \"gen_ai.usage.cost\": teammateCost,\n display_name: `${teammateName} done`,\n display_icon: \"checkmark.circle.fill\",\n display_color: \"#10B981\",\n },\n });\n };\n\n // Main work loop - keep working until no more tasks\n let outerTurn = 0;\n while (true) {\n // Safety: max turns guard (0 = no limit, Claude Code parity)\n if (TEAMMATE_MAX_TOTAL_TURNS > 0 && ++outerTurn > TEAMMATE_MAX_TOTAL_TURNS) {\n logTeammateComplete(\"max_turns_reached\");\n report({ type: \"done\", teammateId, content: `${teammateName} reached max turns (${TEAMMATE_MAX_TOTAL_TURNS})`, tokensUsed: { input: totalIn, output: totalOut } });\n break;\n }\n // Safety: elapsed time guard\n if (Date.now() - startTime > TEAMMATE_MAX_DURATION_MS) {\n logTeammateComplete(\"timeout\");\n report({ type: \"done\", teammateId, content: `${teammateName} timed out after ${Math.round(TEAMMATE_MAX_DURATION_MS / 60_000)}min`, tokensUsed: { input: totalIn, output: totalOut } });\n break;\n }\n\n const team = loadTeam(teamId);\n if (!team || team.status !== \"active\") {\n logTeammateComplete(\"team_inactive\");\n report({ type: \"done\", teammateId, content: \"Team completed or inactive\", tokensUsed: { input: totalIn, output: totalOut } });\n break;\n }\n\n // Find current task or claim a new one\n const currentTask = currentTaskId\n ? team.tasks.find(t => t.id === currentTaskId)\n : null;\n\n // If no current task, try to claim one\n if (!currentTask || currentTask.status === \"completed\") {\n const available = getAvailableTasks(team);\n if (available.length === 0) {\n // No tasks available, check if all done or waiting\n const inProgress = team.tasks.filter(t => t.status === \"in_progress\").length;\n if (inProgress === 0) {\n logTeammateComplete(\"all_tasks_done\");\n report({ type: \"done\", teammateId, content: \"All tasks completed\", tokensUsed: { input: totalIn, output: totalOut } });\n break;\n }\n // Wait and retry\n await new Promise(r => setTimeout(r, 2000));\n continue;\n }\n\n // Claim first available task\n const claimed = await claimTask(teamId, available[0].id, teammateId);\n if (!claimed) {\n await new Promise(r => setTimeout(r, 1000));\n continue;\n }\n\n currentTaskId = claimed.id;\n\n // Resolve per-task model: task-level → team default\n const taskModel = claimed.model || model;\n currentTaskModelId = MODEL_MAP[taskModel] || MODEL_MAP[model] || MODEL_MAP.opus;\n\n // Enable thinking for teammates — with 32K output tokens (matching Claude Code),\n // adaptive thinking has room to reason without starving code output.\n currentTaskThinking = true;\n\n await updateTeammate(teamId, teammateId, { status: \"working\", currentTask: currentTaskId });\n report({ type: \"task_started\", teammateId, taskId: currentTaskId, content: claimed.description });\n\n // Start fresh conversation for new task\n messages = [{\n role: \"user\",\n content: `Your task: ${claimed.description}\\n\\nBegin working on this task. When finished, you MUST call team_complete_task with a summary of changes made. Do not stop without calling team_complete_task.`,\n }];\n }\n\n // Build system prompt with current state\n const freshTeam = loadTeam(teamId)!;\n const freshTask = freshTeam.tasks.find(t => t.id === currentTaskId) || null;\n const systemPrompt = buildTeammatePrompt(teammateName, freshTeam, freshTask, cwd);\n\n // Agent loop for current task\n let apiError: string | null = null;\n let lastTurn = 0;\n // 0 = no limit (agent self-regulates via end_turn, Claude Code parity)\n const taskTurnLimit = TEAMMATE_MAX_TURNS_PER_TASK === 0 ? Number.MAX_SAFE_INTEGER : TEAMMATE_MAX_TURNS_PER_TASK;\n for (let turn = 0; turn < taskTurnLimit; turn++) {\n lastTurn = turn;\n const apiStart = Date.now();\n let response!: Awaited<ReturnType<typeof callAPI>>;\n try {\n response = await callAPI(currentTaskModelId, systemPrompt, messages, allTools, currentTaskThinking, () => {\n // Heartbeat during long API calls (thinking/streaming) — keeps parent stall detector alive.\n // Without this, a 90s API call = 90s silence → parent kills worker at WORKER_STALL_MS.\n report({ type: \"progress\", teammateId, content: \"streaming...\" });\n });\n } catch (err: any) {\n apiError = err.message || String(err);\n report({ type: \"progress\", teammateId, content: `API error: ${apiError!.slice(0, 80)}` });\n logSpan({\n action: \"claude_api_request\",\n durationMs: Date.now() - apiStart,\n severity: \"error\",\n error: apiError || undefined,\n context: {\n traceId: teammateTraceId,\n spanId: generateSpanId(),\n parentSpanId: teammateSpanId,\n conversationId: teammateConversationId,\n source: \"claude_code\",\n serviceName: \"whale-cli\",\n serviceVersion: PKG_VERSION,\n model: currentTaskModelId,\n },\n details: {\n is_team: true,\n is_teammate: true,\n team_id: teamId,\n teammate_id: teammateId,\n teammate_name: teammateName,\n parent_conversation_id: parentConversationId,\n turn_number: turn + 1,\n task_id: currentTaskId,\n },\n });\n break; // Exit inner loop — force-complete handler below will deal with the task\n }\n const apiDuration = Date.now() - apiStart;\n totalIn += response.usage.input_tokens;\n totalOut += response.usage.output_tokens;\n\n // Log Claude API request telemetry — include cache tokens for accurate cost\n const turnCostUsd = estimateCostUsd(\n response.usage.input_tokens,\n response.usage.output_tokens,\n currentTaskModelId,\n 0, // thinkingTokens (disabled for teammates)\n response.usage.cache_read_tokens,\n response.usage.cache_creation_tokens,\n );\n logSpan({\n action: \"claude_api_request\",\n durationMs: apiDuration,\n context: {\n traceId: teammateTraceId,\n spanId: generateSpanId(),\n parentSpanId: teammateSpanId,\n conversationId: teammateConversationId,\n source: \"claude_code\",\n serviceName: \"whale-cli\",\n serviceVersion: PKG_VERSION,\n model: currentTaskModelId,\n inputTokens: response.usage.input_tokens,\n outputTokens: response.usage.output_tokens,\n cacheReadTokens: response.usage.cache_read_tokens,\n cacheCreationTokens: response.usage.cache_creation_tokens,\n totalCost: turnCostUsd,\n },\n details: {\n is_team: true,\n is_teammate: true,\n team_id: teamId,\n teammate_id: teammateId,\n teammate_name: teammateName,\n parent_conversation_id: parentConversationId,\n turn_number: turn + 1,\n task_id: currentTaskId,\n stop_reason: response.stop_reason,\n \"gen_ai.request.model\": currentTaskModelId,\n \"gen_ai.usage.input_tokens\": response.usage.input_tokens,\n \"gen_ai.usage.output_tokens\": response.usage.output_tokens,\n \"gen_ai.usage.cache_read_tokens\": response.usage.cache_read_tokens,\n \"gen_ai.usage.cache_creation_tokens\": response.usage.cache_creation_tokens,\n \"gen_ai.usage.cost\": turnCostUsd,\n },\n });\n\n const textBlocks = extractTextBlocks(response.content);\n const toolBlocks = extractToolUseBlocks(response.content);\n\n // Report progress\n if (textBlocks.length) {\n report({ type: \"progress\", teammateId, taskId: currentTaskId || undefined, content: textBlocks[0].text.slice(0, 200) });\n }\n\n // Compaction handling — API paused after generating context summary.\n // Replace entire message history with the compaction block (per Anthropic docs).\n if (response.stop_reason === \"compaction\") {\n const compactionBlock = response.content.find((b: any) => b.type === \"compaction\") as any;\n if (compactionBlock) {\n report({ type: \"progress\", teammateId, taskId: currentTaskId || undefined, content: \"context compacted\" });\n messages = [\n { role: \"assistant\", content: [{ type: \"compaction\", content: compactionBlock.content }] },\n { role: \"user\", content: [{ type: \"text\", text: \"Continue with your task.\" }] },\n ] as any;\n turn--; // Don't count compaction as a turn\n continue;\n }\n }\n\n // No tools = done with this turn\n if (toolBlocks.length === 0) break;\n\n // Execute tools using shared executeToolBlocks with team-specific custom executor\n let taskCompleted = false;\n\n const { toolResults } = await executeToolBlocks({\n toolBlocks,\n loopDetector,\n toolTimeoutMs: TOOL_TIMEOUT_MS,\n customExecutor: async (toolName, input): Promise<ToolExecResult | null> => {\n // Only handle team tools; return null to fall through to standard routing\n if (!TEAM_TOOLS.some(t => t.name === toolName)) return null;\n\n const result = await executeTeamTool(toolName, input, teamId, teammateId, currentTaskId);\n\n // Check if task was completed\n if (toolName === \"team_complete_task\" && result.success) {\n taskCompleted = true;\n tasksCompleted++;\n report({ type: \"task_completed\", teammateId, taskId: currentTaskId || undefined, content: result.output });\n\n // Log task completion to telemetry\n logSpan({\n action: \"team.task_complete\",\n durationMs: 0,\n context: {\n traceId: teammateTraceId,\n spanId: generateSpanId(),\n parentSpanId: teammateSpanId,\n conversationId: teammateConversationId,\n source: \"claude_code\",\n serviceName: \"whale-cli\",\n serviceVersion: PKG_VERSION,\n },\n details: {\n is_team: true,\n is_teammate: true,\n team_id: teamId,\n teammate_id: teammateId,\n teammate_name: teammateName,\n parent_conversation_id: parentConversationId,\n task_id: currentTaskId,\n task_result: result.output.slice(0, 500),\n display_name: \"Task completed\",\n display_icon: \"checkmark.square.fill\",\n display_color: \"#10B981\",\n },\n });\n }\n\n return result;\n },\n callbacks: {\n onToolEnd: (toolName, success, durationMs) => {\n // Heartbeat: report tool activity to parent so stall detector knows we're alive.\n // Without this, tool-only responses (no text blocks) never update lastMessageTime\n // and the worker gets false-positive killed after WORKER_STALL_MS.\n report({ type: \"progress\", teammateId, taskId: currentTaskId || undefined, content: `${toolName} (${durationMs}ms)` });\n\n // Determine tool category for telemetry\n const toolCategory = TEAM_TOOLS.some(t => t.name === toolName) ? \"team\" : \"standard\";\n\n logSpan({\n action: `tool.${toolName}`,\n durationMs,\n severity: success ? \"info\" : \"error\",\n context: {\n traceId: teammateTraceId,\n spanId: generateSpanId(),\n parentSpanId: teammateSpanId,\n conversationId: teammateConversationId,\n source: \"claude_code\",\n serviceName: \"whale-cli\",\n serviceVersion: PKG_VERSION,\n },\n error: success ? undefined : \"(see tool result)\",\n details: {\n is_team: true,\n is_teammate: true,\n team_id: teamId,\n teammate_id: teammateId,\n teammate_name: teammateName,\n parent_conversation_id: parentConversationId,\n tool_category: toolCategory,\n },\n });\n },\n },\n });\n\n // Append to messages\n messages.push({ role: \"assistant\", content: response.content });\n messages.push({ role: \"user\", content: toolResults });\n\n // Pre-compact: trim large tool results and thinking blocks to prevent context bloat.\n // Without this, teammate context grows unbounded (same issue as subagent pre-fix).\n const maxToolResultChars = resolvedTeammateConfig?.maxToolResultChars ?? AGENT_DEFAULTS.maxToolResultChars;\n const { messages: compactedMessages } = preCompact(\n messages,\n { maxToolResultChars, stripThinking: true },\n );\n messages = compactedMessages;\n\n // If task was completed, break out to get next task\n if (taskCompleted) {\n currentTaskId = null;\n await updateTeammate(teamId, teammateId, { status: \"idle\", currentTask: undefined });\n break;\n }\n }\n\n // If inner loop ended without the model calling team_complete_task (exhausted turns, API error, or model end_turn)\n if (currentTaskId) {\n const team = loadTeam(teamId);\n const task = team?.tasks.find(t => t.id === currentTaskId);\n if (task && task.status === \"in_progress\") {\n if (apiError) {\n // API failed — mark task as failed, not completed\n await failTask(teamId, currentTaskId, apiError);\n // Report as progress (not error) — error type causes red flash in UI via handleTeammateFailure double-handling\n report({ type: \"progress\", teammateId, taskId: currentTaskId, content: `Task failed: ${apiError.slice(0, 80)}` });\n } else if (totalIn === 0 && totalOut === 0) {\n // Zero tokens used means no real work was done — fail the task\n await failTask(teamId, currentTaskId, \"No API response received (0 tokens)\");\n report({ type: \"progress\", teammateId, taskId: currentTaskId, content: \"Task failed: no API response\" });\n } else {\n // Model stopped (end_turn) or exhausted turns — auto-complete with result\n const hitTurnLimit = lastTurn >= taskTurnLimit - 1;\n const lastText = messages.length > 0 ? messages[messages.length - 1] : null;\n let partialResult = hitTurnLimit\n ? `Task auto-completed after reaching turn limit (${taskTurnLimit} turns).`\n : \"Task completed (model finished).\";\n if (lastText && typeof lastText === \"object\" && \"content\" in lastText) {\n const content = lastText.content;\n if (typeof content === \"string\") partialResult = content.slice(0, 500);\n else if (Array.isArray(content)) {\n const txt = content.find((b: any) => b.type === \"text\");\n if (txt && \"text\" in txt) partialResult = (txt as any).text.slice(0, 500);\n }\n }\n await completeTask(teamId, currentTaskId, partialResult);\n tasksCompleted++;\n report({ type: \"task_completed\", teammateId, taskId: currentTaskId, content: partialResult });\n }\n }\n currentTaskId = null;\n await updateTeammate(teamId, teammateId, { status: \"idle\", currentTask: undefined });\n }\n }\n\n // Final update\n await updateTeammate(teamId, teammateId, {\n status: \"done\",\n currentTask: undefined,\n tokensUsed: { input: totalIn, output: totalOut },\n });\n}\n\n// ============================================================================\n// CHILD PROCESS ENTRY POINT\n// ============================================================================\n\n// Detect if we were forked as a child process (process.send exists when IPC channel is open)\nif (process.send && process.argv.includes(\"--teammate-child\")) {\n // Wait for startup data from parent via IPC\n process.on(\"message\", (msg: any) => {\n if (msg?.type === \"__teammate_start\") {\n const data = msg.data as TeammateWorkerData;\n\n // Catch ALL errors including module-level and unhandled rejections\n process.on(\"uncaughtException\", (err) => {\n try {\n process.send!({\n type: \"error\",\n teammateId: data.teammateId,\n content: `Uncaught exception: ${err.message || String(err)}`,\n });\n } catch { /* last resort — nothing we can do */ }\n process.exit(1);\n });\n process.on(\"unhandledRejection\", (reason) => {\n try {\n process.send!({\n type: \"error\",\n teammateId: data.teammateId,\n content: `Unhandled rejection: ${reason instanceof Error ? reason.message : String(reason)}`,\n });\n } catch { /* last resort */ }\n });\n\n runTeammateLoop(data)\n .catch(err => {\n process.send!({\n type: \"error\",\n teammateId: data.teammateId,\n content: err.message || String(err),\n });\n })\n .finally(() => {\n // Flush telemetry spans before exiting\n flushCliSpans();\n // Brief delay for final IPC messages and telemetry to flush,\n // then exit cleanly. With process isolation, OS reclaims all resources.\n setTimeout(() => process.exit(0), 300);\n });\n }\n });\n}\n\n// ============================================================================\n// SPAWN TEAMMATE (from main thread)\n// ============================================================================\n\nexport async function spawnTeammate(\n teamId: string,\n teammateId: string,\n teammateName: string,\n model: string,\n cwd: string,\n parentConversationId: string,\n teamName: string,\n preloadedConfig?: CLIAgentConfig | null,\n preloadedServerTools?: Anthropic.Tool[],\n): Promise<ChildProcess> {\n const __filename = fileURLToPath(import.meta.url);\n\n // Get auth token to pass to child for telemetry\n const authToken = await getValidToken();\n\n // Fork a child process running this same file with --teammate-child flag\n const child = fork(__filename, [\"--teammate-child\"], {\n cwd,\n stdio: [\"pipe\", \"pipe\", \"pipe\", \"ipc\"],\n // Inherit parent's env so NODE_PATH, API keys etc. are available\n env: { ...process.env },\n });\n\n // Send startup data via IPC (replaces workerData)\n // Pre-loaded config and tools avoid each child making redundant DB/API calls\n child.send({\n type: \"__teammate_start\",\n data: {\n teamId,\n teammateId,\n teammateName,\n model,\n cwd,\n parentConversationId,\n teamName,\n authToken: authToken || undefined,\n preloadedConfig: preloadedConfig ?? undefined,\n preloadedServerTools: preloadedServerTools ?? undefined,\n } as TeammateWorkerData,\n });\n\n return child;\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
* Uses same column schema as server-side telemetry (trace_id, span_id, etc).
|
|
7
7
|
* Never blocks or crashes the chat.
|
|
8
8
|
*/
|
|
9
|
+
export declare const PKG_VERSION: string;
|
|
9
10
|
export interface ExecutionContext {
|
|
10
11
|
source: string;
|
|
11
12
|
userId?: string;
|
|
@@ -26,6 +27,8 @@ export interface ExecutionContext {
|
|
|
26
27
|
model?: string;
|
|
27
28
|
inputTokens?: number;
|
|
28
29
|
outputTokens?: number;
|
|
30
|
+
cacheReadTokens?: number;
|
|
31
|
+
cacheCreationTokens?: number;
|
|
29
32
|
totalCost?: number;
|
|
30
33
|
costBefore?: number;
|
|
31
34
|
turnCost?: number;
|
|
@@ -43,8 +46,10 @@ export declare function getConversationId(): string;
|
|
|
43
46
|
/**
|
|
44
47
|
* Initialize the telemetry client with a specific auth token.
|
|
45
48
|
* Used by worker threads that receive the token from the parent.
|
|
49
|
+
* Spans are now sent via HTTP (not Supabase direct), so this is a no-op
|
|
50
|
+
* retained for API compatibility.
|
|
46
51
|
*/
|
|
47
|
-
export declare function initializeTelemetryClient(
|
|
52
|
+
export declare function initializeTelemetryClient(_authToken: string): void;
|
|
48
53
|
export declare function generateTraceId(): string;
|
|
49
54
|
export declare function generateSpanId(): string;
|
|
50
55
|
export declare function nextTurn(): number;
|
|
@@ -6,228 +6,251 @@
|
|
|
6
6
|
* Uses same column schema as server-side telemetry (trace_id, span_id, etc).
|
|
7
7
|
* Never blocks or crashes the chat.
|
|
8
8
|
*/
|
|
9
|
+
|
|
9
10
|
import { createRequire } from "module";
|
|
10
11
|
import os from "node:os";
|
|
11
12
|
import { resolveConfig, loadConfig } from "./config-store.js";
|
|
12
|
-
import { getValidToken
|
|
13
|
+
import { getValidToken } from "./auth-service.js";
|
|
13
14
|
import { captureError } from "./error-logger.js";
|
|
14
15
|
const require = createRequire(import.meta.url);
|
|
15
|
-
const PKG_VERSION = require("../../../package.json").version;
|
|
16
|
+
export const PKG_VERSION = require("../../../package.json").version;
|
|
17
|
+
|
|
18
|
+
// Telemetry context for tracing — formerly in executor.ts, now owned here.
|
|
19
|
+
|
|
16
20
|
// ============================================================================
|
|
17
21
|
// SESSION STATE
|
|
18
22
|
// ============================================================================
|
|
23
|
+
|
|
19
24
|
let conversationId = crypto.randomUUID();
|
|
20
25
|
let turnNumber = 0;
|
|
26
|
+
|
|
21
27
|
/**
|
|
22
28
|
* Set the conversation ID (used by worker threads to share parent's conversation)
|
|
23
29
|
*/
|
|
24
30
|
export function setConversationId(id) {
|
|
25
|
-
|
|
31
|
+
conversationId = id;
|
|
26
32
|
}
|
|
33
|
+
|
|
27
34
|
/**
|
|
28
35
|
* Get the current conversation ID
|
|
29
36
|
*/
|
|
30
37
|
export function getConversationId() {
|
|
31
|
-
|
|
38
|
+
return conversationId;
|
|
32
39
|
}
|
|
33
|
-
let supabaseClient = null;
|
|
34
40
|
/**
|
|
35
41
|
* Initialize the telemetry client with a specific auth token.
|
|
36
42
|
* Used by worker threads that receive the token from the parent.
|
|
43
|
+
* Spans are now sent via HTTP (not Supabase direct), so this is a no-op
|
|
44
|
+
* retained for API compatibility.
|
|
37
45
|
*/
|
|
38
|
-
export function initializeTelemetryClient(
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
supabaseClient = createAuthenticatedClient(authToken);
|
|
42
|
-
if (process.env.DEBUG_TELEMETRY) {
|
|
43
|
-
process.stderr.write(`[telemetry] initialized client with provided auth token\n`);
|
|
44
|
-
}
|
|
46
|
+
export function initializeTelemetryClient(_authToken) {
|
|
47
|
+
// Spans flow via _sendSpans() → HTTP → server → ClickHouse.
|
|
48
|
+
// No Supabase client needed.
|
|
45
49
|
}
|
|
50
|
+
|
|
46
51
|
// ============================================================================
|
|
47
52
|
// W3C TRACE CONTEXT GENERATORS
|
|
48
53
|
// ============================================================================
|
|
54
|
+
|
|
49
55
|
export function generateTraceId() {
|
|
50
|
-
|
|
51
|
-
|
|
56
|
+
// Use proper UUID format so it's compatible with Postgres uuid columns
|
|
57
|
+
return crypto.randomUUID();
|
|
52
58
|
}
|
|
53
59
|
export function generateSpanId() {
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
60
|
+
const bytes = new Uint8Array(8);
|
|
61
|
+
crypto.getRandomValues(bytes);
|
|
62
|
+
return Array.from(bytes).map(b => b.toString(16).padStart(2, "0")).join("");
|
|
57
63
|
}
|
|
64
|
+
|
|
58
65
|
// ============================================================================
|
|
59
66
|
// TURN CONTEXT
|
|
60
67
|
// ============================================================================
|
|
68
|
+
|
|
61
69
|
export function nextTurn() {
|
|
62
|
-
|
|
70
|
+
return ++turnNumber;
|
|
63
71
|
}
|
|
64
72
|
export function createTurnContext(overrides) {
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
73
|
+
// Get user info from config
|
|
74
|
+
const {
|
|
75
|
+
user_id,
|
|
76
|
+
email
|
|
77
|
+
} = loadConfig();
|
|
78
|
+
return {
|
|
79
|
+
source: "whale_cli",
|
|
80
|
+
serviceName: "whale-code",
|
|
81
|
+
serviceVersion: PKG_VERSION,
|
|
82
|
+
conversationId,
|
|
83
|
+
turnNumber,
|
|
84
|
+
traceId: generateTraceId(),
|
|
85
|
+
spanId: generateSpanId(),
|
|
86
|
+
traceFlags: 1,
|
|
87
|
+
userId: user_id,
|
|
88
|
+
userEmail: email,
|
|
89
|
+
...overrides
|
|
90
|
+
};
|
|
80
91
|
}
|
|
81
92
|
export function getTurnNumber() {
|
|
82
|
-
|
|
93
|
+
return turnNumber;
|
|
83
94
|
}
|
|
95
|
+
|
|
84
96
|
// ============================================================================
|
|
85
97
|
// SPAN BUFFER — batches spans for bulk POST to the Fly.io server
|
|
86
98
|
// Same pattern as server's clickhouse-buffer.ts but over HTTP.
|
|
87
99
|
// ============================================================================
|
|
100
|
+
|
|
88
101
|
const FLUSH_INTERVAL = 2000; // 2s (slower than server — HTTP has more overhead)
|
|
89
102
|
const FLUSH_MAX = 50; // max spans before force flush
|
|
90
103
|
const spanBuffer = [];
|
|
91
104
|
let flushTimer = null;
|
|
92
105
|
let conversationRegistered = false;
|
|
93
106
|
function queueCliSpan(span) {
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
}
|
|
107
|
+
spanBuffer.push(span);
|
|
108
|
+
if (spanBuffer.length >= FLUSH_MAX) {
|
|
109
|
+
flushCliSpans();
|
|
110
|
+
} else if (!flushTimer) {
|
|
111
|
+
flushTimer = setTimeout(() => {
|
|
112
|
+
flushTimer = null;
|
|
113
|
+
flushCliSpans();
|
|
114
|
+
}, FLUSH_INTERVAL);
|
|
115
|
+
}
|
|
104
116
|
}
|
|
117
|
+
|
|
105
118
|
/**
|
|
106
119
|
* Flush all buffered spans to the Fly.io server.
|
|
107
120
|
* Call this on session end or at shutdown.
|
|
108
121
|
*/
|
|
109
122
|
export function flushCliSpans() {
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
123
|
+
if (flushTimer) {
|
|
124
|
+
clearTimeout(flushTimer);
|
|
125
|
+
flushTimer = null;
|
|
126
|
+
}
|
|
127
|
+
if (spanBuffer.length === 0) return;
|
|
128
|
+
const batch = spanBuffer.splice(0, spanBuffer.length);
|
|
129
|
+
// Fire-and-forget — never block the chat
|
|
130
|
+
_sendSpans(batch).catch(err => {
|
|
131
|
+
if (process.env.DEBUG_TELEMETRY) {
|
|
132
|
+
process.stderr.write(`[telemetry] flush error: ${err.message}\n`);
|
|
113
133
|
}
|
|
114
|
-
|
|
115
|
-
return;
|
|
116
|
-
const batch = spanBuffer.splice(0, spanBuffer.length);
|
|
117
|
-
// Fire-and-forget — never block the chat
|
|
118
|
-
_sendSpans(batch).catch((err) => {
|
|
119
|
-
if (process.env.DEBUG_TELEMETRY) {
|
|
120
|
-
process.stderr.write(`[telemetry] flush error: ${err.message}\n`);
|
|
121
|
-
}
|
|
122
|
-
});
|
|
134
|
+
});
|
|
123
135
|
}
|
|
124
136
|
async function _sendSpans(spans) {
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
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
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
process.stderr.write(`[telemetry] ingest failed (${response.status}): ${text.slice(0, 200)}\n`);
|
|
163
|
-
}
|
|
137
|
+
const config = resolveConfig();
|
|
138
|
+
if (!config.serverUrl) return;
|
|
139
|
+
let authToken = config.supabaseKey;
|
|
140
|
+
if (!authToken) {
|
|
141
|
+
authToken = (await getValidToken()) || "";
|
|
142
|
+
}
|
|
143
|
+
if (!authToken) return;
|
|
144
|
+
const fileConfig = loadConfig();
|
|
145
|
+
const body = {
|
|
146
|
+
mode: "telemetry_ingest",
|
|
147
|
+
spans,
|
|
148
|
+
conversation_id: conversationId,
|
|
149
|
+
store_id: config.storeId || undefined,
|
|
150
|
+
userId: fileConfig.user_id || undefined,
|
|
151
|
+
userEmail: fileConfig.email || undefined,
|
|
152
|
+
source: "whale_cli"
|
|
153
|
+
};
|
|
154
|
+
|
|
155
|
+
// Include conversation metadata on first flush so server creates the row
|
|
156
|
+
if (!conversationRegistered) {
|
|
157
|
+
conversationRegistered = true;
|
|
158
|
+
body.conversation_title = `CLI Session ${new Date().toISOString().split("T")[0]}`;
|
|
159
|
+
body.hostname = os.hostname();
|
|
160
|
+
body.version = PKG_VERSION;
|
|
161
|
+
}
|
|
162
|
+
try {
|
|
163
|
+
const response = await fetch(config.serverUrl, {
|
|
164
|
+
method: "POST",
|
|
165
|
+
headers: {
|
|
166
|
+
"Content-Type": "application/json",
|
|
167
|
+
"Authorization": `Bearer ${authToken}`
|
|
168
|
+
},
|
|
169
|
+
body: JSON.stringify(body)
|
|
170
|
+
});
|
|
171
|
+
if (!response.ok && process.env.DEBUG_TELEMETRY) {
|
|
172
|
+
const text = await response.text().catch(() => "");
|
|
173
|
+
process.stderr.write(`[telemetry] ingest failed (${response.status}): ${text.slice(0, 200)}\n`);
|
|
164
174
|
}
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
}
|
|
175
|
+
} catch (err) {
|
|
176
|
+
if (process.env.DEBUG_TELEMETRY) {
|
|
177
|
+
process.stderr.write(`[telemetry] ingest error: ${err.message}\n`);
|
|
169
178
|
}
|
|
179
|
+
}
|
|
170
180
|
}
|
|
181
|
+
|
|
182
|
+
// ============================================================================
|
|
183
|
+
// LOG SPAN (fire-and-forget)
|
|
184
|
+
// ============================================================================
|
|
185
|
+
|
|
171
186
|
export function logSpan(opts) {
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
if (process.env.DEBUG_TELEMETRY) {
|
|
175
|
-
process.stderr.write(`[telemetry error] ${opts.action}: ${err.message}\n`);
|
|
176
|
-
}
|
|
177
|
-
});
|
|
178
|
-
}
|
|
179
|
-
async function _logSpan(opts) {
|
|
187
|
+
// Fire-and-forget — don't await, log errors in debug mode
|
|
188
|
+
_logSpan(opts).catch(err => {
|
|
180
189
|
if (process.env.DEBUG_TELEMETRY) {
|
|
181
|
-
|
|
190
|
+
process.stderr.write(`[telemetry error] ${opts.action}: ${err.message}\n`);
|
|
182
191
|
}
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
severity: "error",
|
|
225
|
-
traceId: ctx.traceId,
|
|
226
|
-
spanId: ctx.spanId,
|
|
227
|
-
storeId: opts.storeId || resolveConfig().storeId,
|
|
228
|
-
userId: ctx.userId,
|
|
229
|
-
userEmail: ctx.userEmail,
|
|
230
|
-
tags: { action: opts.action },
|
|
231
|
-
});
|
|
192
|
+
});
|
|
193
|
+
}
|
|
194
|
+
async function _logSpan(opts) {
|
|
195
|
+
if (process.env.DEBUG_TELEMETRY) {
|
|
196
|
+
process.stderr.write(`[telemetry] _logSpan called for ${opts.action}\n`);
|
|
197
|
+
}
|
|
198
|
+
const ctx = opts.context;
|
|
199
|
+
const now = new Date();
|
|
200
|
+
const startedAt = new Date(now.getTime() - opts.durationMs).toISOString();
|
|
201
|
+
const endedAt = now.toISOString();
|
|
202
|
+
|
|
203
|
+
// Build span in same shape as server's auditRowToSpan input
|
|
204
|
+
const span = {
|
|
205
|
+
action: opts.action,
|
|
206
|
+
severity: opts.severity || (opts.error ? "error" : "info"),
|
|
207
|
+
store_id: opts.storeId || resolveConfig().storeId || null,
|
|
208
|
+
source: ctx.source || "whale_cli",
|
|
209
|
+
service_name: ctx.serviceName || "whale-code",
|
|
210
|
+
span_kind: "INTERNAL",
|
|
211
|
+
status_code: opts.error ? "ERROR" : "OK",
|
|
212
|
+
trace_id: ctx.traceId || null,
|
|
213
|
+
span_id: ctx.spanId || generateSpanId(),
|
|
214
|
+
conversation_id: ctx.conversationId || conversationId,
|
|
215
|
+
user_id: ctx.userId || null,
|
|
216
|
+
user_email: ctx.userEmail || null,
|
|
217
|
+
start_time: startedAt,
|
|
218
|
+
end_time: endedAt,
|
|
219
|
+
duration_ms: opts.durationMs,
|
|
220
|
+
error_message: opts.error || null,
|
|
221
|
+
details: {
|
|
222
|
+
...opts.details,
|
|
223
|
+
input_tokens: ctx.inputTokens,
|
|
224
|
+
output_tokens: ctx.outputTokens,
|
|
225
|
+
cache_read_tokens: ctx.cacheReadTokens,
|
|
226
|
+
cache_creation_tokens: ctx.cacheCreationTokens,
|
|
227
|
+
total_cost: ctx.totalCost,
|
|
228
|
+
model: ctx.model,
|
|
229
|
+
turn_number: ctx.turnNumber,
|
|
230
|
+
agent_id: ctx.agentId,
|
|
231
|
+
agent_name: ctx.agentName,
|
|
232
|
+
tool_type: ctx.toolType
|
|
232
233
|
}
|
|
234
|
+
};
|
|
235
|
+
|
|
236
|
+
// Queue for batch send to server → ClickHouse
|
|
237
|
+
queueCliSpan(span);
|
|
238
|
+
|
|
239
|
+
// Also bridge errors to the error logging system (Postgres)
|
|
240
|
+
if (opts.error) {
|
|
241
|
+
captureError({
|
|
242
|
+
errorType: opts.action,
|
|
243
|
+
errorMessage: opts.error,
|
|
244
|
+
severity: "error",
|
|
245
|
+
traceId: ctx.traceId,
|
|
246
|
+
spanId: ctx.spanId,
|
|
247
|
+
storeId: opts.storeId || resolveConfig().storeId,
|
|
248
|
+
userId: ctx.userId,
|
|
249
|
+
userEmail: ctx.userEmail,
|
|
250
|
+
tags: {
|
|
251
|
+
action: opts.action
|
|
252
|
+
}
|
|
253
|
+
});
|
|
254
|
+
}
|
|
233
255
|
}
|
|
256
|
+
//# sourceMappingURL=telemetry.js.map
|