@google/gemini-cli-core 0.31.0 → 0.33.0-nightly.20260228.1ca5c05d0

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 (323) hide show
  1. package/dist/docs/changelogs/index.md +22 -0
  2. package/dist/docs/changelogs/latest.md +307 -352
  3. package/dist/docs/changelogs/preview.md +391 -293
  4. package/dist/docs/cli/cli-reference.md +12 -12
  5. package/dist/docs/cli/custom-commands.md +9 -0
  6. package/dist/docs/cli/enterprise.md +19 -0
  7. package/dist/docs/cli/model.md +5 -14
  8. package/dist/docs/cli/plan-mode.md +29 -7
  9. package/dist/docs/cli/sandbox.md +42 -2
  10. package/dist/docs/cli/settings.md +15 -6
  11. package/dist/docs/cli/telemetry.md +68 -11
  12. package/dist/docs/cli/tutorials/automation.md +101 -5
  13. package/dist/docs/cli/tutorials/mcp-setup.md +8 -0
  14. package/dist/docs/cli/tutorials/skills-getting-started.md +8 -0
  15. package/dist/docs/extensions/reference.md +36 -0
  16. package/dist/docs/extensions/writing-extensions.md +16 -0
  17. package/dist/docs/get-started/authentication.md +86 -5
  18. package/dist/docs/get-started/installation.md +2 -2
  19. package/dist/docs/hooks/best-practices.md +33 -1
  20. package/dist/docs/hooks/writing-hooks.md +24 -0
  21. package/dist/docs/ide-integration/index.md +8 -0
  22. package/dist/docs/local-development.md +49 -43
  23. package/dist/docs/reference/configuration.md +48 -7
  24. package/dist/docs/reference/keyboard-shortcuts.md +6 -6
  25. package/dist/docs/reference/policy-engine.md +14 -3
  26. package/dist/docs/resources/faq.md +21 -0
  27. package/dist/docs/resources/tos-privacy.md +6 -0
  28. package/dist/docs/resources/troubleshooting.md +4 -1
  29. package/dist/docs/resources/uninstall.md +1 -10
  30. package/dist/docs/tools/mcp-server.md +22 -0
  31. package/dist/google-gemini-cli-core-0.33.0-nightly.20260227.08ee13613.tgz +0 -0
  32. package/dist/src/agents/a2a-client-manager.d.ts +7 -6
  33. package/dist/src/agents/a2a-client-manager.js +8 -9
  34. package/dist/src/agents/a2a-client-manager.js.map +1 -1
  35. package/dist/src/agents/a2a-client-manager.test.js +45 -31
  36. package/dist/src/agents/a2a-client-manager.test.js.map +1 -1
  37. package/dist/src/agents/a2aUtils.d.ts +25 -7
  38. package/dist/src/agents/a2aUtils.js +165 -58
  39. package/dist/src/agents/a2aUtils.js.map +1 -1
  40. package/dist/src/agents/a2aUtils.test.js +170 -27
  41. package/dist/src/agents/a2aUtils.test.js.map +1 -1
  42. package/dist/src/agents/generalist-agent.js +1 -2
  43. package/dist/src/agents/generalist-agent.js.map +1 -1
  44. package/dist/src/agents/registry.test.js +4 -2
  45. package/dist/src/agents/registry.test.js.map +1 -1
  46. package/dist/src/agents/remote-invocation.d.ts +2 -1
  47. package/dist/src/agents/remote-invocation.js +41 -22
  48. package/dist/src/agents/remote-invocation.js.map +1 -1
  49. package/dist/src/agents/remote-invocation.test.js +196 -56
  50. package/dist/src/agents/remote-invocation.test.js.map +1 -1
  51. package/dist/src/agents/subagent-tool-wrapper.js +1 -1
  52. package/dist/src/agents/subagent-tool-wrapper.test.js +1 -1
  53. package/dist/src/agents/subagent-tool.js +15 -2
  54. package/dist/src/agents/subagent-tool.js.map +1 -1
  55. package/dist/src/agents/subagent-tool.test.js +31 -0
  56. package/dist/src/agents/subagent-tool.test.js.map +1 -1
  57. package/dist/src/billing/billing.d.ts +80 -0
  58. package/dist/src/billing/billing.js +127 -0
  59. package/dist/src/billing/billing.js.map +1 -0
  60. package/dist/src/billing/billing.test.d.ts +6 -0
  61. package/dist/src/billing/billing.test.js +182 -0
  62. package/dist/src/billing/billing.test.js.map +1 -0
  63. package/dist/src/billing/index.d.ts +6 -0
  64. package/dist/src/billing/index.js +7 -0
  65. package/dist/src/billing/index.js.map +1 -0
  66. package/dist/src/code_assist/codeAssist.js +1 -1
  67. package/dist/src/code_assist/codeAssist.js.map +1 -1
  68. package/dist/src/code_assist/codeAssist.test.js +2 -2
  69. package/dist/src/code_assist/codeAssist.test.js.map +1 -1
  70. package/dist/src/code_assist/converter.d.ts +9 -4
  71. package/dist/src/code_assist/converter.js +17 -2
  72. package/dist/src/code_assist/converter.js.map +1 -1
  73. package/dist/src/code_assist/converter.test.js.map +1 -1
  74. package/dist/src/code_assist/oauth2.js +6 -3
  75. package/dist/src/code_assist/oauth2.js.map +1 -1
  76. package/dist/src/code_assist/oauth2.test.js +1 -0
  77. package/dist/src/code_assist/oauth2.test.js.map +1 -1
  78. package/dist/src/code_assist/server.d.ts +9 -4
  79. package/dist/src/code_assist/server.js +86 -5
  80. package/dist/src/code_assist/server.js.map +1 -1
  81. package/dist/src/code_assist/server.test.js +11 -0
  82. package/dist/src/code_assist/server.test.js.map +1 -1
  83. package/dist/src/code_assist/setup.d.ts +2 -1
  84. package/dist/src/code_assist/setup.js +15 -4
  85. package/dist/src/code_assist/setup.js.map +1 -1
  86. package/dist/src/code_assist/types.d.ts +33 -10
  87. package/dist/src/code_assist/types.js.map +1 -1
  88. package/dist/src/config/config.d.ts +50 -4
  89. package/dist/src/config/config.js +77 -3
  90. package/dist/src/config/config.js.map +1 -1
  91. package/dist/src/config/config.test.js +151 -1
  92. package/dist/src/config/config.test.js.map +1 -1
  93. package/dist/src/config/storage.d.ts +1 -0
  94. package/dist/src/config/storage.js +3 -0
  95. package/dist/src/config/storage.js.map +1 -1
  96. package/dist/src/core/contentGenerator.d.ts +3 -2
  97. package/dist/src/core/contentGenerator.js +9 -2
  98. package/dist/src/core/contentGenerator.js.map +1 -1
  99. package/dist/src/core/coreToolScheduler.js +2 -1
  100. package/dist/src/core/coreToolScheduler.js.map +1 -1
  101. package/dist/src/core/coreToolScheduler.test.js +21 -2
  102. package/dist/src/core/coreToolScheduler.test.js.map +1 -1
  103. package/dist/src/core/fakeContentGenerator.d.ts +2 -1
  104. package/dist/src/core/fakeContentGenerator.js +1 -0
  105. package/dist/src/core/fakeContentGenerator.js.map +1 -1
  106. package/dist/src/core/geminiChat.js +6 -2
  107. package/dist/src/core/geminiChat.js.map +1 -1
  108. package/dist/src/core/geminiChat.test.js +34 -0
  109. package/dist/src/core/geminiChat.test.js.map +1 -1
  110. package/dist/src/core/localLiteRtLmClient.d.ts +24 -0
  111. package/dist/src/core/localLiteRtLmClient.js +77 -0
  112. package/dist/src/core/localLiteRtLmClient.js.map +1 -0
  113. package/dist/src/core/localLiteRtLmClient.test.d.ts +6 -0
  114. package/dist/src/core/localLiteRtLmClient.test.js +87 -0
  115. package/dist/src/core/localLiteRtLmClient.test.js.map +1 -0
  116. package/dist/src/core/loggingContentGenerator.d.ts +3 -1
  117. package/dist/src/core/loggingContentGenerator.js +65 -17
  118. package/dist/src/core/loggingContentGenerator.js.map +1 -1
  119. package/dist/src/core/loggingContentGenerator.test.js +164 -5
  120. package/dist/src/core/loggingContentGenerator.test.js.map +1 -1
  121. package/dist/src/core/prompts.test.js +1 -1
  122. package/dist/src/core/prompts.test.js.map +1 -1
  123. package/dist/src/fallback/handler.js +2 -0
  124. package/dist/src/fallback/handler.js.map +1 -1
  125. package/dist/src/fallback/types.d.ts +1 -1
  126. package/dist/src/generated/git-commit.d.ts +2 -2
  127. package/dist/src/generated/git-commit.js +2 -2
  128. package/dist/src/generated/git-commit.js.map +1 -1
  129. package/dist/src/index.d.ts +5 -0
  130. package/dist/src/index.js +5 -0
  131. package/dist/src/index.js.map +1 -1
  132. package/dist/src/policy/config.d.ts +18 -6
  133. package/dist/src/policy/config.js +50 -12
  134. package/dist/src/policy/config.js.map +1 -1
  135. package/dist/src/policy/config.test.js +26 -26
  136. package/dist/src/policy/config.test.js.map +1 -1
  137. package/dist/src/policy/policies/plan.toml +1 -1
  138. package/dist/src/policy/policy-engine.d.ts +8 -0
  139. package/dist/src/policy/policy-engine.js +12 -0
  140. package/dist/src/policy/policy-engine.js.map +1 -1
  141. package/dist/src/policy/policy-engine.test.js +93 -0
  142. package/dist/src/policy/policy-engine.test.js.map +1 -1
  143. package/dist/src/policy/toml-loader.d.ts +1 -1
  144. package/dist/src/policy/toml-loader.js +4 -2
  145. package/dist/src/policy/toml-loader.js.map +1 -1
  146. package/dist/src/policy/toml-loader.test.js +15 -12
  147. package/dist/src/policy/toml-loader.test.js.map +1 -1
  148. package/dist/src/policy/workspace-policy.test.js +10 -10
  149. package/dist/src/prompts/snippets.js +43 -27
  150. package/dist/src/prompts/snippets.js.map +1 -1
  151. package/dist/src/routing/modelRouterService.js +19 -11
  152. package/dist/src/routing/modelRouterService.js.map +1 -1
  153. package/dist/src/routing/modelRouterService.test.js +38 -1
  154. package/dist/src/routing/modelRouterService.test.js.map +1 -1
  155. package/dist/src/routing/routingStrategy.d.ts +3 -2
  156. package/dist/src/routing/strategies/classifierStrategy.d.ts +2 -1
  157. package/dist/src/routing/strategies/classifierStrategy.js +1 -1
  158. package/dist/src/routing/strategies/classifierStrategy.js.map +1 -1
  159. package/dist/src/routing/strategies/classifierStrategy.test.js +15 -13
  160. package/dist/src/routing/strategies/classifierStrategy.test.js.map +1 -1
  161. package/dist/src/routing/strategies/compositeStrategy.d.ts +2 -1
  162. package/dist/src/routing/strategies/compositeStrategy.js +3 -3
  163. package/dist/src/routing/strategies/compositeStrategy.js.map +1 -1
  164. package/dist/src/routing/strategies/compositeStrategy.test.js +10 -8
  165. package/dist/src/routing/strategies/compositeStrategy.test.js.map +1 -1
  166. package/dist/src/routing/strategies/defaultStrategy.d.ts +2 -1
  167. package/dist/src/routing/strategies/defaultStrategy.js +1 -1
  168. package/dist/src/routing/strategies/defaultStrategy.js.map +1 -1
  169. package/dist/src/routing/strategies/defaultStrategy.test.js +8 -4
  170. package/dist/src/routing/strategies/defaultStrategy.test.js.map +1 -1
  171. package/dist/src/routing/strategies/fallbackStrategy.d.ts +2 -1
  172. package/dist/src/routing/strategies/fallbackStrategy.js +1 -1
  173. package/dist/src/routing/strategies/fallbackStrategy.js.map +1 -1
  174. package/dist/src/routing/strategies/fallbackStrategy.test.js +6 -5
  175. package/dist/src/routing/strategies/fallbackStrategy.test.js.map +1 -1
  176. package/dist/src/routing/strategies/gemmaClassifierStrategy.d.ts +14 -0
  177. package/dist/src/routing/strategies/gemmaClassifierStrategy.js +182 -0
  178. package/dist/src/routing/strategies/gemmaClassifierStrategy.js.map +1 -0
  179. package/dist/src/routing/strategies/gemmaClassifierStrategy.test.d.ts +6 -0
  180. package/dist/src/routing/strategies/gemmaClassifierStrategy.test.js +218 -0
  181. package/dist/src/routing/strategies/gemmaClassifierStrategy.test.js.map +1 -0
  182. package/dist/src/routing/strategies/numericalClassifierStrategy.d.ts +2 -1
  183. package/dist/src/routing/strategies/numericalClassifierStrategy.js +1 -1
  184. package/dist/src/routing/strategies/numericalClassifierStrategy.js.map +1 -1
  185. package/dist/src/routing/strategies/numericalClassifierStrategy.test.js +24 -22
  186. package/dist/src/routing/strategies/numericalClassifierStrategy.test.js.map +1 -1
  187. package/dist/src/routing/strategies/overrideStrategy.d.ts +2 -1
  188. package/dist/src/routing/strategies/overrideStrategy.js +1 -1
  189. package/dist/src/routing/strategies/overrideStrategy.js.map +1 -1
  190. package/dist/src/routing/strategies/overrideStrategy.test.js +5 -4
  191. package/dist/src/routing/strategies/overrideStrategy.test.js.map +1 -1
  192. package/dist/src/scheduler/scheduler.d.ts +1 -0
  193. package/dist/src/scheduler/scheduler.js +18 -7
  194. package/dist/src/scheduler/scheduler.js.map +1 -1
  195. package/dist/src/scheduler/scheduler.test.js +19 -1
  196. package/dist/src/scheduler/scheduler.test.js.map +1 -1
  197. package/dist/src/scheduler/scheduler_parallel.test.js +94 -3
  198. package/dist/src/scheduler/scheduler_parallel.test.js.map +1 -1
  199. package/dist/src/scheduler/tool-executor.js +21 -12
  200. package/dist/src/scheduler/tool-executor.js.map +1 -1
  201. package/dist/src/scheduler/tool-executor.test.js +54 -0
  202. package/dist/src/scheduler/tool-executor.test.js.map +1 -1
  203. package/dist/src/services/trackerService.d.ts +49 -0
  204. package/dist/src/services/trackerService.js +172 -0
  205. package/dist/src/services/trackerService.js.map +1 -0
  206. package/dist/src/services/trackerService.test.d.ts +6 -0
  207. package/dist/src/services/trackerService.test.js +117 -0
  208. package/dist/src/services/trackerService.test.js.map +1 -0
  209. package/dist/src/services/trackerTypes.d.ts +51 -0
  210. package/dist/src/services/trackerTypes.js +33 -0
  211. package/dist/src/services/trackerTypes.js.map +1 -0
  212. package/dist/src/telemetry/billingEvents.d.ts +75 -0
  213. package/dist/src/telemetry/billingEvents.js +181 -0
  214. package/dist/src/telemetry/billingEvents.js.map +1 -0
  215. package/dist/src/telemetry/billingEvents.test.d.ts +6 -0
  216. package/dist/src/telemetry/billingEvents.test.js +139 -0
  217. package/dist/src/telemetry/billingEvents.test.js.map +1 -0
  218. package/dist/src/telemetry/conseca-logger.test.js +1 -0
  219. package/dist/src/telemetry/conseca-logger.test.js.map +1 -1
  220. package/dist/src/telemetry/constants.d.ts +25 -0
  221. package/dist/src/telemetry/constants.js +29 -0
  222. package/dist/src/telemetry/constants.js.map +1 -1
  223. package/dist/src/telemetry/index.d.ts +3 -1
  224. package/dist/src/telemetry/index.js +5 -1
  225. package/dist/src/telemetry/index.js.map +1 -1
  226. package/dist/src/telemetry/loggers.d.ts +2 -0
  227. package/dist/src/telemetry/loggers.js +10 -0
  228. package/dist/src/telemetry/loggers.js.map +1 -1
  229. package/dist/src/telemetry/loggers.test.js +16 -0
  230. package/dist/src/telemetry/loggers.test.js.map +1 -1
  231. package/dist/src/telemetry/metrics.d.ts +28 -0
  232. package/dist/src/telemetry/metrics.js +40 -0
  233. package/dist/src/telemetry/metrics.js.map +1 -1
  234. package/dist/src/telemetry/sanitize.test.js +1 -0
  235. package/dist/src/telemetry/sanitize.test.js.map +1 -1
  236. package/dist/src/telemetry/sdk.test.js +1 -0
  237. package/dist/src/telemetry/sdk.test.js.map +1 -1
  238. package/dist/src/telemetry/telemetryAttributes.js +2 -0
  239. package/dist/src/telemetry/telemetryAttributes.js.map +1 -1
  240. package/dist/src/telemetry/trace.d.ts +2 -1
  241. package/dist/src/telemetry/trace.js +13 -18
  242. package/dist/src/telemetry/trace.js.map +1 -1
  243. package/dist/src/telemetry/trace.test.d.ts +6 -0
  244. package/dist/src/telemetry/trace.test.js +116 -0
  245. package/dist/src/telemetry/trace.test.js.map +1 -0
  246. package/dist/src/tools/confirmation-policy.test.js +1 -0
  247. package/dist/src/tools/confirmation-policy.test.js.map +1 -1
  248. package/dist/src/tools/definitions/model-family-sets/default-legacy.js +2 -2
  249. package/dist/src/tools/definitions/model-family-sets/default-legacy.js.map +1 -1
  250. package/dist/src/tools/definitions/model-family-sets/gemini-3.js +3 -3
  251. package/dist/src/tools/definitions/model-family-sets/gemini-3.js.map +1 -1
  252. package/dist/src/tools/grep-utils.d.ts +1 -1
  253. package/dist/src/tools/grep-utils.js +4 -4
  254. package/dist/src/tools/grep-utils.js.map +1 -1
  255. package/dist/src/tools/grep.d.ts +1 -1
  256. package/dist/src/tools/grep.js +9 -9
  257. package/dist/src/tools/grep.js.map +1 -1
  258. package/dist/src/tools/grep.test.js +8 -5
  259. package/dist/src/tools/grep.test.js.map +1 -1
  260. package/dist/src/tools/line-endings.test.js +3 -11
  261. package/dist/src/tools/line-endings.test.js.map +1 -1
  262. package/dist/src/tools/mcp-client-manager.d.ts +25 -0
  263. package/dist/src/tools/mcp-client-manager.js +66 -3
  264. package/dist/src/tools/mcp-client-manager.js.map +1 -1
  265. package/dist/src/tools/mcp-client-manager.test.js +47 -0
  266. package/dist/src/tools/mcp-client-manager.test.js.map +1 -1
  267. package/dist/src/tools/mcp-client.d.ts +20 -9
  268. package/dist/src/tools/mcp-client.js +50 -46
  269. package/dist/src/tools/mcp-client.js.map +1 -1
  270. package/dist/src/tools/mcp-client.test.js +96 -84
  271. package/dist/src/tools/mcp-client.test.js.map +1 -1
  272. package/dist/src/tools/mcp-tool.d.ts +3 -3
  273. package/dist/src/tools/mcp-tool.js +1 -0
  274. package/dist/src/tools/mcp-tool.js.map +1 -1
  275. package/dist/src/tools/ripGrep.d.ts +1 -1
  276. package/dist/src/tools/ripGrep.js +7 -7
  277. package/dist/src/tools/ripGrep.js.map +1 -1
  278. package/dist/src/tools/ripGrep.test.js +10 -7
  279. package/dist/src/tools/ripGrep.test.js.map +1 -1
  280. package/dist/src/tools/tools.d.ts +1 -0
  281. package/dist/src/tools/tools.js +1 -0
  282. package/dist/src/tools/tools.js.map +1 -1
  283. package/dist/src/tools/write-file.js +4 -17
  284. package/dist/src/tools/write-file.js.map +1 -1
  285. package/dist/src/tools/write-file.test.js +29 -83
  286. package/dist/src/tools/write-file.test.js.map +1 -1
  287. package/dist/src/utils/editCorrector.d.ts +1 -42
  288. package/dist/src/utils/editCorrector.js +9 -461
  289. package/dist/src/utils/editCorrector.js.map +1 -1
  290. package/dist/src/utils/editCorrector.test.js +17 -421
  291. package/dist/src/utils/editCorrector.test.js.map +1 -1
  292. package/dist/src/utils/envExpansion.js.map +1 -1
  293. package/dist/src/utils/errors.js +7 -0
  294. package/dist/src/utils/errors.js.map +1 -1
  295. package/dist/src/utils/errors_timeout.test.d.ts +6 -0
  296. package/dist/src/utils/errors_timeout.test.js +40 -0
  297. package/dist/src/utils/errors_timeout.test.js.map +1 -0
  298. package/dist/src/utils/extensionLoader.js +35 -0
  299. package/dist/src/utils/extensionLoader.js.map +1 -1
  300. package/dist/src/utils/extensionLoader.test.js +36 -0
  301. package/dist/src/utils/extensionLoader.test.js.map +1 -1
  302. package/dist/src/utils/fetch.js +13 -2
  303. package/dist/src/utils/fetch.js.map +1 -1
  304. package/dist/src/utils/fileUtils.js +0 -1
  305. package/dist/src/utils/fileUtils.js.map +1 -1
  306. package/dist/src/utils/fileUtils.test.js +0 -1
  307. package/dist/src/utils/fileUtils.test.js.map +1 -1
  308. package/dist/src/utils/flashFallback.test.js +24 -0
  309. package/dist/src/utils/flashFallback.test.js.map +1 -1
  310. package/dist/src/utils/googleErrors.d.ts +2 -2
  311. package/dist/src/utils/googleQuotaErrors.d.ts +3 -1
  312. package/dist/src/utils/googleQuotaErrors.js +22 -12
  313. package/dist/src/utils/googleQuotaErrors.js.map +1 -1
  314. package/dist/src/utils/googleQuotaErrors.test.js +33 -1
  315. package/dist/src/utils/googleQuotaErrors.test.js.map +1 -1
  316. package/dist/src/utils/retry.js +4 -2
  317. package/dist/src/utils/retry.js.map +1 -1
  318. package/dist/src/utils/retry.test.js +20 -0
  319. package/dist/src/utils/retry.test.js.map +1 -1
  320. package/dist/src/utils/schemaValidator.js +0 -1
  321. package/dist/src/utils/schemaValidator.js.map +1 -1
  322. package/dist/tsconfig.tsbuildinfo +1 -1
  323. package/package.json +1 -1
@@ -3,15 +3,142 @@
3
3
  * Copyright 2025 Google LLC
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
+ /**
7
+ * Reassembles incremental A2A streaming updates into a coherent result.
8
+ * Shows sequential status/messages followed by all reassembled artifacts.
9
+ */
10
+ export class A2AResultReassembler {
11
+ messageLog = [];
12
+ artifacts = new Map();
13
+ artifactChunks = new Map();
14
+ /**
15
+ * Processes a new chunk from the A2A stream.
16
+ */
17
+ update(chunk) {
18
+ if (!('kind' in chunk))
19
+ return;
20
+ switch (chunk.kind) {
21
+ case 'status-update':
22
+ this.pushMessage(chunk.status?.message);
23
+ break;
24
+ case 'artifact-update':
25
+ if (chunk.artifact) {
26
+ const id = chunk.artifact.artifactId;
27
+ const existing = this.artifacts.get(id);
28
+ if (chunk.append && existing) {
29
+ for (const part of chunk.artifact.parts) {
30
+ existing.parts.push(structuredClone(part));
31
+ }
32
+ }
33
+ else {
34
+ this.artifacts.set(id, structuredClone(chunk.artifact));
35
+ }
36
+ const newText = extractPartsText(chunk.artifact.parts, '');
37
+ let chunks = this.artifactChunks.get(id);
38
+ if (!chunks) {
39
+ chunks = [];
40
+ this.artifactChunks.set(id, chunks);
41
+ }
42
+ if (chunk.append) {
43
+ chunks.push(newText);
44
+ }
45
+ else {
46
+ chunks.length = 0;
47
+ chunks.push(newText);
48
+ }
49
+ }
50
+ break;
51
+ case 'task':
52
+ this.pushMessage(chunk.status?.message);
53
+ if (chunk.artifacts) {
54
+ for (const art of chunk.artifacts) {
55
+ this.artifacts.set(art.artifactId, structuredClone(art));
56
+ this.artifactChunks.set(art.artifactId, [
57
+ extractPartsText(art.parts, ''),
58
+ ]);
59
+ }
60
+ }
61
+ // History Fallback: Some agent implementations do not populate the
62
+ // status.message in their final terminal response, instead archiving
63
+ // the final answer in the task's history array. To ensure we don't
64
+ // present an empty result, we fallback to the most recent agent message
65
+ // in the history only when the task is terminal and no other content
66
+ // (message log or artifacts) has been reassembled.
67
+ if (isTerminalState(chunk.status?.state) &&
68
+ this.messageLog.length === 0 &&
69
+ this.artifacts.size === 0 &&
70
+ chunk.history &&
71
+ chunk.history.length > 0) {
72
+ const lastAgentMsg = [...chunk.history]
73
+ .reverse()
74
+ .find((m) => m.role?.toLowerCase().includes('agent'));
75
+ if (lastAgentMsg) {
76
+ this.pushMessage(lastAgentMsg);
77
+ }
78
+ }
79
+ break;
80
+ case 'message': {
81
+ this.pushMessage(chunk);
82
+ break;
83
+ }
84
+ default:
85
+ break;
86
+ }
87
+ }
88
+ pushMessage(message) {
89
+ if (!message)
90
+ return;
91
+ const text = extractPartsText(message.parts, '\n');
92
+ if (text && this.messageLog[this.messageLog.length - 1] !== text) {
93
+ this.messageLog.push(text);
94
+ }
95
+ }
96
+ /**
97
+ * Returns a human-readable string representation of the current reassembled state.
98
+ */
99
+ toString() {
100
+ const joinedMessages = this.messageLog.join('\n\n');
101
+ const artifactsOutput = Array.from(this.artifacts.keys())
102
+ .map((id) => {
103
+ const chunks = this.artifactChunks.get(id);
104
+ const artifact = this.artifacts.get(id);
105
+ if (!chunks || !artifact)
106
+ return '';
107
+ const content = chunks.join('');
108
+ const header = artifact.name
109
+ ? `Artifact (${artifact.name}):`
110
+ : 'Artifact:';
111
+ return `${header}\n${content}`;
112
+ })
113
+ .filter(Boolean)
114
+ .join('\n\n');
115
+ if (joinedMessages && artifactsOutput) {
116
+ return `${joinedMessages}\n\n${artifactsOutput}`;
117
+ }
118
+ return joinedMessages || artifactsOutput;
119
+ }
120
+ }
6
121
  /**
7
122
  * Extracts a human-readable text representation from a Message object.
8
123
  * Handles Text, Data (JSON), and File parts.
9
124
  */
10
125
  export function extractMessageText(message) {
11
- if (!message) {
126
+ if (!message || !message.parts || !Array.isArray(message.parts)) {
127
+ return '';
128
+ }
129
+ return extractPartsText(message.parts, '\n');
130
+ }
131
+ /**
132
+ * Extracts text from an array of parts, joining them with the specified separator.
133
+ */
134
+ function extractPartsText(parts, separator) {
135
+ if (!parts || parts.length === 0) {
12
136
  return '';
13
137
  }
14
- return extractPartsText(message.parts);
138
+ return parts
139
+ .map((p) => extractPartText(p))
140
+ .filter(Boolean)
141
+ .join(separator);
15
142
  }
16
143
  /**
17
144
  * Extracts text from a single Part.
@@ -21,7 +148,6 @@ function extractPartText(part) {
21
148
  return part.text;
22
149
  }
23
150
  if (isDataPart(part)) {
24
- // Attempt to format known data types if metadata exists, otherwise JSON stringify
25
151
  return `Data: ${JSON.stringify(part.data)}`;
26
152
  }
27
153
  if (isFilePart(part)) {
@@ -36,44 +162,6 @@ function extractPartText(part) {
36
162
  }
37
163
  return '';
38
164
  }
39
- /**
40
- * Extracts a clean, human-readable text summary from a Task object.
41
- * Includes the status message and any artifact content with context headers.
42
- * Technical metadata like ID and State are omitted for better clarity and token efficiency.
43
- */
44
- export function extractTaskText(task) {
45
- const parts = [];
46
- // Status Message
47
- const statusMessageText = extractMessageText(task.status?.message);
48
- if (statusMessageText) {
49
- parts.push(statusMessageText);
50
- }
51
- // Artifacts
52
- if (task.artifacts) {
53
- for (const artifact of task.artifacts) {
54
- const artifactContent = extractPartsText(artifact.parts);
55
- if (artifactContent) {
56
- const header = artifact.name
57
- ? `Artifact (${artifact.name}):`
58
- : 'Artifact:';
59
- parts.push(`${header}\n${artifactContent}`);
60
- }
61
- }
62
- }
63
- return parts.join('\n\n');
64
- }
65
- /**
66
- * Extracts text from an array of parts.
67
- */
68
- function extractPartsText(parts) {
69
- if (!parts || parts.length === 0) {
70
- return '';
71
- }
72
- return parts
73
- .map((p) => extractPartText(p))
74
- .filter(Boolean)
75
- .join('\n');
76
- }
77
165
  // Type Guards
78
166
  function isTextPart(part) {
79
167
  return part.kind === 'text';
@@ -84,30 +172,49 @@ function isDataPart(part) {
84
172
  function isFilePart(part) {
85
173
  return part.kind === 'file';
86
174
  }
175
+ function isStatusUpdateEvent(result) {
176
+ return result.kind === 'status-update';
177
+ }
178
+ /**
179
+ * Returns true if the given state is a terminal state for a task.
180
+ */
181
+ export function isTerminalState(state) {
182
+ return (state === 'completed' ||
183
+ state === 'failed' ||
184
+ state === 'canceled' ||
185
+ state === 'rejected');
186
+ }
87
187
  /**
88
- * Extracts contextId and taskId from a Message or Task response.
188
+ * Extracts contextId and taskId from a Message, Task, or Update response.
89
189
  * Follows the pattern from the A2A CLI sample to maintain conversational continuity.
90
190
  */
91
191
  export function extractIdsFromResponse(result) {
92
192
  let contextId;
93
193
  let taskId;
94
- if (result.kind === 'message') {
95
- taskId = result.taskId;
96
- contextId = result.contextId;
97
- }
98
- else if (result.kind === 'task') {
99
- taskId = result.id;
100
- contextId = result.contextId;
101
- // If the task is in a final state (and not input-required), we clear the taskId
102
- // so that the next interaction starts a fresh task (or keeps context without being bound to the old task).
103
- if (result.status &&
104
- result.status.state !== 'input-required' &&
105
- (result.status.state === 'completed' ||
106
- result.status.state === 'failed' ||
107
- result.status.state === 'canceled')) {
108
- taskId = undefined;
194
+ let clearTaskId = false;
195
+ if ('kind' in result) {
196
+ const kind = result.kind;
197
+ if (kind === 'message' || kind === 'artifact-update') {
198
+ taskId = result.taskId;
199
+ contextId = result.contextId;
200
+ }
201
+ else if (kind === 'task') {
202
+ taskId = result.id;
203
+ contextId = result.contextId;
204
+ if (isTerminalState(result.status?.state)) {
205
+ clearTaskId = true;
206
+ }
207
+ }
208
+ else if (isStatusUpdateEvent(result)) {
209
+ taskId = result.taskId;
210
+ contextId = result.contextId;
211
+ // Note: We ignore the 'final' flag here per A2A protocol best practices,
212
+ // as a stream can close while a task is still in a 'working' state.
213
+ if (isTerminalState(result.status?.state)) {
214
+ clearTaskId = true;
215
+ }
109
216
  }
110
217
  }
111
- return { contextId, taskId };
218
+ return { contextId, taskId, clearTaskId };
112
219
  }
113
220
  //# sourceMappingURL=a2aUtils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"a2aUtils.js","sourceRoot":"","sources":["../../../src/agents/a2aUtils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"a2aUtils.js","sourceRoot":"","sources":["../../../src/agents/a2aUtils.ts"],"names":[],"mappings":"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"}
@@ -4,8 +4,24 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
  import { describe, it, expect } from 'vitest';
7
- import { extractMessageText, extractTaskText, extractIdsFromResponse, } from './a2aUtils.js';
7
+ import { extractMessageText, extractIdsFromResponse, isTerminalState, A2AResultReassembler, } from './a2aUtils.js';
8
8
  describe('a2aUtils', () => {
9
+ describe('isTerminalState', () => {
10
+ it('should return true for completed, failed, canceled, and rejected', () => {
11
+ expect(isTerminalState('completed')).toBe(true);
12
+ expect(isTerminalState('failed')).toBe(true);
13
+ expect(isTerminalState('canceled')).toBe(true);
14
+ expect(isTerminalState('rejected')).toBe(true);
15
+ });
16
+ it('should return false for working, submitted, input-required, auth-required, and unknown', () => {
17
+ expect(isTerminalState('working')).toBe(false);
18
+ expect(isTerminalState('submitted')).toBe(false);
19
+ expect(isTerminalState('input-required')).toBe(false);
20
+ expect(isTerminalState('auth-required')).toBe(false);
21
+ expect(isTerminalState('unknown')).toBe(false);
22
+ expect(isTerminalState(undefined)).toBe(false);
23
+ });
24
+ });
9
25
  describe('extractIdsFromResponse', () => {
10
26
  it('should extract IDs from a message response', () => {
11
27
  const message = {
@@ -17,7 +33,11 @@ describe('a2aUtils', () => {
17
33
  parts: [],
18
34
  };
19
35
  const result = extractIdsFromResponse(message);
20
- expect(result).toEqual({ contextId: 'ctx-1', taskId: 'task-1' });
36
+ expect(result).toEqual({
37
+ contextId: 'ctx-1',
38
+ taskId: 'task-1',
39
+ clearTaskId: false,
40
+ });
21
41
  });
22
42
  it('should extract IDs from an in-progress task response', () => {
23
43
  const task = {
@@ -27,7 +47,64 @@ describe('a2aUtils', () => {
27
47
  status: { state: 'working' },
28
48
  };
29
49
  const result = extractIdsFromResponse(task);
30
- expect(result).toEqual({ contextId: 'ctx-2', taskId: 'task-2' });
50
+ expect(result).toEqual({
51
+ contextId: 'ctx-2',
52
+ taskId: 'task-2',
53
+ clearTaskId: false,
54
+ });
55
+ });
56
+ it('should set clearTaskId true for terminal task response', () => {
57
+ const task = {
58
+ id: 'task-3',
59
+ contextId: 'ctx-3',
60
+ kind: 'task',
61
+ status: { state: 'completed' },
62
+ };
63
+ const result = extractIdsFromResponse(task);
64
+ expect(result.clearTaskId).toBe(true);
65
+ });
66
+ it('should set clearTaskId true for terminal status update', () => {
67
+ const update = {
68
+ kind: 'status-update',
69
+ contextId: 'ctx-4',
70
+ taskId: 'task-4',
71
+ final: true,
72
+ status: { state: 'failed' },
73
+ };
74
+ const result = extractIdsFromResponse(update);
75
+ expect(result.contextId).toBe('ctx-4');
76
+ expect(result.taskId).toBe('task-4');
77
+ expect(result.clearTaskId).toBe(true);
78
+ });
79
+ it('should extract IDs from an artifact-update event', () => {
80
+ const update = {
81
+ kind: 'artifact-update',
82
+ taskId: 'task-5',
83
+ contextId: 'ctx-5',
84
+ artifact: {
85
+ artifactId: 'art-1',
86
+ parts: [{ kind: 'text', text: 'artifact content' }],
87
+ },
88
+ };
89
+ const result = extractIdsFromResponse(update);
90
+ expect(result).toEqual({
91
+ contextId: 'ctx-5',
92
+ taskId: 'task-5',
93
+ clearTaskId: false,
94
+ });
95
+ });
96
+ it('should extract taskId from status update event', () => {
97
+ const update = {
98
+ kind: 'status-update',
99
+ taskId: 'task-6',
100
+ contextId: 'ctx-6',
101
+ final: false,
102
+ status: { state: 'working' },
103
+ };
104
+ const result = extractIdsFromResponse(update);
105
+ expect(result.taskId).toBe('task-6');
106
+ expect(result.contextId).toBe('ctx-6');
107
+ expect(result.clearTaskId).toBe(false);
31
108
  });
32
109
  });
33
110
  describe('extractMessageText', () => {
@@ -101,46 +178,112 @@ describe('a2aUtils', () => {
101
178
  })).toBe('');
102
179
  });
103
180
  });
104
- describe('extractTaskText', () => {
105
- it('should extract basic task info (clean)', () => {
106
- const task = {
107
- id: 'task-1',
108
- contextId: 'ctx-1',
109
- kind: 'task',
181
+ describe('A2AResultReassembler', () => {
182
+ it('should reassemble sequential messages and incremental artifacts', () => {
183
+ const reassembler = new A2AResultReassembler();
184
+ // 1. Initial status
185
+ reassembler.update({
186
+ kind: 'status-update',
187
+ taskId: 't1',
188
+ status: {
189
+ state: 'working',
190
+ message: {
191
+ kind: 'message',
192
+ role: 'agent',
193
+ parts: [{ kind: 'text', text: 'Analyzing...' }],
194
+ },
195
+ },
196
+ });
197
+ // 2. First artifact chunk
198
+ reassembler.update({
199
+ kind: 'artifact-update',
200
+ taskId: 't1',
201
+ append: false,
202
+ artifact: {
203
+ artifactId: 'a1',
204
+ name: 'Code',
205
+ parts: [{ kind: 'text', text: 'print(' }],
206
+ },
207
+ });
208
+ // 3. Second status
209
+ reassembler.update({
210
+ kind: 'status-update',
211
+ taskId: 't1',
110
212
  status: {
111
213
  state: 'working',
112
214
  message: {
113
215
  kind: 'message',
114
216
  role: 'agent',
115
- messageId: 'm1',
116
217
  parts: [{ kind: 'text', text: 'Processing...' }],
117
218
  },
118
219
  },
119
- };
120
- const result = extractTaskText(task);
121
- expect(result).not.toContain('ID: task-1');
122
- expect(result).not.toContain('State: working');
123
- expect(result).toBe('Processing...');
220
+ });
221
+ // 4. Second artifact chunk (append)
222
+ reassembler.update({
223
+ kind: 'artifact-update',
224
+ taskId: 't1',
225
+ append: true,
226
+ artifact: {
227
+ artifactId: 'a1',
228
+ parts: [{ kind: 'text', text: '"Done")' }],
229
+ },
230
+ });
231
+ const output = reassembler.toString();
232
+ expect(output).toBe('Analyzing...\n\nProcessing...\n\nArtifact (Code):\nprint("Done")');
124
233
  });
125
- it('should extract artifacts with headers', () => {
126
- const task = {
127
- id: 'task-1',
128
- contextId: 'ctx-1',
234
+ it('should fallback to history in a task chunk if no message or artifacts exist and task is terminal', () => {
235
+ const reassembler = new A2AResultReassembler();
236
+ reassembler.update({
237
+ kind: 'task',
238
+ status: { state: 'completed' },
239
+ history: [
240
+ {
241
+ kind: 'message',
242
+ role: 'agent',
243
+ parts: [{ kind: 'text', text: 'Answer from history' }],
244
+ },
245
+ ],
246
+ });
247
+ expect(reassembler.toString()).toBe('Answer from history');
248
+ });
249
+ it('should NOT fallback to history in a task chunk if task is not terminal', () => {
250
+ const reassembler = new A2AResultReassembler();
251
+ reassembler.update({
252
+ kind: 'task',
253
+ status: { state: 'working' },
254
+ history: [
255
+ {
256
+ kind: 'message',
257
+ role: 'agent',
258
+ parts: [{ kind: 'text', text: 'Answer from history' }],
259
+ },
260
+ ],
261
+ });
262
+ expect(reassembler.toString()).toBe('');
263
+ });
264
+ it('should not fallback to history if artifacts exist', () => {
265
+ const reassembler = new A2AResultReassembler();
266
+ reassembler.update({
129
267
  kind: 'task',
130
268
  status: { state: 'completed' },
131
269
  artifacts: [
132
270
  {
133
271
  artifactId: 'art-1',
134
- name: 'Report',
135
- parts: [{ kind: 'text', text: 'This is the report.' }],
272
+ name: 'Data',
273
+ parts: [{ kind: 'text', text: 'Artifact Content' }],
136
274
  },
137
275
  ],
138
- };
139
- const result = extractTaskText(task);
140
- expect(result).toContain('Artifact (Report):');
141
- expect(result).toContain('This is the report.');
142
- expect(result).not.toContain('Artifacts:');
143
- expect(result).not.toContain(' - Name: Report');
276
+ history: [
277
+ {
278
+ kind: 'message',
279
+ role: 'agent',
280
+ parts: [{ kind: 'text', text: 'Answer from history' }],
281
+ },
282
+ ],
283
+ });
284
+ const output = reassembler.toString();
285
+ expect(output).toContain('Artifact (Data):');
286
+ expect(output).not.toContain('Answer from history');
144
287
  });
145
288
  });
146
289
  });
@@ -1 +1 @@
1
- {"version":3,"file":"a2aUtils.test.js","sourceRoot":"","sources":["../../../src/agents/a2aUtils.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"a2aUtils.test.js","sourceRoot":"","sources":["../../../src/agents/a2aUtils.test.ts"],"names":[],"mappings":"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"}
@@ -16,8 +16,7 @@ export const GeneralistAgent = (config) => ({
16
16
  kind: 'local',
17
17
  name: 'generalist',
18
18
  displayName: 'Generalist Agent',
19
- description: "A general-purpose AI agent with access to all tools. Use it for complex tasks that don't fit into other specialized agents.",
20
- experimental: true,
19
+ description: 'A general-purpose AI agent with access to all tools. Highly recommended for tasks that are turn-intensive or involve processing large amounts of data. Use this to keep the main session history lean and efficient. Excellent for: batch refactoring/error fixing across multiple files, running commands with high-volume output, and speculative investigations.',
21
20
  inputConfig: {
22
21
  inputSchema: {
23
22
  type: 'object',
@@ -1 +1 @@
1
- {"version":3,"file":"generalist-agent.js","sourceRoot":"","sources":["../../../src/agents/generalist-agent.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAGzD,MAAM,qBAAqB,GAAG,CAAC,CAAC,MAAM,CAAC;IACrC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,oCAAoC,CAAC;CACpE,CAAC,CAAC;AAEH;;;GAGG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAC7B,MAAc,EACsC,EAAE,CAAC,CAAC;IACxD,IAAI,EAAE,OAAO;IACb,IAAI,EAAE,YAAY;IAClB,WAAW,EAAE,kBAAkB;IAC/B,WAAW,EACT,6HAA6H;IAC/H,YAAY,EAAE,IAAI;IAClB,WAAW,EAAE;QACX,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,OAAO,EAAE;oBACP,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,gDAAgD;iBAC9D;aACF;YACD,QAAQ,EAAE,CAAC,SAAS,CAAC;SACtB;KACF;IACD,YAAY,EAAE;QACZ,UAAU,EAAE,QAAQ;QACpB,WAAW,EAAE,0CAA0C;QACvD,MAAM,EAAE,qBAAqB;KAC9B;IACD,WAAW,EAAE;QACX,KAAK,EAAE,SAAS;KACjB;IACD,IAAI,UAAU;QACZ,MAAM,KAAK,GAAG,MAAM,CAAC,eAAe,EAAE,CAAC,eAAe,EAAE,CAAC;QACzD,OAAO;YACL,KAAK;SACN,CAAC;IACJ,CAAC;IACD,IAAI,YAAY;QACd,OAAO;YACL,YAAY,EAAE,mBAAmB,CAC/B,MAAM;YACN,cAAc,CAAC,SAAS;YACxB,wBAAwB,CAAC,KAAK,CAC/B;YACD,KAAK,EAAE,YAAY;SACpB,CAAC;IACJ,CAAC;IACD,SAAS,EAAE;QACT,cAAc,EAAE,EAAE;QAClB,QAAQ,EAAE,EAAE;KACb;CACF,CAAC,CAAC"}
1
+ {"version":3,"file":"generalist-agent.js","sourceRoot":"","sources":["../../../src/agents/generalist-agent.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAGzD,MAAM,qBAAqB,GAAG,CAAC,CAAC,MAAM,CAAC;IACrC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,oCAAoC,CAAC;CACpE,CAAC,CAAC;AAEH;;;GAGG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAC7B,MAAc,EACsC,EAAE,CAAC,CAAC;IACxD,IAAI,EAAE,OAAO;IACb,IAAI,EAAE,YAAY;IAClB,WAAW,EAAE,kBAAkB;IAC/B,WAAW,EACT,qWAAqW;IACvW,WAAW,EAAE;QACX,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,OAAO,EAAE;oBACP,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,gDAAgD;iBAC9D;aACF;YACD,QAAQ,EAAE,CAAC,SAAS,CAAC;SACtB;KACF;IACD,YAAY,EAAE;QACZ,UAAU,EAAE,QAAQ;QACpB,WAAW,EAAE,0CAA0C;QACvD,MAAM,EAAE,qBAAqB;KAC9B;IACD,WAAW,EAAE;QACX,KAAK,EAAE,SAAS;KACjB;IACD,IAAI,UAAU;QACZ,MAAM,KAAK,GAAG,MAAM,CAAC,eAAe,EAAE,CAAC,eAAe,EAAE,CAAC;QACzD,OAAO;YACL,KAAK;SACN,CAAC;IACJ,CAAC;IACD,IAAI,YAAY;QACd,OAAO;YACL,YAAY,EAAE,mBAAmB,CAC/B,MAAM;YACN,cAAc,CAAC,SAAS;YACxB,wBAAwB,CAAC,KAAK,CAC/B;YACD,KAAK,EAAE,YAAY;SACpB,CAAC;IACJ,CAAC;IACD,SAAS,EAAE;QACT,cAAc,EAAE,EAAE;QAClB,QAAQ,EAAE,EAAE;KACb;CACF,CAAC,CAAC"}
@@ -31,6 +31,7 @@ function makeMockedConfig(params) {
31
31
  });
32
32
  vi.spyOn(config, 'getAgentRegistry').mockReturnValue({
33
33
  getDirectoryContext: () => 'mock directory context',
34
+ getAllDefinitions: () => [],
34
35
  });
35
36
  return config;
36
37
  }
@@ -189,6 +190,7 @@ describe('AgentRegistry', () => {
189
190
  overrides: {
190
191
  codebase_investigator: { enabled: false },
191
192
  cli_help: { enabled: false },
193
+ generalist: { enabled: false },
192
194
  },
193
195
  },
194
196
  });
@@ -215,11 +217,11 @@ describe('AgentRegistry', () => {
215
217
  await registry.initialize();
216
218
  expect(registry.getDefinition('cli_help')).toBeUndefined();
217
219
  });
218
- it('should NOT register generalist agent by default (because it is experimental)', async () => {
220
+ it('should register generalist agent by default', async () => {
219
221
  const config = makeMockedConfig();
220
222
  const registry = new TestableAgentRegistry(config);
221
223
  await registry.initialize();
222
- expect(registry.getDefinition('generalist')).toBeUndefined();
224
+ expect(registry.getDefinition('generalist')).toBeDefined();
223
225
  });
224
226
  it('should register generalist agent if explicitly enabled via override', async () => {
225
227
  const config = makeMockedConfig({