whale-code 6.5.6 → 6.5.7
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 +1 -1
- 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 +5 -4
- 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
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-worker-base.js","names":["AGENT_DEFAULTS","getProxyUrl","resolveConfig","getValidToken","refreshSession","parseSSEStream","collectStreamResult","callServerProxy","buildAPIRequest","buildSystemBlocks","addPromptCaching","isLocalTool","executeLocalTool","isServerTool","executeServerTool","LONG_RUNNING_TOOL_TIMEOUT_MS","LONG_RUNNING_TOOLS","Set","streamResultToResponse","result","includeThinking","content","tb","thinkingBlocks","push","type","thinking","signature","text","tu","toolUseBlocks","id","name","input","usage","input_tokens","inputTokens","output_tokens","outputTokens","cache_read_tokens","cacheReadTokens","cache_creation_tokens","cacheCreationTokens","stop_reason","stopReason","callAgentAPI","opts","token","Error","apiConfig","model","modelId","contextProfile","thinkingEnabled","maxOutputTokens","tools","cacheLastTool","length","slice","cache_control","system","systemPrompt","messages","cachedMessages","storeId","heartbeatTimer","onHeartbeat","setInterval","stream","proxyUrl","undefined","timeoutMs","abortSignal","signal","onTokenRefresh","success","config","access_token","clearInterval","executeToolBlocks","toolBlocks","loopDetector","callbacks","customExecutor","maxToolResultChars","toolResultTruncateChars","toolTimeoutMs","batchErrorLimit","loopBatchErrorLimit","toolResults","toolsUsed","customSignals","executeSingle","batch","aborted","tool_use_id","JSON","stringify","error","loopCheck","recordCall","blocked","reason","path","readCheck","trackRead","onToolStart","toolStart","Date","now","isTransient","executeOne","customResult","output","effectiveTimeout","has","Math","max","Promise","race","_","reject","setTimeout","toolErr","msg","message","String","test","toolDuration","onToolEnd","recordResult","errors","includes","contentStr","toLocaleString","FILE_MUTATING_TOOLS","sequential","filter","parallel","batchState","parallelResults","all","map","seqBatchState","extractTextBlocks","b","extractToolUseBlocks","getResponseText","join","deduplicateTools","seen","tool","add","assertUniqueToolNames","names","yieldToEventLoop","resolve","yieldForRender"],"sources":["../../../src/cli/services/agent-worker-base.ts"],"sourcesContent":["/**\n * Agent Worker Base — shared utilities for subagent.ts and teammate.ts\n *\n * Extracts the common plumbing:\n * - API calling (auth, build request, call proxy, collect stream, convert response)\n * - Tool execution with loop detection, truncation, and result formatting\n * - Token tracking\n *\n * Both subagent and teammate keep their own types, system prompts, and lifecycle logic.\n * This module provides composable functions, NOT a class hierarchy.\n */\n\nimport type Anthropic from \"@anthropic-ai/sdk\";\nimport { LoopDetector, AGENT_DEFAULTS } from \"../../shared/agent-core.js\";\nimport { getProxyUrl, resolveConfig } from \"./config-store.js\";\nimport { getValidToken, refreshSession } from \"./auth-service.js\";\nimport { parseSSEStream, collectStreamResult } from \"../../shared/sse-parser.js\";\nimport {\n callServerProxy,\n buildAPIRequest,\n buildSystemBlocks,\n} from \"../../shared/api-client.js\";\nimport { addPromptCaching } from \"../../shared/agent-core.js\";\nimport {\n isLocalTool,\n executeLocalTool,\n} from \"./local-tools.js\";\nimport {\n isServerTool,\n executeServerTool,\n} from \"./server-tools.js\";\nimport type { ContextProfile, StreamResult } from \"../../shared/types.js\";\n\n// ============================================================================\n// LONG-RUNNING TOOL TIMEOUT (mirrors tool-dispatch.ts)\n// ============================================================================\n\n/** Tools that spawn workers/subprocesses and need much longer than 2 min */\nconst LONG_RUNNING_TOOL_TIMEOUT_MS = 10 * 60 * 1000; // 10 minutes\nconst LONG_RUNNING_TOOLS = new Set([\"team_create\", \"task\", \"task_output\", \"kali\", \"delegate_task\", \"exit_plan_mode\", \"ask_user_question\"]);\n\n// ============================================================================\n// TYPES\n// ============================================================================\n\n/** Thinking blocks aren't part of Anthropic.ContentBlock but are returned by the API */\ninterface ThinkingBlock {\n type: \"thinking\";\n thinking: string;\n signature: string;\n}\n\n/** Content block including thinking (extends SDK's ContentBlock union) */\nexport type AgentContentBlock = Anthropic.ContentBlock | ThinkingBlock;\n\n/** Unified response from an API call — used by both subagent and teammate */\nexport interface AgentAPIResponse {\n content: AgentContentBlock[];\n usage: {\n input_tokens: number;\n output_tokens: number;\n cache_read_tokens: number;\n cache_creation_tokens: number;\n };\n stop_reason: string;\n}\n\n/** Options for callAgentAPI */\nexport interface AgentAPIOptions {\n modelId: string;\n contextProfile: ContextProfile;\n systemPrompt: string;\n messages: Anthropic.MessageParam[];\n tools: Anthropic.Tool[];\n thinkingEnabled?: boolean;\n maxOutputTokens?: number;\n timeoutMs?: number;\n /** If true, add cache_control to last tool */\n cacheLastTool?: boolean;\n /** Called periodically during long API calls (streaming/thinking) to signal liveness */\n onHeartbeat?: () => void;\n /** AbortSignal for cancellation */\n abortSignal?: AbortSignal;\n}\n\n/** Result of executing a single tool */\nexport interface ToolExecResult {\n success: boolean;\n output: string;\n}\n\n/** Callbacks for tool execution progress */\nexport interface ToolExecCallbacks {\n onToolStart?: (toolName: string, input: Record<string, unknown>) => void;\n onToolEnd?: (toolName: string, success: boolean, durationMs: number) => void;\n}\n\n/** Options for executeToolBlocks */\nexport interface ExecuteToolBlocksOptions {\n toolBlocks: Anthropic.ToolUseBlock[];\n loopDetector: LoopDetector;\n callbacks?: ToolExecCallbacks;\n /** Additional tool executor for domain-specific tools (e.g., team tools) */\n customExecutor?: (name: string, input: Record<string, unknown>) => Promise<ToolExecResult | null>;\n /** Max chars per tool result before truncation */\n maxToolResultChars?: number;\n /** Timeout per tool call in ms (no timeout if not set) */\n toolTimeoutMs?: number;\n /** Max errors from a single parallel batch before aborting remaining calls.\n * Prevents Promise.all() from cascading N failures into the LoopDetector. */\n batchErrorLimit?: number;\n /** AbortSignal for cancellation */\n signal?: AbortSignal;\n}\n\n/** Result of executing all tool blocks in a turn */\nexport interface ToolBlocksResult {\n toolResults: Anthropic.ToolResultBlockParam[];\n toolsUsed: string[];\n /** Set by custom executor if a domain event occurred (e.g., team task completed) */\n customSignals: Record<string, unknown>;\n}\n\n// ============================================================================\n// API CLIENT — unified proxy caller\n// ============================================================================\n\n/**\n * Convert a StreamResult (from SSE collector) to the AgentAPIResponse format\n * that both subagent and teammate expect.\n *\n * Subagent includes thinking blocks; teammate does not (thinkingEnabled=false).\n */\nexport function streamResultToResponse(\n result: StreamResult,\n includeThinking: boolean,\n): AgentAPIResponse {\n const content: AgentContentBlock[] = [];\n\n if (includeThinking) {\n for (const tb of result.thinkingBlocks) {\n content.push({\n type: \"thinking\",\n thinking: tb.thinking,\n signature: tb.signature,\n });\n }\n }\n\n if (result.text) {\n content.push({ type: \"text\", text: result.text } as Anthropic.TextBlock);\n }\n\n for (const tu of result.toolUseBlocks) {\n content.push({\n type: \"tool_use\",\n id: tu.id,\n name: tu.name,\n input: tu.input,\n } as Anthropic.ToolUseBlock);\n }\n\n return {\n content,\n usage: {\n input_tokens: result.usage.inputTokens,\n output_tokens: result.usage.outputTokens,\n cache_read_tokens: result.usage.cacheReadTokens ?? 0,\n cache_creation_tokens: result.usage.cacheCreationTokens ?? 0,\n },\n stop_reason: result.stopReason,\n };\n}\n\n/**\n * Call the server proxy API, collect the SSE stream, and return a typed response.\n * Handles auth, request building, caching setup, and stream collection.\n */\nexport async function callAgentAPI(opts: AgentAPIOptions): Promise<AgentAPIResponse> {\n const token = await getValidToken();\n if (!token) throw new Error(\"No API key available. Run `whale login`.\");\n\n const apiConfig = buildAPIRequest({\n model: opts.modelId,\n contextProfile: opts.contextProfile,\n thinkingEnabled: opts.thinkingEnabled ?? false,\n maxOutputTokens: opts.maxOutputTokens,\n });\n\n // Optionally add cache_control to last tool\n let tools: object[];\n if (opts.cacheLastTool && opts.tools.length > 0) {\n tools = [\n ...opts.tools.slice(0, -1),\n { ...opts.tools[opts.tools.length - 1], cache_control: { type: \"ephemeral\" } },\n ];\n } else {\n tools = opts.tools;\n }\n\n const system = buildSystemBlocks(opts.systemPrompt);\n\n // Apply prompt caching to messages (tools already cached above)\n const { messages: cachedMessages } = addPromptCaching([], opts.messages);\n\n const { storeId } = resolveConfig();\n\n // Heartbeat timer — keeps parent stall detector alive during long API calls\n // (thinking + streaming can take 60-90s with no other IPC messages)\n let heartbeatTimer: ReturnType<typeof setInterval> | undefined;\n if (opts.onHeartbeat) {\n heartbeatTimer = setInterval(opts.onHeartbeat, 10_000);\n }\n\n try {\n const stream = await callServerProxy({\n proxyUrl: getProxyUrl(),\n token,\n model: opts.modelId,\n system,\n messages: cachedMessages,\n tools,\n apiConfig,\n storeId: storeId || undefined,\n ...(opts.timeoutMs ? { timeoutMs: opts.timeoutMs } : {}),\n ...(opts.abortSignal ? { signal: opts.abortSignal } : {}),\n onTokenRefresh: async () => {\n const result = await refreshSession();\n return result.success ? result.config!.access_token! : null;\n },\n });\n\n const result = await collectStreamResult(parseSSEStream(stream));\n return streamResultToResponse(result, opts.thinkingEnabled ?? false);\n } finally {\n if (heartbeatTimer) clearInterval(heartbeatTimer);\n }\n}\n\n// ============================================================================\n// TOOL EXECUTION — shared loop with detection, routing, and truncation\n// ============================================================================\n\n/**\n * Execute an array of tool use blocks, handling:\n * - Loop detection (via LoopDetector)\n * - Routing to local, server, or custom executor\n * - Result truncation to maxToolResultChars\n * - Optional per-tool timeout\n *\n * Returns tool results ready to append to messages, plus metadata.\n */\nexport async function executeToolBlocks(\n opts: ExecuteToolBlocksOptions,\n): Promise<ToolBlocksResult> {\n const {\n toolBlocks,\n loopDetector,\n callbacks,\n customExecutor,\n maxToolResultChars = AGENT_DEFAULTS.toolResultTruncateChars,\n toolTimeoutMs,\n batchErrorLimit = AGENT_DEFAULTS.loopBatchErrorLimit,\n signal,\n } = opts;\n\n const toolResults: Anthropic.ToolResultBlockParam[] = [];\n const toolsUsed: string[] = [];\n const customSignals: Record<string, unknown> = {};\n\n /** Shared state for each parallel batch — tracks errors to abort remaining calls.\n * JavaScript is single-threaded, so between `await` yields this is atomic. */\n interface BatchState {\n errors: number;\n aborted: boolean;\n }\n\n async function executeSingle(tu: Anthropic.ToolUseBlock, batch: BatchState): Promise<Anthropic.ToolResultBlockParam> {\n // Early exit if cancelled\n if (signal?.aborted) {\n return {\n type: \"tool_result\",\n tool_use_id: tu.id,\n content: \"Cancelled\",\n };\n }\n\n // Early exit if batch already aborted\n if (batch.aborted) {\n return {\n type: \"tool_result\",\n tool_use_id: tu.id,\n content: JSON.stringify({ error: \"Batch aborted — too many sibling tool calls failed. Re-assess your approach.\" }),\n };\n }\n\n // Circuit breaker check\n const loopCheck = loopDetector.recordCall(tu.name, tu.input as Record<string, unknown>);\n if (loopCheck.blocked) {\n return {\n type: \"tool_result\",\n tool_use_id: tu.id,\n content: JSON.stringify({ error: loopCheck.reason }),\n };\n }\n\n // File read frequency tracking — mirrors tool-dispatch.ts behavior.\n // Without this, subagents/teammates can read the same file unlimited times.\n if (tu.name === \"read_file\" && typeof (tu.input as Record<string, unknown>).path === \"string\") {\n const readCheck = loopDetector.trackRead((tu.input as Record<string, unknown>).path as string);\n if (readCheck.blocked) {\n return {\n type: \"tool_result\",\n tool_use_id: tu.id,\n content: JSON.stringify({ error: readCheck.reason }),\n };\n }\n }\n\n callbacks?.onToolStart?.(tu.name, tu.input as Record<string, unknown>);\n\n const toolStart = Date.now();\n let result: ToolExecResult;\n\n let isTransient = false;\n try {\n const executeOne = async (): Promise<ToolExecResult> => {\n if (customExecutor) {\n const customResult = await customExecutor(tu.name, tu.input as Record<string, unknown>);\n if (customResult !== null) return customResult;\n }\n\n if (isLocalTool(tu.name)) {\n return await executeLocalTool(tu.name, tu.input as Record<string, unknown>, signal);\n } else if (isServerTool(tu.name)) {\n return await executeServerTool(tu.name, tu.input as Record<string, unknown>);\n } else {\n return { success: false, output: `Unknown tool: ${tu.name}` };\n }\n };\n\n if (toolTimeoutMs) {\n const effectiveTimeout = LONG_RUNNING_TOOLS.has(tu.name)\n ? Math.max(toolTimeoutMs, LONG_RUNNING_TOOL_TIMEOUT_MS)\n : toolTimeoutMs;\n result = await Promise.race([\n executeOne(),\n new Promise<ToolExecResult>((_, reject) =>\n setTimeout(\n () => reject(new Error(`Tool ${tu.name} timed out after ${effectiveTimeout / 1000}s`)),\n effectiveTimeout,\n ),\n ),\n ]);\n } else {\n result = await executeOne();\n }\n } catch (toolErr: any) {\n const msg = toolErr.message || String(toolErr);\n isTransient = /timed?\\s*out/i.test(msg) || /rate.?limit/i.test(msg) || /429/i.test(msg);\n result = { success: false, output: `Tool execution error: ${msg}` };\n }\n\n const toolDuration = Date.now() - toolStart;\n\n // If batch was aborted while executing, skip recording to avoid inflating\n // LoopDetector counts from a single bad parallel batch (TOCTOU race fix).\n if (!result.success && batch.aborted) {\n callbacks?.onToolEnd?.(tu.name, false, toolDuration);\n return {\n type: \"tool_result\",\n tool_use_id: tu.id,\n content: JSON.stringify({ error: \"Batch aborted — too many sibling tool calls failed. Re-assess your approach.\" }),\n };\n }\n\n loopDetector.recordResult(tu.name, result.success, tu.input as Record<string, unknown>, isTransient);\n\n // Track batch-level failures\n if (!result.success) {\n batch.errors++;\n if (batch.errors >= batchErrorLimit) {\n batch.aborted = true;\n }\n }\n\n callbacks?.onToolEnd?.(tu.name, result.success, toolDuration);\n\n if (!toolsUsed.includes(tu.name)) {\n toolsUsed.push(tu.name);\n }\n\n let contentStr = JSON.stringify(result.success ? result.output : { error: result.output });\n if (contentStr.length > maxToolResultChars) {\n contentStr =\n contentStr.slice(0, maxToolResultChars) +\n `\\n\\n... (truncated — ${contentStr.length.toLocaleString()} chars total)`;\n }\n return {\n type: \"tool_result\",\n tool_use_id: tu.id,\n content: contentStr,\n };\n }\n\n // Split into file-mutating (sequential) and everything else (parallel).\n // File writes/edits must be sequential to prevent race conditions on the same file.\n // run_command runs in parallel — like tool-dispatch.ts, bash calls can be concurrent\n // (tests, searches, etc.). The model decides ordering via tool_use blocks.\n const FILE_MUTATING_TOOLS = new Set([\"write_file\", \"edit_file\", \"multi_edit\", \"notebook_edit\"]);\n const sequential = toolBlocks.filter(tu => FILE_MUTATING_TOOLS.has(tu.name));\n const parallel = toolBlocks.filter(tu => !FILE_MUTATING_TOOLS.has(tu.name));\n\n // Run parallel tools (including run_command) with batch error abort\n if (parallel.length > 0) {\n const batchState: BatchState = { errors: 0, aborted: false };\n const parallelResults = await Promise.all(parallel.map(tu => executeSingle(tu, batchState)));\n toolResults.push(...parallelResults);\n }\n\n // Run file-mutating tools sequentially (batch state still used for consistency)\n const seqBatchState: BatchState = { errors: 0, aborted: false };\n for (const tu of sequential) {\n const result = await executeSingle(tu, seqBatchState);\n toolResults.push(result);\n }\n\n return { toolResults, toolsUsed, customSignals };\n}\n\n// ============================================================================\n// CONTENT BLOCK HELPERS\n// ============================================================================\n\n/** Extract text blocks from a response */\nexport function extractTextBlocks(content: AgentContentBlock[]): Anthropic.TextBlock[] {\n return content.filter((b): b is Anthropic.TextBlock => b.type === \"text\");\n}\n\n/** Extract tool use blocks from a response */\nexport function extractToolUseBlocks(content: AgentContentBlock[]): Anthropic.ToolUseBlock[] {\n return content.filter((b): b is Anthropic.ToolUseBlock => b.type === \"tool_use\");\n}\n\n/** Get combined text from all text blocks */\nexport function getResponseText(content: AgentContentBlock[]): string {\n return extractTextBlocks(content).map((b) => b.text).join(\"\\n\");\n}\n\n// ============================================================================\n// TOOL DEDUPLICATION — shared by subagent.ts and teammate.ts\n// ============================================================================\n\n/**\n * Deduplicate tools by name — local tools take priority over server tools.\n * Ensures the Anthropic API never receives duplicate tool names (400 error).\n */\nexport function deduplicateTools(tools: Anthropic.Tool[]): Anthropic.Tool[] {\n const seen = new Set<string>();\n const result: Anthropic.Tool[] = [];\n for (const tool of tools) {\n if (!seen.has(tool.name)) {\n seen.add(tool.name);\n result.push(tool);\n }\n }\n return result;\n}\n\n/**\n * Assert that all tool names are unique. Call right before sending to the API\n * to fail fast with a clear error instead of a cryptic Anthropic 400.\n */\nexport function assertUniqueToolNames(tools: Anthropic.Tool[]): void {\n const names = new Set<string>();\n for (const tool of tools) {\n if (names.has(tool.name)) {\n throw new Error(`Duplicate tool name \"${tool.name}\" — tools must have unique names before calling the Anthropic API`);\n }\n names.add(tool.name);\n }\n}\n\n// ============================================================================\n// YIELD HELPERS — prevent blocking the event loop during long agent loops\n// ============================================================================\n\n/** Yield to event loop to prevent blocking (microtask resolution) */\nexport function yieldToEventLoop(): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, 0));\n}\n\n/** Longer yield for UI-critical moments (before long API calls, ~1 frame at 60fps) */\nexport function yieldForRender(): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, 16));\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"agent-worker-base.js","names":["AGENT_DEFAULTS","getProxyUrl","resolveConfig","getValidToken","refreshSession","parseSSEStream","collectStreamResult","callServerProxy","buildAPIRequest","buildSystemBlocks","addPromptCaching","isLocalTool","executeLocalTool","isServerTool","executeServerTool","LONG_RUNNING_TOOL_TIMEOUT_MS","LONG_RUNNING_TOOLS","Set","streamResultToResponse","result","includeThinking","content","tb","thinkingBlocks","push","type","thinking","signature","text","tu","toolUseBlocks","id","name","input","usage","input_tokens","inputTokens","output_tokens","outputTokens","cache_read_tokens","cacheReadTokens","cache_creation_tokens","cacheCreationTokens","stop_reason","stopReason","callAgentAPI","opts","token","Error","apiConfig","model","modelId","contextProfile","thinkingEnabled","maxOutputTokens","tools","cacheLastTool","length","slice","cache_control","system","systemPrompt","messages","cachedMessages","storeId","heartbeatTimer","onHeartbeat","setInterval","stream","proxyUrl","undefined","timeoutMs","abortSignal","signal","onTokenRefresh","success","config","access_token","clearInterval","executeToolBlocks","toolBlocks","loopDetector","callbacks","customExecutor","maxToolResultChars","toolResultTruncateChars","toolTimeoutMs","batchErrorLimit","loopBatchErrorLimit","toolResults","toolsUsed","customSignals","executeSingle","batch","aborted","tool_use_id","JSON","stringify","error","loopCheck","recordCall","blocked","reason","path","readCheck","trackRead","onToolStart","toolStart","Date","now","isTransient","executeOne","customResult","output","effectiveTimeout","has","Math","max","Promise","race","_","reject","setTimeout","toolErr","msg","message","String","test","toolDuration","onToolEnd","recordResult","errors","includes","contentStr","toLocaleString","FILE_MUTATING_TOOLS","sequential","filter","parallel","batchState","parallelResults","all","map","seqBatchState","extractTextBlocks","b","extractToolUseBlocks","getResponseText","join","deduplicateTools","seen","tool","add","assertUniqueToolNames","names","yieldToEventLoop","resolve","yieldForRender"],"sources":["../../../src/cli/services/agent-worker-base.ts"],"sourcesContent":["/**\n * Agent Worker Base — shared utilities for subagent.ts and teammate.ts\n *\n * Extracts the common plumbing:\n * - API calling (auth, build request, call proxy, collect stream, convert response)\n * - Tool execution with loop detection, truncation, and result formatting\n * - Token tracking\n *\n * Both subagent and teammate keep their own types, system prompts, and lifecycle logic.\n * This module provides composable functions, NOT a class hierarchy.\n */\n\nimport type Anthropic from \"@anthropic-ai/sdk\";\nimport { LoopDetector, AGENT_DEFAULTS } from \"../../shared/agent-core.js\";\nimport { getProxyUrl, resolveConfig } from \"./config-store.js\";\nimport { getValidToken, refreshSession } from \"./auth-service.js\";\nimport { parseSSEStream, collectStreamResult } from \"../../shared/sse-parser.js\";\nimport {\n callServerProxy,\n buildAPIRequest,\n buildSystemBlocks,\n} from \"../../shared/api-client.js\";\nimport { addPromptCaching } from \"../../shared/agent-core.js\";\nimport {\n isLocalTool,\n executeLocalTool,\n} from \"./local-tools.js\";\nimport {\n isServerTool,\n executeServerTool,\n} from \"./server-tools.js\";\nimport type { ContextProfile, StreamResult } from \"../../shared/types.js\";\n\n// ============================================================================\n// LONG-RUNNING TOOL TIMEOUT (mirrors tool-dispatch.ts)\n// ============================================================================\n\n/** Tools that spawn workers/subprocesses and need much longer than 2 min */\nconst LONG_RUNNING_TOOL_TIMEOUT_MS = 10 * 60 * 1000; // 10 minutes\nconst LONG_RUNNING_TOOLS = new Set([\"task\", \"task_output\", \"kali\", \"delegate_task\", \"exit_plan_mode\", \"ask_user_question\"]);\n\n// ============================================================================\n// TYPES\n// ============================================================================\n\n/** Thinking blocks aren't part of Anthropic.ContentBlock but are returned by the API */\ninterface ThinkingBlock {\n type: \"thinking\";\n thinking: string;\n signature: string;\n}\n\n/** Content block including thinking (extends SDK's ContentBlock union) */\nexport type AgentContentBlock = Anthropic.ContentBlock | ThinkingBlock;\n\n/** Unified response from an API call — used by both subagent and teammate */\nexport interface AgentAPIResponse {\n content: AgentContentBlock[];\n usage: {\n input_tokens: number;\n output_tokens: number;\n cache_read_tokens: number;\n cache_creation_tokens: number;\n };\n stop_reason: string;\n}\n\n/** Options for callAgentAPI */\nexport interface AgentAPIOptions {\n modelId: string;\n contextProfile: ContextProfile;\n systemPrompt: string;\n messages: Anthropic.MessageParam[];\n tools: Anthropic.Tool[];\n thinkingEnabled?: boolean;\n maxOutputTokens?: number;\n timeoutMs?: number;\n /** If true, add cache_control to last tool */\n cacheLastTool?: boolean;\n /** Called periodically during long API calls (streaming/thinking) to signal liveness */\n onHeartbeat?: () => void;\n /** AbortSignal for cancellation */\n abortSignal?: AbortSignal;\n}\n\n/** Result of executing a single tool */\nexport interface ToolExecResult {\n success: boolean;\n output: string;\n}\n\n/** Callbacks for tool execution progress */\nexport interface ToolExecCallbacks {\n onToolStart?: (toolName: string, input: Record<string, unknown>) => void;\n onToolEnd?: (toolName: string, success: boolean, durationMs: number) => void;\n}\n\n/** Options for executeToolBlocks */\nexport interface ExecuteToolBlocksOptions {\n toolBlocks: Anthropic.ToolUseBlock[];\n loopDetector: LoopDetector;\n callbacks?: ToolExecCallbacks;\n /** Additional tool executor for domain-specific tools (e.g., team tools) */\n customExecutor?: (name: string, input: Record<string, unknown>) => Promise<ToolExecResult | null>;\n /** Max chars per tool result before truncation */\n maxToolResultChars?: number;\n /** Timeout per tool call in ms (no timeout if not set) */\n toolTimeoutMs?: number;\n /** Max errors from a single parallel batch before aborting remaining calls.\n * Prevents Promise.all() from cascading N failures into the LoopDetector. */\n batchErrorLimit?: number;\n /** AbortSignal for cancellation */\n signal?: AbortSignal;\n}\n\n/** Result of executing all tool blocks in a turn */\nexport interface ToolBlocksResult {\n toolResults: Anthropic.ToolResultBlockParam[];\n toolsUsed: string[];\n /** Set by custom executor if a domain event occurred (e.g., team task completed) */\n customSignals: Record<string, unknown>;\n}\n\n// ============================================================================\n// API CLIENT — unified proxy caller\n// ============================================================================\n\n/**\n * Convert a StreamResult (from SSE collector) to the AgentAPIResponse format\n * that both subagent and teammate expect.\n *\n * Subagent includes thinking blocks; teammate does not (thinkingEnabled=false).\n */\nexport function streamResultToResponse(\n result: StreamResult,\n includeThinking: boolean,\n): AgentAPIResponse {\n const content: AgentContentBlock[] = [];\n\n if (includeThinking) {\n for (const tb of result.thinkingBlocks) {\n content.push({\n type: \"thinking\",\n thinking: tb.thinking,\n signature: tb.signature,\n });\n }\n }\n\n if (result.text) {\n content.push({ type: \"text\", text: result.text } as Anthropic.TextBlock);\n }\n\n for (const tu of result.toolUseBlocks) {\n content.push({\n type: \"tool_use\",\n id: tu.id,\n name: tu.name,\n input: tu.input,\n } as Anthropic.ToolUseBlock);\n }\n\n return {\n content,\n usage: {\n input_tokens: result.usage.inputTokens,\n output_tokens: result.usage.outputTokens,\n cache_read_tokens: result.usage.cacheReadTokens ?? 0,\n cache_creation_tokens: result.usage.cacheCreationTokens ?? 0,\n },\n stop_reason: result.stopReason,\n };\n}\n\n/**\n * Call the server proxy API, collect the SSE stream, and return a typed response.\n * Handles auth, request building, caching setup, and stream collection.\n */\nexport async function callAgentAPI(opts: AgentAPIOptions): Promise<AgentAPIResponse> {\n const token = await getValidToken();\n if (!token) throw new Error(\"No API key available. Run `whale login`.\");\n\n const apiConfig = buildAPIRequest({\n model: opts.modelId,\n contextProfile: opts.contextProfile,\n thinkingEnabled: opts.thinkingEnabled ?? false,\n maxOutputTokens: opts.maxOutputTokens,\n });\n\n // Optionally add cache_control to last tool\n let tools: object[];\n if (opts.cacheLastTool && opts.tools.length > 0) {\n tools = [\n ...opts.tools.slice(0, -1),\n { ...opts.tools[opts.tools.length - 1], cache_control: { type: \"ephemeral\" } },\n ];\n } else {\n tools = opts.tools;\n }\n\n const system = buildSystemBlocks(opts.systemPrompt);\n\n // Apply prompt caching to messages (tools already cached above)\n const { messages: cachedMessages } = addPromptCaching([], opts.messages);\n\n const { storeId } = resolveConfig();\n\n // Heartbeat timer — keeps parent stall detector alive during long API calls\n // (thinking + streaming can take 60-90s with no other IPC messages)\n let heartbeatTimer: ReturnType<typeof setInterval> | undefined;\n if (opts.onHeartbeat) {\n heartbeatTimer = setInterval(opts.onHeartbeat, 10_000);\n }\n\n try {\n const stream = await callServerProxy({\n proxyUrl: getProxyUrl(),\n token,\n model: opts.modelId,\n system,\n messages: cachedMessages,\n tools,\n apiConfig,\n storeId: storeId || undefined,\n ...(opts.timeoutMs ? { timeoutMs: opts.timeoutMs } : {}),\n ...(opts.abortSignal ? { signal: opts.abortSignal } : {}),\n onTokenRefresh: async () => {\n const result = await refreshSession();\n return result.success ? result.config!.access_token! : null;\n },\n });\n\n const result = await collectStreamResult(parseSSEStream(stream));\n return streamResultToResponse(result, opts.thinkingEnabled ?? false);\n } finally {\n if (heartbeatTimer) clearInterval(heartbeatTimer);\n }\n}\n\n// ============================================================================\n// TOOL EXECUTION — shared loop with detection, routing, and truncation\n// ============================================================================\n\n/**\n * Execute an array of tool use blocks, handling:\n * - Loop detection (via LoopDetector)\n * - Routing to local, server, or custom executor\n * - Result truncation to maxToolResultChars\n * - Optional per-tool timeout\n *\n * Returns tool results ready to append to messages, plus metadata.\n */\nexport async function executeToolBlocks(\n opts: ExecuteToolBlocksOptions,\n): Promise<ToolBlocksResult> {\n const {\n toolBlocks,\n loopDetector,\n callbacks,\n customExecutor,\n maxToolResultChars = AGENT_DEFAULTS.toolResultTruncateChars,\n toolTimeoutMs,\n batchErrorLimit = AGENT_DEFAULTS.loopBatchErrorLimit,\n signal,\n } = opts;\n\n const toolResults: Anthropic.ToolResultBlockParam[] = [];\n const toolsUsed: string[] = [];\n const customSignals: Record<string, unknown> = {};\n\n /** Shared state for each parallel batch — tracks errors to abort remaining calls.\n * JavaScript is single-threaded, so between `await` yields this is atomic. */\n interface BatchState {\n errors: number;\n aborted: boolean;\n }\n\n async function executeSingle(tu: Anthropic.ToolUseBlock, batch: BatchState): Promise<Anthropic.ToolResultBlockParam> {\n // Early exit if cancelled\n if (signal?.aborted) {\n return {\n type: \"tool_result\",\n tool_use_id: tu.id,\n content: \"Cancelled\",\n };\n }\n\n // Early exit if batch already aborted\n if (batch.aborted) {\n return {\n type: \"tool_result\",\n tool_use_id: tu.id,\n content: JSON.stringify({ error: \"Batch aborted — too many sibling tool calls failed. Re-assess your approach.\" }),\n };\n }\n\n // Circuit breaker check\n const loopCheck = loopDetector.recordCall(tu.name, tu.input as Record<string, unknown>);\n if (loopCheck.blocked) {\n return {\n type: \"tool_result\",\n tool_use_id: tu.id,\n content: JSON.stringify({ error: loopCheck.reason }),\n };\n }\n\n // File read frequency tracking — mirrors tool-dispatch.ts behavior.\n // Without this, subagents/teammates can read the same file unlimited times.\n if (tu.name === \"read_file\" && typeof (tu.input as Record<string, unknown>).path === \"string\") {\n const readCheck = loopDetector.trackRead((tu.input as Record<string, unknown>).path as string);\n if (readCheck.blocked) {\n return {\n type: \"tool_result\",\n tool_use_id: tu.id,\n content: JSON.stringify({ error: readCheck.reason }),\n };\n }\n }\n\n callbacks?.onToolStart?.(tu.name, tu.input as Record<string, unknown>);\n\n const toolStart = Date.now();\n let result: ToolExecResult;\n\n let isTransient = false;\n try {\n const executeOne = async (): Promise<ToolExecResult> => {\n if (customExecutor) {\n const customResult = await customExecutor(tu.name, tu.input as Record<string, unknown>);\n if (customResult !== null) return customResult;\n }\n\n if (isLocalTool(tu.name)) {\n return await executeLocalTool(tu.name, tu.input as Record<string, unknown>, signal);\n } else if (isServerTool(tu.name)) {\n return await executeServerTool(tu.name, tu.input as Record<string, unknown>);\n } else {\n return { success: false, output: `Unknown tool: ${tu.name}` };\n }\n };\n\n if (toolTimeoutMs) {\n const effectiveTimeout = LONG_RUNNING_TOOLS.has(tu.name)\n ? Math.max(toolTimeoutMs, LONG_RUNNING_TOOL_TIMEOUT_MS)\n : toolTimeoutMs;\n result = await Promise.race([\n executeOne(),\n new Promise<ToolExecResult>((_, reject) =>\n setTimeout(\n () => reject(new Error(`Tool ${tu.name} timed out after ${effectiveTimeout / 1000}s`)),\n effectiveTimeout,\n ),\n ),\n ]);\n } else {\n result = await executeOne();\n }\n } catch (toolErr: any) {\n const msg = toolErr.message || String(toolErr);\n isTransient = /timed?\\s*out/i.test(msg) || /rate.?limit/i.test(msg) || /429/i.test(msg);\n result = { success: false, output: `Tool execution error: ${msg}` };\n }\n\n const toolDuration = Date.now() - toolStart;\n\n // If batch was aborted while executing, skip recording to avoid inflating\n // LoopDetector counts from a single bad parallel batch (TOCTOU race fix).\n if (!result.success && batch.aborted) {\n callbacks?.onToolEnd?.(tu.name, false, toolDuration);\n return {\n type: \"tool_result\",\n tool_use_id: tu.id,\n content: JSON.stringify({ error: \"Batch aborted — too many sibling tool calls failed. Re-assess your approach.\" }),\n };\n }\n\n loopDetector.recordResult(tu.name, result.success, tu.input as Record<string, unknown>, isTransient);\n\n // Track batch-level failures\n if (!result.success) {\n batch.errors++;\n if (batch.errors >= batchErrorLimit) {\n batch.aborted = true;\n }\n }\n\n callbacks?.onToolEnd?.(tu.name, result.success, toolDuration);\n\n if (!toolsUsed.includes(tu.name)) {\n toolsUsed.push(tu.name);\n }\n\n let contentStr = JSON.stringify(result.success ? result.output : { error: result.output });\n if (contentStr.length > maxToolResultChars) {\n contentStr =\n contentStr.slice(0, maxToolResultChars) +\n `\\n\\n... (truncated — ${contentStr.length.toLocaleString()} chars total)`;\n }\n return {\n type: \"tool_result\",\n tool_use_id: tu.id,\n content: contentStr,\n };\n }\n\n // Split into file-mutating (sequential) and everything else (parallel).\n // File writes/edits must be sequential to prevent race conditions on the same file.\n // run_command runs in parallel — like tool-dispatch.ts, bash calls can be concurrent\n // (tests, searches, etc.). The model decides ordering via tool_use blocks.\n const FILE_MUTATING_TOOLS = new Set([\"write_file\", \"edit_file\", \"multi_edit\", \"notebook_edit\"]);\n const sequential = toolBlocks.filter(tu => FILE_MUTATING_TOOLS.has(tu.name));\n const parallel = toolBlocks.filter(tu => !FILE_MUTATING_TOOLS.has(tu.name));\n\n // Run parallel tools (including run_command) with batch error abort\n if (parallel.length > 0) {\n const batchState: BatchState = { errors: 0, aborted: false };\n const parallelResults = await Promise.all(parallel.map(tu => executeSingle(tu, batchState)));\n toolResults.push(...parallelResults);\n }\n\n // Run file-mutating tools sequentially (batch state still used for consistency)\n const seqBatchState: BatchState = { errors: 0, aborted: false };\n for (const tu of sequential) {\n const result = await executeSingle(tu, seqBatchState);\n toolResults.push(result);\n }\n\n return { toolResults, toolsUsed, customSignals };\n}\n\n// ============================================================================\n// CONTENT BLOCK HELPERS\n// ============================================================================\n\n/** Extract text blocks from a response */\nexport function extractTextBlocks(content: AgentContentBlock[]): Anthropic.TextBlock[] {\n return content.filter((b): b is Anthropic.TextBlock => b.type === \"text\");\n}\n\n/** Extract tool use blocks from a response */\nexport function extractToolUseBlocks(content: AgentContentBlock[]): Anthropic.ToolUseBlock[] {\n return content.filter((b): b is Anthropic.ToolUseBlock => b.type === \"tool_use\");\n}\n\n/** Get combined text from all text blocks */\nexport function getResponseText(content: AgentContentBlock[]): string {\n return extractTextBlocks(content).map((b) => b.text).join(\"\\n\");\n}\n\n// ============================================================================\n// TOOL DEDUPLICATION — shared by subagent.ts and teammate.ts\n// ============================================================================\n\n/**\n * Deduplicate tools by name — local tools take priority over server tools.\n * Ensures the Anthropic API never receives duplicate tool names (400 error).\n */\nexport function deduplicateTools(tools: Anthropic.Tool[]): Anthropic.Tool[] {\n const seen = new Set<string>();\n const result: Anthropic.Tool[] = [];\n for (const tool of tools) {\n if (!seen.has(tool.name)) {\n seen.add(tool.name);\n result.push(tool);\n }\n }\n return result;\n}\n\n/**\n * Assert that all tool names are unique. Call right before sending to the API\n * to fail fast with a clear error instead of a cryptic Anthropic 400.\n */\nexport function assertUniqueToolNames(tools: Anthropic.Tool[]): void {\n const names = new Set<string>();\n for (const tool of tools) {\n if (names.has(tool.name)) {\n throw new Error(`Duplicate tool name \"${tool.name}\" — tools must have unique names before calling the Anthropic API`);\n }\n names.add(tool.name);\n }\n}\n\n// ============================================================================\n// YIELD HELPERS — prevent blocking the event loop during long agent loops\n// ============================================================================\n\n/** Yield to event loop to prevent blocking (microtask resolution) */\nexport function yieldToEventLoop(): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, 0));\n}\n\n/** Longer yield for UI-critical moments (before long API calls, ~1 frame at 60fps) */\nexport function yieldForRender(): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, 16));\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAGA,SAAuBA,cAAc,QAAQ,4BAA4B;AACzE,SAASC,WAAW,EAAEC,aAAa,QAAQ,mBAAmB;AAC9D,SAASC,aAAa,EAAEC,cAAc,QAAQ,mBAAmB;AACjE,SAASC,cAAc,EAAEC,mBAAmB,QAAQ,4BAA4B;AAChF,SACEC,eAAe,EACfC,eAAe,EACfC,iBAAiB,QACZ,4BAA4B;AACnC,SAASC,gBAAgB,QAAQ,4BAA4B;AAC7D,SACEC,WAAW,EACXC,gBAAgB,QACX,kBAAkB;AACzB,SACEC,YAAY,EACZC,iBAAiB,QACZ,mBAAmB;AAG1B;AACA;AACA;;AAEA;AACA,MAAMC,4BAA4B,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;AACrD,MAAMC,kBAAkB,GAAG,IAAIC,GAAG,CAAC,CAAC,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,eAAe,EAAE,gBAAgB,EAAE,mBAAmB,CAAC,CAAC;;AAE3H;AACA;AACA;;AAEA;;AAOA;;AAGA;;AAYA;;AAkBA;;AAMA;;AAMA;;AAkBA;;AAQA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,sBAAsBA,CACpCC,MAAoB,EACpBC,eAAwB,EACN;EAClB,MAAMC,OAA4B,GAAG,EAAE;EAEvC,IAAID,eAAe,EAAE;IACnB,KAAK,MAAME,EAAE,IAAIH,MAAM,CAACI,cAAc,EAAE;MACtCF,OAAO,CAACG,IAAI,CAAC;QACXC,IAAI,EAAE,UAAU;QAChBC,QAAQ,EAAEJ,EAAE,CAACI,QAAQ;QACrBC,SAAS,EAAEL,EAAE,CAACK;MAChB,CAAC,CAAC;IACJ;EACF;EAEA,IAAIR,MAAM,CAACS,IAAI,EAAE;IACfP,OAAO,CAACG,IAAI,CAAC;MAAEC,IAAI,EAAE,MAAM;MAAEG,IAAI,EAAET,MAAM,CAACS;IAAK,CAAwB,CAAC;EAC1E;EAEA,KAAK,MAAMC,EAAE,IAAIV,MAAM,CAACW,aAAa,EAAE;IACrCT,OAAO,CAACG,IAAI,CAAC;MACXC,IAAI,EAAE,UAAU;MAChBM,EAAE,EAAEF,EAAE,CAACE,EAAE;MACTC,IAAI,EAAEH,EAAE,CAACG,IAAI;MACbC,KAAK,EAAEJ,EAAE,CAACI;IACZ,CAA2B,CAAC;EAC9B;EAEA,OAAO;IACLZ,OAAO;IACPa,KAAK,EAAE;MACLC,YAAY,EAAEhB,MAAM,CAACe,KAAK,CAACE,WAAW;MACtCC,aAAa,EAAElB,MAAM,CAACe,KAAK,CAACI,YAAY;MACxCC,iBAAiB,EAAEpB,MAAM,CAACe,KAAK,CAACM,eAAe,IAAI,CAAC;MACpDC,qBAAqB,EAAEtB,MAAM,CAACe,KAAK,CAACQ,mBAAmB,IAAI;IAC7D,CAAC;IACDC,WAAW,EAAExB,MAAM,CAACyB;EACtB,CAAC;AACH;;AAEA;AACA;AACA;AACA;AACA,OAAO,eAAeC,YAAYA,CAACC,IAAqB,EAA6B;EACnF,MAAMC,KAAK,GAAG,MAAM5C,aAAa,CAAC,CAAC;EACnC,IAAI,CAAC4C,KAAK,EAAE,MAAM,IAAIC,KAAK,CAAC,0CAA0C,CAAC;EAEvE,MAAMC,SAAS,GAAGzC,eAAe,CAAC;IAChC0C,KAAK,EAAEJ,IAAI,CAACK,OAAO;IACnBC,cAAc,EAAEN,IAAI,CAACM,cAAc;IACnCC,eAAe,EAAEP,IAAI,CAACO,eAAe,IAAI,KAAK;IAC9CC,eAAe,EAAER,IAAI,CAACQ;EACxB,CAAC,CAAC;;EAEF;EACA,IAAIC,KAAe;EACnB,IAAIT,IAAI,CAACU,aAAa,IAAIV,IAAI,CAACS,KAAK,CAACE,MAAM,GAAG,CAAC,EAAE;IAC/CF,KAAK,GAAG,CACN,GAAGT,IAAI,CAACS,KAAK,CAACG,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAC1B;MAAE,GAAGZ,IAAI,CAACS,KAAK,CAACT,IAAI,CAACS,KAAK,CAACE,MAAM,GAAG,CAAC,CAAC;MAAEE,aAAa,EAAE;QAAElC,IAAI,EAAE;MAAY;IAAE,CAAC,CAC/E;EACH,CAAC,MAAM;IACL8B,KAAK,GAAGT,IAAI,CAACS,KAAK;EACpB;EAEA,MAAMK,MAAM,GAAGnD,iBAAiB,CAACqC,IAAI,CAACe,YAAY,CAAC;;EAEnD;EACA,MAAM;IAAEC,QAAQ,EAAEC;EAAe,CAAC,GAAGrD,gBAAgB,CAAC,EAAE,EAAEoC,IAAI,CAACgB,QAAQ,CAAC;EAExE,MAAM;IAAEE;EAAQ,CAAC,GAAG9D,aAAa,CAAC,CAAC;;EAEnC;EACA;EACA,IAAI+D,cAA0D;EAC9D,IAAInB,IAAI,CAACoB,WAAW,EAAE;IACpBD,cAAc,GAAGE,WAAW,CAACrB,IAAI,CAACoB,WAAW,EAAE,MAAM,CAAC;EACxD;EAEA,IAAI;IACF,MAAME,MAAM,GAAG,MAAM7D,eAAe,CAAC;MACnC8D,QAAQ,EAAEpE,WAAW,CAAC,CAAC;MACvB8C,KAAK;MACLG,KAAK,EAAEJ,IAAI,CAACK,OAAO;MACnBS,MAAM;MACNE,QAAQ,EAAEC,cAAc;MACxBR,KAAK;MACLN,SAAS;MACTe,OAAO,EAAEA,OAAO,IAAIM,SAAS;MAC7B,IAAIxB,IAAI,CAACyB,SAAS,GAAG;QAAEA,SAAS,EAAEzB,IAAI,CAACyB;MAAU,CAAC,GAAG,CAAC,CAAC,CAAC;MACxD,IAAIzB,IAAI,CAAC0B,WAAW,GAAG;QAAEC,MAAM,EAAE3B,IAAI,CAAC0B;MAAY,CAAC,GAAG,CAAC,CAAC,CAAC;MACzDE,cAAc,EAAE,MAAAA,CAAA,KAAY;QAC1B,MAAMvD,MAAM,GAAG,MAAMf,cAAc,CAAC,CAAC;QACrC,OAAOe,MAAM,CAACwD,OAAO,GAAGxD,MAAM,CAACyD,MAAM,CAAEC,YAAY,GAAI,IAAI;MAC7D;IACF,CAAC,CAAC;IAEF,MAAM1D,MAAM,GAAG,MAAMb,mBAAmB,CAACD,cAAc,CAAC+D,MAAM,CAAC,CAAC;IAChE,OAAOlD,sBAAsB,CAACC,MAAM,EAAE2B,IAAI,CAACO,eAAe,IAAI,KAAK,CAAC;EACtE,CAAC,SAAS;IACR,IAAIY,cAAc,EAAEa,aAAa,CAACb,cAAc,CAAC;EACnD;AACF;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,eAAec,iBAAiBA,CACrCjC,IAA8B,EACH;EAC3B,MAAM;IACJkC,UAAU;IACVC,YAAY;IACZC,SAAS;IACTC,cAAc;IACdC,kBAAkB,GAAGpF,cAAc,CAACqF,uBAAuB;IAC3DC,aAAa;IACbC,eAAe,GAAGvF,cAAc,CAACwF,mBAAmB;IACpDf;EACF,CAAC,GAAG3B,IAAI;EAER,MAAM2C,WAA6C,GAAG,EAAE;EACxD,MAAMC,SAAmB,GAAG,EAAE;EAC9B,MAAMC,aAAsC,GAAG,CAAC,CAAC;;EAEjD;AACF;;EAME,eAAeC,aAAaA,CAAC/D,EAA0B,EAAEgE,KAAiB,EAA2C;IACnH;IACA,IAAIpB,MAAM,EAAEqB,OAAO,EAAE;MACnB,OAAO;QACLrE,IAAI,EAAE,aAAa;QACnBsE,WAAW,EAAElE,EAAE,CAACE,EAAE;QAClBV,OAAO,EAAE;MACX,CAAC;IACH;;IAEA;IACA,IAAIwE,KAAK,CAACC,OAAO,EAAE;MACjB,OAAO;QACLrE,IAAI,EAAE,aAAa;QACnBsE,WAAW,EAAElE,EAAE,CAACE,EAAE;QAClBV,OAAO,EAAE2E,IAAI,CAACC,SAAS,CAAC;UAAEC,KAAK,EAAE;QAA+E,CAAC;MACnH,CAAC;IACH;;IAEA;IACA,MAAMC,SAAS,GAAGlB,YAAY,CAACmB,UAAU,CAACvE,EAAE,CAACG,IAAI,EAAEH,EAAE,CAACI,KAAgC,CAAC;IACvF,IAAIkE,SAAS,CAACE,OAAO,EAAE;MACrB,OAAO;QACL5E,IAAI,EAAE,aAAa;QACnBsE,WAAW,EAAElE,EAAE,CAACE,EAAE;QAClBV,OAAO,EAAE2E,IAAI,CAACC,SAAS,CAAC;UAAEC,KAAK,EAAEC,SAAS,CAACG;QAAO,CAAC;MACrD,CAAC;IACH;;IAEA;IACA;IACA,IAAIzE,EAAE,CAACG,IAAI,KAAK,WAAW,IAAI,OAAQH,EAAE,CAACI,KAAK,CAA6BsE,IAAI,KAAK,QAAQ,EAAE;MAC7F,MAAMC,SAAS,GAAGvB,YAAY,CAACwB,SAAS,CAAE5E,EAAE,CAACI,KAAK,CAA6BsE,IAAc,CAAC;MAC9F,IAAIC,SAAS,CAACH,OAAO,EAAE;QACrB,OAAO;UACL5E,IAAI,EAAE,aAAa;UACnBsE,WAAW,EAAElE,EAAE,CAACE,EAAE;UAClBV,OAAO,EAAE2E,IAAI,CAACC,SAAS,CAAC;YAAEC,KAAK,EAAEM,SAAS,CAACF;UAAO,CAAC;QACrD,CAAC;MACH;IACF;IAEApB,SAAS,EAAEwB,WAAW,GAAG7E,EAAE,CAACG,IAAI,EAAEH,EAAE,CAACI,KAAgC,CAAC;IAEtE,MAAM0E,SAAS,GAAGC,IAAI,CAACC,GAAG,CAAC,CAAC;IAC5B,IAAI1F,MAAsB;IAE1B,IAAI2F,WAAW,GAAG,KAAK;IACvB,IAAI;MACF,MAAMC,UAAU,GAAG,MAAAA,CAAA,KAAqC;QACtD,IAAI5B,cAAc,EAAE;UAClB,MAAM6B,YAAY,GAAG,MAAM7B,cAAc,CAACtD,EAAE,CAACG,IAAI,EAAEH,EAAE,CAACI,KAAgC,CAAC;UACvF,IAAI+E,YAAY,KAAK,IAAI,EAAE,OAAOA,YAAY;QAChD;QAEA,IAAIrG,WAAW,CAACkB,EAAE,CAACG,IAAI,CAAC,EAAE;UACxB,OAAO,MAAMpB,gBAAgB,CAACiB,EAAE,CAACG,IAAI,EAAEH,EAAE,CAACI,KAAK,EAA6BwC,MAAM,CAAC;QACrF,CAAC,MAAM,IAAI5D,YAAY,CAACgB,EAAE,CAACG,IAAI,CAAC,EAAE;UAChC,OAAO,MAAMlB,iBAAiB,CAACe,EAAE,CAACG,IAAI,EAAEH,EAAE,CAACI,KAAgC,CAAC;QAC9E,CAAC,MAAM;UACL,OAAO;YAAE0C,OAAO,EAAE,KAAK;YAAEsC,MAAM,EAAE,iBAAiBpF,EAAE,CAACG,IAAI;UAAG,CAAC;QAC/D;MACF,CAAC;MAED,IAAIsD,aAAa,EAAE;QACjB,MAAM4B,gBAAgB,GAAGlG,kBAAkB,CAACmG,GAAG,CAACtF,EAAE,CAACG,IAAI,CAAC,GACpDoF,IAAI,CAACC,GAAG,CAAC/B,aAAa,EAAEvE,4BAA4B,CAAC,GACrDuE,aAAa;QACjBnE,MAAM,GAAG,MAAMmG,OAAO,CAACC,IAAI,CAAC,CAC1BR,UAAU,CAAC,CAAC,EACZ,IAAIO,OAAO,CAAiB,CAACE,CAAC,EAAEC,MAAM,KACpCC,UAAU,CACR,MAAMD,MAAM,CAAC,IAAIzE,KAAK,CAAC,QAAQnB,EAAE,CAACG,IAAI,oBAAoBkF,gBAAgB,GAAG,IAAI,GAAG,CAAC,CAAC,EACtFA,gBACF,CACF,CAAC,CACF,CAAC;MACJ,CAAC,MAAM;QACL/F,MAAM,GAAG,MAAM4F,UAAU,CAAC,CAAC;MAC7B;IACF,CAAC,CAAC,OAAOY,OAAY,EAAE;MACrB,MAAMC,GAAG,GAAGD,OAAO,CAACE,OAAO,IAAIC,MAAM,CAACH,OAAO,CAAC;MAC9Cb,WAAW,GAAG,eAAe,CAACiB,IAAI,CAACH,GAAG,CAAC,IAAI,cAAc,CAACG,IAAI,CAACH,GAAG,CAAC,IAAI,MAAM,CAACG,IAAI,CAACH,GAAG,CAAC;MACvFzG,MAAM,GAAG;QAAEwD,OAAO,EAAE,KAAK;QAAEsC,MAAM,EAAE,yBAAyBW,GAAG;MAAG,CAAC;IACrE;IAEA,MAAMI,YAAY,GAAGpB,IAAI,CAACC,GAAG,CAAC,CAAC,GAAGF,SAAS;;IAE3C;IACA;IACA,IAAI,CAACxF,MAAM,CAACwD,OAAO,IAAIkB,KAAK,CAACC,OAAO,EAAE;MACpCZ,SAAS,EAAE+C,SAAS,GAAGpG,EAAE,CAACG,IAAI,EAAE,KAAK,EAAEgG,YAAY,CAAC;MACpD,OAAO;QACLvG,IAAI,EAAE,aAAa;QACnBsE,WAAW,EAAElE,EAAE,CAACE,EAAE;QAClBV,OAAO,EAAE2E,IAAI,CAACC,SAAS,CAAC;UAAEC,KAAK,EAAE;QAA+E,CAAC;MACnH,CAAC;IACH;IAEAjB,YAAY,CAACiD,YAAY,CAACrG,EAAE,CAACG,IAAI,EAAEb,MAAM,CAACwD,OAAO,EAAE9C,EAAE,CAACI,KAAK,EAA6B6E,WAAW,CAAC;;IAEpG;IACA,IAAI,CAAC3F,MAAM,CAACwD,OAAO,EAAE;MACnBkB,KAAK,CAACsC,MAAM,EAAE;MACd,IAAItC,KAAK,CAACsC,MAAM,IAAI5C,eAAe,EAAE;QACnCM,KAAK,CAACC,OAAO,GAAG,IAAI;MACtB;IACF;IAEAZ,SAAS,EAAE+C,SAAS,GAAGpG,EAAE,CAACG,IAAI,EAAEb,MAAM,CAACwD,OAAO,EAAEqD,YAAY,CAAC;IAE7D,IAAI,CAACtC,SAAS,CAAC0C,QAAQ,CAACvG,EAAE,CAACG,IAAI,CAAC,EAAE;MAChC0D,SAAS,CAAClE,IAAI,CAACK,EAAE,CAACG,IAAI,CAAC;IACzB;IAEA,IAAIqG,UAAU,GAAGrC,IAAI,CAACC,SAAS,CAAC9E,MAAM,CAACwD,OAAO,GAAGxD,MAAM,CAAC8F,MAAM,GAAG;MAAEf,KAAK,EAAE/E,MAAM,CAAC8F;IAAO,CAAC,CAAC;IAC1F,IAAIoB,UAAU,CAAC5E,MAAM,GAAG2B,kBAAkB,EAAE;MAC1CiD,UAAU,GACRA,UAAU,CAAC3E,KAAK,CAAC,CAAC,EAAE0B,kBAAkB,CAAC,GACvC,wBAAwBiD,UAAU,CAAC5E,MAAM,CAAC6E,cAAc,CAAC,CAAC,eAAe;IAC7E;IACA,OAAO;MACL7G,IAAI,EAAE,aAAa;MACnBsE,WAAW,EAAElE,EAAE,CAACE,EAAE;MAClBV,OAAO,EAAEgH;IACX,CAAC;EACH;;EAEA;EACA;EACA;EACA;EACA,MAAME,mBAAmB,GAAG,IAAItH,GAAG,CAAC,CAAC,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,eAAe,CAAC,CAAC;EAC/F,MAAMuH,UAAU,GAAGxD,UAAU,CAACyD,MAAM,CAAC5G,EAAE,IAAI0G,mBAAmB,CAACpB,GAAG,CAACtF,EAAE,CAACG,IAAI,CAAC,CAAC;EAC5E,MAAM0G,QAAQ,GAAG1D,UAAU,CAACyD,MAAM,CAAC5G,EAAE,IAAI,CAAC0G,mBAAmB,CAACpB,GAAG,CAACtF,EAAE,CAACG,IAAI,CAAC,CAAC;;EAE3E;EACA,IAAI0G,QAAQ,CAACjF,MAAM,GAAG,CAAC,EAAE;IACvB,MAAMkF,UAAsB,GAAG;MAAER,MAAM,EAAE,CAAC;MAAErC,OAAO,EAAE;IAAM,CAAC;IAC5D,MAAM8C,eAAe,GAAG,MAAMtB,OAAO,CAACuB,GAAG,CAACH,QAAQ,CAACI,GAAG,CAACjH,EAAE,IAAI+D,aAAa,CAAC/D,EAAE,EAAE8G,UAAU,CAAC,CAAC,CAAC;IAC5FlD,WAAW,CAACjE,IAAI,CAAC,GAAGoH,eAAe,CAAC;EACtC;;EAEA;EACA,MAAMG,aAAyB,GAAG;IAAEZ,MAAM,EAAE,CAAC;IAAErC,OAAO,EAAE;EAAM,CAAC;EAC/D,KAAK,MAAMjE,EAAE,IAAI2G,UAAU,EAAE;IAC3B,MAAMrH,MAAM,GAAG,MAAMyE,aAAa,CAAC/D,EAAE,EAAEkH,aAAa,CAAC;IACrDtD,WAAW,CAACjE,IAAI,CAACL,MAAM,CAAC;EAC1B;EAEA,OAAO;IAAEsE,WAAW;IAAEC,SAAS;IAAEC;EAAc,CAAC;AAClD;;AAEA;AACA;AACA;;AAEA;AACA,OAAO,SAASqD,iBAAiBA,CAAC3H,OAA4B,EAAyB;EACrF,OAAOA,OAAO,CAACoH,MAAM,CAAEQ,CAAC,IAA+BA,CAAC,CAACxH,IAAI,KAAK,MAAM,CAAC;AAC3E;;AAEA;AACA,OAAO,SAASyH,oBAAoBA,CAAC7H,OAA4B,EAA4B;EAC3F,OAAOA,OAAO,CAACoH,MAAM,CAAEQ,CAAC,IAAkCA,CAAC,CAACxH,IAAI,KAAK,UAAU,CAAC;AAClF;;AAEA;AACA,OAAO,SAAS0H,eAAeA,CAAC9H,OAA4B,EAAU;EACpE,OAAO2H,iBAAiB,CAAC3H,OAAO,CAAC,CAACyH,GAAG,CAAEG,CAAC,IAAKA,CAAC,CAACrH,IAAI,CAAC,CAACwH,IAAI,CAAC,IAAI,CAAC;AACjE;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAO,SAASC,gBAAgBA,CAAC9F,KAAuB,EAAoB;EAC1E,MAAM+F,IAAI,GAAG,IAAIrI,GAAG,CAAS,CAAC;EAC9B,MAAME,MAAwB,GAAG,EAAE;EACnC,KAAK,MAAMoI,IAAI,IAAIhG,KAAK,EAAE;IACxB,IAAI,CAAC+F,IAAI,CAACnC,GAAG,CAACoC,IAAI,CAACvH,IAAI,CAAC,EAAE;MACxBsH,IAAI,CAACE,GAAG,CAACD,IAAI,CAACvH,IAAI,CAAC;MACnBb,MAAM,CAACK,IAAI,CAAC+H,IAAI,CAAC;IACnB;EACF;EACA,OAAOpI,MAAM;AACf;;AAEA;AACA;AACA;AACA;AACA,OAAO,SAASsI,qBAAqBA,CAAClG,KAAuB,EAAQ;EACnE,MAAMmG,KAAK,GAAG,IAAIzI,GAAG,CAAS,CAAC;EAC/B,KAAK,MAAMsI,IAAI,IAAIhG,KAAK,EAAE;IACxB,IAAImG,KAAK,CAACvC,GAAG,CAACoC,IAAI,CAACvH,IAAI,CAAC,EAAE;MACxB,MAAM,IAAIgB,KAAK,CAAC,wBAAwBuG,IAAI,CAACvH,IAAI,mEAAmE,CAAC;IACvH;IACA0H,KAAK,CAACF,GAAG,CAACD,IAAI,CAACvH,IAAI,CAAC;EACtB;AACF;;AAEA;AACA;AACA;;AAEA;AACA,OAAO,SAAS2H,gBAAgBA,CAAA,EAAkB;EAChD,OAAO,IAAIrC,OAAO,CAAEsC,OAAO,IAAKlC,UAAU,CAACkC,OAAO,EAAE,CAAC,CAAC,CAAC;AACzD;;AAEA;AACA,OAAO,SAASC,cAAcA,CAAA,EAAkB;EAC9C,OAAO,IAAIvC,OAAO,CAAEsC,OAAO,IAAKlC,UAAU,CAACkC,OAAO,EAAE,EAAE,CAAC,CAAC;AAC1D","ignoreList":[]}
|
|
@@ -181,33 +181,21 @@ export function signOut() {
|
|
|
181
181
|
clearConfig();
|
|
182
182
|
}
|
|
183
183
|
|
|
184
|
-
// Get stores for the authenticated user
|
|
185
|
-
//
|
|
186
|
-
//
|
|
187
|
-
//
|
|
184
|
+
// Get stores for the authenticated user.
|
|
185
|
+
// Queries the users table to find which stores this user belongs to,
|
|
186
|
+
// then fetches store details. This avoids the super_admin RLS bypass
|
|
187
|
+
// that would otherwise return ALL stores in the platform.
|
|
188
188
|
export async function getStoresForUser(accessToken, userId) {
|
|
189
189
|
if (!userId) return [];
|
|
190
190
|
const client = createAuthenticatedClient(accessToken);
|
|
191
191
|
|
|
192
|
-
// Primary:
|
|
193
|
-
|
|
194
|
-
data: stores,
|
|
195
|
-
error: storeError
|
|
196
|
-
} = await client.from("stores").select("id, store_name, slug").limit(20);
|
|
197
|
-
if (!storeError && stores && stores.length > 0) {
|
|
198
|
-
return stores.map(s => ({
|
|
199
|
-
id: s.id,
|
|
200
|
-
name: s.store_name,
|
|
201
|
-
slug: s.slug
|
|
202
|
-
}));
|
|
203
|
-
}
|
|
204
|
-
|
|
205
|
-
// Fallback 1: try via users table (auth_user_id → store_id)
|
|
192
|
+
// Primary: look up store_ids from users table (auth_user_id → store_id)
|
|
193
|
+
// This is the reliable path — not affected by super_admin RLS bypass.
|
|
206
194
|
const {
|
|
207
195
|
data: userData
|
|
208
196
|
} = await client.from("users").select("store_id").eq("auth_user_id", userId);
|
|
209
197
|
if (userData && userData.length > 0) {
|
|
210
|
-
const storeIds = userData.map(u => u.store_id).filter(Boolean);
|
|
198
|
+
const storeIds = [...new Set(userData.map(u => u.store_id).filter(Boolean))];
|
|
211
199
|
if (storeIds.length > 0) {
|
|
212
200
|
const {
|
|
213
201
|
data: userStores
|
|
@@ -222,6 +210,18 @@ export async function getStoresForUser(accessToken, userId) {
|
|
|
222
210
|
}
|
|
223
211
|
}
|
|
224
212
|
|
|
213
|
+
// Fallback 1: stores owned by this user's platform_user
|
|
214
|
+
const {
|
|
215
|
+
data: ownedStores
|
|
216
|
+
} = await client.from("stores").select("id, store_name, slug").eq("owner_user_id", userId).limit(20);
|
|
217
|
+
if (ownedStores && ownedStores.length > 0) {
|
|
218
|
+
return ownedStores.map(s => ({
|
|
219
|
+
id: s.id,
|
|
220
|
+
name: s.store_name,
|
|
221
|
+
slug: s.slug
|
|
222
|
+
}));
|
|
223
|
+
}
|
|
224
|
+
|
|
225
225
|
// Fallback 2: store_members table
|
|
226
226
|
const {
|
|
227
227
|
data: memberships
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth-service.js","names":["createClient","loadConfig","saveConfig","clearConfig","updateConfig","SUPABASE_URL","SUPABASE_ANON_KEY","createAnonClient","auth","persistSession","autoRefreshToken","createAuthenticatedClient","accessToken","global","headers","Authorization","signIn","email","password","client","data","error","signInWithPassword","success","message","session","config","access_token","refresh_token","user_id","user","id","expires_at","meta","user_metadata","vendor_id","store_id","store_name","undefined","stores","getStoresForUser","length","name","signUp","refreshSession","updated","getValidToken","now","Math","floor","Date","result","signOut","userId","storeError","from","select","limit","map","s","slug","userData","eq","storeIds","u","filter","Boolean","userStores","in","memberships","m","memberStores","selectStore","storeId","storeName","isLoggedIn"],"sources":["../../../src/cli/services/auth-service.ts"],"sourcesContent":["/**\n * Auth Service — Supabase email/password auth with token management\n *\n * Same Supabase project as the macOS app. Users login with their\n * Whale credentials; the CLI stores JWT tokens locally.\n */\n\nimport { createClient, type SupabaseClient } from \"@supabase/supabase-js\";\nimport { loadConfig, saveConfig, clearConfig, updateConfig, type WhaleConfig } from \"./config-store.js\";\n\n// Public credentials (same as SupabaseConfig.swift)\nconst SUPABASE_URL = \"https://uaednwpxursknmwdeejn.supabase.co\";\nconst SUPABASE_ANON_KEY =\n \"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6InVhZWRud3B4dXJza25td2RlZWpuIiwicm9sZSI6ImFub24iLCJpYXQiOjE3NjA5OTcyMzMsImV4cCI6MjA3NjU3MzIzM30.N8jPwlyCBB5KJB5I-XaK6m-mq88rSR445AWFJJmwRCg\";\n\nexport { SUPABASE_URL, SUPABASE_ANON_KEY };\n\n// Create a bare Supabase client (no stored session)\nfunction createAnonClient(): SupabaseClient {\n return createClient(SUPABASE_URL, SUPABASE_ANON_KEY, {\n auth: { persistSession: false, autoRefreshToken: false },\n });\n}\n\n// Create a Supabase client authenticated with a user's JWT\nexport function createAuthenticatedClient(accessToken: string): SupabaseClient {\n return createClient(SUPABASE_URL, SUPABASE_ANON_KEY, {\n auth: { persistSession: false, autoRefreshToken: false },\n global: { headers: { Authorization: `Bearer ${accessToken}` } },\n });\n}\n\nexport interface AuthResult {\n success: boolean;\n error?: string;\n config?: WhaleConfig;\n}\n\nexport interface StoreInfo {\n id: string;\n name: string;\n slug?: string;\n}\n\n// Sign in with email/password\nexport async function signIn(email: string, password: string): Promise<AuthResult> {\n const client = createAnonClient();\n const { data, error } = await client.auth.signInWithPassword({ email, password });\n\n if (error) return { success: false, error: error.message };\n if (!data.session) return { success: false, error: \"No session returned\" };\n\n const config: WhaleConfig = {\n access_token: data.session.access_token,\n refresh_token: data.session.refresh_token,\n user_id: data.user.id,\n email: data.user.email || email,\n expires_at: data.session.expires_at,\n };\n\n // Try to extract store from JWT user_metadata first (most reliable)\n const meta = data.user.user_metadata;\n if (meta?.vendor_id) {\n config.store_id = meta.vendor_id;\n config.store_name = meta.store_name || undefined;\n }\n\n // If no store from metadata, try querying\n if (!config.store_id) {\n const stores = await getStoresForUser(config.access_token!, data.user.id);\n if (stores.length === 1) {\n config.store_id = stores[0].id;\n config.store_name = stores[0].name;\n }\n }\n\n saveConfig(config);\n return { success: true, config };\n}\n\n// Sign up with email/password\nexport async function signUp(email: string, password: string): Promise<AuthResult> {\n const client = createAnonClient();\n const { data, error } = await client.auth.signUp({ email, password });\n\n if (error) return { success: false, error: error.message };\n if (!data.session) {\n return { success: true, error: \"Check your email to confirm your account\" };\n }\n\n const config: WhaleConfig = {\n access_token: data.session.access_token,\n refresh_token: data.session.refresh_token,\n user_id: data.user!.id,\n email: data.user!.email || email,\n expires_at: data.session.expires_at,\n };\n\n saveConfig(config);\n return { success: true, config };\n}\n\n// Refresh an expired session\nexport async function refreshSession(): Promise<AuthResult> {\n const config = loadConfig();\n if (!config.refresh_token) return { success: false, error: \"Not logged in\" };\n\n const client = createAnonClient();\n const { data, error } = await client.auth.refreshSession({\n refresh_token: config.refresh_token,\n });\n\n if (error) {\n clearConfig();\n return { success: false, error: `Session expired: ${error.message}` };\n }\n if (!data.session) {\n clearConfig();\n return { success: false, error: \"Could not refresh session\" };\n }\n\n const updated: WhaleConfig = {\n ...config,\n access_token: data.session.access_token,\n refresh_token: data.session.refresh_token,\n expires_at: data.session.expires_at,\n };\n saveConfig(updated);\n return { success: true, config: updated };\n}\n\n// Get a valid access token, auto-refreshing if needed\nexport async function getValidToken(): Promise<string | null> {\n const config = loadConfig();\n if (!config.access_token) return null;\n\n // Check if token is expired (with 5-min buffer)\n // If expires_at is missing, force a refresh to be safe\n const now = Math.floor(Date.now() / 1000);\n if (!config.expires_at || config.expires_at - 300 < now) {\n const result = await refreshSession();\n if (!result.success) return null;\n return result.config!.access_token!;\n }\n\n return config.access_token;\n}\n\n// Sign out — clear stored tokens\nexport function signOut(): void {\n clearConfig();\n}\n\n// Get stores for the authenticated user\n// With a user JWT, RLS on the stores table handles access control directly —\n// same approach the platform exchange endpoint uses. For service role keys,\n// we fall back to store_members to prevent cross-tenant leakage.\nexport async function getStoresForUser(\n accessToken: string,\n userId: string\n): Promise<StoreInfo[]> {\n if (!userId) return [];\n\n const client = createAuthenticatedClient(accessToken);\n\n // Primary: query stores directly — RLS filters to user's stores\n const { data: stores, error: storeError } = await client\n .from(\"stores\")\n .select(\"id, store_name, slug\")\n .limit(20);\n\n if (!storeError && stores && stores.length > 0) {\n return stores.map((s: any) => ({ id: s.id, name: s.store_name, slug: s.slug }));\n }\n\n // Fallback 1: try via users table (auth_user_id → store_id)\n const { data: userData } = await client\n .from(\"users\")\n .select(\"store_id\")\n .eq(\"auth_user_id\", userId);\n\n if (userData && userData.length > 0) {\n const storeIds = userData.map((u: any) => u.store_id).filter(Boolean);\n if (storeIds.length > 0) {\n const { data: userStores } = await client\n .from(\"stores\")\n .select(\"id, store_name, slug\")\n .in(\"id\", storeIds);\n if (userStores && userStores.length > 0) {\n return userStores.map((s: any) => ({ id: s.id, name: s.store_name, slug: s.slug }));\n }\n }\n }\n\n // Fallback 2: store_members table\n const { data: memberships } = await client\n .from(\"store_members\")\n .select(\"store_id\")\n .eq(\"user_id\", userId);\n\n if (memberships && memberships.length > 0) {\n const storeIds = memberships.map((m: any) => m.store_id);\n const { data: memberStores } = await client\n .from(\"stores\")\n .select(\"id, store_name, slug\")\n .in(\"id\", storeIds);\n if (memberStores && memberStores.length > 0) {\n return memberStores.map((s: any) => ({ id: s.id, name: s.store_name, slug: s.slug }));\n }\n }\n\n return [];\n}\n\n// Select a store and save to config\nexport function selectStore(storeId: string, storeName: string): void {\n updateConfig({ store_id: storeId, store_name: storeName });\n}\n\n// Check if logged in (has auth tokens)\nexport function isLoggedIn(): boolean {\n const config = loadConfig();\n return !!(config.access_token && config.refresh_token);\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"auth-service.js","names":["createClient","loadConfig","saveConfig","clearConfig","updateConfig","SUPABASE_URL","SUPABASE_ANON_KEY","createAnonClient","auth","persistSession","autoRefreshToken","createAuthenticatedClient","accessToken","global","headers","Authorization","signIn","email","password","client","data","error","signInWithPassword","success","message","session","config","access_token","refresh_token","user_id","user","id","expires_at","meta","user_metadata","vendor_id","store_id","store_name","undefined","stores","getStoresForUser","length","name","signUp","refreshSession","updated","getValidToken","now","Math","floor","Date","result","signOut","userId","userData","from","select","eq","storeIds","Set","map","u","filter","Boolean","userStores","in","s","slug","ownedStores","limit","memberships","m","memberStores","selectStore","storeId","storeName","isLoggedIn"],"sources":["../../../src/cli/services/auth-service.ts"],"sourcesContent":["/**\n * Auth Service — Supabase email/password auth with token management\n *\n * Same Supabase project as the macOS app. Users login with their\n * Whale credentials; the CLI stores JWT tokens locally.\n */\n\nimport { createClient, type SupabaseClient } from \"@supabase/supabase-js\";\nimport { loadConfig, saveConfig, clearConfig, updateConfig, type WhaleConfig } from \"./config-store.js\";\n\n// Public credentials (same as SupabaseConfig.swift)\nconst SUPABASE_URL = \"https://uaednwpxursknmwdeejn.supabase.co\";\nconst SUPABASE_ANON_KEY =\n \"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6InVhZWRud3B4dXJza25td2RlZWpuIiwicm9sZSI6ImFub24iLCJpYXQiOjE3NjA5OTcyMzMsImV4cCI6MjA3NjU3MzIzM30.N8jPwlyCBB5KJB5I-XaK6m-mq88rSR445AWFJJmwRCg\";\n\nexport { SUPABASE_URL, SUPABASE_ANON_KEY };\n\n// Create a bare Supabase client (no stored session)\nfunction createAnonClient(): SupabaseClient {\n return createClient(SUPABASE_URL, SUPABASE_ANON_KEY, {\n auth: { persistSession: false, autoRefreshToken: false },\n });\n}\n\n// Create a Supabase client authenticated with a user's JWT\nexport function createAuthenticatedClient(accessToken: string): SupabaseClient {\n return createClient(SUPABASE_URL, SUPABASE_ANON_KEY, {\n auth: { persistSession: false, autoRefreshToken: false },\n global: { headers: { Authorization: `Bearer ${accessToken}` } },\n });\n}\n\nexport interface AuthResult {\n success: boolean;\n error?: string;\n config?: WhaleConfig;\n}\n\nexport interface StoreInfo {\n id: string;\n name: string;\n slug?: string;\n}\n\n// Sign in with email/password\nexport async function signIn(email: string, password: string): Promise<AuthResult> {\n const client = createAnonClient();\n const { data, error } = await client.auth.signInWithPassword({ email, password });\n\n if (error) return { success: false, error: error.message };\n if (!data.session) return { success: false, error: \"No session returned\" };\n\n const config: WhaleConfig = {\n access_token: data.session.access_token,\n refresh_token: data.session.refresh_token,\n user_id: data.user.id,\n email: data.user.email || email,\n expires_at: data.session.expires_at,\n };\n\n // Try to extract store from JWT user_metadata first (most reliable)\n const meta = data.user.user_metadata;\n if (meta?.vendor_id) {\n config.store_id = meta.vendor_id;\n config.store_name = meta.store_name || undefined;\n }\n\n // If no store from metadata, try querying\n if (!config.store_id) {\n const stores = await getStoresForUser(config.access_token!, data.user.id);\n if (stores.length === 1) {\n config.store_id = stores[0].id;\n config.store_name = stores[0].name;\n }\n }\n\n saveConfig(config);\n return { success: true, config };\n}\n\n// Sign up with email/password\nexport async function signUp(email: string, password: string): Promise<AuthResult> {\n const client = createAnonClient();\n const { data, error } = await client.auth.signUp({ email, password });\n\n if (error) return { success: false, error: error.message };\n if (!data.session) {\n return { success: true, error: \"Check your email to confirm your account\" };\n }\n\n const config: WhaleConfig = {\n access_token: data.session.access_token,\n refresh_token: data.session.refresh_token,\n user_id: data.user!.id,\n email: data.user!.email || email,\n expires_at: data.session.expires_at,\n };\n\n saveConfig(config);\n return { success: true, config };\n}\n\n// Refresh an expired session\nexport async function refreshSession(): Promise<AuthResult> {\n const config = loadConfig();\n if (!config.refresh_token) return { success: false, error: \"Not logged in\" };\n\n const client = createAnonClient();\n const { data, error } = await client.auth.refreshSession({\n refresh_token: config.refresh_token,\n });\n\n if (error) {\n clearConfig();\n return { success: false, error: `Session expired: ${error.message}` };\n }\n if (!data.session) {\n clearConfig();\n return { success: false, error: \"Could not refresh session\" };\n }\n\n const updated: WhaleConfig = {\n ...config,\n access_token: data.session.access_token,\n refresh_token: data.session.refresh_token,\n expires_at: data.session.expires_at,\n };\n saveConfig(updated);\n return { success: true, config: updated };\n}\n\n// Get a valid access token, auto-refreshing if needed\nexport async function getValidToken(): Promise<string | null> {\n const config = loadConfig();\n if (!config.access_token) return null;\n\n // Check if token is expired (with 5-min buffer)\n // If expires_at is missing, force a refresh to be safe\n const now = Math.floor(Date.now() / 1000);\n if (!config.expires_at || config.expires_at - 300 < now) {\n const result = await refreshSession();\n if (!result.success) return null;\n return result.config!.access_token!;\n }\n\n return config.access_token;\n}\n\n// Sign out — clear stored tokens\nexport function signOut(): void {\n clearConfig();\n}\n\n// Get stores for the authenticated user.\n// Queries the users table to find which stores this user belongs to,\n// then fetches store details. This avoids the super_admin RLS bypass\n// that would otherwise return ALL stores in the platform.\nexport async function getStoresForUser(\n accessToken: string,\n userId: string\n): Promise<StoreInfo[]> {\n if (!userId) return [];\n\n const client = createAuthenticatedClient(accessToken);\n\n // Primary: look up store_ids from users table (auth_user_id → store_id)\n // This is the reliable path — not affected by super_admin RLS bypass.\n const { data: userData } = await client\n .from(\"users\")\n .select(\"store_id\")\n .eq(\"auth_user_id\", userId);\n\n if (userData && userData.length > 0) {\n const storeIds = [...new Set(userData.map((u: any) => u.store_id).filter(Boolean))];\n if (storeIds.length > 0) {\n const { data: userStores } = await client\n .from(\"stores\")\n .select(\"id, store_name, slug\")\n .in(\"id\", storeIds);\n if (userStores && userStores.length > 0) {\n return userStores.map((s: any) => ({ id: s.id, name: s.store_name, slug: s.slug }));\n }\n }\n }\n\n // Fallback 1: stores owned by this user's platform_user\n const { data: ownedStores } = await client\n .from(\"stores\")\n .select(\"id, store_name, slug\")\n .eq(\"owner_user_id\", userId)\n .limit(20);\n\n if (ownedStores && ownedStores.length > 0) {\n return ownedStores.map((s: any) => ({ id: s.id, name: s.store_name, slug: s.slug }));\n }\n\n // Fallback 2: store_members table\n const { data: memberships } = await client\n .from(\"store_members\")\n .select(\"store_id\")\n .eq(\"user_id\", userId);\n\n if (memberships && memberships.length > 0) {\n const storeIds = memberships.map((m: any) => m.store_id);\n const { data: memberStores } = await client\n .from(\"stores\")\n .select(\"id, store_name, slug\")\n .in(\"id\", storeIds);\n if (memberStores && memberStores.length > 0) {\n return memberStores.map((s: any) => ({ id: s.id, name: s.store_name, slug: s.slug }));\n }\n }\n\n return [];\n}\n\n// Select a store and save to config\nexport function selectStore(storeId: string, storeName: string): void {\n updateConfig({ store_id: storeId, store_name: storeName });\n}\n\n// Check if logged in (has auth tokens)\nexport function isLoggedIn(): boolean {\n const config = loadConfig();\n return !!(config.access_token && config.refresh_token);\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Background Agent Tracking
|
|
3
|
+
*
|
|
4
|
+
* Tracks async agent tasks that run in the background,
|
|
5
|
+
* with output file-based communication.
|
|
6
|
+
*/
|
|
7
|
+
export interface BackgroundAgent {
|
|
8
|
+
id: string;
|
|
9
|
+
type: string;
|
|
10
|
+
outputFile: string;
|
|
11
|
+
startTime: number;
|
|
12
|
+
status: "running" | "completed" | "failed";
|
|
13
|
+
abortController: AbortController;
|
|
14
|
+
}
|
|
15
|
+
export declare function registerBackgroundAgent(id: string, type: string, outputFile: string): AbortController;
|
|
16
|
+
export declare function getAgentStatus(id: string): BackgroundAgent | null;
|
|
17
|
+
export declare function markAgentDone(id: string, success: boolean): void;
|
|
18
|
+
export declare function readAgentOutput(id: string): {
|
|
19
|
+
status: string;
|
|
20
|
+
output: string;
|
|
21
|
+
} | null;
|
|
22
|
+
export declare function listBackgroundAgents(): BackgroundAgent[];
|
|
23
|
+
export declare function stopBackgroundAgent(id: string): {
|
|
24
|
+
success: boolean;
|
|
25
|
+
message: string;
|
|
26
|
+
};
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Background Process Operations — read, kill, list
|
|
3
|
+
* Extracted from background-processes.ts for file size limits.
|
|
4
|
+
*/
|
|
5
|
+
import type { BackgroundProcess, ProcessOutput } from "./background-processes.js";
|
|
6
|
+
export declare function readProcessOutput(processes: Map<string, BackgroundProcess>, id: string, options?: {
|
|
7
|
+
filter?: string;
|
|
8
|
+
}): ProcessOutput | {
|
|
9
|
+
error: string;
|
|
10
|
+
};
|
|
11
|
+
export declare function killProcess(processes: Map<string, BackgroundProcess>, id: string): {
|
|
12
|
+
success: boolean;
|
|
13
|
+
message: string;
|
|
14
|
+
};
|
|
15
|
+
export declare function listProcessesFromMap(processes: Map<string, BackgroundProcess>): Array<{
|
|
16
|
+
id: string;
|
|
17
|
+
pid: number | undefined;
|
|
18
|
+
command: string;
|
|
19
|
+
status: BackgroundProcess["status"];
|
|
20
|
+
startedAt: string;
|
|
21
|
+
runtime: string;
|
|
22
|
+
outputLines: number;
|
|
23
|
+
errorLines: number;
|
|
24
|
+
}>;
|
|
@@ -64,8 +64,9 @@ interface BackgroundAgent {
|
|
|
64
64
|
outputFile: string;
|
|
65
65
|
startTime: number;
|
|
66
66
|
status: "running" | "completed" | "failed";
|
|
67
|
+
abortController: AbortController;
|
|
67
68
|
}
|
|
68
|
-
export declare function registerBackgroundAgent(id: string, type: string, outputFile: string):
|
|
69
|
+
export declare function registerBackgroundAgent(id: string, type: string, outputFile: string): AbortController;
|
|
69
70
|
export declare function getAgentStatus(id: string): BackgroundAgent | null;
|
|
70
71
|
export declare function markAgentDone(id: string, success: boolean): void;
|
|
71
72
|
export declare function readAgentOutput(id: string): {
|
|
@@ -283,13 +283,16 @@ export function listProcesses() {
|
|
|
283
283
|
|
|
284
284
|
const bgAgents = new Map();
|
|
285
285
|
export function registerBackgroundAgent(id, type, outputFile) {
|
|
286
|
+
const abortController = new AbortController();
|
|
286
287
|
bgAgents.set(id, {
|
|
287
288
|
id,
|
|
288
289
|
type,
|
|
289
290
|
outputFile,
|
|
290
291
|
startTime: Date.now(),
|
|
291
|
-
status: "running"
|
|
292
|
+
status: "running",
|
|
293
|
+
abortController
|
|
292
294
|
});
|
|
295
|
+
return abortController;
|
|
293
296
|
}
|
|
294
297
|
export function getAgentStatus(id) {
|
|
295
298
|
return bgAgents.get(id) || null;
|
|
@@ -364,11 +367,12 @@ export function stopBackgroundAgent(id) {
|
|
|
364
367
|
success: false,
|
|
365
368
|
message: `Agent already ${agent.status}`
|
|
366
369
|
};
|
|
367
|
-
//
|
|
370
|
+
// Abort the running agent, then mark as failed
|
|
371
|
+
agent.abortController.abort();
|
|
368
372
|
agent.status = "failed";
|
|
369
373
|
return {
|
|
370
374
|
success: true,
|
|
371
|
-
message: `Agent ${id}
|
|
375
|
+
message: `Agent ${id} aborted and stopped`
|
|
372
376
|
};
|
|
373
377
|
}
|
|
374
378
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"background-processes.js","names":["spawn","readFileSync","existsSync","processes","Map","MAX_BUFFER_LINES","MAX_PROCESSES","generateProcessId","Date","now","Math","random","toString","slice","cleanOldProcesses","procs","Array","from","values","completed","filter","p","status","sort","a","b","startedAt","getTime","size","length","oldest","shift","delete","id","spawnBackground","command","options","cwd","process","timeout","proc","outputBuffer","errorBuffer","lastReadIndex","lastErrorReadIndex","child","shell","env","FORCE_COLOR","stdio","err","message","stdout","on","data","lines","split","line","trim","push","splice","stderr","code","exitCode","undefined","setTimeout","kill","set","Promise","resolve","join","pid","l","readProcessOutput","get","match","keys","find","k","includes","error","newStdout","newStderr","filteredOutput","filteredErrors","regex","RegExp","test","newOutput","newErrors","killProcess","success","listProcesses","map","runtimeMs","runtimeSec","floor","runtime","toISOString","outputLines","errorLines","bgAgents","registerBackgroundAgent","type","outputFile","startTime","getAgentStatus","markAgentDone","agent","readAgentOutput","raw","output","doneIdx","indexOf","json","JSON","parse","clean","result","errIdx","errMsg","content","startsWith","listBackgroundAgents","stopBackgroundAgent","BACKGROUND_TOOL_DEFINITIONS","name","description","input_schema","properties","bash_id","required","shell_id"],"sources":["../../../src/cli/services/background-processes.ts"],"sourcesContent":["/**\n * Background Process Management — Claude Code-style async shell execution\n *\n * Enables running long-running processes (dev servers, watchers, builds)\n * without blocking the agent loop.\n *\n * Tools:\n * - run_command with run_in_background: true\n * - bash_output: Read output from running/completed process\n * - kill_shell: Terminate a background process\n */\n\nimport { spawn, ChildProcess } from \"child_process\";\nimport { readFileSync, existsSync } from \"fs\";\n\n// ============================================================================\n// TYPES\n// ============================================================================\n\nexport interface BackgroundProcess {\n id: string;\n command: string;\n cwd: string;\n startedAt: Date;\n status: \"running\" | \"completed\" | \"failed\" | \"killed\";\n exitCode?: number;\n outputBuffer: string[];\n errorBuffer: string[];\n process: ChildProcess | null;\n lastReadIndex: number; // Track what's been read (stdout)\n lastErrorReadIndex: number; // Track what's been read (stderr)\n}\n\nexport interface ProcessOutput {\n id: string;\n status: BackgroundProcess[\"status\"];\n newOutput: string;\n newErrors: string;\n exitCode?: number;\n}\n\n// ============================================================================\n// PROCESS REGISTRY — in-memory store of running/completed processes\n// ============================================================================\n\nconst processes = new Map<string, BackgroundProcess>();\nconst MAX_BUFFER_LINES = 10000;\nconst MAX_PROCESSES = 20;\n\n// ============================================================================\n// HELPERS\n// ============================================================================\n\nfunction generateProcessId(): string {\n return `shell-${Date.now()}-${Math.random().toString(36).slice(2, 6)}`;\n}\n\nfunction cleanOldProcesses(): void {\n // Remove oldest completed/failed processes if we're at capacity\n const procs = Array.from(processes.values());\n const completed = procs\n .filter((p) => p.status !== \"running\")\n .sort((a, b) => a.startedAt.getTime() - b.startedAt.getTime());\n\n while (processes.size >= MAX_PROCESSES && completed.length > 0) {\n const oldest = completed.shift()!;\n processes.delete(oldest.id);\n }\n}\n\n// ============================================================================\n// SPAWN BACKGROUND PROCESS\n// ============================================================================\n\nexport async function spawnBackground(\n command: string,\n options: {\n cwd?: string;\n timeout?: number; // Max runtime in ms (default: 10 minutes)\n description?: string;\n } = {}\n): Promise<{ id: string; message: string; status: \"running\" | \"failed\" }> {\n cleanOldProcesses();\n\n const id = generateProcessId();\n const cwd = options.cwd || process.cwd();\n const timeout = options.timeout || 600_000; // 10 minutes default\n\n const proc: BackgroundProcess = {\n id,\n command,\n cwd,\n startedAt: new Date(),\n status: \"running\",\n outputBuffer: [],\n errorBuffer: [],\n process: null,\n lastReadIndex: 0,\n lastErrorReadIndex: 0,\n };\n\n // Spawn with shell\n let child: ChildProcess;\n try {\n child = spawn(command, [], {\n shell: true,\n cwd,\n env: { ...process.env, FORCE_COLOR: \"0\" },\n stdio: [\"ignore\", \"pipe\", \"pipe\"],\n });\n } catch (err: any) {\n return { id, message: `Failed to spawn: ${err.message}`, status: \"failed\" };\n }\n\n proc.process = child;\n\n // Capture stdout\n child.stdout?.on(\"data\", (data: Buffer) => {\n const lines = data.toString().split(\"\\n\");\n for (const line of lines) {\n if (line.trim()) {\n proc.outputBuffer.push(line);\n if (proc.outputBuffer.length > MAX_BUFFER_LINES) {\n proc.outputBuffer.splice(0, proc.outputBuffer.length - MAX_BUFFER_LINES);\n }\n }\n }\n });\n\n // Capture stderr\n child.stderr?.on(\"data\", (data: Buffer) => {\n const lines = data.toString().split(\"\\n\");\n for (const line of lines) {\n if (line.trim()) {\n proc.errorBuffer.push(line);\n if (proc.errorBuffer.length > MAX_BUFFER_LINES) {\n proc.errorBuffer.splice(0, proc.errorBuffer.length - MAX_BUFFER_LINES);\n }\n }\n }\n });\n\n // Handle exit\n child.on(\"exit\", (code) => {\n proc.status = code === 0 ? \"completed\" : \"failed\";\n proc.exitCode = code ?? undefined;\n proc.process = null;\n });\n\n child.on(\"error\", (err) => {\n proc.status = \"failed\";\n proc.errorBuffer.push(`Process error: ${err.message}`);\n proc.process = null;\n });\n\n // Timeout kill\n setTimeout(() => {\n if (proc.status === \"running\" && proc.process) {\n proc.process.kill(\"SIGTERM\");\n proc.status = \"killed\";\n proc.errorBuffer.push(`Process killed after ${timeout}ms timeout`);\n }\n }, timeout);\n\n processes.set(id, proc);\n\n // ── Validation wait — give process 1.5s to start or fail ──\n await new Promise(resolve => setTimeout(resolve, 1500));\n\n // Build result with validation\n const lines: string[] = [];\n if (proc.status === \"failed\") {\n lines.push(`✕ Process failed immediately`);\n lines.push(` Command: ${command}`);\n if (proc.errorBuffer.length > 0) lines.push(` Error: ${proc.errorBuffer.join(\"\\n \")}`);\n if (proc.exitCode !== undefined) lines.push(` Exit code: ${proc.exitCode}`);\n return { id, message: lines.join(\"\\n\"), status: \"failed\" };\n }\n\n lines.push(`✓ Background process running`);\n lines.push(` PID: ${child.pid || \"?\"}`);\n lines.push(` ID: ${id}`);\n lines.push(` Command: ${command}`);\n if (proc.outputBuffer.length > 0) {\n lines.push(` Initial output (${proc.outputBuffer.length} lines):`);\n for (const l of proc.outputBuffer.slice(0, 8)) {\n lines.push(` ${l}`);\n }\n if (proc.outputBuffer.length > 8) lines.push(` ... +${proc.outputBuffer.length - 8} more lines`);\n }\n if (proc.errorBuffer.length > 0) {\n lines.push(` Stderr (${proc.errorBuffer.length} lines):`);\n for (const l of proc.errorBuffer.slice(0, 4)) {\n lines.push(` ${l}`);\n }\n }\n lines.push(` Use bash_output(\"${id}\") to check output, kill_shell(\"${id}\") to stop.`);\n\n return { id, message: lines.join(\"\\n\"), status: \"running\" };\n}\n\n// ============================================================================\n// READ OUTPUT\n// ============================================================================\n\nexport function readProcessOutput(\n id: string,\n options: {\n filter?: string; // Regex to filter lines\n } = {}\n): ProcessOutput | { error: string } {\n const proc = processes.get(id);\n if (!proc) {\n // Try partial match\n const match = Array.from(processes.keys()).find(k => k.includes(id));\n if (match) return readProcessOutput(match, options);\n return { error: `Process not found: ${id}. Use list_shells to see available processes.` };\n }\n\n // Get new output since last read (separate indices for stdout/stderr)\n const newStdout = proc.outputBuffer.slice(proc.lastReadIndex);\n const newStderr = proc.errorBuffer.slice(proc.lastErrorReadIndex);\n\n // Update read indices\n proc.lastReadIndex = proc.outputBuffer.length;\n proc.lastErrorReadIndex = proc.errorBuffer.length;\n\n // Apply filter if provided\n let filteredOutput = newStdout;\n let filteredErrors = newStderr;\n\n if (options.filter) {\n try {\n const regex = new RegExp(options.filter, \"i\");\n filteredOutput = newStdout.filter((line) => regex.test(line));\n filteredErrors = newStderr.filter((line) => regex.test(line));\n } catch {\n // Invalid regex, return unfiltered\n }\n }\n\n return {\n id,\n status: proc.status,\n newOutput: filteredOutput.join(\"\\n\"),\n newErrors: filteredErrors.join(\"\\n\"),\n exitCode: proc.exitCode,\n };\n}\n\n// ============================================================================\n// KILL PROCESS\n// ============================================================================\n\nexport function killProcess(id: string): { success: boolean; message: string } {\n const proc = processes.get(id);\n if (!proc) {\n return { success: false, message: `Process not found: ${id}` };\n }\n\n if (proc.status !== \"running\") {\n return { success: false, message: `Process already ${proc.status}` };\n }\n\n if (proc.process) {\n proc.process.kill(\"SIGTERM\");\n\n // Force kill after 5 seconds if still running\n setTimeout(() => {\n if (proc.process) {\n proc.process.kill(\"SIGKILL\");\n }\n }, 5000);\n }\n\n proc.status = \"killed\";\n\n return { success: true, message: `Process ${id} killed` };\n}\n\n// ============================================================================\n// LIST PROCESSES\n// ============================================================================\n\nexport function listProcesses(): Array<{\n id: string;\n pid: number | undefined;\n command: string;\n status: BackgroundProcess[\"status\"];\n startedAt: string;\n runtime: string;\n outputLines: number;\n errorLines: number;\n}> {\n const now = Date.now();\n return Array.from(processes.values()).map((p) => {\n const runtimeMs = now - p.startedAt.getTime();\n const runtimeSec = Math.floor(runtimeMs / 1000);\n const runtime =\n runtimeSec < 60\n ? `${runtimeSec}s`\n : runtimeSec < 3600\n ? `${Math.floor(runtimeSec / 60)}m ${runtimeSec % 60}s`\n : `${Math.floor(runtimeSec / 3600)}h ${Math.floor((runtimeSec % 3600) / 60)}m`;\n\n return {\n id: p.id,\n pid: p.process?.pid,\n command: p.command.length > 50 ? p.command.slice(0, 47) + \"...\" : p.command,\n status: p.status,\n startedAt: p.startedAt.toISOString(),\n runtime,\n outputLines: p.outputBuffer.length,\n errorLines: p.errorBuffer.length,\n };\n });\n}\n\n// ============================================================================\n// BACKGROUND AGENT TRACKING\n// ============================================================================\n\ninterface BackgroundAgent {\n id: string;\n type: string;\n outputFile: string;\n startTime: number;\n status: \"running\" | \"completed\" | \"failed\";\n}\n\nconst bgAgents = new Map<string, BackgroundAgent>();\n\nexport function registerBackgroundAgent(id: string, type: string, outputFile: string): void {\n bgAgents.set(id, { id, type, outputFile, startTime: Date.now(), status: \"running\" });\n}\n\nexport function getAgentStatus(id: string): BackgroundAgent | null {\n return bgAgents.get(id) || null;\n}\n\nexport function markAgentDone(id: string, success: boolean): void {\n const agent = bgAgents.get(id);\n if (agent) agent.status = success ? \"completed\" : \"failed\";\n}\n\nexport function readAgentOutput(id: string): { status: string; output: string } | null {\n const agent = bgAgents.get(id);\n if (!agent) return null;\n try {\n const raw = existsSync(agent.outputFile) ? readFileSync(agent.outputFile, \"utf-8\") : \"\";\n if (!raw) return { status: agent.status, output: \"(no output yet)\" };\n\n // Parse ---DONE--- sentinel: extract .output from the JSON blob after it\n const doneIdx = raw.indexOf(\"\\n---DONE---\\n\");\n if (doneIdx !== -1) {\n try {\n const json = JSON.parse(raw.slice(doneIdx + \"\\n---DONE---\\n\".length).trim());\n const clean = (json.output || json.result || json.message || \"\").toString().trim();\n return { status: agent.status, output: clean || raw.slice(0, doneIdx).trim() };\n } catch {\n // JSON parse failed — return content before sentinel\n return { status: agent.status, output: raw.slice(0, doneIdx).trim() };\n }\n }\n\n // Parse ---ERROR--- sentinel\n const errIdx = raw.indexOf(\"\\n---ERROR---\\n\");\n if (errIdx !== -1) {\n const errMsg = raw.slice(errIdx + \"\\n---ERROR---\\n\".length).trim();\n return { status: agent.status, output: errMsg || raw.slice(0, errIdx).trim() };\n }\n\n // Still running — strip the \"Agent X started\" header line\n const lines = raw.split(\"\\n\");\n const content = lines[0]?.startsWith(\"Agent \") ? lines.slice(1).join(\"\\n\").trim() : raw.trim();\n return { status: agent.status, output: content || \"(running...)\" };\n } catch {\n return { status: agent.status, output: \"(failed to read output file)\" };\n }\n}\n\nexport function listBackgroundAgents(): BackgroundAgent[] {\n return Array.from(bgAgents.values());\n}\n\nexport function stopBackgroundAgent(id: string): { success: boolean; message: string } {\n const agent = bgAgents.get(id);\n if (!agent) return { success: false, message: `Agent not found: ${id}` };\n if (agent.status !== \"running\") return { success: false, message: `Agent already ${agent.status}` };\n // We can't kill the async promise, but we mark it as failed so it won't be waited on\n agent.status = \"failed\";\n return { success: true, message: `Agent ${id} marked as stopped` };\n}\n\n// ============================================================================\n// TOOL DEFINITIONS\n// ============================================================================\n\nexport const BACKGROUND_TOOL_DEFINITIONS = [\n {\n name: \"bash_output\",\n description: \"Read output from a running or completed background shell process. Returns only NEW output since the last read.\",\n input_schema: {\n type: \"object\",\n properties: {\n bash_id: {\n type: \"string\",\n description: \"The process ID returned when starting the background process\",\n },\n filter: {\n type: \"string\",\n description: \"Optional regex to filter output lines (only matching lines returned)\",\n },\n },\n required: [\"bash_id\"],\n },\n },\n {\n name: \"kill_shell\",\n description: \"Terminate a running background shell process\",\n input_schema: {\n type: \"object\",\n properties: {\n shell_id: {\n type: \"string\",\n description: \"The process ID to kill\",\n },\n },\n required: [\"shell_id\"],\n },\n },\n {\n name: \"list_shells\",\n description: \"List all background shell processes (running and recent completed)\",\n input_schema: {\n type: \"object\",\n properties: {},\n required: [],\n },\n },\n];\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"background-processes.js","names":["spawn","readFileSync","existsSync","processes","Map","MAX_BUFFER_LINES","MAX_PROCESSES","generateProcessId","Date","now","Math","random","toString","slice","cleanOldProcesses","procs","Array","from","values","completed","filter","p","status","sort","a","b","startedAt","getTime","size","length","oldest","shift","delete","id","spawnBackground","command","options","cwd","process","timeout","proc","outputBuffer","errorBuffer","lastReadIndex","lastErrorReadIndex","child","shell","env","FORCE_COLOR","stdio","err","message","stdout","on","data","lines","split","line","trim","push","splice","stderr","code","exitCode","undefined","setTimeout","kill","set","Promise","resolve","join","pid","l","readProcessOutput","get","match","keys","find","k","includes","error","newStdout","newStderr","filteredOutput","filteredErrors","regex","RegExp","test","newOutput","newErrors","killProcess","success","listProcesses","map","runtimeMs","runtimeSec","floor","runtime","toISOString","outputLines","errorLines","bgAgents","registerBackgroundAgent","type","outputFile","abortController","AbortController","startTime","getAgentStatus","markAgentDone","agent","readAgentOutput","raw","output","doneIdx","indexOf","json","JSON","parse","clean","result","errIdx","errMsg","content","startsWith","listBackgroundAgents","stopBackgroundAgent","abort","BACKGROUND_TOOL_DEFINITIONS","name","description","input_schema","properties","bash_id","required","shell_id"],"sources":["../../../src/cli/services/background-processes.ts"],"sourcesContent":["/**\n * Background Process Management — Claude Code-style async shell execution\n *\n * Enables running long-running processes (dev servers, watchers, builds)\n * without blocking the agent loop.\n *\n * Tools:\n * - run_command with run_in_background: true\n * - bash_output: Read output from running/completed process\n * - kill_shell: Terminate a background process\n */\n\nimport { spawn, ChildProcess } from \"child_process\";\nimport { readFileSync, existsSync } from \"fs\";\n\n// ============================================================================\n// TYPES\n// ============================================================================\n\nexport interface BackgroundProcess {\n id: string;\n command: string;\n cwd: string;\n startedAt: Date;\n status: \"running\" | \"completed\" | \"failed\" | \"killed\";\n exitCode?: number;\n outputBuffer: string[];\n errorBuffer: string[];\n process: ChildProcess | null;\n lastReadIndex: number; // Track what's been read (stdout)\n lastErrorReadIndex: number; // Track what's been read (stderr)\n}\n\nexport interface ProcessOutput {\n id: string;\n status: BackgroundProcess[\"status\"];\n newOutput: string;\n newErrors: string;\n exitCode?: number;\n}\n\n// ============================================================================\n// PROCESS REGISTRY — in-memory store of running/completed processes\n// ============================================================================\n\nconst processes = new Map<string, BackgroundProcess>();\nconst MAX_BUFFER_LINES = 10000;\nconst MAX_PROCESSES = 20;\n\n// ============================================================================\n// HELPERS\n// ============================================================================\n\nfunction generateProcessId(): string {\n return `shell-${Date.now()}-${Math.random().toString(36).slice(2, 6)}`;\n}\n\nfunction cleanOldProcesses(): void {\n // Remove oldest completed/failed processes if we're at capacity\n const procs = Array.from(processes.values());\n const completed = procs\n .filter((p) => p.status !== \"running\")\n .sort((a, b) => a.startedAt.getTime() - b.startedAt.getTime());\n\n while (processes.size >= MAX_PROCESSES && completed.length > 0) {\n const oldest = completed.shift()!;\n processes.delete(oldest.id);\n }\n}\n\n// ============================================================================\n// SPAWN BACKGROUND PROCESS\n// ============================================================================\n\nexport async function spawnBackground(\n command: string,\n options: {\n cwd?: string;\n timeout?: number; // Max runtime in ms (default: 10 minutes)\n description?: string;\n } = {}\n): Promise<{ id: string; message: string; status: \"running\" | \"failed\" }> {\n cleanOldProcesses();\n\n const id = generateProcessId();\n const cwd = options.cwd || process.cwd();\n const timeout = options.timeout || 600_000; // 10 minutes default\n\n const proc: BackgroundProcess = {\n id,\n command,\n cwd,\n startedAt: new Date(),\n status: \"running\",\n outputBuffer: [],\n errorBuffer: [],\n process: null,\n lastReadIndex: 0,\n lastErrorReadIndex: 0,\n };\n\n // Spawn with shell\n let child: ChildProcess;\n try {\n child = spawn(command, [], {\n shell: true,\n cwd,\n env: { ...process.env, FORCE_COLOR: \"0\" },\n stdio: [\"ignore\", \"pipe\", \"pipe\"],\n });\n } catch (err: any) {\n return { id, message: `Failed to spawn: ${err.message}`, status: \"failed\" };\n }\n\n proc.process = child;\n\n // Capture stdout\n child.stdout?.on(\"data\", (data: Buffer) => {\n const lines = data.toString().split(\"\\n\");\n for (const line of lines) {\n if (line.trim()) {\n proc.outputBuffer.push(line);\n if (proc.outputBuffer.length > MAX_BUFFER_LINES) {\n proc.outputBuffer.splice(0, proc.outputBuffer.length - MAX_BUFFER_LINES);\n }\n }\n }\n });\n\n // Capture stderr\n child.stderr?.on(\"data\", (data: Buffer) => {\n const lines = data.toString().split(\"\\n\");\n for (const line of lines) {\n if (line.trim()) {\n proc.errorBuffer.push(line);\n if (proc.errorBuffer.length > MAX_BUFFER_LINES) {\n proc.errorBuffer.splice(0, proc.errorBuffer.length - MAX_BUFFER_LINES);\n }\n }\n }\n });\n\n // Handle exit\n child.on(\"exit\", (code) => {\n proc.status = code === 0 ? \"completed\" : \"failed\";\n proc.exitCode = code ?? undefined;\n proc.process = null;\n });\n\n child.on(\"error\", (err) => {\n proc.status = \"failed\";\n proc.errorBuffer.push(`Process error: ${err.message}`);\n proc.process = null;\n });\n\n // Timeout kill\n setTimeout(() => {\n if (proc.status === \"running\" && proc.process) {\n proc.process.kill(\"SIGTERM\");\n proc.status = \"killed\";\n proc.errorBuffer.push(`Process killed after ${timeout}ms timeout`);\n }\n }, timeout);\n\n processes.set(id, proc);\n\n // ── Validation wait — give process 1.5s to start or fail ──\n await new Promise(resolve => setTimeout(resolve, 1500));\n\n // Build result with validation\n const lines: string[] = [];\n if (proc.status === \"failed\") {\n lines.push(`✕ Process failed immediately`);\n lines.push(` Command: ${command}`);\n if (proc.errorBuffer.length > 0) lines.push(` Error: ${proc.errorBuffer.join(\"\\n \")}`);\n if (proc.exitCode !== undefined) lines.push(` Exit code: ${proc.exitCode}`);\n return { id, message: lines.join(\"\\n\"), status: \"failed\" };\n }\n\n lines.push(`✓ Background process running`);\n lines.push(` PID: ${child.pid || \"?\"}`);\n lines.push(` ID: ${id}`);\n lines.push(` Command: ${command}`);\n if (proc.outputBuffer.length > 0) {\n lines.push(` Initial output (${proc.outputBuffer.length} lines):`);\n for (const l of proc.outputBuffer.slice(0, 8)) {\n lines.push(` ${l}`);\n }\n if (proc.outputBuffer.length > 8) lines.push(` ... +${proc.outputBuffer.length - 8} more lines`);\n }\n if (proc.errorBuffer.length > 0) {\n lines.push(` Stderr (${proc.errorBuffer.length} lines):`);\n for (const l of proc.errorBuffer.slice(0, 4)) {\n lines.push(` ${l}`);\n }\n }\n lines.push(` Use bash_output(\"${id}\") to check output, kill_shell(\"${id}\") to stop.`);\n\n return { id, message: lines.join(\"\\n\"), status: \"running\" };\n}\n\n// ============================================================================\n// READ OUTPUT\n// ============================================================================\n\nexport function readProcessOutput(\n id: string,\n options: {\n filter?: string; // Regex to filter lines\n } = {}\n): ProcessOutput | { error: string } {\n const proc = processes.get(id);\n if (!proc) {\n // Try partial match\n const match = Array.from(processes.keys()).find(k => k.includes(id));\n if (match) return readProcessOutput(match, options);\n return { error: `Process not found: ${id}. Use list_shells to see available processes.` };\n }\n\n // Get new output since last read (separate indices for stdout/stderr)\n const newStdout = proc.outputBuffer.slice(proc.lastReadIndex);\n const newStderr = proc.errorBuffer.slice(proc.lastErrorReadIndex);\n\n // Update read indices\n proc.lastReadIndex = proc.outputBuffer.length;\n proc.lastErrorReadIndex = proc.errorBuffer.length;\n\n // Apply filter if provided\n let filteredOutput = newStdout;\n let filteredErrors = newStderr;\n\n if (options.filter) {\n try {\n const regex = new RegExp(options.filter, \"i\");\n filteredOutput = newStdout.filter((line) => regex.test(line));\n filteredErrors = newStderr.filter((line) => regex.test(line));\n } catch {\n // Invalid regex, return unfiltered\n }\n }\n\n return {\n id,\n status: proc.status,\n newOutput: filteredOutput.join(\"\\n\"),\n newErrors: filteredErrors.join(\"\\n\"),\n exitCode: proc.exitCode,\n };\n}\n\n// ============================================================================\n// KILL PROCESS\n// ============================================================================\n\nexport function killProcess(id: string): { success: boolean; message: string } {\n const proc = processes.get(id);\n if (!proc) {\n return { success: false, message: `Process not found: ${id}` };\n }\n\n if (proc.status !== \"running\") {\n return { success: false, message: `Process already ${proc.status}` };\n }\n\n if (proc.process) {\n proc.process.kill(\"SIGTERM\");\n\n // Force kill after 5 seconds if still running\n setTimeout(() => {\n if (proc.process) {\n proc.process.kill(\"SIGKILL\");\n }\n }, 5000);\n }\n\n proc.status = \"killed\";\n\n return { success: true, message: `Process ${id} killed` };\n}\n\n// ============================================================================\n// LIST PROCESSES\n// ============================================================================\n\nexport function listProcesses(): Array<{\n id: string;\n pid: number | undefined;\n command: string;\n status: BackgroundProcess[\"status\"];\n startedAt: string;\n runtime: string;\n outputLines: number;\n errorLines: number;\n}> {\n const now = Date.now();\n return Array.from(processes.values()).map((p) => {\n const runtimeMs = now - p.startedAt.getTime();\n const runtimeSec = Math.floor(runtimeMs / 1000);\n const runtime =\n runtimeSec < 60\n ? `${runtimeSec}s`\n : runtimeSec < 3600\n ? `${Math.floor(runtimeSec / 60)}m ${runtimeSec % 60}s`\n : `${Math.floor(runtimeSec / 3600)}h ${Math.floor((runtimeSec % 3600) / 60)}m`;\n\n return {\n id: p.id,\n pid: p.process?.pid,\n command: p.command.length > 50 ? p.command.slice(0, 47) + \"...\" : p.command,\n status: p.status,\n startedAt: p.startedAt.toISOString(),\n runtime,\n outputLines: p.outputBuffer.length,\n errorLines: p.errorBuffer.length,\n };\n });\n}\n\n// ============================================================================\n// BACKGROUND AGENT TRACKING\n// ============================================================================\n\ninterface BackgroundAgent {\n id: string;\n type: string;\n outputFile: string;\n startTime: number;\n status: \"running\" | \"completed\" | \"failed\";\n abortController: AbortController;\n}\n\nconst bgAgents = new Map<string, BackgroundAgent>();\n\nexport function registerBackgroundAgent(id: string, type: string, outputFile: string): AbortController {\n const abortController = new AbortController();\n bgAgents.set(id, { id, type, outputFile, startTime: Date.now(), status: \"running\", abortController });\n return abortController;\n}\n\nexport function getAgentStatus(id: string): BackgroundAgent | null {\n return bgAgents.get(id) || null;\n}\n\nexport function markAgentDone(id: string, success: boolean): void {\n const agent = bgAgents.get(id);\n if (agent) agent.status = success ? \"completed\" : \"failed\";\n}\n\nexport function readAgentOutput(id: string): { status: string; output: string } | null {\n const agent = bgAgents.get(id);\n if (!agent) return null;\n try {\n const raw = existsSync(agent.outputFile) ? readFileSync(agent.outputFile, \"utf-8\") : \"\";\n if (!raw) return { status: agent.status, output: \"(no output yet)\" };\n\n // Parse ---DONE--- sentinel: extract .output from the JSON blob after it\n const doneIdx = raw.indexOf(\"\\n---DONE---\\n\");\n if (doneIdx !== -1) {\n try {\n const json = JSON.parse(raw.slice(doneIdx + \"\\n---DONE---\\n\".length).trim());\n const clean = (json.output || json.result || json.message || \"\").toString().trim();\n return { status: agent.status, output: clean || raw.slice(0, doneIdx).trim() };\n } catch {\n // JSON parse failed — return content before sentinel\n return { status: agent.status, output: raw.slice(0, doneIdx).trim() };\n }\n }\n\n // Parse ---ERROR--- sentinel\n const errIdx = raw.indexOf(\"\\n---ERROR---\\n\");\n if (errIdx !== -1) {\n const errMsg = raw.slice(errIdx + \"\\n---ERROR---\\n\".length).trim();\n return { status: agent.status, output: errMsg || raw.slice(0, errIdx).trim() };\n }\n\n // Still running — strip the \"Agent X started\" header line\n const lines = raw.split(\"\\n\");\n const content = lines[0]?.startsWith(\"Agent \") ? lines.slice(1).join(\"\\n\").trim() : raw.trim();\n return { status: agent.status, output: content || \"(running...)\" };\n } catch {\n return { status: agent.status, output: \"(failed to read output file)\" };\n }\n}\n\nexport function listBackgroundAgents(): BackgroundAgent[] {\n return Array.from(bgAgents.values());\n}\n\nexport function stopBackgroundAgent(id: string): { success: boolean; message: string } {\n const agent = bgAgents.get(id);\n if (!agent) return { success: false, message: `Agent not found: ${id}` };\n if (agent.status !== \"running\") return { success: false, message: `Agent already ${agent.status}` };\n // Abort the running agent, then mark as failed\n agent.abortController.abort();\n agent.status = \"failed\";\n return { success: true, message: `Agent ${id} aborted and stopped` };\n}\n\n// ============================================================================\n// TOOL DEFINITIONS\n// ============================================================================\n\nexport const BACKGROUND_TOOL_DEFINITIONS = [\n {\n name: \"bash_output\",\n description: \"Read output from a running or completed background shell process. Returns only NEW output since the last read.\",\n input_schema: {\n type: \"object\",\n properties: {\n bash_id: {\n type: \"string\",\n description: \"The process ID returned when starting the background process\",\n },\n filter: {\n type: \"string\",\n description: \"Optional regex to filter output lines (only matching lines returned)\",\n },\n },\n required: [\"bash_id\"],\n },\n },\n {\n name: \"kill_shell\",\n description: \"Terminate a running background shell process\",\n input_schema: {\n type: \"object\",\n properties: {\n shell_id: {\n type: \"string\",\n description: \"The process ID to kill\",\n },\n },\n required: [\"shell_id\"],\n },\n },\n {\n name: \"list_shells\",\n description: \"List all background shell processes (running and recent completed)\",\n input_schema: {\n type: \"object\",\n properties: {},\n required: [],\n },\n },\n];\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tool definitions for background process management.
|
|
3
|
+
* Used by the agent tool system to expose bash_output, kill_shell, list_shells.
|
|
4
|
+
*/
|
|
5
|
+
export declare const BACKGROUND_TOOL_DEFINITIONS: ({
|
|
6
|
+
name: string;
|
|
7
|
+
description: string;
|
|
8
|
+
input_schema: {
|
|
9
|
+
type: string;
|
|
10
|
+
properties: {
|
|
11
|
+
bash_id: {
|
|
12
|
+
type: string;
|
|
13
|
+
description: string;
|
|
14
|
+
};
|
|
15
|
+
filter: {
|
|
16
|
+
type: string;
|
|
17
|
+
description: string;
|
|
18
|
+
};
|
|
19
|
+
shell_id?: undefined;
|
|
20
|
+
};
|
|
21
|
+
required: string[];
|
|
22
|
+
};
|
|
23
|
+
} | {
|
|
24
|
+
name: string;
|
|
25
|
+
description: string;
|
|
26
|
+
input_schema: {
|
|
27
|
+
type: string;
|
|
28
|
+
properties: {
|
|
29
|
+
shell_id: {
|
|
30
|
+
type: string;
|
|
31
|
+
description: string;
|
|
32
|
+
};
|
|
33
|
+
bash_id?: undefined;
|
|
34
|
+
filter?: undefined;
|
|
35
|
+
};
|
|
36
|
+
required: string[];
|
|
37
|
+
};
|
|
38
|
+
} | {
|
|
39
|
+
name: string;
|
|
40
|
+
description: string;
|
|
41
|
+
input_schema: {
|
|
42
|
+
type: string;
|
|
43
|
+
properties: {
|
|
44
|
+
bash_id?: undefined;
|
|
45
|
+
filter?: undefined;
|
|
46
|
+
shell_id?: undefined;
|
|
47
|
+
};
|
|
48
|
+
required: never[];
|
|
49
|
+
};
|
|
50
|
+
})[];
|