@wingman-ai/gateway 0.5.3 → 0.5.4
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/dist/agent/config/agentConfig.cjs +4 -0
- package/dist/agent/config/agentConfig.d.ts +12 -0
- package/dist/agent/config/agentConfig.js +4 -0
- package/dist/agent/config/toolRegistry.cjs +75 -1
- package/dist/agent/config/toolRegistry.d.ts +3 -0
- package/dist/agent/config/toolRegistry.js +75 -1
- package/dist/agent/middleware/large-tool-results.cjs +207 -0
- package/dist/agent/middleware/large-tool-results.d.ts +16 -0
- package/dist/agent/middleware/large-tool-results.js +173 -0
- package/dist/agent/tools/browser_control.cjs +9 -1231
- package/dist/agent/tools/browser_control.d.ts +126 -234
- package/dist/agent/tools/browser_control.js +7 -1226
- package/dist/agent/tools/browser_runtime.cjs +1189 -0
- package/dist/agent/tools/browser_runtime.d.ts +560 -0
- package/dist/agent/tools/browser_runtime.js +1122 -0
- package/dist/agent/tools/browser_session.cjs +153 -0
- package/dist/agent/tools/browser_session.d.ts +741 -0
- package/dist/agent/tools/browser_session.js +110 -0
- package/dist/agent/tools/browser_session_manager.cjs +202 -0
- package/dist/agent/tools/browser_session_manager.d.ts +64 -0
- package/dist/agent/tools/browser_session_manager.js +165 -0
- package/dist/cli/commands/init.cjs +5 -1
- package/dist/cli/commands/init.js +5 -1
- package/dist/cli/config/loader.cjs +0 -5
- package/dist/cli/config/loader.js +0 -5
- package/dist/cli/config/schema.cjs +3 -7
- package/dist/cli/config/schema.d.ts +6 -6
- package/dist/cli/config/schema.js +3 -7
- package/dist/cli/core/agentInvoker.cjs +86 -22
- package/dist/cli/core/agentInvoker.d.ts +10 -3
- package/dist/cli/core/agentInvoker.js +86 -25
- package/dist/cli/core/outputManager.cjs +7 -2
- package/dist/cli/core/outputManager.d.ts +2 -2
- package/dist/cli/core/outputManager.js +7 -2
- package/dist/cli/types.d.ts +2 -1
- package/dist/webui/assets/index-XrEnkZiq.css +11 -0
- package/dist/webui/assets/index-mDs6HbKM.js +215 -0
- package/dist/webui/index.html +2 -2
- package/package.json +10 -10
- package/templates/agents/README.md +2 -1
- package/templates/agents/coding/agent.md +6 -13
- package/templates/agents/coding-v2/agent.md +6 -1
- package/templates/agents/game-dev/agent.md +8 -2
- package/templates/agents/game-dev/game-designer.md +4 -0
- package/templates/agents/game-dev/scene-engineer.md +4 -0
- package/templates/agents/main/agent.md +5 -0
- package/templates/agents/researcher/agent.md +11 -0
- package/templates/agents/stock-trader/agent.md +4 -0
- package/dist/agent/tests/agentConfig.test.cjs +0 -224
- package/dist/agent/tests/agentConfig.test.d.ts +0 -1
- package/dist/agent/tests/agentConfig.test.js +0 -218
- package/dist/agent/tests/agentLoader.test.cjs +0 -335
- package/dist/agent/tests/agentLoader.test.d.ts +0 -1
- package/dist/agent/tests/agentLoader.test.js +0 -329
- package/dist/agent/tests/backgroundTerminal.test.cjs +0 -70
- package/dist/agent/tests/backgroundTerminal.test.d.ts +0 -1
- package/dist/agent/tests/backgroundTerminal.test.js +0 -64
- package/dist/agent/tests/browserControlHelpers.test.cjs +0 -35
- package/dist/agent/tests/browserControlHelpers.test.d.ts +0 -1
- package/dist/agent/tests/browserControlHelpers.test.js +0 -29
- package/dist/agent/tests/browserControlTool.test.cjs +0 -2117
- package/dist/agent/tests/browserControlTool.test.d.ts +0 -1
- package/dist/agent/tests/browserControlTool.test.js +0 -2111
- package/dist/agent/tests/commandExecuteTool.test.cjs +0 -29
- package/dist/agent/tests/commandExecuteTool.test.d.ts +0 -1
- package/dist/agent/tests/commandExecuteTool.test.js +0 -23
- package/dist/agent/tests/internet_search.test.cjs +0 -107
- package/dist/agent/tests/internet_search.test.d.ts +0 -1
- package/dist/agent/tests/internet_search.test.js +0 -101
- package/dist/agent/tests/mcpClientManager.test.cjs +0 -290
- package/dist/agent/tests/mcpClientManager.test.d.ts +0 -1
- package/dist/agent/tests/mcpClientManager.test.js +0 -284
- package/dist/agent/tests/mcpResourceTools.test.cjs +0 -101
- package/dist/agent/tests/mcpResourceTools.test.d.ts +0 -1
- package/dist/agent/tests/mcpResourceTools.test.js +0 -95
- package/dist/agent/tests/modelFactory.test.cjs +0 -190
- package/dist/agent/tests/modelFactory.test.d.ts +0 -1
- package/dist/agent/tests/modelFactory.test.js +0 -184
- package/dist/agent/tests/terminalSessionManager.test.cjs +0 -121
- package/dist/agent/tests/terminalSessionManager.test.d.ts +0 -1
- package/dist/agent/tests/terminalSessionManager.test.js +0 -115
- package/dist/agent/tests/test-agent-loader.cjs +0 -33
- package/dist/agent/tests/test-agent-loader.d.ts +0 -1
- package/dist/agent/tests/test-agent-loader.js +0 -27
- package/dist/agent/tests/test-subagent-loading.cjs +0 -99
- package/dist/agent/tests/test-subagent-loading.d.ts +0 -1
- package/dist/agent/tests/test-subagent-loading.js +0 -93
- package/dist/agent/tests/toolRegistry.test.cjs +0 -147
- package/dist/agent/tests/toolRegistry.test.d.ts +0 -1
- package/dist/agent/tests/toolRegistry.test.js +0 -141
- package/dist/agent/tests/uiRegistryTools.test.cjs +0 -114
- package/dist/agent/tests/uiRegistryTools.test.d.ts +0 -1
- package/dist/agent/tests/uiRegistryTools.test.js +0 -105
- package/dist/agent/tests/xaiImageModel.test.cjs +0 -194
- package/dist/agent/tests/xaiImageModel.test.d.ts +0 -1
- package/dist/agent/tests/xaiImageModel.test.js +0 -188
- package/dist/tests/additionalMessageMiddleware.test.cjs +0 -216
- package/dist/tests/additionalMessageMiddleware.test.d.ts +0 -1
- package/dist/tests/additionalMessageMiddleware.test.js +0 -188
- package/dist/tests/agent-config-voice.test.cjs +0 -25
- package/dist/tests/agent-config-voice.test.d.ts +0 -1
- package/dist/tests/agent-config-voice.test.js +0 -19
- package/dist/tests/agentInvokerAttachments.test.cjs +0 -190
- package/dist/tests/agentInvokerAttachments.test.d.ts +0 -1
- package/dist/tests/agentInvokerAttachments.test.js +0 -184
- package/dist/tests/agentInvokerSummarization.test.cjs +0 -613
- package/dist/tests/agentInvokerSummarization.test.d.ts +0 -1
- package/dist/tests/agentInvokerSummarization.test.js +0 -607
- package/dist/tests/agentInvokerTokenUsage.test.cjs +0 -124
- package/dist/tests/agentInvokerTokenUsage.test.d.ts +0 -1
- package/dist/tests/agentInvokerTokenUsage.test.js +0 -118
- package/dist/tests/agentInvokerWorkdir.test.cjs +0 -150
- package/dist/tests/agentInvokerWorkdir.test.d.ts +0 -1
- package/dist/tests/agentInvokerWorkdir.test.js +0 -122
- package/dist/tests/agents-api.test.cjs +0 -324
- package/dist/tests/agents-api.test.d.ts +0 -1
- package/dist/tests/agents-api.test.js +0 -318
- package/dist/tests/attachments-utils.test.cjs +0 -46
- package/dist/tests/attachments-utils.test.d.ts +0 -1
- package/dist/tests/attachments-utils.test.js +0 -40
- package/dist/tests/browser-command.test.cjs +0 -264
- package/dist/tests/browser-command.test.d.ts +0 -1
- package/dist/tests/browser-command.test.js +0 -258
- package/dist/tests/browser-relay-server.test.cjs +0 -20
- package/dist/tests/browser-relay-server.test.d.ts +0 -1
- package/dist/tests/browser-relay-server.test.js +0 -14
- package/dist/tests/bunSqliteAdapter.test.cjs +0 -265
- package/dist/tests/bunSqliteAdapter.test.d.ts +0 -1
- package/dist/tests/bunSqliteAdapter.test.js +0 -259
- package/dist/tests/candleRange.test.cjs +0 -48
- package/dist/tests/candleRange.test.d.ts +0 -1
- package/dist/tests/candleRange.test.js +0 -42
- package/dist/tests/cli-config-loader.test.cjs +0 -532
- package/dist/tests/cli-config-loader.test.d.ts +0 -1
- package/dist/tests/cli-config-loader.test.js +0 -526
- package/dist/tests/cli-config-warnings.test.cjs +0 -94
- package/dist/tests/cli-config-warnings.test.d.ts +0 -1
- package/dist/tests/cli-config-warnings.test.js +0 -88
- package/dist/tests/cli-init.test.cjs +0 -225
- package/dist/tests/cli-init.test.d.ts +0 -1
- package/dist/tests/cli-init.test.js +0 -219
- package/dist/tests/cli-workspace-root.test.cjs +0 -114
- package/dist/tests/cli-workspace-root.test.d.ts +0 -1
- package/dist/tests/cli-workspace-root.test.js +0 -108
- package/dist/tests/codex-credentials-precedence.test.cjs +0 -94
- package/dist/tests/codex-credentials-precedence.test.d.ts +0 -1
- package/dist/tests/codex-credentials-precedence.test.js +0 -88
- package/dist/tests/codex-provider.test.cjs +0 -383
- package/dist/tests/codex-provider.test.d.ts +0 -1
- package/dist/tests/codex-provider.test.js +0 -377
- package/dist/tests/config-json-schema.test.cjs +0 -37
- package/dist/tests/config-json-schema.test.d.ts +0 -1
- package/dist/tests/config-json-schema.test.js +0 -31
- package/dist/tests/discord-adapter.test.cjs +0 -89
- package/dist/tests/discord-adapter.test.d.ts +0 -1
- package/dist/tests/discord-adapter.test.js +0 -83
- package/dist/tests/falRuntime.test.cjs +0 -78
- package/dist/tests/falRuntime.test.d.ts +0 -1
- package/dist/tests/falRuntime.test.js +0 -72
- package/dist/tests/falSummary.test.cjs +0 -51
- package/dist/tests/falSummary.test.d.ts +0 -1
- package/dist/tests/falSummary.test.js +0 -45
- package/dist/tests/fs-api.test.cjs +0 -138
- package/dist/tests/fs-api.test.d.ts +0 -1
- package/dist/tests/fs-api.test.js +0 -132
- package/dist/tests/gateway-command-workspace.test.cjs +0 -150
- package/dist/tests/gateway-command-workspace.test.d.ts +0 -1
- package/dist/tests/gateway-command-workspace.test.js +0 -144
- package/dist/tests/gateway-http-security.test.cjs +0 -318
- package/dist/tests/gateway-http-security.test.d.ts +0 -1
- package/dist/tests/gateway-http-security.test.js +0 -312
- package/dist/tests/gateway-node-mode.test.cjs +0 -174
- package/dist/tests/gateway-node-mode.test.d.ts +0 -1
- package/dist/tests/gateway-node-mode.test.js +0 -168
- package/dist/tests/gateway-origin-policy.test.cjs +0 -82
- package/dist/tests/gateway-origin-policy.test.d.ts +0 -1
- package/dist/tests/gateway-origin-policy.test.js +0 -76
- package/dist/tests/gateway-request-execution-overrides.test.cjs +0 -42
- package/dist/tests/gateway-request-execution-overrides.test.d.ts +0 -1
- package/dist/tests/gateway-request-execution-overrides.test.js +0 -36
- package/dist/tests/gateway.test.cjs +0 -700
- package/dist/tests/gateway.test.d.ts +0 -1
- package/dist/tests/gateway.test.js +0 -694
- package/dist/tests/hooks-matcher.test.cjs +0 -309
- package/dist/tests/hooks-matcher.test.d.ts +0 -1
- package/dist/tests/hooks-matcher.test.js +0 -303
- package/dist/tests/hooks-merger.test.cjs +0 -528
- package/dist/tests/hooks-merger.test.d.ts +0 -1
- package/dist/tests/hooks-merger.test.js +0 -522
- package/dist/tests/imagePersistence.test.cjs +0 -169
- package/dist/tests/imagePersistence.test.d.ts +0 -1
- package/dist/tests/imagePersistence.test.js +0 -163
- package/dist/tests/integration/agent-invocation.integration.test.cjs +0 -264
- package/dist/tests/integration/agent-invocation.integration.test.d.ts +0 -1
- package/dist/tests/integration/agent-invocation.integration.test.js +0 -258
- package/dist/tests/integration/finnhub-candles.integration.test.cjs +0 -98
- package/dist/tests/integration/finnhub-candles.integration.test.d.ts +0 -1
- package/dist/tests/integration/finnhub-candles.integration.test.js +0 -92
- package/dist/tests/integration/summarization-e2e.integration.test.cjs +0 -127
- package/dist/tests/integration/summarization-e2e.integration.test.d.ts +0 -1
- package/dist/tests/integration/summarization-e2e.integration.test.js +0 -121
- package/dist/tests/logger.test.cjs +0 -353
- package/dist/tests/logger.test.d.ts +0 -1
- package/dist/tests/logger.test.js +0 -347
- package/dist/tests/mediaCompatibilityMiddleware.test.cjs +0 -106
- package/dist/tests/mediaCompatibilityMiddleware.test.d.ts +0 -1
- package/dist/tests/mediaCompatibilityMiddleware.test.js +0 -100
- package/dist/tests/node-tools.test.cjs +0 -77
- package/dist/tests/node-tools.test.d.ts +0 -1
- package/dist/tests/node-tools.test.js +0 -71
- package/dist/tests/nodes-api.test.cjs +0 -86
- package/dist/tests/nodes-api.test.d.ts +0 -1
- package/dist/tests/nodes-api.test.js +0 -80
- package/dist/tests/outputManagerContextSummarized.test.cjs +0 -43
- package/dist/tests/outputManagerContextSummarized.test.d.ts +0 -1
- package/dist/tests/outputManagerContextSummarized.test.js +0 -37
- package/dist/tests/provider-command-codex.test.cjs +0 -57
- package/dist/tests/provider-command-codex.test.d.ts +0 -1
- package/dist/tests/provider-command-codex.test.js +0 -51
- package/dist/tests/routines-api.test.cjs +0 -107
- package/dist/tests/routines-api.test.d.ts +0 -1
- package/dist/tests/routines-api.test.js +0 -101
- package/dist/tests/run-terminal-bench-official-script.test.cjs +0 -61
- package/dist/tests/run-terminal-bench-official-script.test.d.ts +0 -1
- package/dist/tests/run-terminal-bench-official-script.test.js +0 -55
- package/dist/tests/sessionManager-uionly.test.cjs +0 -50
- package/dist/tests/sessionManager-uionly.test.d.ts +0 -1
- package/dist/tests/sessionManager-uionly.test.js +0 -44
- package/dist/tests/sessionMessageAttachments.test.cjs +0 -197
- package/dist/tests/sessionMessageAttachments.test.d.ts +0 -1
- package/dist/tests/sessionMessageAttachments.test.js +0 -191
- package/dist/tests/sessionMessageRole.test.cjs +0 -44
- package/dist/tests/sessionMessageRole.test.d.ts +0 -1
- package/dist/tests/sessionMessageRole.test.js +0 -38
- package/dist/tests/sessionStateMessages.test.cjs +0 -236
- package/dist/tests/sessionStateMessages.test.d.ts +0 -1
- package/dist/tests/sessionStateMessages.test.js +0 -230
- package/dist/tests/sessions-api.test.cjs +0 -250
- package/dist/tests/sessions-api.test.d.ts +0 -1
- package/dist/tests/sessions-api.test.js +0 -244
- package/dist/tests/skill-activation.test.cjs +0 -86
- package/dist/tests/skill-activation.test.d.ts +0 -1
- package/dist/tests/skill-activation.test.js +0 -80
- package/dist/tests/skill-metadata.test.cjs +0 -119
- package/dist/tests/skill-metadata.test.d.ts +0 -1
- package/dist/tests/skill-metadata.test.js +0 -113
- package/dist/tests/skill-repository.test.cjs +0 -469
- package/dist/tests/skill-repository.test.d.ts +0 -1
- package/dist/tests/skill-repository.test.js +0 -463
- package/dist/tests/skill-security-scanner.test.cjs +0 -126
- package/dist/tests/skill-security-scanner.test.d.ts +0 -1
- package/dist/tests/skill-security-scanner.test.js +0 -120
- package/dist/tests/sms-api.test.cjs +0 -183
- package/dist/tests/sms-api.test.d.ts +0 -1
- package/dist/tests/sms-api.test.js +0 -177
- package/dist/tests/sms-commands.test.cjs +0 -90
- package/dist/tests/sms-commands.test.d.ts +0 -1
- package/dist/tests/sms-commands.test.js +0 -84
- package/dist/tests/sms-policy-store.test.cjs +0 -69
- package/dist/tests/sms-policy-store.test.d.ts +0 -1
- package/dist/tests/sms-policy-store.test.js +0 -63
- package/dist/tests/teams-adapter.test.cjs +0 -58
- package/dist/tests/teams-adapter.test.d.ts +0 -1
- package/dist/tests/teams-adapter.test.js +0 -52
- package/dist/tests/technicalIndicators.test.cjs +0 -82
- package/dist/tests/technicalIndicators.test.d.ts +0 -1
- package/dist/tests/technicalIndicators.test.js +0 -76
- package/dist/tests/terminal-bench-adapters-helpers.test.cjs +0 -64
- package/dist/tests/terminal-bench-adapters-helpers.test.d.ts +0 -1
- package/dist/tests/terminal-bench-adapters-helpers.test.js +0 -58
- package/dist/tests/terminal-bench-cleanup.test.cjs +0 -93
- package/dist/tests/terminal-bench-cleanup.test.d.ts +0 -1
- package/dist/tests/terminal-bench-cleanup.test.js +0 -87
- package/dist/tests/terminal-bench-config.test.cjs +0 -62
- package/dist/tests/terminal-bench-config.test.d.ts +0 -1
- package/dist/tests/terminal-bench-config.test.js +0 -56
- package/dist/tests/terminal-bench-official.test.cjs +0 -194
- package/dist/tests/terminal-bench-official.test.d.ts +0 -1
- package/dist/tests/terminal-bench-official.test.js +0 -188
- package/dist/tests/terminal-bench-runner.test.cjs +0 -82
- package/dist/tests/terminal-bench-runner.test.d.ts +0 -1
- package/dist/tests/terminal-bench-runner.test.js +0 -76
- package/dist/tests/terminal-bench-scoring.test.cjs +0 -128
- package/dist/tests/terminal-bench-scoring.test.d.ts +0 -1
- package/dist/tests/terminal-bench-scoring.test.js +0 -122
- package/dist/tests/terminalProbe.test.cjs +0 -45
- package/dist/tests/terminalProbe.test.d.ts +0 -1
- package/dist/tests/terminalProbe.test.js +0 -39
- package/dist/tests/terminalProbeAuth.test.cjs +0 -85
- package/dist/tests/terminalProbeAuth.test.d.ts +0 -1
- package/dist/tests/terminalProbeAuth.test.js +0 -79
- package/dist/tests/toolDisplayHelpers.test.cjs +0 -46
- package/dist/tests/toolDisplayHelpers.test.d.ts +0 -1
- package/dist/tests/toolDisplayHelpers.test.js +0 -40
- package/dist/tests/uv.test.cjs +0 -47
- package/dist/tests/uv.test.d.ts +0 -1
- package/dist/tests/uv.test.js +0 -41
- package/dist/tests/voice-config.test.cjs +0 -35
- package/dist/tests/voice-config.test.d.ts +0 -1
- package/dist/tests/voice-config.test.js +0 -29
- package/dist/tests/websocket-transport.test.cjs +0 -31
- package/dist/tests/websocket-transport.test.d.ts +0 -1
- package/dist/tests/websocket-transport.test.js +0 -25
- package/dist/tests/yahooCandles.test.cjs +0 -111
- package/dist/tests/yahooCandles.test.d.ts +0 -1
- package/dist/tests/yahooCandles.test.js +0 -105
- package/dist/tools/finance/optionsAnalytics.test.cjs +0 -128
- package/dist/tools/finance/optionsAnalytics.test.d.ts +0 -1
- package/dist/tools/finance/optionsAnalytics.test.js +0 -122
- package/dist/webui/assets/index-BMf95nv5.js +0 -215
- package/dist/webui/assets/index-DhJQ8Mbn.css +0 -11
|
@@ -101,8 +101,8 @@ const BrowserConfigSchema = object({
|
|
|
101
101
|
});
|
|
102
102
|
const SummarizationConfigSchema = object({
|
|
103
103
|
enabled: external_zod_boolean().optional().default(true).describe("Enable conversation history summarization"),
|
|
104
|
-
maxTokensBeforeSummary: number().min(1000).max(1000000).optional().
|
|
105
|
-
messagesToKeep: number().min(2).max(100).optional().
|
|
104
|
+
maxTokensBeforeSummary: number().min(1000).max(1000000).optional().describe("Token threshold before summarizing conversation history"),
|
|
105
|
+
messagesToKeep: number().min(2).max(100).optional().describe("How many most recent messages to keep after summarization")
|
|
106
106
|
});
|
|
107
107
|
const RetryOnFailureSchema = external_zod_enum([
|
|
108
108
|
"continue",
|
|
@@ -342,11 +342,7 @@ const WingmanConfigSchema = object({
|
|
|
342
342
|
]).optional().default("info"),
|
|
343
343
|
defaultAgent: string().optional(),
|
|
344
344
|
recursionLimit: number().min(1).max(1000000).optional().default(5000),
|
|
345
|
-
summarization: SummarizationConfigSchema.optional()
|
|
346
|
-
enabled: true,
|
|
347
|
-
maxTokensBeforeSummary: 12000,
|
|
348
|
-
messagesToKeep: 8
|
|
349
|
-
}),
|
|
345
|
+
summarization: SummarizationConfigSchema.optional(),
|
|
350
346
|
modelRetry: ModelRetryConfigSchema.optional().default({
|
|
351
347
|
enabled: true,
|
|
352
348
|
maxRetries: 2,
|
|
@@ -34,6 +34,7 @@ __webpack_require__.d(__webpack_exports__, {
|
|
|
34
34
|
AgentInvoker: ()=>AgentInvoker,
|
|
35
35
|
configureDeepAgentSummarizationMiddleware: ()=>configureDeepAgentSummarizationMiddleware,
|
|
36
36
|
resolveHumanInTheLoopSettings: ()=>resolveHumanInTheLoopSettings,
|
|
37
|
+
resolveEffectiveSummarizationThresholdTokens: ()=>resolveEffectiveSummarizationThresholdTokens,
|
|
37
38
|
isRootLangGraphTerminalEvent: ()=>isRootLangGraphTerminalEvent,
|
|
38
39
|
resolveToolRetryMiddlewareSettings: ()=>resolveToolRetryMiddlewareSettings,
|
|
39
40
|
resolveSummarizationMiddlewareSettings: ()=>resolveSummarizationMiddlewareSettings,
|
|
@@ -64,7 +65,9 @@ const mcpClientManager_cjs_namespaceObject = require("../../agent/config/mcpClie
|
|
|
64
65
|
const additional_messages_cjs_namespaceObject = require("../../agent/middleware/additional-messages.cjs");
|
|
65
66
|
const merger_cjs_namespaceObject = require("../../agent/middleware/hooks/merger.cjs");
|
|
66
67
|
const hooks_cjs_namespaceObject = require("../../agent/middleware/hooks.cjs");
|
|
68
|
+
const large_tool_results_cjs_namespaceObject = require("../../agent/middleware/large-tool-results.cjs");
|
|
67
69
|
const media_compat_cjs_namespaceObject = require("../../agent/middleware/media-compat.cjs");
|
|
70
|
+
const browser_session_manager_cjs_namespaceObject = require("../../agent/tools/browser_session_manager.cjs");
|
|
68
71
|
const mcp_resources_cjs_namespaceObject = require("../../agent/tools/mcp_resources.cjs");
|
|
69
72
|
const terminal_session_manager_cjs_namespaceObject = require("../../agent/tools/terminal_session_manager.cjs");
|
|
70
73
|
const uiRegistry_cjs_namespaceObject = require("../../agent/uiRegistry.cjs");
|
|
@@ -126,10 +129,24 @@ const resolveExternalOutputMount = (workspace, workdir, defaultOutputDir)=>{
|
|
|
126
129
|
};
|
|
127
130
|
};
|
|
128
131
|
const resolveSummarizationMiddlewareSettings = (config)=>{
|
|
129
|
-
if (
|
|
132
|
+
if (config.summarization?.enabled === false) return null;
|
|
133
|
+
const summarization = config.summarization;
|
|
134
|
+
if (!summarization) return {
|
|
135
|
+
mode: "default"
|
|
136
|
+
};
|
|
137
|
+
const hasCustomThreshold = "number" == typeof summarization.maxTokensBeforeSummary;
|
|
138
|
+
const hasCustomKeep = "number" == typeof summarization.messagesToKeep;
|
|
139
|
+
if (!hasCustomThreshold && !hasCustomKeep) return {
|
|
140
|
+
mode: "default"
|
|
141
|
+
};
|
|
130
142
|
return {
|
|
131
|
-
|
|
132
|
-
|
|
143
|
+
mode: "custom",
|
|
144
|
+
...hasCustomThreshold ? {
|
|
145
|
+
maxTokensBeforeSummary: summarization.maxTokensBeforeSummary
|
|
146
|
+
} : {},
|
|
147
|
+
...hasCustomKeep ? {
|
|
148
|
+
messagesToKeep: summarization.messagesToKeep
|
|
149
|
+
} : {}
|
|
133
150
|
};
|
|
134
151
|
};
|
|
135
152
|
const resolveModelRetryMiddlewareSettings = (config)=>{
|
|
@@ -165,22 +182,45 @@ const resolveHumanInTheLoopSettings = (config)=>{
|
|
|
165
182
|
interruptOn
|
|
166
183
|
};
|
|
167
184
|
};
|
|
168
|
-
const configureDeepAgentSummarizationMiddleware = (agent, settings, model)=>{
|
|
185
|
+
const configureDeepAgentSummarizationMiddleware = (agent, settings, model, backend)=>{
|
|
169
186
|
const middleware = agent?.options?.middleware;
|
|
170
187
|
if (!Array.isArray(middleware)) return;
|
|
171
188
|
const index = middleware.findIndex((entry)=>entry?.name === "SummarizationMiddleware");
|
|
172
189
|
if (index < 0) return;
|
|
173
190
|
if (!settings) return void middleware.splice(index, 1);
|
|
174
|
-
|
|
191
|
+
if ("default" === settings.mode) return;
|
|
192
|
+
if (!backend) return;
|
|
193
|
+
middleware[index] = (0, external_deepagents_namespaceObject.createSummarizationMiddleware)({
|
|
175
194
|
model: model || DEFAULT_DEEPAGENT_MODEL,
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
195
|
+
backend,
|
|
196
|
+
..."number" == typeof settings.maxTokensBeforeSummary ? {
|
|
197
|
+
trigger: {
|
|
198
|
+
type: "tokens",
|
|
199
|
+
value: settings.maxTokensBeforeSummary
|
|
200
|
+
}
|
|
201
|
+
} : {},
|
|
202
|
+
..."number" == typeof settings.messagesToKeep ? {
|
|
203
|
+
keep: {
|
|
204
|
+
type: "messages",
|
|
205
|
+
value: settings.messagesToKeep
|
|
206
|
+
}
|
|
207
|
+
} : {}
|
|
182
208
|
});
|
|
183
209
|
};
|
|
210
|
+
const resolveEffectiveSummarizationThresholdTokens = async (settings, model)=>{
|
|
211
|
+
if (!settings) return;
|
|
212
|
+
if ("custom" === settings.mode && "number" == typeof settings.maxTokensBeforeSummary && Number.isFinite(settings.maxTokensBeforeSummary) && settings.maxTokensBeforeSummary > 0) return settings.maxTokensBeforeSummary;
|
|
213
|
+
let resolvedModel = model;
|
|
214
|
+
if ("string" == typeof resolvedModel) resolvedModel = await (0, external_langchain_namespaceObject.initChatModel)(resolvedModel);
|
|
215
|
+
const defaults = (0, external_deepagents_namespaceObject.computeSummarizationDefaults)(resolvedModel);
|
|
216
|
+
const trigger = Array.isArray(defaults.trigger) ? defaults.trigger[0] : defaults.trigger;
|
|
217
|
+
if (!trigger) return;
|
|
218
|
+
if ("tokens" === trigger.type) return trigger.value;
|
|
219
|
+
if ("fraction" !== trigger.type) return;
|
|
220
|
+
const maxInputTokens = "number" == typeof resolvedModel?.profile?.maxInputTokens ? resolvedModel.profile.maxInputTokens : void 0;
|
|
221
|
+
if (!maxInputTokens || maxInputTokens <= 0) return;
|
|
222
|
+
return Math.floor(maxInputTokens * trigger.value);
|
|
223
|
+
};
|
|
184
224
|
const recompileDeepAgentWithMiddlewareOverrides = (agent)=>{
|
|
185
225
|
if (agent && "object" == typeof agent) {
|
|
186
226
|
const maybeWithConfig = agent.withConfig;
|
|
@@ -624,6 +664,8 @@ class AgentInvoker {
|
|
|
624
664
|
const loader = new agentLoader_cjs_namespaceObject.AgentLoader(this.configDir, this.workspace, this.wingmanConfig, executionWorkspace, {
|
|
625
665
|
terminalOwnerId: `${agentName}:${hookSessionId}`,
|
|
626
666
|
terminalSessionManager: this.terminalSessionManager,
|
|
667
|
+
browserSessionOwnerId: `${agentName}:${hookSessionId}`,
|
|
668
|
+
browserSessionManager: this.browserSessionManager,
|
|
627
669
|
nodeInvoker: this.nodeInvoker,
|
|
628
670
|
nodeDefaultTargetClientId: this.nodeDefaultTargetClientId
|
|
629
671
|
});
|
|
@@ -773,14 +815,18 @@ class AgentInvoker {
|
|
|
773
815
|
rootDir: outputMount.absolutePath,
|
|
774
816
|
virtualMode: true
|
|
775
817
|
});
|
|
818
|
+
const backendFactory = ()=>new external_deepagents_namespaceObject.CompositeBackend(new external_deepagents_namespaceObject.FilesystemBackend({
|
|
819
|
+
rootDir: executionWorkspace,
|
|
820
|
+
virtualMode: true
|
|
821
|
+
}), backendOverrides);
|
|
822
|
+
middleware.push((0, large_tool_results_cjs_namespaceObject.createLargeToolResultsMiddleware)({
|
|
823
|
+
backend: backendFactory
|
|
824
|
+
}));
|
|
776
825
|
let standaloneAgent = (0, external_deepagents_namespaceObject.createDeepAgent)({
|
|
777
826
|
systemPrompt: targetAgent.systemPrompt,
|
|
778
827
|
tools: targetAgent.tools,
|
|
779
828
|
model: targetAgent.model,
|
|
780
|
-
backend:
|
|
781
|
-
rootDir: executionWorkspace,
|
|
782
|
-
virtualMode: true
|
|
783
|
-
}), backendOverrides),
|
|
829
|
+
backend: backendFactory,
|
|
784
830
|
middleware: middleware,
|
|
785
831
|
interruptOn: hitlSettings?.interruptOn,
|
|
786
832
|
skills: skillsSources,
|
|
@@ -788,7 +834,7 @@ class AgentInvoker {
|
|
|
788
834
|
subagents: targetAgent.subagents || [],
|
|
789
835
|
checkpointer: checkpointer
|
|
790
836
|
});
|
|
791
|
-
configureDeepAgentSummarizationMiddleware(standaloneAgent, summarizationSettings, targetAgent.model);
|
|
837
|
+
configureDeepAgentSummarizationMiddleware(standaloneAgent, summarizationSettings, targetAgent.model, backendFactory);
|
|
792
838
|
standaloneAgent = recompileDeepAgentWithMiddlewareOverrides(standaloneAgent);
|
|
793
839
|
this.logger.debug("Agent created, sending message");
|
|
794
840
|
const userContent = buildUserContent(prompt, attachments, targetAgent.model);
|
|
@@ -798,6 +844,7 @@ class AgentInvoker {
|
|
|
798
844
|
let streamEstimatedContextTokens = 0;
|
|
799
845
|
let contextSummarizationStarted = false;
|
|
800
846
|
let contextSummarizationEmitted = false;
|
|
847
|
+
const summarizationThresholdTokens = await resolveEffectiveSummarizationThresholdTokens(summarizationSettings, targetAgent.model);
|
|
801
848
|
const stream = await standaloneAgent.streamEvents({
|
|
802
849
|
messages: [
|
|
803
850
|
{
|
|
@@ -841,7 +888,7 @@ class AgentInvoker {
|
|
|
841
888
|
if (!isSummarizationChunk) {
|
|
842
889
|
const chunkEstimatedContextTokens = estimateContextTokensFromChunk(chunk);
|
|
843
890
|
if ("number" == typeof chunkEstimatedContextTokens && Number.isFinite(chunkEstimatedContextTokens) && chunkEstimatedContextTokens > streamEstimatedContextTokens) streamEstimatedContextTokens = chunkEstimatedContextTokens;
|
|
844
|
-
this.outputManager.emitAgentStream(chunk, chunkTokenUsage || void 0, streamEstimatedContextTokens > 0 ? streamEstimatedContextTokens : void 0);
|
|
891
|
+
this.outputManager.emitAgentStream(chunk, chunkTokenUsage || void 0, streamEstimatedContextTokens > 0 ? streamEstimatedContextTokens : void 0, summarizationThresholdTokens);
|
|
845
892
|
}
|
|
846
893
|
if (!contextSummarizationEmitted && summarizationSettings && chunkHasBuiltInSummarizationSignal(chunk)) {
|
|
847
894
|
if (!contextSummarizationStarted) {
|
|
@@ -853,7 +900,7 @@ class AgentInvoker {
|
|
|
853
900
|
this.outputManager.emitContextSummarized({
|
|
854
901
|
inputTokens: observedInputTokens,
|
|
855
902
|
peakInputTokens: observedInputTokens,
|
|
856
|
-
thresholdTokens:
|
|
903
|
+
thresholdTokens: summarizationThresholdTokens
|
|
857
904
|
});
|
|
858
905
|
}
|
|
859
906
|
if (isRootLangGraphTerminalEvent(chunk, rootLangGraphRunId)) {
|
|
@@ -872,9 +919,15 @@ class AgentInvoker {
|
|
|
872
919
|
this.logger.info("Agent streaming completed successfully");
|
|
873
920
|
const completionPayload = streamTokenUsage ? {
|
|
874
921
|
streaming: true,
|
|
875
|
-
tokenUsage: streamTokenUsage
|
|
922
|
+
tokenUsage: streamTokenUsage,
|
|
923
|
+
..."number" == typeof summarizationThresholdTokens ? {
|
|
924
|
+
thresholdTokens: summarizationThresholdTokens
|
|
925
|
+
} : {}
|
|
876
926
|
} : {
|
|
877
|
-
streaming: true
|
|
927
|
+
streaming: true,
|
|
928
|
+
..."number" == typeof summarizationThresholdTokens ? {
|
|
929
|
+
thresholdTokens: summarizationThresholdTokens
|
|
930
|
+
} : {}
|
|
878
931
|
};
|
|
879
932
|
emitCompletionAndContinuePostProcessing({
|
|
880
933
|
outputManager: this.outputManager,
|
|
@@ -896,6 +949,7 @@ class AgentInvoker {
|
|
|
896
949
|
cancelled: true
|
|
897
950
|
};
|
|
898
951
|
}
|
|
952
|
+
const summarizationThresholdTokens = await resolveEffectiveSummarizationThresholdTokens(summarizationSettings, targetAgent.model);
|
|
899
953
|
const result = await standaloneAgent.invoke({
|
|
900
954
|
messages: [
|
|
901
955
|
{
|
|
@@ -916,13 +970,17 @@ class AgentInvoker {
|
|
|
916
970
|
};
|
|
917
971
|
}
|
|
918
972
|
this.logger.info("Agent completed successfully");
|
|
973
|
+
const resultWithThreshold = "number" == typeof summarizationThresholdTokens && result && "object" == typeof result && !Array.isArray(result) ? {
|
|
974
|
+
...result,
|
|
975
|
+
thresholdTokens: summarizationThresholdTokens
|
|
976
|
+
} : result;
|
|
919
977
|
emitCompletionAndContinuePostProcessing({
|
|
920
978
|
outputManager: this.outputManager,
|
|
921
|
-
result,
|
|
979
|
+
result: resultWithThreshold,
|
|
922
980
|
postProcess: ()=>this.materializeSessionImages(sessionId),
|
|
923
981
|
logger: this.logger
|
|
924
982
|
});
|
|
925
|
-
return
|
|
983
|
+
return resultWithThreshold;
|
|
926
984
|
}
|
|
927
985
|
} catch (error) {
|
|
928
986
|
const abortError = isCancelled() || error instanceof Error && ("AbortError" === error.name || "CancelledError" === error.name || /abort|cancel/i.test(error.message));
|
|
@@ -972,6 +1030,7 @@ class AgentInvoker {
|
|
|
972
1030
|
_define_property(this, "mcpManager", null);
|
|
973
1031
|
_define_property(this, "sessionManager", null);
|
|
974
1032
|
_define_property(this, "terminalSessionManager", void 0);
|
|
1033
|
+
_define_property(this, "browserSessionManager", void 0);
|
|
975
1034
|
_define_property(this, "workdir", null);
|
|
976
1035
|
_define_property(this, "defaultOutputDir", null);
|
|
977
1036
|
_define_property(this, "mcpProxyConfig", void 0);
|
|
@@ -985,6 +1044,7 @@ class AgentInvoker {
|
|
|
985
1044
|
this.configDir = options.configDir || ".wingman";
|
|
986
1045
|
this.sessionManager = options.sessionManager || null;
|
|
987
1046
|
this.terminalSessionManager = options.terminalSessionManager || (0, terminal_session_manager_cjs_namespaceObject.getSharedTerminalSessionManager)();
|
|
1047
|
+
this.browserSessionManager = options.browserSessionManager || (0, browser_session_manager_cjs_namespaceObject.getSharedBrowserSessionManager)();
|
|
988
1048
|
this.workdir = options.workdir || null;
|
|
989
1049
|
this.defaultOutputDir = options.defaultOutputDir || null;
|
|
990
1050
|
this.mcpProxyConfig = options.mcpProxyConfig;
|
|
@@ -997,6 +1057,8 @@ class AgentInvoker {
|
|
|
997
1057
|
this.loader = new agentLoader_cjs_namespaceObject.AgentLoader(this.configDir, this.workspace, this.wingmanConfig, this.workspace, {
|
|
998
1058
|
terminalOwnerId: "default",
|
|
999
1059
|
terminalSessionManager: this.terminalSessionManager,
|
|
1060
|
+
browserSessionOwnerId: "default",
|
|
1061
|
+
browserSessionManager: this.browserSessionManager,
|
|
1000
1062
|
nodeInvoker: this.nodeInvoker,
|
|
1001
1063
|
nodeDefaultTargetClientId: this.nodeDefaultTargetClientId
|
|
1002
1064
|
});
|
|
@@ -1208,6 +1270,7 @@ exports.mergeTokenUsageSnapshots = __webpack_exports__.mergeTokenUsageSnapshots;
|
|
|
1208
1270
|
exports.recompileDeepAgentWithMiddlewareOverrides = __webpack_exports__.recompileDeepAgentWithMiddlewareOverrides;
|
|
1209
1271
|
exports.resolveAgentExecutionWorkspace = __webpack_exports__.resolveAgentExecutionWorkspace;
|
|
1210
1272
|
exports.resolveAgentMemorySources = __webpack_exports__.resolveAgentMemorySources;
|
|
1273
|
+
exports.resolveEffectiveSummarizationThresholdTokens = __webpack_exports__.resolveEffectiveSummarizationThresholdTokens;
|
|
1211
1274
|
exports.resolveExecutionWorkspace = __webpack_exports__.resolveExecutionWorkspace;
|
|
1212
1275
|
exports.resolveExternalOutputMount = __webpack_exports__.resolveExternalOutputMount;
|
|
1213
1276
|
exports.resolveHumanInTheLoopSettings = __webpack_exports__.resolveHumanInTheLoopSettings;
|
|
@@ -1239,6 +1302,7 @@ for(var __rspack_i in __webpack_exports__)if (-1 === [
|
|
|
1239
1302
|
"recompileDeepAgentWithMiddlewareOverrides",
|
|
1240
1303
|
"resolveAgentExecutionWorkspace",
|
|
1241
1304
|
"resolveAgentMemorySources",
|
|
1305
|
+
"resolveEffectiveSummarizationThresholdTokens",
|
|
1242
1306
|
"resolveExecutionWorkspace",
|
|
1243
1307
|
"resolveExternalOutputMount",
|
|
1244
1308
|
"resolveHumanInTheLoopSettings",
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { WingmanAgentConfig } from "@/agent/config/agentConfig.js";
|
|
2
2
|
import { type MCPProxyConfig } from "@/agent/config/mcpClientManager.js";
|
|
3
3
|
import { type ConnectedNodeTarget } from "@/agent/middleware/additional-messages.js";
|
|
4
|
+
import { type BrowserSessionManager } from "@/agent/tools/browser_session_manager.js";
|
|
4
5
|
import type { NodeInvokeRequest, NodeInvokeResult } from "@/agent/tools/node_invoke.js";
|
|
5
6
|
import { type TerminalSessionManager } from "@/agent/tools/terminal_session_manager.js";
|
|
6
7
|
import type { WingmanAgent } from "@/types/agents.js";
|
|
@@ -15,6 +16,7 @@ export interface AgentInvokerOptions {
|
|
|
15
16
|
logger: Logger;
|
|
16
17
|
sessionManager?: SessionManager;
|
|
17
18
|
terminalSessionManager?: TerminalSessionManager;
|
|
19
|
+
browserSessionManager?: BrowserSessionManager;
|
|
18
20
|
workdir?: string | null;
|
|
19
21
|
defaultOutputDir?: string | null;
|
|
20
22
|
mcpProxyConfig?: MCPProxyConfig;
|
|
@@ -93,8 +95,11 @@ export type ExternalOutputMount = {
|
|
|
93
95
|
absolutePath: string | null;
|
|
94
96
|
};
|
|
95
97
|
export type SummarizationMiddlewareSettings = {
|
|
96
|
-
|
|
97
|
-
|
|
98
|
+
mode: "default";
|
|
99
|
+
} | {
|
|
100
|
+
mode: "custom";
|
|
101
|
+
maxTokensBeforeSummary?: number;
|
|
102
|
+
messagesToKeep?: number;
|
|
98
103
|
};
|
|
99
104
|
export type ModelRetryMiddlewareSettings = {
|
|
100
105
|
maxRetries: number;
|
|
@@ -128,7 +133,8 @@ export declare const resolveSummarizationMiddlewareSettings: (config: WingmanCon
|
|
|
128
133
|
export declare const resolveModelRetryMiddlewareSettings: (config: WingmanConfigType) => ModelRetryMiddlewareSettings | null;
|
|
129
134
|
export declare const resolveToolRetryMiddlewareSettings: (config: WingmanConfigType) => ToolRetryMiddlewareSettings | null;
|
|
130
135
|
export declare const resolveHumanInTheLoopSettings: (config: WingmanConfigType) => HumanInTheLoopSettings | null;
|
|
131
|
-
export declare const configureDeepAgentSummarizationMiddleware: (agent: any, settings: SummarizationMiddlewareSettings | null, model?: any) => void;
|
|
136
|
+
export declare const configureDeepAgentSummarizationMiddleware: (agent: any, settings: SummarizationMiddlewareSettings | null, model?: any, backend?: any) => void;
|
|
137
|
+
export declare const resolveEffectiveSummarizationThresholdTokens: (settings: SummarizationMiddlewareSettings | null, model?: unknown) => Promise<number | undefined>;
|
|
132
138
|
export declare const recompileDeepAgentWithMiddlewareOverrides: <T>(agent: T) => T;
|
|
133
139
|
type ToolEventContext = {
|
|
134
140
|
event: "on_tool_start" | "on_tool_end" | "on_tool_error";
|
|
@@ -173,6 +179,7 @@ export declare class AgentInvoker {
|
|
|
173
179
|
private mcpManager;
|
|
174
180
|
private sessionManager;
|
|
175
181
|
private terminalSessionManager;
|
|
182
|
+
private browserSessionManager;
|
|
176
183
|
private workdir;
|
|
177
184
|
private defaultOutputDir;
|
|
178
185
|
private mcpProxyConfig;
|
|
@@ -1,13 +1,15 @@
|
|
|
1
1
|
import { existsSync } from "node:fs";
|
|
2
2
|
import { isAbsolute, join, normalize, sep } from "node:path";
|
|
3
|
-
import { CompositeBackend, FilesystemBackend, createDeepAgent } from "deepagents";
|
|
4
|
-
import {
|
|
3
|
+
import { CompositeBackend, FilesystemBackend, computeSummarizationDefaults, createDeepAgent, createSummarizationMiddleware } from "deepagents";
|
|
4
|
+
import { initChatModel, modelRetryMiddleware, toolRetryMiddleware } from "langchain";
|
|
5
5
|
import { v4 } from "uuid";
|
|
6
6
|
import { MCPClientManager } from "../../agent/config/mcpClientManager.js";
|
|
7
7
|
import { additionalMessageMiddleware } from "../../agent/middleware/additional-messages.js";
|
|
8
8
|
import { mergeHooks } from "../../agent/middleware/hooks/merger.js";
|
|
9
9
|
import { createHooksMiddleware } from "../../agent/middleware/hooks.js";
|
|
10
|
+
import { createLargeToolResultsMiddleware } from "../../agent/middleware/large-tool-results.js";
|
|
10
11
|
import { mediaCompatibilityMiddleware } from "../../agent/middleware/media-compat.js";
|
|
12
|
+
import { getSharedBrowserSessionManager } from "../../agent/tools/browser_session_manager.js";
|
|
11
13
|
import { createMCPResourceTools } from "../../agent/tools/mcp_resources.js";
|
|
12
14
|
import { getSharedTerminalSessionManager } from "../../agent/tools/terminal_session_manager.js";
|
|
13
15
|
import { getBundledSkillsPath } from "../../agent/uiRegistry.js";
|
|
@@ -69,10 +71,24 @@ const resolveExternalOutputMount = (workspace, workdir, defaultOutputDir)=>{
|
|
|
69
71
|
};
|
|
70
72
|
};
|
|
71
73
|
const resolveSummarizationMiddlewareSettings = (config)=>{
|
|
72
|
-
if (
|
|
74
|
+
if (config.summarization?.enabled === false) return null;
|
|
75
|
+
const summarization = config.summarization;
|
|
76
|
+
if (!summarization) return {
|
|
77
|
+
mode: "default"
|
|
78
|
+
};
|
|
79
|
+
const hasCustomThreshold = "number" == typeof summarization.maxTokensBeforeSummary;
|
|
80
|
+
const hasCustomKeep = "number" == typeof summarization.messagesToKeep;
|
|
81
|
+
if (!hasCustomThreshold && !hasCustomKeep) return {
|
|
82
|
+
mode: "default"
|
|
83
|
+
};
|
|
73
84
|
return {
|
|
74
|
-
|
|
75
|
-
|
|
85
|
+
mode: "custom",
|
|
86
|
+
...hasCustomThreshold ? {
|
|
87
|
+
maxTokensBeforeSummary: summarization.maxTokensBeforeSummary
|
|
88
|
+
} : {},
|
|
89
|
+
...hasCustomKeep ? {
|
|
90
|
+
messagesToKeep: summarization.messagesToKeep
|
|
91
|
+
} : {}
|
|
76
92
|
};
|
|
77
93
|
};
|
|
78
94
|
const resolveModelRetryMiddlewareSettings = (config)=>{
|
|
@@ -108,22 +124,45 @@ const resolveHumanInTheLoopSettings = (config)=>{
|
|
|
108
124
|
interruptOn
|
|
109
125
|
};
|
|
110
126
|
};
|
|
111
|
-
const configureDeepAgentSummarizationMiddleware = (agent, settings, model)=>{
|
|
127
|
+
const configureDeepAgentSummarizationMiddleware = (agent, settings, model, backend)=>{
|
|
112
128
|
const middleware = agent?.options?.middleware;
|
|
113
129
|
if (!Array.isArray(middleware)) return;
|
|
114
130
|
const index = middleware.findIndex((entry)=>entry?.name === "SummarizationMiddleware");
|
|
115
131
|
if (index < 0) return;
|
|
116
132
|
if (!settings) return void middleware.splice(index, 1);
|
|
117
|
-
|
|
133
|
+
if ("default" === settings.mode) return;
|
|
134
|
+
if (!backend) return;
|
|
135
|
+
middleware[index] = createSummarizationMiddleware({
|
|
118
136
|
model: model || DEFAULT_DEEPAGENT_MODEL,
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
137
|
+
backend,
|
|
138
|
+
..."number" == typeof settings.maxTokensBeforeSummary ? {
|
|
139
|
+
trigger: {
|
|
140
|
+
type: "tokens",
|
|
141
|
+
value: settings.maxTokensBeforeSummary
|
|
142
|
+
}
|
|
143
|
+
} : {},
|
|
144
|
+
..."number" == typeof settings.messagesToKeep ? {
|
|
145
|
+
keep: {
|
|
146
|
+
type: "messages",
|
|
147
|
+
value: settings.messagesToKeep
|
|
148
|
+
}
|
|
149
|
+
} : {}
|
|
125
150
|
});
|
|
126
151
|
};
|
|
152
|
+
const resolveEffectiveSummarizationThresholdTokens = async (settings, model)=>{
|
|
153
|
+
if (!settings) return;
|
|
154
|
+
if ("custom" === settings.mode && "number" == typeof settings.maxTokensBeforeSummary && Number.isFinite(settings.maxTokensBeforeSummary) && settings.maxTokensBeforeSummary > 0) return settings.maxTokensBeforeSummary;
|
|
155
|
+
let resolvedModel = model;
|
|
156
|
+
if ("string" == typeof resolvedModel) resolvedModel = await initChatModel(resolvedModel);
|
|
157
|
+
const defaults = computeSummarizationDefaults(resolvedModel);
|
|
158
|
+
const trigger = Array.isArray(defaults.trigger) ? defaults.trigger[0] : defaults.trigger;
|
|
159
|
+
if (!trigger) return;
|
|
160
|
+
if ("tokens" === trigger.type) return trigger.value;
|
|
161
|
+
if ("fraction" !== trigger.type) return;
|
|
162
|
+
const maxInputTokens = "number" == typeof resolvedModel?.profile?.maxInputTokens ? resolvedModel.profile.maxInputTokens : void 0;
|
|
163
|
+
if (!maxInputTokens || maxInputTokens <= 0) return;
|
|
164
|
+
return Math.floor(maxInputTokens * trigger.value);
|
|
165
|
+
};
|
|
127
166
|
const recompileDeepAgentWithMiddlewareOverrides = (agent)=>{
|
|
128
167
|
if (agent && "object" == typeof agent) {
|
|
129
168
|
const maybeWithConfig = agent.withConfig;
|
|
@@ -567,6 +606,8 @@ class AgentInvoker {
|
|
|
567
606
|
const loader = new AgentLoader(this.configDir, this.workspace, this.wingmanConfig, executionWorkspace, {
|
|
568
607
|
terminalOwnerId: `${agentName}:${hookSessionId}`,
|
|
569
608
|
terminalSessionManager: this.terminalSessionManager,
|
|
609
|
+
browserSessionOwnerId: `${agentName}:${hookSessionId}`,
|
|
610
|
+
browserSessionManager: this.browserSessionManager,
|
|
570
611
|
nodeInvoker: this.nodeInvoker,
|
|
571
612
|
nodeDefaultTargetClientId: this.nodeDefaultTargetClientId
|
|
572
613
|
});
|
|
@@ -716,14 +757,18 @@ class AgentInvoker {
|
|
|
716
757
|
rootDir: outputMount.absolutePath,
|
|
717
758
|
virtualMode: true
|
|
718
759
|
});
|
|
760
|
+
const backendFactory = ()=>new CompositeBackend(new FilesystemBackend({
|
|
761
|
+
rootDir: executionWorkspace,
|
|
762
|
+
virtualMode: true
|
|
763
|
+
}), backendOverrides);
|
|
764
|
+
middleware.push(createLargeToolResultsMiddleware({
|
|
765
|
+
backend: backendFactory
|
|
766
|
+
}));
|
|
719
767
|
let standaloneAgent = createDeepAgent({
|
|
720
768
|
systemPrompt: targetAgent.systemPrompt,
|
|
721
769
|
tools: targetAgent.tools,
|
|
722
770
|
model: targetAgent.model,
|
|
723
|
-
backend:
|
|
724
|
-
rootDir: executionWorkspace,
|
|
725
|
-
virtualMode: true
|
|
726
|
-
}), backendOverrides),
|
|
771
|
+
backend: backendFactory,
|
|
727
772
|
middleware: middleware,
|
|
728
773
|
interruptOn: hitlSettings?.interruptOn,
|
|
729
774
|
skills: skillsSources,
|
|
@@ -731,7 +776,7 @@ class AgentInvoker {
|
|
|
731
776
|
subagents: targetAgent.subagents || [],
|
|
732
777
|
checkpointer: checkpointer
|
|
733
778
|
});
|
|
734
|
-
configureDeepAgentSummarizationMiddleware(standaloneAgent, summarizationSettings, targetAgent.model);
|
|
779
|
+
configureDeepAgentSummarizationMiddleware(standaloneAgent, summarizationSettings, targetAgent.model, backendFactory);
|
|
735
780
|
standaloneAgent = recompileDeepAgentWithMiddlewareOverrides(standaloneAgent);
|
|
736
781
|
this.logger.debug("Agent created, sending message");
|
|
737
782
|
const userContent = buildUserContent(prompt, attachments, targetAgent.model);
|
|
@@ -741,6 +786,7 @@ class AgentInvoker {
|
|
|
741
786
|
let streamEstimatedContextTokens = 0;
|
|
742
787
|
let contextSummarizationStarted = false;
|
|
743
788
|
let contextSummarizationEmitted = false;
|
|
789
|
+
const summarizationThresholdTokens = await resolveEffectiveSummarizationThresholdTokens(summarizationSettings, targetAgent.model);
|
|
744
790
|
const stream = await standaloneAgent.streamEvents({
|
|
745
791
|
messages: [
|
|
746
792
|
{
|
|
@@ -784,7 +830,7 @@ class AgentInvoker {
|
|
|
784
830
|
if (!isSummarizationChunk) {
|
|
785
831
|
const chunkEstimatedContextTokens = estimateContextTokensFromChunk(chunk);
|
|
786
832
|
if ("number" == typeof chunkEstimatedContextTokens && Number.isFinite(chunkEstimatedContextTokens) && chunkEstimatedContextTokens > streamEstimatedContextTokens) streamEstimatedContextTokens = chunkEstimatedContextTokens;
|
|
787
|
-
this.outputManager.emitAgentStream(chunk, chunkTokenUsage || void 0, streamEstimatedContextTokens > 0 ? streamEstimatedContextTokens : void 0);
|
|
833
|
+
this.outputManager.emitAgentStream(chunk, chunkTokenUsage || void 0, streamEstimatedContextTokens > 0 ? streamEstimatedContextTokens : void 0, summarizationThresholdTokens);
|
|
788
834
|
}
|
|
789
835
|
if (!contextSummarizationEmitted && summarizationSettings && chunkHasBuiltInSummarizationSignal(chunk)) {
|
|
790
836
|
if (!contextSummarizationStarted) {
|
|
@@ -796,7 +842,7 @@ class AgentInvoker {
|
|
|
796
842
|
this.outputManager.emitContextSummarized({
|
|
797
843
|
inputTokens: observedInputTokens,
|
|
798
844
|
peakInputTokens: observedInputTokens,
|
|
799
|
-
thresholdTokens:
|
|
845
|
+
thresholdTokens: summarizationThresholdTokens
|
|
800
846
|
});
|
|
801
847
|
}
|
|
802
848
|
if (isRootLangGraphTerminalEvent(chunk, rootLangGraphRunId)) {
|
|
@@ -815,9 +861,15 @@ class AgentInvoker {
|
|
|
815
861
|
this.logger.info("Agent streaming completed successfully");
|
|
816
862
|
const completionPayload = streamTokenUsage ? {
|
|
817
863
|
streaming: true,
|
|
818
|
-
tokenUsage: streamTokenUsage
|
|
864
|
+
tokenUsage: streamTokenUsage,
|
|
865
|
+
..."number" == typeof summarizationThresholdTokens ? {
|
|
866
|
+
thresholdTokens: summarizationThresholdTokens
|
|
867
|
+
} : {}
|
|
819
868
|
} : {
|
|
820
|
-
streaming: true
|
|
869
|
+
streaming: true,
|
|
870
|
+
..."number" == typeof summarizationThresholdTokens ? {
|
|
871
|
+
thresholdTokens: summarizationThresholdTokens
|
|
872
|
+
} : {}
|
|
821
873
|
};
|
|
822
874
|
emitCompletionAndContinuePostProcessing({
|
|
823
875
|
outputManager: this.outputManager,
|
|
@@ -839,6 +891,7 @@ class AgentInvoker {
|
|
|
839
891
|
cancelled: true
|
|
840
892
|
};
|
|
841
893
|
}
|
|
894
|
+
const summarizationThresholdTokens = await resolveEffectiveSummarizationThresholdTokens(summarizationSettings, targetAgent.model);
|
|
842
895
|
const result = await standaloneAgent.invoke({
|
|
843
896
|
messages: [
|
|
844
897
|
{
|
|
@@ -859,13 +912,17 @@ class AgentInvoker {
|
|
|
859
912
|
};
|
|
860
913
|
}
|
|
861
914
|
this.logger.info("Agent completed successfully");
|
|
915
|
+
const resultWithThreshold = "number" == typeof summarizationThresholdTokens && result && "object" == typeof result && !Array.isArray(result) ? {
|
|
916
|
+
...result,
|
|
917
|
+
thresholdTokens: summarizationThresholdTokens
|
|
918
|
+
} : result;
|
|
862
919
|
emitCompletionAndContinuePostProcessing({
|
|
863
920
|
outputManager: this.outputManager,
|
|
864
|
-
result,
|
|
921
|
+
result: resultWithThreshold,
|
|
865
922
|
postProcess: ()=>this.materializeSessionImages(sessionId),
|
|
866
923
|
logger: this.logger
|
|
867
924
|
});
|
|
868
|
-
return
|
|
925
|
+
return resultWithThreshold;
|
|
869
926
|
}
|
|
870
927
|
} catch (error) {
|
|
871
928
|
const abortError = isCancelled() || error instanceof Error && ("AbortError" === error.name || "CancelledError" === error.name || /abort|cancel/i.test(error.message));
|
|
@@ -915,6 +972,7 @@ class AgentInvoker {
|
|
|
915
972
|
_define_property(this, "mcpManager", null);
|
|
916
973
|
_define_property(this, "sessionManager", null);
|
|
917
974
|
_define_property(this, "terminalSessionManager", void 0);
|
|
975
|
+
_define_property(this, "browserSessionManager", void 0);
|
|
918
976
|
_define_property(this, "workdir", null);
|
|
919
977
|
_define_property(this, "defaultOutputDir", null);
|
|
920
978
|
_define_property(this, "mcpProxyConfig", void 0);
|
|
@@ -928,6 +986,7 @@ class AgentInvoker {
|
|
|
928
986
|
this.configDir = options.configDir || ".wingman";
|
|
929
987
|
this.sessionManager = options.sessionManager || null;
|
|
930
988
|
this.terminalSessionManager = options.terminalSessionManager || getSharedTerminalSessionManager();
|
|
989
|
+
this.browserSessionManager = options.browserSessionManager || getSharedBrowserSessionManager();
|
|
931
990
|
this.workdir = options.workdir || null;
|
|
932
991
|
this.defaultOutputDir = options.defaultOutputDir || null;
|
|
933
992
|
this.mcpProxyConfig = options.mcpProxyConfig;
|
|
@@ -940,6 +999,8 @@ class AgentInvoker {
|
|
|
940
999
|
this.loader = new AgentLoader(this.configDir, this.workspace, this.wingmanConfig, this.workspace, {
|
|
941
1000
|
terminalOwnerId: "default",
|
|
942
1001
|
terminalSessionManager: this.terminalSessionManager,
|
|
1002
|
+
browserSessionOwnerId: "default",
|
|
1003
|
+
browserSessionManager: this.browserSessionManager,
|
|
943
1004
|
nodeInvoker: this.nodeInvoker,
|
|
944
1005
|
nodeDefaultTargetClientId: this.nodeDefaultTargetClientId
|
|
945
1006
|
});
|
|
@@ -1130,4 +1191,4 @@ function buildAttachmentPreview(attachments) {
|
|
|
1130
1191
|
if (hasImage) return "[image]";
|
|
1131
1192
|
return "";
|
|
1132
1193
|
}
|
|
1133
|
-
export { AGENTS_MEMORY_VIRTUAL_PATHS, AgentInvoker, OUTPUT_VIRTUAL_PATH, WORKDIR_VIRTUAL_PATH, buildUserContent, chunkBelongsToSummarizationMiddleware, chunkHasAssistantText, chunkHasBuiltInSummarizationSignal, chunkSignalsActiveSummarization, configureDeepAgentSummarizationMiddleware, detectContextSummarizationTransition, detectStreamErrorMessage, detectToolEventContext, emitCompletionAndContinuePostProcessing, estimateContextTokensFromChunk, extractTokenUsageSnapshot, isRootLangGraphTerminalEvent, mergeTokenUsageSnapshots, recompileDeepAgentWithMiddlewareOverrides, resolveAgentExecutionWorkspace, resolveAgentMemorySources, resolveExecutionWorkspace, resolveExternalOutputMount, resolveHumanInTheLoopSettings, resolveModelRetryMiddlewareSettings, resolveSummarizationMiddlewareSettings, resolveToolRetryMiddlewareSettings, selectStreamingFallbackText, toWorkspaceAliasVirtualPath, trackRootLangGraphRunId };
|
|
1194
|
+
export { AGENTS_MEMORY_VIRTUAL_PATHS, AgentInvoker, OUTPUT_VIRTUAL_PATH, WORKDIR_VIRTUAL_PATH, buildUserContent, chunkBelongsToSummarizationMiddleware, chunkHasAssistantText, chunkHasBuiltInSummarizationSignal, chunkSignalsActiveSummarization, configureDeepAgentSummarizationMiddleware, detectContextSummarizationTransition, detectStreamErrorMessage, detectToolEventContext, emitCompletionAndContinuePostProcessing, estimateContextTokensFromChunk, extractTokenUsageSnapshot, isRootLangGraphTerminalEvent, mergeTokenUsageSnapshots, recompileDeepAgentWithMiddlewareOverrides, resolveAgentExecutionWorkspace, resolveAgentMemorySources, resolveEffectiveSummarizationThresholdTokens, resolveExecutionWorkspace, resolveExternalOutputMount, resolveHumanInTheLoopSettings, resolveModelRetryMiddlewareSettings, resolveSummarizationMiddlewareSettings, resolveToolRetryMiddlewareSettings, selectStreamingFallbackText, toWorkspaceAliasVirtualPath, trackRootLangGraphRunId };
|
|
@@ -66,7 +66,7 @@ class OutputManager extends external_node_events_namespaceObject.EventEmitter {
|
|
|
66
66
|
timestamp: new Date().toISOString()
|
|
67
67
|
});
|
|
68
68
|
}
|
|
69
|
-
emitAgentStream(chunk, tokenUsage, estimatedContextTokens) {
|
|
69
|
+
emitAgentStream(chunk, tokenUsage, estimatedContextTokens, thresholdTokens) {
|
|
70
70
|
this.emitEvent({
|
|
71
71
|
type: "agent-stream",
|
|
72
72
|
chunk,
|
|
@@ -76,6 +76,9 @@ class OutputManager extends external_node_events_namespaceObject.EventEmitter {
|
|
|
76
76
|
..."number" == typeof estimatedContextTokens && Number.isFinite(estimatedContextTokens) && estimatedContextTokens > 0 ? {
|
|
77
77
|
estimatedContextTokens: Math.round(estimatedContextTokens)
|
|
78
78
|
} : {},
|
|
79
|
+
..."number" == typeof thresholdTokens && Number.isFinite(thresholdTokens) && thresholdTokens > 0 ? {
|
|
80
|
+
thresholdTokens: Math.round(thresholdTokens)
|
|
81
|
+
} : {},
|
|
79
82
|
timestamp: new Date().toISOString()
|
|
80
83
|
});
|
|
81
84
|
}
|
|
@@ -90,7 +93,9 @@ class OutputManager extends external_node_events_namespaceObject.EventEmitter {
|
|
|
90
93
|
type: "context-summarized",
|
|
91
94
|
inputTokens: payload.inputTokens,
|
|
92
95
|
peakInputTokens: payload.peakInputTokens,
|
|
93
|
-
|
|
96
|
+
..."number" == typeof payload.thresholdTokens ? {
|
|
97
|
+
thresholdTokens: payload.thresholdTokens
|
|
98
|
+
} : {},
|
|
94
99
|
timestamp: new Date().toISOString()
|
|
95
100
|
});
|
|
96
101
|
}
|
|
@@ -35,7 +35,7 @@ export declare class OutputManager extends EventEmitter {
|
|
|
35
35
|
inputTokens: number;
|
|
36
36
|
outputTokens: number;
|
|
37
37
|
totalTokens: number;
|
|
38
|
-
}, estimatedContextTokens?: number): void;
|
|
38
|
+
}, estimatedContextTokens?: number, thresholdTokens?: number): void;
|
|
39
39
|
/**
|
|
40
40
|
* Emit explicit context summarization start signal
|
|
41
41
|
*/
|
|
@@ -46,7 +46,7 @@ export declare class OutputManager extends EventEmitter {
|
|
|
46
46
|
emitContextSummarized(payload: {
|
|
47
47
|
inputTokens: number;
|
|
48
48
|
peakInputTokens: number;
|
|
49
|
-
thresholdTokens
|
|
49
|
+
thresholdTokens?: number;
|
|
50
50
|
}): void;
|
|
51
51
|
/**
|
|
52
52
|
* Emit agent completion
|
|
@@ -38,7 +38,7 @@ class OutputManager extends EventEmitter {
|
|
|
38
38
|
timestamp: new Date().toISOString()
|
|
39
39
|
});
|
|
40
40
|
}
|
|
41
|
-
emitAgentStream(chunk, tokenUsage, estimatedContextTokens) {
|
|
41
|
+
emitAgentStream(chunk, tokenUsage, estimatedContextTokens, thresholdTokens) {
|
|
42
42
|
this.emitEvent({
|
|
43
43
|
type: "agent-stream",
|
|
44
44
|
chunk,
|
|
@@ -48,6 +48,9 @@ class OutputManager extends EventEmitter {
|
|
|
48
48
|
..."number" == typeof estimatedContextTokens && Number.isFinite(estimatedContextTokens) && estimatedContextTokens > 0 ? {
|
|
49
49
|
estimatedContextTokens: Math.round(estimatedContextTokens)
|
|
50
50
|
} : {},
|
|
51
|
+
..."number" == typeof thresholdTokens && Number.isFinite(thresholdTokens) && thresholdTokens > 0 ? {
|
|
52
|
+
thresholdTokens: Math.round(thresholdTokens)
|
|
53
|
+
} : {},
|
|
51
54
|
timestamp: new Date().toISOString()
|
|
52
55
|
});
|
|
53
56
|
}
|
|
@@ -62,7 +65,9 @@ class OutputManager extends EventEmitter {
|
|
|
62
65
|
type: "context-summarized",
|
|
63
66
|
inputTokens: payload.inputTokens,
|
|
64
67
|
peakInputTokens: payload.peakInputTokens,
|
|
65
|
-
|
|
68
|
+
..."number" == typeof payload.thresholdTokens ? {
|
|
69
|
+
thresholdTokens: payload.thresholdTokens
|
|
70
|
+
} : {},
|
|
66
71
|
timestamp: new Date().toISOString()
|
|
67
72
|
});
|
|
68
73
|
}
|