@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.
Files changed (311) hide show
  1. package/dist/agent/config/agentConfig.cjs +4 -0
  2. package/dist/agent/config/agentConfig.d.ts +12 -0
  3. package/dist/agent/config/agentConfig.js +4 -0
  4. package/dist/agent/config/toolRegistry.cjs +75 -1
  5. package/dist/agent/config/toolRegistry.d.ts +3 -0
  6. package/dist/agent/config/toolRegistry.js +75 -1
  7. package/dist/agent/middleware/large-tool-results.cjs +207 -0
  8. package/dist/agent/middleware/large-tool-results.d.ts +16 -0
  9. package/dist/agent/middleware/large-tool-results.js +173 -0
  10. package/dist/agent/tools/browser_control.cjs +9 -1231
  11. package/dist/agent/tools/browser_control.d.ts +126 -234
  12. package/dist/agent/tools/browser_control.js +7 -1226
  13. package/dist/agent/tools/browser_runtime.cjs +1189 -0
  14. package/dist/agent/tools/browser_runtime.d.ts +560 -0
  15. package/dist/agent/tools/browser_runtime.js +1122 -0
  16. package/dist/agent/tools/browser_session.cjs +153 -0
  17. package/dist/agent/tools/browser_session.d.ts +741 -0
  18. package/dist/agent/tools/browser_session.js +110 -0
  19. package/dist/agent/tools/browser_session_manager.cjs +202 -0
  20. package/dist/agent/tools/browser_session_manager.d.ts +64 -0
  21. package/dist/agent/tools/browser_session_manager.js +165 -0
  22. package/dist/cli/commands/init.cjs +5 -1
  23. package/dist/cli/commands/init.js +5 -1
  24. package/dist/cli/config/loader.cjs +0 -5
  25. package/dist/cli/config/loader.js +0 -5
  26. package/dist/cli/config/schema.cjs +3 -7
  27. package/dist/cli/config/schema.d.ts +6 -6
  28. package/dist/cli/config/schema.js +3 -7
  29. package/dist/cli/core/agentInvoker.cjs +86 -22
  30. package/dist/cli/core/agentInvoker.d.ts +10 -3
  31. package/dist/cli/core/agentInvoker.js +86 -25
  32. package/dist/cli/core/outputManager.cjs +7 -2
  33. package/dist/cli/core/outputManager.d.ts +2 -2
  34. package/dist/cli/core/outputManager.js +7 -2
  35. package/dist/cli/types.d.ts +2 -1
  36. package/dist/webui/assets/index-XrEnkZiq.css +11 -0
  37. package/dist/webui/assets/index-mDs6HbKM.js +215 -0
  38. package/dist/webui/index.html +2 -2
  39. package/package.json +10 -10
  40. package/templates/agents/README.md +2 -1
  41. package/templates/agents/coding/agent.md +6 -13
  42. package/templates/agents/coding-v2/agent.md +6 -1
  43. package/templates/agents/game-dev/agent.md +8 -2
  44. package/templates/agents/game-dev/game-designer.md +4 -0
  45. package/templates/agents/game-dev/scene-engineer.md +4 -0
  46. package/templates/agents/main/agent.md +5 -0
  47. package/templates/agents/researcher/agent.md +11 -0
  48. package/templates/agents/stock-trader/agent.md +4 -0
  49. package/dist/agent/tests/agentConfig.test.cjs +0 -224
  50. package/dist/agent/tests/agentConfig.test.d.ts +0 -1
  51. package/dist/agent/tests/agentConfig.test.js +0 -218
  52. package/dist/agent/tests/agentLoader.test.cjs +0 -335
  53. package/dist/agent/tests/agentLoader.test.d.ts +0 -1
  54. package/dist/agent/tests/agentLoader.test.js +0 -329
  55. package/dist/agent/tests/backgroundTerminal.test.cjs +0 -70
  56. package/dist/agent/tests/backgroundTerminal.test.d.ts +0 -1
  57. package/dist/agent/tests/backgroundTerminal.test.js +0 -64
  58. package/dist/agent/tests/browserControlHelpers.test.cjs +0 -35
  59. package/dist/agent/tests/browserControlHelpers.test.d.ts +0 -1
  60. package/dist/agent/tests/browserControlHelpers.test.js +0 -29
  61. package/dist/agent/tests/browserControlTool.test.cjs +0 -2117
  62. package/dist/agent/tests/browserControlTool.test.d.ts +0 -1
  63. package/dist/agent/tests/browserControlTool.test.js +0 -2111
  64. package/dist/agent/tests/commandExecuteTool.test.cjs +0 -29
  65. package/dist/agent/tests/commandExecuteTool.test.d.ts +0 -1
  66. package/dist/agent/tests/commandExecuteTool.test.js +0 -23
  67. package/dist/agent/tests/internet_search.test.cjs +0 -107
  68. package/dist/agent/tests/internet_search.test.d.ts +0 -1
  69. package/dist/agent/tests/internet_search.test.js +0 -101
  70. package/dist/agent/tests/mcpClientManager.test.cjs +0 -290
  71. package/dist/agent/tests/mcpClientManager.test.d.ts +0 -1
  72. package/dist/agent/tests/mcpClientManager.test.js +0 -284
  73. package/dist/agent/tests/mcpResourceTools.test.cjs +0 -101
  74. package/dist/agent/tests/mcpResourceTools.test.d.ts +0 -1
  75. package/dist/agent/tests/mcpResourceTools.test.js +0 -95
  76. package/dist/agent/tests/modelFactory.test.cjs +0 -190
  77. package/dist/agent/tests/modelFactory.test.d.ts +0 -1
  78. package/dist/agent/tests/modelFactory.test.js +0 -184
  79. package/dist/agent/tests/terminalSessionManager.test.cjs +0 -121
  80. package/dist/agent/tests/terminalSessionManager.test.d.ts +0 -1
  81. package/dist/agent/tests/terminalSessionManager.test.js +0 -115
  82. package/dist/agent/tests/test-agent-loader.cjs +0 -33
  83. package/dist/agent/tests/test-agent-loader.d.ts +0 -1
  84. package/dist/agent/tests/test-agent-loader.js +0 -27
  85. package/dist/agent/tests/test-subagent-loading.cjs +0 -99
  86. package/dist/agent/tests/test-subagent-loading.d.ts +0 -1
  87. package/dist/agent/tests/test-subagent-loading.js +0 -93
  88. package/dist/agent/tests/toolRegistry.test.cjs +0 -147
  89. package/dist/agent/tests/toolRegistry.test.d.ts +0 -1
  90. package/dist/agent/tests/toolRegistry.test.js +0 -141
  91. package/dist/agent/tests/uiRegistryTools.test.cjs +0 -114
  92. package/dist/agent/tests/uiRegistryTools.test.d.ts +0 -1
  93. package/dist/agent/tests/uiRegistryTools.test.js +0 -105
  94. package/dist/agent/tests/xaiImageModel.test.cjs +0 -194
  95. package/dist/agent/tests/xaiImageModel.test.d.ts +0 -1
  96. package/dist/agent/tests/xaiImageModel.test.js +0 -188
  97. package/dist/tests/additionalMessageMiddleware.test.cjs +0 -216
  98. package/dist/tests/additionalMessageMiddleware.test.d.ts +0 -1
  99. package/dist/tests/additionalMessageMiddleware.test.js +0 -188
  100. package/dist/tests/agent-config-voice.test.cjs +0 -25
  101. package/dist/tests/agent-config-voice.test.d.ts +0 -1
  102. package/dist/tests/agent-config-voice.test.js +0 -19
  103. package/dist/tests/agentInvokerAttachments.test.cjs +0 -190
  104. package/dist/tests/agentInvokerAttachments.test.d.ts +0 -1
  105. package/dist/tests/agentInvokerAttachments.test.js +0 -184
  106. package/dist/tests/agentInvokerSummarization.test.cjs +0 -613
  107. package/dist/tests/agentInvokerSummarization.test.d.ts +0 -1
  108. package/dist/tests/agentInvokerSummarization.test.js +0 -607
  109. package/dist/tests/agentInvokerTokenUsage.test.cjs +0 -124
  110. package/dist/tests/agentInvokerTokenUsage.test.d.ts +0 -1
  111. package/dist/tests/agentInvokerTokenUsage.test.js +0 -118
  112. package/dist/tests/agentInvokerWorkdir.test.cjs +0 -150
  113. package/dist/tests/agentInvokerWorkdir.test.d.ts +0 -1
  114. package/dist/tests/agentInvokerWorkdir.test.js +0 -122
  115. package/dist/tests/agents-api.test.cjs +0 -324
  116. package/dist/tests/agents-api.test.d.ts +0 -1
  117. package/dist/tests/agents-api.test.js +0 -318
  118. package/dist/tests/attachments-utils.test.cjs +0 -46
  119. package/dist/tests/attachments-utils.test.d.ts +0 -1
  120. package/dist/tests/attachments-utils.test.js +0 -40
  121. package/dist/tests/browser-command.test.cjs +0 -264
  122. package/dist/tests/browser-command.test.d.ts +0 -1
  123. package/dist/tests/browser-command.test.js +0 -258
  124. package/dist/tests/browser-relay-server.test.cjs +0 -20
  125. package/dist/tests/browser-relay-server.test.d.ts +0 -1
  126. package/dist/tests/browser-relay-server.test.js +0 -14
  127. package/dist/tests/bunSqliteAdapter.test.cjs +0 -265
  128. package/dist/tests/bunSqliteAdapter.test.d.ts +0 -1
  129. package/dist/tests/bunSqliteAdapter.test.js +0 -259
  130. package/dist/tests/candleRange.test.cjs +0 -48
  131. package/dist/tests/candleRange.test.d.ts +0 -1
  132. package/dist/tests/candleRange.test.js +0 -42
  133. package/dist/tests/cli-config-loader.test.cjs +0 -532
  134. package/dist/tests/cli-config-loader.test.d.ts +0 -1
  135. package/dist/tests/cli-config-loader.test.js +0 -526
  136. package/dist/tests/cli-config-warnings.test.cjs +0 -94
  137. package/dist/tests/cli-config-warnings.test.d.ts +0 -1
  138. package/dist/tests/cli-config-warnings.test.js +0 -88
  139. package/dist/tests/cli-init.test.cjs +0 -225
  140. package/dist/tests/cli-init.test.d.ts +0 -1
  141. package/dist/tests/cli-init.test.js +0 -219
  142. package/dist/tests/cli-workspace-root.test.cjs +0 -114
  143. package/dist/tests/cli-workspace-root.test.d.ts +0 -1
  144. package/dist/tests/cli-workspace-root.test.js +0 -108
  145. package/dist/tests/codex-credentials-precedence.test.cjs +0 -94
  146. package/dist/tests/codex-credentials-precedence.test.d.ts +0 -1
  147. package/dist/tests/codex-credentials-precedence.test.js +0 -88
  148. package/dist/tests/codex-provider.test.cjs +0 -383
  149. package/dist/tests/codex-provider.test.d.ts +0 -1
  150. package/dist/tests/codex-provider.test.js +0 -377
  151. package/dist/tests/config-json-schema.test.cjs +0 -37
  152. package/dist/tests/config-json-schema.test.d.ts +0 -1
  153. package/dist/tests/config-json-schema.test.js +0 -31
  154. package/dist/tests/discord-adapter.test.cjs +0 -89
  155. package/dist/tests/discord-adapter.test.d.ts +0 -1
  156. package/dist/tests/discord-adapter.test.js +0 -83
  157. package/dist/tests/falRuntime.test.cjs +0 -78
  158. package/dist/tests/falRuntime.test.d.ts +0 -1
  159. package/dist/tests/falRuntime.test.js +0 -72
  160. package/dist/tests/falSummary.test.cjs +0 -51
  161. package/dist/tests/falSummary.test.d.ts +0 -1
  162. package/dist/tests/falSummary.test.js +0 -45
  163. package/dist/tests/fs-api.test.cjs +0 -138
  164. package/dist/tests/fs-api.test.d.ts +0 -1
  165. package/dist/tests/fs-api.test.js +0 -132
  166. package/dist/tests/gateway-command-workspace.test.cjs +0 -150
  167. package/dist/tests/gateway-command-workspace.test.d.ts +0 -1
  168. package/dist/tests/gateway-command-workspace.test.js +0 -144
  169. package/dist/tests/gateway-http-security.test.cjs +0 -318
  170. package/dist/tests/gateway-http-security.test.d.ts +0 -1
  171. package/dist/tests/gateway-http-security.test.js +0 -312
  172. package/dist/tests/gateway-node-mode.test.cjs +0 -174
  173. package/dist/tests/gateway-node-mode.test.d.ts +0 -1
  174. package/dist/tests/gateway-node-mode.test.js +0 -168
  175. package/dist/tests/gateway-origin-policy.test.cjs +0 -82
  176. package/dist/tests/gateway-origin-policy.test.d.ts +0 -1
  177. package/dist/tests/gateway-origin-policy.test.js +0 -76
  178. package/dist/tests/gateway-request-execution-overrides.test.cjs +0 -42
  179. package/dist/tests/gateway-request-execution-overrides.test.d.ts +0 -1
  180. package/dist/tests/gateway-request-execution-overrides.test.js +0 -36
  181. package/dist/tests/gateway.test.cjs +0 -700
  182. package/dist/tests/gateway.test.d.ts +0 -1
  183. package/dist/tests/gateway.test.js +0 -694
  184. package/dist/tests/hooks-matcher.test.cjs +0 -309
  185. package/dist/tests/hooks-matcher.test.d.ts +0 -1
  186. package/dist/tests/hooks-matcher.test.js +0 -303
  187. package/dist/tests/hooks-merger.test.cjs +0 -528
  188. package/dist/tests/hooks-merger.test.d.ts +0 -1
  189. package/dist/tests/hooks-merger.test.js +0 -522
  190. package/dist/tests/imagePersistence.test.cjs +0 -169
  191. package/dist/tests/imagePersistence.test.d.ts +0 -1
  192. package/dist/tests/imagePersistence.test.js +0 -163
  193. package/dist/tests/integration/agent-invocation.integration.test.cjs +0 -264
  194. package/dist/tests/integration/agent-invocation.integration.test.d.ts +0 -1
  195. package/dist/tests/integration/agent-invocation.integration.test.js +0 -258
  196. package/dist/tests/integration/finnhub-candles.integration.test.cjs +0 -98
  197. package/dist/tests/integration/finnhub-candles.integration.test.d.ts +0 -1
  198. package/dist/tests/integration/finnhub-candles.integration.test.js +0 -92
  199. package/dist/tests/integration/summarization-e2e.integration.test.cjs +0 -127
  200. package/dist/tests/integration/summarization-e2e.integration.test.d.ts +0 -1
  201. package/dist/tests/integration/summarization-e2e.integration.test.js +0 -121
  202. package/dist/tests/logger.test.cjs +0 -353
  203. package/dist/tests/logger.test.d.ts +0 -1
  204. package/dist/tests/logger.test.js +0 -347
  205. package/dist/tests/mediaCompatibilityMiddleware.test.cjs +0 -106
  206. package/dist/tests/mediaCompatibilityMiddleware.test.d.ts +0 -1
  207. package/dist/tests/mediaCompatibilityMiddleware.test.js +0 -100
  208. package/dist/tests/node-tools.test.cjs +0 -77
  209. package/dist/tests/node-tools.test.d.ts +0 -1
  210. package/dist/tests/node-tools.test.js +0 -71
  211. package/dist/tests/nodes-api.test.cjs +0 -86
  212. package/dist/tests/nodes-api.test.d.ts +0 -1
  213. package/dist/tests/nodes-api.test.js +0 -80
  214. package/dist/tests/outputManagerContextSummarized.test.cjs +0 -43
  215. package/dist/tests/outputManagerContextSummarized.test.d.ts +0 -1
  216. package/dist/tests/outputManagerContextSummarized.test.js +0 -37
  217. package/dist/tests/provider-command-codex.test.cjs +0 -57
  218. package/dist/tests/provider-command-codex.test.d.ts +0 -1
  219. package/dist/tests/provider-command-codex.test.js +0 -51
  220. package/dist/tests/routines-api.test.cjs +0 -107
  221. package/dist/tests/routines-api.test.d.ts +0 -1
  222. package/dist/tests/routines-api.test.js +0 -101
  223. package/dist/tests/run-terminal-bench-official-script.test.cjs +0 -61
  224. package/dist/tests/run-terminal-bench-official-script.test.d.ts +0 -1
  225. package/dist/tests/run-terminal-bench-official-script.test.js +0 -55
  226. package/dist/tests/sessionManager-uionly.test.cjs +0 -50
  227. package/dist/tests/sessionManager-uionly.test.d.ts +0 -1
  228. package/dist/tests/sessionManager-uionly.test.js +0 -44
  229. package/dist/tests/sessionMessageAttachments.test.cjs +0 -197
  230. package/dist/tests/sessionMessageAttachments.test.d.ts +0 -1
  231. package/dist/tests/sessionMessageAttachments.test.js +0 -191
  232. package/dist/tests/sessionMessageRole.test.cjs +0 -44
  233. package/dist/tests/sessionMessageRole.test.d.ts +0 -1
  234. package/dist/tests/sessionMessageRole.test.js +0 -38
  235. package/dist/tests/sessionStateMessages.test.cjs +0 -236
  236. package/dist/tests/sessionStateMessages.test.d.ts +0 -1
  237. package/dist/tests/sessionStateMessages.test.js +0 -230
  238. package/dist/tests/sessions-api.test.cjs +0 -250
  239. package/dist/tests/sessions-api.test.d.ts +0 -1
  240. package/dist/tests/sessions-api.test.js +0 -244
  241. package/dist/tests/skill-activation.test.cjs +0 -86
  242. package/dist/tests/skill-activation.test.d.ts +0 -1
  243. package/dist/tests/skill-activation.test.js +0 -80
  244. package/dist/tests/skill-metadata.test.cjs +0 -119
  245. package/dist/tests/skill-metadata.test.d.ts +0 -1
  246. package/dist/tests/skill-metadata.test.js +0 -113
  247. package/dist/tests/skill-repository.test.cjs +0 -469
  248. package/dist/tests/skill-repository.test.d.ts +0 -1
  249. package/dist/tests/skill-repository.test.js +0 -463
  250. package/dist/tests/skill-security-scanner.test.cjs +0 -126
  251. package/dist/tests/skill-security-scanner.test.d.ts +0 -1
  252. package/dist/tests/skill-security-scanner.test.js +0 -120
  253. package/dist/tests/sms-api.test.cjs +0 -183
  254. package/dist/tests/sms-api.test.d.ts +0 -1
  255. package/dist/tests/sms-api.test.js +0 -177
  256. package/dist/tests/sms-commands.test.cjs +0 -90
  257. package/dist/tests/sms-commands.test.d.ts +0 -1
  258. package/dist/tests/sms-commands.test.js +0 -84
  259. package/dist/tests/sms-policy-store.test.cjs +0 -69
  260. package/dist/tests/sms-policy-store.test.d.ts +0 -1
  261. package/dist/tests/sms-policy-store.test.js +0 -63
  262. package/dist/tests/teams-adapter.test.cjs +0 -58
  263. package/dist/tests/teams-adapter.test.d.ts +0 -1
  264. package/dist/tests/teams-adapter.test.js +0 -52
  265. package/dist/tests/technicalIndicators.test.cjs +0 -82
  266. package/dist/tests/technicalIndicators.test.d.ts +0 -1
  267. package/dist/tests/technicalIndicators.test.js +0 -76
  268. package/dist/tests/terminal-bench-adapters-helpers.test.cjs +0 -64
  269. package/dist/tests/terminal-bench-adapters-helpers.test.d.ts +0 -1
  270. package/dist/tests/terminal-bench-adapters-helpers.test.js +0 -58
  271. package/dist/tests/terminal-bench-cleanup.test.cjs +0 -93
  272. package/dist/tests/terminal-bench-cleanup.test.d.ts +0 -1
  273. package/dist/tests/terminal-bench-cleanup.test.js +0 -87
  274. package/dist/tests/terminal-bench-config.test.cjs +0 -62
  275. package/dist/tests/terminal-bench-config.test.d.ts +0 -1
  276. package/dist/tests/terminal-bench-config.test.js +0 -56
  277. package/dist/tests/terminal-bench-official.test.cjs +0 -194
  278. package/dist/tests/terminal-bench-official.test.d.ts +0 -1
  279. package/dist/tests/terminal-bench-official.test.js +0 -188
  280. package/dist/tests/terminal-bench-runner.test.cjs +0 -82
  281. package/dist/tests/terminal-bench-runner.test.d.ts +0 -1
  282. package/dist/tests/terminal-bench-runner.test.js +0 -76
  283. package/dist/tests/terminal-bench-scoring.test.cjs +0 -128
  284. package/dist/tests/terminal-bench-scoring.test.d.ts +0 -1
  285. package/dist/tests/terminal-bench-scoring.test.js +0 -122
  286. package/dist/tests/terminalProbe.test.cjs +0 -45
  287. package/dist/tests/terminalProbe.test.d.ts +0 -1
  288. package/dist/tests/terminalProbe.test.js +0 -39
  289. package/dist/tests/terminalProbeAuth.test.cjs +0 -85
  290. package/dist/tests/terminalProbeAuth.test.d.ts +0 -1
  291. package/dist/tests/terminalProbeAuth.test.js +0 -79
  292. package/dist/tests/toolDisplayHelpers.test.cjs +0 -46
  293. package/dist/tests/toolDisplayHelpers.test.d.ts +0 -1
  294. package/dist/tests/toolDisplayHelpers.test.js +0 -40
  295. package/dist/tests/uv.test.cjs +0 -47
  296. package/dist/tests/uv.test.d.ts +0 -1
  297. package/dist/tests/uv.test.js +0 -41
  298. package/dist/tests/voice-config.test.cjs +0 -35
  299. package/dist/tests/voice-config.test.d.ts +0 -1
  300. package/dist/tests/voice-config.test.js +0 -29
  301. package/dist/tests/websocket-transport.test.cjs +0 -31
  302. package/dist/tests/websocket-transport.test.d.ts +0 -1
  303. package/dist/tests/websocket-transport.test.js +0 -25
  304. package/dist/tests/yahooCandles.test.cjs +0 -111
  305. package/dist/tests/yahooCandles.test.d.ts +0 -1
  306. package/dist/tests/yahooCandles.test.js +0 -105
  307. package/dist/tools/finance/optionsAnalytics.test.cjs +0 -128
  308. package/dist/tools/finance/optionsAnalytics.test.d.ts +0 -1
  309. package/dist/tools/finance/optionsAnalytics.test.js +0 -122
  310. package/dist/webui/assets/index-BMf95nv5.js +0 -215
  311. 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().default(12000).describe("Token threshold before summarizing conversation history"),
105
- messagesToKeep: number().min(2).max(100).optional().default(8).describe("How many most recent messages to keep after summarization")
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().default({
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 (!config.summarization?.enabled) return null;
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
- maxTokensBeforeSummary: config.summarization.maxTokensBeforeSummary,
132
- messagesToKeep: config.summarization.messagesToKeep
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
- middleware[index] = (0, external_langchain_namespaceObject.summarizationMiddleware)({
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
- trigger: {
177
- tokens: settings.maxTokensBeforeSummary
178
- },
179
- keep: {
180
- messages: settings.messagesToKeep
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: ()=>new external_deepagents_namespaceObject.CompositeBackend(new external_deepagents_namespaceObject.FilesystemBackend({
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: summarizationSettings.maxTokensBeforeSummary
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 result;
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
- maxTokensBeforeSummary: number;
97
- messagesToKeep: number;
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 { modelRetryMiddleware, summarizationMiddleware, toolRetryMiddleware } from "langchain";
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 (!config.summarization?.enabled) return null;
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
- maxTokensBeforeSummary: config.summarization.maxTokensBeforeSummary,
75
- messagesToKeep: config.summarization.messagesToKeep
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
- middleware[index] = summarizationMiddleware({
133
+ if ("default" === settings.mode) return;
134
+ if (!backend) return;
135
+ middleware[index] = createSummarizationMiddleware({
118
136
  model: model || DEFAULT_DEEPAGENT_MODEL,
119
- trigger: {
120
- tokens: settings.maxTokensBeforeSummary
121
- },
122
- keep: {
123
- messages: settings.messagesToKeep
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: ()=>new CompositeBackend(new FilesystemBackend({
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: summarizationSettings.maxTokensBeforeSummary
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 result;
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
- thresholdTokens: payload.thresholdTokens,
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: number;
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
- thresholdTokens: payload.thresholdTokens,
68
+ ..."number" == typeof payload.thresholdTokens ? {
69
+ thresholdTokens: payload.thresholdTokens
70
+ } : {},
66
71
  timestamp: new Date().toISOString()
67
72
  });
68
73
  }