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
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server-tools.js","names":["createClient","writeFileSync","readFileSync","mkdirSync","join","tmpdir","resolveConfig","getValidToken","createAuthenticatedClient","formatServerResponse","executionContext","setServerToolContext","ctx","cachedClient","cachedStoreId","cachedAuthMethod","cachedToken","getSupabaseClient","config","supabaseUrl","supabaseKey","client","storeId","auth","persistSession","autoRefreshToken","token","resetServerToolClient","connectionVerified","loadedTools","loadedToolNames","clear","toolsLoadedAt","checkConnection","conn","error","from","select","limit","Set","TOOL_CACHE_TTL","loadServerToolDefinitions","force","length","Date","now","data","eq","neq","console","message","map","t","name","description","definition","input_schema","type","properties","tool","add","err","isServerTool","has","getAllServerToolDefinitions","getServerStatus","loadConfig","tools","connected","store_id","storeName","store_name","toolCount","authMethod","MEDIA_FIELDS","audio_base64","ext","label","stems_zip_base64","MEDIA_TOOLS","downloadSingleMedia","toolName","outDir","inputArgs","fileUrl","file_url","startsWith","text","prompt","substring","replace","toLowerCase","action","format","urlPath","URL","pathname","urlExt","split","pop","ts","nameParts","String","filter","Boolean","filename","localPath","resp","fetch","ok","download_error","status","buffer","Buffer","arrayBuffer","local_file","file_size","download","downloadRemoteMedia","process","cwd","Array","isArray","images","img","previews","preview","extractMediaToFiles","dirCreated","field","Object","entries","b64","recursive","filePath","i","audio_file","executeServerTool","input","emitter","serverUrl","success","output","authToken","serverArgs","file_paths","file_path","paths","MAX_TOTAL_BYTES","MAX_SINGLE_FILE","samples","totalBytes","p","buf","isPVC","subarray","maxTotal","push","toString","_fp","_f","rest","audio_samples","reference_audio_base64","test","MAX_FILE_SIZE","MAX_BATCH_BYTES","MAX_BATCH_COUNT","toFixed","_fps","base64","file_name","basename","files","errors","slice","_read_errors","undefined","_fu","image_path","image_url","imgPath","_ip","_iu","image_base64","attachments","rawAtts","hasLocalFiles","some","a","url","processed","att","content","_a","local_path","_lp","encoding","path","isStreamable","response","method","headers","body","JSON","stringify","mode","tool_name","args","trace_id","traceId","conversation_id","conversationId","userId","userEmail","source","catch","reader","getReader","decoder","TextDecoder","finalResult","done","value","read","decode","stream","newlineIdx","indexOf","line","trim","parsed","parse","progress","emitToolOutput","emitToolProgress","remaining","result","json","dataObj","SAFETY_MAX_SERVER_CHARS","toLocaleString","errorMsg","nested"],"sources":["../../../src/cli/services/server-tools.ts"],"sourcesContent":["/**\n * Server Tools — loaded dynamically from ai_tool_registry\n *\n * Single source of truth: the database. Same as the MCP server (index.ts).\n * No hardcoded definitions. Tools are cached for 60s after first load.\n *\n * Execution: proxied to the Fly.io server or Supabase edge function (mode: \"tool\").\n * All business logic lives server-side — CLI is a thin client.\n * Claude formats the JSON results for the user (no client-side formatter).\n */\n\nimport { createClient, type SupabaseClient } from \"@supabase/supabase-js\";\nimport type Anthropic from \"@anthropic-ai/sdk\";\nimport { writeFileSync, readFileSync, mkdirSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { tmpdir } from \"node:os\";\n// Note: extractMediaToFiles below is a fallback for any tools that still return\n// base64 media. The voice handler now uploads to Supabase Storage and returns\n// file_url instead, but this remains for backwards compatibility.\nimport { resolveConfig } from \"./config-store.js\";\nimport { getValidToken, createAuthenticatedClient } from \"./auth-service.js\";\nimport { formatServerResponse } from \"./format-server-response.js\";\nimport type { AgentEventEmitter } from \"./agent-events.js\";\nimport { ToolResult } from \"../../shared/types.js\";\nexport type { ToolResult };\n\n// ============================================================================\n// EXECUTION CONTEXT — set by agent-loop before tool dispatch\n// Provides trace + user identity for server-side telemetry correlation.\n// ============================================================================\n\ninterface ToolExecutionContext {\n traceId?: string;\n conversationId?: string;\n userId?: string;\n userEmail?: string;\n source?: string;\n}\n\nlet executionContext: ToolExecutionContext = {};\n\n/**\n * Set the execution context for server tool calls.\n * Called by agent-loop.ts before each turn so tool calls carry trace/user identity.\n */\nexport function setServerToolContext(ctx: ToolExecutionContext): void {\n executionContext = ctx;\n}\n\nexport interface ServerStatus {\n connected: boolean;\n storeId: string;\n storeName: string;\n toolCount: number;\n authMethod: \"service_role\" | \"jwt\" | \"none\";\n}\n\n// ============================================================================\n// SUPABASE CLIENT (tiered: service role > user JWT)\n// Used only for loading tool definitions from ai_tool_registry.\n// Tool execution goes through the edge function.\n// ============================================================================\n\nlet cachedClient: SupabaseClient | null = null;\nlet cachedStoreId: string = \"\";\nlet cachedAuthMethod: \"service_role\" | \"jwt\" | \"none\" = \"none\";\nlet cachedToken: string = \"\";\n\nasync function getSupabaseClient(): Promise<{ client: SupabaseClient; storeId: string } | null> {\n const config = resolveConfig();\n\n // Tier 1: Service role key (full access, MCP server mode) — never expires\n if (config.supabaseUrl && config.supabaseKey) {\n if (cachedClient && cachedAuthMethod === \"service_role\") {\n return { client: cachedClient, storeId: cachedStoreId };\n }\n cachedClient = createClient(config.supabaseUrl, config.supabaseKey, {\n auth: { persistSession: false, autoRefreshToken: false },\n });\n cachedStoreId = config.storeId || \"\";\n cachedAuthMethod = \"service_role\";\n return { client: cachedClient, storeId: cachedStoreId };\n }\n\n // Tier 2: User JWT (CLI login) — recreate client when token refreshes\n const token = await getValidToken();\n if (token) {\n if (cachedClient && cachedToken === token) {\n cachedStoreId = config.storeId || \"\";\n return { client: cachedClient, storeId: cachedStoreId };\n }\n cachedClient = createAuthenticatedClient(token);\n cachedToken = token;\n cachedStoreId = config.storeId || \"\";\n cachedAuthMethod = \"jwt\";\n return { client: cachedClient, storeId: cachedStoreId };\n }\n\n cachedClient = null;\n cachedToken = \"\";\n cachedAuthMethod = \"none\";\n return null;\n}\n\nexport function resetServerToolClient(): void {\n cachedClient = null;\n cachedStoreId = \"\";\n cachedToken = \"\";\n cachedAuthMethod = \"none\";\n connectionVerified = false;\n // Also clear tool cache so next load fetches fresh\n loadedTools = [];\n loadedToolNames.clear();\n toolsLoadedAt = 0;\n}\n\n// ============================================================================\n// CONNECTION CHECK\n// ============================================================================\n\nlet connectionVerified = false;\n\nexport async function checkConnection(): Promise<boolean> {\n if (connectionVerified) return true;\n\n const conn = await getSupabaseClient();\n if (!conn) return false;\n\n try {\n // Quick health check — query a small table\n const { error } = await conn.client.from(\"stores\").select(\"id\").limit(1);\n connectionVerified = !error;\n return connectionVerified;\n } catch {\n return false;\n }\n}\n\n// ============================================================================\n// TOOL DEFINITIONS — loaded from ai_tool_registry (single source of truth)\n// ============================================================================\n\nlet loadedTools: Anthropic.Tool[] = [];\nlet loadedToolNames = new Set<string>();\nlet toolsLoadedAt = 0;\nconst TOOL_CACHE_TTL = 60_000; // 1 minute\n\n/**\n * Load server tool definitions from ai_tool_registry.\n * Same query as the MCP server (index.ts). Cached for 60s.\n * Filters out tool_mode='code' (those are local CLI tools).\n */\nexport async function loadServerToolDefinitions(force = false): Promise<Anthropic.Tool[]> {\n // Return cache if fresh\n if (!force && loadedTools.length > 0 && Date.now() - toolsLoadedAt < TOOL_CACHE_TTL) {\n return loadedTools;\n }\n\n const conn = await getSupabaseClient();\n if (!conn) return [];\n\n try {\n const { data, error } = await conn.client\n .from(\"ai_tool_registry\")\n .select(\"name, description, definition\")\n .eq(\"is_active\", true)\n .neq(\"tool_mode\", \"code\");\n\n if (error) {\n console.error(\"[server-tools] Failed to load from ai_tool_registry:\", error.message);\n return loadedTools; // Return stale cache on error\n }\n\n loadedTools = (data || []).map(t => ({\n name: t.name,\n description: t.description || t.definition?.description || `Execute ${t.name}`,\n input_schema: t.definition?.input_schema || { type: \"object\" as const, properties: {} },\n }));\n\n // Rebuild the name set\n loadedToolNames.clear();\n for (const tool of loadedTools) {\n loadedToolNames.add(tool.name);\n }\n\n toolsLoadedAt = Date.now();\n connectionVerified = true;\n\n return loadedTools;\n } catch (err) {\n console.error(\"[server-tools] Error loading tool definitions:\", err);\n return loadedTools;\n }\n}\n\n/**\n * Check if a tool name is a server tool.\n * After first load, checks against the dynamically loaded set.\n */\nexport function isServerTool(name: string): boolean {\n return loadedToolNames.has(name);\n}\n\n/**\n * Get currently loaded definitions (for /tools listing).\n * Returns whatever is cached — call loadServerToolDefinitions() first to populate.\n */\nexport function getAllServerToolDefinitions(): Anthropic.Tool[] {\n return loadedTools;\n}\n\n// ============================================================================\n// SERVER STATUS\n// ============================================================================\n\nexport async function getServerStatus(): Promise<ServerStatus> {\n const { loadConfig } = await import(\"./config-store.js\");\n const config = loadConfig();\n\n // Loading tools also verifies connection\n const tools = await loadServerToolDefinitions();\n return {\n connected: tools.length > 0,\n storeId: config.store_id || \"\",\n storeName: config.store_name || \"\",\n toolCount: tools.length,\n authMethod: cachedAuthMethod,\n };\n}\n\n// ============================================================================\n// EXECUTE SERVER TOOL — proxied to edge function\n// ============================================================================\n\n/** Media fields that contain base64-encoded binary data */\nconst MEDIA_FIELDS: Record<string, { ext: string; label: string }> = {\n audio_base64: { ext: \"mp3\", label: \"audio\" },\n stems_zip_base64: { ext: \"zip\", label: \"stems\" },\n};\n\n/** Tools that produce downloadable media files via file_url */\nconst MEDIA_TOOLS = new Set([\"voice\", \"image_gen\", \"video_gen\"]);\n\n/**\n * Download a single file_url to a local path, replacing the URL in the data.\n * inputArgs is the original tool call args — used to derive descriptive filenames\n * when the result data doesn't include the text/prompt.\n */\nasync function downloadSingleMedia(data: Record<string, unknown>, toolName: string, outDir: string, inputArgs?: Record<string, unknown>): Promise<void> {\n const fileUrl = data.file_url;\n if (typeof fileUrl !== \"string\" || !fileUrl.startsWith(\"http\")) return;\n\n // Derive a descriptive filename\n // Check result data first, then fall back to input args for text/prompt\n let label = \"\";\n const text = (data.prompt || data.text || inputArgs?.text || inputArgs?.prompt) as string | undefined;\n if (text) {\n label = text.substring(0, 40).replace(/[^a-zA-Z0-9]+/g, \"-\").replace(/-+$/, \"\").toLowerCase();\n }\n const action = (data.action as string) || (inputArgs?.action as string) || toolName;\n // Detect format: explicit field > file extension from URL > tool-based default\n let format = data.format as string | undefined;\n if (!format) {\n try {\n const urlPath = new URL(fileUrl).pathname;\n const urlExt = urlPath.split(\".\").pop();\n if (urlExt && urlExt.length <= 4) format = urlExt;\n } catch { /* invalid URL — use default */ }\n }\n if (!format) format = toolName === \"image_gen\" ? \"png\" : toolName === \"video_gen\" ? \"mp4\" : \"mp3\";\n const ts = Date.now();\n const nameParts = [action, label, String(ts)].filter(Boolean);\n const filename = `${nameParts.join(\"-\")}.${format}`;\n const localPath = join(outDir, filename);\n\n try {\n const resp = await fetch(fileUrl);\n if (!resp.ok) {\n data.download_error = `Failed to download: HTTP ${resp.status}`;\n return;\n }\n const buffer = Buffer.from(await resp.arrayBuffer());\n writeFileSync(localPath, buffer);\n\n // Keep file_url for downstream tools (email, workflows) that need public URLs\n data.local_file = localPath;\n data.file_size = buffer.length;\n delete data.download;\n } catch (err: any) {\n data.download_error = `Download failed: ${err.message || err}`;\n }\n}\n\n/**\n * Download remote media (file_url) to the user's working directory.\n * This ensures the LLM never needs to handle URLs — it just reports local paths.\n * Prevents the hallucinated-URL problem where models fabricate wrong download URLs.\n *\n * Handles both single results (file_url at top level) and batch results\n * (file_url inside images[] or previews[] arrays).\n */\nasync function downloadRemoteMedia(data: Record<string, unknown>, toolName: string, inputArgs?: Record<string, unknown>): Promise<void> {\n // Save to cwd — the user's working directory, not a hidden temp folder\n const outDir = process.cwd();\n\n // Single file at top level (voice speak, image_gen generate, etc.)\n if (typeof data.file_url === \"string\" && data.file_url.startsWith(\"http\")) {\n await downloadSingleMedia(data, toolName, outDir, inputArgs);\n }\n\n // Batch arrays — image_gen batch returns images[], voice_design returns previews[]\n if (Array.isArray(data.images)) {\n for (const img of data.images) {\n if (img && typeof img === \"object\" && typeof (img as any).file_url === \"string\") {\n await downloadSingleMedia(img as Record<string, unknown>, toolName, outDir);\n }\n }\n }\n if (Array.isArray(data.previews)) {\n for (const preview of data.previews) {\n if (preview && typeof preview === \"object\" && typeof (preview as any).file_url === \"string\") {\n await downloadSingleMedia(preview as Record<string, unknown>, toolName, outDir);\n }\n }\n }\n}\n\n/**\n * Extract base64 media from tool results, save to temp files, and replace\n * with file paths. This prevents truncation from destroying binary data\n * that the model needs to save for the user.\n */\nfunction extractMediaToFiles(data: Record<string, unknown>, toolName: string): void {\n const outDir = join(tmpdir(), \"whale-audio\");\n let dirCreated = false;\n\n for (const [field, { ext, label }] of Object.entries(MEDIA_FIELDS)) {\n const b64 = data[field];\n if (typeof b64 !== \"string\" || b64.length < 100) continue;\n\n if (!dirCreated) {\n mkdirSync(outDir, { recursive: true });\n dirCreated = true;\n }\n\n const ts = Date.now();\n const filename = `${toolName}-${label}-${ts}.${ext}`;\n const filePath = join(outDir, filename);\n\n try {\n writeFileSync(filePath, Buffer.from(b64, \"base64\"));\n // Replace base64 with file path so model can reference it\n data[field] = `(saved to ${filePath})`;\n data[`${label}_file`] = filePath;\n } catch {\n // Leave original data if write fails\n }\n }\n\n // Handle voice_design previews array\n if (Array.isArray(data.previews)) {\n if (!dirCreated) {\n mkdirSync(outDir, { recursive: true });\n }\n for (let i = 0; i < data.previews.length; i++) {\n const preview = data.previews[i] as Record<string, unknown> | undefined;\n if (!preview?.audio_base64 || typeof preview.audio_base64 !== \"string\") continue;\n const ts = Date.now();\n const filePath = join(outDir, `${toolName}-preview-${i}-${ts}.mp3`);\n try {\n writeFileSync(filePath, Buffer.from(preview.audio_base64 as string, \"base64\"));\n preview.audio_base64 = `(saved to ${filePath})`;\n preview.audio_file = filePath;\n } catch {\n // Leave original\n }\n }\n }\n}\n\n/**\n * Execute a server tool via the Fly.io server or Supabase edge function (mode: \"tool\").\n * Returns the raw JSON — Claude formats it for the user.\n * No client-side formatting: the model is the presentation layer.\n *\n * For tools that support live progress (kali exec), uses `mode: \"tool_stream\"` with NDJSON\n * and emits `tool_output` events via the optional emitter for real-time CLI rendering.\n */\nexport async function executeServerTool(\n name: string,\n input: Record<string, unknown>,\n emitter?: AgentEventEmitter,\n): Promise<ToolResult> {\n const config = resolveConfig();\n if (!config.serverUrl) {\n return { success: false, output: \"No server URL configured — server tools unavailable.\" };\n }\n\n // Auth token: service role key preferred, user JWT fallback\n let authToken = config.supabaseKey;\n if (!authToken) {\n authToken = await getValidToken() || \"\";\n }\n if (!authToken) {\n return { success: false, output: \"No auth token — server tools unavailable. Run: whale login\" };\n }\n\n // ── Pre-process file_paths for voice tool ──\n // Reads local files and base64-encodes them so the LLM never handles binary data.\n // CRITICAL: We must NOT mutate `input` — the agent loop keeps a reference to it\n // in the conversation history. If we inject base64 into `input`, it leaks into\n // the LLM context and blows the 200K token limit.\n let serverArgs: Record<string, unknown> = input;\n\n if (name === \"voice\" && (input.file_paths || input.file_path)) {\n let paths: string[] = [];\n if (Array.isArray(input.file_paths)) {\n paths = input.file_paths as string[];\n } else if (typeof input.file_path === \"string\") {\n paths = [input.file_path as string];\n }\n\n const MAX_TOTAL_BYTES = 7_000_000; // 7MB raw = ~9.3MB base64, under 10MB server limit\n const MAX_SINGLE_FILE = 2_000_000; // 2MB per file (~2 min at 128kbps) — enough for good clone\n const samples: string[] = [];\n let totalBytes = 0;\n for (const p of paths) {\n try {\n let buf = readFileSync(p);\n // IVC: trim to 2MB per file. PVC: no trim (needs 30+ min for best quality)\n const isPVC = input.action === \"pvc_upload\";\n if (!isPVC && buf.length > MAX_SINGLE_FILE) {\n buf = buf.subarray(0, MAX_SINGLE_FILE);\n }\n totalBytes += buf.length;\n const maxTotal = isPVC ? 25_000_000 : MAX_TOTAL_BYTES;\n if (totalBytes > maxTotal) break; // use what we have\n samples.push(buf.toString(\"base64\"));\n } catch (err: any) {\n // Skip unreadable files instead of killing the entire batch\n continue;\n }\n }\n if (samples.length === 0) {\n return { success: false, output: \"No valid audio files found in the provided paths.\" };\n }\n\n // Build a SEPARATE args object for the server — never touch `input`\n const { file_paths: _fp, file_path: _f, ...rest } = input;\n serverArgs = { ...rest };\n if (input.action === \"clone_voice\" || input.action === \"pvc_upload\") {\n serverArgs.audio_samples = samples;\n } else if (input.action === \"voice_design\") {\n serverArgs.reference_audio_base64 = samples[0];\n } else {\n serverArgs.audio_base64 = samples[0];\n }\n }\n\n // ── Pre-process file_path(s) for media upload tool ──\n // Same pattern as voice: read local files in-process so base64 never flows\n // through shell output (which truncates at ~100K chars) or conversation context.\n // Also intercept file_url that's actually a local path (agents confuse the two).\n if (name === \"media\" && (input.action === \"upload\" || input.action === \"bulk_upload\")) {\n const fileUrl = input.file_url as string | undefined;\n if (fileUrl && (fileUrl.startsWith(\"/\") || /^[A-Z]:\\\\/i.test(fileUrl)) && !input.file_path && !input.file_paths) {\n input = { ...input, file_path: fileUrl };\n delete (input as any).file_url;\n }\n }\n if (name === \"media\" && (input.action === \"upload\" || input.action === \"bulk_upload\") && (input.file_path || input.file_paths)) {\n let paths: string[] = [];\n if (Array.isArray(input.file_paths)) {\n paths = input.file_paths as string[];\n } else if (typeof input.file_path === \"string\") {\n paths = [input.file_path as string];\n }\n\n if (paths.length > 0) {\n const MAX_FILE_SIZE = 10_000_000; // 10MB per file\n const MAX_BATCH_BYTES = 50_000_000; // 50MB total batch\n const MAX_BATCH_COUNT = 50;\n\n if (paths.length === 1) {\n // ── Single file → standard upload action ──\n const filePath = paths[0];\n try {\n const buf = readFileSync(filePath);\n if (buf.length > MAX_FILE_SIZE) {\n return { success: false, output: `File too large: ${(buf.length / 1_000_000).toFixed(1)}MB (max 10MB). Compress or resize first.` };\n }\n const { file_path: _fp, file_paths: _fps, ...rest } = input;\n serverArgs = { ...rest, action: \"upload\", base64: buf.toString(\"base64\") };\n if (!serverArgs.file_name) {\n const basename = filePath.split(\"/\").pop() || filePath.split(\"\\\\\").pop() || \"\";\n if (basename) serverArgs.file_name = basename;\n }\n } catch (err: any) {\n return { success: false, output: `Cannot read file \"${filePath}\": ${err.message || err}` };\n }\n } else {\n // ── Multiple files → bulk_upload action ──\n const files: { base64: string; file_name: string }[] = [];\n const errors: string[] = [];\n let totalBytes = 0;\n\n for (const filePath of paths.slice(0, MAX_BATCH_COUNT)) {\n try {\n const buf = readFileSync(filePath);\n if (buf.length > MAX_FILE_SIZE) {\n errors.push(`${filePath.split(\"/\").pop()}: ${(buf.length / 1_000_000).toFixed(1)}MB exceeds 10MB limit, skipped`);\n continue;\n }\n totalBytes += buf.length;\n if (totalBytes > MAX_BATCH_BYTES) {\n errors.push(`Batch limit reached (50MB) — remaining files skipped`);\n break;\n }\n const basename = filePath.split(\"/\").pop() || filePath.split(\"\\\\\").pop() || \"file\";\n files.push({ base64: buf.toString(\"base64\"), file_name: basename });\n } catch (err: any) {\n errors.push(`${filePath.split(\"/\").pop()}: ${err.message || \"unreadable\"}`);\n }\n }\n if (paths.length > MAX_BATCH_COUNT) {\n errors.push(`Only first ${MAX_BATCH_COUNT} files processed (${paths.length} provided)`);\n }\n\n if (files.length === 0) {\n return { success: false, output: `No valid files to upload. Errors:\\n${errors.join(\"\\n\")}` };\n }\n\n const { file_path: _fp, file_paths: _fps, ...rest } = input;\n serverArgs = { ...rest, action: \"bulk_upload\", files, _read_errors: errors.length > 0 ? errors : undefined };\n }\n }\n }\n\n // ── Pre-process file_path for media replace tool ──\n // Same pattern as upload: read local file in-process, base64-encode for server.\n if (name === \"media\" && input.action === \"replace\" && (input.file_path || (typeof input.file_url === \"string\" && (input.file_url as string).startsWith(\"/\")))) {\n const localPath = (input.file_path || input.file_url) as string;\n try {\n const buf = readFileSync(localPath);\n if (buf.length > 10_000_000) {\n return { success: false, output: `File too large: ${(buf.length / 1_000_000).toFixed(1)}MB (max 10MB). Compress or resize first.` };\n }\n const { file_path: _fp, file_url: _fu, ...rest } = input;\n serverArgs = { ...rest, base64: buf.toString(\"base64\") };\n if (!serverArgs.file_name) {\n const basename = localPath.split(\"/\").pop() || localPath.split(\"\\\\\").pop() || \"\";\n if (basename) serverArgs.file_name = basename;\n }\n } catch (err: any) {\n return { success: false, output: `Cannot read file \"${localPath}\": ${err.message || err}` };\n }\n }\n\n // ── Pre-process image_path for remove_bg tool ──\n // Same pattern: read local image, send as image_base64.\n if (name === \"remove_bg\" && (input.image_path || (typeof input.image_url === \"string\" && (input.image_url as string).startsWith(\"/\")))) {\n const imgPath = (input.image_path || input.image_url) as string;\n try {\n const buf = readFileSync(imgPath);\n if (buf.length > 10_000_000) {\n return { success: false, output: `Image too large: ${(buf.length / 1_000_000).toFixed(1)}MB (max 10MB).` };\n }\n const { image_path: _ip, image_url: _iu, ...rest } = input;\n serverArgs = { ...rest, image_base64: buf.toString(\"base64\") };\n } catch (err: any) {\n return { success: false, output: `Cannot read image \"${imgPath}\": ${err.message || err}` };\n }\n }\n\n // ── Pre-process file_path in email attachments ──\n // Reads local files referenced in attachments[].file_path, converts to base64 content.\n if (name === \"email\" && input.action === \"send\" && Array.isArray(input.attachments)) {\n const rawAtts = input.attachments as { file_path?: string; url?: string; filename?: string; content?: string }[];\n const hasLocalFiles = rawAtts.some(a => a.file_path || (typeof a.url === \"string\" && a.url.startsWith(\"/\")));\n if (hasLocalFiles) {\n const processed: { filename: string; content: string }[] = [];\n for (const att of rawAtts) {\n const localPath = att.file_path || (typeof att.url === \"string\" && att.url.startsWith(\"/\") ? att.url : null);\n if (localPath) {\n try {\n const buf = readFileSync(localPath);\n if (buf.length > 10_000_000) {\n return { success: false, output: `Attachment too large: ${localPath.split(\"/\").pop()} is ${(buf.length / 1_000_000).toFixed(1)}MB (max 10MB).` };\n }\n const filename = att.filename || localPath.split(\"/\").pop() || \"attachment\";\n processed.push({ filename, content: buf.toString(\"base64\") });\n } catch (err: any) {\n return { success: false, output: `Cannot read attachment \"${localPath}\": ${err.message || err}` };\n }\n } else if (att.content && att.filename) {\n processed.push({ filename: att.filename, content: att.content });\n } else if (att.url && att.filename) {\n processed.push(att as any); // URL-based, let server fetch it\n }\n }\n const { attachments: _a, ...rest } = input;\n serverArgs = { ...rest, attachments: processed };\n }\n }\n\n // ── Pre-process file_path for kali upload ──\n // Reads local file and sends content as base64 to the kali box.\n if (name === \"kali\" && input.action === \"upload\" && (input.file_path || input.local_path)) {\n const localPath = (input.file_path || input.local_path) as string;\n if (localPath && !input.content) {\n try {\n const buf = readFileSync(localPath);\n if (buf.length > 50_000_000) {\n return { success: false, output: `File too large for kali upload: ${(buf.length / 1_000_000).toFixed(1)}MB (max 50MB).` };\n }\n const { file_path: _fp, local_path: _lp, ...rest } = input;\n serverArgs = { ...rest, content: buf.toString(\"base64\"), encoding: \"base64\" };\n // Auto-set remote path from filename if not provided\n if (!serverArgs.path) {\n const basename = localPath.split(\"/\").pop() || \"upload\";\n serverArgs.path = `/tmp/${basename}`;\n }\n } catch (err: any) {\n return { success: false, output: `Cannot read file \"${localPath}\": ${err.message || err}` };\n }\n }\n }\n\n // ── Streaming path for kali exec actions ──\n // Uses NDJSON streaming to show live stdout/stderr in the CLI while the command runs.\n const isStreamable = name === \"kali\" && emitter &&\n (input.action === \"exec\" || input.action === \"exec_stream\");\n\n if (isStreamable) {\n try {\n const serverUrl = config.serverUrl;\n const response = await fetch(serverUrl, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"Authorization\": `Bearer ${authToken}`,\n },\n body: JSON.stringify({\n mode: \"tool_stream\",\n tool_name: name,\n args: serverArgs,\n store_id: config.storeId || undefined,\n trace_id: executionContext.traceId || undefined,\n conversation_id: executionContext.conversationId || undefined,\n userId: executionContext.userId || undefined,\n userEmail: executionContext.userEmail || undefined,\n source: executionContext.source || \"whale-code\",\n }),\n });\n\n if (!response.ok) {\n const text = await response.text().catch(() => \"\");\n return { success: false, output: `Server tool stream error: HTTP ${response.status}: ${text.substring(0, 500)}` };\n }\n\n if (!response.body) {\n return { success: false, output: \"Server returned no response body for tool_stream\" };\n }\n\n // Read NDJSON stream — emit progress events, collect final result\n const reader = (response.body as any).getReader();\n const decoder = new TextDecoder();\n let buffer = \"\";\n let finalResult: { success: boolean; data?: unknown; error?: string } | null = null;\n\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n buffer += decoder.decode(value, { stream: true });\n\n let newlineIdx: number;\n while ((newlineIdx = buffer.indexOf(\"\\n\")) !== -1) {\n const line = buffer.substring(0, newlineIdx).trim();\n buffer = buffer.substring(newlineIdx + 1);\n if (!line) continue;\n try {\n const parsed = JSON.parse(line);\n if (parsed.type === \"progress\" && parsed.progress) {\n const p = parsed.progress as { type?: string; data?: string };\n if ((p.type === \"stdout\" || p.type === \"stderr\") && p.data) {\n emitter.emitToolOutput(name, p.data);\n }\n } else if (parsed.type === \"status\" && parsed.progress) {\n emitter.emitToolProgress(name, parsed.progress);\n } else if (parsed.type === \"result\") {\n finalResult = parsed;\n }\n } catch { /* skip malformed lines */ }\n }\n }\n\n // Process remaining buffer\n const remaining = buffer.trim();\n if (remaining) {\n try {\n const parsed = JSON.parse(remaining);\n if (parsed.type === \"result\") finalResult = parsed;\n } catch { /* skip */ }\n }\n\n if (finalResult) {\n if (finalResult.success && finalResult.data) {\n const output = typeof finalResult.data === \"string\"\n ? finalResult.data\n : formatServerResponse(finalResult.data, name);\n return { success: true, output };\n }\n return { success: false, output: finalResult.error || `Server tool \"${name}\" returned success=false` };\n }\n\n return { success: false, output: \"No result received from streaming tool execution\" };\n } catch (err: any) {\n return { success: false, output: `Server tool stream error: ${err.message || err}` };\n }\n }\n\n // ── Standard path: non-streaming tools ──\n try {\n const serverUrl = config.serverUrl;\n const response = await fetch(serverUrl, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"Authorization\": `Bearer ${authToken}`,\n },\n body: JSON.stringify({\n mode: \"tool\",\n tool_name: name,\n args: serverArgs,\n store_id: config.storeId || undefined,\n trace_id: executionContext.traceId || undefined,\n conversation_id: executionContext.conversationId || undefined,\n userId: executionContext.userId || undefined,\n userEmail: executionContext.userEmail || undefined,\n source: executionContext.source || \"whale-code\",\n }),\n });\n\n const result = await response.json() as { success: boolean; data?: unknown; error?: string };\n\n if (result.success) {\n if (result.data && typeof result.data === \"object\") {\n const dataObj = result.data as Record<string, unknown>;\n // Auto-download remote media files to local temp paths\n if (MEDIA_TOOLS.has(name)) {\n await downloadRemoteMedia(dataObj, name, input);\n }\n // Legacy: extract base64 media to temp files\n extractMediaToFiles(dataObj, name);\n }\n\n let output = typeof result.data === \"string\"\n ? result.data\n : formatServerResponse(result.data, name);\n\n // Safety cap only — Anthropic context_management handles normal limits.\n // Old limit was 30K which caused constant truncation and extra tool calls.\n const SAFETY_MAX_SERVER_CHARS = 500_000;\n if (output.length > SAFETY_MAX_SERVER_CHARS) {\n output = output.slice(0, SAFETY_MAX_SERVER_CHARS)\n + `\\n\\n... (safety truncated — ${output.length.toLocaleString()} chars total)`;\n }\n return { success: true, output };\n }\n\n // Extract error from nested data if top-level error is missing\n let errorMsg = result.error;\n if (!errorMsg && result.data && typeof result.data === \"object\") {\n const nested = (result.data as Record<string, unknown>).error;\n if (typeof nested === \"string\") errorMsg = nested;\n }\n return { success: false, output: errorMsg || `Server tool \"${name}\" returned success=false with no error message` };\n } catch (err: any) {\n return { success: false, output: `Server tool error: ${err.message || err}` };\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -4,96 +4,91 @@
|
|
|
4
4
|
* Extracted from agent-loop.ts for single-responsibility.
|
|
5
5
|
* All consumers should import from agent-loop.ts (re-export facade).
|
|
6
6
|
*/
|
|
7
|
+
|
|
7
8
|
import { readFileSync, existsSync, mkdirSync, writeFileSync, readdirSync, appendFileSync } from "fs";
|
|
8
9
|
import { join } from "path";
|
|
9
|
-
import { homedir } from "os";
|
|
10
10
|
import { getModel } from "./model-manager.js";
|
|
11
|
-
|
|
11
|
+
import { SESSIONS_DIR, APP_DATA_DIR, ensureDataDir } from "./paths.js";
|
|
12
12
|
function ensureSessionsDir() {
|
|
13
|
-
|
|
14
|
-
|
|
13
|
+
ensureDataDir();
|
|
14
|
+
if (!existsSync(SESSIONS_DIR)) mkdirSync(SESSIONS_DIR, {
|
|
15
|
+
recursive: true
|
|
16
|
+
});
|
|
15
17
|
}
|
|
16
18
|
export function saveSession(messages, sessionId) {
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
19
|
+
ensureSessionsDir();
|
|
20
|
+
const id = sessionId || `session-${Date.now()}`;
|
|
21
|
+
const meta = {
|
|
22
|
+
id,
|
|
23
|
+
title: extractSessionTitle(messages),
|
|
24
|
+
model: getModel(),
|
|
25
|
+
messageCount: messages.length,
|
|
26
|
+
createdAt: new Date().toISOString(),
|
|
27
|
+
updatedAt: new Date().toISOString(),
|
|
28
|
+
cwd: process.cwd()
|
|
29
|
+
};
|
|
30
|
+
const data = JSON.stringify({
|
|
31
|
+
meta,
|
|
32
|
+
messages
|
|
33
|
+
}, null, 2);
|
|
34
|
+
writeFileSync(join(SESSIONS_DIR, `${id}.json`), data, "utf-8");
|
|
35
|
+
logSessionHistory(meta);
|
|
36
|
+
return id;
|
|
32
37
|
}
|
|
33
38
|
export function loadSession(sessionId) {
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
return null;
|
|
42
|
-
}
|
|
39
|
+
const path = join(SESSIONS_DIR, `${sessionId}.json`);
|
|
40
|
+
if (!existsSync(path)) return null;
|
|
41
|
+
try {
|
|
42
|
+
return JSON.parse(readFileSync(path, "utf-8"));
|
|
43
|
+
} catch {
|
|
44
|
+
return null;
|
|
45
|
+
}
|
|
43
46
|
}
|
|
44
47
|
export function listSessions(limit = 20) {
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
if (data.meta)
|
|
56
|
-
sessions.push(data.meta);
|
|
57
|
-
}
|
|
58
|
-
catch { /* skip corrupted */ }
|
|
59
|
-
}
|
|
60
|
-
return sessions;
|
|
48
|
+
ensureSessionsDir();
|
|
49
|
+
const files = readdirSync(SESSIONS_DIR).filter(f => f.endsWith(".json")).sort().reverse().slice(0, limit);
|
|
50
|
+
const sessions = [];
|
|
51
|
+
for (const f of files) {
|
|
52
|
+
try {
|
|
53
|
+
const data = JSON.parse(readFileSync(join(SESSIONS_DIR, f), "utf-8"));
|
|
54
|
+
if (data.meta) sessions.push(data.meta);
|
|
55
|
+
} catch {/* skip corrupted */}
|
|
56
|
+
}
|
|
57
|
+
return sessions;
|
|
61
58
|
}
|
|
62
|
-
const HISTORY_FILE = join(
|
|
59
|
+
const HISTORY_FILE = join(APP_DATA_DIR, "history.jsonl");
|
|
63
60
|
function logSessionHistory(meta) {
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
appendFileSync(HISTORY_FILE, JSON.stringify(entry) + "\n");
|
|
76
|
-
}
|
|
77
|
-
catch { /* best effort */ }
|
|
61
|
+
try {
|
|
62
|
+
ensureDataDir();
|
|
63
|
+
const entry = {
|
|
64
|
+
display: meta.title,
|
|
65
|
+
project: meta.cwd || process.cwd(),
|
|
66
|
+
timestamp: meta.updatedAt,
|
|
67
|
+
sessionId: meta.id,
|
|
68
|
+
model: meta.model
|
|
69
|
+
};
|
|
70
|
+
appendFileSync(HISTORY_FILE, JSON.stringify(entry) + "\n");
|
|
71
|
+
} catch {/* best effort */}
|
|
78
72
|
}
|
|
79
73
|
export function findLatestSessionForCwd() {
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
74
|
+
const cwd = process.cwd();
|
|
75
|
+
const sessions = listSessions(100);
|
|
76
|
+
return sessions.find(s => s.cwd === cwd) || null;
|
|
83
77
|
}
|
|
84
78
|
function extractSessionTitle(messages) {
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
}
|
|
95
|
-
}
|
|
79
|
+
// Use first user message as title (truncated)
|
|
80
|
+
for (const m of messages) {
|
|
81
|
+
if (m.role === "user" && typeof m.content === "string") {
|
|
82
|
+
return m.content.slice(0, 60) + (m.content.length > 60 ? "..." : "");
|
|
83
|
+
}
|
|
84
|
+
if (m.role === "user" && Array.isArray(m.content)) {
|
|
85
|
+
for (const block of m.content) {
|
|
86
|
+
if ("text" in block && typeof block.text === "string") {
|
|
87
|
+
return block.text.slice(0, 60) + (block.text.length > 60 ? "..." : "");
|
|
96
88
|
}
|
|
89
|
+
}
|
|
97
90
|
}
|
|
98
|
-
|
|
91
|
+
}
|
|
92
|
+
return "Untitled session";
|
|
99
93
|
}
|
|
94
|
+
//# sourceMappingURL=session-persistence.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-persistence.js","names":["readFileSync","existsSync","mkdirSync","writeFileSync","readdirSync","appendFileSync","join","getModel","SESSIONS_DIR","APP_DATA_DIR","ensureDataDir","ensureSessionsDir","recursive","saveSession","messages","sessionId","id","Date","now","meta","title","extractSessionTitle","model","messageCount","length","createdAt","toISOString","updatedAt","cwd","process","data","JSON","stringify","logSessionHistory","loadSession","path","parse","listSessions","limit","files","filter","f","endsWith","sort","reverse","slice","sessions","push","HISTORY_FILE","entry","display","project","timestamp","findLatestSessionForCwd","find","s","m","role","content","Array","isArray","block","text"],"sources":["../../../src/cli/services/session-persistence.ts"],"sourcesContent":["/**\n * Session Persistence — save/load conversations to disk\n *\n * Extracted from agent-loop.ts for single-responsibility.\n * All consumers should import from agent-loop.ts (re-export facade).\n */\n\nimport type Anthropic from \"@anthropic-ai/sdk\";\nimport { readFileSync, existsSync, mkdirSync, writeFileSync, readdirSync, appendFileSync } from \"fs\";\nimport { join } from \"path\";\nimport { getModel } from \"./model-manager.js\";\nimport { SESSIONS_DIR, APP_DATA_DIR, ensureDataDir } from \"./paths.js\";\n\nfunction ensureSessionsDir(): void {\n ensureDataDir();\n if (!existsSync(SESSIONS_DIR)) mkdirSync(SESSIONS_DIR, { recursive: true });\n}\n\nexport interface SessionMeta {\n id: string;\n title: string;\n model: string;\n messageCount: number;\n createdAt: string;\n updatedAt: string;\n cwd?: string;\n}\n\nexport function saveSession(\n messages: Anthropic.MessageParam[],\n sessionId?: string\n): string {\n ensureSessionsDir();\n const id = sessionId || `session-${Date.now()}`;\n const meta: SessionMeta = {\n id,\n title: extractSessionTitle(messages),\n model: getModel(),\n messageCount: messages.length,\n createdAt: new Date().toISOString(),\n updatedAt: new Date().toISOString(),\n cwd: process.cwd(),\n };\n const data = JSON.stringify({ meta, messages }, null, 2);\n writeFileSync(join(SESSIONS_DIR, `${id}.json`), data, \"utf-8\");\n logSessionHistory(meta);\n return id;\n}\n\nexport function loadSession(sessionId: string): { meta: SessionMeta; messages: Anthropic.MessageParam[] } | null {\n const path = join(SESSIONS_DIR, `${sessionId}.json`);\n if (!existsSync(path)) return null;\n try {\n return JSON.parse(readFileSync(path, \"utf-8\"));\n } catch { return null; }\n}\n\nexport function listSessions(limit = 20): SessionMeta[] {\n ensureSessionsDir();\n const files = readdirSync(SESSIONS_DIR)\n .filter((f) => f.endsWith(\".json\"))\n .sort()\n .reverse()\n .slice(0, limit);\n const sessions: SessionMeta[] = [];\n for (const f of files) {\n try {\n const data = JSON.parse(readFileSync(join(SESSIONS_DIR, f), \"utf-8\"));\n if (data.meta) sessions.push(data.meta);\n } catch { /* skip corrupted */ }\n }\n return sessions;\n}\n\nconst HISTORY_FILE = join(APP_DATA_DIR, \"history.jsonl\");\n\nfunction logSessionHistory(meta: SessionMeta): void {\n try {\n ensureDataDir();\n const entry = {\n display: meta.title,\n project: meta.cwd || process.cwd(),\n timestamp: meta.updatedAt,\n sessionId: meta.id,\n model: meta.model,\n };\n appendFileSync(HISTORY_FILE, JSON.stringify(entry) + \"\\n\");\n } catch { /* best effort */ }\n}\n\nexport function findLatestSessionForCwd(): SessionMeta | null {\n const cwd = process.cwd();\n const sessions = listSessions(100);\n return sessions.find(s => s.cwd === cwd) || null;\n}\n\nfunction extractSessionTitle(messages: Anthropic.MessageParam[]): string {\n // Use first user message as title (truncated)\n for (const m of messages) {\n if (m.role === \"user\" && typeof m.content === \"string\") {\n return m.content.slice(0, 60) + (m.content.length > 60 ? \"...\" : \"\");\n }\n if (m.role === \"user\" && Array.isArray(m.content)) {\n for (const block of m.content) {\n if (\"text\" in block && typeof block.text === \"string\") {\n return block.text.slice(0, 60) + (block.text.length > 60 ? \"...\" : \"\");\n }\n }\n }\n }\n return \"Untitled session\";\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;;AAGA,SAASA,YAAY,EAAEC,UAAU,EAAEC,SAAS,EAAEC,aAAa,EAAEC,WAAW,EAAEC,cAAc,QAAQ,IAAI;AACpG,SAASC,IAAI,QAAQ,MAAM;AAC3B,SAASC,QAAQ,QAAQ,oBAAoB;AAC7C,SAASC,YAAY,EAAEC,YAAY,EAAEC,aAAa,QAAQ,YAAY;AAEtE,SAASC,iBAAiBA,CAAA,EAAS;EACjCD,aAAa,CAAC,CAAC;EACf,IAAI,CAACT,UAAU,CAACO,YAAY,CAAC,EAAEN,SAAS,CAACM,YAAY,EAAE;IAAEI,SAAS,EAAE;EAAK,CAAC,CAAC;AAC7E;AAYA,OAAO,SAASC,WAAWA,CACzBC,QAAkC,EAClCC,SAAkB,EACV;EACRJ,iBAAiB,CAAC,CAAC;EACnB,MAAMK,EAAE,GAAGD,SAAS,IAAI,WAAWE,IAAI,CAACC,GAAG,CAAC,CAAC,EAAE;EAC/C,MAAMC,IAAiB,GAAG;IACxBH,EAAE;IACFI,KAAK,EAAEC,mBAAmB,CAACP,QAAQ,CAAC;IACpCQ,KAAK,EAAEf,QAAQ,CAAC,CAAC;IACjBgB,YAAY,EAAET,QAAQ,CAACU,MAAM;IAC7BC,SAAS,EAAE,IAAIR,IAAI,CAAC,CAAC,CAACS,WAAW,CAAC,CAAC;IACnCC,SAAS,EAAE,IAAIV,IAAI,CAAC,CAAC,CAACS,WAAW,CAAC,CAAC;IACnCE,GAAG,EAAEC,OAAO,CAACD,GAAG,CAAC;EACnB,CAAC;EACD,MAAME,IAAI,GAAGC,IAAI,CAACC,SAAS,CAAC;IAAEb,IAAI;IAAEL;EAAS,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;EACxDX,aAAa,CAACG,IAAI,CAACE,YAAY,EAAE,GAAGQ,EAAE,OAAO,CAAC,EAAEc,IAAI,EAAE,OAAO,CAAC;EAC9DG,iBAAiB,CAACd,IAAI,CAAC;EACvB,OAAOH,EAAE;AACX;AAEA,OAAO,SAASkB,WAAWA,CAACnB,SAAiB,EAAoE;EAC/G,MAAMoB,IAAI,GAAG7B,IAAI,CAACE,YAAY,EAAE,GAAGO,SAAS,OAAO,CAAC;EACpD,IAAI,CAACd,UAAU,CAACkC,IAAI,CAAC,EAAE,OAAO,IAAI;EAClC,IAAI;IACF,OAAOJ,IAAI,CAACK,KAAK,CAACpC,YAAY,CAACmC,IAAI,EAAE,OAAO,CAAC,CAAC;EAChD,CAAC,CAAC,MAAM;IAAE,OAAO,IAAI;EAAE;AACzB;AAEA,OAAO,SAASE,YAAYA,CAACC,KAAK,GAAG,EAAE,EAAiB;EACtD3B,iBAAiB,CAAC,CAAC;EACnB,MAAM4B,KAAK,GAAGnC,WAAW,CAACI,YAAY,CAAC,CACpCgC,MAAM,CAAEC,CAAC,IAAKA,CAAC,CAACC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAClCC,IAAI,CAAC,CAAC,CACNC,OAAO,CAAC,CAAC,CACTC,KAAK,CAAC,CAAC,EAAEP,KAAK,CAAC;EAClB,MAAMQ,QAAuB,GAAG,EAAE;EAClC,KAAK,MAAML,CAAC,IAAIF,KAAK,EAAE;IACrB,IAAI;MACF,MAAMT,IAAI,GAAGC,IAAI,CAACK,KAAK,CAACpC,YAAY,CAACM,IAAI,CAACE,YAAY,EAAEiC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;MACrE,IAAIX,IAAI,CAACX,IAAI,EAAE2B,QAAQ,CAACC,IAAI,CAACjB,IAAI,CAACX,IAAI,CAAC;IACzC,CAAC,CAAC,MAAM,CAAE;EACZ;EACA,OAAO2B,QAAQ;AACjB;AAEA,MAAME,YAAY,GAAG1C,IAAI,CAACG,YAAY,EAAE,eAAe,CAAC;AAExD,SAASwB,iBAAiBA,CAACd,IAAiB,EAAQ;EAClD,IAAI;IACFT,aAAa,CAAC,CAAC;IACf,MAAMuC,KAAK,GAAG;MACZC,OAAO,EAAE/B,IAAI,CAACC,KAAK;MACnB+B,OAAO,EAAEhC,IAAI,CAACS,GAAG,IAAIC,OAAO,CAACD,GAAG,CAAC,CAAC;MAClCwB,SAAS,EAAEjC,IAAI,CAACQ,SAAS;MACzBZ,SAAS,EAAEI,IAAI,CAACH,EAAE;MAClBM,KAAK,EAAEH,IAAI,CAACG;IACd,CAAC;IACDjB,cAAc,CAAC2C,YAAY,EAAEjB,IAAI,CAACC,SAAS,CAACiB,KAAK,CAAC,GAAG,IAAI,CAAC;EAC5D,CAAC,CAAC,MAAM,CAAE;AACZ;AAEA,OAAO,SAASI,uBAAuBA,CAAA,EAAuB;EAC5D,MAAMzB,GAAG,GAAGC,OAAO,CAACD,GAAG,CAAC,CAAC;EACzB,MAAMkB,QAAQ,GAAGT,YAAY,CAAC,GAAG,CAAC;EAClC,OAAOS,QAAQ,CAACQ,IAAI,CAACC,CAAC,IAAIA,CAAC,CAAC3B,GAAG,KAAKA,GAAG,CAAC,IAAI,IAAI;AAClD;AAEA,SAASP,mBAAmBA,CAACP,QAAkC,EAAU;EACvE;EACA,KAAK,MAAM0C,CAAC,IAAI1C,QAAQ,EAAE;IACxB,IAAI0C,CAAC,CAACC,IAAI,KAAK,MAAM,IAAI,OAAOD,CAAC,CAACE,OAAO,KAAK,QAAQ,EAAE;MACtD,OAAOF,CAAC,CAACE,OAAO,CAACb,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,IAAIW,CAAC,CAACE,OAAO,CAAClC,MAAM,GAAG,EAAE,GAAG,KAAK,GAAG,EAAE,CAAC;IACtE;IACA,IAAIgC,CAAC,CAACC,IAAI,KAAK,MAAM,IAAIE,KAAK,CAACC,OAAO,CAACJ,CAAC,CAACE,OAAO,CAAC,EAAE;MACjD,KAAK,MAAMG,KAAK,IAAIL,CAAC,CAACE,OAAO,EAAE;QAC7B,IAAI,MAAM,IAAIG,KAAK,IAAI,OAAOA,KAAK,CAACC,IAAI,KAAK,QAAQ,EAAE;UACrD,OAAOD,KAAK,CAACC,IAAI,CAACjB,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,IAAIgB,KAAK,CAACC,IAAI,CAACtC,MAAM,GAAG,EAAE,GAAG,KAAK,GAAG,EAAE,CAAC;QACxE;MACF;IACF;EACF;EACA,OAAO,kBAAkB;AAC3B","ignoreList":[]}
|
|
@@ -6,36 +6,51 @@
|
|
|
6
6
|
* This worker runs `runSubagent()` in isolation, keeping the main thread
|
|
7
7
|
* (and Ink UI) responsive. Results are posted back via parentPort.
|
|
8
8
|
*/
|
|
9
|
+
|
|
9
10
|
import { parentPort, workerData } from "worker_threads";
|
|
10
11
|
import { runSubagent } from "./subagent.js";
|
|
11
12
|
async function main() {
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
13
|
+
if (!parentPort) {
|
|
14
|
+
console.error("subagent-worker must be run as a worker thread");
|
|
15
|
+
process.exit(1);
|
|
16
|
+
}
|
|
17
|
+
const {
|
|
18
|
+
options,
|
|
19
|
+
index
|
|
20
|
+
} = workerData;
|
|
21
|
+
|
|
22
|
+
// Send progress updates (optional, for debugging)
|
|
23
|
+
const reportProgress = msg => {
|
|
24
|
+
parentPort.postMessage({
|
|
25
|
+
type: "progress",
|
|
26
|
+
index,
|
|
27
|
+
message: msg
|
|
28
|
+
});
|
|
29
|
+
};
|
|
30
|
+
try {
|
|
31
|
+
reportProgress(`Starting ${options.subagent_type} subagent...`);
|
|
32
|
+
const result = await runSubagent(options);
|
|
33
|
+
reportProgress(`Completed ${options.subagent_type} subagent`);
|
|
34
|
+
const response = {
|
|
35
|
+
success: true,
|
|
36
|
+
index,
|
|
37
|
+
result
|
|
20
38
|
};
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
error: err.message || String(err),
|
|
37
|
-
};
|
|
38
|
-
parentPort.postMessage({ type: "result", ...response });
|
|
39
|
-
}
|
|
39
|
+
parentPort.postMessage({
|
|
40
|
+
type: "result",
|
|
41
|
+
...response
|
|
42
|
+
});
|
|
43
|
+
} catch (err) {
|
|
44
|
+
const response = {
|
|
45
|
+
success: false,
|
|
46
|
+
index,
|
|
47
|
+
error: err.message || String(err)
|
|
48
|
+
};
|
|
49
|
+
parentPort.postMessage({
|
|
50
|
+
type: "result",
|
|
51
|
+
...response
|
|
52
|
+
});
|
|
53
|
+
}
|
|
40
54
|
}
|
|
41
55
|
main();
|
|
56
|
+
//# sourceMappingURL=subagent-worker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"subagent-worker.js","names":["parentPort","workerData","runSubagent","main","console","error","process","exit","options","index","reportProgress","msg","postMessage","type","message","subagent_type","result","response","success","err","String"],"sources":["../../../src/cli/services/subagent-worker.ts"],"sourcesContent":["/**\n * Subagent Worker — runs in separate thread to not block UI\n *\n * Usage: Spawned by parallel_tasks via worker_threads\n *\n * This worker runs `runSubagent()` in isolation, keeping the main thread\n * (and Ink UI) responsive. Results are posted back via parentPort.\n */\n\nimport { parentPort, workerData } from \"worker_threads\";\nimport { runSubagent, type SubagentOptions, type SubagentResult } from \"./subagent.js\";\n\nexport interface WorkerData {\n options: SubagentOptions;\n index: number; // Task index for result ordering\n}\n\nexport interface WorkerResult {\n success: boolean;\n index: number;\n result?: SubagentResult;\n error?: string;\n}\n\nasync function main() {\n if (!parentPort) {\n console.error(\"subagent-worker must be run as a worker thread\");\n process.exit(1);\n }\n\n const { options, index } = workerData as WorkerData;\n\n // Send progress updates (optional, for debugging)\n const reportProgress = (msg: string) => {\n parentPort!.postMessage({ type: \"progress\", index, message: msg });\n };\n\n try {\n reportProgress(`Starting ${options.subagent_type} subagent...`);\n\n const result = await runSubagent(options);\n\n reportProgress(`Completed ${options.subagent_type} subagent`);\n\n const response: WorkerResult = {\n success: true,\n index,\n result,\n };\n parentPort.postMessage({ type: \"result\", ...response });\n } catch (err: any) {\n const response: WorkerResult = {\n success: false,\n index,\n error: err.message || String(err),\n };\n parentPort.postMessage({ type: \"result\", ...response });\n }\n}\n\nmain();\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASA,UAAU,EAAEC,UAAU,QAAQ,gBAAgB;AACvD,SAASC,WAAW,QAAmD,eAAe;AActF,eAAeC,IAAIA,CAAA,EAAG;EACpB,IAAI,CAACH,UAAU,EAAE;IACfI,OAAO,CAACC,KAAK,CAAC,gDAAgD,CAAC;IAC/DC,OAAO,CAACC,IAAI,CAAC,CAAC,CAAC;EACjB;EAEA,MAAM;IAAEC,OAAO;IAAEC;EAAM,CAAC,GAAGR,UAAwB;;EAEnD;EACA,MAAMS,cAAc,GAAIC,GAAW,IAAK;IACtCX,UAAU,CAAEY,WAAW,CAAC;MAAEC,IAAI,EAAE,UAAU;MAAEJ,KAAK;MAAEK,OAAO,EAAEH;IAAI,CAAC,CAAC;EACpE,CAAC;EAED,IAAI;IACFD,cAAc,CAAC,YAAYF,OAAO,CAACO,aAAa,cAAc,CAAC;IAE/D,MAAMC,MAAM,GAAG,MAAMd,WAAW,CAACM,OAAO,CAAC;IAEzCE,cAAc,CAAC,aAAaF,OAAO,CAACO,aAAa,WAAW,CAAC;IAE7D,MAAME,QAAsB,GAAG;MAC7BC,OAAO,EAAE,IAAI;MACbT,KAAK;MACLO;IACF,CAAC;IACDhB,UAAU,CAACY,WAAW,CAAC;MAAEC,IAAI,EAAE,QAAQ;MAAE,GAAGI;IAAS,CAAC,CAAC;EACzD,CAAC,CAAC,OAAOE,GAAQ,EAAE;IACjB,MAAMF,QAAsB,GAAG;MAC7BC,OAAO,EAAE,KAAK;MACdT,KAAK;MACLJ,KAAK,EAAEc,GAAG,CAACL,OAAO,IAAIM,MAAM,CAACD,GAAG;IAClC,CAAC;IACDnB,UAAU,CAACY,WAAW,CAAC;MAAEC,IAAI,EAAE,QAAQ;MAAE,GAAGI;IAAS,CAAC,CAAC;EACzD;AACF;AAEAd,IAAI,CAAC,CAAC","ignoreList":[]}
|