whale-code 6.5.5 → 6.5.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +39 -31
- package/bin/{swagmanager-mcp.js → whale-code.js} +17 -2
- package/dist/cli/app.js +148 -72
- package/dist/cli/app.js.map +1 -0
- package/dist/cli/chat/AgentSelector.js +105 -10
- package/dist/cli/chat/AgentSelector.js.map +1 -0
- package/dist/cli/chat/ChatApp.d.ts +31 -0
- package/dist/cli/chat/ChatApp.js +539 -286
- package/dist/cli/chat/ChatApp.js.map +1 -0
- package/dist/cli/chat/ChatInput.js +1088 -770
- package/dist/cli/chat/ChatInput.js.map +1 -0
- package/dist/cli/chat/MarkdownText.js +39 -14
- package/dist/cli/chat/MarkdownText.js.map +1 -0
- package/dist/cli/chat/MemoryManager.js +181 -46
- package/dist/cli/chat/MemoryManager.js.map +1 -0
- package/dist/cli/chat/MessageList.d.ts +2 -3
- package/dist/cli/chat/MessageList.js +186 -45
- package/dist/cli/chat/MessageList.js.map +1 -0
- package/dist/cli/chat/ModelSelector.js +282 -63
- package/dist/cli/chat/ModelSelector.js.map +1 -0
- package/dist/cli/chat/NodeManager.js +165 -75
- package/dist/cli/chat/NodeManager.js.map +1 -0
- package/dist/cli/chat/NodeSelector.js +171 -30
- package/dist/cli/chat/NodeSelector.js.map +1 -0
- package/dist/cli/chat/PlanApproval.js +281 -57
- package/dist/cli/chat/PlanApproval.js.map +1 -0
- package/dist/cli/chat/RewindViewer.js +559 -144
- package/dist/cli/chat/RewindViewer.js.map +1 -0
- package/dist/cli/chat/SessionManager.js +137 -30
- package/dist/cli/chat/SessionManager.js.map +1 -0
- package/dist/cli/chat/SlashMenu.js +293 -164
- package/dist/cli/chat/SlashMenu.js.map +1 -0
- package/dist/cli/chat/StatusBar.js +172 -9
- package/dist/cli/chat/StatusBar.js.map +1 -0
- package/dist/cli/chat/StoreSelector.js +147 -18
- package/dist/cli/chat/StoreSelector.js.map +1 -0
- package/dist/cli/chat/StreamingText.d.ts +1 -5
- package/dist/cli/chat/StreamingText.js +22 -7
- package/dist/cli/chat/StreamingText.js.map +1 -0
- package/dist/cli/chat/SubagentPanel.d.ts +1 -2
- package/dist/cli/chat/SubagentPanel.js +612 -72
- package/dist/cli/chat/SubagentPanel.js.map +1 -0
- package/dist/cli/chat/TeamPanel.d.ts +1 -0
- package/dist/cli/chat/TeamPanel.js +230 -30
- package/dist/cli/chat/TeamPanel.js.map +1 -0
- package/dist/cli/chat/ThemeSelector.js +84 -24
- package/dist/cli/chat/ThemeSelector.js.map +1 -0
- package/dist/cli/chat/ToolIndicator.js +1476 -371
- package/dist/cli/chat/ToolIndicator.js.map +1 -0
- package/dist/cli/chat/hooks/useAgentLoop.d.ts +1 -0
- package/dist/cli/chat/hooks/useAgentLoop.js +481 -367
- package/dist/cli/chat/hooks/useAgentLoop.js.map +1 -0
- package/dist/cli/chat/hooks/useSlashCommands.d.ts +3 -14
- package/dist/cli/chat/hooks/useSlashCommands.js +744 -572
- package/dist/cli/chat/hooks/useSlashCommands.js.map +1 -0
- package/dist/cli/commands/config-cmd.js +56 -57
- package/dist/cli/commands/config-cmd.js.map +1 -0
- package/dist/cli/commands/db.js +184 -169
- package/dist/cli/commands/db.js.map +1 -0
- package/dist/cli/commands/doctor.js +212 -122
- package/dist/cli/commands/doctor.js.map +1 -0
- package/dist/cli/commands/init.js +211 -244
- package/dist/cli/commands/init.js.map +1 -0
- package/dist/cli/commands/mcp.js +127 -122
- package/dist/cli/commands/mcp.js.map +1 -0
- package/dist/cli/login/LoginApp.js +355 -141
- package/dist/cli/login/LoginApp.js.map +1 -0
- package/dist/cli/print-mode.js +196 -177
- package/dist/cli/print-mode.js.map +1 -0
- package/dist/cli/serve-mode.js +615 -530
- package/dist/cli/serve-mode.js.map +1 -0
- package/dist/cli/services/agent-config.d.ts +5 -1
- package/dist/cli/services/agent-config.js +66 -36
- package/dist/cli/services/agent-config.js.map +1 -0
- package/dist/cli/services/agent-definitions.d.ts +4 -1
- package/dist/cli/services/agent-definitions.js +97 -56
- package/dist/cli/services/agent-definitions.js.map +1 -0
- package/dist/cli/services/agent-events.js +225 -162
- package/dist/cli/services/agent-events.js.map +1 -0
- package/dist/cli/services/agent-loop.js +976 -688
- package/dist/cli/services/agent-loop.js.map +1 -0
- package/dist/cli/services/agent-worker-base.d.ts +35 -5
- package/dist/cli/services/agent-worker-base.js +337 -153
- package/dist/cli/services/agent-worker-base.js.map +1 -0
- package/dist/cli/services/api-retry.js +69 -64
- package/dist/cli/services/api-retry.js.map +1 -0
- package/dist/cli/services/auth-service.d.ts +3 -3
- package/dist/cli/services/auth-service.js +209 -132
- package/dist/cli/services/auth-service.js.map +1 -0
- package/dist/cli/services/background-processes.js +343 -267
- package/dist/cli/services/background-processes.js.map +1 -0
- package/dist/cli/services/browser-auth.d.ts +2 -2
- package/dist/cli/services/browser-auth.js +159 -118
- package/dist/cli/services/browser-auth.js.map +1 -0
- package/dist/cli/services/claude-md-loader.js +40 -36
- package/dist/cli/services/claude-md-loader.js.map +1 -0
- package/dist/cli/services/config-store.d.ts +9 -4
- package/dist/cli/services/config-store.js +164 -117
- package/dist/cli/services/config-store.js.map +1 -0
- package/dist/cli/services/debug-log.d.ts +1 -1
- package/dist/cli/services/debug-log.js +34 -35
- package/dist/cli/services/debug-log.js.map +1 -0
- package/dist/cli/services/env-detect.d.ts +7 -0
- package/dist/cli/services/env-detect.js +9 -0
- package/dist/cli/services/env-detect.js.map +1 -0
- package/dist/cli/services/error-logger.js +187 -169
- package/dist/cli/services/error-logger.js.map +1 -0
- package/dist/cli/services/file-history.d.ts +1 -1
- package/dist/cli/services/file-history.js +50 -54
- package/dist/cli/services/file-history.js.map +1 -0
- package/dist/cli/services/format-server-response.js +332 -372
- package/dist/cli/services/format-server-response.js.map +1 -0
- package/dist/cli/services/git-context.js +61 -45
- package/dist/cli/services/git-context.js.map +1 -0
- package/dist/cli/services/hooks.d.ts +2 -2
- package/dist/cli/services/hooks.js +195 -180
- package/dist/cli/services/hooks.js.map +1 -0
- package/dist/cli/services/ink-incremental.d.ts +19 -0
- package/dist/cli/services/ink-incremental.js +59 -0
- package/dist/cli/services/ink-incremental.js.map +1 -0
- package/dist/cli/services/ink-resize-fix.js +54 -44
- package/dist/cli/services/ink-resize-fix.js.map +1 -0
- package/dist/cli/services/ink-sync-output.d.ts +12 -0
- package/dist/cli/services/ink-sync-output.js +16 -0
- package/dist/cli/services/ink-sync-output.js.map +1 -0
- package/dist/cli/services/interactive-tools.js +268 -212
- package/dist/cli/services/interactive-tools.js.map +1 -0
- package/dist/cli/services/keybinding-manager.d.ts +11 -1
- package/dist/cli/services/keybinding-manager.js +126 -63
- package/dist/cli/services/keybinding-manager.js.map +1 -0
- package/dist/cli/services/local-tools.d.ts +1 -1
- package/dist/cli/services/local-tools.js +939 -656
- package/dist/cli/services/local-tools.js.map +1 -0
- package/dist/cli/services/lsp-manager.js +757 -594
- package/dist/cli/services/lsp-manager.js.map +1 -0
- package/dist/cli/services/mcp-client.d.ts +1 -1
- package/dist/cli/services/mcp-client.js +173 -134
- package/dist/cli/services/mcp-client.js.map +1 -0
- package/dist/cli/services/memory-manager.js +53 -40
- package/dist/cli/services/memory-manager.js.map +1 -0
- package/dist/cli/services/model-manager.js +55 -40
- package/dist/cli/services/model-manager.js.map +1 -0
- package/dist/cli/services/model-router.js +115 -85
- package/dist/cli/services/model-router.js.map +1 -0
- package/dist/cli/services/paths.d.ts +30 -0
- package/dist/cli/services/paths.js +81 -0
- package/dist/cli/services/paths.js.map +1 -0
- package/dist/cli/services/permission-modes.js +32 -25
- package/dist/cli/services/permission-modes.js.map +1 -0
- package/dist/cli/services/rewind.js +182 -168
- package/dist/cli/services/rewind.js.map +1 -0
- package/dist/cli/services/ripgrep.js +115 -115
- package/dist/cli/services/ripgrep.js.map +1 -0
- package/dist/cli/services/sandbox.d.ts +1 -1
- package/dist/cli/services/sandbox.js +58 -37
- package/dist/cli/services/sandbox.js.map +1 -0
- package/dist/cli/services/server-tools.js +738 -565
- package/dist/cli/services/server-tools.js.map +1 -0
- package/dist/cli/services/session-persistence.js +69 -74
- package/dist/cli/services/session-persistence.js.map +1 -0
- package/dist/cli/services/subagent-worker.js +42 -27
- package/dist/cli/services/subagent-worker.js.map +1 -0
- package/dist/cli/services/subagent.d.ts +2 -0
- package/dist/cli/services/subagent.js +605 -433
- package/dist/cli/services/subagent.js.map +1 -0
- package/dist/cli/services/system-prompt.js +86 -78
- package/dist/cli/services/system-prompt.js.map +1 -0
- package/dist/cli/services/task-decomposer.d.ts +1 -1
- package/dist/cli/services/task-decomposer.js +172 -139
- package/dist/cli/services/task-decomposer.js.map +1 -0
- package/dist/cli/services/team-lead.d.ts +2 -2
- package/dist/cli/services/team-lead.js +727 -529
- package/dist/cli/services/team-lead.js.map +1 -0
- package/dist/cli/services/team-state.js +319 -319
- package/dist/cli/services/team-state.js.map +1 -0
- package/dist/cli/services/teammate.d.ts +8 -2
- package/dist/cli/services/teammate.js +857 -569
- package/dist/cli/services/teammate.js.map +1 -0
- package/dist/cli/services/telemetry.d.ts +6 -1
- package/dist/cli/services/telemetry.js +180 -157
- package/dist/cli/services/telemetry.js.map +1 -0
- package/dist/cli/services/tools/agent-tools.d.ts +3 -3
- package/dist/cli/services/tools/agent-tools.js +480 -322
- package/dist/cli/services/tools/agent-tools.js.map +1 -0
- package/dist/cli/services/tools/file-ops.js +563 -450
- package/dist/cli/services/tools/file-ops.js.map +1 -0
- package/dist/cli/services/tools/search-tools.js +231 -162
- package/dist/cli/services/tools/search-tools.js.map +1 -0
- package/dist/cli/services/tools/shell-exec.js +197 -151
- package/dist/cli/services/tools/shell-exec.js.map +1 -0
- package/dist/cli/services/tools/task-manager.js +206 -173
- package/dist/cli/services/tools/task-manager.js.map +1 -0
- package/dist/cli/services/tools/web-tools.js +388 -341
- package/dist/cli/services/tools/web-tools.js.map +1 -0
- package/dist/cli/setup/SetupApp.d.ts +2 -2
- package/dist/cli/setup/SetupApp.js +608 -160
- package/dist/cli/setup/SetupApp.js.map +1 -0
- package/dist/cli/shared/ErrorBoundary.d.ts +22 -0
- package/dist/cli/shared/ErrorBoundary.js +73 -0
- package/dist/cli/shared/ErrorBoundary.js.map +1 -0
- package/dist/cli/shared/MatrixIntro.js +66 -69
- package/dist/cli/shared/MatrixIntro.js.map +1 -0
- package/dist/cli/shared/SpinnerSlot.d.ts +14 -0
- package/dist/cli/shared/SpinnerSlot.js +63 -0
- package/dist/cli/shared/SpinnerSlot.js.map +1 -0
- package/dist/cli/shared/Theme.d.ts +1 -1
- package/dist/cli/shared/Theme.js +136 -92
- package/dist/cli/shared/Theme.js.map +1 -0
- package/dist/cli/shared/WhaleBanner.js +99 -11
- package/dist/cli/shared/WhaleBanner.js.map +1 -0
- package/dist/cli/shared/markdown.d.ts +3 -1
- package/dist/cli/shared/markdown.js +736 -674
- package/dist/cli/shared/markdown.js.map +1 -0
- package/dist/cli/shared/marked-terminal.d.js +2 -0
- package/dist/cli/shared/marked-terminal.d.js.map +1 -0
- package/dist/cli/shared/theme-manager.js +99 -90
- package/dist/cli/shared/theme-manager.js.map +1 -0
- package/dist/cli/shared/theme-presets.js +256 -254
- package/dist/cli/shared/theme-presets.js.map +1 -0
- package/dist/cli/status/StatusApp.js +235 -86
- package/dist/cli/status/StatusApp.js.map +1 -0
- package/dist/cli/stores/StoreApp.js +275 -65
- package/dist/cli/stores/StoreApp.js.map +1 -0
- package/dist/index.d.ts +2 -2
- package/dist/index.js +509 -396
- package/dist/index.js.map +1 -0
- package/dist/local-agent/connection.d.ts +2 -2
- package/dist/local-agent/connection.js +352 -293
- package/dist/local-agent/connection.js.map +1 -0
- package/dist/local-agent/discovery.js +259 -122
- package/dist/local-agent/discovery.js.map +1 -0
- package/dist/local-agent/executor.js +216 -193
- package/dist/local-agent/executor.js.map +1 -0
- package/dist/local-agent/index.d.ts +2 -2
- package/dist/local-agent/index.js +156 -156
- package/dist/local-agent/index.js.map +1 -0
- package/dist/node/adapters/base.js +18 -8
- package/dist/node/adapters/base.js.map +1 -0
- package/dist/node/adapters/discord.js +286 -275
- package/dist/node/adapters/discord.js.map +1 -0
- package/dist/node/adapters/email.js +189 -202
- package/dist/node/adapters/email.js.map +1 -0
- package/dist/node/adapters/imessage.js +145 -142
- package/dist/node/adapters/imessage.js.map +1 -0
- package/dist/node/adapters/slack.js +237 -236
- package/dist/node/adapters/slack.js.map +1 -0
- package/dist/node/adapters/sms.js +149 -151
- package/dist/node/adapters/sms.js.map +1 -0
- package/dist/node/adapters/telegram.js +88 -92
- package/dist/node/adapters/telegram.js.map +1 -0
- package/dist/node/adapters/webchat.js +160 -136
- package/dist/node/adapters/webchat.js.map +1 -0
- package/dist/node/adapters/whatsapp.js +212 -215
- package/dist/node/adapters/whatsapp.js.map +1 -0
- package/dist/node/cli.js +884 -653
- package/dist/node/cli.js.map +1 -0
- package/dist/node/config.js +20 -18
- package/dist/node/config.js.map +1 -0
- package/dist/node/gateway-client.js +191 -181
- package/dist/node/gateway-client.js.map +1 -0
- package/dist/node/portal/clipboard.js +161 -130
- package/dist/node/portal/clipboard.js.map +1 -0
- package/dist/node/portal/discovery.js +51 -45
- package/dist/node/portal/discovery.js.map +1 -0
- package/dist/node/portal/forward.js +64 -58
- package/dist/node/portal/forward.js.map +1 -0
- package/dist/node/portal/index.js +246 -221
- package/dist/node/portal/index.js.map +1 -0
- package/dist/node/portal/multiplexer.js +192 -182
- package/dist/node/portal/multiplexer.js.map +1 -0
- package/dist/node/portal/permissions.js +102 -70
- package/dist/node/portal/permissions.js.map +1 -0
- package/dist/node/portal/protocol.js +153 -116
- package/dist/node/portal/protocol.js.map +1 -0
- package/dist/node/portal/screen.js +80 -69
- package/dist/node/portal/screen.js.map +1 -0
- package/dist/node/portal/session.js +124 -117
- package/dist/node/portal/session.js.map +1 -0
- package/dist/node/portal/shell.js +140 -113
- package/dist/node/portal/shell.js.map +1 -0
- package/dist/node/portal/stream.js +77 -75
- package/dist/node/portal/stream.js.map +1 -0
- package/dist/node/portal/transfer.js +190 -167
- package/dist/node/portal/transfer.js.map +1 -0
- package/dist/node/portal/ui.js +124 -99
- package/dist/node/portal/ui.js.map +1 -0
- package/dist/node/remote-desktop/compile-helper.js +50 -45
- package/dist/node/remote-desktop/compile-helper.js.map +1 -0
- package/dist/node/remote-desktop/index.js +215 -187
- package/dist/node/remote-desktop/index.js.map +1 -0
- package/dist/node/remote-desktop/protocol.js +45 -29
- package/dist/node/remote-desktop/protocol.js.map +1 -0
- package/dist/node/runtime.js +493 -410
- package/dist/node/runtime.js.map +1 -0
- package/dist/server/handlers/__test-utils__/test-db.js +39 -89
- package/dist/server/handlers/__test-utils__/test-db.js.map +1 -0
- package/dist/server/handlers/analytics.js +467 -261
- package/dist/server/handlers/analytics.js.map +1 -0
- package/dist/server/handlers/api-docs.js +1030 -895
- package/dist/server/handlers/api-docs.js.map +1 -0
- package/dist/server/handlers/api-keys.js +291 -242
- package/dist/server/handlers/api-keys.js.map +1 -0
- package/dist/server/handlers/billing.js +330 -239
- package/dist/server/handlers/billing.js.map +1 -0
- package/dist/server/handlers/browser.js +468 -395
- package/dist/server/handlers/browser.js.map +1 -0
- package/dist/server/handlers/catalog.js +1377 -978
- package/dist/server/handlers/catalog.js.map +1 -0
- package/dist/server/handlers/clickhouse.js +157 -109
- package/dist/server/handlers/clickhouse.js.map +1 -0
- package/dist/server/handlers/comms.js +1439 -984
- package/dist/server/handlers/comms.js.map +1 -0
- package/dist/server/handlers/creations.js +461 -394
- package/dist/server/handlers/creations.js.map +1 -0
- package/dist/server/handlers/crm.js +1082 -791
- package/dist/server/handlers/crm.js.map +1 -0
- package/dist/server/handlers/discovery.js +251 -232
- package/dist/server/handlers/discovery.js.map +1 -0
- package/dist/server/handlers/embeddings.js +241 -164
- package/dist/server/handlers/embeddings.js.map +1 -0
- package/dist/server/handlers/enrichment.js +887 -718
- package/dist/server/handlers/enrichment.js.map +1 -0
- package/dist/server/handlers/image-gen.js +467 -376
- package/dist/server/handlers/image-gen.js.map +1 -0
- package/dist/server/handlers/inventory.js +797 -424
- package/dist/server/handlers/inventory.js.map +1 -0
- package/dist/server/handlers/kali.js +272 -230
- package/dist/server/handlers/kali.js.map +1 -0
- package/dist/server/handlers/llm-providers.js +803 -580
- package/dist/server/handlers/llm-providers.js.map +1 -0
- package/dist/server/handlers/local-agent.js +133 -105
- package/dist/server/handlers/local-agent.js.map +1 -0
- package/dist/server/handlers/media.js +1179 -857
- package/dist/server/handlers/media.js.map +1 -0
- package/dist/server/handlers/meta-ads.js +2669 -2093
- package/dist/server/handlers/meta-ads.js.map +1 -0
- package/dist/server/handlers/nodes.js +1321 -913
- package/dist/server/handlers/nodes.js.map +1 -0
- package/dist/server/handlers/operations.js +183 -157
- package/dist/server/handlers/operations.js.map +1 -0
- package/dist/server/handlers/platform.js +346 -210
- package/dist/server/handlers/platform.js.map +1 -0
- package/dist/server/handlers/remove-bg.js +118 -86
- package/dist/server/handlers/remove-bg.js.map +1 -0
- package/dist/server/handlers/storefront.js +586 -446
- package/dist/server/handlers/storefront.js.map +1 -0
- package/dist/server/handlers/supply-chain.js +546 -326
- package/dist/server/handlers/supply-chain.js.map +1 -0
- package/dist/server/handlers/transcription.js +106 -97
- package/dist/server/handlers/transcription.js.map +1 -0
- package/dist/server/handlers/video-gen.js +593 -424
- package/dist/server/handlers/video-gen.js.map +1 -0
- package/dist/server/handlers/voice.js +1458 -1039
- package/dist/server/handlers/voice.js.map +1 -0
- package/dist/server/handlers/workflow-steps.js +2837 -2116
- package/dist/server/handlers/workflow-steps.js.map +1 -0
- package/dist/server/handlers/workflows.js +1630 -933
- package/dist/server/handlers/workflows.js.map +1 -0
- package/dist/server/index.js +3167 -2422
- package/dist/server/index.js.map +1 -0
- package/dist/server/lib/batch-client.js +471 -409
- package/dist/server/lib/batch-client.js.map +1 -0
- package/dist/server/lib/clickhouse-buffer.js +118 -104
- package/dist/server/lib/clickhouse-buffer.js.map +1 -0
- package/dist/server/lib/clickhouse-client.js +107 -107
- package/dist/server/lib/clickhouse-client.js.map +1 -0
- package/dist/server/lib/coa-renderer.js +1786 -356
- package/dist/server/lib/coa-renderer.js.map +1 -0
- package/dist/server/lib/code-worker-pool.js +227 -177
- package/dist/server/lib/code-worker-pool.js.map +1 -0
- package/dist/server/lib/code-worker.js +174 -164
- package/dist/server/lib/code-worker.js.map +1 -0
- package/dist/server/lib/compaction-service.d.ts +2 -12
- package/dist/server/lib/compaction-service.js +74 -184
- package/dist/server/lib/compaction-service.js.map +1 -0
- package/dist/server/lib/logger.js +36 -24
- package/dist/server/lib/logger.js.map +1 -0
- package/dist/server/lib/otel.js +101 -80
- package/dist/server/lib/otel.js.map +1 -0
- package/dist/server/lib/pdf-renderer.js +952 -788
- package/dist/server/lib/pdf-renderer.js.map +1 -0
- package/dist/server/lib/prompt-sanitizer.js +188 -108
- package/dist/server/lib/prompt-sanitizer.js.map +1 -0
- package/dist/server/lib/provider-capabilities.js +136 -138
- package/dist/server/lib/provider-capabilities.js.map +1 -0
- package/dist/server/lib/provider-failover.js +190 -168
- package/dist/server/lib/provider-failover.js.map +1 -0
- package/dist/server/lib/rate-limiter.js +186 -117
- package/dist/server/lib/rate-limiter.js.map +1 -0
- package/dist/server/lib/react-pdf-layout.js +551 -382
- package/dist/server/lib/react-pdf-layout.js.map +1 -0
- package/dist/server/lib/server-agent-loop.d.ts +4 -1
- package/dist/server/lib/server-agent-loop.js +906 -634
- package/dist/server/lib/server-agent-loop.js.map +1 -0
- package/dist/server/lib/server-subagent.js +260 -164
- package/dist/server/lib/server-subagent.js.map +1 -0
- package/dist/server/lib/session-checkpoint.js +105 -96
- package/dist/server/lib/session-checkpoint.js.map +1 -0
- package/dist/server/lib/ssrf-guard.js +193 -184
- package/dist/server/lib/ssrf-guard.js.map +1 -0
- package/dist/server/lib/supabase-client.js +94 -82
- package/dist/server/lib/supabase-client.js.map +1 -0
- package/dist/server/lib/template-resolver.js +154 -176
- package/dist/server/lib/template-resolver.js.map +1 -0
- package/dist/server/lib/utils.js +242 -133
- package/dist/server/lib/utils.js.map +1 -0
- package/dist/server/local-agent-gateway.d.ts +2 -2
- package/dist/server/local-agent-gateway.js +785 -627
- package/dist/server/local-agent-gateway.js.map +1 -0
- package/dist/server/providers/anthropic.js +250 -172
- package/dist/server/providers/anthropic.js.map +1 -0
- package/dist/server/providers/bedrock.js +217 -158
- package/dist/server/providers/bedrock.js.map +1 -0
- package/dist/server/providers/gemini.js +548 -418
- package/dist/server/providers/gemini.js.map +1 -0
- package/dist/server/providers/openai.js +571 -437
- package/dist/server/providers/openai.js.map +1 -0
- package/dist/server/providers/registry.js +23 -18
- package/dist/server/providers/registry.js.map +1 -0
- package/dist/server/providers/shared.js +123 -95
- package/dist/server/providers/shared.js.map +1 -0
- package/dist/server/providers/types.js +1 -11
- package/dist/server/providers/types.js.map +1 -0
- package/dist/server/proxy-handlers.js +209 -165
- package/dist/server/proxy-handlers.js.map +1 -0
- package/dist/server/tool-router.js +959 -599
- package/dist/server/tool-router.js.map +1 -0
- package/dist/server/validation.js +248 -188
- package/dist/server/validation.js.map +1 -0
- package/dist/server/worker.js +202 -133
- package/dist/server/worker.js.map +1 -0
- package/dist/setup.d.ts +2 -2
- package/dist/setup.js +151 -147
- package/dist/setup.js.map +1 -0
- package/dist/shared/agent-core.d.ts +115 -26
- package/dist/shared/agent-core.js +956 -522
- package/dist/shared/agent-core.js.map +1 -0
- package/dist/shared/anthropic-types.js +1 -6
- package/dist/shared/anthropic-types.js.map +1 -0
- package/dist/shared/api-client.d.ts +16 -9
- package/dist/shared/api-client.js +419 -327
- package/dist/shared/api-client.js.map +1 -0
- package/dist/shared/compaction.d.ts +36 -0
- package/dist/shared/compaction.js +138 -0
- package/dist/shared/compaction.js.map +1 -0
- package/dist/shared/constants.js +67 -64
- package/dist/shared/constants.js.map +1 -0
- package/dist/shared/sse-parser.js +221 -219
- package/dist/shared/sse-parser.js.map +1 -0
- package/dist/shared/tool-dispatch.d.ts +4 -0
- package/dist/shared/tool-dispatch.js +226 -165
- package/dist/shared/tool-dispatch.js.map +1 -0
- package/dist/shared/types.js +1 -6
- package/dist/shared/types.js.map +1 -0
- package/dist/types/cli-highlight.d.js +2 -0
- package/dist/types/cli-highlight.d.js.map +1 -0
- package/dist/types/diff.d.js +2 -0
- package/dist/types/diff.d.js.map +1 -0
- package/dist/types/pdf-parse.d.js +2 -0
- package/dist/types/pdf-parse.d.js.map +1 -0
- package/dist/updater.d.ts +1 -1
- package/dist/updater.js +118 -92
- package/dist/updater.js.map +1 -0
- package/dist/webchat/widget.js +227 -380
- package/dist/webchat/widget.js.map +1 -0
- package/package.json +22 -10
- package/vendor/ink/build/ansi-tokenizer.d.ts +38 -0
- package/vendor/ink/build/ansi-tokenizer.js +316 -0
- package/vendor/ink/build/ansi-tokenizer.js.map +1 -0
- package/vendor/ink/build/apply-styles.js +175 -0
- package/vendor/ink/build/build-layout.js +77 -0
- package/vendor/ink/build/calculate-wrapped-text.js +53 -0
- package/vendor/ink/build/colorize.d.ts +3 -0
- package/vendor/ink/build/colorize.js +48 -0
- package/vendor/ink/build/colorize.js.map +1 -0
- package/vendor/ink/build/components/AccessibilityContext.d.ts +3 -0
- package/vendor/ink/build/components/AccessibilityContext.js +5 -0
- package/vendor/ink/build/components/AccessibilityContext.js.map +1 -0
- package/vendor/ink/build/components/App.d.ts +18 -0
- package/vendor/ink/build/components/App.js +351 -0
- package/vendor/ink/build/components/App.js.map +1 -0
- package/vendor/ink/build/components/AppContext.d.ts +15 -0
- package/vendor/ink/build/components/AppContext.js +11 -0
- package/vendor/ink/build/components/AppContext.js.map +1 -0
- package/vendor/ink/build/components/BackgroundContext.d.ts +4 -0
- package/vendor/ink/build/components/BackgroundContext.js +3 -0
- package/vendor/ink/build/components/BackgroundContext.js.map +1 -0
- package/vendor/ink/build/components/Box.d.ts +117 -0
- package/vendor/ink/build/components/Box.js +34 -0
- package/vendor/ink/build/components/Box.js.map +1 -0
- package/vendor/ink/build/components/Color.js +62 -0
- package/vendor/ink/build/components/Cursor.d.ts +83 -0
- package/vendor/ink/build/components/Cursor.js +53 -0
- package/vendor/ink/build/components/Cursor.js.map +1 -0
- package/vendor/ink/build/components/CursorContext.d.ts +11 -0
- package/vendor/ink/build/components/CursorContext.js +8 -0
- package/vendor/ink/build/components/CursorContext.js.map +1 -0
- package/vendor/ink/build/components/ErrorBoundary.d.ts +18 -0
- package/vendor/ink/build/components/ErrorBoundary.js +23 -0
- package/vendor/ink/build/components/ErrorBoundary.js.map +1 -0
- package/vendor/ink/build/components/ErrorOverview.d.ts +6 -0
- package/vendor/ink/build/components/ErrorOverview.js +84 -0
- package/vendor/ink/build/components/ErrorOverview.js.map +1 -0
- package/vendor/ink/build/components/FocusContext.d.ts +16 -0
- package/vendor/ink/build/components/FocusContext.js +17 -0
- package/vendor/ink/build/components/FocusContext.js.map +1 -0
- package/vendor/ink/build/components/Newline.d.ts +13 -0
- package/vendor/ink/build/components/Newline.js +8 -0
- package/vendor/ink/build/components/Newline.js.map +1 -0
- package/vendor/ink/build/components/Spacer.d.ts +7 -0
- package/vendor/ink/build/components/Spacer.js +11 -0
- package/vendor/ink/build/components/Spacer.js.map +1 -0
- package/vendor/ink/build/components/Static.d.ts +24 -0
- package/vendor/ink/build/components/Static.js +28 -0
- package/vendor/ink/build/components/Static.js.map +1 -0
- package/vendor/ink/build/components/StderrContext.d.ts +15 -0
- package/vendor/ink/build/components/StderrContext.js +13 -0
- package/vendor/ink/build/components/StderrContext.js.map +1 -0
- package/vendor/ink/build/components/StdinContext.d.ts +22 -0
- package/vendor/ink/build/components/StdinContext.js +19 -0
- package/vendor/ink/build/components/StdinContext.js.map +1 -0
- package/vendor/ink/build/components/StdoutContext.d.ts +15 -0
- package/vendor/ink/build/components/StdoutContext.js +13 -0
- package/vendor/ink/build/components/StdoutContext.js.map +1 -0
- package/vendor/ink/build/components/Text.d.ts +55 -0
- package/vendor/ink/build/components/Text.js +50 -0
- package/vendor/ink/build/components/Text.js.map +1 -0
- package/vendor/ink/build/components/Transform.d.ts +16 -0
- package/vendor/ink/build/components/Transform.js +15 -0
- package/vendor/ink/build/components/Transform.js.map +1 -0
- package/vendor/ink/build/cursor-helpers.d.ts +38 -0
- package/vendor/ink/build/cursor-helpers.js +56 -0
- package/vendor/ink/build/cursor-helpers.js.map +1 -0
- package/vendor/ink/build/devtools-window-polyfill.d.ts +1 -0
- package/vendor/ink/build/devtools-window-polyfill.js +65 -0
- package/vendor/ink/build/devtools-window-polyfill.js.map +1 -0
- package/vendor/ink/build/devtools.d.ts +1 -0
- package/vendor/ink/build/devtools.js +11 -0
- package/vendor/ink/build/devtools.js.map +1 -0
- package/vendor/ink/build/dom.d.ts +56 -0
- package/vendor/ink/build/dom.js +124 -0
- package/vendor/ink/build/dom.js.map +1 -0
- package/vendor/ink/build/experimental/apply-style.js +140 -0
- package/vendor/ink/build/experimental/dom.js +123 -0
- package/vendor/ink/build/experimental/output.js +91 -0
- package/vendor/ink/build/experimental/reconciler.js +141 -0
- package/vendor/ink/build/experimental/renderer.js +81 -0
- package/vendor/ink/build/get-max-width.d.ts +3 -0
- package/vendor/ink/build/get-max-width.js +10 -0
- package/vendor/ink/build/get-max-width.js.map +1 -0
- package/vendor/ink/build/hooks/use-app.d.ts +5 -0
- package/vendor/ink/build/hooks/use-app.js +8 -0
- package/vendor/ink/build/hooks/use-app.js.map +1 -0
- package/vendor/ink/build/hooks/use-cursor.d.ts +12 -0
- package/vendor/ink/build/hooks/use-cursor.js +29 -0
- package/vendor/ink/build/hooks/use-cursor.js.map +1 -0
- package/vendor/ink/build/hooks/use-focus-manager.d.ts +28 -0
- package/vendor/ink/build/hooks/use-focus-manager.js +17 -0
- package/vendor/ink/build/hooks/use-focus-manager.js.map +1 -0
- package/vendor/ink/build/hooks/use-focus.d.ts +29 -0
- package/vendor/ink/build/hooks/use-focus.js +42 -0
- package/vendor/ink/build/hooks/use-focus.js.map +1 -0
- package/vendor/ink/build/hooks/use-input.d.ts +131 -0
- package/vendor/ink/build/hooks/use-input.js +124 -0
- package/vendor/ink/build/hooks/use-input.js.map +1 -0
- package/vendor/ink/build/hooks/use-is-screen-reader-enabled.d.ts +5 -0
- package/vendor/ink/build/hooks/use-is-screen-reader-enabled.js +11 -0
- package/vendor/ink/build/hooks/use-is-screen-reader-enabled.js.map +1 -0
- package/vendor/ink/build/hooks/use-stderr.d.ts +5 -0
- package/vendor/ink/build/hooks/use-stderr.js +8 -0
- package/vendor/ink/build/hooks/use-stderr.js.map +1 -0
- package/vendor/ink/build/hooks/use-stdin.d.ts +5 -0
- package/vendor/ink/build/hooks/use-stdin.js +8 -0
- package/vendor/ink/build/hooks/use-stdin.js.map +1 -0
- package/vendor/ink/build/hooks/use-stdout.d.ts +5 -0
- package/vendor/ink/build/hooks/use-stdout.js +8 -0
- package/vendor/ink/build/hooks/use-stdout.js.map +1 -0
- package/vendor/ink/build/hooks/useInput.js +38 -0
- package/vendor/ink/build/index.d.ts +34 -0
- package/vendor/ink/build/index.js +20 -0
- package/vendor/ink/build/index.js.map +1 -0
- package/vendor/ink/build/ink.d.ts +90 -0
- package/vendor/ink/build/ink.js +654 -0
- package/vendor/ink/build/ink.js.map +1 -0
- package/vendor/ink/build/input-parser.d.ts +7 -0
- package/vendor/ink/build/input-parser.js +154 -0
- package/vendor/ink/build/input-parser.js.map +1 -0
- package/vendor/ink/build/instance.js +205 -0
- package/vendor/ink/build/instances.d.ts +3 -0
- package/vendor/ink/build/instances.js +8 -0
- package/vendor/ink/build/instances.js.map +1 -0
- package/vendor/ink/build/kitty-keyboard.d.ts +23 -0
- package/vendor/ink/build/kitty-keyboard.js +32 -0
- package/vendor/ink/build/kitty-keyboard.js.map +1 -0
- package/vendor/ink/build/layout.d.ts +7 -0
- package/vendor/ink/build/layout.js +33 -0
- package/vendor/ink/build/layout.js.map +1 -0
- package/vendor/ink/build/log-update.d.ts +19 -0
- package/vendor/ink/build/log-update.js +243 -0
- package/vendor/ink/build/log-update.js.map +1 -0
- package/vendor/ink/build/measure-element.d.ts +16 -0
- package/vendor/ink/build/measure-element.js +9 -0
- package/vendor/ink/build/measure-element.js.map +1 -0
- package/vendor/ink/build/measure-text.d.ts +6 -0
- package/vendor/ink/build/measure-text.js +21 -0
- package/vendor/ink/build/measure-text.js.map +1 -0
- package/vendor/ink/build/options.d.ts +52 -0
- package/vendor/ink/build/options.js +2 -0
- package/vendor/ink/build/options.js.map +1 -0
- package/vendor/ink/build/output.d.ts +35 -0
- package/vendor/ink/build/output.js +183 -0
- package/vendor/ink/build/output.js.map +1 -0
- package/vendor/ink/build/parse-keypress.d.ts +22 -0
- package/vendor/ink/build/parse-keypress.js +493 -0
- package/vendor/ink/build/parse-keypress.js.map +1 -0
- package/vendor/ink/build/reconciler.d.ts +4 -0
- package/vendor/ink/build/reconciler.js +274 -0
- package/vendor/ink/build/reconciler.js.map +1 -0
- package/vendor/ink/build/render-background.d.ts +4 -0
- package/vendor/ink/build/render-background.js +25 -0
- package/vendor/ink/build/render-background.js.map +1 -0
- package/vendor/ink/build/render-border.d.ts +4 -0
- package/vendor/ink/build/render-border.js +73 -0
- package/vendor/ink/build/render-border.js.map +1 -0
- package/vendor/ink/build/render-node-to-output.d.ts +14 -0
- package/vendor/ink/build/render-node-to-output.js +147 -0
- package/vendor/ink/build/render-node-to-output.js.map +1 -0
- package/vendor/ink/build/render-to-string.d.ts +38 -0
- package/vendor/ink/build/render-to-string.js +115 -0
- package/vendor/ink/build/render-to-string.js.map +1 -0
- package/vendor/ink/build/render.d.ts +121 -0
- package/vendor/ink/build/render.js +55 -0
- package/vendor/ink/build/render.js.map +1 -0
- package/vendor/ink/build/renderer.d.ts +8 -0
- package/vendor/ink/build/renderer.js +55 -0
- package/vendor/ink/build/renderer.js.map +1 -0
- package/vendor/ink/build/sanitize-ansi.d.ts +2 -0
- package/vendor/ink/build/sanitize-ansi.js +27 -0
- package/vendor/ink/build/sanitize-ansi.js.map +1 -0
- package/vendor/ink/build/screen-reader-update.d.ts +13 -0
- package/vendor/ink/build/screen-reader-update.js +38 -0
- package/vendor/ink/build/screen-reader-update.js.map +1 -0
- package/vendor/ink/build/squash-text-nodes.d.ts +3 -0
- package/vendor/ink/build/squash-text-nodes.js +36 -0
- package/vendor/ink/build/squash-text-nodes.js.map +1 -0
- package/vendor/ink/build/styles.d.ts +240 -0
- package/vendor/ink/build/styles.js +232 -0
- package/vendor/ink/build/styles.js.map +1 -0
- package/vendor/ink/build/utils.d.ts +2 -0
- package/vendor/ink/build/utils.js +4 -0
- package/vendor/ink/build/utils.js.map +1 -0
- package/vendor/ink/build/wrap-text.d.ts +3 -0
- package/vendor/ink/build/wrap-text.js +31 -0
- package/vendor/ink/build/wrap-text.js.map +1 -0
- package/vendor/ink/build/write-synchronized.d.ts +4 -0
- package/vendor/ink/build/write-synchronized.js +7 -0
- package/vendor/ink/build/write-synchronized.js.map +1 -0
- package/vendor/ink/license +10 -0
- package/vendor/ink/node_modules/@types/node/LICENSE +21 -0
- package/vendor/ink/node_modules/@types/node/README.md +15 -0
- package/vendor/ink/node_modules/@types/node/assert/strict.d.ts +105 -0
- package/vendor/ink/node_modules/@types/node/assert.d.ts +955 -0
- package/vendor/ink/node_modules/@types/node/async_hooks.d.ts +623 -0
- package/vendor/ink/node_modules/@types/node/buffer.buffer.d.ts +466 -0
- package/vendor/ink/node_modules/@types/node/buffer.d.ts +1810 -0
- package/vendor/ink/node_modules/@types/node/child_process.d.ts +1428 -0
- package/vendor/ink/node_modules/@types/node/cluster.d.ts +486 -0
- package/vendor/ink/node_modules/@types/node/compatibility/iterators.d.ts +21 -0
- package/vendor/ink/node_modules/@types/node/console.d.ts +151 -0
- package/vendor/ink/node_modules/@types/node/constants.d.ts +20 -0
- package/vendor/ink/node_modules/@types/node/crypto.d.ts +4065 -0
- package/vendor/ink/node_modules/@types/node/dgram.d.ts +564 -0
- package/vendor/ink/node_modules/@types/node/diagnostics_channel.d.ts +576 -0
- package/vendor/ink/node_modules/@types/node/dns/promises.d.ts +503 -0
- package/vendor/ink/node_modules/@types/node/dns.d.ts +922 -0
- package/vendor/ink/node_modules/@types/node/domain.d.ts +166 -0
- package/vendor/ink/node_modules/@types/node/events.d.ts +1054 -0
- package/vendor/ink/node_modules/@types/node/fs/promises.d.ts +1329 -0
- package/vendor/ink/node_modules/@types/node/fs.d.ts +4676 -0
- package/vendor/ink/node_modules/@types/node/globals.d.ts +150 -0
- package/vendor/ink/node_modules/@types/node/globals.typedarray.d.ts +101 -0
- package/vendor/ink/node_modules/@types/node/http.d.ts +2167 -0
- package/vendor/ink/node_modules/@types/node/http2.d.ts +2480 -0
- package/vendor/ink/node_modules/@types/node/https.d.ts +405 -0
- package/vendor/ink/node_modules/@types/node/index.d.ts +115 -0
- package/vendor/ink/node_modules/@types/node/inspector/promises.d.ts +41 -0
- package/vendor/ink/node_modules/@types/node/inspector.d.ts +224 -0
- package/vendor/ink/node_modules/@types/node/inspector.generated.d.ts +4226 -0
- package/vendor/ink/node_modules/@types/node/module.d.ts +819 -0
- package/vendor/ink/node_modules/@types/node/net.d.ts +933 -0
- package/vendor/ink/node_modules/@types/node/os.d.ts +507 -0
- package/vendor/ink/node_modules/@types/node/package.json +155 -0
- package/vendor/ink/node_modules/@types/node/path/posix.d.ts +8 -0
- package/vendor/ink/node_modules/@types/node/path/win32.d.ts +8 -0
- package/vendor/ink/node_modules/@types/node/path.d.ts +187 -0
- package/vendor/ink/node_modules/@types/node/perf_hooks.d.ts +643 -0
- package/vendor/ink/node_modules/@types/node/process.d.ts +2156 -0
- package/vendor/ink/node_modules/@types/node/punycode.d.ts +117 -0
- package/vendor/ink/node_modules/@types/node/querystring.d.ts +152 -0
- package/vendor/ink/node_modules/@types/node/quic.d.ts +910 -0
- package/vendor/ink/node_modules/@types/node/readline/promises.d.ts +161 -0
- package/vendor/ink/node_modules/@types/node/readline.d.ts +541 -0
- package/vendor/ink/node_modules/@types/node/repl.d.ts +415 -0
- package/vendor/ink/node_modules/@types/node/sea.d.ts +162 -0
- package/vendor/ink/node_modules/@types/node/sqlite.d.ts +955 -0
- package/vendor/ink/node_modules/@types/node/stream/consumers.d.ts +38 -0
- package/vendor/ink/node_modules/@types/node/stream/promises.d.ts +211 -0
- package/vendor/ink/node_modules/@types/node/stream/web.d.ts +296 -0
- package/vendor/ink/node_modules/@types/node/stream.d.ts +1760 -0
- package/vendor/ink/node_modules/@types/node/string_decoder.d.ts +67 -0
- package/vendor/ink/node_modules/@types/node/test/reporters.d.ts +96 -0
- package/vendor/ink/node_modules/@types/node/test.d.ts +2240 -0
- package/vendor/ink/node_modules/@types/node/timers/promises.d.ts +108 -0
- package/vendor/ink/node_modules/@types/node/timers.d.ts +159 -0
- package/vendor/ink/node_modules/@types/node/tls.d.ts +1198 -0
- package/vendor/ink/node_modules/@types/node/trace_events.d.ts +197 -0
- package/vendor/ink/node_modules/@types/node/ts5.6/buffer.buffer.d.ts +462 -0
- package/vendor/ink/node_modules/@types/node/ts5.6/compatibility/float16array.d.ts +71 -0
- package/vendor/ink/node_modules/@types/node/ts5.6/globals.typedarray.d.ts +36 -0
- package/vendor/ink/node_modules/@types/node/ts5.6/index.d.ts +117 -0
- package/vendor/ink/node_modules/@types/node/ts5.7/compatibility/float16array.d.ts +72 -0
- package/vendor/ink/node_modules/@types/node/ts5.7/index.d.ts +117 -0
- package/vendor/ink/node_modules/@types/node/tty.d.ts +250 -0
- package/vendor/ink/node_modules/@types/node/url.d.ts +519 -0
- package/vendor/ink/node_modules/@types/node/util/types.d.ts +558 -0
- package/vendor/ink/node_modules/@types/node/util.d.ts +1662 -0
- package/vendor/ink/node_modules/@types/node/v8.d.ts +983 -0
- package/vendor/ink/node_modules/@types/node/vm.d.ts +1208 -0
- package/vendor/ink/node_modules/@types/node/wasi.d.ts +202 -0
- package/vendor/ink/node_modules/@types/node/web-globals/abortcontroller.d.ts +59 -0
- package/vendor/ink/node_modules/@types/node/web-globals/blob.d.ts +23 -0
- package/vendor/ink/node_modules/@types/node/web-globals/console.d.ts +9 -0
- package/vendor/ink/node_modules/@types/node/web-globals/crypto.d.ts +39 -0
- package/vendor/ink/node_modules/@types/node/web-globals/domexception.d.ts +68 -0
- package/vendor/ink/node_modules/@types/node/web-globals/encoding.d.ts +11 -0
- package/vendor/ink/node_modules/@types/node/web-globals/events.d.ts +106 -0
- package/vendor/ink/node_modules/@types/node/web-globals/fetch.d.ts +69 -0
- package/vendor/ink/node_modules/@types/node/web-globals/importmeta.d.ts +13 -0
- package/vendor/ink/node_modules/@types/node/web-globals/messaging.d.ts +23 -0
- package/vendor/ink/node_modules/@types/node/web-globals/navigator.d.ts +25 -0
- package/vendor/ink/node_modules/@types/node/web-globals/performance.d.ts +45 -0
- package/vendor/ink/node_modules/@types/node/web-globals/storage.d.ts +24 -0
- package/vendor/ink/node_modules/@types/node/web-globals/streams.d.ts +115 -0
- package/vendor/ink/node_modules/@types/node/web-globals/timers.d.ts +44 -0
- package/vendor/ink/node_modules/@types/node/web-globals/url.d.ts +24 -0
- package/vendor/ink/node_modules/@types/node/worker_threads.d.ts +717 -0
- package/vendor/ink/node_modules/@types/node/zlib.d.ts +618 -0
- package/vendor/ink/node_modules/node-pty/LICENSE +69 -0
- package/vendor/ink/node_modules/node-pty/README.md +164 -0
- package/vendor/ink/node_modules/node-pty/binding.gyp +150 -0
- package/vendor/ink/node_modules/node-pty/lib/conpty_console_list_agent.js +25 -0
- package/vendor/ink/node_modules/node-pty/lib/eventEmitter2.js +47 -0
- package/vendor/ink/node_modules/node-pty/lib/index.js +52 -0
- package/vendor/ink/node_modules/node-pty/lib/interfaces.js +7 -0
- package/vendor/ink/node_modules/node-pty/lib/shared/conout.js +11 -0
- package/vendor/ink/node_modules/node-pty/lib/terminal.js +190 -0
- package/vendor/ink/node_modules/node-pty/lib/types.js +7 -0
- package/vendor/ink/node_modules/node-pty/lib/unixTerminal.js +349 -0
- package/vendor/ink/node_modules/node-pty/lib/utils.js +39 -0
- package/vendor/ink/node_modules/node-pty/lib/windowsConoutConnection.js +125 -0
- package/vendor/ink/node_modules/node-pty/lib/windowsPtyAgent.js +287 -0
- package/vendor/ink/node_modules/node-pty/lib/windowsTerminal.js +201 -0
- package/vendor/ink/node_modules/node-pty/lib/worker/conoutSocketWorker.js +22 -0
- package/vendor/ink/node_modules/node-pty/package.json +65 -0
- package/vendor/ink/node_modules/node-pty/prebuilds/darwin-arm64/pty.node +0 -0
- package/vendor/ink/node_modules/node-pty/prebuilds/darwin-arm64/spawn-helper +0 -0
- package/vendor/ink/node_modules/node-pty/prebuilds/darwin-x64/pty.node +0 -0
- package/vendor/ink/node_modules/node-pty/prebuilds/darwin-x64/spawn-helper +0 -0
- package/vendor/ink/node_modules/node-pty/prebuilds/linux-arm64/pty.node +0 -0
- package/vendor/ink/node_modules/node-pty/prebuilds/linux-x64/pty.node +0 -0
- package/vendor/ink/node_modules/node-pty/prebuilds/win32-arm64/conpty/OpenConsole.exe +0 -0
- package/vendor/ink/node_modules/node-pty/prebuilds/win32-arm64/conpty/conpty.dll +0 -0
- package/vendor/ink/node_modules/node-pty/prebuilds/win32-arm64/conpty.node +0 -0
- package/vendor/ink/node_modules/node-pty/prebuilds/win32-arm64/conpty.pdb +0 -0
- package/vendor/ink/node_modules/node-pty/prebuilds/win32-arm64/conpty_console_list.node +0 -0
- package/vendor/ink/node_modules/node-pty/prebuilds/win32-arm64/conpty_console_list.pdb +0 -0
- package/vendor/ink/node_modules/node-pty/prebuilds/win32-x64/conpty/OpenConsole.exe +0 -0
- package/vendor/ink/node_modules/node-pty/prebuilds/win32-x64/conpty/conpty.dll +0 -0
- package/vendor/ink/node_modules/node-pty/prebuilds/win32-x64/conpty.node +0 -0
- package/vendor/ink/node_modules/node-pty/prebuilds/win32-x64/conpty.pdb +0 -0
- package/vendor/ink/node_modules/node-pty/prebuilds/win32-x64/conpty_console_list.node +0 -0
- package/vendor/ink/node_modules/node-pty/prebuilds/win32-x64/conpty_console_list.pdb +0 -0
- package/vendor/ink/node_modules/node-pty/scripts/post-install.js +76 -0
- package/vendor/ink/node_modules/node-pty/scripts/prebuild.js +34 -0
- package/vendor/ink/node_modules/node-pty/src/unix/pty.cc +875 -0
- package/vendor/ink/node_modules/node-pty/src/unix/spawn-helper.cc +23 -0
- package/vendor/ink/node_modules/node-pty/src/win/conpty.cc +582 -0
- package/vendor/ink/node_modules/node-pty/src/win/conpty.h +41 -0
- package/vendor/ink/node_modules/node-pty/src/win/conpty_console_list.cc +44 -0
- package/vendor/ink/node_modules/node-pty/src/win/path_util.cc +95 -0
- package/vendor/ink/node_modules/node-pty/src/win/path_util.h +26 -0
- package/vendor/ink/node_modules/node-pty/third_party/conpty/1.23.251008001/win10-arm64/OpenConsole.exe +0 -0
- package/vendor/ink/node_modules/node-pty/third_party/conpty/1.23.251008001/win10-arm64/conpty.dll +0 -0
- package/vendor/ink/node_modules/node-pty/third_party/conpty/1.23.251008001/win10-x64/OpenConsole.exe +0 -0
- package/vendor/ink/node_modules/node-pty/third_party/conpty/1.23.251008001/win10-x64/conpty.dll +0 -0
- package/vendor/ink/node_modules/node-pty/typings/node-pty.d.ts +215 -0
- package/vendor/ink/node_modules/undici-types/LICENSE +21 -0
- package/vendor/ink/node_modules/undici-types/README.md +6 -0
- package/vendor/ink/node_modules/undici-types/agent.d.ts +32 -0
- package/vendor/ink/node_modules/undici-types/api.d.ts +43 -0
- package/vendor/ink/node_modules/undici-types/balanced-pool.d.ts +30 -0
- package/vendor/ink/node_modules/undici-types/cache-interceptor.d.ts +173 -0
- package/vendor/ink/node_modules/undici-types/cache.d.ts +36 -0
- package/vendor/ink/node_modules/undici-types/client-stats.d.ts +15 -0
- package/vendor/ink/node_modules/undici-types/client.d.ts +108 -0
- package/vendor/ink/node_modules/undici-types/connector.d.ts +34 -0
- package/vendor/ink/node_modules/undici-types/content-type.d.ts +21 -0
- package/vendor/ink/node_modules/undici-types/cookies.d.ts +30 -0
- package/vendor/ink/node_modules/undici-types/diagnostics-channel.d.ts +74 -0
- package/vendor/ink/node_modules/undici-types/dispatcher.d.ts +276 -0
- package/vendor/ink/node_modules/undici-types/env-http-proxy-agent.d.ts +22 -0
- package/vendor/ink/node_modules/undici-types/errors.d.ts +161 -0
- package/vendor/ink/node_modules/undici-types/eventsource.d.ts +66 -0
- package/vendor/ink/node_modules/undici-types/fetch.d.ts +211 -0
- package/vendor/ink/node_modules/undici-types/formdata.d.ts +108 -0
- package/vendor/ink/node_modules/undici-types/global-dispatcher.d.ts +9 -0
- package/vendor/ink/node_modules/undici-types/global-origin.d.ts +7 -0
- package/vendor/ink/node_modules/undici-types/h2c-client.d.ts +73 -0
- package/vendor/ink/node_modules/undici-types/handlers.d.ts +15 -0
- package/vendor/ink/node_modules/undici-types/header.d.ts +160 -0
- package/vendor/ink/node_modules/undici-types/index.d.ts +88 -0
- package/vendor/ink/node_modules/undici-types/interceptors.d.ts +73 -0
- package/vendor/ink/node_modules/undici-types/mock-agent.d.ts +68 -0
- package/vendor/ink/node_modules/undici-types/mock-call-history.d.ts +111 -0
- package/vendor/ink/node_modules/undici-types/mock-client.d.ts +27 -0
- package/vendor/ink/node_modules/undici-types/mock-errors.d.ts +12 -0
- package/vendor/ink/node_modules/undici-types/mock-interceptor.d.ts +94 -0
- package/vendor/ink/node_modules/undici-types/mock-pool.d.ts +27 -0
- package/vendor/ink/node_modules/undici-types/package.json +55 -0
- package/vendor/ink/node_modules/undici-types/patch.d.ts +29 -0
- package/vendor/ink/node_modules/undici-types/pool-stats.d.ts +19 -0
- package/vendor/ink/node_modules/undici-types/pool.d.ts +41 -0
- package/vendor/ink/node_modules/undici-types/proxy-agent.d.ts +29 -0
- package/vendor/ink/node_modules/undici-types/readable.d.ts +68 -0
- package/vendor/ink/node_modules/undici-types/retry-agent.d.ts +8 -0
- package/vendor/ink/node_modules/undici-types/retry-handler.d.ts +125 -0
- package/vendor/ink/node_modules/undici-types/round-robin-pool.d.ts +41 -0
- package/vendor/ink/node_modules/undici-types/snapshot-agent.d.ts +109 -0
- package/vendor/ink/node_modules/undici-types/util.d.ts +18 -0
- package/vendor/ink/node_modules/undici-types/utility.d.ts +7 -0
- package/vendor/ink/node_modules/undici-types/webidl.d.ts +341 -0
- package/vendor/ink/node_modules/undici-types/websocket.d.ts +186 -0
- package/vendor/ink/package.json +201 -0
- package/vendor/ink/readme.md +2636 -0
- package/bin/swag-agent.js +0 -9
- package/dist/server/lib/pg-rate-limiter.d.ts +0 -21
- package/dist/server/lib/pg-rate-limiter.js +0 -86
|
@@ -9,22 +9,47 @@
|
|
|
9
9
|
* Both subagent and teammate keep their own types, system prompts, and lifecycle logic.
|
|
10
10
|
* This module provides composable functions, NOT a class hierarchy.
|
|
11
11
|
*/
|
|
12
|
+
|
|
13
|
+
import { AGENT_DEFAULTS } from "../../shared/agent-core.js";
|
|
12
14
|
import { getProxyUrl, resolveConfig } from "./config-store.js";
|
|
13
15
|
import { getValidToken, refreshSession } from "./auth-service.js";
|
|
14
16
|
import { parseSSEStream, collectStreamResult } from "../../shared/sse-parser.js";
|
|
15
|
-
import { callServerProxy, buildAPIRequest, buildSystemBlocks
|
|
17
|
+
import { callServerProxy, buildAPIRequest, buildSystemBlocks } from "../../shared/api-client.js";
|
|
16
18
|
import { addPromptCaching } from "../../shared/agent-core.js";
|
|
17
|
-
import { isLocalTool, executeLocalTool
|
|
18
|
-
import { isServerTool, executeServerTool
|
|
19
|
+
import { isLocalTool, executeLocalTool } from "./local-tools.js";
|
|
20
|
+
import { isServerTool, executeServerTool } from "./server-tools.js";
|
|
19
21
|
// ============================================================================
|
|
20
22
|
// LONG-RUNNING TOOL TIMEOUT (mirrors tool-dispatch.ts)
|
|
21
23
|
// ============================================================================
|
|
24
|
+
|
|
22
25
|
/** Tools that spawn workers/subprocesses and need much longer than 2 min */
|
|
23
26
|
const LONG_RUNNING_TOOL_TIMEOUT_MS = 10 * 60 * 1000; // 10 minutes
|
|
24
|
-
const LONG_RUNNING_TOOLS = new Set(["team_create", "task", "delegate_task", "exit_plan_mode", "ask_user_question"]);
|
|
27
|
+
const LONG_RUNNING_TOOLS = new Set(["team_create", "task", "task_output", "kali", "delegate_task", "exit_plan_mode", "ask_user_question"]);
|
|
28
|
+
|
|
29
|
+
// ============================================================================
|
|
30
|
+
// TYPES
|
|
31
|
+
// ============================================================================
|
|
32
|
+
|
|
33
|
+
/** Thinking blocks aren't part of Anthropic.ContentBlock but are returned by the API */
|
|
34
|
+
|
|
35
|
+
/** Content block including thinking (extends SDK's ContentBlock union) */
|
|
36
|
+
|
|
37
|
+
/** Unified response from an API call — used by both subagent and teammate */
|
|
38
|
+
|
|
39
|
+
/** Options for callAgentAPI */
|
|
40
|
+
|
|
41
|
+
/** Result of executing a single tool */
|
|
42
|
+
|
|
43
|
+
/** Callbacks for tool execution progress */
|
|
44
|
+
|
|
45
|
+
/** Options for executeToolBlocks */
|
|
46
|
+
|
|
47
|
+
/** Result of executing all tool blocks in a turn */
|
|
48
|
+
|
|
25
49
|
// ============================================================================
|
|
26
50
|
// API CLIENT — unified proxy caller
|
|
27
51
|
// ============================================================================
|
|
52
|
+
|
|
28
53
|
/**
|
|
29
54
|
* Convert a StreamResult (from SSE collector) to the AgentAPIResponse format
|
|
30
55
|
* that both subagent and teammate expect.
|
|
@@ -32,86 +57,116 @@ const LONG_RUNNING_TOOLS = new Set(["team_create", "task", "delegate_task", "exi
|
|
|
32
57
|
* Subagent includes thinking blocks; teammate does not (thinkingEnabled=false).
|
|
33
58
|
*/
|
|
34
59
|
export function streamResultToResponse(result, includeThinking) {
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
if (result.text) {
|
|
46
|
-
content.push({ type: "text", text: result.text });
|
|
47
|
-
}
|
|
48
|
-
for (const tu of result.toolUseBlocks) {
|
|
49
|
-
content.push({
|
|
50
|
-
type: "tool_use",
|
|
51
|
-
id: tu.id,
|
|
52
|
-
name: tu.name,
|
|
53
|
-
input: tu.input,
|
|
54
|
-
});
|
|
60
|
+
const content = [];
|
|
61
|
+
if (includeThinking) {
|
|
62
|
+
for (const tb of result.thinkingBlocks) {
|
|
63
|
+
content.push({
|
|
64
|
+
type: "thinking",
|
|
65
|
+
thinking: tb.thinking,
|
|
66
|
+
signature: tb.signature
|
|
67
|
+
});
|
|
55
68
|
}
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
69
|
+
}
|
|
70
|
+
if (result.text) {
|
|
71
|
+
content.push({
|
|
72
|
+
type: "text",
|
|
73
|
+
text: result.text
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
for (const tu of result.toolUseBlocks) {
|
|
77
|
+
content.push({
|
|
78
|
+
type: "tool_use",
|
|
79
|
+
id: tu.id,
|
|
80
|
+
name: tu.name,
|
|
81
|
+
input: tu.input
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
return {
|
|
85
|
+
content,
|
|
86
|
+
usage: {
|
|
87
|
+
input_tokens: result.usage.inputTokens,
|
|
88
|
+
output_tokens: result.usage.outputTokens,
|
|
89
|
+
cache_read_tokens: result.usage.cacheReadTokens ?? 0,
|
|
90
|
+
cache_creation_tokens: result.usage.cacheCreationTokens ?? 0
|
|
91
|
+
},
|
|
92
|
+
stop_reason: result.stopReason
|
|
93
|
+
};
|
|
64
94
|
}
|
|
95
|
+
|
|
65
96
|
/**
|
|
66
97
|
* Call the server proxy API, collect the SSE stream, and return a typed response.
|
|
67
98
|
* Handles auth, request building, caching setup, and stream collection.
|
|
68
99
|
*/
|
|
69
100
|
export async function callAgentAPI(opts) {
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
101
|
+
const token = await getValidToken();
|
|
102
|
+
if (!token) throw new Error("No API key available. Run `whale login`.");
|
|
103
|
+
const apiConfig = buildAPIRequest({
|
|
104
|
+
model: opts.modelId,
|
|
105
|
+
contextProfile: opts.contextProfile,
|
|
106
|
+
thinkingEnabled: opts.thinkingEnabled ?? false,
|
|
107
|
+
maxOutputTokens: opts.maxOutputTokens
|
|
108
|
+
});
|
|
109
|
+
|
|
110
|
+
// Optionally add cache_control to last tool
|
|
111
|
+
let tools;
|
|
112
|
+
if (opts.cacheLastTool && opts.tools.length > 0) {
|
|
113
|
+
tools = [...opts.tools.slice(0, -1), {
|
|
114
|
+
...opts.tools[opts.tools.length - 1],
|
|
115
|
+
cache_control: {
|
|
116
|
+
type: "ephemeral"
|
|
117
|
+
}
|
|
118
|
+
}];
|
|
119
|
+
} else {
|
|
120
|
+
tools = opts.tools;
|
|
121
|
+
}
|
|
122
|
+
const system = buildSystemBlocks(opts.systemPrompt);
|
|
123
|
+
|
|
124
|
+
// Apply prompt caching to messages (tools already cached above)
|
|
125
|
+
const {
|
|
126
|
+
messages: cachedMessages
|
|
127
|
+
} = addPromptCaching([], opts.messages);
|
|
128
|
+
const {
|
|
129
|
+
storeId
|
|
130
|
+
} = resolveConfig();
|
|
131
|
+
|
|
132
|
+
// Heartbeat timer — keeps parent stall detector alive during long API calls
|
|
133
|
+
// (thinking + streaming can take 60-90s with no other IPC messages)
|
|
134
|
+
let heartbeatTimer;
|
|
135
|
+
if (opts.onHeartbeat) {
|
|
136
|
+
heartbeatTimer = setInterval(opts.onHeartbeat, 10_000);
|
|
137
|
+
}
|
|
138
|
+
try {
|
|
94
139
|
const stream = await callServerProxy({
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
140
|
+
proxyUrl: getProxyUrl(),
|
|
141
|
+
token,
|
|
142
|
+
model: opts.modelId,
|
|
143
|
+
system,
|
|
144
|
+
messages: cachedMessages,
|
|
145
|
+
tools,
|
|
146
|
+
apiConfig,
|
|
147
|
+
storeId: storeId || undefined,
|
|
148
|
+
...(opts.timeoutMs ? {
|
|
149
|
+
timeoutMs: opts.timeoutMs
|
|
150
|
+
} : {}),
|
|
151
|
+
...(opts.abortSignal ? {
|
|
152
|
+
signal: opts.abortSignal
|
|
153
|
+
} : {}),
|
|
154
|
+
onTokenRefresh: async () => {
|
|
155
|
+
const result = await refreshSession();
|
|
156
|
+
return result.success ? result.config.access_token : null;
|
|
157
|
+
}
|
|
108
158
|
});
|
|
109
159
|
const result = await collectStreamResult(parseSSEStream(stream));
|
|
110
160
|
return streamResultToResponse(result, opts.thinkingEnabled ?? false);
|
|
161
|
+
} finally {
|
|
162
|
+
if (heartbeatTimer) clearInterval(heartbeatTimer);
|
|
163
|
+
}
|
|
111
164
|
}
|
|
165
|
+
|
|
112
166
|
// ============================================================================
|
|
113
167
|
// TOOL EXECUTION — shared loop with detection, routing, and truncation
|
|
114
168
|
// ============================================================================
|
|
169
|
+
|
|
115
170
|
/**
|
|
116
171
|
* Execute an array of tool use blocks, handling:
|
|
117
172
|
* - Loop detection (via LoopDetector)
|
|
@@ -122,114 +177,243 @@ export async function callAgentAPI(opts) {
|
|
|
122
177
|
* Returns tool results ready to append to messages, plus metadata.
|
|
123
178
|
*/
|
|
124
179
|
export async function executeToolBlocks(opts) {
|
|
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
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
}
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
}
|
|
181
|
-
let contentStr = JSON.stringify(result.success ? result.output : { error: result.output });
|
|
182
|
-
if (contentStr.length > maxToolResultChars) {
|
|
183
|
-
contentStr =
|
|
184
|
-
contentStr.slice(0, maxToolResultChars) +
|
|
185
|
-
`\n\n... (truncated — ${contentStr.length.toLocaleString()} chars total)`;
|
|
186
|
-
}
|
|
180
|
+
const {
|
|
181
|
+
toolBlocks,
|
|
182
|
+
loopDetector,
|
|
183
|
+
callbacks,
|
|
184
|
+
customExecutor,
|
|
185
|
+
maxToolResultChars = AGENT_DEFAULTS.toolResultTruncateChars,
|
|
186
|
+
toolTimeoutMs,
|
|
187
|
+
batchErrorLimit = AGENT_DEFAULTS.loopBatchErrorLimit,
|
|
188
|
+
signal
|
|
189
|
+
} = opts;
|
|
190
|
+
const toolResults = [];
|
|
191
|
+
const toolsUsed = [];
|
|
192
|
+
const customSignals = {};
|
|
193
|
+
|
|
194
|
+
/** Shared state for each parallel batch — tracks errors to abort remaining calls.
|
|
195
|
+
* JavaScript is single-threaded, so between `await` yields this is atomic. */
|
|
196
|
+
|
|
197
|
+
async function executeSingle(tu, batch) {
|
|
198
|
+
// Early exit if cancelled
|
|
199
|
+
if (signal?.aborted) {
|
|
200
|
+
return {
|
|
201
|
+
type: "tool_result",
|
|
202
|
+
tool_use_id: tu.id,
|
|
203
|
+
content: "Cancelled"
|
|
204
|
+
};
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
// Early exit if batch already aborted
|
|
208
|
+
if (batch.aborted) {
|
|
209
|
+
return {
|
|
210
|
+
type: "tool_result",
|
|
211
|
+
tool_use_id: tu.id,
|
|
212
|
+
content: JSON.stringify({
|
|
213
|
+
error: "Batch aborted — too many sibling tool calls failed. Re-assess your approach."
|
|
214
|
+
})
|
|
215
|
+
};
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
// Circuit breaker check
|
|
219
|
+
const loopCheck = loopDetector.recordCall(tu.name, tu.input);
|
|
220
|
+
if (loopCheck.blocked) {
|
|
221
|
+
return {
|
|
222
|
+
type: "tool_result",
|
|
223
|
+
tool_use_id: tu.id,
|
|
224
|
+
content: JSON.stringify({
|
|
225
|
+
error: loopCheck.reason
|
|
226
|
+
})
|
|
227
|
+
};
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
// File read frequency tracking — mirrors tool-dispatch.ts behavior.
|
|
231
|
+
// Without this, subagents/teammates can read the same file unlimited times.
|
|
232
|
+
if (tu.name === "read_file" && typeof tu.input.path === "string") {
|
|
233
|
+
const readCheck = loopDetector.trackRead(tu.input.path);
|
|
234
|
+
if (readCheck.blocked) {
|
|
187
235
|
return {
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
236
|
+
type: "tool_result",
|
|
237
|
+
tool_use_id: tu.id,
|
|
238
|
+
content: JSON.stringify({
|
|
239
|
+
error: readCheck.reason
|
|
240
|
+
})
|
|
191
241
|
};
|
|
242
|
+
}
|
|
192
243
|
}
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
244
|
+
callbacks?.onToolStart?.(tu.name, tu.input);
|
|
245
|
+
const toolStart = Date.now();
|
|
246
|
+
let result;
|
|
247
|
+
let isTransient = false;
|
|
248
|
+
try {
|
|
249
|
+
const executeOne = async () => {
|
|
250
|
+
if (customExecutor) {
|
|
251
|
+
const customResult = await customExecutor(tu.name, tu.input);
|
|
252
|
+
if (customResult !== null) return customResult;
|
|
253
|
+
}
|
|
254
|
+
if (isLocalTool(tu.name)) {
|
|
255
|
+
return await executeLocalTool(tu.name, tu.input, signal);
|
|
256
|
+
} else if (isServerTool(tu.name)) {
|
|
257
|
+
return await executeServerTool(tu.name, tu.input);
|
|
258
|
+
} else {
|
|
259
|
+
return {
|
|
260
|
+
success: false,
|
|
261
|
+
output: `Unknown tool: ${tu.name}`
|
|
262
|
+
};
|
|
263
|
+
}
|
|
264
|
+
};
|
|
265
|
+
if (toolTimeoutMs) {
|
|
266
|
+
const effectiveTimeout = LONG_RUNNING_TOOLS.has(tu.name) ? Math.max(toolTimeoutMs, LONG_RUNNING_TOOL_TIMEOUT_MS) : toolTimeoutMs;
|
|
267
|
+
result = await Promise.race([executeOne(), new Promise((_, reject) => setTimeout(() => reject(new Error(`Tool ${tu.name} timed out after ${effectiveTimeout / 1000}s`)), effectiveTimeout))]);
|
|
268
|
+
} else {
|
|
269
|
+
result = await executeOne();
|
|
270
|
+
}
|
|
271
|
+
} catch (toolErr) {
|
|
272
|
+
const msg = toolErr.message || String(toolErr);
|
|
273
|
+
isTransient = /timed?\s*out/i.test(msg) || /rate.?limit/i.test(msg) || /429/i.test(msg);
|
|
274
|
+
result = {
|
|
275
|
+
success: false,
|
|
276
|
+
output: `Tool execution error: ${msg}`
|
|
277
|
+
};
|
|
278
|
+
}
|
|
279
|
+
const toolDuration = Date.now() - toolStart;
|
|
280
|
+
|
|
281
|
+
// If batch was aborted while executing, skip recording to avoid inflating
|
|
282
|
+
// LoopDetector counts from a single bad parallel batch (TOCTOU race fix).
|
|
283
|
+
if (!result.success && batch.aborted) {
|
|
284
|
+
callbacks?.onToolEnd?.(tu.name, false, toolDuration);
|
|
285
|
+
return {
|
|
286
|
+
type: "tool_result",
|
|
287
|
+
tool_use_id: tu.id,
|
|
288
|
+
content: JSON.stringify({
|
|
289
|
+
error: "Batch aborted — too many sibling tool calls failed. Re-assess your approach."
|
|
290
|
+
})
|
|
291
|
+
};
|
|
292
|
+
}
|
|
293
|
+
loopDetector.recordResult(tu.name, result.success, tu.input, isTransient);
|
|
294
|
+
|
|
295
|
+
// Track batch-level failures
|
|
296
|
+
if (!result.success) {
|
|
297
|
+
batch.errors++;
|
|
298
|
+
if (batch.errors >= batchErrorLimit) {
|
|
299
|
+
batch.aborted = true;
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
callbacks?.onToolEnd?.(tu.name, result.success, toolDuration);
|
|
303
|
+
if (!toolsUsed.includes(tu.name)) {
|
|
304
|
+
toolsUsed.push(tu.name);
|
|
202
305
|
}
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
306
|
+
let contentStr = JSON.stringify(result.success ? result.output : {
|
|
307
|
+
error: result.output
|
|
308
|
+
});
|
|
309
|
+
if (contentStr.length > maxToolResultChars) {
|
|
310
|
+
contentStr = contentStr.slice(0, maxToolResultChars) + `\n\n... (truncated — ${contentStr.length.toLocaleString()} chars total)`;
|
|
207
311
|
}
|
|
208
|
-
return {
|
|
312
|
+
return {
|
|
313
|
+
type: "tool_result",
|
|
314
|
+
tool_use_id: tu.id,
|
|
315
|
+
content: contentStr
|
|
316
|
+
};
|
|
317
|
+
}
|
|
318
|
+
|
|
319
|
+
// Split into file-mutating (sequential) and everything else (parallel).
|
|
320
|
+
// File writes/edits must be sequential to prevent race conditions on the same file.
|
|
321
|
+
// run_command runs in parallel — like tool-dispatch.ts, bash calls can be concurrent
|
|
322
|
+
// (tests, searches, etc.). The model decides ordering via tool_use blocks.
|
|
323
|
+
const FILE_MUTATING_TOOLS = new Set(["write_file", "edit_file", "multi_edit", "notebook_edit"]);
|
|
324
|
+
const sequential = toolBlocks.filter(tu => FILE_MUTATING_TOOLS.has(tu.name));
|
|
325
|
+
const parallel = toolBlocks.filter(tu => !FILE_MUTATING_TOOLS.has(tu.name));
|
|
326
|
+
|
|
327
|
+
// Run parallel tools (including run_command) with batch error abort
|
|
328
|
+
if (parallel.length > 0) {
|
|
329
|
+
const batchState = {
|
|
330
|
+
errors: 0,
|
|
331
|
+
aborted: false
|
|
332
|
+
};
|
|
333
|
+
const parallelResults = await Promise.all(parallel.map(tu => executeSingle(tu, batchState)));
|
|
334
|
+
toolResults.push(...parallelResults);
|
|
335
|
+
}
|
|
336
|
+
|
|
337
|
+
// Run file-mutating tools sequentially (batch state still used for consistency)
|
|
338
|
+
const seqBatchState = {
|
|
339
|
+
errors: 0,
|
|
340
|
+
aborted: false
|
|
341
|
+
};
|
|
342
|
+
for (const tu of sequential) {
|
|
343
|
+
const result = await executeSingle(tu, seqBatchState);
|
|
344
|
+
toolResults.push(result);
|
|
345
|
+
}
|
|
346
|
+
return {
|
|
347
|
+
toolResults,
|
|
348
|
+
toolsUsed,
|
|
349
|
+
customSignals
|
|
350
|
+
};
|
|
209
351
|
}
|
|
352
|
+
|
|
210
353
|
// ============================================================================
|
|
211
354
|
// CONTENT BLOCK HELPERS
|
|
212
355
|
// ============================================================================
|
|
356
|
+
|
|
213
357
|
/** Extract text blocks from a response */
|
|
214
358
|
export function extractTextBlocks(content) {
|
|
215
|
-
|
|
359
|
+
return content.filter(b => b.type === "text");
|
|
216
360
|
}
|
|
361
|
+
|
|
217
362
|
/** Extract tool use blocks from a response */
|
|
218
363
|
export function extractToolUseBlocks(content) {
|
|
219
|
-
|
|
364
|
+
return content.filter(b => b.type === "tool_use");
|
|
220
365
|
}
|
|
366
|
+
|
|
221
367
|
/** Get combined text from all text blocks */
|
|
222
368
|
export function getResponseText(content) {
|
|
223
|
-
|
|
369
|
+
return extractTextBlocks(content).map(b => b.text).join("\n");
|
|
370
|
+
}
|
|
371
|
+
|
|
372
|
+
// ============================================================================
|
|
373
|
+
// TOOL DEDUPLICATION — shared by subagent.ts and teammate.ts
|
|
374
|
+
// ============================================================================
|
|
375
|
+
|
|
376
|
+
/**
|
|
377
|
+
* Deduplicate tools by name — local tools take priority over server tools.
|
|
378
|
+
* Ensures the Anthropic API never receives duplicate tool names (400 error).
|
|
379
|
+
*/
|
|
380
|
+
export function deduplicateTools(tools) {
|
|
381
|
+
const seen = new Set();
|
|
382
|
+
const result = [];
|
|
383
|
+
for (const tool of tools) {
|
|
384
|
+
if (!seen.has(tool.name)) {
|
|
385
|
+
seen.add(tool.name);
|
|
386
|
+
result.push(tool);
|
|
387
|
+
}
|
|
388
|
+
}
|
|
389
|
+
return result;
|
|
390
|
+
}
|
|
391
|
+
|
|
392
|
+
/**
|
|
393
|
+
* Assert that all tool names are unique. Call right before sending to the API
|
|
394
|
+
* to fail fast with a clear error instead of a cryptic Anthropic 400.
|
|
395
|
+
*/
|
|
396
|
+
export function assertUniqueToolNames(tools) {
|
|
397
|
+
const names = new Set();
|
|
398
|
+
for (const tool of tools) {
|
|
399
|
+
if (names.has(tool.name)) {
|
|
400
|
+
throw new Error(`Duplicate tool name "${tool.name}" — tools must have unique names before calling the Anthropic API`);
|
|
401
|
+
}
|
|
402
|
+
names.add(tool.name);
|
|
403
|
+
}
|
|
224
404
|
}
|
|
405
|
+
|
|
225
406
|
// ============================================================================
|
|
226
407
|
// YIELD HELPERS — prevent blocking the event loop during long agent loops
|
|
227
408
|
// ============================================================================
|
|
409
|
+
|
|
228
410
|
/** Yield to event loop to prevent blocking (microtask resolution) */
|
|
229
411
|
export function yieldToEventLoop() {
|
|
230
|
-
|
|
412
|
+
return new Promise(resolve => setTimeout(resolve, 0));
|
|
231
413
|
}
|
|
414
|
+
|
|
232
415
|
/** Longer yield for UI-critical moments (before long API calls, ~1 frame at 60fps) */
|
|
233
416
|
export function yieldForRender() {
|
|
234
|
-
|
|
417
|
+
return new Promise(resolve => setTimeout(resolve, 16));
|
|
235
418
|
}
|
|
419
|
+
//# sourceMappingURL=agent-worker-base.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-worker-base.js","names":["AGENT_DEFAULTS","getProxyUrl","resolveConfig","getValidToken","refreshSession","parseSSEStream","collectStreamResult","callServerProxy","buildAPIRequest","buildSystemBlocks","addPromptCaching","isLocalTool","executeLocalTool","isServerTool","executeServerTool","LONG_RUNNING_TOOL_TIMEOUT_MS","LONG_RUNNING_TOOLS","Set","streamResultToResponse","result","includeThinking","content","tb","thinkingBlocks","push","type","thinking","signature","text","tu","toolUseBlocks","id","name","input","usage","input_tokens","inputTokens","output_tokens","outputTokens","cache_read_tokens","cacheReadTokens","cache_creation_tokens","cacheCreationTokens","stop_reason","stopReason","callAgentAPI","opts","token","Error","apiConfig","model","modelId","contextProfile","thinkingEnabled","maxOutputTokens","tools","cacheLastTool","length","slice","cache_control","system","systemPrompt","messages","cachedMessages","storeId","heartbeatTimer","onHeartbeat","setInterval","stream","proxyUrl","undefined","timeoutMs","abortSignal","signal","onTokenRefresh","success","config","access_token","clearInterval","executeToolBlocks","toolBlocks","loopDetector","callbacks","customExecutor","maxToolResultChars","toolResultTruncateChars","toolTimeoutMs","batchErrorLimit","loopBatchErrorLimit","toolResults","toolsUsed","customSignals","executeSingle","batch","aborted","tool_use_id","JSON","stringify","error","loopCheck","recordCall","blocked","reason","path","readCheck","trackRead","onToolStart","toolStart","Date","now","isTransient","executeOne","customResult","output","effectiveTimeout","has","Math","max","Promise","race","_","reject","setTimeout","toolErr","msg","message","String","test","toolDuration","onToolEnd","recordResult","errors","includes","contentStr","toLocaleString","FILE_MUTATING_TOOLS","sequential","filter","parallel","batchState","parallelResults","all","map","seqBatchState","extractTextBlocks","b","extractToolUseBlocks","getResponseText","join","deduplicateTools","seen","tool","add","assertUniqueToolNames","names","yieldToEventLoop","resolve","yieldForRender"],"sources":["../../../src/cli/services/agent-worker-base.ts"],"sourcesContent":["/**\n * Agent Worker Base — shared utilities for subagent.ts and teammate.ts\n *\n * Extracts the common plumbing:\n * - API calling (auth, build request, call proxy, collect stream, convert response)\n * - Tool execution with loop detection, truncation, and result formatting\n * - Token tracking\n *\n * Both subagent and teammate keep their own types, system prompts, and lifecycle logic.\n * This module provides composable functions, NOT a class hierarchy.\n */\n\nimport type Anthropic from \"@anthropic-ai/sdk\";\nimport { LoopDetector, AGENT_DEFAULTS } from \"../../shared/agent-core.js\";\nimport { getProxyUrl, resolveConfig } from \"./config-store.js\";\nimport { getValidToken, refreshSession } from \"./auth-service.js\";\nimport { parseSSEStream, collectStreamResult } from \"../../shared/sse-parser.js\";\nimport {\n callServerProxy,\n buildAPIRequest,\n buildSystemBlocks,\n} from \"../../shared/api-client.js\";\nimport { addPromptCaching } from \"../../shared/agent-core.js\";\nimport {\n isLocalTool,\n executeLocalTool,\n} from \"./local-tools.js\";\nimport {\n isServerTool,\n executeServerTool,\n} from \"./server-tools.js\";\nimport type { ContextProfile, StreamResult } from \"../../shared/types.js\";\n\n// ============================================================================\n// LONG-RUNNING TOOL TIMEOUT (mirrors tool-dispatch.ts)\n// ============================================================================\n\n/** Tools that spawn workers/subprocesses and need much longer than 2 min */\nconst LONG_RUNNING_TOOL_TIMEOUT_MS = 10 * 60 * 1000; // 10 minutes\nconst LONG_RUNNING_TOOLS = new Set([\"team_create\", \"task\", \"task_output\", \"kali\", \"delegate_task\", \"exit_plan_mode\", \"ask_user_question\"]);\n\n// ============================================================================\n// TYPES\n// ============================================================================\n\n/** Thinking blocks aren't part of Anthropic.ContentBlock but are returned by the API */\ninterface ThinkingBlock {\n type: \"thinking\";\n thinking: string;\n signature: string;\n}\n\n/** Content block including thinking (extends SDK's ContentBlock union) */\nexport type AgentContentBlock = Anthropic.ContentBlock | ThinkingBlock;\n\n/** Unified response from an API call — used by both subagent and teammate */\nexport interface AgentAPIResponse {\n content: AgentContentBlock[];\n usage: {\n input_tokens: number;\n output_tokens: number;\n cache_read_tokens: number;\n cache_creation_tokens: number;\n };\n stop_reason: string;\n}\n\n/** Options for callAgentAPI */\nexport interface AgentAPIOptions {\n modelId: string;\n contextProfile: ContextProfile;\n systemPrompt: string;\n messages: Anthropic.MessageParam[];\n tools: Anthropic.Tool[];\n thinkingEnabled?: boolean;\n maxOutputTokens?: number;\n timeoutMs?: number;\n /** If true, add cache_control to last tool */\n cacheLastTool?: boolean;\n /** Called periodically during long API calls (streaming/thinking) to signal liveness */\n onHeartbeat?: () => void;\n /** AbortSignal for cancellation */\n abortSignal?: AbortSignal;\n}\n\n/** Result of executing a single tool */\nexport interface ToolExecResult {\n success: boolean;\n output: string;\n}\n\n/** Callbacks for tool execution progress */\nexport interface ToolExecCallbacks {\n onToolStart?: (toolName: string, input: Record<string, unknown>) => void;\n onToolEnd?: (toolName: string, success: boolean, durationMs: number) => void;\n}\n\n/** Options for executeToolBlocks */\nexport interface ExecuteToolBlocksOptions {\n toolBlocks: Anthropic.ToolUseBlock[];\n loopDetector: LoopDetector;\n callbacks?: ToolExecCallbacks;\n /** Additional tool executor for domain-specific tools (e.g., team tools) */\n customExecutor?: (name: string, input: Record<string, unknown>) => Promise<ToolExecResult | null>;\n /** Max chars per tool result before truncation */\n maxToolResultChars?: number;\n /** Timeout per tool call in ms (no timeout if not set) */\n toolTimeoutMs?: number;\n /** Max errors from a single parallel batch before aborting remaining calls.\n * Prevents Promise.all() from cascading N failures into the LoopDetector. */\n batchErrorLimit?: number;\n /** AbortSignal for cancellation */\n signal?: AbortSignal;\n}\n\n/** Result of executing all tool blocks in a turn */\nexport interface ToolBlocksResult {\n toolResults: Anthropic.ToolResultBlockParam[];\n toolsUsed: string[];\n /** Set by custom executor if a domain event occurred (e.g., team task completed) */\n customSignals: Record<string, unknown>;\n}\n\n// ============================================================================\n// API CLIENT — unified proxy caller\n// ============================================================================\n\n/**\n * Convert a StreamResult (from SSE collector) to the AgentAPIResponse format\n * that both subagent and teammate expect.\n *\n * Subagent includes thinking blocks; teammate does not (thinkingEnabled=false).\n */\nexport function streamResultToResponse(\n result: StreamResult,\n includeThinking: boolean,\n): AgentAPIResponse {\n const content: AgentContentBlock[] = [];\n\n if (includeThinking) {\n for (const tb of result.thinkingBlocks) {\n content.push({\n type: \"thinking\",\n thinking: tb.thinking,\n signature: tb.signature,\n });\n }\n }\n\n if (result.text) {\n content.push({ type: \"text\", text: result.text } as Anthropic.TextBlock);\n }\n\n for (const tu of result.toolUseBlocks) {\n content.push({\n type: \"tool_use\",\n id: tu.id,\n name: tu.name,\n input: tu.input,\n } as Anthropic.ToolUseBlock);\n }\n\n return {\n content,\n usage: {\n input_tokens: result.usage.inputTokens,\n output_tokens: result.usage.outputTokens,\n cache_read_tokens: result.usage.cacheReadTokens ?? 0,\n cache_creation_tokens: result.usage.cacheCreationTokens ?? 0,\n },\n stop_reason: result.stopReason,\n };\n}\n\n/**\n * Call the server proxy API, collect the SSE stream, and return a typed response.\n * Handles auth, request building, caching setup, and stream collection.\n */\nexport async function callAgentAPI(opts: AgentAPIOptions): Promise<AgentAPIResponse> {\n const token = await getValidToken();\n if (!token) throw new Error(\"No API key available. Run `whale login`.\");\n\n const apiConfig = buildAPIRequest({\n model: opts.modelId,\n contextProfile: opts.contextProfile,\n thinkingEnabled: opts.thinkingEnabled ?? false,\n maxOutputTokens: opts.maxOutputTokens,\n });\n\n // Optionally add cache_control to last tool\n let tools: object[];\n if (opts.cacheLastTool && opts.tools.length > 0) {\n tools = [\n ...opts.tools.slice(0, -1),\n { ...opts.tools[opts.tools.length - 1], cache_control: { type: \"ephemeral\" } },\n ];\n } else {\n tools = opts.tools;\n }\n\n const system = buildSystemBlocks(opts.systemPrompt);\n\n // Apply prompt caching to messages (tools already cached above)\n const { messages: cachedMessages } = addPromptCaching([], opts.messages);\n\n const { storeId } = resolveConfig();\n\n // Heartbeat timer — keeps parent stall detector alive during long API calls\n // (thinking + streaming can take 60-90s with no other IPC messages)\n let heartbeatTimer: ReturnType<typeof setInterval> | undefined;\n if (opts.onHeartbeat) {\n heartbeatTimer = setInterval(opts.onHeartbeat, 10_000);\n }\n\n try {\n const stream = await callServerProxy({\n proxyUrl: getProxyUrl(),\n token,\n model: opts.modelId,\n system,\n messages: cachedMessages,\n tools,\n apiConfig,\n storeId: storeId || undefined,\n ...(opts.timeoutMs ? { timeoutMs: opts.timeoutMs } : {}),\n ...(opts.abortSignal ? { signal: opts.abortSignal } : {}),\n onTokenRefresh: async () => {\n const result = await refreshSession();\n return result.success ? result.config!.access_token! : null;\n },\n });\n\n const result = await collectStreamResult(parseSSEStream(stream));\n return streamResultToResponse(result, opts.thinkingEnabled ?? false);\n } finally {\n if (heartbeatTimer) clearInterval(heartbeatTimer);\n }\n}\n\n// ============================================================================\n// TOOL EXECUTION — shared loop with detection, routing, and truncation\n// ============================================================================\n\n/**\n * Execute an array of tool use blocks, handling:\n * - Loop detection (via LoopDetector)\n * - Routing to local, server, or custom executor\n * - Result truncation to maxToolResultChars\n * - Optional per-tool timeout\n *\n * Returns tool results ready to append to messages, plus metadata.\n */\nexport async function executeToolBlocks(\n opts: ExecuteToolBlocksOptions,\n): Promise<ToolBlocksResult> {\n const {\n toolBlocks,\n loopDetector,\n callbacks,\n customExecutor,\n maxToolResultChars = AGENT_DEFAULTS.toolResultTruncateChars,\n toolTimeoutMs,\n batchErrorLimit = AGENT_DEFAULTS.loopBatchErrorLimit,\n signal,\n } = opts;\n\n const toolResults: Anthropic.ToolResultBlockParam[] = [];\n const toolsUsed: string[] = [];\n const customSignals: Record<string, unknown> = {};\n\n /** Shared state for each parallel batch — tracks errors to abort remaining calls.\n * JavaScript is single-threaded, so between `await` yields this is atomic. */\n interface BatchState {\n errors: number;\n aborted: boolean;\n }\n\n async function executeSingle(tu: Anthropic.ToolUseBlock, batch: BatchState): Promise<Anthropic.ToolResultBlockParam> {\n // Early exit if cancelled\n if (signal?.aborted) {\n return {\n type: \"tool_result\",\n tool_use_id: tu.id,\n content: \"Cancelled\",\n };\n }\n\n // Early exit if batch already aborted\n if (batch.aborted) {\n return {\n type: \"tool_result\",\n tool_use_id: tu.id,\n content: JSON.stringify({ error: \"Batch aborted — too many sibling tool calls failed. Re-assess your approach.\" }),\n };\n }\n\n // Circuit breaker check\n const loopCheck = loopDetector.recordCall(tu.name, tu.input as Record<string, unknown>);\n if (loopCheck.blocked) {\n return {\n type: \"tool_result\",\n tool_use_id: tu.id,\n content: JSON.stringify({ error: loopCheck.reason }),\n };\n }\n\n // File read frequency tracking — mirrors tool-dispatch.ts behavior.\n // Without this, subagents/teammates can read the same file unlimited times.\n if (tu.name === \"read_file\" && typeof (tu.input as Record<string, unknown>).path === \"string\") {\n const readCheck = loopDetector.trackRead((tu.input as Record<string, unknown>).path as string);\n if (readCheck.blocked) {\n return {\n type: \"tool_result\",\n tool_use_id: tu.id,\n content: JSON.stringify({ error: readCheck.reason }),\n };\n }\n }\n\n callbacks?.onToolStart?.(tu.name, tu.input as Record<string, unknown>);\n\n const toolStart = Date.now();\n let result: ToolExecResult;\n\n let isTransient = false;\n try {\n const executeOne = async (): Promise<ToolExecResult> => {\n if (customExecutor) {\n const customResult = await customExecutor(tu.name, tu.input as Record<string, unknown>);\n if (customResult !== null) return customResult;\n }\n\n if (isLocalTool(tu.name)) {\n return await executeLocalTool(tu.name, tu.input as Record<string, unknown>, signal);\n } else if (isServerTool(tu.name)) {\n return await executeServerTool(tu.name, tu.input as Record<string, unknown>);\n } else {\n return { success: false, output: `Unknown tool: ${tu.name}` };\n }\n };\n\n if (toolTimeoutMs) {\n const effectiveTimeout = LONG_RUNNING_TOOLS.has(tu.name)\n ? Math.max(toolTimeoutMs, LONG_RUNNING_TOOL_TIMEOUT_MS)\n : toolTimeoutMs;\n result = await Promise.race([\n executeOne(),\n new Promise<ToolExecResult>((_, reject) =>\n setTimeout(\n () => reject(new Error(`Tool ${tu.name} timed out after ${effectiveTimeout / 1000}s`)),\n effectiveTimeout,\n ),\n ),\n ]);\n } else {\n result = await executeOne();\n }\n } catch (toolErr: any) {\n const msg = toolErr.message || String(toolErr);\n isTransient = /timed?\\s*out/i.test(msg) || /rate.?limit/i.test(msg) || /429/i.test(msg);\n result = { success: false, output: `Tool execution error: ${msg}` };\n }\n\n const toolDuration = Date.now() - toolStart;\n\n // If batch was aborted while executing, skip recording to avoid inflating\n // LoopDetector counts from a single bad parallel batch (TOCTOU race fix).\n if (!result.success && batch.aborted) {\n callbacks?.onToolEnd?.(tu.name, false, toolDuration);\n return {\n type: \"tool_result\",\n tool_use_id: tu.id,\n content: JSON.stringify({ error: \"Batch aborted — too many sibling tool calls failed. Re-assess your approach.\" }),\n };\n }\n\n loopDetector.recordResult(tu.name, result.success, tu.input as Record<string, unknown>, isTransient);\n\n // Track batch-level failures\n if (!result.success) {\n batch.errors++;\n if (batch.errors >= batchErrorLimit) {\n batch.aborted = true;\n }\n }\n\n callbacks?.onToolEnd?.(tu.name, result.success, toolDuration);\n\n if (!toolsUsed.includes(tu.name)) {\n toolsUsed.push(tu.name);\n }\n\n let contentStr = JSON.stringify(result.success ? result.output : { error: result.output });\n if (contentStr.length > maxToolResultChars) {\n contentStr =\n contentStr.slice(0, maxToolResultChars) +\n `\\n\\n... (truncated — ${contentStr.length.toLocaleString()} chars total)`;\n }\n return {\n type: \"tool_result\",\n tool_use_id: tu.id,\n content: contentStr,\n };\n }\n\n // Split into file-mutating (sequential) and everything else (parallel).\n // File writes/edits must be sequential to prevent race conditions on the same file.\n // run_command runs in parallel — like tool-dispatch.ts, bash calls can be concurrent\n // (tests, searches, etc.). The model decides ordering via tool_use blocks.\n const FILE_MUTATING_TOOLS = new Set([\"write_file\", \"edit_file\", \"multi_edit\", \"notebook_edit\"]);\n const sequential = toolBlocks.filter(tu => FILE_MUTATING_TOOLS.has(tu.name));\n const parallel = toolBlocks.filter(tu => !FILE_MUTATING_TOOLS.has(tu.name));\n\n // Run parallel tools (including run_command) with batch error abort\n if (parallel.length > 0) {\n const batchState: BatchState = { errors: 0, aborted: false };\n const parallelResults = await Promise.all(parallel.map(tu => executeSingle(tu, batchState)));\n toolResults.push(...parallelResults);\n }\n\n // Run file-mutating tools sequentially (batch state still used for consistency)\n const seqBatchState: BatchState = { errors: 0, aborted: false };\n for (const tu of sequential) {\n const result = await executeSingle(tu, seqBatchState);\n toolResults.push(result);\n }\n\n return { toolResults, toolsUsed, customSignals };\n}\n\n// ============================================================================\n// CONTENT BLOCK HELPERS\n// ============================================================================\n\n/** Extract text blocks from a response */\nexport function extractTextBlocks(content: AgentContentBlock[]): Anthropic.TextBlock[] {\n return content.filter((b): b is Anthropic.TextBlock => b.type === \"text\");\n}\n\n/** Extract tool use blocks from a response */\nexport function extractToolUseBlocks(content: AgentContentBlock[]): Anthropic.ToolUseBlock[] {\n return content.filter((b): b is Anthropic.ToolUseBlock => b.type === \"tool_use\");\n}\n\n/** Get combined text from all text blocks */\nexport function getResponseText(content: AgentContentBlock[]): string {\n return extractTextBlocks(content).map((b) => b.text).join(\"\\n\");\n}\n\n// ============================================================================\n// TOOL DEDUPLICATION — shared by subagent.ts and teammate.ts\n// ============================================================================\n\n/**\n * Deduplicate tools by name — local tools take priority over server tools.\n * Ensures the Anthropic API never receives duplicate tool names (400 error).\n */\nexport function deduplicateTools(tools: Anthropic.Tool[]): Anthropic.Tool[] {\n const seen = new Set<string>();\n const result: Anthropic.Tool[] = [];\n for (const tool of tools) {\n if (!seen.has(tool.name)) {\n seen.add(tool.name);\n result.push(tool);\n }\n }\n return result;\n}\n\n/**\n * Assert that all tool names are unique. Call right before sending to the API\n * to fail fast with a clear error instead of a cryptic Anthropic 400.\n */\nexport function assertUniqueToolNames(tools: Anthropic.Tool[]): void {\n const names = new Set<string>();\n for (const tool of tools) {\n if (names.has(tool.name)) {\n throw new Error(`Duplicate tool name \"${tool.name}\" — tools must have unique names before calling the Anthropic API`);\n }\n names.add(tool.name);\n }\n}\n\n// ============================================================================\n// YIELD HELPERS — prevent blocking the event loop during long agent loops\n// ============================================================================\n\n/** Yield to event loop to prevent blocking (microtask resolution) */\nexport function yieldToEventLoop(): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, 0));\n}\n\n/** Longer yield for UI-critical moments (before long API calls, ~1 frame at 60fps) */\nexport function yieldForRender(): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, 16));\n}\n"],"mappings":"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","ignoreList":[]}
|