@office-ai/aioncli-core 0.18.7 → 0.24.0

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 (890) hide show
  1. package/dist/docs/CONTRIBUTING.md +546 -0
  2. package/dist/docs/architecture.md +80 -0
  3. package/dist/docs/assets/connected_devtools.png +0 -0
  4. package/dist/docs/assets/gemini-screenshot.png +0 -0
  5. package/dist/docs/assets/release_patch.png +0 -0
  6. package/dist/docs/assets/theme-ansi-light.png +0 -0
  7. package/dist/docs/assets/theme-ansi.png +0 -0
  8. package/dist/docs/assets/theme-atom-one.png +0 -0
  9. package/dist/docs/assets/theme-ayu-light.png +0 -0
  10. package/dist/docs/assets/theme-ayu.png +0 -0
  11. package/dist/docs/assets/theme-custom.png +0 -0
  12. package/dist/docs/assets/theme-default-light.png +0 -0
  13. package/dist/docs/assets/theme-default.png +0 -0
  14. package/dist/docs/assets/theme-dracula.png +0 -0
  15. package/dist/docs/assets/theme-github-light.png +0 -0
  16. package/dist/docs/assets/theme-github.png +0 -0
  17. package/dist/docs/assets/theme-google-light.png +0 -0
  18. package/dist/docs/assets/theme-xcode-light.png +0 -0
  19. package/dist/docs/changelogs/index.md +592 -0
  20. package/dist/docs/changelogs/latest.md +225 -0
  21. package/dist/docs/changelogs/preview.md +129 -0
  22. package/dist/docs/changelogs/releases.md +896 -0
  23. package/dist/docs/cli/authentication.md +3 -0
  24. package/dist/docs/cli/checkpointing.md +94 -0
  25. package/dist/docs/cli/commands.md +354 -0
  26. package/dist/docs/cli/configuration.md +780 -0
  27. package/dist/docs/cli/custom-commands.md +315 -0
  28. package/dist/docs/cli/enterprise.md +565 -0
  29. package/dist/docs/cli/gemini-ignore.md +71 -0
  30. package/dist/docs/cli/gemini-md.md +108 -0
  31. package/dist/docs/cli/generation-settings.md +210 -0
  32. package/dist/docs/cli/headless.md +388 -0
  33. package/dist/docs/cli/index.md +63 -0
  34. package/dist/docs/cli/keyboard-shortcuts.md +143 -0
  35. package/dist/docs/cli/model-routing.md +37 -0
  36. package/dist/docs/cli/model.md +62 -0
  37. package/dist/docs/cli/sandbox.md +171 -0
  38. package/dist/docs/cli/session-management.md +158 -0
  39. package/dist/docs/cli/settings.md +114 -0
  40. package/dist/docs/cli/skills.md +156 -0
  41. package/dist/docs/cli/system-prompt.md +93 -0
  42. package/dist/docs/cli/telemetry.md +791 -0
  43. package/dist/docs/cli/themes.md +237 -0
  44. package/dist/docs/cli/token-caching.md +20 -0
  45. package/dist/docs/cli/trusted-folders.md +95 -0
  46. package/dist/docs/cli/tutorials/skills-getting-started.md +124 -0
  47. package/dist/docs/cli/tutorials.md +87 -0
  48. package/dist/docs/cli/uninstall.md +47 -0
  49. package/dist/docs/core/index.md +101 -0
  50. package/dist/docs/core/memport.md +244 -0
  51. package/dist/docs/core/policy-engine.md +267 -0
  52. package/dist/docs/core/tools-api.md +131 -0
  53. package/dist/docs/examples/proxy-script.md +83 -0
  54. package/dist/docs/extension.md +160 -0
  55. package/dist/docs/extensions/extension-releasing.md +183 -0
  56. package/dist/docs/extensions/getting-started-extensions.md +245 -0
  57. package/dist/docs/extensions/index.md +293 -0
  58. package/dist/docs/faq.md +154 -0
  59. package/dist/docs/get-started/authentication.md +321 -0
  60. package/dist/docs/get-started/configuration-v1.md +888 -0
  61. package/dist/docs/get-started/configuration.md +1536 -0
  62. package/dist/docs/get-started/deployment.md +143 -0
  63. package/dist/docs/get-started/examples.md +219 -0
  64. package/dist/docs/get-started/gemini-3.md +116 -0
  65. package/dist/docs/get-started/index.md +71 -0
  66. package/dist/docs/get-started/installation.md +141 -0
  67. package/dist/docs/hooks/best-practices.md +856 -0
  68. package/dist/docs/hooks/index.md +687 -0
  69. package/dist/docs/hooks/reference.md +168 -0
  70. package/dist/docs/hooks/writing-hooks.md +1026 -0
  71. package/dist/docs/ide-integration/ide-companion-spec.md +267 -0
  72. package/dist/docs/ide-integration/index.md +202 -0
  73. package/dist/docs/index.md +147 -0
  74. package/dist/docs/integration-tests.md +211 -0
  75. package/dist/docs/issue-and-pr-automation.md +134 -0
  76. package/dist/docs/local-development.md +128 -0
  77. package/dist/docs/mermaid/context.mmd +103 -0
  78. package/dist/docs/mermaid/render-path.mmd +64 -0
  79. package/dist/docs/npm.md +62 -0
  80. package/dist/docs/quota-and-pricing.md +158 -0
  81. package/dist/docs/release-confidence.md +164 -0
  82. package/dist/docs/releases.md +540 -0
  83. package/dist/docs/sidebar.json +301 -0
  84. package/dist/docs/tools/file-system.md +217 -0
  85. package/dist/docs/tools/index.md +95 -0
  86. package/dist/docs/tools/mcp-server.md +1044 -0
  87. package/dist/docs/tools/memory.md +54 -0
  88. package/dist/docs/tools/shell.md +260 -0
  89. package/dist/docs/tools/todos.md +57 -0
  90. package/dist/docs/tools/web-fetch.md +59 -0
  91. package/dist/docs/tools/web-search.md +42 -0
  92. package/dist/docs/tos-privacy.md +96 -0
  93. package/dist/docs/troubleshooting.md +158 -0
  94. package/dist/index.d.ts +1 -1
  95. package/dist/index.js +1 -1
  96. package/dist/index.js.map +1 -1
  97. package/dist/src/agents/a2a-client-manager.d.ts +78 -0
  98. package/dist/src/agents/a2a-client-manager.js +295 -0
  99. package/dist/src/agents/a2a-client-manager.js.map +1 -0
  100. package/dist/src/agents/a2a-client-manager.test.d.ts +6 -0
  101. package/dist/src/agents/a2a-client-manager.test.js +237 -0
  102. package/dist/src/agents/a2a-client-manager.test.js.map +1 -0
  103. package/dist/src/agents/a2aUtils.d.ts +28 -0
  104. package/dist/src/agents/a2aUtils.js +111 -0
  105. package/dist/src/agents/a2aUtils.js.map +1 -0
  106. package/dist/src/agents/a2aUtils.test.d.ts +6 -0
  107. package/dist/src/agents/a2aUtils.test.js +147 -0
  108. package/dist/src/agents/a2aUtils.test.js.map +1 -0
  109. package/dist/src/agents/codebase-investigator.d.ts +2 -2
  110. package/dist/src/agents/codebase-investigator.js +5 -4
  111. package/dist/src/agents/codebase-investigator.js.map +1 -1
  112. package/dist/src/agents/delegate-to-agent-tool.d.ts +19 -0
  113. package/dist/src/agents/delegate-to-agent-tool.js +115 -0
  114. package/dist/src/agents/delegate-to-agent-tool.js.map +1 -0
  115. package/dist/src/agents/delegate-to-agent-tool.test.d.ts +6 -0
  116. package/dist/src/agents/delegate-to-agent-tool.test.js +165 -0
  117. package/dist/src/agents/delegate-to-agent-tool.test.js.map +1 -0
  118. package/dist/src/agents/introspection-agent.d.ts +23 -0
  119. package/dist/src/agents/introspection-agent.js +72 -0
  120. package/dist/src/agents/introspection-agent.js.map +1 -0
  121. package/dist/src/agents/introspection-agent.test.d.ts +6 -0
  122. package/dist/src/agents/introspection-agent.test.js +47 -0
  123. package/dist/src/agents/introspection-agent.test.js.map +1 -0
  124. package/dist/src/agents/local-executor.d.ts +108 -0
  125. package/dist/src/agents/local-executor.js +801 -0
  126. package/dist/src/agents/local-executor.js.map +1 -0
  127. package/dist/src/agents/local-executor.test.d.ts +6 -0
  128. package/dist/src/agents/local-executor.test.js +1380 -0
  129. package/dist/src/agents/local-executor.test.js.map +1 -0
  130. package/dist/src/agents/local-invocation.d.ts +45 -0
  131. package/dist/src/agents/local-invocation.js +101 -0
  132. package/dist/src/agents/local-invocation.js.map +1 -0
  133. package/dist/src/agents/local-invocation.test.d.ts +6 -0
  134. package/dist/src/agents/local-invocation.test.js +218 -0
  135. package/dist/src/agents/local-invocation.test.js.map +1 -0
  136. package/dist/src/agents/registry.d.ts +25 -1
  137. package/dist/src/agents/registry.js +149 -5
  138. package/dist/src/agents/registry.js.map +1 -1
  139. package/dist/src/agents/registry.test.js +247 -25
  140. package/dist/src/agents/registry.test.js.map +1 -1
  141. package/dist/src/agents/remote-invocation.d.ts +35 -0
  142. package/dist/src/agents/remote-invocation.js +129 -0
  143. package/dist/src/agents/remote-invocation.js.map +1 -0
  144. package/dist/src/agents/remote-invocation.test.d.ts +6 -0
  145. package/dist/src/agents/remote-invocation.test.js +201 -0
  146. package/dist/src/agents/remote-invocation.test.js.map +1 -0
  147. package/dist/src/agents/subagent-tool-wrapper.d.ts +2 -2
  148. package/dist/src/agents/subagent-tool-wrapper.js +11 -6
  149. package/dist/src/agents/subagent-tool-wrapper.js.map +1 -1
  150. package/dist/src/agents/subagent-tool-wrapper.test.js +25 -17
  151. package/dist/src/agents/subagent-tool-wrapper.test.js.map +1 -1
  152. package/dist/src/agents/toml-loader.d.ts +74 -0
  153. package/dist/src/agents/toml-loader.js +248 -0
  154. package/dist/src/agents/toml-loader.js.map +1 -0
  155. package/dist/src/agents/toml-loader.test.d.ts +6 -0
  156. package/dist/src/agents/toml-loader.test.js +309 -0
  157. package/dist/src/agents/toml-loader.test.js.map +1 -0
  158. package/dist/src/agents/types.d.ts +18 -4
  159. package/dist/src/availability/errorClassification.d.ts +7 -0
  160. package/dist/src/availability/errorClassification.js +20 -0
  161. package/dist/src/availability/errorClassification.js.map +1 -0
  162. package/dist/src/availability/modelAvailabilityService.d.ts +36 -0
  163. package/dist/src/availability/modelAvailabilityService.js +87 -0
  164. package/dist/src/availability/modelAvailabilityService.js.map +1 -0
  165. package/dist/src/availability/modelAvailabilityService.test.d.ts +6 -0
  166. package/dist/src/availability/modelAvailabilityService.test.js +140 -0
  167. package/dist/src/availability/modelAvailabilityService.test.js.map +1 -0
  168. package/dist/src/availability/modelPolicy.d.ts +49 -0
  169. package/dist/src/availability/modelPolicy.js +7 -0
  170. package/dist/src/availability/modelPolicy.js.map +1 -0
  171. package/dist/src/availability/policyCatalog.d.ts +23 -0
  172. package/dist/src/availability/policyCatalog.js +82 -0
  173. package/dist/src/availability/policyCatalog.js.map +1 -0
  174. package/dist/src/availability/policyCatalog.test.d.ts +6 -0
  175. package/dist/src/availability/policyCatalog.test.js +70 -0
  176. package/dist/src/availability/policyCatalog.test.js.map +1 -0
  177. package/dist/src/availability/policyHelpers.d.ts +52 -0
  178. package/dist/src/availability/policyHelpers.js +136 -0
  179. package/dist/src/availability/policyHelpers.js.map +1 -0
  180. package/dist/src/availability/policyHelpers.test.d.ts +6 -0
  181. package/dist/src/availability/policyHelpers.test.js +182 -0
  182. package/dist/src/availability/policyHelpers.test.js.map +1 -0
  183. package/dist/src/availability/testUtils.d.ts +10 -0
  184. package/dist/src/availability/testUtils.js +22 -0
  185. package/dist/src/availability/testUtils.js.map +1 -0
  186. package/dist/src/code_assist/experiments/client_metadata.js +3 -2
  187. package/dist/src/code_assist/experiments/client_metadata.js.map +1 -1
  188. package/dist/src/code_assist/experiments/client_metadata.test.js +7 -10
  189. package/dist/src/code_assist/experiments/client_metadata.test.js.map +1 -1
  190. package/dist/src/code_assist/experiments/experiments.js +2 -2
  191. package/dist/src/code_assist/experiments/experiments.js.map +1 -1
  192. package/dist/src/code_assist/oauth2.d.ts +2 -0
  193. package/dist/src/code_assist/oauth2.js +73 -17
  194. package/dist/src/code_assist/oauth2.js.map +1 -1
  195. package/dist/src/code_assist/oauth2.test.js +195 -18
  196. package/dist/src/code_assist/oauth2.test.js.map +1 -1
  197. package/dist/src/code_assist/server.d.ts +10 -1
  198. package/dist/src/code_assist/server.js +81 -15
  199. package/dist/src/code_assist/server.js.map +1 -1
  200. package/dist/src/code_assist/server.test.js +221 -25
  201. package/dist/src/code_assist/server.test.js.map +1 -1
  202. package/dist/src/code_assist/setup.js +6 -4
  203. package/dist/src/code_assist/setup.js.map +1 -1
  204. package/dist/src/code_assist/setup.test.js +63 -0
  205. package/dist/src/code_assist/setup.test.js.map +1 -1
  206. package/dist/src/code_assist/telemetry.d.ts +14 -0
  207. package/dist/src/code_assist/telemetry.js +156 -0
  208. package/dist/src/code_assist/telemetry.js.map +1 -0
  209. package/dist/src/code_assist/telemetry.test.d.ts +6 -0
  210. package/dist/src/code_assist/telemetry.test.js +300 -0
  211. package/dist/src/code_assist/telemetry.test.js.map +1 -0
  212. package/dist/src/code_assist/types.d.ts +84 -1
  213. package/dist/src/code_assist/types.js +21 -0
  214. package/dist/src/code_assist/types.js.map +1 -1
  215. package/dist/src/commands/init.d.ts +7 -0
  216. package/dist/src/commands/init.js +53 -0
  217. package/dist/src/commands/init.js.map +1 -0
  218. package/dist/src/commands/init.test.d.ts +6 -0
  219. package/dist/src/commands/init.test.js +25 -0
  220. package/dist/src/commands/init.test.js.map +1 -0
  221. package/dist/src/commands/restore.d.ts +9 -0
  222. package/dist/src/commands/restore.js +46 -0
  223. package/dist/src/commands/restore.js.map +1 -0
  224. package/dist/src/commands/restore.test.d.ts +6 -0
  225. package/dist/src/commands/restore.test.js +137 -0
  226. package/dist/src/commands/restore.test.js.map +1 -0
  227. package/dist/src/commands/types.d.ts +41 -0
  228. package/dist/src/commands/types.js +7 -0
  229. package/dist/src/commands/types.js.map +1 -0
  230. package/dist/src/config/config.d.ts +120 -23
  231. package/dist/src/config/config.js +336 -116
  232. package/dist/src/config/config.js.map +1 -1
  233. package/dist/src/config/config.test.js +373 -95
  234. package/dist/src/config/config.test.js.map +1 -1
  235. package/dist/src/config/defaultModelConfigs.js +46 -0
  236. package/dist/src/config/defaultModelConfigs.js.map +1 -1
  237. package/dist/src/config/flashFallback.test.js +11 -35
  238. package/dist/src/config/flashFallback.test.js.map +1 -1
  239. package/dist/src/config/models.d.ts +29 -15
  240. package/dist/src/config/models.js +78 -28
  241. package/dist/src/config/models.js.map +1 -1
  242. package/dist/src/config/models.test.js +91 -77
  243. package/dist/src/config/models.test.js.map +1 -1
  244. package/dist/src/config/storage.d.ts +4 -0
  245. package/dist/src/config/storage.js +12 -0
  246. package/dist/src/config/storage.js.map +1 -1
  247. package/dist/src/config/storage.test.js +16 -0
  248. package/dist/src/config/storage.test.js.map +1 -1
  249. package/dist/src/confirmation-bus/message-bus.d.ts +6 -0
  250. package/dist/src/confirmation-bus/message-bus.js +66 -3
  251. package/dist/src/confirmation-bus/message-bus.js.map +1 -1
  252. package/dist/src/confirmation-bus/types.d.ts +29 -2
  253. package/dist/src/confirmation-bus/types.js +3 -0
  254. package/dist/src/confirmation-bus/types.js.map +1 -1
  255. package/dist/src/core/baseLlmClient.d.ts +30 -2
  256. package/dist/src/core/baseLlmClient.js +107 -49
  257. package/dist/src/core/baseLlmClient.js.map +1 -1
  258. package/dist/src/core/baseLlmClient.test.js +271 -13
  259. package/dist/src/core/baseLlmClient.test.js.map +1 -1
  260. package/dist/src/core/client.d.ts +5 -1
  261. package/dist/src/core/client.js +241 -63
  262. package/dist/src/core/client.js.map +1 -1
  263. package/dist/src/core/client.test.js +462 -72
  264. package/dist/src/core/client.test.js.map +1 -1
  265. package/dist/src/core/clientHookTriggers.d.ts +36 -0
  266. package/dist/src/core/clientHookTriggers.js +76 -0
  267. package/dist/src/core/clientHookTriggers.js.map +1 -0
  268. package/dist/src/core/contentGenerator.js +17 -4
  269. package/dist/src/core/contentGenerator.js.map +1 -1
  270. package/dist/src/core/contentGenerator.test.js +132 -3
  271. package/dist/src/core/contentGenerator.test.js.map +1 -1
  272. package/dist/src/core/coreToolHookTriggers.d.ts +55 -0
  273. package/dist/src/core/coreToolHookTriggers.js +304 -0
  274. package/dist/src/core/coreToolHookTriggers.js.map +1 -0
  275. package/dist/src/core/coreToolHookTriggers.test.d.ts +6 -0
  276. package/dist/src/core/coreToolHookTriggers.test.js +191 -0
  277. package/dist/src/core/coreToolHookTriggers.test.js.map +1 -0
  278. package/dist/src/core/coreToolScheduler.d.ts +6 -85
  279. package/dist/src/core/coreToolScheduler.js +91 -274
  280. package/dist/src/core/coreToolScheduler.js.map +1 -1
  281. package/dist/src/core/coreToolScheduler.test.js +161 -346
  282. package/dist/src/core/coreToolScheduler.test.js.map +1 -1
  283. package/dist/src/core/geminiChat.js +132 -76
  284. package/dist/src/core/geminiChat.js.map +1 -1
  285. package/dist/src/core/geminiChat.test.js +240 -257
  286. package/dist/src/core/geminiChat.test.js.map +1 -1
  287. package/dist/src/core/geminiChatHookTriggers.d.ts +64 -0
  288. package/dist/src/core/geminiChatHookTriggers.js +136 -0
  289. package/dist/src/core/geminiChatHookTriggers.js.map +1 -0
  290. package/dist/src/core/geminiChat_network_retry.test.d.ts +6 -0
  291. package/dist/src/core/geminiChat_network_retry.test.js +196 -0
  292. package/dist/src/core/geminiChat_network_retry.test.js.map +1 -0
  293. package/dist/src/core/logger.js.map +1 -1
  294. package/dist/src/core/loggingContentGenerator.js +23 -6
  295. package/dist/src/core/loggingContentGenerator.js.map +1 -1
  296. package/dist/src/core/nonInteractiveToolExecutor.test.js +13 -8
  297. package/dist/src/core/nonInteractiveToolExecutor.test.js.map +1 -1
  298. package/dist/src/core/prompts.js +82 -26
  299. package/dist/src/core/prompts.js.map +1 -1
  300. package/dist/src/core/prompts.test.js +102 -3
  301. package/dist/src/core/prompts.test.js.map +1 -1
  302. package/dist/src/core/sessionHookTriggers.d.ts +29 -0
  303. package/dist/src/core/sessionHookTriggers.js +75 -0
  304. package/dist/src/core/sessionHookTriggers.js.map +1 -0
  305. package/dist/src/core/turn.d.ts +34 -21
  306. package/dist/src/core/turn.js +33 -13
  307. package/dist/src/core/turn.js.map +1 -1
  308. package/dist/src/core/turn.test.js +0 -5
  309. package/dist/src/core/turn.test.js.map +1 -1
  310. package/dist/src/fallback/handler.js +101 -93
  311. package/dist/src/fallback/handler.js.map +1 -1
  312. package/dist/src/fallback/handler.test.js +186 -173
  313. package/dist/src/fallback/handler.test.js.map +1 -1
  314. package/dist/src/fallback/types.d.ts +8 -0
  315. package/dist/src/generated/git-commit.d.ts +3 -3
  316. package/dist/src/generated/git-commit.js +3 -3
  317. package/dist/src/generated/git-commit.js.map +1 -1
  318. package/dist/src/hooks/hookAggregator.js +7 -0
  319. package/dist/src/hooks/hookAggregator.js.map +1 -1
  320. package/dist/src/hooks/hookEventHandler.d.ts +113 -0
  321. package/dist/src/hooks/hookEventHandler.js +571 -0
  322. package/dist/src/hooks/hookEventHandler.js.map +1 -0
  323. package/dist/src/hooks/hookEventHandler.test.d.ts +6 -0
  324. package/dist/src/hooks/hookEventHandler.test.js +461 -0
  325. package/dist/src/hooks/hookEventHandler.test.js.map +1 -0
  326. package/dist/src/hooks/hookPlanner.d.ts +1 -5
  327. package/dist/src/hooks/hookPlanner.js +2 -7
  328. package/dist/src/hooks/hookPlanner.js.map +1 -1
  329. package/dist/src/hooks/hookPlanner.test.js +62 -2
  330. package/dist/src/hooks/hookPlanner.test.js.map +1 -1
  331. package/dist/src/hooks/hookRegistry.d.ts +6 -18
  332. package/dist/src/hooks/hookRegistry.js +49 -35
  333. package/dist/src/hooks/hookRegistry.js.map +1 -1
  334. package/dist/src/hooks/hookRegistry.test.js +167 -8
  335. package/dist/src/hooks/hookRegistry.test.js.map +1 -1
  336. package/dist/src/hooks/hookRunner.d.ts +5 -3
  337. package/dist/src/hooks/hookRunner.js +74 -18
  338. package/dist/src/hooks/hookRunner.js.map +1 -1
  339. package/dist/src/hooks/hookRunner.test.js +174 -36
  340. package/dist/src/hooks/hookRunner.test.js.map +1 -1
  341. package/dist/src/hooks/hookSystem.d.ts +40 -0
  342. package/dist/src/hooks/hookSystem.js +65 -0
  343. package/dist/src/hooks/hookSystem.js.map +1 -0
  344. package/dist/src/hooks/hookSystem.test.d.ts +6 -0
  345. package/dist/src/hooks/hookSystem.test.js +319 -0
  346. package/dist/src/hooks/hookSystem.test.js.map +1 -0
  347. package/dist/src/hooks/index.d.ts +17 -0
  348. package/dist/src/hooks/index.js +18 -0
  349. package/dist/src/hooks/index.js.map +1 -0
  350. package/dist/src/hooks/trustedHooks.d.ts +28 -0
  351. package/dist/src/hooks/trustedHooks.js +90 -0
  352. package/dist/src/hooks/trustedHooks.js.map +1 -0
  353. package/dist/src/hooks/trustedHooks.test.d.ts +6 -0
  354. package/dist/src/hooks/trustedHooks.test.js +154 -0
  355. package/dist/src/hooks/trustedHooks.test.js.map +1 -0
  356. package/dist/src/hooks/types.d.ts +21 -11
  357. package/dist/src/hooks/types.js +31 -27
  358. package/dist/src/hooks/types.js.map +1 -1
  359. package/dist/src/hooks/types.test.js +5 -24
  360. package/dist/src/hooks/types.test.js.map +1 -1
  361. package/dist/src/ide/detect-ide.test.js +32 -1
  362. package/dist/src/ide/detect-ide.test.js.map +1 -1
  363. package/dist/src/ide/ide-client.js +9 -4
  364. package/dist/src/ide/ide-client.js.map +1 -1
  365. package/dist/src/ide/ide-client.test.js +17 -0
  366. package/dist/src/ide/ide-client.test.js.map +1 -1
  367. package/dist/src/ide/ide-installer.test.js +1 -1
  368. package/dist/src/ide/ide-installer.test.js.map +1 -1
  369. package/dist/src/ide/types.d.ts +4 -4
  370. package/dist/src/index.d.ts +17 -1
  371. package/dist/src/index.js +18 -2
  372. package/dist/src/index.js.map +1 -1
  373. package/dist/src/mcp/auth-provider.d.ts +16 -0
  374. package/dist/src/mcp/auth-provider.js +7 -0
  375. package/dist/src/mcp/auth-provider.js.map +1 -0
  376. package/dist/src/mcp/google-auth-provider.d.ts +10 -2
  377. package/dist/src/mcp/google-auth-provider.js +28 -0
  378. package/dist/src/mcp/google-auth-provider.js.map +1 -1
  379. package/dist/src/mcp/google-auth-provider.test.js +45 -0
  380. package/dist/src/mcp/google-auth-provider.test.js.map +1 -1
  381. package/dist/src/mcp/oauth-provider.js +6 -2
  382. package/dist/src/mcp/oauth-provider.js.map +1 -1
  383. package/dist/src/mcp/oauth-provider.test.js +4 -1
  384. package/dist/src/mcp/oauth-provider.test.js.map +1 -1
  385. package/dist/src/mcp/oauth-utils.d.ts +8 -1
  386. package/dist/src/mcp/oauth-utils.js +31 -2
  387. package/dist/src/mcp/oauth-utils.js.map +1 -1
  388. package/dist/src/mcp/oauth-utils.test.js +42 -0
  389. package/dist/src/mcp/oauth-utils.test.js.map +1 -1
  390. package/dist/src/mcp/sa-impersonation-provider.d.ts +2 -2
  391. package/dist/src/mcp/sa-impersonation-provider.js.map +1 -1
  392. package/dist/src/mcp/token-storage/hybrid-token-storage.js +1 -1
  393. package/dist/src/mcp/token-storage/hybrid-token-storage.js.map +1 -1
  394. package/dist/src/mcp/token-storage/keychain-token-storage.js +1 -1
  395. package/dist/src/mcp/token-storage/keychain-token-storage.js.map +1 -1
  396. package/dist/src/output/json-formatter.d.ts +2 -2
  397. package/dist/src/output/json-formatter.js +6 -3
  398. package/dist/src/output/json-formatter.js.map +1 -1
  399. package/dist/src/output/json-formatter.test.js +37 -9
  400. package/dist/src/output/json-formatter.test.js.map +1 -1
  401. package/dist/src/output/stream-json-formatter.js +6 -0
  402. package/dist/src/output/stream-json-formatter.js.map +1 -1
  403. package/dist/src/output/stream-json-formatter.test.js +98 -100
  404. package/dist/src/output/stream-json-formatter.test.js.map +1 -1
  405. package/dist/src/output/types.d.ts +3 -0
  406. package/dist/src/output/types.js.map +1 -1
  407. package/dist/src/policy/config.js +140 -15
  408. package/dist/src/policy/config.js.map +1 -1
  409. package/dist/src/policy/config.test.js +21 -0
  410. package/dist/src/policy/config.test.js.map +1 -1
  411. package/dist/src/policy/persistence.test.d.ts +6 -0
  412. package/dist/src/policy/persistence.test.js +154 -0
  413. package/dist/src/policy/persistence.test.js.map +1 -0
  414. package/dist/src/policy/policies/agent.toml +31 -0
  415. package/dist/src/policy/policies/read-only.toml +5 -0
  416. package/dist/src/policy/policies/write.toml +5 -0
  417. package/dist/src/policy/policies/yolo.toml +1 -0
  418. package/dist/src/policy/policy-engine.d.ts +30 -1
  419. package/dist/src/policy/policy-engine.js +192 -5
  420. package/dist/src/policy/policy-engine.js.map +1 -1
  421. package/dist/src/policy/policy-engine.test.js +520 -3
  422. package/dist/src/policy/policy-engine.test.js.map +1 -1
  423. package/dist/src/policy/policy-updater.test.d.ts +6 -0
  424. package/dist/src/policy/policy-updater.test.js +116 -0
  425. package/dist/src/policy/policy-updater.test.js.map +1 -0
  426. package/dist/src/policy/shell-safety.test.d.ts +6 -0
  427. package/dist/src/policy/shell-safety.test.js +75 -0
  428. package/dist/src/policy/shell-safety.test.js.map +1 -0
  429. package/dist/src/policy/toml-loader.d.ts +3 -5
  430. package/dist/src/policy/toml-loader.js +12 -60
  431. package/dist/src/policy/toml-loader.js.map +1 -1
  432. package/dist/src/policy/toml-loader.test.js +38 -7
  433. package/dist/src/policy/toml-loader.test.js.map +1 -1
  434. package/dist/src/policy/types.d.ts +72 -1
  435. package/dist/src/policy/types.js +21 -0
  436. package/dist/src/policy/types.js.map +1 -1
  437. package/dist/src/policy/utils.d.ts +21 -0
  438. package/dist/src/policy/utils.js +42 -0
  439. package/dist/src/policy/utils.js.map +1 -0
  440. package/dist/src/policy/utils.test.d.ts +6 -0
  441. package/dist/src/policy/utils.test.js +64 -0
  442. package/dist/src/policy/utils.test.js.map +1 -0
  443. package/dist/src/resources/resource-registry.d.ts +30 -0
  444. package/dist/src/resources/resource-registry.js +57 -0
  445. package/dist/src/resources/resource-registry.js.map +1 -0
  446. package/dist/src/resources/resource-registry.test.d.ts +6 -0
  447. package/dist/src/resources/resource-registry.test.js +54 -0
  448. package/dist/src/resources/resource-registry.test.js.map +1 -0
  449. package/dist/src/routing/modelRouterService.js +0 -15
  450. package/dist/src/routing/modelRouterService.js.map +1 -1
  451. package/dist/src/routing/modelRouterService.test.js +0 -62
  452. package/dist/src/routing/modelRouterService.test.js.map +1 -1
  453. package/dist/src/routing/strategies/classifierStrategy.js +10 -21
  454. package/dist/src/routing/strategies/classifierStrategy.js.map +1 -1
  455. package/dist/src/routing/strategies/classifierStrategy.test.js +2 -1
  456. package/dist/src/routing/strategies/classifierStrategy.test.js.map +1 -1
  457. package/dist/src/routing/strategies/compositeStrategy.js +4 -2
  458. package/dist/src/routing/strategies/compositeStrategy.js.map +1 -1
  459. package/dist/src/routing/strategies/compositeStrategy.test.js +11 -10
  460. package/dist/src/routing/strategies/compositeStrategy.test.js.map +1 -1
  461. package/dist/src/routing/strategies/fallbackStrategy.js +20 -12
  462. package/dist/src/routing/strategies/fallbackStrategy.js.map +1 -1
  463. package/dist/src/routing/strategies/fallbackStrategy.test.js +63 -39
  464. package/dist/src/routing/strategies/fallbackStrategy.test.js.map +1 -1
  465. package/dist/src/routing/strategies/overrideStrategy.js +3 -2
  466. package/dist/src/routing/strategies/overrideStrategy.js.map +1 -1
  467. package/dist/src/safety/checker-runner.js +17 -6
  468. package/dist/src/safety/checker-runner.js.map +1 -1
  469. package/dist/src/scheduler/tool-executor.d.ts +22 -0
  470. package/dist/src/scheduler/tool-executor.js +198 -0
  471. package/dist/src/scheduler/tool-executor.js.map +1 -0
  472. package/dist/src/scheduler/tool-executor.test.d.ts +6 -0
  473. package/dist/src/scheduler/tool-executor.test.js +231 -0
  474. package/dist/src/scheduler/tool-executor.test.js.map +1 -0
  475. package/dist/src/scheduler/types.d.ts +95 -0
  476. package/dist/src/scheduler/types.js +7 -0
  477. package/dist/src/scheduler/types.js.map +1 -0
  478. package/dist/src/services/chatCompressionService.d.ts +1 -0
  479. package/dist/src/services/chatCompressionService.js +38 -8
  480. package/dist/src/services/chatCompressionService.js.map +1 -1
  481. package/dist/src/services/chatCompressionService.test.js +35 -31
  482. package/dist/src/services/chatCompressionService.test.js.map +1 -1
  483. package/dist/src/services/chatRecordingService.d.ts +14 -0
  484. package/dist/src/services/chatRecordingService.js +37 -0
  485. package/dist/src/services/chatRecordingService.js.map +1 -1
  486. package/dist/src/services/contextManager.d.ts +29 -0
  487. package/dist/src/services/contextManager.js +71 -0
  488. package/dist/src/services/contextManager.js.map +1 -0
  489. package/dist/src/services/contextManager.test.d.ts +6 -0
  490. package/dist/src/services/contextManager.test.js +104 -0
  491. package/dist/src/services/contextManager.test.js.map +1 -0
  492. package/dist/src/services/environmentSanitization.d.ts +15 -0
  493. package/dist/src/services/environmentSanitization.js +141 -0
  494. package/dist/src/services/environmentSanitization.js.map +1 -0
  495. package/dist/src/services/environmentSanitization.test.d.ts +6 -0
  496. package/dist/src/services/environmentSanitization.test.js +284 -0
  497. package/dist/src/services/environmentSanitization.test.js.map +1 -0
  498. package/dist/src/services/fileSystemService.d.ts +0 -9
  499. package/dist/src/services/fileSystemService.js +0 -11
  500. package/dist/src/services/fileSystemService.js.map +1 -1
  501. package/dist/src/services/gitService.js +18 -2
  502. package/dist/src/services/gitService.js.map +1 -1
  503. package/dist/src/services/gitService.test.js +56 -0
  504. package/dist/src/services/gitService.test.js.map +1 -1
  505. package/dist/src/services/loopDetectionService.js +5 -4
  506. package/dist/src/services/loopDetectionService.js.map +1 -1
  507. package/dist/src/services/loopDetectionService.test.js +14 -8
  508. package/dist/src/services/loopDetectionService.test.js.map +1 -1
  509. package/dist/src/services/modelConfig.golden.test.js +32 -0
  510. package/dist/src/services/modelConfig.golden.test.js.map +1 -1
  511. package/dist/src/services/modelConfig.integration.test.js +1 -1
  512. package/dist/src/services/modelConfig.integration.test.js.map +1 -1
  513. package/dist/src/services/modelConfigService.d.ts +4 -0
  514. package/dist/src/services/modelConfigService.js +8 -3
  515. package/dist/src/services/modelConfigService.js.map +1 -1
  516. package/dist/src/services/modelConfigService.test.js +221 -0
  517. package/dist/src/services/modelConfigService.test.js.map +1 -1
  518. package/dist/src/services/modelConfigServiceTestUtils.d.ts +10 -0
  519. package/dist/src/services/modelConfigServiceTestUtils.js +17 -0
  520. package/dist/src/services/modelConfigServiceTestUtils.js.map +1 -0
  521. package/dist/src/services/sessionSummaryService.d.ts +28 -0
  522. package/dist/src/services/sessionSummaryService.js +131 -0
  523. package/dist/src/services/sessionSummaryService.js.map +1 -0
  524. package/dist/src/services/sessionSummaryService.test.d.ts +6 -0
  525. package/dist/src/services/sessionSummaryService.test.js +785 -0
  526. package/dist/src/services/sessionSummaryService.test.js.map +1 -0
  527. package/dist/src/services/sessionSummaryUtils.d.ts +16 -0
  528. package/dist/src/services/sessionSummaryUtils.js +129 -0
  529. package/dist/src/services/sessionSummaryUtils.js.map +1 -0
  530. package/dist/src/services/sessionSummaryUtils.test.d.ts +6 -0
  531. package/dist/src/services/sessionSummaryUtils.test.js +137 -0
  532. package/dist/src/services/sessionSummaryUtils.test.js.map +1 -0
  533. package/dist/src/services/shellExecutionService.d.ts +4 -0
  534. package/dist/src/services/shellExecutionService.js +45 -27
  535. package/dist/src/services/shellExecutionService.js.map +1 -1
  536. package/dist/src/services/shellExecutionService.test.js +240 -8
  537. package/dist/src/services/shellExecutionService.test.js.map +1 -1
  538. package/dist/src/services/test-data/resolved-aliases-retry.golden.json +238 -0
  539. package/dist/src/services/test-data/resolved-aliases.golden.json +36 -0
  540. package/dist/src/skills/skillLoader.d.ts +28 -0
  541. package/dist/src/skills/skillLoader.js +77 -0
  542. package/dist/src/skills/skillLoader.js.map +1 -0
  543. package/dist/src/skills/skillLoader.test.d.ts +1 -0
  544. package/dist/src/skills/skillLoader.test.js +2 -0
  545. package/dist/src/skills/skillLoader.test.js.map +1 -0
  546. package/dist/src/skills/skillManager.d.ts +51 -0
  547. package/dist/src/skills/skillManager.js +89 -0
  548. package/dist/src/skills/skillManager.js.map +1 -0
  549. package/dist/src/skills/skillManager.test.d.ts +6 -0
  550. package/dist/src/skills/skillManager.test.js +128 -0
  551. package/dist/src/skills/skillManager.test.js.map +1 -0
  552. package/dist/src/telemetry/activity-detector.test.js.map +1 -1
  553. package/dist/src/telemetry/clearcut-logger/clearcut-logger.d.ts +11 -7
  554. package/dist/src/telemetry/clearcut-logger/clearcut-logger.js +127 -47
  555. package/dist/src/telemetry/clearcut-logger/clearcut-logger.js.map +1 -1
  556. package/dist/src/telemetry/clearcut-logger/clearcut-logger.test.js +105 -18
  557. package/dist/src/telemetry/clearcut-logger/clearcut-logger.test.js.map +1 -1
  558. package/dist/src/telemetry/clearcut-logger/event-metadata-key.d.ts +9 -3
  559. package/dist/src/telemetry/clearcut-logger/event-metadata-key.js +20 -5
  560. package/dist/src/telemetry/clearcut-logger/event-metadata-key.js.map +1 -1
  561. package/dist/src/telemetry/config.js +2 -0
  562. package/dist/src/telemetry/config.js.map +1 -1
  563. package/dist/src/telemetry/config.test.js +25 -0
  564. package/dist/src/telemetry/config.test.js.map +1 -1
  565. package/dist/src/telemetry/gcp-exporters.d.ts +4 -3
  566. package/dist/src/telemetry/gcp-exporters.js +8 -4
  567. package/dist/src/telemetry/gcp-exporters.js.map +1 -1
  568. package/dist/src/telemetry/index.d.ts +2 -1
  569. package/dist/src/telemetry/index.js +2 -1
  570. package/dist/src/telemetry/index.js.map +1 -1
  571. package/dist/src/telemetry/loggers.d.ts +5 -3
  572. package/dist/src/telemetry/loggers.js +353 -334
  573. package/dist/src/telemetry/loggers.js.map +1 -1
  574. package/dist/src/telemetry/loggers.test.circular.js +1 -0
  575. package/dist/src/telemetry/loggers.test.circular.js.map +1 -1
  576. package/dist/src/telemetry/loggers.test.js +238 -31
  577. package/dist/src/telemetry/loggers.test.js.map +1 -1
  578. package/dist/src/telemetry/metrics.d.ts +22 -0
  579. package/dist/src/telemetry/metrics.js +32 -0
  580. package/dist/src/telemetry/metrics.js.map +1 -1
  581. package/dist/src/telemetry/metrics.test.js +64 -0
  582. package/dist/src/telemetry/metrics.test.js.map +1 -1
  583. package/dist/src/telemetry/sanitize.d.ts +25 -0
  584. package/dist/src/telemetry/sanitize.js +48 -0
  585. package/dist/src/telemetry/sanitize.js.map +1 -0
  586. package/dist/src/telemetry/sanitize.test.d.ts +6 -0
  587. package/dist/src/telemetry/sanitize.test.js +279 -0
  588. package/dist/src/telemetry/sanitize.test.js.map +1 -0
  589. package/dist/src/telemetry/sdk.d.ts +9 -2
  590. package/dist/src/telemetry/sdk.js +142 -17
  591. package/dist/src/telemetry/sdk.js.map +1 -1
  592. package/dist/src/telemetry/sdk.test.js +130 -28
  593. package/dist/src/telemetry/sdk.test.js.map +1 -1
  594. package/dist/src/telemetry/semantic.js +1 -1
  595. package/dist/src/telemetry/semantic.js.map +1 -1
  596. package/dist/src/telemetry/startupProfiler.d.ts +51 -0
  597. package/dist/src/telemetry/startupProfiler.js +170 -0
  598. package/dist/src/telemetry/startupProfiler.js.map +1 -0
  599. package/dist/src/telemetry/startupProfiler.test.d.ts +6 -0
  600. package/dist/src/telemetry/startupProfiler.test.js +285 -0
  601. package/dist/src/telemetry/startupProfiler.test.js.map +1 -0
  602. package/dist/src/telemetry/telemetry.test.js +10 -3
  603. package/dist/src/telemetry/telemetry.test.js.map +1 -1
  604. package/dist/src/telemetry/trace.js +2 -2
  605. package/dist/src/telemetry/trace.js.map +1 -1
  606. package/dist/src/telemetry/types.d.ts +62 -16
  607. package/dist/src/telemetry/types.js +157 -27
  608. package/dist/src/telemetry/types.js.map +1 -1
  609. package/dist/src/telemetry/uiTelemetry.d.ts +1 -0
  610. package/dist/src/telemetry/uiTelemetry.js +2 -0
  611. package/dist/src/telemetry/uiTelemetry.js.map +1 -1
  612. package/dist/src/telemetry/uiTelemetry.test.js +4 -0
  613. package/dist/src/telemetry/uiTelemetry.test.js.map +1 -1
  614. package/dist/src/test-utils/mock-message-bus.d.ts +61 -0
  615. package/dist/src/test-utils/mock-message-bus.js +160 -0
  616. package/dist/src/test-utils/mock-message-bus.js.map +1 -0
  617. package/dist/src/test-utils/mock-tool.d.ts +5 -3
  618. package/dist/src/test-utils/mock-tool.js +12 -11
  619. package/dist/src/test-utils/mock-tool.js.map +1 -1
  620. package/dist/src/tools/activate-skill.d.ts +27 -0
  621. package/dist/src/tools/activate-skill.js +120 -0
  622. package/dist/src/tools/activate-skill.js.map +1 -0
  623. package/dist/src/tools/activate-skill.test.d.ts +6 -0
  624. package/dist/src/tools/activate-skill.test.js +95 -0
  625. package/dist/src/tools/activate-skill.test.js.map +1 -0
  626. package/dist/src/tools/confirmation-policy.test.d.ts +6 -0
  627. package/dist/src/tools/confirmation-policy.test.js +142 -0
  628. package/dist/src/tools/confirmation-policy.test.js.map +1 -0
  629. package/dist/src/tools/edit.d.ts +27 -5
  630. package/dist/src/tools/edit.js +449 -137
  631. package/dist/src/tools/edit.js.map +1 -1
  632. package/dist/src/tools/edit.test.js +258 -526
  633. package/dist/src/tools/edit.test.js.map +1 -1
  634. package/dist/src/tools/get-internal-docs.d.ts +27 -0
  635. package/dist/src/tools/get-internal-docs.js +129 -0
  636. package/dist/src/tools/get-internal-docs.js.map +1 -0
  637. package/dist/src/tools/get-internal-docs.test.d.ts +6 -0
  638. package/dist/src/tools/get-internal-docs.test.js +57 -0
  639. package/dist/src/tools/get-internal-docs.test.js.map +1 -0
  640. package/dist/src/tools/glob.d.ts +2 -2
  641. package/dist/src/tools/glob.js +1 -1
  642. package/dist/src/tools/glob.js.map +1 -1
  643. package/dist/src/tools/glob.test.js +2 -1
  644. package/dist/src/tools/glob.test.js.map +1 -1
  645. package/dist/src/tools/grep.d.ts +2 -2
  646. package/dist/src/tools/grep.js +1 -1
  647. package/dist/src/tools/grep.js.map +1 -1
  648. package/dist/src/tools/grep.test.js +5 -4
  649. package/dist/src/tools/grep.test.js.map +1 -1
  650. package/dist/src/tools/ls.d.ts +2 -2
  651. package/dist/src/tools/ls.js +2 -2
  652. package/dist/src/tools/ls.js.map +1 -1
  653. package/dist/src/tools/ls.test.js +2 -1
  654. package/dist/src/tools/ls.test.js.map +1 -1
  655. package/dist/src/tools/mcp-client-manager.d.ts +3 -1
  656. package/dist/src/tools/mcp-client-manager.js +42 -9
  657. package/dist/src/tools/mcp-client-manager.js.map +1 -1
  658. package/dist/src/tools/mcp-client-manager.test.js +66 -10
  659. package/dist/src/tools/mcp-client-manager.test.js.map +1 -1
  660. package/dist/src/tools/mcp-client.d.ts +44 -6
  661. package/dist/src/tools/mcp-client.js +476 -176
  662. package/dist/src/tools/mcp-client.js.map +1 -1
  663. package/dist/src/tools/mcp-client.test.js +633 -36
  664. package/dist/src/tools/mcp-client.test.js.map +1 -1
  665. package/dist/src/tools/mcp-tool.d.ts +2 -2
  666. package/dist/src/tools/mcp-tool.js +20 -7
  667. package/dist/src/tools/mcp-tool.js.map +1 -1
  668. package/dist/src/tools/mcp-tool.test.js +35 -5
  669. package/dist/src/tools/mcp-tool.test.js.map +1 -1
  670. package/dist/src/tools/memoryTool.d.ts +3 -3
  671. package/dist/src/tools/memoryTool.js +3 -4
  672. package/dist/src/tools/memoryTool.js.map +1 -1
  673. package/dist/src/tools/memoryTool.test.js +5 -2
  674. package/dist/src/tools/memoryTool.test.js.map +1 -1
  675. package/dist/src/tools/message-bus-integration.test.js +10 -37
  676. package/dist/src/tools/message-bus-integration.test.js.map +1 -1
  677. package/dist/src/tools/modifiable-tool.js.map +1 -1
  678. package/dist/src/tools/modifiable-tool.test.js +22 -13
  679. package/dist/src/tools/modifiable-tool.test.js.map +1 -1
  680. package/dist/src/tools/read-file.d.ts +2 -2
  681. package/dist/src/tools/read-file.js +2 -2
  682. package/dist/src/tools/read-file.js.map +1 -1
  683. package/dist/src/tools/read-file.test.js +3 -2
  684. package/dist/src/tools/read-file.test.js.map +1 -1
  685. package/dist/src/tools/read-many-files.d.ts +2 -2
  686. package/dist/src/tools/read-many-files.js +7 -6
  687. package/dist/src/tools/read-many-files.js.map +1 -1
  688. package/dist/src/tools/read-many-files.test.js +4 -3
  689. package/dist/src/tools/read-many-files.test.js.map +1 -1
  690. package/dist/src/tools/ripGrep.d.ts +3 -2
  691. package/dist/src/tools/ripGrep.js +18 -7
  692. package/dist/src/tools/ripGrep.js.map +1 -1
  693. package/dist/src/tools/ripGrep.test.js +60 -4
  694. package/dist/src/tools/ripGrep.test.js.map +1 -1
  695. package/dist/src/tools/shell.d.ts +5 -7
  696. package/dist/src/tools/shell.js +77 -51
  697. package/dist/src/tools/shell.js.map +1 -1
  698. package/dist/src/tools/shell.test.js +59 -63
  699. package/dist/src/tools/shell.test.js.map +1 -1
  700. package/dist/src/tools/tool-error.d.ts +2 -1
  701. package/dist/src/tools/tool-error.js +2 -0
  702. package/dist/src/tools/tool-error.js.map +1 -1
  703. package/dist/src/tools/tool-names.d.ts +17 -0
  704. package/dist/src/tools/tool-names.js +59 -0
  705. package/dist/src/tools/tool-names.js.map +1 -1
  706. package/dist/src/tools/tool-names.test.d.ts +6 -0
  707. package/dist/src/tools/tool-names.test.js +43 -0
  708. package/dist/src/tools/tool-names.test.js.map +1 -0
  709. package/dist/src/tools/tool-registry.d.ts +11 -7
  710. package/dist/src/tools/tool-registry.js +15 -10
  711. package/dist/src/tools/tool-registry.js.map +1 -1
  712. package/dist/src/tools/tool-registry.test.js +16 -11
  713. package/dist/src/tools/tool-registry.test.js.map +1 -1
  714. package/dist/src/tools/tools.d.ts +25 -6
  715. package/dist/src/tools/tools.js +44 -25
  716. package/dist/src/tools/tools.js.map +1 -1
  717. package/dist/src/tools/tools.test.js +3 -1
  718. package/dist/src/tools/tools.test.js.map +1 -1
  719. package/dist/src/tools/web-fetch.d.ts +2 -2
  720. package/dist/src/tools/web-fetch.js +22 -9
  721. package/dist/src/tools/web-fetch.js.map +1 -1
  722. package/dist/src/tools/web-fetch.test.js +18 -19
  723. package/dist/src/tools/web-fetch.test.js.map +1 -1
  724. package/dist/src/tools/web-search.d.ts +2 -2
  725. package/dist/src/tools/web-search.js +5 -5
  726. package/dist/src/tools/web-search.js.map +1 -1
  727. package/dist/src/tools/web-search.test.js +2 -1
  728. package/dist/src/tools/web-search.test.js.map +1 -1
  729. package/dist/src/tools/write-file.d.ts +2 -2
  730. package/dist/src/tools/write-file.js +10 -4
  731. package/dist/src/tools/write-file.js.map +1 -1
  732. package/dist/src/tools/write-file.test.js +4 -1
  733. package/dist/src/tools/write-file.test.js.map +1 -1
  734. package/dist/src/tools/write-todos.d.ts +2 -2
  735. package/dist/src/tools/write-todos.js +5 -4
  736. package/dist/src/tools/write-todos.js.map +1 -1
  737. package/dist/src/tools/write-todos.test.js +2 -1
  738. package/dist/src/tools/write-todos.test.js.map +1 -1
  739. package/dist/src/utils/bfsFileSearch.d.ts +8 -0
  740. package/dist/src/utils/bfsFileSearch.js +63 -23
  741. package/dist/src/utils/bfsFileSearch.js.map +1 -1
  742. package/dist/src/utils/bfsFileSearch.test.js +65 -1
  743. package/dist/src/utils/bfsFileSearch.test.js.map +1 -1
  744. package/dist/src/utils/checkpointUtils.d.ts +82 -0
  745. package/dist/src/utils/checkpointUtils.js +117 -0
  746. package/dist/src/utils/checkpointUtils.js.map +1 -0
  747. package/dist/src/utils/checkpointUtils.test.d.ts +6 -0
  748. package/dist/src/utils/checkpointUtils.test.js +229 -0
  749. package/dist/src/utils/checkpointUtils.test.js.map +1 -0
  750. package/dist/src/utils/customHeaderUtils.d.ts +9 -0
  751. package/dist/src/utils/customHeaderUtils.js +34 -0
  752. package/dist/src/utils/customHeaderUtils.js.map +1 -0
  753. package/dist/src/utils/customHeaderUtils.test.d.ts +6 -0
  754. package/dist/src/utils/customHeaderUtils.test.js +77 -0
  755. package/dist/src/utils/customHeaderUtils.test.js.map +1 -0
  756. package/dist/src/utils/debugLogger.d.ts +3 -0
  757. package/dist/src/utils/debugLogger.js +28 -0
  758. package/dist/src/utils/debugLogger.js.map +1 -1
  759. package/dist/src/utils/editCorrector.js +6 -5
  760. package/dist/src/utils/editCorrector.js.map +1 -1
  761. package/dist/src/utils/editCorrector.test.js +7 -3
  762. package/dist/src/utils/editCorrector.test.js.map +1 -1
  763. package/dist/src/utils/editor.d.ts +9 -1
  764. package/dist/src/utils/editor.js +23 -14
  765. package/dist/src/utils/editor.js.map +1 -1
  766. package/dist/src/utils/environmentContext.d.ts +1 -0
  767. package/dist/src/utils/environmentContext.js +4 -0
  768. package/dist/src/utils/environmentContext.js.map +1 -1
  769. package/dist/src/utils/environmentContext.test.js +2 -0
  770. package/dist/src/utils/environmentContext.test.js.map +1 -1
  771. package/dist/src/utils/errorReporting.d.ts +1 -1
  772. package/dist/src/utils/errorReporting.js +13 -12
  773. package/dist/src/utils/errorReporting.js.map +1 -1
  774. package/dist/src/utils/errorReporting.test.js +17 -14
  775. package/dist/src/utils/errorReporting.test.js.map +1 -1
  776. package/dist/src/utils/errors.d.ts +8 -0
  777. package/dist/src/utils/errors.js +39 -2
  778. package/dist/src/utils/errors.js.map +1 -1
  779. package/dist/src/utils/errors.test.d.ts +6 -0
  780. package/dist/src/utils/errors.test.js +155 -0
  781. package/dist/src/utils/errors.test.js.map +1 -0
  782. package/dist/src/utils/events.d.ts +49 -19
  783. package/dist/src/utils/events.js +21 -9
  784. package/dist/src/utils/events.js.map +1 -1
  785. package/dist/src/utils/events.test.js +25 -0
  786. package/dist/src/utils/events.test.js.map +1 -1
  787. package/dist/src/utils/exitCodes.d.ts +12 -0
  788. package/dist/src/utils/exitCodes.js +13 -0
  789. package/dist/src/utils/exitCodes.js.map +1 -0
  790. package/dist/src/utils/extensionLoader.d.ts +2 -2
  791. package/dist/src/utils/extensionLoader.js +5 -6
  792. package/dist/src/utils/extensionLoader.js.map +1 -1
  793. package/dist/src/utils/extensionLoader.test.js +11 -0
  794. package/dist/src/utils/extensionLoader.test.js.map +1 -1
  795. package/dist/src/utils/fetch.d.ts +1 -1
  796. package/dist/src/utils/fetch.js +3 -3
  797. package/dist/src/utils/fetch.js.map +1 -1
  798. package/dist/src/utils/fileUtils.d.ts +4 -0
  799. package/dist/src/utils/fileUtils.js +53 -0
  800. package/dist/src/utils/fileUtils.js.map +1 -1
  801. package/dist/src/utils/fileUtils.test.js +127 -1
  802. package/dist/src/utils/fileUtils.test.js.map +1 -1
  803. package/dist/src/utils/filesearch/crawlCache.js.map +1 -1
  804. package/dist/src/utils/filesearch/fileSearch.js.map +1 -1
  805. package/dist/src/utils/flashFallback.test.js +1 -1
  806. package/dist/src/utils/flashFallback.test.js.map +1 -1
  807. package/dist/src/utils/geminiIgnoreParser.d.ts +11 -0
  808. package/dist/src/utils/geminiIgnoreParser.js +20 -0
  809. package/dist/src/utils/geminiIgnoreParser.js.map +1 -1
  810. package/dist/src/utils/geminiIgnoreParser.test.js +48 -0
  811. package/dist/src/utils/geminiIgnoreParser.test.js.map +1 -1
  812. package/dist/src/utils/generateContentResponseUtilities.d.ts +3 -1
  813. package/dist/src/utils/generateContentResponseUtilities.js +106 -0
  814. package/dist/src/utils/generateContentResponseUtilities.js.map +1 -1
  815. package/dist/src/utils/generateContentResponseUtilities.test.js +279 -2
  816. package/dist/src/utils/generateContentResponseUtilities.test.js.map +1 -1
  817. package/dist/src/utils/getFolderStructure.js +7 -2
  818. package/dist/src/utils/getFolderStructure.js.map +1 -1
  819. package/dist/src/utils/googleErrors.js +31 -18
  820. package/dist/src/utils/googleErrors.js.map +1 -1
  821. package/dist/src/utils/googleErrors.test.js +10 -2
  822. package/dist/src/utils/googleErrors.test.js.map +1 -1
  823. package/dist/src/utils/googleQuotaErrors.d.ts +3 -3
  824. package/dist/src/utils/googleQuotaErrors.js +32 -6
  825. package/dist/src/utils/googleQuotaErrors.js.map +1 -1
  826. package/dist/src/utils/googleQuotaErrors.test.js +94 -2
  827. package/dist/src/utils/googleQuotaErrors.test.js.map +1 -1
  828. package/dist/src/utils/memoryDiscovery.d.ts +5 -0
  829. package/dist/src/utils/memoryDiscovery.js +9 -5
  830. package/dist/src/utils/memoryDiscovery.js.map +1 -1
  831. package/dist/src/utils/memoryDiscovery.test.js +31 -1
  832. package/dist/src/utils/memoryDiscovery.test.js.map +1 -1
  833. package/dist/src/utils/nextSpeakerChecker.test.js +4 -0
  834. package/dist/src/utils/nextSpeakerChecker.test.js.map +1 -1
  835. package/dist/src/utils/package.d.ts +14 -0
  836. package/dist/src/utils/package.js +15 -2
  837. package/dist/src/utils/package.js.map +1 -1
  838. package/dist/src/utils/pathCorrector.js +12 -2
  839. package/dist/src/utils/pathCorrector.js.map +1 -1
  840. package/dist/src/utils/pathCorrector.test.js +6 -2
  841. package/dist/src/utils/pathCorrector.test.js.map +1 -1
  842. package/dist/src/utils/retry.d.ts +11 -0
  843. package/dist/src/utils/retry.js +62 -21
  844. package/dist/src/utils/retry.js.map +1 -1
  845. package/dist/src/utils/retry.test.js +170 -10
  846. package/dist/src/utils/retry.test.js.map +1 -1
  847. package/dist/src/utils/schemaValidator.d.ts +1 -1
  848. package/dist/src/utils/schemaValidator.js +1 -1
  849. package/dist/src/utils/shell-permissions.d.ts +52 -0
  850. package/dist/src/utils/shell-permissions.js +188 -0
  851. package/dist/src/utils/shell-permissions.js.map +1 -0
  852. package/dist/src/utils/shell-permissions.test.d.ts +6 -0
  853. package/dist/src/utils/shell-permissions.test.js +369 -0
  854. package/dist/src/utils/shell-permissions.test.js.map +1 -0
  855. package/dist/src/utils/shell-utils.d.ts +16 -47
  856. package/dist/src/utils/shell-utils.js +99 -195
  857. package/dist/src/utils/shell-utils.js.map +1 -1
  858. package/dist/src/utils/shell-utils.test.js +99 -288
  859. package/dist/src/utils/shell-utils.test.js.map +1 -1
  860. package/dist/src/utils/stdio.d.ts +2 -2
  861. package/dist/src/utils/stdio.js +2 -2
  862. package/dist/src/utils/stdio.js.map +1 -1
  863. package/dist/src/utils/stdio.test.js +5 -5
  864. package/dist/src/utils/stdio.test.js.map +1 -1
  865. package/dist/src/utils/summarizer.test.js +3 -2
  866. package/dist/src/utils/summarizer.test.js.map +1 -1
  867. package/dist/src/utils/terminal.d.ts +4 -0
  868. package/dist/src/utils/terminal.js +12 -0
  869. package/dist/src/utils/terminal.js.map +1 -1
  870. package/dist/src/utils/terminalSerializer.test.js +17 -0
  871. package/dist/src/utils/terminalSerializer.test.js.map +1 -1
  872. package/dist/src/utils/tokenCalculation.d.ts +19 -0
  873. package/dist/src/utils/tokenCalculation.js +85 -0
  874. package/dist/src/utils/tokenCalculation.js.map +1 -0
  875. package/dist/src/utils/tokenCalculation.test.d.ts +6 -0
  876. package/dist/src/utils/tokenCalculation.test.js +87 -0
  877. package/dist/src/utils/tokenCalculation.test.js.map +1 -0
  878. package/dist/src/utils/tool-utils.d.ts +9 -0
  879. package/dist/src/utils/tool-utils.js +29 -0
  880. package/dist/src/utils/tool-utils.js.map +1 -1
  881. package/dist/src/utils/tool-utils.test.js +17 -2
  882. package/dist/src/utils/tool-utils.test.js.map +1 -1
  883. package/dist/src/utils/version.d.ts +6 -0
  884. package/dist/src/utils/version.js +15 -0
  885. package/dist/src/utils/version.js.map +1 -0
  886. package/dist/src/utils/version.test.d.ts +6 -0
  887. package/dist/src/utils/version.test.js +39 -0
  888. package/dist/src/utils/version.test.js.map +1 -0
  889. package/dist/tsconfig.tsbuildinfo +1 -1
  890. package/package.json +8 -7
@@ -0,0 +1,801 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { reportError } from '../utils/errorReporting.js';
7
+ import { GeminiChat, StreamEventType } from '../core/geminiChat.js';
8
+ import { Type } from '@google/genai';
9
+ import { executeToolCall } from '../core/nonInteractiveToolExecutor.js';
10
+ import { ToolRegistry } from '../tools/tool-registry.js';
11
+ import { CompressionStatus } from '../core/turn.js';
12
+ import {} from '../scheduler/types.js';
13
+ import { ChatCompressionService } from '../services/chatCompressionService.js';
14
+ import { getDirectoryContextString } from '../utils/environmentContext.js';
15
+ import { promptIdContext } from '../utils/promptIdContext.js';
16
+ import { logAgentStart, logAgentFinish, logRecoveryAttempt, } from '../telemetry/loggers.js';
17
+ import { AgentStartEvent, AgentFinishEvent, RecoveryAttemptEvent, } from '../telemetry/types.js';
18
+ import { AgentTerminateMode } from './types.js';
19
+ import { templateString } from './utils.js';
20
+ import { parseThought } from '../utils/thoughtUtils.js';
21
+ import {} from 'zod';
22
+ import { zodToJsonSchema } from 'zod-to-json-schema';
23
+ import { debugLogger } from '../utils/debugLogger.js';
24
+ import { getModelConfigAlias } from './registry.js';
25
+ import { getVersion } from '../utils/version.js';
26
+ import { ApprovalMode } from '../policy/types.js';
27
+ const TASK_COMPLETE_TOOL_NAME = 'complete_task';
28
+ const GRACE_PERIOD_MS = 60 * 1000; // 1 min
29
+ /**
30
+ * Executes an agent loop based on an {@link AgentDefinition}.
31
+ *
32
+ * This executor runs the agent in a loop, calling tools until it calls the
33
+ * mandatory `complete_task` tool to signal completion.
34
+ */
35
+ export class LocalAgentExecutor {
36
+ definition;
37
+ agentId;
38
+ toolRegistry;
39
+ runtimeContext;
40
+ onActivity;
41
+ compressionService;
42
+ hasFailedCompressionAttempt = false;
43
+ /**
44
+ * Creates and validates a new `AgentExecutor` instance.
45
+ *
46
+ * This method ensures that all tools specified in the agent's definition are
47
+ * safe for non-interactive use before creating the executor.
48
+ *
49
+ * @param definition The definition object for the agent.
50
+ * @param runtimeContext The global runtime configuration.
51
+ * @param onActivity An optional callback to receive activity events.
52
+ * @returns A promise that resolves to a new `LocalAgentExecutor` instance.
53
+ */
54
+ static async create(definition, runtimeContext, onActivity) {
55
+ // Create an isolated tool registry for this agent instance.
56
+ const agentToolRegistry = new ToolRegistry(runtimeContext, runtimeContext.getMessageBus());
57
+ const parentToolRegistry = runtimeContext.getToolRegistry();
58
+ if (definition.toolConfig) {
59
+ for (const toolRef of definition.toolConfig.tools) {
60
+ if (typeof toolRef === 'string') {
61
+ // If the tool is referenced by name, retrieve it from the parent
62
+ // registry and register it with the agent's isolated registry.
63
+ const toolFromParent = parentToolRegistry.getTool(toolRef);
64
+ if (toolFromParent) {
65
+ agentToolRegistry.registerTool(toolFromParent);
66
+ }
67
+ }
68
+ else if (typeof toolRef === 'object' &&
69
+ 'name' in toolRef &&
70
+ 'build' in toolRef) {
71
+ agentToolRegistry.registerTool(toolRef);
72
+ }
73
+ // Note: Raw `FunctionDeclaration` objects in the config don't need to be
74
+ // registered; their schemas are passed directly to the model later.
75
+ }
76
+ agentToolRegistry.sortTools();
77
+ }
78
+ // Get the parent prompt ID from context
79
+ const parentPromptId = promptIdContext.getStore();
80
+ return new LocalAgentExecutor(definition, runtimeContext, agentToolRegistry, parentPromptId, onActivity);
81
+ }
82
+ /**
83
+ * Constructs a new AgentExecutor instance.
84
+ *
85
+ * @private This constructor is private. Use the static `create` method to
86
+ * instantiate the class.
87
+ */
88
+ constructor(definition, runtimeContext, toolRegistry, parentPromptId, onActivity) {
89
+ this.definition = definition;
90
+ this.runtimeContext = runtimeContext;
91
+ this.toolRegistry = toolRegistry;
92
+ this.onActivity = onActivity;
93
+ this.compressionService = new ChatCompressionService();
94
+ const randomIdPart = Math.random().toString(36).slice(2, 8);
95
+ // parentPromptId will be undefined if this agent is invoked directly
96
+ // (top-level), rather than as a sub-agent.
97
+ const parentPrefix = parentPromptId ? `${parentPromptId}-` : '';
98
+ this.agentId = `${parentPrefix}${this.definition.name}-${randomIdPart}`;
99
+ }
100
+ /**
101
+ * Executes a single turn of the agent's logic, from calling the model
102
+ * to processing its response.
103
+ *
104
+ * @returns An {@link AgentTurnResult} object indicating whether to continue
105
+ * or stop the agent loop.
106
+ */
107
+ async executeTurn(chat, currentMessage, turnCounter, combinedSignal, timeoutSignal) {
108
+ const promptId = `${this.agentId}#${turnCounter}`;
109
+ await this.tryCompressChat(chat, promptId);
110
+ const { functionCalls } = await promptIdContext.run(promptId, async () => this.callModel(chat, currentMessage, combinedSignal, promptId));
111
+ if (combinedSignal.aborted) {
112
+ const terminateReason = timeoutSignal.aborted
113
+ ? AgentTerminateMode.TIMEOUT
114
+ : AgentTerminateMode.ABORTED;
115
+ return {
116
+ status: 'stop',
117
+ terminateReason,
118
+ finalResult: null, // 'run' method will set the final timeout string
119
+ };
120
+ }
121
+ // If the model stops calling tools without calling complete_task, it's an error.
122
+ if (functionCalls.length === 0) {
123
+ this.emitActivity('ERROR', {
124
+ error: `Agent stopped calling tools but did not call '${TASK_COMPLETE_TOOL_NAME}' to finalize the session.`,
125
+ context: 'protocol_violation',
126
+ });
127
+ return {
128
+ status: 'stop',
129
+ terminateReason: AgentTerminateMode.ERROR_NO_COMPLETE_TASK_CALL,
130
+ finalResult: null,
131
+ };
132
+ }
133
+ const { nextMessage, submittedOutput, taskCompleted } = await this.processFunctionCalls(functionCalls, combinedSignal, promptId);
134
+ if (taskCompleted) {
135
+ const finalResult = submittedOutput ?? 'Task completed successfully.';
136
+ return {
137
+ status: 'stop',
138
+ terminateReason: AgentTerminateMode.GOAL,
139
+ finalResult,
140
+ };
141
+ }
142
+ // Task is not complete, continue to the next turn.
143
+ return {
144
+ status: 'continue',
145
+ nextMessage,
146
+ };
147
+ }
148
+ /**
149
+ * Generates a specific warning message for the agent's final turn.
150
+ */
151
+ getFinalWarningMessage(reason) {
152
+ let explanation = '';
153
+ switch (reason) {
154
+ case AgentTerminateMode.TIMEOUT:
155
+ explanation = 'You have exceeded the time limit.';
156
+ break;
157
+ case AgentTerminateMode.MAX_TURNS:
158
+ explanation = 'You have exceeded the maximum number of turns.';
159
+ break;
160
+ case AgentTerminateMode.ERROR_NO_COMPLETE_TASK_CALL:
161
+ explanation = 'You have stopped calling tools without finishing.';
162
+ break;
163
+ default:
164
+ throw new Error(`Unknown terminate reason: ${reason}`);
165
+ }
166
+ return `${explanation} You have one final chance to complete the task with a short grace period. You MUST call \`${TASK_COMPLETE_TOOL_NAME}\` immediately with your best answer and explain that your investigation was interrupted. Do not call any other tools.`;
167
+ }
168
+ /**
169
+ * Attempts a single, final recovery turn if the agent stops for a recoverable reason.
170
+ * Gives the agent a grace period to call `complete_task`.
171
+ *
172
+ * @returns The final result string if recovery was successful, or `null` if it failed.
173
+ */
174
+ async executeFinalWarningTurn(chat, turnCounter, reason, externalSignal) {
175
+ this.emitActivity('THOUGHT_CHUNK', {
176
+ text: `Execution limit reached (${reason}). Attempting one final recovery turn with a grace period.`,
177
+ });
178
+ const recoveryStartTime = Date.now();
179
+ let success = false;
180
+ const gracePeriodMs = GRACE_PERIOD_MS;
181
+ const graceTimeoutController = new AbortController();
182
+ const graceTimeoutId = setTimeout(() => graceTimeoutController.abort(new Error('Grace period timed out.')), gracePeriodMs);
183
+ try {
184
+ const recoveryMessage = {
185
+ role: 'user',
186
+ parts: [{ text: this.getFinalWarningMessage(reason) }],
187
+ };
188
+ // We monitor both the external signal and our new grace period timeout
189
+ const combinedSignal = AbortSignal.any([
190
+ externalSignal,
191
+ graceTimeoutController.signal,
192
+ ]);
193
+ const turnResult = await this.executeTurn(chat, recoveryMessage, turnCounter, // This will be the "last" turn number
194
+ combinedSignal, graceTimeoutController.signal);
195
+ if (turnResult.status === 'stop' &&
196
+ turnResult.terminateReason === AgentTerminateMode.GOAL) {
197
+ // Success!
198
+ this.emitActivity('THOUGHT_CHUNK', {
199
+ text: 'Graceful recovery succeeded.',
200
+ });
201
+ success = true;
202
+ return turnResult.finalResult ?? 'Task completed during grace period.';
203
+ }
204
+ // Any other outcome (continue, error, non-GOAL stop) is a failure.
205
+ this.emitActivity('ERROR', {
206
+ error: `Graceful recovery attempt failed. Reason: ${turnResult.status}`,
207
+ context: 'recovery_turn',
208
+ });
209
+ return null;
210
+ }
211
+ catch (error) {
212
+ // This catch block will likely catch the 'Grace period timed out' error.
213
+ this.emitActivity('ERROR', {
214
+ error: `Graceful recovery attempt failed: ${String(error)}`,
215
+ context: 'recovery_turn',
216
+ });
217
+ return null;
218
+ }
219
+ finally {
220
+ clearTimeout(graceTimeoutId);
221
+ logRecoveryAttempt(this.runtimeContext, new RecoveryAttemptEvent(this.agentId, this.definition.name, reason, Date.now() - recoveryStartTime, success, turnCounter));
222
+ }
223
+ }
224
+ /**
225
+ * Runs the agent.
226
+ *
227
+ * @param inputs The validated input parameters for this invocation.
228
+ * @param signal An `AbortSignal` for cancellation.
229
+ * @returns A promise that resolves to the agent's final output.
230
+ */
231
+ async run(inputs, signal) {
232
+ const startTime = Date.now();
233
+ let turnCounter = 0;
234
+ let terminateReason = AgentTerminateMode.ERROR;
235
+ let finalResult = null;
236
+ const { max_time_minutes } = this.definition.runConfig;
237
+ const timeoutController = new AbortController();
238
+ const timeoutId = setTimeout(() => timeoutController.abort(new Error('Agent timed out.')), max_time_minutes * 60 * 1000);
239
+ // Combine the external signal with the internal timeout signal.
240
+ const combinedSignal = AbortSignal.any([signal, timeoutController.signal]);
241
+ logAgentStart(this.runtimeContext, new AgentStartEvent(this.agentId, this.definition.name));
242
+ let chat;
243
+ let tools;
244
+ try {
245
+ // Inject standard runtime context into inputs
246
+ const augmentedInputs = {
247
+ ...inputs,
248
+ cliVersion: await getVersion(),
249
+ activeModel: this.runtimeContext.getActiveModel(),
250
+ today: new Date().toLocaleDateString(),
251
+ };
252
+ tools = this.prepareToolsList();
253
+ chat = await this.createChatObject(augmentedInputs, tools);
254
+ const query = this.definition.promptConfig.query
255
+ ? templateString(this.definition.promptConfig.query, augmentedInputs)
256
+ : 'Get Started!';
257
+ let currentMessage = { role: 'user', parts: [{ text: query }] };
258
+ while (true) {
259
+ // Check for termination conditions like max turns.
260
+ const reason = this.checkTermination(startTime, turnCounter);
261
+ if (reason) {
262
+ terminateReason = reason;
263
+ break;
264
+ }
265
+ // Check for timeout or external abort.
266
+ if (combinedSignal.aborted) {
267
+ // Determine which signal caused the abort.
268
+ terminateReason = timeoutController.signal.aborted
269
+ ? AgentTerminateMode.TIMEOUT
270
+ : AgentTerminateMode.ABORTED;
271
+ break;
272
+ }
273
+ const turnResult = await this.executeTurn(chat, currentMessage, turnCounter++, combinedSignal, timeoutController.signal);
274
+ if (turnResult.status === 'stop') {
275
+ terminateReason = turnResult.terminateReason;
276
+ // Only set finalResult if the turn provided one (e.g., error or goal).
277
+ if (turnResult.finalResult) {
278
+ finalResult = turnResult.finalResult;
279
+ }
280
+ break; // Exit the loop for *any* stop reason.
281
+ }
282
+ // If status is 'continue', update message for the next loop
283
+ currentMessage = turnResult.nextMessage;
284
+ }
285
+ // === UNIFIED RECOVERY BLOCK ===
286
+ // Only attempt recovery if it's a known recoverable reason.
287
+ // We don't recover from GOAL (already done) or ABORTED (user cancelled).
288
+ if (terminateReason !== AgentTerminateMode.ERROR &&
289
+ terminateReason !== AgentTerminateMode.ABORTED &&
290
+ terminateReason !== AgentTerminateMode.GOAL) {
291
+ const recoveryResult = await this.executeFinalWarningTurn(chat, turnCounter, // Use current turnCounter for the recovery attempt
292
+ terminateReason, signal);
293
+ if (recoveryResult !== null) {
294
+ // Recovery Succeeded
295
+ terminateReason = AgentTerminateMode.GOAL;
296
+ finalResult = recoveryResult;
297
+ }
298
+ else {
299
+ // Recovery Failed. Set the final error message based on the *original* reason.
300
+ if (terminateReason === AgentTerminateMode.TIMEOUT) {
301
+ finalResult = `Agent timed out after ${this.definition.runConfig.max_time_minutes} minutes.`;
302
+ this.emitActivity('ERROR', {
303
+ error: finalResult,
304
+ context: 'timeout',
305
+ });
306
+ }
307
+ else if (terminateReason === AgentTerminateMode.MAX_TURNS) {
308
+ finalResult = `Agent reached max turns limit (${this.definition.runConfig.max_turns}).`;
309
+ this.emitActivity('ERROR', {
310
+ error: finalResult,
311
+ context: 'max_turns',
312
+ });
313
+ }
314
+ else if (terminateReason === AgentTerminateMode.ERROR_NO_COMPLETE_TASK_CALL) {
315
+ // The finalResult was already set by executeTurn, but we re-emit just in case.
316
+ finalResult =
317
+ finalResult ||
318
+ `Agent stopped calling tools but did not call '${TASK_COMPLETE_TOOL_NAME}'.`;
319
+ this.emitActivity('ERROR', {
320
+ error: finalResult,
321
+ context: 'protocol_violation',
322
+ });
323
+ }
324
+ }
325
+ }
326
+ // === FINAL RETURN LOGIC ===
327
+ if (terminateReason === AgentTerminateMode.GOAL) {
328
+ return {
329
+ result: finalResult || 'Task completed.',
330
+ terminate_reason: terminateReason,
331
+ };
332
+ }
333
+ return {
334
+ result: finalResult || 'Agent execution was terminated before completion.',
335
+ terminate_reason: terminateReason,
336
+ };
337
+ }
338
+ catch (error) {
339
+ // Check if the error is an AbortError caused by our internal timeout.
340
+ if (error instanceof Error &&
341
+ error.name === 'AbortError' &&
342
+ timeoutController.signal.aborted &&
343
+ !signal.aborted // Ensure the external signal was not the cause
344
+ ) {
345
+ terminateReason = AgentTerminateMode.TIMEOUT;
346
+ // Also use the unified recovery logic here
347
+ if (chat && tools) {
348
+ const recoveryResult = await this.executeFinalWarningTurn(chat, turnCounter, // Use current turnCounter
349
+ AgentTerminateMode.TIMEOUT, signal);
350
+ if (recoveryResult !== null) {
351
+ // Recovery Succeeded
352
+ terminateReason = AgentTerminateMode.GOAL;
353
+ finalResult = recoveryResult;
354
+ return {
355
+ result: finalResult,
356
+ terminate_reason: terminateReason,
357
+ };
358
+ }
359
+ }
360
+ // Recovery failed or wasn't possible
361
+ finalResult = `Agent timed out after ${this.definition.runConfig.max_time_minutes} minutes.`;
362
+ this.emitActivity('ERROR', {
363
+ error: finalResult,
364
+ context: 'timeout',
365
+ });
366
+ return {
367
+ result: finalResult,
368
+ terminate_reason: terminateReason,
369
+ };
370
+ }
371
+ this.emitActivity('ERROR', { error: String(error) });
372
+ throw error; // Re-throw other errors or external aborts.
373
+ }
374
+ finally {
375
+ clearTimeout(timeoutId);
376
+ logAgentFinish(this.runtimeContext, new AgentFinishEvent(this.agentId, this.definition.name, Date.now() - startTime, turnCounter, terminateReason));
377
+ }
378
+ }
379
+ async tryCompressChat(chat, prompt_id) {
380
+ const model = this.definition.modelConfig.model;
381
+ const { newHistory, info } = await this.compressionService.compress(chat, prompt_id, false, model, this.runtimeContext, this.hasFailedCompressionAttempt);
382
+ if (info.compressionStatus ===
383
+ CompressionStatus.COMPRESSION_FAILED_INFLATED_TOKEN_COUNT) {
384
+ this.hasFailedCompressionAttempt = true;
385
+ }
386
+ else if (info.compressionStatus === CompressionStatus.COMPRESSED) {
387
+ if (newHistory) {
388
+ chat.setHistory(newHistory);
389
+ this.hasFailedCompressionAttempt = false;
390
+ }
391
+ }
392
+ }
393
+ /**
394
+ * Calls the generative model with the current context and tools.
395
+ *
396
+ * @returns The model's response, including any tool calls or text.
397
+ */
398
+ async callModel(chat, message, signal, promptId) {
399
+ const responseStream = await chat.sendMessageStream({
400
+ model: getModelConfigAlias(this.definition),
401
+ overrideScope: this.definition.name,
402
+ }, message.parts || [], promptId, signal);
403
+ const functionCalls = [];
404
+ let textResponse = '';
405
+ for await (const resp of responseStream) {
406
+ if (signal.aborted)
407
+ break;
408
+ if (resp.type === StreamEventType.CHUNK) {
409
+ const chunk = resp.value;
410
+ const parts = chunk.candidates?.[0]?.content?.parts;
411
+ // Extract and emit any subject "thought" content from the model.
412
+ const { subject } = parseThought(parts?.find((p) => p.thought)?.text || '');
413
+ if (subject) {
414
+ this.emitActivity('THOUGHT_CHUNK', { text: subject });
415
+ }
416
+ // Collect any function calls requested by the model.
417
+ if (chunk.functionCalls) {
418
+ functionCalls.push(...chunk.functionCalls);
419
+ }
420
+ // Handle text response (non-thought text)
421
+ const text = parts
422
+ ?.filter((p) => !p.thought && p.text)
423
+ .map((p) => p.text)
424
+ .join('') || '';
425
+ if (text) {
426
+ textResponse += text;
427
+ }
428
+ }
429
+ }
430
+ return { functionCalls, textResponse };
431
+ }
432
+ /** Initializes a `GeminiChat` instance for the agent run. */
433
+ async createChatObject(inputs, tools) {
434
+ const { promptConfig } = this.definition;
435
+ if (!promptConfig.systemPrompt && !promptConfig.initialMessages) {
436
+ throw new Error('PromptConfig must define either `systemPrompt` or `initialMessages`.');
437
+ }
438
+ const startHistory = this.applyTemplateToInitialMessages(promptConfig.initialMessages ?? [], inputs);
439
+ // Build system instruction from the templated prompt string.
440
+ const systemInstruction = promptConfig.systemPrompt
441
+ ? await this.buildSystemPrompt(inputs)
442
+ : undefined;
443
+ try {
444
+ return new GeminiChat(this.runtimeContext, systemInstruction, [{ functionDeclarations: tools }], startHistory);
445
+ }
446
+ catch (error) {
447
+ await reportError(error, `Error initializing Gemini chat for agent ${this.definition.name}.`, startHistory, 'startChat');
448
+ // Re-throw as a more specific error after reporting.
449
+ throw new Error(`Failed to create chat object: ${error}`);
450
+ }
451
+ }
452
+ /**
453
+ * Executes function calls requested by the model and returns the results.
454
+ *
455
+ * @returns A new `Content` object for history, any submitted output, and completion status.
456
+ */
457
+ async processFunctionCalls(functionCalls, signal, promptId) {
458
+ const allowedToolNames = new Set(this.toolRegistry.getAllToolNames());
459
+ // Always allow the completion tool
460
+ allowedToolNames.add(TASK_COMPLETE_TOOL_NAME);
461
+ let submittedOutput = null;
462
+ let taskCompleted = false;
463
+ // We'll collect promises for the tool executions
464
+ const toolExecutionPromises = [];
465
+ // And we'll need a place to store the synchronous results (like complete_task or blocked calls)
466
+ const syncResponseParts = [];
467
+ for (const [index, functionCall] of functionCalls.entries()) {
468
+ const callId = functionCall.id ?? `${promptId}-${index}`;
469
+ const args = functionCall.args ?? {};
470
+ this.emitActivity('TOOL_CALL_START', {
471
+ name: functionCall.name,
472
+ args,
473
+ });
474
+ if (functionCall.name === TASK_COMPLETE_TOOL_NAME) {
475
+ if (taskCompleted) {
476
+ // We already have a completion from this turn. Ignore subsequent ones.
477
+ const error = 'Task already marked complete in this turn. Ignoring duplicate call.';
478
+ syncResponseParts.push({
479
+ functionResponse: {
480
+ name: TASK_COMPLETE_TOOL_NAME,
481
+ response: { error },
482
+ id: callId,
483
+ },
484
+ });
485
+ this.emitActivity('ERROR', {
486
+ context: 'tool_call',
487
+ name: functionCall.name,
488
+ error,
489
+ });
490
+ continue;
491
+ }
492
+ const { outputConfig } = this.definition;
493
+ taskCompleted = true; // Signal completion regardless of output presence
494
+ if (outputConfig) {
495
+ const outputName = outputConfig.outputName;
496
+ if (args[outputName] !== undefined) {
497
+ const outputValue = args[outputName];
498
+ const validationResult = outputConfig.schema.safeParse(outputValue);
499
+ if (!validationResult.success) {
500
+ taskCompleted = false; // Validation failed, revoke completion
501
+ const error = `Output validation failed: ${JSON.stringify(validationResult.error.flatten())}`;
502
+ syncResponseParts.push({
503
+ functionResponse: {
504
+ name: TASK_COMPLETE_TOOL_NAME,
505
+ response: { error },
506
+ id: callId,
507
+ },
508
+ });
509
+ this.emitActivity('ERROR', {
510
+ context: 'tool_call',
511
+ name: functionCall.name,
512
+ error,
513
+ });
514
+ continue;
515
+ }
516
+ const validatedOutput = validationResult.data;
517
+ if (this.definition.processOutput) {
518
+ submittedOutput = this.definition.processOutput(validatedOutput);
519
+ }
520
+ else {
521
+ submittedOutput =
522
+ typeof outputValue === 'string'
523
+ ? outputValue
524
+ : JSON.stringify(outputValue, null, 2);
525
+ }
526
+ syncResponseParts.push({
527
+ functionResponse: {
528
+ name: TASK_COMPLETE_TOOL_NAME,
529
+ response: { result: 'Output submitted and task completed.' },
530
+ id: callId,
531
+ },
532
+ });
533
+ this.emitActivity('TOOL_CALL_END', {
534
+ name: functionCall.name,
535
+ output: 'Output submitted and task completed.',
536
+ });
537
+ }
538
+ else {
539
+ // Failed to provide required output.
540
+ taskCompleted = false; // Revoke completion status
541
+ const error = `Missing required argument '${outputName}' for completion.`;
542
+ syncResponseParts.push({
543
+ functionResponse: {
544
+ name: TASK_COMPLETE_TOOL_NAME,
545
+ response: { error },
546
+ id: callId,
547
+ },
548
+ });
549
+ this.emitActivity('ERROR', {
550
+ context: 'tool_call',
551
+ name: functionCall.name,
552
+ error,
553
+ });
554
+ }
555
+ }
556
+ else {
557
+ // No outputConfig - use default 'result' parameter
558
+ const resultArg = args['result'];
559
+ if (resultArg !== undefined &&
560
+ resultArg !== null &&
561
+ resultArg !== '') {
562
+ submittedOutput =
563
+ typeof resultArg === 'string'
564
+ ? resultArg
565
+ : JSON.stringify(resultArg, null, 2);
566
+ syncResponseParts.push({
567
+ functionResponse: {
568
+ name: TASK_COMPLETE_TOOL_NAME,
569
+ response: { status: 'Result submitted and task completed.' },
570
+ id: callId,
571
+ },
572
+ });
573
+ this.emitActivity('TOOL_CALL_END', {
574
+ name: functionCall.name,
575
+ output: 'Result submitted and task completed.',
576
+ });
577
+ }
578
+ else {
579
+ // No result provided - this is an error for agents expected to return results
580
+ taskCompleted = false; // Revoke completion
581
+ const error = 'Missing required "result" argument. You must provide your findings when calling complete_task.';
582
+ syncResponseParts.push({
583
+ functionResponse: {
584
+ name: TASK_COMPLETE_TOOL_NAME,
585
+ response: { error },
586
+ id: callId,
587
+ },
588
+ });
589
+ this.emitActivity('ERROR', {
590
+ context: 'tool_call',
591
+ name: functionCall.name,
592
+ error,
593
+ });
594
+ }
595
+ }
596
+ continue;
597
+ }
598
+ // Handle standard tools
599
+ if (!allowedToolNames.has(functionCall.name)) {
600
+ const error = `Unauthorized tool call: '${functionCall.name}' is not available to this agent.`;
601
+ debugLogger.warn(`[LocalAgentExecutor] Blocked call: ${error}`);
602
+ syncResponseParts.push({
603
+ functionResponse: {
604
+ name: functionCall.name,
605
+ id: callId,
606
+ response: { error },
607
+ },
608
+ });
609
+ this.emitActivity('ERROR', {
610
+ context: 'tool_call_unauthorized',
611
+ name: functionCall.name,
612
+ callId,
613
+ error,
614
+ });
615
+ continue;
616
+ }
617
+ const requestInfo = {
618
+ callId,
619
+ name: functionCall.name,
620
+ args,
621
+ isClientInitiated: true,
622
+ prompt_id: promptId,
623
+ };
624
+ // Create a promise for the tool execution
625
+ const executionPromise = (async () => {
626
+ const agentContext = Object.create(this.runtimeContext);
627
+ agentContext.getToolRegistry = () => this.toolRegistry;
628
+ agentContext.getApprovalMode = () => ApprovalMode.YOLO;
629
+ const { response: toolResponse } = await executeToolCall(agentContext, requestInfo, signal);
630
+ if (toolResponse.error) {
631
+ this.emitActivity('ERROR', {
632
+ context: 'tool_call',
633
+ name: functionCall.name,
634
+ error: toolResponse.error.message,
635
+ });
636
+ }
637
+ else {
638
+ this.emitActivity('TOOL_CALL_END', {
639
+ name: functionCall.name,
640
+ output: toolResponse.resultDisplay,
641
+ });
642
+ }
643
+ return toolResponse.responseParts;
644
+ })();
645
+ toolExecutionPromises.push(executionPromise);
646
+ }
647
+ // Wait for all tool executions to complete
648
+ const asyncResults = await Promise.all(toolExecutionPromises);
649
+ // Combine all response parts
650
+ const toolResponseParts = [...syncResponseParts];
651
+ for (const result of asyncResults) {
652
+ if (result) {
653
+ toolResponseParts.push(...result);
654
+ }
655
+ }
656
+ // If all authorized tool calls failed (and task isn't complete), provide a generic error.
657
+ if (functionCalls.length > 0 &&
658
+ toolResponseParts.length === 0 &&
659
+ !taskCompleted) {
660
+ toolResponseParts.push({
661
+ text: 'All tool calls failed or were unauthorized. Please analyze the errors and try an alternative approach.',
662
+ });
663
+ }
664
+ return {
665
+ nextMessage: { role: 'user', parts: toolResponseParts },
666
+ submittedOutput,
667
+ taskCompleted,
668
+ };
669
+ }
670
+ /**
671
+ * Prepares the list of tool function declarations to be sent to the model.
672
+ */
673
+ prepareToolsList() {
674
+ const toolsList = [];
675
+ const { toolConfig, outputConfig } = this.definition;
676
+ if (toolConfig) {
677
+ const toolNamesToLoad = [];
678
+ for (const toolRef of toolConfig.tools) {
679
+ if (typeof toolRef === 'string') {
680
+ toolNamesToLoad.push(toolRef);
681
+ }
682
+ else if (typeof toolRef === 'object' && 'schema' in toolRef) {
683
+ // Tool instance with an explicit schema property.
684
+ toolsList.push(toolRef.schema);
685
+ }
686
+ else {
687
+ // Raw `FunctionDeclaration` object.
688
+ toolsList.push(toolRef);
689
+ }
690
+ }
691
+ // Add schemas from tools that were registered by name.
692
+ toolsList.push(...this.toolRegistry.getFunctionDeclarationsFiltered(toolNamesToLoad));
693
+ }
694
+ // Always inject complete_task.
695
+ // Configure its schema based on whether output is expected.
696
+ const completeTool = {
697
+ name: TASK_COMPLETE_TOOL_NAME,
698
+ description: outputConfig
699
+ ? 'Call this tool to submit your final answer and complete the task. This is the ONLY way to finish.'
700
+ : 'Call this tool to submit your final findings and complete the task. This is the ONLY way to finish.',
701
+ parameters: {
702
+ type: Type.OBJECT,
703
+ properties: {},
704
+ required: [],
705
+ },
706
+ };
707
+ if (outputConfig) {
708
+ const jsonSchema = zodToJsonSchema(outputConfig.schema);
709
+ const { $schema: _$schema, definitions: _definitions, ...schema } = jsonSchema;
710
+ completeTool.parameters.properties[outputConfig.outputName] =
711
+ schema;
712
+ completeTool.parameters.required.push(outputConfig.outputName);
713
+ }
714
+ else {
715
+ completeTool.parameters.properties['result'] = {
716
+ type: Type.STRING,
717
+ description: 'Your final results or findings to return to the orchestrator. ' +
718
+ 'Ensure this is comprehensive and follows any formatting requested in your instructions.',
719
+ };
720
+ completeTool.parameters.required.push('result');
721
+ }
722
+ toolsList.push(completeTool);
723
+ return toolsList;
724
+ }
725
+ /** Builds the system prompt from the agent definition and inputs. */
726
+ async buildSystemPrompt(inputs) {
727
+ const { promptConfig } = this.definition;
728
+ if (!promptConfig.systemPrompt) {
729
+ return '';
730
+ }
731
+ // Inject user inputs into the prompt template.
732
+ let finalPrompt = templateString(promptConfig.systemPrompt, inputs);
733
+ // Append environment context (CWD and folder structure).
734
+ const dirContext = await getDirectoryContextString(this.runtimeContext);
735
+ finalPrompt += `\n\n# Environment Context\n${dirContext}`;
736
+ // Append standard rules for non-interactive execution.
737
+ finalPrompt += `
738
+ Important Rules:
739
+ * You are running in a non-interactive mode. You CANNOT ask the user for input or clarification.
740
+ * Work systematically using available tools to complete your task.
741
+ * Always use absolute paths for file operations. Construct them using the provided "Environment Context".`;
742
+ if (this.definition.outputConfig) {
743
+ finalPrompt += `
744
+ * When you have completed your task, you MUST call the \`${TASK_COMPLETE_TOOL_NAME}\` tool with your structured output.
745
+ * Do not call any other tools in the same turn as \`${TASK_COMPLETE_TOOL_NAME}\`.
746
+ * This is the ONLY way to complete your mission. If you stop calling tools without calling this, you have failed.`;
747
+ }
748
+ else {
749
+ finalPrompt += `
750
+ * When you have completed your task, you MUST call the \`${TASK_COMPLETE_TOOL_NAME}\` tool.
751
+ * You MUST include your final findings in the "result" parameter. This is how you return the necessary results for the task to be marked complete.
752
+ * Ensure your findings are comprehensive and follow any specific formatting requirements provided in your instructions.
753
+ * Do not call any other tools in the same turn as \`${TASK_COMPLETE_TOOL_NAME}\`.
754
+ * This is the ONLY way to complete your mission. If you stop calling tools without calling this, you have failed.`;
755
+ }
756
+ return finalPrompt;
757
+ }
758
+ /**
759
+ * Applies template strings to initial messages.
760
+ *
761
+ * @param initialMessages The initial messages from the prompt config.
762
+ * @param inputs The validated input parameters for this invocation.
763
+ * @returns A new array of `Content` with templated strings.
764
+ */
765
+ applyTemplateToInitialMessages(initialMessages, inputs) {
766
+ return initialMessages.map((content) => {
767
+ const newParts = (content.parts ?? []).map((part) => {
768
+ if ('text' in part && part.text !== undefined) {
769
+ return { text: templateString(part.text, inputs) };
770
+ }
771
+ return part;
772
+ });
773
+ return { ...content, parts: newParts };
774
+ });
775
+ }
776
+ /**
777
+ * Checks if the agent should terminate due to exceeding configured limits.
778
+ *
779
+ * @returns The reason for termination, or `null` if execution can continue.
780
+ */
781
+ checkTermination(startTime, turnCounter) {
782
+ const { runConfig } = this.definition;
783
+ if (runConfig.max_turns && turnCounter >= runConfig.max_turns) {
784
+ return AgentTerminateMode.MAX_TURNS;
785
+ }
786
+ return null;
787
+ }
788
+ /** Emits an activity event to the configured callback. */
789
+ emitActivity(type, data) {
790
+ if (this.onActivity) {
791
+ const event = {
792
+ isSubagentActivityEvent: true,
793
+ agentName: this.definition.name,
794
+ type,
795
+ data,
796
+ };
797
+ this.onActivity(event);
798
+ }
799
+ }
800
+ }
801
+ //# sourceMappingURL=local-executor.js.map