@machina.ai/cell-cli-core 1.8.2-rc1 → 1.11.0-rc1

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 (381) hide show
  1. package/dist/index.d.ts +1 -1
  2. package/dist/index.js +1 -1
  3. package/dist/index.js.map +1 -1
  4. package/dist/package.json +5 -3
  5. package/dist/src/agents/codebase-investigator.d.ts +36 -1
  6. package/dist/src/agents/codebase-investigator.js +93 -34
  7. package/dist/src/agents/codebase-investigator.js.map +1 -1
  8. package/dist/src/agents/executor.d.ts +15 -11
  9. package/dist/src/agents/executor.js +271 -115
  10. package/dist/src/agents/executor.js.map +1 -1
  11. package/dist/src/agents/executor.test.js +508 -242
  12. package/dist/src/agents/executor.test.js.map +1 -1
  13. package/dist/src/agents/invocation.d.ts +5 -2
  14. package/dist/src/agents/invocation.js +4 -2
  15. package/dist/src/agents/invocation.js.map +1 -1
  16. package/dist/src/agents/invocation.test.js +9 -0
  17. package/dist/src/agents/invocation.test.js.map +1 -1
  18. package/dist/src/agents/registry.d.ts +2 -1
  19. package/dist/src/agents/registry.js +28 -4
  20. package/dist/src/agents/registry.js.map +1 -1
  21. package/dist/src/agents/subagent-tool-wrapper.d.ts +3 -1
  22. package/dist/src/agents/subagent-tool-wrapper.js +4 -3
  23. package/dist/src/agents/subagent-tool-wrapper.js.map +1 -1
  24. package/dist/src/agents/subagent-tool-wrapper.test.js +8 -1
  25. package/dist/src/agents/subagent-tool-wrapper.test.js.map +1 -1
  26. package/dist/src/agents/types.d.ts +35 -6
  27. package/dist/src/agents/types.js +1 -0
  28. package/dist/src/agents/types.js.map +1 -1
  29. package/dist/src/code_assist/converter.d.ts +1 -0
  30. package/dist/src/code_assist/converter.js +1 -0
  31. package/dist/src/code_assist/converter.js.map +1 -1
  32. package/dist/src/code_assist/converter.test.js +19 -0
  33. package/dist/src/code_assist/converter.test.js.map +1 -1
  34. package/dist/src/code_assist/oauth-credential-storage.js +1 -1
  35. package/dist/src/code_assist/oauth-credential-storage.js.map +1 -1
  36. package/dist/src/code_assist/oauth-credential-storage.test.js +1 -1
  37. package/dist/src/code_assist/oauth-credential-storage.test.js.map +1 -1
  38. package/dist/src/code_assist/oauth2.js +13 -12
  39. package/dist/src/code_assist/oauth2.js.map +1 -1
  40. package/dist/src/code_assist/oauth2.test.js +14 -13
  41. package/dist/src/code_assist/oauth2.test.js.map +1 -1
  42. package/dist/src/code_assist/setup.js +4 -2
  43. package/dist/src/code_assist/setup.js.map +1 -1
  44. package/dist/src/config/config.d.ts +58 -18
  45. package/dist/src/config/config.js +125 -36
  46. package/dist/src/config/config.js.map +1 -1
  47. package/dist/src/config/config.test.js +125 -18
  48. package/dist/src/config/config.test.js.map +1 -1
  49. package/dist/src/config/storage.d.ts +0 -1
  50. package/dist/src/config/storage.js +2 -2
  51. package/dist/src/config/storage.js.map +1 -1
  52. package/dist/src/config/storage.test.js +7 -6
  53. package/dist/src/config/storage.test.js.map +1 -1
  54. package/dist/src/confirmation-bus/message-bus.d.ts +2 -1
  55. package/dist/src/confirmation-bus/message-bus.js +7 -1
  56. package/dist/src/confirmation-bus/message-bus.js.map +1 -1
  57. package/dist/src/confirmation-bus/types.d.ts +12 -2
  58. package/dist/src/confirmation-bus/types.js +1 -0
  59. package/dist/src/confirmation-bus/types.js.map +1 -1
  60. package/dist/src/core/client.d.ts +3 -1
  61. package/dist/src/core/client.js +70 -19
  62. package/dist/src/core/client.js.map +1 -1
  63. package/dist/src/core/client.test.js +199 -25
  64. package/dist/src/core/client.test.js.map +1 -1
  65. package/dist/src/core/contentGenerator.js +3 -1
  66. package/dist/src/core/contentGenerator.js.map +1 -1
  67. package/dist/src/core/coreToolScheduler.d.ts +7 -0
  68. package/dist/src/core/coreToolScheduler.js +58 -22
  69. package/dist/src/core/coreToolScheduler.js.map +1 -1
  70. package/dist/src/core/coreToolScheduler.test.js +351 -3
  71. package/dist/src/core/coreToolScheduler.test.js.map +1 -1
  72. package/dist/src/core/geminiChat.d.ts +7 -11
  73. package/dist/src/core/geminiChat.js +33 -70
  74. package/dist/src/core/geminiChat.js.map +1 -1
  75. package/dist/src/core/geminiChat.test.js +93 -228
  76. package/dist/src/core/geminiChat.test.js.map +1 -1
  77. package/dist/src/core/logger.js +11 -10
  78. package/dist/src/core/logger.js.map +1 -1
  79. package/dist/src/core/logger.test.js +2 -2
  80. package/dist/src/core/logger.test.js.map +1 -1
  81. package/dist/src/core/nonInteractiveToolExecutor.d.ts +3 -2
  82. package/dist/src/core/nonInteractiveToolExecutor.js +2 -2
  83. package/dist/src/core/nonInteractiveToolExecutor.js.map +1 -1
  84. package/dist/src/core/nonInteractiveToolExecutor.test.js +11 -8
  85. package/dist/src/core/nonInteractiveToolExecutor.test.js.map +1 -1
  86. package/dist/src/core/prompts.d.ts +2 -1
  87. package/dist/src/core/prompts.js +58 -123
  88. package/dist/src/core/prompts.js.map +1 -1
  89. package/dist/src/core/prompts.test.js +83 -29
  90. package/dist/src/core/prompts.test.js.map +1 -1
  91. package/dist/src/core/turn.d.ts +16 -2
  92. package/dist/src/core/turn.js +15 -2
  93. package/dist/src/core/turn.js.map +1 -1
  94. package/dist/src/core/turn.test.js +62 -2
  95. package/dist/src/core/turn.test.js.map +1 -1
  96. package/dist/src/generated/git-commit.d.ts +2 -2
  97. package/dist/src/generated/git-commit.js +2 -2
  98. package/dist/src/generated/git-commit.js.map +1 -1
  99. package/dist/src/ide/detect-ide.test.js +11 -0
  100. package/dist/src/ide/detect-ide.test.js.map +1 -1
  101. package/dist/src/ide/ide-client.js +5 -4
  102. package/dist/src/ide/ide-client.js.map +1 -1
  103. package/dist/src/ide/ide-client.test.js +4 -4
  104. package/dist/src/ide/ide-installer.js +1 -1
  105. package/dist/src/ide/ide-installer.js.map +1 -1
  106. package/dist/src/ide/ide-installer.test.js +13 -1
  107. package/dist/src/ide/ide-installer.test.js.map +1 -1
  108. package/dist/src/ide/process-utils.js +85 -75
  109. package/dist/src/ide/process-utils.js.map +1 -1
  110. package/dist/src/ide/process-utils.test.js +83 -90
  111. package/dist/src/ide/process-utils.test.js.map +1 -1
  112. package/dist/src/index.d.ts +6 -0
  113. package/dist/src/index.js +6 -0
  114. package/dist/src/index.js.map +1 -1
  115. package/dist/src/mcp/oauth-provider.js +21 -20
  116. package/dist/src/mcp/oauth-provider.js.map +1 -1
  117. package/dist/src/mcp/oauth-utils.js +9 -8
  118. package/dist/src/mcp/oauth-utils.js.map +1 -1
  119. package/dist/src/mcp/oauth-utils.test.js +13 -2
  120. package/dist/src/mcp/oauth-utils.test.js.map +1 -1
  121. package/dist/src/mcp/token-storage/file-token-storage.js +2 -1
  122. package/dist/src/mcp/token-storage/file-token-storage.js.map +1 -1
  123. package/dist/src/mcp/token-storage/file-token-storage.test.js +4 -3
  124. package/dist/src/mcp/token-storage/file-token-storage.test.js.map +1 -1
  125. package/dist/src/output/stream-json-formatter.d.ts +32 -0
  126. package/dist/src/output/stream-json-formatter.js +52 -0
  127. package/dist/src/output/stream-json-formatter.js.map +1 -0
  128. package/dist/src/output/stream-json-formatter.test.js +479 -0
  129. package/dist/src/output/stream-json-formatter.test.js.map +1 -0
  130. package/dist/src/output/types.d.ts +63 -1
  131. package/dist/src/output/types.js +11 -0
  132. package/dist/src/output/types.js.map +1 -1
  133. package/dist/src/prompts/prompt-registry.js +2 -1
  134. package/dist/src/prompts/prompt-registry.js.map +1 -1
  135. package/dist/src/routing/strategies/classifierStrategy.js +3 -2
  136. package/dist/src/routing/strategies/classifierStrategy.js.map +1 -1
  137. package/dist/src/services/chatRecordingService.d.ts +2 -1
  138. package/dist/src/services/chatRecordingService.js +2 -1
  139. package/dist/src/services/chatRecordingService.js.map +1 -1
  140. package/dist/src/services/loopDetectionService.js +3 -2
  141. package/dist/src/services/loopDetectionService.js.map +1 -1
  142. package/dist/src/services/shellExecutionService.d.ts +1 -0
  143. package/dist/src/services/shellExecutionService.js +177 -91
  144. package/dist/src/services/shellExecutionService.js.map +1 -1
  145. package/dist/src/services/shellExecutionService.test.js +113 -12
  146. package/dist/src/services/shellExecutionService.test.js.map +1 -1
  147. package/dist/src/telemetry/activity-monitor.d.ts +116 -0
  148. package/dist/src/telemetry/activity-monitor.js +209 -0
  149. package/dist/src/telemetry/activity-monitor.js.map +1 -0
  150. package/dist/src/telemetry/activity-monitor.test.d.ts +6 -0
  151. package/dist/src/telemetry/activity-monitor.test.js +248 -0
  152. package/dist/src/telemetry/activity-monitor.test.js.map +1 -0
  153. package/dist/src/telemetry/clearcut-logger/clearcut-logger.d.ts +15 -2
  154. package/dist/src/telemetry/clearcut-logger/clearcut-logger.js +154 -31
  155. package/dist/src/telemetry/clearcut-logger/clearcut-logger.js.map +1 -1
  156. package/dist/src/telemetry/clearcut-logger/clearcut-logger.test.js +84 -15
  157. package/dist/src/telemetry/clearcut-logger/clearcut-logger.test.js.map +1 -1
  158. package/dist/src/telemetry/clearcut-logger/event-metadata-key.d.ts +16 -3
  159. package/dist/src/telemetry/clearcut-logger/event-metadata-key.js +38 -5
  160. package/dist/src/telemetry/clearcut-logger/event-metadata-key.js.map +1 -1
  161. package/dist/src/telemetry/constants.d.ts +0 -28
  162. package/dist/src/telemetry/constants.js +0 -29
  163. package/dist/src/telemetry/constants.js.map +1 -1
  164. package/dist/src/telemetry/index.d.ts +6 -3
  165. package/dist/src/telemetry/index.js +12 -4
  166. package/dist/src/telemetry/index.js.map +1 -1
  167. package/dist/src/telemetry/loggers.d.ts +8 -2
  168. package/dist/src/telemetry/loggers.js +165 -299
  169. package/dist/src/telemetry/loggers.js.map +1 -1
  170. package/dist/src/telemetry/loggers.test.js +213 -21
  171. package/dist/src/telemetry/loggers.test.js.map +1 -1
  172. package/dist/src/telemetry/memory-monitor.d.ts +149 -0
  173. package/dist/src/telemetry/memory-monitor.js +335 -0
  174. package/dist/src/telemetry/memory-monitor.js.map +1 -0
  175. package/dist/src/telemetry/memory-monitor.test.d.ts +6 -0
  176. package/dist/src/telemetry/memory-monitor.test.js +472 -0
  177. package/dist/src/telemetry/memory-monitor.test.js.map +1 -0
  178. package/dist/src/telemetry/metrics.d.ts +131 -4
  179. package/dist/src/telemetry/metrics.js +182 -6
  180. package/dist/src/telemetry/metrics.js.map +1 -1
  181. package/dist/src/telemetry/metrics.test.js +360 -1
  182. package/dist/src/telemetry/metrics.test.js.map +1 -1
  183. package/dist/src/telemetry/sdk.js +3 -2
  184. package/dist/src/telemetry/sdk.js.map +1 -1
  185. package/dist/src/telemetry/telemetryAttributes.d.ts +8 -0
  186. package/dist/src/telemetry/telemetryAttributes.js +18 -0
  187. package/dist/src/telemetry/telemetryAttributes.js.map +1 -0
  188. package/dist/src/telemetry/types.d.ts +163 -7
  189. package/dist/src/telemetry/types.js +691 -38
  190. package/dist/src/telemetry/types.js.map +1 -1
  191. package/dist/src/telemetry/uiTelemetry.d.ts +1 -1
  192. package/dist/src/telemetry/uiTelemetry.js +1 -1
  193. package/dist/src/telemetry/uiTelemetry.js.map +1 -1
  194. package/dist/src/telemetry/uiTelemetry.test.js +1 -1
  195. package/dist/src/telemetry/uiTelemetry.test.js.map +1 -1
  196. package/dist/src/tools/edit.js +8 -7
  197. package/dist/src/tools/edit.js.map +1 -1
  198. package/dist/src/tools/edit.test.js +0 -1
  199. package/dist/src/tools/edit.test.js.map +1 -1
  200. package/dist/src/tools/glob.d.ts +3 -2
  201. package/dist/src/tools/glob.js +8 -7
  202. package/dist/src/tools/glob.js.map +1 -1
  203. package/dist/src/tools/grep.d.ts +3 -2
  204. package/dist/src/tools/grep.js +20 -14
  205. package/dist/src/tools/grep.js.map +1 -1
  206. package/dist/src/tools/ls.d.ts +3 -2
  207. package/dist/src/tools/ls.js +8 -7
  208. package/dist/src/tools/ls.js.map +1 -1
  209. package/dist/src/tools/mcp-client-manager.d.ts +2 -9
  210. package/dist/src/tools/mcp-client-manager.js +6 -14
  211. package/dist/src/tools/mcp-client-manager.js.map +1 -1
  212. package/dist/src/tools/mcp-client-manager.test.js +16 -6
  213. package/dist/src/tools/mcp-client-manager.test.js.map +1 -1
  214. package/dist/src/tools/mcp-client.d.ts +3 -2
  215. package/dist/src/tools/mcp-client.js +49 -52
  216. package/dist/src/tools/mcp-client.js.map +1 -1
  217. package/dist/src/tools/mcp-client.test.js +168 -5
  218. package/dist/src/tools/mcp-client.test.js.map +1 -1
  219. package/dist/src/tools/mcp-tool.d.ts +2 -1
  220. package/dist/src/tools/mcp-tool.js +7 -3
  221. package/dist/src/tools/mcp-tool.js.map +1 -1
  222. package/dist/src/tools/memoryTool.d.ts +2 -2
  223. package/dist/src/tools/memoryTool.js +4 -4
  224. package/dist/src/tools/memoryTool.js.map +1 -1
  225. package/dist/src/tools/memoryTool.test.js +9 -8
  226. package/dist/src/tools/memoryTool.test.js.map +1 -1
  227. package/dist/src/tools/message-bus-integration.test.js +14 -1
  228. package/dist/src/tools/message-bus-integration.test.js.map +1 -1
  229. package/dist/src/tools/read-file.d.ts +4 -3
  230. package/dist/src/tools/read-file.js +9 -8
  231. package/dist/src/tools/read-file.js.map +1 -1
  232. package/dist/src/tools/read-many-files.d.ts +4 -3
  233. package/dist/src/tools/read-many-files.js +11 -8
  234. package/dist/src/tools/read-many-files.js.map +1 -1
  235. package/dist/src/tools/read-many-files.test.js +0 -1
  236. package/dist/src/tools/read-many-files.test.js.map +1 -1
  237. package/dist/src/tools/ripGrep.d.ts +3 -2
  238. package/dist/src/tools/ripGrep.js +47 -17
  239. package/dist/src/tools/ripGrep.js.map +1 -1
  240. package/dist/src/tools/ripGrep.test.js +106 -60
  241. package/dist/src/tools/ripGrep.test.js.map +1 -1
  242. package/dist/src/tools/shell.d.ts +1 -1
  243. package/dist/src/tools/shell.js +31 -14
  244. package/dist/src/tools/shell.js.map +1 -1
  245. package/dist/src/tools/shell.test.js +63 -9
  246. package/dist/src/tools/shell.test.js.map +1 -1
  247. package/dist/src/tools/smart-edit.d.ts +1 -20
  248. package/dist/src/tools/smart-edit.js +64 -61
  249. package/dist/src/tools/smart-edit.js.map +1 -1
  250. package/dist/src/tools/smart-edit.test.js +70 -87
  251. package/dist/src/tools/smart-edit.test.js.map +1 -1
  252. package/dist/src/tools/tool-error.d.ts +21 -0
  253. package/dist/src/tools/tool-error.js +27 -0
  254. package/dist/src/tools/tool-error.js.map +1 -1
  255. package/dist/src/tools/tool-names.d.ts +17 -0
  256. package/dist/src/tools/tool-names.js +21 -0
  257. package/dist/src/tools/tool-names.js.map +1 -0
  258. package/dist/src/tools/tool-registry.js +4 -3
  259. package/dist/src/tools/tool-registry.js.map +1 -1
  260. package/dist/src/tools/tools.d.ts +17 -10
  261. package/dist/src/tools/tools.js +54 -39
  262. package/dist/src/tools/tools.js.map +1 -1
  263. package/dist/src/tools/web-fetch.d.ts +11 -3
  264. package/dist/src/tools/web-fetch.js +90 -32
  265. package/dist/src/tools/web-fetch.js.map +1 -1
  266. package/dist/src/tools/web-fetch.test.js +388 -8
  267. package/dist/src/tools/web-fetch.test.js.map +1 -1
  268. package/dist/src/tools/web-search.d.ts +4 -3
  269. package/dist/src/tools/web-search.js +10 -7
  270. package/dist/src/tools/web-search.js.map +1 -1
  271. package/dist/src/tools/write-file.d.ts +1 -1
  272. package/dist/src/tools/write-file.js +3 -2
  273. package/dist/src/tools/write-file.js.map +1 -1
  274. package/dist/src/tools/write-file.test.js +0 -1
  275. package/dist/src/tools/write-file.test.js.map +1 -1
  276. package/dist/src/tools/write-todos.d.ts +3 -8
  277. package/dist/src/tools/write-todos.js +14 -7
  278. package/dist/src/tools/write-todos.js.map +1 -1
  279. package/dist/src/tools/write-todos.test.js +2 -2
  280. package/dist/src/tools/write-todos.test.js.map +1 -1
  281. package/dist/src/utils/bfsFileSearch.js +3 -2
  282. package/dist/src/utils/bfsFileSearch.js.map +1 -1
  283. package/dist/src/utils/debugLogger.d.ts +25 -0
  284. package/dist/src/utils/debugLogger.js +33 -0
  285. package/dist/src/utils/debugLogger.js.map +1 -0
  286. package/dist/src/utils/debugLogger.test.d.ts +6 -0
  287. package/dist/src/utils/debugLogger.test.js +67 -0
  288. package/dist/src/utils/debugLogger.test.js.map +1 -0
  289. package/dist/src/utils/delay.d.ts +16 -0
  290. package/dist/src/utils/delay.js +43 -0
  291. package/dist/src/utils/delay.js.map +1 -0
  292. package/dist/src/utils/delay.test.d.ts +6 -0
  293. package/dist/src/utils/delay.test.js +88 -0
  294. package/dist/src/utils/delay.test.js.map +1 -0
  295. package/dist/src/utils/editCorrector.js +6 -10
  296. package/dist/src/utils/editCorrector.js.map +1 -1
  297. package/dist/src/utils/editCorrector.test.js +3 -5
  298. package/dist/src/utils/editCorrector.test.js.map +1 -1
  299. package/dist/src/utils/editor.js +33 -37
  300. package/dist/src/utils/editor.js.map +1 -1
  301. package/dist/src/utils/editor.test.js +1 -0
  302. package/dist/src/utils/editor.test.js.map +1 -1
  303. package/dist/src/utils/environmentContext.js +0 -33
  304. package/dist/src/utils/environmentContext.js.map +1 -1
  305. package/dist/src/utils/environmentContext.test.js +0 -34
  306. package/dist/src/utils/environmentContext.test.js.map +1 -1
  307. package/dist/src/utils/fetch.d.ts +1 -0
  308. package/dist/src/utils/fetch.js +9 -0
  309. package/dist/src/utils/fetch.js.map +1 -1
  310. package/dist/src/utils/fileUtils.d.ts +4 -0
  311. package/dist/src/utils/fileUtils.js +34 -2
  312. package/dist/src/utils/fileUtils.js.map +1 -1
  313. package/dist/src/utils/fileUtils.test.js +12 -1
  314. package/dist/src/utils/fileUtils.test.js.map +1 -1
  315. package/dist/src/utils/formatters.d.ts +1 -0
  316. package/dist/src/utils/formatters.js +2 -1
  317. package/dist/src/utils/formatters.js.map +1 -1
  318. package/dist/src/utils/formatters.test.d.ts +6 -0
  319. package/dist/src/utils/formatters.test.js +26 -0
  320. package/dist/src/utils/formatters.test.js.map +1 -0
  321. package/dist/src/utils/getFolderStructure.js +2 -1
  322. package/dist/src/utils/getFolderStructure.js.map +1 -1
  323. package/dist/src/utils/getFolderStructure.test.js +7 -6
  324. package/dist/src/utils/getFolderStructure.test.js.map +1 -1
  325. package/dist/src/utils/gitIgnoreParser.js +7 -6
  326. package/dist/src/utils/gitIgnoreParser.js.map +1 -1
  327. package/dist/src/utils/gitIgnoreParser.test.js +30 -0
  328. package/dist/src/utils/gitIgnoreParser.test.js.map +1 -1
  329. package/dist/src/utils/installationManager.test.js +2 -1
  330. package/dist/src/utils/installationManager.test.js.map +1 -1
  331. package/dist/src/utils/llm-edit-fixer.js +5 -4
  332. package/dist/src/utils/llm-edit-fixer.js.map +1 -1
  333. package/dist/src/utils/memoryDiscovery.d.ts +3 -1
  334. package/dist/src/utils/memoryDiscovery.js +14 -12
  335. package/dist/src/utils/memoryDiscovery.js.map +1 -1
  336. package/dist/src/utils/memoryDiscovery.test.js +136 -36
  337. package/dist/src/utils/memoryDiscovery.test.js.map +1 -1
  338. package/dist/src/utils/memoryImportProcessor.js +3 -2
  339. package/dist/src/utils/memoryImportProcessor.js.map +1 -1
  340. package/dist/src/utils/nextSpeakerChecker.js +2 -1
  341. package/dist/src/utils/nextSpeakerChecker.js.map +1 -1
  342. package/dist/src/utils/pathCorrector.d.ts +25 -0
  343. package/dist/src/utils/pathCorrector.js +33 -0
  344. package/dist/src/utils/pathCorrector.js.map +1 -0
  345. package/dist/src/utils/pathCorrector.test.d.ts +6 -0
  346. package/dist/src/utils/pathCorrector.test.js +83 -0
  347. package/dist/src/utils/pathCorrector.test.js.map +1 -0
  348. package/dist/src/utils/retry.d.ts +3 -1
  349. package/dist/src/utils/retry.js +44 -33
  350. package/dist/src/utils/retry.js.map +1 -1
  351. package/dist/src/utils/retry.test.js +102 -40
  352. package/dist/src/utils/retry.test.js.map +1 -1
  353. package/dist/src/utils/safeJsonStringify.d.ts +4 -4
  354. package/dist/src/utils/safeJsonStringify.js +31 -7
  355. package/dist/src/utils/safeJsonStringify.js.map +1 -1
  356. package/dist/src/utils/shell-utils.d.ts +15 -2
  357. package/dist/src/utils/shell-utils.js +354 -137
  358. package/dist/src/utils/shell-utils.js.map +1 -1
  359. package/dist/src/utils/shell-utils.test.js +154 -60
  360. package/dist/src/utils/shell-utils.test.js.map +1 -1
  361. package/dist/src/utils/systemEncoding.js +5 -4
  362. package/dist/src/utils/systemEncoding.js.map +1 -1
  363. package/dist/src/utils/tool-utils.d.ts +2 -2
  364. package/dist/src/utils/tool-utils.js +15 -6
  365. package/dist/src/utils/tool-utils.js.map +1 -1
  366. package/dist/src/utils/tool-utils.test.js +8 -0
  367. package/dist/src/utils/tool-utils.test.js.map +1 -1
  368. package/dist/src/utils/userAccountManager.js +5 -4
  369. package/dist/src/utils/userAccountManager.js.map +1 -1
  370. package/dist/src/utils/userAccountManager.test.js +2 -1
  371. package/dist/src/utils/userAccountManager.test.js.map +1 -1
  372. package/dist/src/utils/workspaceContext.js +2 -1
  373. package/dist/src/utils/workspaceContext.js.map +1 -1
  374. package/dist/tsconfig.tsbuildinfo +1 -1
  375. package/package.json +5 -3
  376. package/dist/src/core/subagent.d.ts +0 -236
  377. package/dist/src/core/subagent.js +0 -482
  378. package/dist/src/core/subagent.js.map +0 -1
  379. package/dist/src/core/subagent.test.js +0 -530
  380. package/dist/src/core/subagent.test.js.map +0 -1
  381. /package/dist/src/{core/subagent.test.d.ts → output/stream-json-formatter.test.d.ts} +0 -0
@@ -1,530 +0,0 @@
1
- /**
2
- * @license
3
- * Copyright 2025 Google LLC
4
- * SPDX-License-Identifier: Apache-2.0
5
- */
6
- import { vi, describe, it, expect, beforeEach, afterEach } from 'vitest';
7
- import { ContextState, SubAgentScope, SubagentTerminateMode, } from './subagent.js';
8
- import { Config } from '../config/config.js';
9
- import { GeminiChat, StreamEventType } from './geminiChat.js';
10
- import { createContentGenerator } from './contentGenerator.js';
11
- import { getEnvironmentContext } from '../utils/environmentContext.js';
12
- import { executeToolCall } from './nonInteractiveToolExecutor.js';
13
- import { DEFAULT_GEMINI_MODEL } from '../config/models.js';
14
- import { Type } from '@google/genai';
15
- import { ToolErrorType } from '../tools/tool-error.js';
16
- vi.mock('./geminiChat.js');
17
- vi.mock('./contentGenerator.js');
18
- vi.mock('../utils/environmentContext.js');
19
- vi.mock('./nonInteractiveToolExecutor.js');
20
- vi.mock('../ide/ide-client.js');
21
- async function createMockConfig(toolRegistryMocks = {}, configParameters = {}) {
22
- const configParams = {
23
- sessionId: 'test-session',
24
- model: DEFAULT_GEMINI_MODEL,
25
- targetDir: '.',
26
- debugMode: false,
27
- cwd: process.cwd(),
28
- ...configParameters,
29
- };
30
- const config = new Config(configParams);
31
- await config.initialize();
32
- // Mock ToolRegistry
33
- const mockToolRegistry = {
34
- getTool: vi.fn(),
35
- getFunctionDeclarationsFiltered: vi.fn().mockReturnValue([]),
36
- ...toolRegistryMocks,
37
- };
38
- vi.spyOn(config, 'getToolRegistry').mockReturnValue(mockToolRegistry);
39
- return { config, toolRegistry: mockToolRegistry };
40
- }
41
- // Helper to simulate LLM responses (sequence of tool calls over multiple turns)
42
- const createMockStream = (functionCallsList) => {
43
- let index = 0;
44
- // This mock now returns a Promise that resolves to the async generator,
45
- // matching the new signature for sendMessageStream.
46
- return vi.fn().mockImplementation(async () => {
47
- const response = functionCallsList[index] || 'stop';
48
- index++;
49
- return (async function* () {
50
- let mockResponseValue;
51
- if (response === 'stop' || response.length === 0) {
52
- // Simulate a text response for stop/empty conditions.
53
- mockResponseValue = {
54
- candidates: [{ content: { parts: [{ text: 'Done.' }] } }],
55
- };
56
- }
57
- else {
58
- // Simulate a tool call response.
59
- mockResponseValue = {
60
- candidates: [], // Good practice to include for safety.
61
- functionCalls: response,
62
- };
63
- }
64
- // The stream must now yield a StreamEvent object of type CHUNK.
65
- yield {
66
- type: StreamEventType.CHUNK,
67
- value: mockResponseValue,
68
- };
69
- })();
70
- });
71
- };
72
- describe('subagent.ts', () => {
73
- describe('ContextState', () => {
74
- it('should set and get values correctly', () => {
75
- const context = new ContextState();
76
- context.set('key1', 'value1');
77
- context.set('key2', 123);
78
- expect(context.get('key1')).toBe('value1');
79
- expect(context.get('key2')).toBe(123);
80
- expect(context.get_keys()).toEqual(['key1', 'key2']);
81
- });
82
- it('should return undefined for missing keys', () => {
83
- const context = new ContextState();
84
- expect(context.get('missing')).toBeUndefined();
85
- });
86
- });
87
- describe('SubAgentScope', () => {
88
- let mockSendMessageStream;
89
- const defaultModelConfig = {
90
- model: 'gemini-1.5-flash-latest',
91
- temp: 0.5, // Specific temp to test override
92
- top_p: 1,
93
- };
94
- const defaultRunConfig = {
95
- max_time_minutes: 5,
96
- max_turns: 10,
97
- };
98
- beforeEach(async () => {
99
- vi.clearAllMocks();
100
- vi.mocked(getEnvironmentContext).mockResolvedValue([
101
- { text: 'Env Context' },
102
- ]);
103
- vi.mocked(createContentGenerator).mockResolvedValue({
104
- getGenerativeModel: vi.fn(),
105
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
106
- });
107
- mockSendMessageStream = vi.fn();
108
- // We mock the implementation of the constructor.
109
- vi.mocked(GeminiChat).mockImplementation(() => ({
110
- sendMessageStream: mockSendMessageStream,
111
- }));
112
- });
113
- afterEach(() => {
114
- vi.restoreAllMocks();
115
- });
116
- // Helper to safely access generationConfig from mock calls
117
- const getGenerationConfigFromMock = (callIndex = 0) => {
118
- const callArgs = vi.mocked(GeminiChat).mock.calls[callIndex];
119
- const generationConfig = callArgs?.[1];
120
- // Ensure it's defined before proceeding
121
- expect(generationConfig).toBeDefined();
122
- if (!generationConfig)
123
- throw new Error('generationConfig is undefined');
124
- return generationConfig;
125
- };
126
- describe('create (Tool Validation)', () => {
127
- const promptConfig = { systemPrompt: 'Test prompt' };
128
- it('should create a SubAgentScope successfully with minimal config', async () => {
129
- const { config } = await createMockConfig();
130
- const scope = await SubAgentScope.create('test-agent', config, promptConfig, defaultModelConfig, defaultRunConfig);
131
- expect(scope).toBeInstanceOf(SubAgentScope);
132
- });
133
- it('should throw an error if a tool requires confirmation', async () => {
134
- const mockTool = {
135
- name: 'risky_tool',
136
- schema: { parametersJsonSchema: { type: 'object', properties: {} } },
137
- build: vi.fn().mockReturnValue({
138
- shouldConfirmExecute: vi.fn().mockResolvedValue({
139
- type: 'exec',
140
- title: 'Confirm',
141
- command: 'rm -rf /',
142
- }),
143
- }),
144
- };
145
- const { config } = await createMockConfig({
146
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
147
- getTool: vi.fn().mockReturnValue(mockTool),
148
- });
149
- const toolConfig = { tools: ['risky_tool'] };
150
- const options = { toolConfig };
151
- await expect(SubAgentScope.create('test-agent', config, promptConfig, defaultModelConfig, defaultRunConfig, options)).rejects.toThrow('Tool "risky_tool" requires user confirmation and cannot be used in a non-interactive subagent.');
152
- });
153
- it('should succeed if tools do not require confirmation', async () => {
154
- const mockTool = {
155
- name: 'safe_tool',
156
- schema: { parametersJsonSchema: { type: 'object', properties: {} } },
157
- build: vi.fn().mockReturnValue({
158
- shouldConfirmExecute: vi.fn().mockResolvedValue(null),
159
- }),
160
- };
161
- const { config } = await createMockConfig({
162
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
163
- getTool: vi.fn().mockReturnValue(mockTool),
164
- });
165
- const toolConfig = { tools: ['safe_tool'] };
166
- const options = { toolConfig };
167
- const scope = await SubAgentScope.create('test-agent', config, promptConfig, defaultModelConfig, defaultRunConfig, options);
168
- expect(scope).toBeInstanceOf(SubAgentScope);
169
- });
170
- it('should skip interactivity check and warn for tools with required parameters', async () => {
171
- const consoleWarnSpy = vi
172
- .spyOn(console, 'warn')
173
- .mockImplementation(() => { });
174
- const mockToolWithParams = {
175
- name: 'tool_with_params',
176
- schema: {
177
- parametersJsonSchema: {
178
- type: 'object',
179
- properties: {
180
- path: { type: 'string' },
181
- },
182
- required: ['path'],
183
- },
184
- },
185
- // build should not be called, but we mock it to be safe
186
- build: vi.fn(),
187
- };
188
- const { config } = await createMockConfig({
189
- getTool: vi.fn().mockReturnValue(mockToolWithParams),
190
- getAllTools: vi.fn().mockReturnValue([mockToolWithParams]),
191
- });
192
- const toolConfig = { tools: ['tool_with_params'] };
193
- const options = { toolConfig };
194
- // The creation should succeed without throwing
195
- const scope = await SubAgentScope.create('test-agent', config, promptConfig, defaultModelConfig, defaultRunConfig, options);
196
- expect(scope).toBeInstanceOf(SubAgentScope);
197
- // Check that the warning was logged
198
- expect(consoleWarnSpy).toHaveBeenCalledWith('Cannot check tool "tool_with_params" for interactivity because it requires parameters. Assuming it is safe for non-interactive use.');
199
- // Ensure build was never called
200
- expect(mockToolWithParams.build).not.toHaveBeenCalled();
201
- consoleWarnSpy.mockRestore();
202
- });
203
- });
204
- describe('runNonInteractive - Initialization and Prompting', () => {
205
- it('should correctly template the system prompt and initialize GeminiChat', async () => {
206
- const { config } = await createMockConfig();
207
- vi.mocked(GeminiChat).mockClear();
208
- const promptConfig = {
209
- systemPrompt: 'Hello ${name}, your task is ${task}.',
210
- };
211
- const context = new ContextState();
212
- context.set('name', 'Agent');
213
- context.set('task', 'Testing');
214
- // Model stops immediately
215
- mockSendMessageStream.mockImplementation(createMockStream(['stop']));
216
- const scope = await SubAgentScope.create('test-agent', config, promptConfig, defaultModelConfig, defaultRunConfig);
217
- await scope.runNonInteractive(context);
218
- // Check if GeminiChat was initialized correctly by the subagent
219
- expect(GeminiChat).toHaveBeenCalledTimes(1);
220
- const callArgs = vi.mocked(GeminiChat).mock.calls[0];
221
- // Check Generation Config
222
- const generationConfig = getGenerationConfigFromMock();
223
- // Check temperature override
224
- expect(generationConfig.temperature).toBe(defaultModelConfig.temp);
225
- expect(generationConfig.systemInstruction).toContain('Hello Agent, your task is Testing.');
226
- expect(generationConfig.systemInstruction).toContain('Important Rules:');
227
- // Check History (should include environment context)
228
- const history = callArgs[2];
229
- expect(history).toEqual([
230
- { role: 'user', parts: [{ text: 'Env Context' }] },
231
- {
232
- role: 'model',
233
- parts: [{ text: 'Got it. Thanks for the context!' }],
234
- },
235
- ]);
236
- });
237
- it('should include output instructions in the system prompt when outputs are defined', async () => {
238
- const { config } = await createMockConfig();
239
- vi.mocked(GeminiChat).mockClear();
240
- const promptConfig = { systemPrompt: 'Do the task.' };
241
- const outputConfig = {
242
- outputs: {
243
- result1: 'The first result',
244
- },
245
- };
246
- const context = new ContextState();
247
- // Model stops immediately
248
- mockSendMessageStream.mockImplementation(createMockStream(['stop']));
249
- const scope = await SubAgentScope.create('test-agent', config, promptConfig, defaultModelConfig, defaultRunConfig, { outputConfig });
250
- await scope.runNonInteractive(context);
251
- const generationConfig = getGenerationConfigFromMock();
252
- const systemInstruction = generationConfig.systemInstruction;
253
- expect(systemInstruction).toContain('Do the task.');
254
- expect(systemInstruction).toContain('you MUST emit the required output variables');
255
- expect(systemInstruction).toContain("Use 'self.emitvalue' to emit the 'result1' key");
256
- });
257
- it('should use initialMessages instead of systemPrompt if provided', async () => {
258
- const { config } = await createMockConfig();
259
- vi.mocked(GeminiChat).mockClear();
260
- const initialMessages = [
261
- { role: 'user', parts: [{ text: 'Hi' }] },
262
- ];
263
- const promptConfig = { initialMessages };
264
- const context = new ContextState();
265
- // Model stops immediately
266
- mockSendMessageStream.mockImplementation(createMockStream(['stop']));
267
- const scope = await SubAgentScope.create('test-agent', config, promptConfig, defaultModelConfig, defaultRunConfig);
268
- await scope.runNonInteractive(context);
269
- const callArgs = vi.mocked(GeminiChat).mock.calls[0];
270
- const generationConfig = getGenerationConfigFromMock();
271
- const history = callArgs[2];
272
- expect(generationConfig.systemInstruction).toBeUndefined();
273
- expect(history).toEqual([
274
- { role: 'user', parts: [{ text: 'Env Context' }] },
275
- {
276
- role: 'model',
277
- parts: [{ text: 'Got it. Thanks for the context!' }],
278
- },
279
- ...initialMessages,
280
- ]);
281
- });
282
- it('should throw an error if template variables are missing', async () => {
283
- const { config } = await createMockConfig();
284
- const promptConfig = {
285
- systemPrompt: 'Hello ${name}, you are missing ${missing}.',
286
- };
287
- const context = new ContextState();
288
- context.set('name', 'Agent');
289
- // 'missing' is not set
290
- const scope = await SubAgentScope.create('test-agent', config, promptConfig, defaultModelConfig, defaultRunConfig);
291
- // The error from templating causes the runNonInteractive to reject and the terminate_reason to be ERROR.
292
- await expect(scope.runNonInteractive(context)).rejects.toThrow('Missing context values for the following keys: missing');
293
- expect(scope.output.terminate_reason).toBe(SubagentTerminateMode.ERROR);
294
- });
295
- it('should validate that systemPrompt and initialMessages are mutually exclusive', async () => {
296
- const { config } = await createMockConfig();
297
- const promptConfig = {
298
- systemPrompt: 'System',
299
- initialMessages: [{ role: 'user', parts: [{ text: 'Hi' }] }],
300
- };
301
- const context = new ContextState();
302
- const agent = await SubAgentScope.create('TestAgent', config, promptConfig, defaultModelConfig, defaultRunConfig);
303
- await expect(agent.runNonInteractive(context)).rejects.toThrow('PromptConfig cannot have both `systemPrompt` and `initialMessages` defined.');
304
- expect(agent.output.terminate_reason).toBe(SubagentTerminateMode.ERROR);
305
- });
306
- });
307
- describe('runNonInteractive - Execution and Tool Use', () => {
308
- const promptConfig = { systemPrompt: 'Execute task.' };
309
- it('should terminate with GOAL if no outputs are expected and model stops', async () => {
310
- const { config } = await createMockConfig();
311
- // Model stops immediately
312
- mockSendMessageStream.mockImplementation(createMockStream(['stop']));
313
- const scope = await SubAgentScope.create('test-agent', config, promptConfig, defaultModelConfig, defaultRunConfig);
314
- await scope.runNonInteractive(new ContextState());
315
- expect(scope.output.terminate_reason).toBe(SubagentTerminateMode.GOAL);
316
- expect(scope.output.emitted_vars).toEqual({});
317
- expect(mockSendMessageStream).toHaveBeenCalledTimes(1);
318
- // Check the initial message
319
- expect(mockSendMessageStream.mock.calls[0][1].message).toEqual([
320
- { text: 'Get Started!' },
321
- ]);
322
- });
323
- it('should handle self.emitvalue and terminate with GOAL when outputs are met', async () => {
324
- const { config } = await createMockConfig();
325
- const outputConfig = {
326
- outputs: { result: 'The final result' },
327
- };
328
- // Turn 1: Model responds with emitvalue call
329
- // Turn 2: Model stops after receiving the tool response
330
- mockSendMessageStream.mockImplementation(createMockStream([
331
- [
332
- {
333
- name: 'self.emitvalue',
334
- args: {
335
- emit_variable_name: 'result',
336
- emit_variable_value: 'Success!',
337
- },
338
- },
339
- ],
340
- 'stop',
341
- ]));
342
- const scope = await SubAgentScope.create('test-agent', config, promptConfig, defaultModelConfig, defaultRunConfig, { outputConfig });
343
- await scope.runNonInteractive(new ContextState());
344
- expect(scope.output.terminate_reason).toBe(SubagentTerminateMode.GOAL);
345
- expect(scope.output.emitted_vars).toEqual({ result: 'Success!' });
346
- expect(mockSendMessageStream).toHaveBeenCalledTimes(1);
347
- // Check the tool response sent back in the second call
348
- const secondCallArgs = mockSendMessageStream.mock.calls[0][1];
349
- expect(secondCallArgs.message).toEqual([{ text: 'Get Started!' }]);
350
- });
351
- it('should execute external tools and provide the response to the model', async () => {
352
- const listFilesToolDef = {
353
- name: 'list_files',
354
- description: 'Lists files',
355
- parameters: { type: Type.OBJECT, properties: {} },
356
- };
357
- const { config } = await createMockConfig({
358
- getFunctionDeclarationsFiltered: vi
359
- .fn()
360
- .mockReturnValue([listFilesToolDef]),
361
- getTool: vi.fn().mockReturnValue(undefined),
362
- });
363
- const toolConfig = { tools: ['list_files'] };
364
- // Turn 1: Model calls the external tool
365
- // Turn 2: Model stops
366
- mockSendMessageStream.mockImplementation(createMockStream([
367
- [
368
- {
369
- id: 'call_1',
370
- name: 'list_files',
371
- args: { path: '.' },
372
- },
373
- ],
374
- 'stop',
375
- ]));
376
- // Mock the tool execution result
377
- vi.mocked(executeToolCall).mockResolvedValue({
378
- callId: 'call_1',
379
- responseParts: [{ text: 'file1.txt\nfile2.ts' }],
380
- resultDisplay: 'Listed 2 files',
381
- error: undefined,
382
- errorType: undefined, // Or ToolErrorType.NONE if available and appropriate
383
- });
384
- const scope = await SubAgentScope.create('test-agent', config, promptConfig, defaultModelConfig, defaultRunConfig, { toolConfig });
385
- await scope.runNonInteractive(new ContextState());
386
- // Check tool execution
387
- expect(executeToolCall).toHaveBeenCalledWith(config, expect.objectContaining({ name: 'list_files', args: { path: '.' } }), expect.any(AbortSignal));
388
- // Check the response sent back to the model
389
- const secondCallArgs = mockSendMessageStream.mock.calls[1][1];
390
- expect(secondCallArgs.message).toEqual([
391
- { text: 'file1.txt\nfile2.ts' },
392
- ]);
393
- expect(scope.output.terminate_reason).toBe(SubagentTerminateMode.GOAL);
394
- });
395
- it('should provide specific tool error responses to the model', async () => {
396
- const { config } = await createMockConfig();
397
- const toolConfig = { tools: ['failing_tool'] };
398
- // Turn 1: Model calls the failing tool
399
- // Turn 2: Model stops after receiving the error response
400
- mockSendMessageStream.mockImplementation(createMockStream([
401
- [
402
- {
403
- id: 'call_fail',
404
- name: 'failing_tool',
405
- args: {},
406
- },
407
- ],
408
- 'stop',
409
- ]));
410
- // Mock the tool execution failure.
411
- vi.mocked(executeToolCall).mockResolvedValue({
412
- callId: 'call_fail',
413
- responseParts: [{ text: 'ERROR: Tool failed catastrophically' }], // This should be sent to the model
414
- resultDisplay: 'Tool failed catastrophically',
415
- error: new Error('Failure'),
416
- errorType: ToolErrorType.INVALID_TOOL_PARAMS,
417
- });
418
- const scope = await SubAgentScope.create('test-agent', config, promptConfig, defaultModelConfig, defaultRunConfig, { toolConfig });
419
- await scope.runNonInteractive(new ContextState());
420
- // The agent should send the specific error message from responseParts.
421
- const secondCallArgs = mockSendMessageStream.mock.calls[1][1];
422
- expect(secondCallArgs.message).toEqual([
423
- {
424
- text: 'ERROR: Tool failed catastrophically',
425
- },
426
- ]);
427
- });
428
- it('should nudge the model if it stops before emitting all required variables', async () => {
429
- const { config } = await createMockConfig();
430
- const outputConfig = {
431
- outputs: { required_var: 'Must be present' },
432
- };
433
- // Turn 1: Model stops prematurely
434
- // Turn 2: Model responds to the nudge and emits the variable
435
- // Turn 3: Model stops
436
- mockSendMessageStream.mockImplementation(createMockStream([
437
- 'stop',
438
- [
439
- {
440
- name: 'self.emitvalue',
441
- args: {
442
- emit_variable_name: 'required_var',
443
- emit_variable_value: 'Here it is',
444
- },
445
- },
446
- ],
447
- 'stop',
448
- ]));
449
- const scope = await SubAgentScope.create('test-agent', config, promptConfig, defaultModelConfig, defaultRunConfig, { outputConfig });
450
- await scope.runNonInteractive(new ContextState());
451
- // Check the nudge message sent in Turn 2
452
- const secondCallArgs = mockSendMessageStream.mock.calls[1][1];
453
- // We check that the message contains the required variable name and the nudge phrasing.
454
- expect(secondCallArgs.message[0].text).toContain('required_var');
455
- expect(secondCallArgs.message[0].text).toContain('You have stopped calling tools');
456
- expect(scope.output.terminate_reason).toBe(SubagentTerminateMode.GOAL);
457
- expect(scope.output.emitted_vars).toEqual({
458
- required_var: 'Here it is',
459
- });
460
- expect(mockSendMessageStream).toHaveBeenCalledTimes(2);
461
- });
462
- });
463
- describe('runNonInteractive - Termination and Recovery', () => {
464
- const promptConfig = { systemPrompt: 'Execute task.' };
465
- it('should terminate with MAX_TURNS if the limit is reached', async () => {
466
- const { config } = await createMockConfig();
467
- const runConfig = { ...defaultRunConfig, max_turns: 2 };
468
- // Model keeps looping by calling emitvalue repeatedly
469
- mockSendMessageStream.mockImplementation(createMockStream([
470
- [
471
- {
472
- name: 'self.emitvalue',
473
- args: { emit_variable_name: 'loop', emit_variable_value: 'v1' },
474
- },
475
- ],
476
- [
477
- {
478
- name: 'self.emitvalue',
479
- args: { emit_variable_name: 'loop', emit_variable_value: 'v2' },
480
- },
481
- ],
482
- // This turn should not happen
483
- [
484
- {
485
- name: 'self.emitvalue',
486
- args: { emit_variable_name: 'loop', emit_variable_value: 'v3' },
487
- },
488
- ],
489
- ]));
490
- const scope = await SubAgentScope.create('test-agent', config, promptConfig, defaultModelConfig, runConfig);
491
- await scope.runNonInteractive(new ContextState());
492
- expect(mockSendMessageStream).toHaveBeenCalledTimes(2);
493
- expect(scope.output.terminate_reason).toBe(SubagentTerminateMode.MAX_TURNS);
494
- });
495
- it('should terminate with TIMEOUT if the time limit is reached during an LLM call', async () => {
496
- // Use fake timers to reliably test timeouts
497
- vi.useFakeTimers();
498
- const { config } = await createMockConfig({}, { useRipgrep: false });
499
- const runConfig = { max_time_minutes: 5, max_turns: 100 };
500
- // We need to control the resolution of the sendMessageStream promise to advance the timer during execution.
501
- let resolveStream;
502
- const streamPromise = new Promise((resolve) => {
503
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
504
- resolveStream = resolve;
505
- });
506
- // The LLM call will hang until we resolve the promise.
507
- mockSendMessageStream.mockReturnValue(streamPromise);
508
- const scope = await SubAgentScope.create('test-agent', config, promptConfig, defaultModelConfig, runConfig);
509
- const runPromise = scope.runNonInteractive(new ContextState());
510
- // Advance time beyond the limit (6 minutes) while the agent is awaiting the LLM response.
511
- await vi.advanceTimersByTimeAsync(6 * 60 * 1000);
512
- // Now resolve the stream. The model returns 'stop'.
513
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
514
- resolveStream(createMockStream(['stop'])());
515
- await runPromise;
516
- expect(scope.output.terminate_reason).toBe(SubagentTerminateMode.TIMEOUT);
517
- expect(mockSendMessageStream).toHaveBeenCalledTimes(1);
518
- vi.useRealTimers();
519
- });
520
- it('should terminate with ERROR if the model call throws', async () => {
521
- const { config } = await createMockConfig({}, { useRipgrep: false });
522
- mockSendMessageStream.mockRejectedValue(new Error('API Failure'));
523
- const scope = await SubAgentScope.create('test-agent', config, promptConfig, defaultModelConfig, defaultRunConfig);
524
- await expect(scope.runNonInteractive(new ContextState())).rejects.toThrow('API Failure');
525
- expect(scope.output.terminate_reason).toBe(SubagentTerminateMode.ERROR);
526
- });
527
- });
528
- });
529
- });
530
- //# sourceMappingURL=subagent.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"subagent.test.js","sourceRoot":"","sources":["../../../src/core/subagent.test.ts"],"names":[],"mappings":"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"}