whale-code 6.5.6 → 6.5.8
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 +15 -3
- package/bin/whale-code.js +23 -0
- package/dist/cli/__tests__/print-mode-streaming.test.js +270 -0
- package/dist/cli/__tests__/print-mode.basic-output.test.js +230 -0
- package/dist/cli/__tests__/print-mode.session-errors.test.js +252 -0
- package/dist/cli/__tests__/print-mode.test.js +273 -0
- package/dist/cli/__tests__/serve-mode-messages.test.js +338 -0
- package/dist/cli/__tests__/serve-mode.messages.part2.test.js +266 -0
- package/dist/cli/__tests__/serve-mode.messages.test.js +277 -0
- package/dist/cli/__tests__/serve-mode.startup-http.test.js +279 -0
- package/dist/cli/__tests__/serve-mode.test.js +345 -0
- package/dist/cli/app.d.ts +1 -0
- package/dist/cli/app.js +8 -2
- package/dist/cli/app.js.map +1 -1
- package/dist/cli/chat/ChatApp.d.ts +8 -36
- package/dist/cli/chat/ChatApp.js +135 -450
- package/dist/cli/chat/ChatApp.js.map +1 -1
- package/dist/cli/chat/ChatInput.d.ts +3 -2
- package/dist/cli/chat/ChatInput.js +37 -14
- package/dist/cli/chat/ChatInput.js.map +1 -1
- package/dist/cli/chat/ImsgManager.d.ts +20 -0
- package/dist/cli/chat/ImsgManager.js +341 -0
- package/dist/cli/chat/ImsgManager.js.map +1 -0
- package/dist/cli/chat/MarkdownText.d.ts +2 -1
- package/dist/cli/chat/MarkdownText.js +12 -8
- package/dist/cli/chat/MarkdownText.js.map +1 -1
- package/dist/cli/chat/MemoryManager.js +3 -2
- package/dist/cli/chat/MemoryManager.js.map +1 -1
- package/dist/cli/chat/MessageList.d.ts +1 -1
- package/dist/cli/chat/MessageList.js +119 -114
- package/dist/cli/chat/MessageList.js.map +1 -1
- package/dist/cli/chat/NodeManager.js +57 -170
- package/dist/cli/chat/NodeManager.js.map +1 -1
- package/dist/cli/chat/OverlayContext.d.ts +27 -0
- package/dist/cli/chat/OverlayContext.js +2 -0
- package/dist/cli/chat/OverlayContext.js.map +1 -0
- package/dist/cli/chat/PlanApproval.js +3 -2
- package/dist/cli/chat/PlanApproval.js.map +1 -1
- package/dist/cli/chat/RewindConfirmation.d.ts +12 -0
- package/dist/cli/chat/RewindConfirmation.js +243 -0
- package/dist/cli/chat/RewindConfirmation.js.map +1 -0
- package/dist/cli/chat/RewindViewer.js +5 -4
- package/dist/cli/chat/RewindViewer.js.map +1 -1
- package/dist/cli/chat/SessionManager.js +3 -2
- package/dist/cli/chat/SessionManager.js.map +1 -1
- package/dist/cli/chat/SlashMenu.d.ts +7 -24
- package/dist/cli/chat/SlashMenu.js +14 -183
- package/dist/cli/chat/SlashMenu.js.map +1 -1
- package/dist/cli/chat/StatusBar.d.ts +5 -2
- package/dist/cli/chat/StatusBar.js +80 -65
- package/dist/cli/chat/StatusBar.js.map +1 -1
- package/dist/cli/chat/StreamingText.d.ts +2 -1
- package/dist/cli/chat/StreamingText.js +2 -2
- package/dist/cli/chat/StreamingText.js.map +1 -1
- package/dist/cli/chat/SubagentPanel.d.ts +6 -6
- package/dist/cli/chat/SubagentPanel.js +159 -537
- package/dist/cli/chat/SubagentPanel.js.map +1 -1
- package/dist/cli/chat/TeamPanel.js +2 -30
- package/dist/cli/chat/TeamPanel.js.map +1 -1
- package/dist/cli/chat/ToolIndicator.d.ts +7 -23
- package/dist/cli/chat/ToolIndicator.js +543 -1443
- package/dist/cli/chat/ToolIndicator.js.map +1 -1
- package/dist/cli/chat/chat-input-menu-handler.d.ts +32 -0
- package/dist/cli/chat/components/LiveArea.d.ts +12 -0
- package/dist/cli/chat/components/LiveArea.js +252 -0
- package/dist/cli/chat/components/LiveArea.js.map +1 -0
- package/dist/cli/chat/components/OverlayRouter.d.ts +13 -0
- package/dist/cli/chat/components/OverlayRouter.js +257 -0
- package/dist/cli/chat/components/OverlayRouter.js.map +1 -0
- package/dist/cli/chat/components/StaticMessages.d.ts +9 -0
- package/dist/cli/chat/components/StaticMessages.js +132 -0
- package/dist/cli/chat/components/StaticMessages.js.map +1 -0
- package/dist/cli/chat/hooks/agent-loop-events.d.ts +77 -0
- package/dist/cli/chat/hooks/agent-loop-events.js +171 -0
- package/dist/cli/chat/hooks/agent-loop-events.js.map +1 -0
- package/dist/cli/chat/hooks/slash-command-config-system.d.ts +11 -0
- package/dist/cli/chat/hooks/slash-command-config-system.js +177 -0
- package/dist/cli/chat/hooks/slash-command-config-system.js.map +1 -0
- package/dist/cli/chat/hooks/slash-command-handlers-system.d.ts +12 -0
- package/dist/cli/chat/hooks/slash-command-handlers-system.js +127 -0
- package/dist/cli/chat/hooks/slash-command-handlers-system.js.map +1 -0
- package/dist/cli/chat/hooks/slash-command-handlers.d.ts +21 -0
- package/dist/cli/chat/hooks/slash-command-handlers.js +222 -0
- package/dist/cli/chat/hooks/slash-command-handlers.js.map +1 -0
- package/dist/cli/chat/hooks/slash-imsg-handlers.js +148 -0
- package/dist/cli/chat/hooks/slash-imsg-handlers.js.map +1 -0
- package/dist/cli/chat/hooks/slash-node-handlers.d.ts +26 -0
- package/dist/cli/chat/hooks/slash-node-handlers.js +226 -0
- package/dist/cli/chat/hooks/slash-node-handlers.js.map +1 -0
- package/dist/cli/chat/hooks/useAgentLoop.d.ts +2 -21
- package/dist/cli/chat/hooks/useAgentLoop.js +258 -401
- package/dist/cli/chat/hooks/useAgentLoop.js.map +1 -1
- package/dist/cli/chat/hooks/useElapsedClock.d.ts +19 -0
- package/dist/cli/chat/hooks/useElapsedClock.js +80 -0
- package/dist/cli/chat/hooks/useElapsedClock.js.map +1 -0
- package/dist/cli/chat/hooks/useOverlayHandlers.d.ts +23 -0
- package/dist/cli/chat/hooks/useOverlayHandlers.js +125 -0
- package/dist/cli/chat/hooks/useOverlayHandlers.js.map +1 -0
- package/dist/cli/chat/hooks/useSlashCommands.d.ts +14 -22
- package/dist/cli/chat/hooks/useSlashCommands.js +99 -720
- package/dist/cli/chat/hooks/useSlashCommands.js.map +1 -1
- package/dist/cli/chat/hooks/useStreamingReducer.d.ts +66 -0
- package/dist/cli/chat/imsg-manager-render.d.ts +29 -0
- package/dist/cli/chat/imsg-manager-render.js +294 -0
- package/dist/cli/chat/imsg-manager-render.js.map +1 -0
- package/dist/cli/chat/slash-commands.d.ts +37 -0
- package/dist/cli/chat/slash-commands.js +194 -0
- package/dist/cli/chat/slash-commands.js.map +1 -0
- package/dist/cli/chat/store.d.ts +115 -0
- package/dist/cli/chat/store.js +177 -0
- package/dist/cli/chat/store.js.map +1 -0
- package/dist/cli/chat/tool-indicator-helpers.d.ts +14 -0
- package/dist/cli/chat/tool-indicator-helpers.js +167 -0
- package/dist/cli/chat/tool-indicator-helpers.js.map +1 -0
- package/dist/cli/chat/tool-indicator-summary.d.ts +6 -0
- package/dist/cli/chat/tool-indicator-summary.js +103 -0
- package/dist/cli/chat/tool-indicator-summary.js.map +1 -0
- package/dist/cli/chat/tool-indicator-types.d.ts +66 -0
- package/dist/cli/chat/tool-indicator-types.js +177 -0
- package/dist/cli/chat/tool-indicator-types.js.map +1 -0
- package/dist/cli/commands/__tests__/config-cmd.test.js +270 -0
- package/dist/cli/commands/__tests__/doctor.test.js +257 -0
- package/dist/cli/commands/__tests__/imsg-node-bridge.test.js +99 -0
- package/dist/cli/commands/__tests__/imsg-utils.test.js +73 -0
- package/dist/cli/commands/__tests__/init.test.js +214 -0
- package/dist/cli/commands/__tests__/mcp.test.js +287 -0
- package/dist/cli/commands/imsg-config.d.ts +31 -0
- package/dist/cli/commands/imsg-config.js +104 -0
- package/dist/cli/commands/imsg-config.js.map +1 -0
- package/dist/cli/commands/imsg-node-bridge.d.ts +25 -0
- package/dist/cli/commands/imsg-node-bridge.js +229 -0
- package/dist/cli/commands/imsg-node-bridge.js.map +1 -0
- package/dist/cli/commands/imsg-utils.d.ts +14 -0
- package/dist/cli/commands/imsg-utils.js +42 -0
- package/dist/cli/commands/imsg-utils.js.map +1 -0
- package/dist/cli/commands/imsg-watcher-helpers.d.ts +40 -0
- package/dist/cli/commands/imsg-watcher-helpers.js +184 -0
- package/dist/cli/commands/imsg-watcher-helpers.js.map +1 -0
- package/dist/cli/commands/imsg-watcher.d.ts +11 -0
- package/dist/cli/commands/imsg-watcher.js +230 -0
- package/dist/cli/commands/imsg-watcher.js.map +1 -0
- package/dist/cli/commands/imsg.d.ts +14 -0
- package/dist/cli/commands/imsg.js +181 -0
- package/dist/cli/commands/imsg.js.map +1 -0
- package/dist/cli/commands/sessions.d.ts +9 -0
- package/dist/cli/commands/sessions.js +93 -0
- package/dist/cli/commands/sessions.js.map +1 -0
- package/dist/cli/login/LoginApp.js +3 -0
- package/dist/cli/login/LoginApp.js.map +1 -1
- package/dist/cli/serve-mode-persistence.d.ts +18 -0
- package/dist/cli/serve-mode-persistence.js +157 -0
- package/dist/cli/serve-mode-persistence.js.map +1 -0
- package/dist/cli/serve-mode-query.d.ts +9 -0
- package/dist/cli/serve-mode-query.js +247 -0
- package/dist/cli/serve-mode-query.js.map +1 -0
- package/dist/cli/serve-mode-types.d.ts +29 -0
- package/dist/cli/serve-mode-types.js +56 -0
- package/dist/cli/serve-mode-types.js.map +1 -0
- package/dist/cli/services/__tests__/agent-definitions.test.js +153 -0
- package/dist/cli/services/__tests__/agent-events-global.test.js +39 -0
- package/dist/cli/services/__tests__/agent-events.part2.test.js +113 -0
- package/dist/cli/services/__tests__/agent-events.test.js +157 -0
- package/dist/cli/services/__tests__/agent-loop-auth.test.js +392 -0
- package/dist/cli/services/__tests__/agent-loop-budget.test.js +389 -0
- package/dist/cli/services/__tests__/agent-loop-tools-lifecycle.test.js +430 -0
- package/dist/cli/services/__tests__/agent-loop-tools-maxturns.test.js +486 -0
- package/dist/cli/services/__tests__/agent-loop-utils-execution.test.js +528 -0
- package/dist/cli/services/__tests__/agent-loop-utils-helpers.test.js +466 -0
- package/dist/cli/services/__tests__/agent-worker-base-execute.test.js +257 -0
- package/dist/cli/services/__tests__/agent-worker-base-helpers.test.js +198 -0
- package/dist/cli/services/__tests__/agent-worker-base.test.js +278 -0
- package/dist/cli/services/__tests__/auth-service-exports.test.js +41 -0
- package/dist/cli/services/__tests__/auth-service.part2.test.js +169 -0
- package/dist/cli/services/__tests__/auth-service.test.js +242 -0
- package/dist/cli/services/__tests__/background-processes.test.js +282 -0
- package/dist/cli/services/__tests__/claude-md-loader.test.js +134 -0
- package/dist/cli/services/__tests__/config-store.test.js +247 -0
- package/dist/cli/services/__tests__/debug-log.test.js +199 -0
- package/dist/cli/services/__tests__/edge-cases-caching.test.js +174 -0
- package/dist/cli/services/__tests__/edge-cases-compaction-core.test.js +226 -0
- package/dist/cli/services/__tests__/edge-cases-compaction-openai.test.js +152 -0
- package/dist/cli/services/__tests__/edge-cases-compaction-shapes.test.js +53 -0
- package/dist/cli/services/__tests__/edge-cases-compaction-thinking.test.js +226 -0
- package/dist/cli/services/__tests__/edge-cases-compaction.test.js +131 -0
- package/dist/cli/services/__tests__/edge-cases-paths.test.js +86 -0
- package/dist/cli/services/__tests__/error-logger-messages.test.js +81 -0
- package/dist/cli/services/__tests__/error-logger-transport.test.js +119 -0
- package/dist/cli/services/__tests__/error-logger.test.js +264 -0
- package/dist/cli/services/__tests__/file-history.test.js +136 -0
- package/dist/cli/services/__tests__/git-context-cache-reset.test.js +223 -0
- package/dist/cli/services/__tests__/git-context.test.js +241 -0
- package/dist/cli/services/__tests__/interactive-tools-execute.test.js +166 -0
- package/dist/cli/services/__tests__/interactive-tools-plan.test.js +197 -0
- package/dist/cli/services/__tests__/interactive-tools.part2.test.js +168 -0
- package/dist/cli/services/__tests__/interactive-tools.test.js +179 -0
- package/dist/cli/services/__tests__/keybinding-manager.test.js +205 -0
- package/dist/cli/services/__tests__/local-tools-dispatch.test.js +404 -0
- package/dist/cli/services/__tests__/local-tools.test.js +238 -0
- package/dist/cli/services/__tests__/lsp-manager.test.js +364 -0
- package/dist/cli/services/__tests__/mcp-client-connect-disconnect.test.js +310 -0
- package/dist/cli/services/__tests__/mcp-client.test.js +93 -0
- package/dist/cli/services/__tests__/memory-manager.test.js +154 -0
- package/dist/cli/services/__tests__/model-manager-utils.test.js +154 -0
- package/dist/cli/services/__tests__/model-manager.test.js +175 -0
- package/dist/cli/services/__tests__/permission-modes.test.js +222 -0
- package/dist/cli/services/__tests__/ripgrep.test.js +328 -0
- package/dist/cli/services/__tests__/server-tools-execute.test.js +317 -0
- package/dist/cli/services/__tests__/server-tools.test.js +272 -0
- package/dist/cli/services/__tests__/session-persistence.test.js +245 -0
- package/dist/cli/services/__tests__/subagent-basic.test.js +489 -0
- package/dist/cli/services/__tests__/subagent-edge.test.js +545 -0
- package/dist/cli/services/__tests__/subagent-prompts.test.js +558 -0
- package/dist/cli/services/__tests__/subagent-worker-errors.test.js +255 -0
- package/dist/cli/services/__tests__/subagent-worker.test.js +242 -0
- package/dist/cli/services/__tests__/system-prompt.test.js +210 -0
- package/dist/cli/services/__tests__/team-lead-comms-messaging.test.js +250 -0
- package/dist/cli/services/__tests__/team-lead-comms-result.test.js +232 -0
- package/dist/cli/services/__tests__/team-lead-comms-stop.test.js +344 -0
- package/dist/cli/services/__tests__/team-lead-comms.test.js +285 -0
- package/dist/cli/services/__tests__/team-lead-create.test.js +327 -0
- package/dist/cli/services/__tests__/team-lead-run.test.js +318 -0
- package/dist/cli/services/__tests__/team-lead-stop.test.js +199 -0
- package/dist/cli/services/__tests__/team-state-comms.test.js +240 -0
- package/dist/cli/services/__tests__/team-state-core.test.js +230 -0
- package/dist/cli/services/__tests__/team-state-tasks-complete-fail-available.test.js +224 -0
- package/dist/cli/services/__tests__/team-state-tasks.test.js +184 -0
- package/dist/cli/services/__tests__/telemetry-ai-metadata.test.js +116 -0
- package/dist/cli/services/__tests__/telemetry.part2.test.js +195 -0
- package/dist/cli/services/__tests__/telemetry.test.js +176 -0
- package/dist/cli/services/agent-event-types.d.ts +148 -0
- package/dist/cli/services/agent-event-types.js +2 -0
- package/dist/cli/services/agent-event-types.js.map +1 -0
- package/dist/cli/services/agent-loop-iteration.d.ts +13 -0
- package/dist/cli/services/agent-loop-setup.d.ts +32 -0
- package/dist/cli/services/agent-loop-shell-summarize.d.ts +11 -0
- package/dist/cli/services/agent-loop-shell-summarize.js +94 -0
- package/dist/cli/services/agent-loop-shell-summarize.js.map +1 -0
- package/dist/cli/services/agent-loop-tools.d.ts +37 -0
- package/dist/cli/services/agent-loop-tools.js +243 -0
- package/dist/cli/services/agent-loop-tools.js.map +1 -0
- package/dist/cli/services/agent-loop-types.d.ts +52 -0
- package/dist/cli/services/agent-loop-types.js +25 -0
- package/dist/cli/services/agent-loop-types.js.map +1 -0
- package/dist/cli/services/agent-loop.d.ts +2 -2
- package/dist/cli/services/agent-loop.js +162 -17
- package/dist/cli/services/agent-loop.js.map +1 -1
- package/dist/cli/services/agent-worker-base-api.d.ts +19 -0
- package/dist/cli/services/agent-worker-base-helpers.d.ts +27 -0
- package/dist/cli/services/agent-worker-base-tools.d.ts +16 -0
- package/dist/cli/services/agent-worker-base-types.d.ts +81 -0
- package/dist/cli/services/agent-worker-base.js +1 -1
- package/dist/cli/services/agent-worker-base.js.map +1 -1
- package/dist/cli/services/auth-service.js +19 -19
- package/dist/cli/services/auth-service.js.map +1 -1
- package/dist/cli/services/background-agents.d.ts +26 -0
- package/dist/cli/services/background-processes-ops.d.ts +24 -0
- package/dist/cli/services/background-processes.d.ts +2 -1
- package/dist/cli/services/background-processes.js +7 -3
- package/dist/cli/services/background-processes.js.map +1 -1
- package/dist/cli/services/background-tool-defs.d.ts +50 -0
- package/dist/cli/services/cli-agent-loop.d.ts +41 -0
- package/dist/cli/services/cli-agent-loop.js +104 -0
- package/dist/cli/services/cli-agent-loop.js.map +1 -0
- package/dist/cli/services/config-modules-model.test.js +133 -0
- package/dist/cli/services/config-modules-permission.test.js +85 -0
- package/dist/cli/services/config-modules-permissions.test.js +85 -0
- package/dist/cli/services/config-modules-session.test.js +297 -0
- package/dist/cli/services/config-store.d.ts +5 -0
- package/dist/cli/services/config-store.js +90 -5
- package/dist/cli/services/config-store.js.map +1 -1
- package/dist/cli/services/error-logger-internals.d.ts +25 -0
- package/dist/cli/services/error-logger-internals.js +111 -0
- package/dist/cli/services/error-logger-internals.js.map +1 -0
- package/dist/cli/services/format-server-response-columns.test.js +265 -0
- package/dist/cli/services/format-server-response-fallback.test.js +65 -0
- package/dist/cli/services/format-server-response-formatters.d.ts +18 -0
- package/dist/cli/services/format-server-response-formatters.js +195 -0
- package/dist/cli/services/format-server-response-formatters.js.map +1 -0
- package/dist/cli/services/format-server-response-primitives-basic.test.js +261 -0
- package/dist/cli/services/format-server-response-primitives-nested.test.js +188 -0
- package/dist/cli/services/format-server-response-primitives.test.js +300 -0
- package/dist/cli/services/format-server-response-realworld.test.js +248 -0
- package/dist/cli/services/format-server-response-values.test.js +247 -0
- package/dist/cli/services/format-server-response.js +5 -3
- package/dist/cli/services/format-server-response.js.map +1 -1
- package/dist/cli/services/hooks-execute.d.ts +47 -0
- package/dist/cli/services/hooks-execute.js +181 -0
- package/dist/cli/services/hooks-execute.js.map +1 -0
- package/dist/cli/services/hooks-runners.test.js +184 -0
- package/dist/cli/services/hooks.glob-load.test.js +233 -0
- package/dist/cli/services/hooks.run-hooks.test.js +184 -0
- package/dist/cli/services/hooks.test.js +233 -0
- package/dist/cli/services/interactive-tool-defs.d.ts +80 -0
- package/dist/cli/services/interactive-tools.d.ts +5 -2
- package/dist/cli/services/interactive-tools.js +47 -33
- package/dist/cli/services/interactive-tools.js.map +1 -1
- package/dist/cli/services/keybinding-manager.d.ts +2 -0
- package/dist/cli/services/keybinding-manager.js +5 -0
- package/dist/cli/services/keybinding-manager.js.map +1 -1
- package/dist/cli/services/local-tools-agent-defs-tasks.d.ts +6 -0
- package/dist/cli/services/local-tools-agent-defs-tasks.js +245 -0
- package/dist/cli/services/local-tools-agent-defs-tasks.js.map +1 -0
- package/dist/cli/services/local-tools-agent-defs-utils.d.ts +6 -0
- package/dist/cli/services/local-tools-agent-defs-utils.js +198 -0
- package/dist/cli/services/local-tools-agent-defs-utils.js.map +1 -0
- package/dist/cli/services/local-tools-agent-defs.d.ts +10 -0
- package/dist/cli/services/local-tools-agent-defs.js +13 -0
- package/dist/cli/services/local-tools-agent-defs.js.map +1 -0
- package/dist/cli/services/local-tools-definitions.d.ts +6 -0
- package/dist/cli/services/local-tools-files.test.js +256 -0
- package/dist/cli/services/local-tools-read-many.d.ts +6 -0
- package/dist/cli/services/local-tools.js +7 -9
- package/dist/cli/services/local-tools.js.map +1 -1
- package/dist/cli/services/lsp-config.d.ts +13 -0
- package/dist/cli/services/lsp-config.js +72 -0
- package/dist/cli/services/lsp-config.js.map +1 -0
- package/dist/cli/services/lsp-formatters.d.ts +11 -0
- package/dist/cli/services/lsp-formatters.js +209 -0
- package/dist/cli/services/lsp-formatters.js.map +1 -0
- package/dist/cli/services/lsp-protocol.d.ts +9 -0
- package/dist/cli/services/lsp-protocol.js +40 -0
- package/dist/cli/services/lsp-protocol.js.map +1 -0
- package/dist/cli/services/lsp-server-docs.d.ts +8 -0
- package/dist/cli/services/lsp-server-docs.js +132 -0
- package/dist/cli/services/lsp-server-docs.js.map +1 -0
- package/dist/cli/services/lsp-server-documents.d.ts +8 -0
- package/dist/cli/services/lsp-server-documents.js +132 -0
- package/dist/cli/services/lsp-server-documents.js.map +1 -0
- package/dist/cli/services/lsp-server.d.ts +40 -0
- package/dist/cli/services/lsp-server.js +270 -0
- package/dist/cli/services/lsp-server.js.map +1 -0
- package/dist/cli/services/model-router.test.js +245 -0
- package/dist/cli/services/permission-modes.js +16 -3
- package/dist/cli/services/permission-modes.js.map +1 -1
- package/dist/cli/services/project-index.d.ts +41 -0
- package/dist/cli/services/project-index.js +286 -0
- package/dist/cli/services/project-index.js.map +1 -0
- package/dist/cli/services/rewind-rewindTo.test.js +202 -0
- package/dist/cli/services/rewind.test.js +175 -0
- package/dist/cli/services/sandbox.test.js +198 -0
- package/dist/cli/services/server-tools-client.d.ts +46 -0
- package/dist/cli/services/server-tools-client.js +211 -0
- package/dist/cli/services/server-tools-client.js.map +1 -0
- package/dist/cli/services/server-tools-media.d.ts +21 -0
- package/dist/cli/services/server-tools-media.js +163 -0
- package/dist/cli/services/server-tools-media.js.map +1 -0
- package/dist/cli/services/server-tools-preprocess.d.ts +23 -0
- package/dist/cli/services/server-tools-preprocess.js +386 -0
- package/dist/cli/services/server-tools-preprocess.js.map +1 -0
- package/dist/cli/services/server-tools.d.ts +2 -0
- package/dist/cli/services/server-tools.js +40 -15
- package/dist/cli/services/server-tools.js.map +1 -1
- package/dist/cli/services/session-client.d.ts +78 -0
- package/dist/cli/services/session-client.js +197 -0
- package/dist/cli/services/session-client.js.map +1 -0
- package/dist/cli/services/session-persistence.d.ts +3 -0
- package/dist/cli/services/session-persistence.js +12 -0
- package/dist/cli/services/session-persistence.js.map +1 -1
- package/dist/cli/services/subagent-execution.d.ts +12 -0
- package/dist/cli/services/subagent-loop-v2.d.ts +36 -0
- package/dist/cli/services/subagent-loop-v2.js +238 -0
- package/dist/cli/services/subagent-loop-v2.js.map +1 -0
- package/dist/cli/services/subagent-tools.d.ts +10 -0
- package/dist/cli/services/subagent-tools.js +96 -0
- package/dist/cli/services/subagent-tools.js.map +1 -0
- package/dist/cli/services/subagent-types.d.ts +57 -0
- package/dist/cli/services/subagent-types.js +218 -0
- package/dist/cli/services/subagent-types.js.map +1 -0
- package/dist/cli/services/subagent.js +3 -2
- package/dist/cli/services/subagent.js.map +1 -1
- package/dist/cli/services/system-prompt.js +26 -3
- package/dist/cli/services/system-prompt.js.map +1 -1
- package/dist/cli/services/team-lead-auto.d.ts +11 -0
- package/dist/cli/services/team-lead-execution.d.ts +28 -0
- package/dist/cli/services/team-lead-types.d.ts +37 -0
- package/dist/cli/services/team-lead-types.js +2 -0
- package/dist/cli/services/team-lead-types.js.map +1 -0
- package/dist/cli/services/team-lead.d.ts +60 -0
- package/dist/cli/services/team-lead.js +148 -11
- package/dist/cli/services/team-lead.js.map +1 -1
- package/dist/cli/services/team-state-members.d.ts +11 -0
- package/dist/cli/services/team-state-members.js +185 -0
- package/dist/cli/services/team-state-members.js.map +1 -0
- package/dist/cli/services/team-state-messaging.d.ts +16 -0
- package/dist/cli/services/team-state-messaging.js +90 -0
- package/dist/cli/services/team-state-messaging.js.map +1 -0
- package/dist/cli/services/team-state-tasks.d.ts +12 -0
- package/dist/cli/services/team-state-tasks.js +23 -0
- package/dist/cli/services/team-state-tasks.js.map +1 -0
- package/dist/cli/services/team-state-types.d.ts +54 -0
- package/dist/cli/services/team-state-types.js +129 -0
- package/dist/cli/services/team-state-types.js.map +1 -0
- package/dist/cli/services/team-state.d.ts +5 -0
- package/dist/cli/services/team-state.js +29 -0
- package/dist/cli/services/team-state.js.map +1 -1
- package/dist/cli/services/teammate-loop.js +557 -0
- package/dist/cli/services/teammate-loop.js.map +1 -0
- package/dist/cli/services/teammate-prompt.d.ts +2 -0
- package/dist/cli/services/teammate-prompt.js +68 -0
- package/dist/cli/services/teammate-prompt.js.map +1 -0
- package/dist/cli/services/teammate-tools.d.ts +6 -0
- package/dist/cli/services/teammate-tools.js +158 -0
- package/dist/cli/services/teammate-tools.js.map +1 -0
- package/dist/cli/services/teammate-types.d.ts +36 -0
- package/dist/cli/services/teammate-types.js +43 -0
- package/dist/cli/services/teammate-types.js.map +1 -0
- package/dist/cli/services/teammate-worker-helpers.d.ts +71 -0
- package/dist/cli/services/teammate-worker-helpers.js +183 -0
- package/dist/cli/services/teammate-worker-helpers.js.map +1 -0
- package/dist/cli/services/teammate-worker-task-cleanup.d.ts +27 -0
- package/dist/cli/services/teammate-worker-task-cleanup.js +91 -0
- package/dist/cli/services/teammate-worker-task-cleanup.js.map +1 -0
- package/dist/cli/services/teammate-worker-task-loop.d.ts +35 -0
- package/dist/cli/services/teammate-worker-task-loop.js +273 -0
- package/dist/cli/services/teammate-worker-task-loop.js.map +1 -0
- package/dist/cli/services/teammate-worker.d.ts +13 -0
- package/dist/cli/services/teammate-worker.js +294 -0
- package/dist/cli/services/teammate-worker.js.map +1 -0
- package/dist/cli/services/telemetry-spans.d.ts +17 -0
- package/dist/cli/services/telemetry-spans.js +172 -0
- package/dist/cli/services/telemetry-spans.js.map +1 -0
- package/dist/cli/services/tools/__tests__/agent-tools-tasks-teams.test.js +250 -0
- package/dist/cli/services/tools/__tests__/agent-tools-teams.test.js +200 -0
- package/dist/cli/services/tools/__tests__/agent-tools.test.js +340 -0
- package/dist/cli/services/tools/__tests__/file-ops-cache.test.js +152 -0
- package/dist/cli/services/tools/__tests__/file-ops-notebook.test.js +249 -0
- package/dist/cli/services/tools/__tests__/file-ops-read.test.js +261 -0
- package/dist/cli/services/tools/__tests__/file-ops-write.test.js +292 -0
- package/dist/cli/services/tools/__tests__/search-tools-rg.test.js +92 -0
- package/dist/cli/services/tools/__tests__/search-tools.part2.test.js +174 -0
- package/dist/cli/services/tools/__tests__/search-tools.test.js +227 -0
- package/dist/cli/services/tools/__tests__/shell-exec-allowed-core.test.js +163 -0
- package/dist/cli/services/tools/__tests__/shell-exec-allowed-extended.test.js +220 -0
- package/dist/cli/services/tools/__tests__/shell-exec-allowed.part2.test.js +215 -0
- package/dist/cli/services/tools/__tests__/shell-exec-allowed.test.js +154 -0
- package/dist/cli/services/tools/__tests__/shell-exec-blocked.test.js +132 -0
- package/dist/cli/services/tools/__tests__/shell-exec-execution.test.js +245 -0
- package/dist/cli/services/tools/__tests__/task-manager-create.test.js +110 -0
- package/dist/cli/services/tools/__tests__/task-manager-crud.test.js +339 -0
- package/dist/cli/services/tools/__tests__/task-manager-list-get.test.js +343 -0
- package/dist/cli/services/tools/__tests__/task-manager-query.test.js +346 -0
- package/dist/cli/services/tools/__tests__/task-manager-routing.test.js +58 -0
- package/dist/cli/services/tools/__tests__/task-manager-update.test.js +224 -0
- package/dist/cli/services/tools/__tests__/task-manager.test.js +159 -0
- package/dist/cli/services/tools/__tests__/web-tools-html-search.test.js +227 -0
- package/dist/cli/services/tools/__tests__/web-tools.test.js +285 -0
- package/dist/cli/services/tools/agent-tools-tasks.d.ts +10 -0
- package/dist/cli/services/tools/agent-tools-tasks.js +216 -0
- package/dist/cli/services/tools/agent-tools-tasks.js.map +1 -0
- package/dist/cli/services/tools/agent-tools-team.d.ts +8 -0
- package/dist/cli/services/tools/agent-tools-team.js +101 -0
- package/dist/cli/services/tools/agent-tools-team.js.map +1 -0
- package/dist/cli/services/tools/agent-tools.js +115 -42
- package/dist/cli/services/tools/agent-tools.js.map +1 -1
- package/dist/cli/services/tools/file-ops-notebook.d.ts +9 -0
- package/dist/cli/services/tools/file-ops-notebook.js +186 -0
- package/dist/cli/services/tools/file-ops-notebook.js.map +1 -0
- package/dist/cli/services/tools/file-ops-read.d.ts +11 -0
- package/dist/cli/services/tools/file-ops-read.js +237 -0
- package/dist/cli/services/tools/file-ops-read.js.map +1 -0
- package/dist/cli/services/tools/file-ops-write.d.ts +8 -0
- package/dist/cli/services/tools/file-ops-write.js +260 -0
- package/dist/cli/services/tools/file-ops-write.js.map +1 -0
- package/dist/cli/services/tools/file-ops.d.ts +1 -0
- package/dist/cli/services/tools/file-ops.js +167 -0
- package/dist/cli/services/tools/file-ops.js.map +1 -1
- package/dist/cli/services/tools/html-to-text.d.ts +6 -0
- package/dist/cli/services/tools/html-to-text.js +118 -0
- package/dist/cli/services/tools/html-to-text.js.map +1 -0
- package/dist/cli/services/tools/shell-exec.test.js +148 -0
- package/dist/cli/services/tools/ssrf-guard.d.ts +6 -0
- package/dist/cli/services/tools/ssrf-guard.js +80 -0
- package/dist/cli/services/tools/ssrf-guard.js.map +1 -0
- package/dist/cli/setup/SetupComponents.d.ts +10 -0
- package/dist/cli/setup/SetupComponents.js +144 -0
- package/dist/cli/setup/SetupComponents.js.map +1 -0
- package/dist/cli/setup/setup-cli-targets.d.ts +9 -0
- package/dist/cli/setup/setup-cli-targets.js +49 -0
- package/dist/cli/setup/setup-cli-targets.js.map +1 -0
- package/dist/cli/shared/InlineErrorBoundary.d.ts +22 -0
- package/dist/cli/shared/InlineErrorBoundary.js +35 -0
- package/dist/cli/shared/InlineErrorBoundary.js.map +1 -0
- package/dist/cli/shared/MatrixIntro.js +2 -1
- package/dist/cli/shared/MatrixIntro.js.map +1 -1
- package/dist/cli/shared/SharedTick.d.ts +10 -0
- package/dist/cli/shared/SpinnerSlot.d.ts +16 -8
- package/dist/cli/shared/SpinnerSlot.js +122 -29
- package/dist/cli/shared/SpinnerSlot.js.map +1 -1
- package/dist/cli/shared/WhaleBanner.js +3 -2
- package/dist/cli/shared/WhaleBanner.js.map +1 -1
- package/dist/cli/shared/__tests__/markdown.test.js +188 -0
- package/dist/cli/shared/format-utils.d.ts +16 -0
- package/dist/cli/shared/format-utils.js +121 -0
- package/dist/cli/shared/format-utils.js.map +1 -0
- package/dist/cli/shared/markdown-chart.d.ts +8 -0
- package/dist/cli/shared/markdown-chart.js +92 -0
- package/dist/cli/shared/markdown-chart.js.map +1 -0
- package/dist/cli/shared/markdown-diff.d.ts +15 -0
- package/dist/cli/shared/markdown-diff.js +205 -0
- package/dist/cli/shared/markdown-diff.js.map +1 -0
- package/dist/cli/shared/markdown-helpers.d.ts +33 -0
- package/dist/cli/shared/markdown-helpers.js +129 -0
- package/dist/cli/shared/markdown-helpers.js.map +1 -0
- package/dist/cli/shared/markdown-table.d.ts +10 -0
- package/dist/cli/shared/markdown-table.js +227 -0
- package/dist/cli/shared/markdown-table.js.map +1 -0
- package/dist/cli/shared/markdown.d.ts +2 -6
- package/dist/cli/shared/markdown.js +8 -115
- package/dist/cli/shared/markdown.js.map +1 -1
- package/dist/cli/shared/useLatestRef.d.ts +11 -0
- package/dist/cli/shared/useLatestRef.js +34 -0
- package/dist/cli/shared/useLatestRef.js.map +1 -0
- package/dist/cli/shared/useSyncState.d.ts +11 -0
- package/dist/cli/shared/useSyncState.js +39 -0
- package/dist/cli/shared/useSyncState.js.map +1 -0
- package/dist/cli/stores/StoreApp.js +3 -1
- package/dist/cli/stores/StoreApp.js.map +1 -1
- package/dist/index-agent.d.ts +11 -0
- package/dist/index-agent.js +83 -0
- package/dist/index-agent.js.map +1 -0
- package/dist/index-auth.d.ts +22 -0
- package/dist/index-auth.js +114 -0
- package/dist/index-auth.js.map +1 -0
- package/dist/index-handlers.d.ts +25 -0
- package/dist/index-handlers.js +164 -0
- package/dist/index-handlers.js.map +1 -0
- package/dist/index-tools.d.ts +22 -0
- package/dist/index-tools.js +115 -0
- package/dist/index-tools.js.map +1 -0
- package/dist/local-agent/__tests__/connection-disconnect.test.js +201 -0
- package/dist/local-agent/__tests__/connection-lifecycle.test.js +289 -0
- package/dist/local-agent/__tests__/connection-msghandling.test.js +311 -0
- package/dist/local-agent/__tests__/connection-reconnect.test.js +230 -0
- package/dist/local-agent/__tests__/connection-toolexec.test.js +253 -0
- package/dist/local-agent/__tests__/discovery.test.js +328 -0
- package/dist/local-agent/__tests__/executor-background.test.js +219 -0
- package/dist/local-agent/__tests__/executor-exec.test.js +221 -0
- package/dist/local-agent/__tests__/executor-jobs-sessions.test.js +220 -0
- package/dist/local-agent/__tests__/executor-system-info.test.js +133 -0
- package/dist/local-agent/__tests__/executor-systeminfo.test.js +109 -0
- package/dist/local-agent/__tests__/executor.test.js +235 -0
- package/dist/local-agent/__tests__/index.test.js +139 -0
- package/dist/local-agent/connection-handlers.d.ts +8 -0
- package/dist/local-agent/connection-handlers.js +112 -0
- package/dist/local-agent/connection-handlers.js.map +1 -0
- package/dist/local-agent/connection-tools.d.ts +8 -0
- package/dist/local-agent/connection-tools.js +111 -0
- package/dist/local-agent/connection-tools.js.map +1 -0
- package/dist/local-agent/executor-jobs.d.ts +12 -0
- package/dist/local-agent/executor-jobs.js +143 -0
- package/dist/local-agent/executor-jobs.js.map +1 -0
- package/dist/local-agent/executor.d.ts +3 -0
- package/dist/local-agent/executor.js +2 -2
- package/dist/local-agent/executor.js.map +1 -1
- package/dist/node/__tests__/cli-channels.test.js +293 -0
- package/dist/node/__tests__/cli-config-edge.test.js +154 -0
- package/dist/node/__tests__/cli-config.test.js +215 -0
- package/dist/node/__tests__/config.test.js +292 -0
- package/dist/node/__tests__/runtime-heartbeat.test.js +153 -0
- package/dist/node/__tests__/runtime-lifecycle-init.test.js +263 -0
- package/dist/node/__tests__/runtime-lifecycle-stats.test.js +180 -0
- package/dist/node/__tests__/runtime-lifecycle.test.js +305 -0
- package/dist/node/__tests__/runtime-relay.test.js +341 -0
- package/dist/node/adapters/__tests__/base.test.js +286 -0
- package/dist/node/adapters/__tests__/discord.test.js +284 -0
- package/dist/node/adapters/__tests__/email-send.test.js +295 -0
- package/dist/node/adapters/__tests__/email.inbound-send.test.js +217 -0
- package/dist/node/adapters/__tests__/email.lifecycle.test.js +211 -0
- package/dist/node/adapters/__tests__/email.test.js +290 -0
- package/dist/node/adapters/__tests__/email.webhook-send.test.js +251 -0
- package/dist/node/adapters/__tests__/imessage-filter.test.js +183 -0
- package/dist/node/adapters/__tests__/imessage-lifecycle.test.js +215 -0
- package/dist/node/adapters/__tests__/imessage-send-restart.test.js +227 -0
- package/dist/node/adapters/__tests__/slack.part2.test.js +135 -0
- package/dist/node/adapters/__tests__/slack.test.js +241 -0
- package/dist/node/adapters/__tests__/sms-extras.test.js +108 -0
- package/dist/node/adapters/__tests__/sms-lifecycle.test.js +203 -0
- package/dist/node/adapters/__tests__/sms-messaging.test.js +266 -0
- package/dist/node/adapters/__tests__/sms.part2.test.js +174 -0
- package/dist/node/adapters/__tests__/sms.test.js +253 -0
- package/dist/node/adapters/__tests__/telegram-polling.test.js +256 -0
- package/dist/node/adapters/__tests__/telegram-send.test.js +166 -0
- package/dist/node/adapters/__tests__/webchat-inbound.test.js +188 -0
- package/dist/node/adapters/__tests__/webchat-outbound.test.js +178 -0
- package/dist/node/adapters/__tests__/whatsapp-inbound.test.js +200 -0
- package/dist/node/adapters/__tests__/whatsapp-send.test.js +212 -0
- package/dist/node/adapters/__tests__/whatsapp.test.js +280 -0
- package/dist/node/adapters/discord-gateway.d.ts +42 -0
- package/dist/node/adapters/discord-gateway.js +169 -0
- package/dist/node/adapters/discord-gateway.js.map +1 -0
- package/dist/node/adapters/imessage.d.ts +11 -0
- package/dist/node/adapters/imessage.js +23 -6
- package/dist/node/adapters/imessage.js.map +1 -1
- package/dist/node/cli-channels.d.ts +6 -0
- package/dist/node/cli-channels.js +229 -0
- package/dist/node/cli-channels.js.map +1 -0
- package/dist/node/cli-node.d.ts +9 -0
- package/dist/node/cli-node.js +186 -0
- package/dist/node/cli-node.js.map +1 -0
- package/dist/node/cli-portal.d.ts +11 -0
- package/dist/node/cli-portal.js +503 -0
- package/dist/node/cli-portal.js.map +1 -0
- package/dist/node/portal/portal-target.d.ts +16 -0
- package/dist/node/portal/portal-target.js +102 -0
- package/dist/node/portal/portal-target.js.map +1 -0
- package/dist/node/portal/protocol-frames.d.ts +33 -0
- package/dist/node/portal/protocol-frames.js +170 -0
- package/dist/node/portal/protocol-frames.js.map +1 -0
- package/dist/node/runtime-network.d.ts +25 -0
- package/dist/node/runtime-network.js +226 -0
- package/dist/node/runtime-network.js.map +1 -0
- package/dist/node/runtime-utils.d.ts +27 -0
- package/dist/node/runtime-utils.js +99 -0
- package/dist/node/runtime-utils.js.map +1 -0
- package/dist/node/runtime.d.ts +1 -0
- package/dist/node/runtime.js +71 -1
- package/dist/node/runtime.js.map +1 -1
- package/dist/node/task-runner.d.ts +33 -0
- package/dist/node/task-runner.js +276 -0
- package/dist/node/task-runner.js.map +1 -0
- package/dist/server/__tests__/gateway-fast-fail.test.js +160 -0
- package/dist/server/__tests__/local-agent-gateway.test.js +186 -0
- package/dist/server/__tests__/proxy-handlers-delegation.test.js +240 -0
- package/dist/server/__tests__/proxy-handlers-validation.test.js +211 -0
- package/dist/server/__tests__/proxy-handlers.part2.test.js +240 -0
- package/dist/server/__tests__/proxy-handlers.test.js +213 -0
- package/dist/server/__tests__/strip-base64-e2e.test.js +303 -0
- package/dist/server/__tests__/strip-base64.test.js +256 -0
- package/dist/server/__tests__/tool-router-agent-tools.test.js +324 -0
- package/dist/server/__tests__/tool-router-execute-core.test.js +357 -0
- package/dist/server/__tests__/tool-router-execute-permissions.test.js +332 -0
- package/dist/server/__tests__/tool-router-execute.test.js +348 -0
- package/dist/server/__tests__/tool-router-load.test.js +432 -0
- package/dist/server/__tests__/tool-router-permissions.test.js +359 -0
- package/dist/server/__tests__/tool-router-registry-cache.test.js +383 -0
- package/dist/server/__tests__/tool-router-registry-handlers.test.js +272 -0
- package/dist/server/__tests__/tool-router-registry.test.js +331 -0
- package/dist/server/__tests__/validation-inventory.test.js +250 -0
- package/dist/server/__tests__/validation-misc.test.js +243 -0
- package/dist/server/__tests__/validation-supply-chain.test.js +188 -0
- package/dist/server/__tests__/worker.test.js +265 -0
- package/dist/server/handlers/__test-utils__/test-db.d.ts +2 -0
- package/dist/server/handlers/__test-utils__/test-db.js +14 -1
- package/dist/server/handlers/__test-utils__/test-db.js.map +1 -1
- package/dist/server/handlers/__tests__/conversation-lock.test.js +117 -0
- package/dist/server/handlers/__tests__/e2e/auth-cross-platform-login.e2e.test.js +268 -0
- package/dist/server/handlers/__tests__/e2e/auth-cross-platform-tokens.e2e.test.js +264 -0
- package/dist/server/handlers/__tests__/e2e/email-pipeline-send.e2e.test.js +214 -0
- package/dist/server/handlers/__tests__/e2e/email-pipeline-threads.e2e.test.js +168 -0
- package/dist/server/handlers/__tests__/e2e/error-logging-pipeline-dedup.e2e.test.js +229 -0
- package/dist/server/handlers/__tests__/e2e/error-logging-pipeline.e2e.test.js +239 -0
- package/dist/server/handlers/__tests__/e2e/error-logging-rate-limit.e2e.test.js +150 -0
- package/dist/server/handlers/__tests__/e2e/inventory-sync-guards.e2e.test.js +177 -0
- package/dist/server/handlers/__tests__/e2e/inventory-sync.e2e.test.js +228 -0
- package/dist/server/handlers/__tests__/e2e/inventory-sync.part2.e2e.test.js +188 -0
- package/dist/server/handlers/__tests__/e2e/order-lifecycle-fulfillment.e2e.test.js +295 -0
- package/dist/server/handlers/__tests__/e2e/order-lifecycle.e2e.test.js +277 -0
- package/dist/server/handlers/__tests__/e2e/order-lifecycle.fulfillment.e2e.test.js +307 -0
- package/dist/server/handlers/__tests__/e2e/order-lifecycle.setup.e2e.test.js +177 -0
- package/dist/server/handlers/__tests__/e2e/storefront-checkout-cart.e2e.test.js +255 -0
- package/dist/server/handlers/__tests__/e2e/storefront-checkout-webhook.e2e.test.js +231 -0
- package/dist/server/handlers/__tests__/e2e/workflow-execution-failures.e2e.test.js +235 -0
- package/dist/server/handlers/__tests__/e2e/workflow-execution.e2e.test.js +294 -0
- package/dist/server/handlers/__tests__/e2e/workflow-security.e2e.test.js +311 -0
- package/dist/server/handlers/__tests__/e2e/workflow-security.part2.e2e.test.js +267 -0
- package/dist/server/handlers/__tests__/workflow-cache.test.js +237 -0
- package/dist/server/handlers/analytics-errors-edge.test.js +173 -0
- package/dist/server/handlers/analytics.js +88 -1
- package/dist/server/handlers/analytics.js.map +1 -1
- package/dist/server/handlers/analytics.test.js +280 -0
- package/dist/server/handlers/api-docs-examples-ext.d.ts +9 -0
- package/dist/server/handlers/api-docs-examples-ext.js +278 -0
- package/dist/server/handlers/api-docs-examples-ext.js.map +1 -0
- package/dist/server/handlers/api-docs-examples.d.ts +8 -0
- package/dist/server/handlers/api-docs-examples.js +221 -0
- package/dist/server/handlers/api-docs-examples.js.map +1 -0
- package/dist/server/handlers/api-docs-sections-ext.d.ts +2 -0
- package/dist/server/handlers/api-docs-sections-ext.js +497 -0
- package/dist/server/handlers/api-docs-sections-ext.js.map +1 -0
- package/dist/server/handlers/api-docs-sections.d.ts +21 -0
- package/dist/server/handlers/api-docs-sections.js +293 -0
- package/dist/server/handlers/api-docs-sections.js.map +1 -0
- package/dist/server/handlers/api-docs.d.ts +2 -0
- package/dist/server/handlers/api-docs.js +177 -0
- package/dist/server/handlers/api-docs.js.map +1 -1
- package/dist/server/handlers/api-keys.part2.test.js +157 -0
- package/dist/server/handlers/api-keys.test.js +161 -0
- package/dist/server/handlers/billing-core.d.ts +28 -0
- package/dist/server/handlers/billing-core.js +126 -0
- package/dist/server/handlers/billing-core.js.map +1 -0
- package/dist/server/handlers/billing-routes.d.ts +9 -0
- package/dist/server/handlers/billing-routes.js +243 -0
- package/dist/server/handlers/billing-routes.js.map +1 -0
- package/dist/server/handlers/billing-routes.test.js +123 -0
- package/dist/server/handlers/billing.test.js +215 -0
- package/dist/server/handlers/browser-actions-errors.test.js +94 -0
- package/dist/server/handlers/browser-actions.d.ts +35 -0
- package/dist/server/handlers/browser-actions.js +171 -0
- package/dist/server/handlers/browser-actions.js.map +1 -0
- package/dist/server/handlers/browser-actions.part2.test.js +190 -0
- package/dist/server/handlers/browser-actions.test.js +190 -0
- package/dist/server/handlers/browser-captcha.d.ts +6 -0
- package/dist/server/handlers/browser-captcha.js +172 -0
- package/dist/server/handlers/browser-captcha.js.map +1 -0
- package/dist/server/handlers/browser-lifecycle.d.ts +9 -0
- package/dist/server/handlers/browser-lifecycle.js +142 -0
- package/dist/server/handlers/browser-lifecycle.js.map +1 -0
- package/dist/server/handlers/browser-validation.test.js +257 -0
- package/dist/server/handlers/catalog-advanced.d.ts +9 -0
- package/dist/server/handlers/catalog-advanced.js +352 -0
- package/dist/server/handlers/catalog-advanced.js.map +1 -0
- package/dist/server/handlers/catalog-categories.d.ts +5 -0
- package/dist/server/handlers/catalog-categories.js +181 -0
- package/dist/server/handlers/catalog-categories.js.map +1 -0
- package/dist/server/handlers/catalog-products.d.ts +5 -0
- package/dist/server/handlers/catalog-products.js +404 -0
- package/dist/server/handlers/catalog-products.js.map +1 -0
- package/dist/server/handlers/catalog-schemas.d.ts +5 -0
- package/dist/server/handlers/catalog-schemas.js +426 -0
- package/dist/server/handlers/catalog-schemas.js.map +1 -0
- package/dist/server/handlers/catalog.test.js +297 -0
- package/dist/server/handlers/comms-documents-advanced.d.ts +8 -0
- package/dist/server/handlers/comms-documents-advanced.js +159 -0
- package/dist/server/handlers/comms-documents-advanced.js.map +1 -0
- package/dist/server/handlers/comms-documents.d.ts +10 -0
- package/dist/server/handlers/comms-documents.js +445 -0
- package/dist/server/handlers/comms-documents.js.map +1 -0
- package/dist/server/handlers/comms-email.d.ts +10 -0
- package/dist/server/handlers/comms-email.js +492 -0
- package/dist/server/handlers/comms-email.js.map +1 -0
- package/dist/server/handlers/comms-pdf-generation.d.ts +8 -0
- package/dist/server/handlers/comms-pdf-generation.js +327 -0
- package/dist/server/handlers/comms-pdf-generation.js.map +1 -0
- package/dist/server/handlers/comms-pdf-helpers.d.ts +9 -0
- package/dist/server/handlers/comms-pdf-helpers.js +126 -0
- package/dist/server/handlers/comms-pdf-helpers.js.map +1 -0
- package/dist/server/handlers/comms-shared.d.ts +3 -0
- package/dist/server/handlers/comms-shared.js +28 -0
- package/dist/server/handlers/comms-shared.js.map +1 -0
- package/dist/server/handlers/comms.test.js +289 -0
- package/dist/server/handlers/creations-actions.d.ts +21 -0
- package/dist/server/handlers/creations-actions.js +250 -0
- package/dist/server/handlers/creations-actions.js.map +1 -0
- package/dist/server/handlers/creations-advanced-collections.test.js +214 -0
- package/dist/server/handlers/creations-advanced-generate.test.js +142 -0
- package/dist/server/handlers/creations-advanced.test.js +171 -0
- package/dist/server/handlers/creations-collections-preview.test.js +214 -0
- package/dist/server/handlers/creations-crud.d.ts +35 -0
- package/dist/server/handlers/creations-crud.js +248 -0
- package/dist/server/handlers/creations-crud.js.map +1 -0
- package/dist/server/handlers/creations-crud.test.js +260 -0
- package/dist/server/handlers/creations-generate.d.ts +21 -0
- package/dist/server/handlers/creations-generate.js +256 -0
- package/dist/server/handlers/creations-generate.js.map +1 -0
- package/dist/server/handlers/creations-mutations.test.js +197 -0
- package/dist/server/handlers/crm-customers-read.d.ts +58 -0
- package/dist/server/handlers/crm-customers-read.js +208 -0
- package/dist/server/handlers/crm-customers-read.js.map +1 -0
- package/dist/server/handlers/crm-customers-write.d.ts +54 -0
- package/dist/server/handlers/crm-customers-write.js +414 -0
- package/dist/server/handlers/crm-customers-write.js.map +1 -0
- package/dist/server/handlers/crm-utils.d.ts +6 -0
- package/dist/server/handlers/crm-utils.js +19 -0
- package/dist/server/handlers/crm-utils.js.map +1 -0
- package/dist/server/handlers/crm.test.js +179 -0
- package/dist/server/handlers/discovery-advertise.d.ts +18 -0
- package/dist/server/handlers/discovery-advertise.js +101 -0
- package/dist/server/handlers/discovery-advertise.js.map +1 -0
- package/dist/server/handlers/discovery-advertise.test.js +185 -0
- package/dist/server/handlers/discovery-scan.d.ts +19 -0
- package/dist/server/handlers/discovery-scan.js +107 -0
- package/dist/server/handlers/discovery-scan.js.map +1 -0
- package/dist/server/handlers/discovery-scan.test.js +233 -0
- package/dist/server/handlers/embeddings-embed-search.test.js +196 -0
- package/dist/server/handlers/embeddings-index-delete-stats.test.js +140 -0
- package/dist/server/handlers/embeddings-search.test.js +221 -0
- package/dist/server/handlers/embeddings.test.js +137 -0
- package/dist/server/handlers/enrichment-breach.d.ts +8 -0
- package/dist/server/handlers/enrichment-breach.js +266 -0
- package/dist/server/handlers/enrichment-breach.js.map +1 -0
- package/dist/server/handlers/enrichment-data.d.ts +13 -0
- package/dist/server/handlers/enrichment-data.js +145 -0
- package/dist/server/handlers/enrichment-data.js.map +1 -0
- package/dist/server/handlers/enrichment-enrich.d.ts +6 -0
- package/dist/server/handlers/enrichment-enrich.js +235 -0
- package/dist/server/handlers/enrichment-enrich.js.map +1 -0
- package/dist/server/handlers/enrichment-helpers.d.ts +10 -0
- package/dist/server/handlers/enrichment-helpers.js +17 -0
- package/dist/server/handlers/enrichment-helpers.js.map +1 -0
- package/dist/server/handlers/enrichment-mutations.test.js +240 -0
- package/dist/server/handlers/enrichment-queries.test.js +181 -0
- package/dist/server/handlers/enrichment-validation.test.js +177 -0
- package/dist/server/handlers/enrichment-writes.d.ts +16 -0
- package/dist/server/handlers/enrichment-writes.js +226 -0
- package/dist/server/handlers/enrichment-writes.js.map +1 -0
- package/dist/server/handlers/image-gen-actions.d.ts +18 -0
- package/dist/server/handlers/image-gen-actions.js +183 -0
- package/dist/server/handlers/image-gen-actions.js.map +1 -0
- package/dist/server/handlers/image-gen-providers.d.ts +29 -0
- package/dist/server/handlers/image-gen-providers.js +161 -0
- package/dist/server/handlers/image-gen-providers.js.map +1 -0
- package/dist/server/handlers/image-gen.test.js +205 -0
- package/dist/server/handlers/inventory-audit.d.ts +10 -0
- package/dist/server/handlers/inventory-audit.js +90 -0
- package/dist/server/handlers/inventory-audit.js.map +1 -0
- package/dist/server/handlers/inventory-helpers.d.ts +8 -0
- package/dist/server/handlers/inventory-helpers.js +19 -0
- package/dist/server/handlers/inventory-helpers.js.map +1 -0
- package/dist/server/handlers/inventory-query.d.ts +67 -0
- package/dist/server/handlers/inventory-query.js +299 -0
- package/dist/server/handlers/inventory-query.js.map +1 -0
- package/dist/server/handlers/inventory.test.js +380 -0
- package/dist/server/handlers/kali-background.test.js +222 -0
- package/dist/server/handlers/kali-errors.test.js +92 -0
- package/dist/server/handlers/kali-validation.test.js +234 -0
- package/dist/server/handlers/llm-providers-actions.test.js +220 -0
- package/dist/server/handlers/llm-providers-anthropic.test.js +239 -0
- package/dist/server/handlers/llm-providers-clients.d.ts +6 -0
- package/dist/server/handlers/llm-providers-clients.js +296 -0
- package/dist/server/handlers/llm-providers-clients.js.map +1 -0
- package/dist/server/handlers/llm-providers-credentials.d.ts +3 -0
- package/dist/server/handlers/llm-providers-credentials.js +109 -0
- package/dist/server/handlers/llm-providers-credentials.js.map +1 -0
- package/dist/server/handlers/llm-providers-failover.test.js +232 -0
- package/dist/server/handlers/llm-providers-models.d.ts +67 -0
- package/dist/server/handlers/llm-providers-models.js +213 -0
- package/dist/server/handlers/llm-providers-models.js.map +1 -0
- package/dist/server/handlers/llm-providers-providers.test.js +300 -0
- package/dist/server/handlers/llm-providers-validation.test.js +239 -0
- package/dist/server/handlers/local-agent-tools.test.js +224 -0
- package/dist/server/handlers/local-agent.test.js +198 -0
- package/dist/server/handlers/local-agent.tools-status.test.js +204 -0
- package/dist/server/handlers/local-agent.validation-exec.test.js +182 -0
- package/dist/server/handlers/media-actions.d.ts +14 -0
- package/dist/server/handlers/media-actions.js +398 -0
- package/dist/server/handlers/media-actions.js.map +1 -0
- package/dist/server/handlers/media-crud.d.ts +9 -0
- package/dist/server/handlers/media-crud.js +365 -0
- package/dist/server/handlers/media-crud.js.map +1 -0
- package/dist/server/handlers/media-upload.d.ts +4 -0
- package/dist/server/handlers/media-upload.js +179 -0
- package/dist/server/handlers/media-upload.js.map +1 -0
- package/dist/server/handlers/media-utils.d.ts +14 -0
- package/dist/server/handlers/media-utils.js +33 -0
- package/dist/server/handlers/media-utils.js.map +1 -0
- package/dist/server/handlers/meta-ads-advanced.d.ts +46 -0
- package/dist/server/handlers/meta-ads-advanced.js +222 -0
- package/dist/server/handlers/meta-ads-advanced.js.map +1 -0
- package/dist/server/handlers/meta-ads-audience-rules.test.js +243 -0
- package/dist/server/handlers/meta-ads-audience-targeting.test.js +205 -0
- package/dist/server/handlers/meta-ads-audiences-targeting.test.js +383 -0
- package/dist/server/handlers/meta-ads-audiences.d.ts +48 -0
- package/dist/server/handlers/meta-ads-audiences.js +214 -0
- package/dist/server/handlers/meta-ads-audiences.js.map +1 -0
- package/dist/server/handlers/meta-ads-crud-ads.test.js +136 -0
- package/dist/server/handlers/meta-ads-crud-campaigns.test.js +189 -0
- package/dist/server/handlers/meta-ads-crud-create.test.js +303 -0
- package/dist/server/handlers/meta-ads-crud-list-update.test.js +259 -0
- package/dist/server/handlers/meta-ads-crud-read.d.ts +78 -0
- package/dist/server/handlers/meta-ads-crud-read.js +204 -0
- package/dist/server/handlers/meta-ads-crud-read.js.map +1 -0
- package/dist/server/handlers/meta-ads-crud-write.d.ts +105 -0
- package/dist/server/handlers/meta-ads-crud-write.js +390 -0
- package/dist/server/handlers/meta-ads-crud-write.js.map +1 -0
- package/dist/server/handlers/meta-ads-crud.d.ts +9 -0
- package/dist/server/handlers/meta-ads-crud.js +12 -0
- package/dist/server/handlers/meta-ads-crud.js.map +1 -0
- package/dist/server/handlers/meta-ads-delete-publish-sync.test.js +282 -0
- package/dist/server/handlers/meta-ads-graph-api.d.ts +25 -0
- package/dist/server/handlers/meta-ads-graph-api.js +155 -0
- package/dist/server/handlers/meta-ads-graph-api.js.map +1 -0
- package/dist/server/handlers/meta-ads-insights.test.js +80 -0
- package/dist/server/handlers/meta-ads-list-get.test.js +237 -0
- package/dist/server/handlers/meta-ads-media.d.ts +16 -0
- package/dist/server/handlers/meta-ads-media.js +205 -0
- package/dist/server/handlers/meta-ads-media.js.map +1 -0
- package/dist/server/handlers/meta-ads-pixels-rules.d.ts +127 -0
- package/dist/server/handlers/meta-ads-pixels-rules.js +463 -0
- package/dist/server/handlers/meta-ads-pixels-rules.js.map +1 -0
- package/dist/server/handlers/meta-ads-publish-ad.d.ts +11 -0
- package/dist/server/handlers/meta-ads-publish-ad.js +229 -0
- package/dist/server/handlers/meta-ads-publish-ad.js.map +1 -0
- package/dist/server/handlers/meta-ads-publish-delete.test.js +254 -0
- package/dist/server/handlers/meta-ads-publish-helpers.js +117 -0
- package/dist/server/handlers/meta-ads-publish-helpers.js.map +1 -0
- package/dist/server/handlers/meta-ads-publish-sync.test.js +205 -0
- package/dist/server/handlers/meta-ads-publish.d.ts +14 -0
- package/dist/server/handlers/meta-ads-publish.js +194 -0
- package/dist/server/handlers/meta-ads-publish.js.map +1 -0
- package/dist/server/handlers/meta-ads-publish.test.js +254 -0
- package/dist/server/handlers/meta-ads-sync-insights.test.js +184 -0
- package/dist/server/handlers/meta-ads-targeting.d.ts +27 -0
- package/dist/server/handlers/meta-ads-targeting.js +323 -0
- package/dist/server/handlers/meta-ads-targeting.js.map +1 -0
- package/dist/server/handlers/meta-ads-types.d.ts +49 -0
- package/dist/server/handlers/meta-ads-types.js +59 -0
- package/dist/server/handlers/meta-ads-types.js.map +1 -0
- package/dist/server/handlers/meta-ads-update.test.js +117 -0
- package/dist/server/handlers/meta-ads.d.ts +25 -0
- package/dist/server/handlers/meta-ads.js +392 -3
- package/dist/server/handlers/meta-ads.js.map +1 -1
- package/dist/server/handlers/nodes-channels.test.js +413 -0
- package/dist/server/handlers/nodes-events.test.js +131 -0
- package/dist/server/handlers/nodes-handlers-channels-messages.d.ts +20 -0
- package/dist/server/handlers/nodes-handlers-channels-messages.js +314 -0
- package/dist/server/handlers/nodes-handlers-channels-messages.js.map +1 -0
- package/dist/server/handlers/nodes-handlers-channels.d.ts +19 -0
- package/dist/server/handlers/nodes-handlers-channels.js +225 -0
- package/dist/server/handlers/nodes-handlers-channels.js.map +1 -0
- package/dist/server/handlers/nodes-handlers-mgmt.d.ts +33 -0
- package/dist/server/handlers/nodes-handlers-mgmt.js +418 -0
- package/dist/server/handlers/nodes-handlers-mgmt.js.map +1 -0
- package/dist/server/handlers/nodes-list-delete.test.js +171 -0
- package/dist/server/handlers/nodes-messages-delivery.test.js +208 -0
- package/dist/server/handlers/nodes-messages.test.js +211 -0
- package/dist/server/handlers/nodes-register.test.js +277 -0
- package/dist/server/handlers/nodes-routes-channels.d.ts +9 -0
- package/dist/server/handlers/nodes-routes-channels.js +217 -0
- package/dist/server/handlers/nodes-routes-channels.js.map +1 -0
- package/dist/server/handlers/nodes-routes-crud.d.ts +9 -0
- package/dist/server/handlers/nodes-routes-crud.js +290 -0
- package/dist/server/handlers/nodes-routes-crud.js.map +1 -0
- package/dist/server/handlers/nodes-routes-delivery.d.ts +9 -0
- package/dist/server/handlers/nodes-routes-delivery.js +226 -0
- package/dist/server/handlers/nodes-routes-delivery.js.map +1 -0
- package/dist/server/handlers/nodes-routes-messages.d.ts +9 -0
- package/dist/server/handlers/nodes-routes-messages.js +218 -0
- package/dist/server/handlers/nodes-routes-messages.js.map +1 -0
- package/dist/server/handlers/nodes-routes-register.d.ts +9 -0
- package/dist/server/handlers/nodes-routes-register.js +239 -0
- package/dist/server/handlers/nodes-routes-register.js.map +1 -0
- package/dist/server/handlers/nodes-types.d.ts +82 -0
- package/dist/server/handlers/nodes-types.js +220 -0
- package/dist/server/handlers/nodes-types.js.map +1 -0
- package/dist/server/handlers/nodes-utils.d.ts +70 -0
- package/dist/server/handlers/nodes-utils.js +214 -0
- package/dist/server/handlers/nodes-utils.js.map +1 -0
- package/dist/server/handlers/nodes.test.js +353 -0
- package/dist/server/handlers/operations.test.js +136 -0
- package/dist/server/handlers/platform-telemetry.d.ts +10 -0
- package/dist/server/handlers/platform-telemetry.js +372 -0
- package/dist/server/handlers/platform-telemetry.js.map +1 -0
- package/dist/server/handlers/platform-telemetry.test.js +200 -0
- package/dist/server/handlers/platform-websearch.test.js +160 -0
- package/dist/server/handlers/sessions-handlers.d.ts +23 -0
- package/dist/server/handlers/sessions-handlers.js +374 -0
- package/dist/server/handlers/sessions-handlers.js.map +1 -0
- package/dist/server/handlers/storefront-cart.d.ts +31 -0
- package/dist/server/handlers/storefront-cart.js +381 -0
- package/dist/server/handlers/storefront-cart.js.map +1 -0
- package/dist/server/handlers/storefront.test.js +329 -0
- package/dist/server/handlers/supply-chain-transfers.d.ts +10 -0
- package/dist/server/handlers/supply-chain-transfers.js +214 -0
- package/dist/server/handlers/supply-chain-transfers.js.map +1 -0
- package/dist/server/handlers/supply-chain-utils.d.ts +2 -0
- package/dist/server/handlers/supply-chain-utils.js +21 -0
- package/dist/server/handlers/supply-chain-utils.js.map +1 -0
- package/dist/server/handlers/supply-chain.test.js +347 -0
- package/dist/server/handlers/transcription.test.js +118 -0
- package/dist/server/handlers/video-gen-providers.d.ts +30 -0
- package/dist/server/handlers/video-gen-providers.js +205 -0
- package/dist/server/handlers/video-gen-providers.js.map +1 -0
- package/dist/server/handlers/video-gen-sora.d.ts +5 -0
- package/dist/server/handlers/video-gen-sora.js +87 -0
- package/dist/server/handlers/video-gen-sora.js.map +1 -0
- package/dist/server/handlers/video-gen-veo.js +114 -0
- package/dist/server/handlers/video-gen-veo.js.map +1 -0
- package/dist/server/handlers/video-gen.test.js +146 -0
- package/dist/server/handlers/voice-handlers-audio.d.ts +9 -0
- package/dist/server/handlers/voice-handlers-audio.js +229 -0
- package/dist/server/handlers/voice-handlers-audio.js.map +1 -0
- package/dist/server/handlers/voice-handlers-music.d.ts +5 -0
- package/dist/server/handlers/voice-handlers-music.js +124 -0
- package/dist/server/handlers/voice-handlers-music.js.map +1 -0
- package/dist/server/handlers/voice-handlers-pvc.d.ts +8 -0
- package/dist/server/handlers/voice-handlers-pvc.js +345 -0
- package/dist/server/handlers/voice-handlers-pvc.js.map +1 -0
- package/dist/server/handlers/voice-handlers-tts.d.ts +5 -0
- package/dist/server/handlers/voice-handlers-tts.js +142 -0
- package/dist/server/handlers/voice-handlers-tts.js.map +1 -0
- package/dist/server/handlers/voice-handlers-voices.d.ts +8 -0
- package/dist/server/handlers/voice-handlers-voices.js +321 -0
- package/dist/server/handlers/voice-handlers-voices.js.map +1 -0
- package/dist/server/handlers/voice-utils.d.ts +32 -0
- package/dist/server/handlers/voice-utils.js +281 -0
- package/dist/server/handlers/voice-utils.js.map +1 -0
- package/dist/server/handlers/voice.test.js +153 -0
- package/dist/server/handlers/workflow-crud-advanced.d.ts +8 -0
- package/dist/server/handlers/workflow-crud-advanced.js +275 -0
- package/dist/server/handlers/workflow-crud-advanced.js.map +1 -0
- package/dist/server/handlers/workflow-crud-core.d.ts +8 -0
- package/dist/server/handlers/workflow-crud-core.js +286 -0
- package/dist/server/handlers/workflow-crud-core.js.map +1 -0
- package/dist/server/handlers/workflow-crud-events.d.ts +8 -0
- package/dist/server/handlers/workflow-crud-events.js +483 -0
- package/dist/server/handlers/workflow-crud-events.js.map +1 -0
- package/dist/server/handlers/workflow-crud-runs-lifecycle.d.ts +8 -0
- package/dist/server/handlers/workflow-crud-runs-lifecycle.js +231 -0
- package/dist/server/handlers/workflow-crud-runs-lifecycle.js.map +1 -0
- package/dist/server/handlers/workflow-crud-runs-versioning.d.ts +8 -0
- package/dist/server/handlers/workflow-crud-runs-versioning.js +319 -0
- package/dist/server/handlers/workflow-crud-runs-versioning.js.map +1 -0
- package/dist/server/handlers/workflow-crud-runs.d.ts +8 -0
- package/dist/server/handlers/workflow-crud-runs.js +18 -0
- package/dist/server/handlers/workflow-crud-runs.js.map +1 -0
- package/dist/server/handlers/workflow-steps-advancement.d.ts +13 -0
- package/dist/server/handlers/workflow-steps-advancement.js +197 -0
- package/dist/server/handlers/workflow-steps-advancement.js.map +1 -0
- package/dist/server/handlers/workflow-steps-circuit-breaker.d.ts +7 -0
- package/dist/server/handlers/workflow-steps-circuit-breaker.js +131 -0
- package/dist/server/handlers/workflow-steps-circuit-breaker.js.map +1 -0
- package/dist/server/handlers/workflow-steps-completion.d.ts +5 -0
- package/dist/server/handlers/workflow-steps-completion.js +254 -0
- package/dist/server/handlers/workflow-steps-completion.js.map +1 -0
- package/dist/server/handlers/workflow-steps-cron.d.ts +4 -0
- package/dist/server/handlers/workflow-steps-cron.js +259 -0
- package/dist/server/handlers/workflow-steps-cron.js.map +1 -0
- package/dist/server/handlers/workflow-steps-engine-execute.d.ts +3 -0
- package/dist/server/handlers/workflow-steps-engine-execute.js +388 -0
- package/dist/server/handlers/workflow-steps-engine-execute.js.map +1 -0
- package/dist/server/handlers/workflow-steps-engine-inline.d.ts +2 -0
- package/dist/server/handlers/workflow-steps-engine-inline.js +91 -0
- package/dist/server/handlers/workflow-steps-engine-inline.js.map +1 -0
- package/dist/server/handlers/workflow-steps-engine-persist.d.ts +5 -0
- package/dist/server/handlers/workflow-steps-engine-persist.js +192 -0
- package/dist/server/handlers/workflow-steps-engine-persist.js.map +1 -0
- package/dist/server/handlers/workflow-steps-engine-process.d.ts +7 -0
- package/dist/server/handlers/workflow-steps-engine-process.js +290 -0
- package/dist/server/handlers/workflow-steps-engine-process.js.map +1 -0
- package/dist/server/handlers/workflow-steps-engine.d.ts +3 -0
- package/dist/server/handlers/workflow-steps-engine.js +10 -0
- package/dist/server/handlers/workflow-steps-engine.js.map +1 -0
- package/dist/server/handlers/workflow-steps-executors-llm.d.ts +7 -0
- package/dist/server/handlers/workflow-steps-executors-llm.js +265 -0
- package/dist/server/handlers/workflow-steps-executors-llm.js.map +1 -0
- package/dist/server/handlers/workflow-steps-executors.d.ts +9 -0
- package/dist/server/handlers/workflow-steps-executors.js +188 -0
- package/dist/server/handlers/workflow-steps-executors.js.map +1 -0
- package/dist/server/handlers/workflow-steps-maintenance.d.ts +4 -0
- package/dist/server/handlers/workflow-steps-maintenance.js +256 -0
- package/dist/server/handlers/workflow-steps-maintenance.js.map +1 -0
- package/dist/server/handlers/workflow-steps-types.d.ts +84 -0
- package/dist/server/handlers/workflow-steps-types.js +179 -0
- package/dist/server/handlers/workflow-steps-types.js.map +1 -0
- package/dist/server/handlers/workflow-steps-webhook.d.ts +5 -0
- package/dist/server/handlers/workflow-steps-webhook.js +179 -0
- package/dist/server/handlers/workflow-steps-webhook.js.map +1 -0
- package/dist/server/handlers/workflow-steps.test.js +330 -0
- package/dist/server/handlers/workflows-extras.test.js +65 -0
- package/dist/server/handlers/workflows.part2.test.js +170 -0
- package/dist/server/handlers/workflows.test.js +281 -0
- package/dist/server/index.js +81 -1720
- package/dist/server/index.js.map +1 -1
- package/dist/server/lib/__tests__/batch-client-conversion-jsonl.test.js +171 -0
- package/dist/server/lib/__tests__/batch-client-polling.test.js +292 -0
- package/dist/server/lib/__tests__/batch-client-queue.test.js +270 -0
- package/dist/server/lib/__tests__/clickhouse-buffer.test.js +236 -0
- package/dist/server/lib/__tests__/code-worker-edge-cases.test.js +118 -0
- package/dist/server/lib/__tests__/code-worker-pool-execute.test.js +193 -0
- package/dist/server/lib/__tests__/code-worker-pool-execution.test.js +165 -0
- package/dist/server/lib/__tests__/code-worker-pool-init.test.js +131 -0
- package/dist/server/lib/__tests__/code-worker-pool.test.js +194 -0
- package/dist/server/lib/__tests__/code-worker-sandbox-ops.test.js +123 -0
- package/dist/server/lib/__tests__/code-worker-sandbox.test.js +217 -0
- package/dist/server/lib/__tests__/code-worker.test.js +179 -0
- package/dist/server/lib/__tests__/compaction-service-generate.test.js +229 -0
- package/dist/server/lib/__tests__/compaction-service.test.js +319 -0
- package/dist/server/lib/__tests__/otel.test.js +146 -0
- package/dist/server/lib/__tests__/prompt-sanitizer-validation.test.js +165 -0
- package/dist/server/lib/__tests__/prompt-sanitizer.sanitize.test.js +343 -0
- package/dist/server/lib/__tests__/prompt-sanitizer.test.js +328 -0
- package/dist/server/lib/__tests__/prompt-sanitizer.validate-tool.test.js +145 -0
- package/dist/server/lib/__tests__/provider-capabilities.test.js +263 -0
- package/dist/server/lib/__tests__/provider-failover-routing.test.js +145 -0
- package/dist/server/lib/__tests__/provider-failover-state.test.js +131 -0
- package/dist/server/lib/__tests__/rate-limiter-budgets.test.js +216 -0
- package/dist/server/lib/__tests__/rate-limiter.budgets-tools.test.js +113 -0
- package/dist/server/lib/__tests__/rate-limiter.check-request.test.js +141 -0
- package/dist/server/lib/__tests__/rate-limiter.stats-lifecycle.test.js +135 -0
- package/dist/server/lib/__tests__/rate-limiter.test.js +207 -0
- package/dist/server/lib/__tests__/server-agent-loop-abort-conditions.test.js +544 -0
- package/dist/server/lib/__tests__/server-agent-loop-abort.part2.test.js +504 -0
- package/dist/server/lib/__tests__/server-agent-loop-abort.test.js +396 -0
- package/dist/server/lib/__tests__/server-agent-loop-compaction.test.js +397 -0
- package/dist/server/lib/__tests__/server-agent-loop-failover.test.js +356 -0
- package/dist/server/lib/__tests__/server-agent-loop-features-caching.test.js +519 -0
- package/dist/server/lib/__tests__/server-agent-loop-features-edges.test.js +512 -0
- package/dist/server/lib/__tests__/server-subagent-bailout.test.js +194 -0
- package/dist/server/lib/__tests__/server-subagent-basics.test.js +348 -0
- package/dist/server/lib/__tests__/server-subagent-errors-abort.test.js +319 -0
- package/dist/server/lib/__tests__/server-subagent-errors-progress.test.js +253 -0
- package/dist/server/lib/__tests__/server-subagent-errors.part2.test.js +253 -0
- package/dist/server/lib/__tests__/server-subagent-errors.test.js +319 -0
- package/dist/server/lib/__tests__/session-checkpoint-load.test.js +275 -0
- package/dist/server/lib/__tests__/session-checkpoint-save.test.js +159 -0
- package/dist/server/lib/__tests__/ssrf-guard.test.js +93 -0
- package/dist/server/lib/__tests__/supabase-client.test.js +111 -0
- package/dist/server/lib/__tests__/template-resolver.test.js +317 -0
- package/dist/server/lib/__tests__/utils-timeout.test.js +49 -0
- package/dist/server/lib/__tests__/utils.test.js +322 -0
- package/dist/server/lib/agent-loop-executor.d.ts +7 -0
- package/dist/server/lib/agent-loop-executor.js +224 -0
- package/dist/server/lib/agent-loop-executor.js.map +1 -0
- package/dist/server/lib/agent-loop-turn.d.ts +53 -0
- package/dist/server/lib/agent-loop-turn.js +166 -0
- package/dist/server/lib/agent-loop-turn.js.map +1 -0
- package/dist/server/lib/agent-loop-types.d.ts +118 -0
- package/dist/server/lib/agent-loop-types.js +53 -0
- package/dist/server/lib/agent-loop-types.js.map +1 -0
- package/dist/server/lib/batch-client-anthropic.d.ts +10 -0
- package/dist/server/lib/batch-client-anthropic.js +144 -0
- package/dist/server/lib/batch-client-anthropic.js.map +1 -0
- package/dist/server/lib/batch-client-openai.d.ts +10 -0
- package/dist/server/lib/batch-client-openai.js +172 -0
- package/dist/server/lib/batch-client-openai.js.map +1 -0
- package/dist/server/lib/batch-client-types.d.ts +54 -0
- package/dist/server/lib/batch-client-types.js +27 -0
- package/dist/server/lib/batch-client-types.js.map +1 -0
- package/dist/server/lib/coa-renderer-components.d.ts +15 -0
- package/dist/server/lib/coa-renderer-components.js +361 -0
- package/dist/server/lib/coa-renderer-components.js.map +1 -0
- package/dist/server/lib/coa-renderer-pages.d.ts +15 -0
- package/dist/server/lib/coa-renderer-pages.js +467 -0
- package/dist/server/lib/coa-renderer-pages.js.map +1 -0
- package/dist/server/lib/coa-renderer-styles.d.ts +525 -0
- package/dist/server/lib/coa-renderer-styles.js +540 -0
- package/dist/server/lib/coa-renderer-styles.js.map +1 -0
- package/dist/server/lib/coa-renderer-tokens.d.ts +107 -0
- package/dist/server/lib/coa-renderer-tokens.js +46 -0
- package/dist/server/lib/coa-renderer-tokens.js.map +1 -0
- package/dist/server/lib/pdf-renderer-calc.d.ts +7 -0
- package/dist/server/lib/pdf-renderer-calc.js +272 -0
- package/dist/server/lib/pdf-renderer-calc.js.map +1 -0
- package/dist/server/lib/pdf-renderer-generation.d.ts +73 -0
- package/dist/server/lib/pdf-renderer-generation.js +298 -0
- package/dist/server/lib/pdf-renderer-generation.js.map +1 -0
- package/dist/server/lib/pdf-renderer-layout.d.ts +2 -0
- package/dist/server/lib/pdf-renderer-layout.js +144 -0
- package/dist/server/lib/pdf-renderer-layout.js.map +1 -0
- package/dist/server/lib/pdf-renderer-validation.d.ts +14 -0
- package/dist/server/lib/pdf-renderer-validation.js +220 -0
- package/dist/server/lib/pdf-renderer-validation.js.map +1 -0
- package/dist/server/lib/react-pdf-layout-elements.d.ts +8 -0
- package/dist/server/lib/react-pdf-layout-elements.js +366 -0
- package/dist/server/lib/react-pdf-layout-elements.js.map +1 -0
- package/dist/server/lib/react-pdf-layout-labels.d.ts +38 -0
- package/dist/server/lib/react-pdf-layout-labels.js +217 -0
- package/dist/server/lib/react-pdf-layout-labels.js.map +1 -0
- package/dist/server/lib/server-agent-loop-init.d.ts +28 -0
- package/dist/server/lib/server-agent-loop-init.js +138 -0
- package/dist/server/lib/server-agent-loop-init.js.map +1 -0
- package/dist/server/lib/server-agent-loop-v2.d.ts +110 -0
- package/dist/server/lib/server-agent-loop-v2.js +340 -0
- package/dist/server/lib/server-agent-loop-v2.js.map +1 -0
- package/dist/server/lib/server-agent-loop.js +2 -1
- package/dist/server/lib/server-agent-loop.js.map +1 -1
- package/dist/server/lib/server-subagent-loop.d.ts +3 -0
- package/dist/server/lib/server-subagent-loop.js +267 -0
- package/dist/server/lib/server-subagent-loop.js.map +1 -0
- package/dist/server/lib/session-types.d.ts +106 -0
- package/dist/server/lib/session-types.js +2 -0
- package/dist/server/lib/session-types.js.map +1 -0
- package/dist/server/local-agent-gateway-api.d.ts +34 -0
- package/dist/server/local-agent-gateway-api.js +156 -0
- package/dist/server/local-agent-gateway-api.js.map +1 -0
- package/dist/server/local-agent-gateway-handler.d.ts +3 -0
- package/dist/server/local-agent-gateway-handler.js +292 -0
- package/dist/server/local-agent-gateway-handler.js.map +1 -0
- package/dist/server/local-agent-gateway-init.d.ts +21 -0
- package/dist/server/local-agent-gateway-init.js +143 -0
- package/dist/server/local-agent-gateway-init.js.map +1 -0
- package/dist/server/local-agent-gateway-messages.d.ts +12 -0
- package/dist/server/local-agent-gateway-messages.js +108 -0
- package/dist/server/local-agent-gateway-messages.js.map +1 -0
- package/dist/server/local-agent-gateway-stats.d.ts +53 -0
- package/dist/server/local-agent-gateway-stats.js +129 -0
- package/dist/server/local-agent-gateway-stats.js.map +1 -0
- package/dist/server/local-agent-gateway-types.d.ts +94 -0
- package/dist/server/local-agent-gateway-types.js +78 -0
- package/dist/server/local-agent-gateway-types.js.map +1 -0
- package/dist/server/local-agent-gateway.d.ts +6 -0
- package/dist/server/local-agent-gateway.js +40 -0
- package/dist/server/local-agent-gateway.js.map +1 -1
- package/dist/server/providers/__tests__/anthropic-adapter.test.js +228 -0
- package/dist/server/providers/__tests__/anthropic-betas-toolchoice.test.js +257 -0
- package/dist/server/providers/__tests__/anthropic-errors.test.js +262 -0
- package/dist/server/providers/__tests__/anthropic-stream-core.test.js +275 -0
- package/dist/server/providers/__tests__/anthropic-streaming-betas.test.js +247 -0
- package/dist/server/providers/__tests__/anthropic-streaming-core.test.js +275 -0
- package/dist/server/providers/__tests__/bedrock-config.test.js +177 -0
- package/dist/server/providers/__tests__/bedrock-stream-behavior-streaming.test.js +272 -0
- package/dist/server/providers/__tests__/bedrock-stream-behavior-toolchoice.test.js +214 -0
- package/dist/server/providers/__tests__/bedrock-stream-behavior.part2.test.js +165 -0
- package/dist/server/providers/__tests__/bedrock-stream-behavior.test.js +309 -0
- package/dist/server/providers/__tests__/bedrock-stream-body-credentials.test.js +170 -0
- package/dist/server/providers/__tests__/bedrock-stream-body-extras.test.js +183 -0
- package/dist/server/providers/__tests__/bedrock-stream-body-request.test.js +305 -0
- package/dist/server/providers/__tests__/bedrock-stream-body.part2.test.js +305 -0
- package/dist/server/providers/__tests__/bedrock-stream-body.test.js +175 -0
- package/dist/server/providers/__tests__/bedrock-stream-errors.test.js +165 -0
- package/dist/server/providers/__tests__/gemini-config-methods.test.js +182 -0
- package/dist/server/providers/__tests__/gemini-config-streaming.test.js +257 -0
- package/dist/server/providers/__tests__/gemini-conversion-messages.test.js +247 -0
- package/dist/server/providers/__tests__/gemini-conversion-schema.test.js +365 -0
- package/dist/server/providers/__tests__/gemini-tools-choice.test.js +221 -0
- package/dist/server/providers/__tests__/gemini-tools-fn.test.js +252 -0
- package/dist/server/providers/__tests__/openai-config.test.js +194 -0
- package/dist/server/providers/__tests__/openai-conversion.test.js +276 -0
- package/dist/server/providers/__tests__/openai-messages.test.js +261 -0
- package/dist/server/providers/__tests__/openai-streaming.test.js +394 -0
- package/dist/server/providers/__tests__/openai-tools-cache.test.js +227 -0
- package/dist/server/providers/__tests__/registry.test.js +183 -0
- package/dist/server/providers/__tests__/shared.test.js +297 -0
- package/dist/server/providers/gemini-conversion.d.ts +17 -0
- package/dist/server/providers/gemini-conversion.js +185 -0
- package/dist/server/providers/gemini-conversion.js.map +1 -0
- package/dist/server/providers/gemini-streaming.d.ts +18 -0
- package/dist/server/providers/gemini-streaming.js +187 -0
- package/dist/server/providers/gemini-streaming.js.map +1 -0
- package/dist/server/providers/openai-adapter.d.ts +15 -0
- package/dist/server/providers/openai-adapter.js +423 -0
- package/dist/server/providers/openai-adapter.js.map +1 -0
- package/dist/server/providers/openai-conversion.d.ts +21 -0
- package/dist/server/providers/openai-conversion.js +191 -0
- package/dist/server/providers/openai-conversion.js.map +1 -0
- package/dist/server/server-agent.d.ts +21 -0
- package/dist/server/server-agent.js +162 -0
- package/dist/server/server-agent.js.map +1 -0
- package/dist/server/server-chat.d.ts +6 -0
- package/dist/server/server-chat.js +210 -0
- package/dist/server/server-chat.js.map +1 -0
- package/dist/server/server-cost-guard.d.ts +16 -0
- package/dist/server/server-cost-guard.js +141 -0
- package/dist/server/server-cost-guard.js.map +1 -0
- package/dist/server/server-executors.d.ts +10 -0
- package/dist/server/server-executors.js +110 -0
- package/dist/server/server-executors.js.map +1 -0
- package/dist/server/server-helpers.d.ts +49 -0
- package/dist/server/server-helpers.js +210 -0
- package/dist/server/server-helpers.js.map +1 -0
- package/dist/server/server-persist.d.ts +43 -0
- package/dist/server/server-persist.js +249 -0
- package/dist/server/server-persist.js.map +1 -0
- package/dist/server/server-rate-limit.d.ts +9 -0
- package/dist/server/server-rate-limit.js +77 -0
- package/dist/server/server-rate-limit.js.map +1 -0
- package/dist/server/server-routes-approvals.d.ts +4 -0
- package/dist/server/server-routes-approvals.js +238 -0
- package/dist/server/server-routes-approvals.js.map +1 -0
- package/dist/server/server-routes-auth.d.ts +7 -0
- package/dist/server/server-routes-auth.js +532 -0
- package/dist/server/server-routes-auth.js.map +1 -0
- package/dist/server/server-routes-events.d.ts +4 -0
- package/dist/server/server-routes-events.js +167 -0
- package/dist/server/server-routes-events.js.map +1 -0
- package/dist/server/server-routes-public.d.ts +24 -0
- package/dist/server/server-routes-public.js +453 -0
- package/dist/server/server-routes-public.js.map +1 -0
- package/dist/server/server-routes-waitpoints.d.ts +4 -0
- package/dist/server/server-routes-waitpoints.js +190 -0
- package/dist/server/server-routes-waitpoints.js.map +1 -0
- package/dist/server/server-routes-webchat.d.ts +14 -0
- package/dist/server/server-routes-webchat.js +307 -0
- package/dist/server/server-routes-webchat.js.map +1 -0
- package/dist/server/server-routes-workflows.d.ts +5 -0
- package/dist/server/server-routes-workflows.js +289 -0
- package/dist/server/server-routes-workflows.js.map +1 -0
- package/dist/server/server-sse.d.ts +13 -0
- package/dist/server/server-sse.js +197 -0
- package/dist/server/server-sse.js.map +1 -0
- package/dist/server/server-store-circuit-breaker.d.ts +32 -0
- package/dist/server/server-store-circuit-breaker.js +211 -0
- package/dist/server/server-store-circuit-breaker.js.map +1 -0
- package/dist/server/server-store.d.ts +5 -0
- package/dist/server/server-store.js +71 -0
- package/dist/server/server-store.js.map +1 -0
- package/dist/server/server-trace.d.ts +41 -0
- package/dist/server/server-trace.js +133 -0
- package/dist/server/server-trace.js.map +1 -0
- package/dist/server/server-worker.d.ts +4 -0
- package/dist/server/server-worker.js +127 -0
- package/dist/server/server-worker.js.map +1 -0
- package/dist/server/session-events.d.ts +27 -0
- package/dist/server/session-events.js +69 -0
- package/dist/server/session-events.js.map +1 -0
- package/dist/server/session-manager.d.ts +52 -0
- package/dist/server/session-manager.js +502 -0
- package/dist/server/session-manager.js.map +1 -0
- package/dist/server/tool-router-discovery.d.ts +33 -0
- package/dist/server/tool-router-discovery.js +218 -0
- package/dist/server/tool-router-discovery.js.map +1 -0
- package/dist/server/tool-router-types.d.ts +91 -0
- package/dist/server/tool-router-types.js +336 -0
- package/dist/server/tool-router-types.js.map +1 -0
- package/dist/server/tool-router-user-tools.d.ts +16 -0
- package/dist/server/tool-router-user-tools.js +269 -0
- package/dist/server/tool-router-user-tools.js.map +1 -0
- package/dist/server/validation-schemas.d.ts +12 -0
- package/dist/server/validation-schemas.js +251 -0
- package/dist/server/validation-schemas.js.map +1 -0
- package/dist/shared/agent-core-config.d.ts +12 -0
- package/dist/shared/agent-core-config.js +77 -0
- package/dist/shared/agent-core-config.js.map +1 -0
- package/dist/shared/agent-core-config.test.js +132 -0
- package/dist/shared/agent-core-context-thinking.test.js +293 -0
- package/dist/shared/agent-core-loop-calls.test.js +174 -0
- package/dist/shared/agent-core-loop-detector-bail.test.js +201 -0
- package/dist/shared/agent-core-loop-detector.test.js +195 -0
- package/dist/shared/agent-core-loop-errors.test.js +258 -0
- package/dist/shared/agent-core-loop.d.ts +53 -0
- package/dist/shared/agent-core-loop.js +251 -0
- package/dist/shared/agent-core-loop.js.map +1 -0
- package/dist/shared/agent-core-pricing.test.js +191 -0
- package/dist/shared/agent-core-sanitize-retry.test.js +129 -0
- package/dist/shared/agent-core-tools.d.ts +32 -0
- package/dist/shared/agent-core-tools.js +323 -0
- package/dist/shared/agent-core-tools.js.map +1 -0
- package/dist/shared/agent-core-types.d.ts +182 -0
- package/dist/shared/agent-core-types.js +265 -0
- package/dist/shared/agent-core-types.js.map +1 -0
- package/dist/shared/agent-core.js +1 -1
- package/dist/shared/agent-core.js.map +1 -1
- package/dist/shared/agent-loop-base.d.ts +130 -0
- package/dist/shared/agent-loop-base.js +347 -0
- package/dist/shared/agent-loop-base.js.map +1 -0
- package/dist/shared/api-client-build-request.test.js +228 -0
- package/dist/shared/api-client-build-system-caching.test.js +107 -0
- package/dist/shared/api-client-build.test.js +223 -0
- package/dist/shared/api-client-config.d.ts +21 -0
- package/dist/shared/api-client-helpers.d.ts +57 -0
- package/dist/shared/api-client-helpers.test.js +261 -0
- package/dist/shared/api-client-proxy-happy.test.js +255 -0
- package/dist/shared/api-client-proxy-retry.test.js +307 -0
- package/dist/shared/api-client-proxy.d.ts +26 -0
- package/dist/shared/api-client-proxy.test.js +255 -0
- package/dist/shared/api-client-retry.test.js +307 -0
- package/dist/shared/api-client-system-trimming.test.js +261 -0
- package/dist/shared/api-client-trimming.d.ts +36 -0
- package/dist/shared/api-client.js.map +1 -1
- package/dist/shared/api-client.test.js +228 -0
- package/dist/shared/compaction-thinking.test.js +315 -0
- package/dist/shared/compaction-trimming.test.js +223 -0
- package/dist/shared/exec-validator.d.ts +29 -0
- package/dist/shared/exec-validator.js +106 -0
- package/dist/shared/exec-validator.js.map +1 -0
- package/dist/shared/imsg-constants.d.ts +8 -0
- package/dist/shared/imsg-constants.js +13 -0
- package/dist/shared/imsg-constants.js.map +1 -0
- package/dist/shared/sse-parser-callbacks.test.js +422 -0
- package/dist/shared/sse-parser-collect.test.js +252 -0
- package/dist/shared/sse-parser-e2e.test.js +558 -0
- package/dist/shared/sse-parser-parse.test.js +253 -0
- package/dist/shared/tool-dispatch-advanced-batch-build.test.js +405 -0
- package/dist/shared/tool-dispatch-advanced.test.js +320 -0
- package/dist/shared/tool-dispatch-basic.test.js +278 -0
- package/dist/shared/tool-dispatch-content.d.ts +14 -0
- package/dist/shared/tool-dispatch-parallel.test.js +378 -0
- package/dist/shared/tool-dispatch.js +1 -1
- package/dist/shared/tool-dispatch.js.map +1 -1
- package/dist/webchat/__tests__/widget-messaging.test.js +323 -0
- package/dist/webchat/__tests__/widget.test.js +273 -0
- package/dist/webchat/widget-styles.d.ts +7 -0
- package/dist/webchat/widget-styles.js +11 -0
- package/dist/webchat/widget-styles.js.map +1 -0
- package/package.json +7 -5
- package/src/cli/services/builtin-skills/verify.md +72 -0
- package/vendor/ink/build/ink.js +33 -10
- package/vendor/ink/build/log-update.js +11 -4
- package/whale-logo.png +0 -0
|
@@ -44,12 +44,28 @@ let cachedClient = null;
|
|
|
44
44
|
let cachedStoreId = "";
|
|
45
45
|
let cachedAuthMethod = "none";
|
|
46
46
|
let cachedToken = "";
|
|
47
|
+
|
|
48
|
+
// In-memory store context — set once at init, updated only on explicit store switch.
|
|
49
|
+
// Prevents cross-app session file writes from silently changing the active store.
|
|
50
|
+
let activeStoreId = null;
|
|
51
|
+
export function setActiveStoreId(storeId) {
|
|
52
|
+
activeStoreId = storeId;
|
|
53
|
+
}
|
|
54
|
+
export function getActiveStoreId() {
|
|
55
|
+
if (activeStoreId) return activeStoreId;
|
|
56
|
+
// First call — seed from disk, then own it in memory
|
|
57
|
+
const config = resolveConfig();
|
|
58
|
+
activeStoreId = config.storeId || "";
|
|
59
|
+
return activeStoreId;
|
|
60
|
+
}
|
|
47
61
|
async function getSupabaseClient() {
|
|
48
62
|
const config = resolveConfig();
|
|
63
|
+
const storeId = getActiveStoreId();
|
|
49
64
|
|
|
50
65
|
// Tier 1: Service role key (full access, MCP server mode) — never expires
|
|
51
66
|
if (config.supabaseUrl && config.supabaseKey) {
|
|
52
67
|
if (cachedClient && cachedAuthMethod === "service_role") {
|
|
68
|
+
cachedStoreId = storeId;
|
|
53
69
|
return {
|
|
54
70
|
client: cachedClient,
|
|
55
71
|
storeId: cachedStoreId
|
|
@@ -61,7 +77,7 @@ async function getSupabaseClient() {
|
|
|
61
77
|
autoRefreshToken: false
|
|
62
78
|
}
|
|
63
79
|
});
|
|
64
|
-
cachedStoreId =
|
|
80
|
+
cachedStoreId = storeId;
|
|
65
81
|
cachedAuthMethod = "service_role";
|
|
66
82
|
return {
|
|
67
83
|
client: cachedClient,
|
|
@@ -73,7 +89,7 @@ async function getSupabaseClient() {
|
|
|
73
89
|
const token = await getValidToken();
|
|
74
90
|
if (token) {
|
|
75
91
|
if (cachedClient && cachedToken === token) {
|
|
76
|
-
cachedStoreId =
|
|
92
|
+
cachedStoreId = storeId;
|
|
77
93
|
return {
|
|
78
94
|
client: cachedClient,
|
|
79
95
|
storeId: cachedStoreId
|
|
@@ -81,7 +97,7 @@ async function getSupabaseClient() {
|
|
|
81
97
|
}
|
|
82
98
|
cachedClient = createAuthenticatedClient(token);
|
|
83
99
|
cachedToken = token;
|
|
84
|
-
cachedStoreId =
|
|
100
|
+
cachedStoreId = storeId;
|
|
85
101
|
cachedAuthMethod = "jwt";
|
|
86
102
|
return {
|
|
87
103
|
client: cachedClient,
|
|
@@ -99,6 +115,7 @@ export function resetServerToolClient() {
|
|
|
99
115
|
cachedToken = "";
|
|
100
116
|
cachedAuthMethod = "none";
|
|
101
117
|
connectionVerified = false;
|
|
118
|
+
activeStoreId = null; // Re-seed from disk on next call
|
|
102
119
|
// Also clear tool cache so next load fetches fresh
|
|
103
120
|
loadedTools = [];
|
|
104
121
|
loadedToolNames.clear();
|
|
@@ -209,7 +226,7 @@ export async function getServerStatus() {
|
|
|
209
226
|
const tools = await loadServerToolDefinitions();
|
|
210
227
|
return {
|
|
211
228
|
connected: tools.length > 0,
|
|
212
|
-
storeId:
|
|
229
|
+
storeId: getActiveStoreId(),
|
|
213
230
|
storeName: config.store_name || "",
|
|
214
231
|
toolCount: tools.length,
|
|
215
232
|
authMethod: cachedAuthMethod
|
|
@@ -391,6 +408,9 @@ export async function executeServerTool(name, input, emitter) {
|
|
|
391
408
|
};
|
|
392
409
|
}
|
|
393
410
|
|
|
411
|
+
// Use in-memory store_id — immune to external session file changes
|
|
412
|
+
const storeId = getActiveStoreId();
|
|
413
|
+
|
|
394
414
|
// Auth token: service role key preferred, user JWT fallback
|
|
395
415
|
let authToken = config.supabaseKey;
|
|
396
416
|
if (!authToken) {
|
|
@@ -469,19 +489,24 @@ export async function executeServerTool(name, input, emitter) {
|
|
|
469
489
|
if (name === "media" && (input.action === "upload" || input.action === "bulk_upload")) {
|
|
470
490
|
const fileUrl = input.file_url;
|
|
471
491
|
if (fileUrl && (fileUrl.startsWith("/") || /^[A-Z]:\\/i.test(fileUrl)) && !input.file_path && !input.file_paths) {
|
|
472
|
-
input
|
|
473
|
-
|
|
492
|
+
// Clone to avoid mutating the original input (stored in conversation history)
|
|
493
|
+
const {
|
|
494
|
+
file_url: _fu,
|
|
495
|
+
...rest
|
|
496
|
+
} = input;
|
|
497
|
+
serverArgs = {
|
|
498
|
+
...rest,
|
|
474
499
|
file_path: fileUrl
|
|
475
500
|
};
|
|
476
|
-
delete input.file_url;
|
|
477
501
|
}
|
|
478
502
|
}
|
|
479
|
-
|
|
503
|
+
const mediaInput = serverArgs !== input ? serverArgs : input;
|
|
504
|
+
if (name === "media" && (mediaInput.action === "upload" || mediaInput.action === "bulk_upload") && (mediaInput.file_path || mediaInput.file_paths)) {
|
|
480
505
|
let paths = [];
|
|
481
|
-
if (Array.isArray(
|
|
482
|
-
paths =
|
|
483
|
-
} else if (typeof
|
|
484
|
-
paths = [
|
|
506
|
+
if (Array.isArray(mediaInput.file_paths)) {
|
|
507
|
+
paths = mediaInput.file_paths;
|
|
508
|
+
} else if (typeof mediaInput.file_path === "string") {
|
|
509
|
+
paths = [mediaInput.file_path];
|
|
485
510
|
}
|
|
486
511
|
if (paths.length > 0) {
|
|
487
512
|
const MAX_FILE_SIZE = 10_000_000; // 10MB per file
|
|
@@ -502,7 +527,7 @@ export async function executeServerTool(name, input, emitter) {
|
|
|
502
527
|
file_path: _fp,
|
|
503
528
|
file_paths: _fps,
|
|
504
529
|
...rest
|
|
505
|
-
} =
|
|
530
|
+
} = mediaInput;
|
|
506
531
|
serverArgs = {
|
|
507
532
|
...rest,
|
|
508
533
|
action: "upload",
|
|
@@ -557,7 +582,7 @@ export async function executeServerTool(name, input, emitter) {
|
|
|
557
582
|
file_path: _fp,
|
|
558
583
|
file_paths: _fps,
|
|
559
584
|
...rest
|
|
560
|
-
} =
|
|
585
|
+
} = mediaInput;
|
|
561
586
|
serverArgs = {
|
|
562
587
|
...rest,
|
|
563
588
|
action: "bulk_upload",
|
|
@@ -732,7 +757,7 @@ export async function executeServerTool(name, input, emitter) {
|
|
|
732
757
|
mode: "tool_stream",
|
|
733
758
|
tool_name: name,
|
|
734
759
|
args: serverArgs,
|
|
735
|
-
store_id:
|
|
760
|
+
store_id: storeId || undefined,
|
|
736
761
|
trace_id: executionContext.traceId || undefined,
|
|
737
762
|
conversation_id: executionContext.conversationId || undefined,
|
|
738
763
|
userId: executionContext.userId || undefined,
|
|
@@ -1 +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":[]}
|
|
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","activeStoreId","setActiveStoreId","storeId","getActiveStoreId","config","getSupabaseClient","supabaseUrl","supabaseKey","client","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","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","_fu","mediaInput","MAX_FILE_SIZE","MAX_BATCH_BYTES","MAX_BATCH_COUNT","toFixed","_fps","base64","file_name","basename","files","errors","slice","_read_errors","undefined","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","store_id","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\n// In-memory store context — set once at init, updated only on explicit store switch.\n// Prevents cross-app session file writes from silently changing the active store.\nlet activeStoreId: string | null = null;\n\nexport function setActiveStoreId(storeId: string): void {\n activeStoreId = storeId;\n}\n\nexport function getActiveStoreId(): string {\n if (activeStoreId) return activeStoreId;\n // First call — seed from disk, then own it in memory\n const config = resolveConfig();\n activeStoreId = config.storeId || \"\";\n return activeStoreId;\n}\n\nasync function getSupabaseClient(): Promise<{ client: SupabaseClient; storeId: string } | null> {\n const config = resolveConfig();\n const storeId = getActiveStoreId();\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 cachedStoreId = storeId;\n return { client: cachedClient, storeId: cachedStoreId };\n }\n cachedClient = createClient(config.supabaseUrl, config.supabaseKey, {\n auth: { persistSession: false, autoRefreshToken: false },\n });\n cachedStoreId = 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 = storeId;\n return { client: cachedClient, storeId: cachedStoreId };\n }\n cachedClient = createAuthenticatedClient(token);\n cachedToken = token;\n cachedStoreId = 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 activeStoreId = null; // Re-seed from disk on next call\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: getActiveStoreId(),\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 // Use in-memory store_id — immune to external session file changes\n const storeId = getActiveStoreId();\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 // Clone to avoid mutating the original input (stored in conversation history)\n const { file_url: _fu, ...rest } = input;\n serverArgs = { ...rest, file_path: fileUrl };\n }\n }\n const mediaInput = serverArgs !== input ? serverArgs : input;\n if (name === \"media\" && (mediaInput.action === \"upload\" || mediaInput.action === \"bulk_upload\") && (mediaInput.file_path || mediaInput.file_paths)) {\n let paths: string[] = [];\n if (Array.isArray(mediaInput.file_paths)) {\n paths = mediaInput.file_paths as string[];\n } else if (typeof mediaInput.file_path === \"string\") {\n paths = [mediaInput.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 } = mediaInput;\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 } = mediaInput;\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: 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":[]}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Session Client — thin HTTP client for the session API.
|
|
3
|
+
*
|
|
4
|
+
* Used by the CLI in session mode to create/resume sessions and send messages
|
|
5
|
+
* via the server-side SessionManager, gaining DB persistence, memory, identity,
|
|
6
|
+
* and cross-surface continuity.
|
|
7
|
+
*/
|
|
8
|
+
export interface SessionInfo {
|
|
9
|
+
id: string;
|
|
10
|
+
store_id: string;
|
|
11
|
+
agent_id: string;
|
|
12
|
+
surface: string;
|
|
13
|
+
status: string;
|
|
14
|
+
created_at: string;
|
|
15
|
+
updated_at: string;
|
|
16
|
+
metadata: Record<string, unknown>;
|
|
17
|
+
}
|
|
18
|
+
export interface SessionTurnResult {
|
|
19
|
+
finalText: string;
|
|
20
|
+
tokens: {
|
|
21
|
+
input: number;
|
|
22
|
+
output: number;
|
|
23
|
+
cacheRead: number;
|
|
24
|
+
cacheCreation: number;
|
|
25
|
+
};
|
|
26
|
+
costUsd: number;
|
|
27
|
+
turnCount: number;
|
|
28
|
+
toolsUsed: string[];
|
|
29
|
+
}
|
|
30
|
+
export interface SessionTurnCallbacks {
|
|
31
|
+
onText?: (text: string) => void;
|
|
32
|
+
onToolStart?: (name: string, input?: unknown) => void;
|
|
33
|
+
onToolResult?: (name: string, success: boolean, result?: unknown) => void;
|
|
34
|
+
onToolProgress?: (name: string, progress: unknown) => void;
|
|
35
|
+
onUsage?: (tokens: {
|
|
36
|
+
input: number;
|
|
37
|
+
output: number;
|
|
38
|
+
cacheRead: number;
|
|
39
|
+
cacheCreation: number;
|
|
40
|
+
}, costUsd: number) => void;
|
|
41
|
+
onDone?: (conversationId: string) => void;
|
|
42
|
+
onError?: (error: string) => void;
|
|
43
|
+
}
|
|
44
|
+
export declare class SessionClient {
|
|
45
|
+
private serverUrl;
|
|
46
|
+
private getToken;
|
|
47
|
+
constructor(serverUrl: string, getToken: () => Promise<string | null>);
|
|
48
|
+
/**
|
|
49
|
+
* Create a new session on the server.
|
|
50
|
+
*/
|
|
51
|
+
createSession(opts: {
|
|
52
|
+
storeId: string;
|
|
53
|
+
agentId: string;
|
|
54
|
+
surface?: string;
|
|
55
|
+
message?: string;
|
|
56
|
+
}): Promise<SessionInfo>;
|
|
57
|
+
/**
|
|
58
|
+
* Send a message to a session and stream the response via SSE.
|
|
59
|
+
*/
|
|
60
|
+
sendMessage(sessionId: string, message: string, callbacks: SessionTurnCallbacks, signal?: AbortSignal): Promise<SessionTurnResult | null>;
|
|
61
|
+
/**
|
|
62
|
+
* List sessions for a store.
|
|
63
|
+
*/
|
|
64
|
+
listSessions(storeId: string, opts?: {
|
|
65
|
+
limit?: number;
|
|
66
|
+
surface?: string;
|
|
67
|
+
}): Promise<SessionInfo[]>;
|
|
68
|
+
/**
|
|
69
|
+
* Get a single session by ID.
|
|
70
|
+
*/
|
|
71
|
+
getSession(sessionId: string): Promise<SessionInfo | null>;
|
|
72
|
+
/**
|
|
73
|
+
* Health check — verify the session API is available (not just the server).
|
|
74
|
+
* Uses the /health endpoint first (no auth needed), then probes /sessions
|
|
75
|
+
* to confirm session routes exist. Does NOT call getToken to avoid side effects.
|
|
76
|
+
*/
|
|
77
|
+
healthCheck(): Promise<boolean>;
|
|
78
|
+
}
|