@google/gemini-cli-core 0.24.0-nightly.20260103.30f5c4af4 → 0.25.0-nightly.20260112.15891721a

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 (489) hide show
  1. package/README.md +1 -1
  2. package/dist/docs/changelogs/index.md +22 -0
  3. package/dist/docs/changelogs/latest.md +137 -209
  4. package/dist/docs/changelogs/preview.md +116 -114
  5. package/dist/docs/changelogs/releases.md +273 -7
  6. package/dist/docs/cli/model-routing.md +1 -1
  7. package/dist/docs/cli/model.md +1 -1
  8. package/dist/docs/cli/settings.md +67 -52
  9. package/dist/docs/cli/skills.md +156 -0
  10. package/dist/docs/cli/telemetry.md +3 -3
  11. package/dist/docs/cli/tutorials/skills-getting-started.md +124 -0
  12. package/dist/docs/cli/tutorials.md +4 -0
  13. package/dist/docs/core/policy-engine.md +3 -2
  14. package/dist/docs/extensions/index.md +57 -7
  15. package/dist/docs/get-started/configuration.md +44 -11
  16. package/dist/docs/get-started/gemini-3.md +2 -17
  17. package/dist/docs/hooks/best-practices.md +1 -1
  18. package/dist/docs/hooks/index.md +47 -11
  19. package/dist/docs/hooks/reference.md +19 -9
  20. package/dist/docs/hooks/writing-hooks.md +19 -1
  21. package/dist/docs/sidebar.json +4 -0
  22. package/dist/docs/troubleshooting.md +9 -3
  23. package/dist/google-gemini-cli-core-0.25.0-nightly.20260107.59a18e710.tgz +0 -0
  24. package/dist/src/agents/a2a-client-manager.d.ts +9 -0
  25. package/dist/src/agents/a2a-client-manager.js +130 -0
  26. package/dist/src/agents/a2a-client-manager.js.map +1 -1
  27. package/dist/src/agents/a2a-client-manager.test.js +71 -1
  28. package/dist/src/agents/a2a-client-manager.test.js.map +1 -1
  29. package/dist/src/agents/a2aUtils.d.ts +28 -0
  30. package/dist/src/agents/a2aUtils.js +111 -0
  31. package/dist/src/agents/a2aUtils.js.map +1 -0
  32. package/dist/src/agents/a2aUtils.test.js +147 -0
  33. package/dist/src/agents/a2aUtils.test.js.map +1 -0
  34. package/dist/src/agents/agentLoader.d.ts +68 -0
  35. package/dist/src/agents/{toml-loader.js → agentLoader.js} +83 -78
  36. package/dist/src/agents/agentLoader.js.map +1 -0
  37. package/dist/src/agents/agentLoader.test.js +283 -0
  38. package/dist/src/agents/agentLoader.test.js.map +1 -0
  39. package/dist/src/agents/{introspection-agent.d.ts → cli-help-agent.d.ts} +3 -2
  40. package/dist/src/agents/{introspection-agent.js → cli-help-agent.js} +17 -11
  41. package/dist/src/agents/cli-help-agent.js.map +1 -0
  42. package/dist/src/agents/{introspection-agent.test.js → cli-help-agent.test.js} +26 -8
  43. package/dist/src/agents/cli-help-agent.test.js.map +1 -0
  44. package/dist/src/agents/delegate-to-agent-tool.d.ts +2 -2
  45. package/dist/src/agents/delegate-to-agent-tool.js +23 -16
  46. package/dist/src/agents/delegate-to-agent-tool.js.map +1 -1
  47. package/dist/src/agents/delegate-to-agent-tool.test.js +88 -16
  48. package/dist/src/agents/delegate-to-agent-tool.test.js.map +1 -1
  49. package/dist/src/agents/local-executor.js +36 -2
  50. package/dist/src/agents/local-executor.js.map +1 -1
  51. package/dist/src/agents/local-executor.test.js +55 -2
  52. package/dist/src/agents/local-executor.test.js.map +1 -1
  53. package/dist/src/agents/local-invocation.d.ts +2 -2
  54. package/dist/src/agents/local-invocation.js +3 -3
  55. package/dist/src/agents/local-invocation.js.map +1 -1
  56. package/dist/src/agents/local-invocation.test.js +7 -5
  57. package/dist/src/agents/local-invocation.test.js.map +1 -1
  58. package/dist/src/agents/registry.d.ts +10 -0
  59. package/dist/src/agents/registry.js +61 -26
  60. package/dist/src/agents/registry.js.map +1 -1
  61. package/dist/src/agents/registry.test.js +66 -11
  62. package/dist/src/agents/registry.test.js.map +1 -1
  63. package/dist/src/agents/remote-invocation.d.ts +17 -3
  64. package/dist/src/agents/remote-invocation.js +106 -6
  65. package/dist/src/agents/remote-invocation.js.map +1 -1
  66. package/dist/src/agents/remote-invocation.test.js +184 -18
  67. package/dist/src/agents/remote-invocation.test.js.map +1 -1
  68. package/dist/src/agents/subagent-tool-wrapper.d.ts +2 -2
  69. package/dist/src/agents/subagent-tool-wrapper.js +6 -5
  70. package/dist/src/agents/subagent-tool-wrapper.js.map +1 -1
  71. package/dist/src/agents/subagent-tool-wrapper.test.js +17 -10
  72. package/dist/src/agents/subagent-tool-wrapper.test.js.map +1 -1
  73. package/dist/src/agents/types.d.ts +6 -0
  74. package/dist/src/availability/fallbackIntegration.test.js +58 -0
  75. package/dist/src/availability/fallbackIntegration.test.js.map +1 -0
  76. package/dist/src/code_assist/experiments/experiments.d.ts +1 -1
  77. package/dist/src/code_assist/experiments/experiments.js +21 -0
  78. package/dist/src/code_assist/experiments/experiments.js.map +1 -1
  79. package/dist/src/code_assist/experiments/experiments_local.test.js +110 -0
  80. package/dist/src/code_assist/experiments/experiments_local.test.js.map +1 -0
  81. package/dist/src/code_assist/oauth-credential-storage.js +3 -4
  82. package/dist/src/code_assist/oauth-credential-storage.js.map +1 -1
  83. package/dist/src/code_assist/oauth2.js +31 -1
  84. package/dist/src/code_assist/oauth2.js.map +1 -1
  85. package/dist/src/code_assist/oauth2.test.js +105 -8
  86. package/dist/src/code_assist/oauth2.test.js.map +1 -1
  87. package/dist/src/code_assist/server.d.ts +5 -0
  88. package/dist/src/code_assist/server.js +19 -4
  89. package/dist/src/code_assist/server.js.map +1 -1
  90. package/dist/src/code_assist/server.test.js +19 -0
  91. package/dist/src/code_assist/server.test.js.map +1 -1
  92. package/dist/src/code_assist/setup.js +6 -4
  93. package/dist/src/code_assist/setup.js.map +1 -1
  94. package/dist/src/code_assist/setup.test.js +63 -0
  95. package/dist/src/code_assist/setup.test.js.map +1 -1
  96. package/dist/src/code_assist/telemetry.js +2 -1
  97. package/dist/src/code_assist/telemetry.js.map +1 -1
  98. package/dist/src/code_assist/telemetry.test.js +2 -1
  99. package/dist/src/code_assist/telemetry.test.js.map +1 -1
  100. package/dist/src/code_assist/types.d.ts +25 -0
  101. package/dist/src/code_assist/types.js +7 -0
  102. package/dist/src/code_assist/types.js.map +1 -1
  103. package/dist/src/config/config.d.ts +45 -9
  104. package/dist/src/config/config.js +128 -62
  105. package/dist/src/config/config.js.map +1 -1
  106. package/dist/src/config/config.test.js +94 -7
  107. package/dist/src/config/config.test.js.map +1 -1
  108. package/dist/src/config/models.d.ts +7 -0
  109. package/dist/src/config/models.js +17 -4
  110. package/dist/src/config/models.js.map +1 -1
  111. package/dist/src/config/models.test.js +37 -1
  112. package/dist/src/config/models.test.js.map +1 -1
  113. package/dist/src/config/storage.d.ts +1 -0
  114. package/dist/src/config/storage.js +5 -2
  115. package/dist/src/config/storage.js.map +1 -1
  116. package/dist/src/core/client.js +66 -15
  117. package/dist/src/core/client.js.map +1 -1
  118. package/dist/src/core/client.test.js +171 -22
  119. package/dist/src/core/client.test.js.map +1 -1
  120. package/dist/src/core/contentGenerator.js +1 -1
  121. package/dist/src/core/contentGenerator.js.map +1 -1
  122. package/dist/src/core/contentGenerator.test.js +1 -1
  123. package/dist/src/core/contentGenerator.test.js.map +1 -1
  124. package/dist/src/core/coreToolHookTriggers.d.ts +8 -4
  125. package/dist/src/core/coreToolHookTriggers.js +43 -5
  126. package/dist/src/core/coreToolHookTriggers.js.map +1 -1
  127. package/dist/src/core/coreToolHookTriggers.test.js +11 -9
  128. package/dist/src/core/coreToolHookTriggers.test.js.map +1 -1
  129. package/dist/src/core/coreToolScheduler.d.ts +2 -8
  130. package/dist/src/core/coreToolScheduler.js +84 -166
  131. package/dist/src/core/coreToolScheduler.js.map +1 -1
  132. package/dist/src/core/coreToolScheduler.test.js +51 -29
  133. package/dist/src/core/coreToolScheduler.test.js.map +1 -1
  134. package/dist/src/core/geminiChat.d.ts +26 -1
  135. package/dist/src/core/geminiChat.js +74 -8
  136. package/dist/src/core/geminiChat.js.map +1 -1
  137. package/dist/src/core/geminiChat.test.js +109 -0
  138. package/dist/src/core/geminiChat.test.js.map +1 -1
  139. package/dist/src/core/geminiChatHookTriggers.d.ts +8 -4
  140. package/dist/src/core/geminiChatHookTriggers.js +31 -9
  141. package/dist/src/core/geminiChatHookTriggers.js.map +1 -1
  142. package/dist/src/core/geminiChatHookTriggers.test.d.ts +6 -0
  143. package/dist/src/core/geminiChatHookTriggers.test.js +153 -0
  144. package/dist/src/core/geminiChatHookTriggers.test.js.map +1 -0
  145. package/dist/src/core/loggingContentGenerator.js +19 -2
  146. package/dist/src/core/loggingContentGenerator.js.map +1 -1
  147. package/dist/src/core/loggingContentGenerator.test.js +30 -0
  148. package/dist/src/core/loggingContentGenerator.test.js.map +1 -1
  149. package/dist/src/core/nonInteractiveToolExecutor.test.js +4 -2
  150. package/dist/src/core/nonInteractiveToolExecutor.test.js.map +1 -1
  151. package/dist/src/core/prompts.js +9 -9
  152. package/dist/src/core/prompts.js.map +1 -1
  153. package/dist/src/core/prompts.test.js +4 -2
  154. package/dist/src/core/prompts.test.js.map +1 -1
  155. package/dist/src/core/tokenLimits.js +6 -12
  156. package/dist/src/core/tokenLimits.js.map +1 -1
  157. package/dist/src/core/tokenLimits.test.js +8 -4
  158. package/dist/src/core/tokenLimits.test.js.map +1 -1
  159. package/dist/src/core/turn.d.ts +18 -2
  160. package/dist/src/core/turn.js +16 -0
  161. package/dist/src/core/turn.js.map +1 -1
  162. package/dist/src/generated/git-commit.d.ts +2 -2
  163. package/dist/src/generated/git-commit.js +2 -2
  164. package/dist/src/hooks/hookEventHandler.d.ts +9 -5
  165. package/dist/src/hooks/hookEventHandler.js +51 -11
  166. package/dist/src/hooks/hookEventHandler.js.map +1 -1
  167. package/dist/src/hooks/hookEventHandler.test.js +176 -8
  168. package/dist/src/hooks/hookEventHandler.test.js.map +1 -1
  169. package/dist/src/hooks/hookRunner.d.ts +2 -2
  170. package/dist/src/hooks/hookRunner.js +12 -4
  171. package/dist/src/hooks/hookRunner.js.map +1 -1
  172. package/dist/src/hooks/hookRunner.test.js +33 -0
  173. package/dist/src/hooks/hookRunner.test.js.map +1 -1
  174. package/dist/src/hooks/hookSystem.d.ts +12 -0
  175. package/dist/src/hooks/hookSystem.js +36 -0
  176. package/dist/src/hooks/hookSystem.js.map +1 -1
  177. package/dist/src/hooks/hookTranslator.js +2 -1
  178. package/dist/src/hooks/hookTranslator.js.map +1 -1
  179. package/dist/src/hooks/index.d.ts +0 -1
  180. package/dist/src/hooks/index.js +0 -2
  181. package/dist/src/hooks/index.js.map +1 -1
  182. package/dist/src/hooks/types.d.ts +21 -0
  183. package/dist/src/hooks/types.js +0 -15
  184. package/dist/src/hooks/types.js.map +1 -1
  185. package/dist/src/hooks/types.test.js +4 -28
  186. package/dist/src/hooks/types.test.js.map +1 -1
  187. package/dist/src/ide/detect-ide.d.ts +4 -0
  188. package/dist/src/ide/detect-ide.js +7 -2
  189. package/dist/src/ide/detect-ide.js.map +1 -1
  190. package/dist/src/ide/detect-ide.test.js +10 -0
  191. package/dist/src/ide/detect-ide.test.js.map +1 -1
  192. package/dist/src/ide/ide-installer.js +2 -2
  193. package/dist/src/ide/ide-installer.js.map +1 -1
  194. package/dist/src/ide/ide-installer.test.js +11 -2
  195. package/dist/src/ide/ide-installer.test.js.map +1 -1
  196. package/dist/src/index.d.ts +11 -2
  197. package/dist/src/index.js +13 -3
  198. package/dist/src/index.js.map +1 -1
  199. package/dist/src/mcp/token-storage/file-token-storage.js +2 -2
  200. package/dist/src/mcp/token-storage/file-token-storage.js.map +1 -1
  201. package/dist/src/policy/config.js +60 -22
  202. package/dist/src/policy/config.js.map +1 -1
  203. package/dist/src/policy/config.test.js +21 -0
  204. package/dist/src/policy/config.test.js.map +1 -1
  205. package/dist/src/policy/persistence.test.js +1 -1
  206. package/dist/src/policy/persistence.test.js.map +1 -1
  207. package/dist/src/policy/policies/agent.toml +1 -1
  208. package/dist/src/policy/policies/yolo.toml +1 -0
  209. package/dist/src/policy/policy-engine.js +22 -6
  210. package/dist/src/policy/policy-engine.js.map +1 -1
  211. package/dist/src/policy/policy-engine.test.js +206 -1
  212. package/dist/src/policy/policy-engine.test.js.map +1 -1
  213. package/dist/src/policy/policy-updater.test.js +3 -3
  214. package/dist/src/policy/policy-updater.test.js.map +1 -1
  215. package/dist/src/policy/toml-loader.d.ts +0 -8
  216. package/dist/src/policy/toml-loader.js +7 -70
  217. package/dist/src/policy/toml-loader.js.map +1 -1
  218. package/dist/src/policy/toml-loader.test.js +16 -6
  219. package/dist/src/policy/toml-loader.test.js.map +1 -1
  220. package/dist/src/policy/utils.d.ts +21 -0
  221. package/dist/src/policy/utils.js +45 -0
  222. package/dist/src/policy/utils.js.map +1 -0
  223. package/dist/src/policy/utils.test.d.ts +6 -0
  224. package/dist/src/policy/utils.test.js +92 -0
  225. package/dist/src/policy/utils.test.js.map +1 -0
  226. package/dist/src/routing/routingStrategy.d.ts +2 -0
  227. package/dist/src/routing/strategies/classifierStrategy.js +1 -1
  228. package/dist/src/routing/strategies/classifierStrategy.js.map +1 -1
  229. package/dist/src/routing/strategies/classifierStrategy.test.js +16 -0
  230. package/dist/src/routing/strategies/classifierStrategy.test.js.map +1 -1
  231. package/dist/src/routing/strategies/fallbackStrategy.d.ts +1 -1
  232. package/dist/src/routing/strategies/fallbackStrategy.js +2 -2
  233. package/dist/src/routing/strategies/fallbackStrategy.js.map +1 -1
  234. package/dist/src/routing/strategies/fallbackStrategy.test.js +13 -0
  235. package/dist/src/routing/strategies/fallbackStrategy.test.js.map +1 -1
  236. package/dist/src/routing/strategies/overrideStrategy.d.ts +1 -1
  237. package/dist/src/routing/strategies/overrideStrategy.js +5 -5
  238. package/dist/src/routing/strategies/overrideStrategy.js.map +1 -1
  239. package/dist/src/routing/strategies/overrideStrategy.test.js +14 -0
  240. package/dist/src/routing/strategies/overrideStrategy.test.js.map +1 -1
  241. package/dist/src/scheduler/tool-executor.d.ts +22 -0
  242. package/dist/src/scheduler/tool-executor.js +198 -0
  243. package/dist/src/scheduler/tool-executor.js.map +1 -0
  244. package/dist/src/scheduler/tool-executor.test.d.ts +6 -0
  245. package/dist/src/scheduler/tool-executor.test.js +231 -0
  246. package/dist/src/scheduler/tool-executor.test.js.map +1 -0
  247. package/dist/src/scheduler/tool-modifier.d.ts +23 -0
  248. package/dist/src/scheduler/tool-modifier.js +50 -0
  249. package/dist/src/scheduler/tool-modifier.js.map +1 -0
  250. package/dist/src/scheduler/tool-modifier.test.d.ts +6 -0
  251. package/dist/src/scheduler/tool-modifier.test.js +159 -0
  252. package/dist/src/scheduler/tool-modifier.test.js.map +1 -0
  253. package/dist/src/services/chatCompressionService.js +3 -10
  254. package/dist/src/services/chatCompressionService.js.map +1 -1
  255. package/dist/src/services/chatCompressionService.test.js +1 -0
  256. package/dist/src/services/chatCompressionService.test.js.map +1 -1
  257. package/dist/src/services/chatRecordingService.d.ts +7 -1
  258. package/dist/src/services/chatRecordingService.js +20 -2
  259. package/dist/src/services/chatRecordingService.js.map +1 -1
  260. package/dist/src/services/chatRecordingService.test.js +43 -0
  261. package/dist/src/services/chatRecordingService.test.js.map +1 -1
  262. package/dist/src/services/environmentSanitization.js +4 -3
  263. package/dist/src/services/environmentSanitization.js.map +1 -1
  264. package/dist/src/services/gitService.test.js +10 -2
  265. package/dist/src/services/gitService.test.js.map +1 -1
  266. package/dist/src/services/modelConfig.integration.test.js +2 -2
  267. package/dist/src/services/modelConfig.integration.test.js.map +1 -1
  268. package/dist/src/services/modelConfigService.d.ts +29 -1
  269. package/dist/src/services/modelConfigService.js +116 -69
  270. package/dist/src/services/modelConfigService.js.map +1 -1
  271. package/dist/src/services/modelConfigService.test.js +116 -0
  272. package/dist/src/services/modelConfigService.test.js.map +1 -1
  273. package/dist/src/services/shellExecutionService.js +1 -1
  274. package/dist/src/services/shellExecutionService.js.map +1 -1
  275. package/dist/src/services/shellExecutionService.test.js +43 -2
  276. package/dist/src/services/shellExecutionService.test.js.map +1 -1
  277. package/dist/src/skills/skillLoader.d.ts +31 -0
  278. package/dist/src/skills/skillLoader.js +77 -0
  279. package/dist/src/skills/skillLoader.js.map +1 -0
  280. package/dist/src/skills/skillLoader.test.d.ts +6 -0
  281. package/dist/src/skills/skillLoader.test.js +75 -0
  282. package/dist/src/skills/skillLoader.test.js.map +1 -0
  283. package/dist/src/{services → skills}/skillManager.d.ts +18 -19
  284. package/dist/src/skills/skillManager.js +108 -0
  285. package/dist/src/skills/skillManager.js.map +1 -0
  286. package/dist/src/skills/skillManager.test.d.ts +6 -0
  287. package/dist/src/skills/skillManager.test.js +164 -0
  288. package/dist/src/skills/skillManager.test.js.map +1 -0
  289. package/dist/src/telemetry/clearcut-logger/clearcut-logger.d.ts +9 -6
  290. package/dist/src/telemetry/clearcut-logger/clearcut-logger.js +20 -16
  291. package/dist/src/telemetry/clearcut-logger/clearcut-logger.js.map +1 -1
  292. package/dist/src/telemetry/clearcut-logger/clearcut-logger.test.js +43 -4
  293. package/dist/src/telemetry/clearcut-logger/clearcut-logger.test.js.map +1 -1
  294. package/dist/src/telemetry/clearcut-logger/event-metadata-key.d.ts +2 -2
  295. package/dist/src/telemetry/clearcut-logger/event-metadata-key.js +4 -4
  296. package/dist/src/telemetry/clearcut-logger/event-metadata-key.js.map +1 -1
  297. package/dist/src/telemetry/loggers.d.ts +3 -3
  298. package/dist/src/telemetry/loggers.js +4 -4
  299. package/dist/src/telemetry/loggers.js.map +1 -1
  300. package/dist/src/telemetry/loggers.test.js +7 -5
  301. package/dist/src/telemetry/loggers.test.js.map +1 -1
  302. package/dist/src/telemetry/types.d.ts +7 -7
  303. package/dist/src/telemetry/types.js +14 -12
  304. package/dist/src/telemetry/types.js.map +1 -1
  305. package/dist/src/test-utils/mock-message-bus.d.ts +1 -0
  306. package/dist/src/test-utils/mock-message-bus.js +29 -0
  307. package/dist/src/test-utils/mock-message-bus.js.map +1 -1
  308. package/dist/src/test-utils/mock-tool.d.ts +5 -3
  309. package/dist/src/test-utils/mock-tool.js +11 -10
  310. package/dist/src/test-utils/mock-tool.js.map +1 -1
  311. package/dist/src/tools/activate-skill.d.ts +2 -2
  312. package/dist/src/tools/activate-skill.js +28 -10
  313. package/dist/src/tools/activate-skill.js.map +1 -1
  314. package/dist/src/tools/activate-skill.test.js +31 -11
  315. package/dist/src/tools/activate-skill.test.js.map +1 -1
  316. package/dist/src/tools/confirmation-policy.test.js +2 -12
  317. package/dist/src/tools/confirmation-policy.test.js.map +1 -1
  318. package/dist/src/tools/edit.d.ts +27 -5
  319. package/dist/src/tools/edit.js +446 -137
  320. package/dist/src/tools/edit.js.map +1 -1
  321. package/dist/src/tools/edit.test.js +257 -525
  322. package/dist/src/tools/edit.test.js.map +1 -1
  323. package/dist/src/tools/get-internal-docs.d.ts +2 -2
  324. package/dist/src/tools/get-internal-docs.js +17 -24
  325. package/dist/src/tools/get-internal-docs.js.map +1 -1
  326. package/dist/src/tools/get-internal-docs.test.js +2 -1
  327. package/dist/src/tools/get-internal-docs.test.js.map +1 -1
  328. package/dist/src/tools/glob.d.ts +2 -2
  329. package/dist/src/tools/glob.js +1 -1
  330. package/dist/src/tools/glob.js.map +1 -1
  331. package/dist/src/tools/glob.test.js +2 -1
  332. package/dist/src/tools/glob.test.js.map +1 -1
  333. package/dist/src/tools/grep.d.ts +2 -2
  334. package/dist/src/tools/grep.js +1 -1
  335. package/dist/src/tools/grep.js.map +1 -1
  336. package/dist/src/tools/grep.test.js +5 -4
  337. package/dist/src/tools/grep.test.js.map +1 -1
  338. package/dist/src/tools/ls.d.ts +2 -2
  339. package/dist/src/tools/ls.js +2 -2
  340. package/dist/src/tools/ls.js.map +1 -1
  341. package/dist/src/tools/ls.test.js +2 -1
  342. package/dist/src/tools/ls.test.js.map +1 -1
  343. package/dist/src/tools/mcp-client.d.ts +2 -2
  344. package/dist/src/tools/mcp-client.js +2 -1
  345. package/dist/src/tools/mcp-client.js.map +1 -1
  346. package/dist/src/tools/mcp-tool.d.ts +20 -5
  347. package/dist/src/tools/mcp-tool.js +8 -8
  348. package/dist/src/tools/mcp-tool.js.map +1 -1
  349. package/dist/src/tools/mcp-tool.test.js +11 -6
  350. package/dist/src/tools/mcp-tool.test.js.map +1 -1
  351. package/dist/src/tools/memoryTool.d.ts +3 -3
  352. package/dist/src/tools/memoryTool.js +2 -2
  353. package/dist/src/tools/memoryTool.js.map +1 -1
  354. package/dist/src/tools/memoryTool.test.js +5 -2
  355. package/dist/src/tools/memoryTool.test.js.map +1 -1
  356. package/dist/src/tools/message-bus-integration.test.js +10 -37
  357. package/dist/src/tools/message-bus-integration.test.js.map +1 -1
  358. package/dist/src/tools/read-file.d.ts +2 -2
  359. package/dist/src/tools/read-file.js +1 -1
  360. package/dist/src/tools/read-file.js.map +1 -1
  361. package/dist/src/tools/read-file.test.js +3 -2
  362. package/dist/src/tools/read-file.test.js.map +1 -1
  363. package/dist/src/tools/read-many-files.d.ts +2 -2
  364. package/dist/src/tools/read-many-files.js +2 -3
  365. package/dist/src/tools/read-many-files.js.map +1 -1
  366. package/dist/src/tools/read-many-files.test.js +3 -2
  367. package/dist/src/tools/read-many-files.test.js.map +1 -1
  368. package/dist/src/tools/ripGrep.d.ts +2 -2
  369. package/dist/src/tools/ripGrep.js +3 -4
  370. package/dist/src/tools/ripGrep.js.map +1 -1
  371. package/dist/src/tools/ripGrep.test.js +7 -6
  372. package/dist/src/tools/ripGrep.test.js.map +1 -1
  373. package/dist/src/tools/shell.d.ts +3 -4
  374. package/dist/src/tools/shell.js +9 -35
  375. package/dist/src/tools/shell.js.map +1 -1
  376. package/dist/src/tools/shell.test.js +40 -57
  377. package/dist/src/tools/shell.test.js.map +1 -1
  378. package/dist/src/tools/tool-error.d.ts +4 -0
  379. package/dist/src/tools/tool-error.js +4 -0
  380. package/dist/src/tools/tool-error.js.map +1 -1
  381. package/dist/src/tools/tool-registry.d.ts +11 -6
  382. package/dist/src/tools/tool-registry.js +13 -8
  383. package/dist/src/tools/tool-registry.js.map +1 -1
  384. package/dist/src/tools/tool-registry.test.js +14 -10
  385. package/dist/src/tools/tool-registry.test.js.map +1 -1
  386. package/dist/src/tools/tools.d.ts +7 -5
  387. package/dist/src/tools/tools.js +15 -17
  388. package/dist/src/tools/tools.js.map +1 -1
  389. package/dist/src/tools/tools.test.js +3 -1
  390. package/dist/src/tools/tools.test.js.map +1 -1
  391. package/dist/src/tools/web-fetch.d.ts +2 -2
  392. package/dist/src/tools/web-fetch.js +4 -4
  393. package/dist/src/tools/web-fetch.js.map +1 -1
  394. package/dist/src/tools/web-fetch.test.js +17 -19
  395. package/dist/src/tools/web-fetch.test.js.map +1 -1
  396. package/dist/src/tools/web-search.d.ts +2 -2
  397. package/dist/src/tools/web-search.js +3 -4
  398. package/dist/src/tools/web-search.js.map +1 -1
  399. package/dist/src/tools/web-search.test.js +2 -1
  400. package/dist/src/tools/web-search.test.js.map +1 -1
  401. package/dist/src/tools/write-file.d.ts +2 -2
  402. package/dist/src/tools/write-file.js +5 -3
  403. package/dist/src/tools/write-file.js.map +1 -1
  404. package/dist/src/tools/write-file.test.js +4 -1
  405. package/dist/src/tools/write-file.test.js.map +1 -1
  406. package/dist/src/tools/write-todos.d.ts +2 -2
  407. package/dist/src/tools/write-todos.js +5 -4
  408. package/dist/src/tools/write-todos.js.map +1 -1
  409. package/dist/src/tools/write-todos.test.js +2 -1
  410. package/dist/src/tools/write-todos.test.js.map +1 -1
  411. package/dist/src/utils/apiConversionUtils.d.ts +12 -0
  412. package/dist/src/utils/apiConversionUtils.js +46 -0
  413. package/dist/src/utils/apiConversionUtils.js.map +1 -0
  414. package/dist/src/utils/apiConversionUtils.test.d.ts +6 -0
  415. package/dist/src/utils/apiConversionUtils.test.js +150 -0
  416. package/dist/src/utils/apiConversionUtils.test.js.map +1 -0
  417. package/dist/src/utils/editCorrector.test.js +1 -1
  418. package/dist/src/utils/editCorrector.test.js.map +1 -1
  419. package/dist/src/utils/editor.d.ts +2 -2
  420. package/dist/src/utils/editor.js +19 -2
  421. package/dist/src/utils/editor.js.map +1 -1
  422. package/dist/src/utils/editor.test.js +27 -4
  423. package/dist/src/utils/editor.test.js.map +1 -1
  424. package/dist/src/utils/events.d.ts +52 -1
  425. package/dist/src/utils/events.js +28 -0
  426. package/dist/src/utils/events.js.map +1 -1
  427. package/dist/src/utils/events.test.js +25 -0
  428. package/dist/src/utils/events.test.js.map +1 -1
  429. package/dist/src/utils/fileDiffUtils.d.ts +18 -0
  430. package/dist/src/utils/fileDiffUtils.js +37 -0
  431. package/dist/src/utils/fileDiffUtils.js.map +1 -0
  432. package/dist/src/utils/fileDiffUtils.test.d.ts +6 -0
  433. package/dist/src/utils/fileDiffUtils.test.js +84 -0
  434. package/dist/src/utils/fileDiffUtils.test.js.map +1 -0
  435. package/dist/src/utils/gitIgnoreParser.js +9 -10
  436. package/dist/src/utils/gitIgnoreParser.js.map +1 -1
  437. package/dist/src/utils/installationManager.test.js +11 -3
  438. package/dist/src/utils/installationManager.test.js.map +1 -1
  439. package/dist/src/utils/memoryDiscovery.js +1 -2
  440. package/dist/src/utils/memoryDiscovery.js.map +1 -1
  441. package/dist/src/utils/memoryDiscovery.test.js +9 -0
  442. package/dist/src/utils/memoryDiscovery.test.js.map +1 -1
  443. package/dist/src/utils/paths.d.ts +10 -0
  444. package/dist/src/utils/paths.js +20 -1
  445. package/dist/src/utils/paths.js.map +1 -1
  446. package/dist/src/utils/terminal.d.ts +2 -0
  447. package/dist/src/utils/terminal.js +6 -0
  448. package/dist/src/utils/terminal.js.map +1 -1
  449. package/dist/src/utils/tokenCalculation.js +20 -5
  450. package/dist/src/utils/tokenCalculation.js.map +1 -1
  451. package/dist/src/utils/tokenCalculation.test.js +11 -2
  452. package/dist/src/utils/tokenCalculation.test.js.map +1 -1
  453. package/dist/src/utils/tool-utils.test.js +2 -1
  454. package/dist/src/utils/tool-utils.test.js.map +1 -1
  455. package/dist/src/utils/userAccountManager.test.js +5 -5
  456. package/dist/src/utils/userAccountManager.test.js.map +1 -1
  457. package/dist/tsconfig.tsbuildinfo +1 -1
  458. package/package.json +3 -2
  459. package/dist/docs/cli/configuration.md +0 -780
  460. package/dist/docs/get-started/deployment.md +0 -143
  461. package/dist/google-gemini-cli-core-0.24.0-nightly.20251227.37be16243.tgz +0 -0
  462. package/dist/src/agents/introspection-agent.js.map +0 -1
  463. package/dist/src/agents/introspection-agent.test.js.map +0 -1
  464. package/dist/src/agents/toml-loader.d.ts +0 -74
  465. package/dist/src/agents/toml-loader.js.map +0 -1
  466. package/dist/src/agents/toml-loader.test.js +0 -309
  467. package/dist/src/agents/toml-loader.test.js.map +0 -1
  468. package/dist/src/core/sessionHookTriggers.d.ts +0 -28
  469. package/dist/src/core/sessionHookTriggers.js +0 -68
  470. package/dist/src/core/sessionHookTriggers.js.map +0 -1
  471. package/dist/src/services/skillManager.js +0 -157
  472. package/dist/src/services/skillManager.js.map +0 -1
  473. package/dist/src/services/skillManager.test.js +0 -169
  474. package/dist/src/services/skillManager.test.js.map +0 -1
  475. package/dist/src/tools/smart-edit.d.ts +0 -78
  476. package/dist/src/tools/smart-edit.js +0 -722
  477. package/dist/src/tools/smart-edit.js.map +0 -1
  478. package/dist/src/tools/smart-edit.test.js +0 -591
  479. package/dist/src/tools/smart-edit.test.js.map +0 -1
  480. package/dist/src/utils/shell-permissions.d.ts +0 -52
  481. package/dist/src/utils/shell-permissions.js +0 -188
  482. package/dist/src/utils/shell-permissions.js.map +0 -1
  483. package/dist/src/utils/shell-permissions.test.js +0 -342
  484. package/dist/src/utils/shell-permissions.test.js.map +0 -1
  485. /package/dist/src/agents/{introspection-agent.test.d.ts → a2aUtils.test.d.ts} +0 -0
  486. /package/dist/src/agents/{toml-loader.test.d.ts → agentLoader.test.d.ts} +0 -0
  487. /package/dist/src/{services/skillManager.test.d.ts → agents/cli-help-agent.test.d.ts} +0 -0
  488. /package/dist/src/{tools/smart-edit.test.d.ts → availability/fallbackIntegration.test.d.ts} +0 -0
  489. /package/dist/src/{utils/shell-permissions.test.d.ts → code_assist/experiments/experiments_local.test.d.ts} +0 -0
@@ -159,7 +159,7 @@ their corresponding top-level category object in your `settings.json` file.
159
159
  #### `output`
160
160
 
161
161
  - **`output.format`** (enum):
162
- - **Description:** The format of the CLI output.
162
+ - **Description:** The format of the CLI output. Can be `text` or `json`.
163
163
  - **Default:** `"text"`
164
164
  - **Values:** `"text"`, `"json"`
165
165
 
@@ -184,6 +184,12 @@ their corresponding top-level category object in your `settings.json` file.
184
184
  title
185
185
  - **Default:** `false`
186
186
 
187
+ - **`ui.showHomeDirectoryWarning`** (boolean):
188
+ - **Description:** Show a warning when running Gemini CLI in the home
189
+ directory.
190
+ - **Default:** `true`
191
+ - **Requires restart:** Yes
192
+
187
193
  - **`ui.hideTips`** (boolean):
188
194
  - **Description:** Hide helpful tips in the UI
189
195
  - **Default:** `false`
@@ -269,7 +275,7 @@ their corresponding top-level category object in your `settings.json` file.
269
275
  #### `ide`
270
276
 
271
277
  - **`ide.enabled`** (boolean):
272
- - **Description:** Enable IDE integration mode
278
+ - **Description:** Enable IDE integration mode.
273
279
  - **Default:** `false`
274
280
  - **Requires restart:** Yes
275
281
 
@@ -573,12 +579,12 @@ their corresponding top-level category object in your `settings.json` file.
573
579
  - **Default:** `false`
574
580
 
575
581
  - **`context.fileFiltering.respectGitIgnore`** (boolean):
576
- - **Description:** Respect .gitignore files when searching
582
+ - **Description:** Respect .gitignore files when searching.
577
583
  - **Default:** `true`
578
584
  - **Requires restart:** Yes
579
585
 
580
586
  - **`context.fileFiltering.respectGeminiIgnore`** (boolean):
581
- - **Description:** Respect .geminiignore files when searching
587
+ - **Description:** Respect .geminiignore files when searching.
582
588
  - **Default:** `true`
583
589
  - **Requires restart:** Yes
584
590
 
@@ -685,11 +691,9 @@ their corresponding top-level category object in your `settings.json` file.
685
691
  - **Requires restart:** Yes
686
692
 
687
693
  - **`tools.enableHooks`** (boolean):
688
- - **Description:** Enable the hooks system for intercepting and customizing
689
- Gemini CLI behavior. When enabled, hooks configured in settings will execute
690
- at appropriate lifecycle events (BeforeTool, AfterTool, BeforeModel, etc.).
691
- Requires MessageBus integration.
692
- - **Default:** `false`
694
+ - **Description:** Enables the hooks system experiment. When disabled, the
695
+ hooks system is completely deactivated regardless of other settings.
696
+ - **Default:** `true`
693
697
  - **Requires restart:** Yes
694
698
 
695
699
  #### `mcp`
@@ -848,9 +852,14 @@ their corresponding top-level category object in your `settings.json` file.
848
852
  - **Default:** `"auto"`
849
853
  - **Requires restart:** Yes
850
854
 
851
- - **`experimental.introspectionAgentSettings.enabled`** (boolean):
852
- - **Description:** Enable the Introspection Agent.
855
+ - **`experimental.useOSC52Paste`** (boolean):
856
+ - **Description:** Use OSC 52 sequence for pasting instead of clipboardy
857
+ (useful for remote sessions).
853
858
  - **Default:** `false`
859
+
860
+ - **`experimental.cliHelpAgentSettings.enabled`** (boolean):
861
+ - **Description:** Enable the CLI Help Agent.
862
+ - **Default:** `true`
854
863
  - **Requires restart:** Yes
855
864
 
856
865
  #### `skills`
@@ -862,11 +871,20 @@ their corresponding top-level category object in your `settings.json` file.
862
871
 
863
872
  #### `hooks`
864
873
 
874
+ - **`hooks.enabled`** (boolean):
875
+ - **Description:** Canonical toggle for the hooks system. When disabled, no
876
+ hooks will be executed.
877
+ - **Default:** `false`
878
+
865
879
  - **`hooks.disabled`** (array):
866
880
  - **Description:** List of hook names (commands) that should be disabled.
867
881
  Hooks in this list will not execute even if configured.
868
882
  - **Default:** `[]`
869
883
 
884
+ - **`hooks.notifications`** (boolean):
885
+ - **Description:** Show visual indicators when hooks are executing.
886
+ - **Default:** `true`
887
+
870
888
  - **`hooks.BeforeTool`** (array):
871
889
  - **Description:** Hooks that execute before tool execution. Can intercept,
872
890
  validate, or modify tool calls.
@@ -921,6 +939,21 @@ their corresponding top-level category object in your `settings.json` file.
921
939
  - **Description:** Hooks that execute before tool selection. Can filter or
922
940
  prioritize available tools dynamically.
923
941
  - **Default:** `[]`
942
+
943
+ #### `admin`
944
+
945
+ - **`admin.secureModeEnabled`** (boolean):
946
+ - **Description:** If true, disallows yolo mode from being used.
947
+ - **Default:** `false`
948
+
949
+ - **`admin.extensions.enabled`** (boolean):
950
+ - **Description:** If false, disallows extensions from being installed or
951
+ used.
952
+ - **Default:** `true`
953
+
954
+ - **`admin.mcp.enabled`** (boolean):
955
+ - **Description:** If false, disallows MCP servers from being used.
956
+ - **Default:** `true`
924
957
  <!-- SETTINGS-AUTOGEN:END -->
925
958
 
926
959
  #### `mcpServers`
@@ -1,25 +1,10 @@
1
1
  # Gemini 3 Pro and Gemini 3 Flash on Gemini CLI
2
2
 
3
- Gemini 3 Pro and Gemini 3 Flash are now available on Gemini CLI! Currently, most
4
- paid customers of Gemini CLI will have access to both Gemini 3 Pro and Gemini 3
5
- Flash, including the following subscribers:
6
-
7
- - Google AI Pro and Google AI Ultra (excluding business customers).
8
- - Gemini Code Assist Standard and Enterprise (requires
9
- [administrative enablement](#administrator-instructions)).
10
- - Paid Gemini API and Vertex API key holders.
11
-
12
- For free tier users:
13
-
14
- - If you signed up for the waitlist, please check your email for details. We’ve
15
- onboarded everyone who signed up to the previously available waitlist.
16
- - If you were not on our waitlist, we’re rolling out additional access gradually
17
- to ensure the experience remains fast and reliable. Stay tuned for more
18
- details.
3
+ Gemini 3 Pro and Gemini 3 Flash are available on Gemini CLI for all users!
19
4
 
20
5
  ## How to get started with Gemini 3 on Gemini CLI
21
6
 
22
- Get started by upgrading Gemini CLI to the latest version (0.21.1):
7
+ Get started by upgrading Gemini CLI to the latest version:
23
8
 
24
9
  ```bash
25
10
  npm install -g @google/gemini-cli@latest
@@ -852,5 +852,5 @@ console.log(JSON.stringify(sanitizeOutput(hookOutput)));
852
852
 
853
853
  - [Hooks Reference](index.md) - Complete API reference
854
854
  - [Writing Hooks](writing-hooks.md) - Tutorial and examples
855
- - [Configuration](../cli/configuration.md) - Gemini CLI settings
855
+ - [Configuration](../get-started/configuration.md) - Gemini CLI settings
856
856
  - [Hooks Design Document](../hooks-design.md) - Technical architecture
@@ -4,6 +4,19 @@ Hooks are scripts or programs that Gemini CLI executes at specific points in the
4
4
  agentic loop, allowing you to intercept and customize behavior without modifying
5
5
  the CLI's source code.
6
6
 
7
+ > **Note: Hooks are currently an experimental feature.**
8
+ >
9
+ > To use hooks, you must explicitly enable them in your `settings.json`:
10
+ >
11
+ > ```json
12
+ > {
13
+ > "tools": { "enableHooks": true },
14
+ > "hooks": { "enabled": true }
15
+ > }
16
+ > ```
17
+ >
18
+ > Both of these are needed in this experimental phase.
19
+
7
20
  See [writing hooks guide](writing-hooks.md) for a tutorial on creating your
8
21
  first hook and a comprehensive example.
9
22
 
@@ -29,10 +42,10 @@ Gemini CLI waits for all matching hooks to complete before continuing.
29
42
 
30
43
  ## Security and Risks
31
44
 
32
- > [!WARNING] **Hooks execute arbitrary code with your user privileges.**
33
-
34
- By configuring hooks, you are explicitly allowing Gemini CLI to run shell
35
- commands on your machine. Malicious or poorly configured hooks can:
45
+ > **Warning: Hooks execute arbitrary code with your user privileges.**
46
+ >
47
+ > By configuring hooks, you are explicitly allowing Gemini CLI to run shell
48
+ > commands on your machine. Malicious or poorly configured hooks can:
36
49
 
37
50
  - **Exfiltrate data**: Read sensitive files (`.env`, ssh keys) and send them to
38
51
  remote servers.
@@ -46,6 +59,11 @@ project hook (identified by its name and command), but it is **your
46
59
  responsibility** to review these hooks (and any installed extensions) before
47
60
  trusting them.
48
61
 
62
+ > **Note:** Extension hooks are subject to a mandatory security warning and
63
+ > consent flow during extension installation or update if hooks are detected.
64
+ > You must explicitly approve the installation or update of any extension that
65
+ > contains hooks.
66
+
49
67
  See [Security Considerations](best-practices.md#using-hooks-securely) for a
50
68
  detailed threat model and mitigation strategies.
51
69
 
@@ -444,7 +462,8 @@ numbers run first):
444
462
  2. **User settings:** `~/.gemini/settings.json`
445
463
  3. **System settings:** `/etc/gemini-cli/settings.json`
446
464
  4. **Extensions:** Internal hooks defined by installed extensions (lowest
447
- priority)
465
+ priority). See [Extensions documentation](../extensions/index.md#hooks) for
466
+ details on how extensions define and configure hooks.
448
467
 
449
468
  #### Deduplication and shadowing
450
469
 
@@ -514,14 +533,29 @@ Use the `/hooks panel` command to view all registered hooks:
514
533
 
515
534
  This command displays:
516
535
 
517
- - All active hooks organized by event
536
+ - All configured hooks organized by event
518
537
  - Hook source (user, project, system)
519
538
  - Hook type (command or plugin)
520
- - Execution status and recent output
539
+ - Individual hook status (enabled/disabled)
540
+
541
+ ### Enable and disable all hooks at once
542
+
543
+ You can enable or disable all hooks at once using commands:
544
+
545
+ ```bash
546
+ /hooks enable-all
547
+ /hooks disable-all
548
+ ```
549
+
550
+ These commands provide a shortcut to enable or disable all configured hooks
551
+ without managing them individually. The `enable-all` command removes all hooks
552
+ from the `hooks.disabled` array, while `disable-all` adds all configured hooks
553
+ to the disabled list. Changes take effect immediately without requiring a
554
+ restart.
521
555
 
522
- ### Enable and disable hooks
556
+ ### Enable and disable individual hooks
523
557
 
524
- You can temporarily enable or disable individual hooks using commands:
558
+ You can enable or disable individual hooks using commands:
525
559
 
526
560
  ```bash
527
561
  /hooks enable hook-name
@@ -530,7 +564,8 @@ You can temporarily enable or disable individual hooks using commands:
530
564
 
531
565
  These commands allow you to control hook execution without editing configuration
532
566
  files. The hook name should match the `name` field in your hook configuration.
533
- Changes made via these commands are persisted to your global User settings
567
+ Changes made via these commands are persisted to your settings. The settings are
568
+ saved to workspace scope if available, otherwise to your global user settings
534
569
  (`~/.gemini/settings.json`).
535
570
 
536
571
  ### Disabled hooks configuration
@@ -683,5 +718,6 @@ matchers:
683
718
  - [Best Practices](best-practices.md) - Security, performance, and debugging
684
719
  - [Custom Commands](../cli/custom-commands.md) - Create reusable prompt
685
720
  shortcuts
686
- - [Configuration](../cli/configuration.md) - Gemini CLI configuration options
721
+ - [Configuration](../get-started/configuration.md) - Gemini CLI configuration
722
+ options
687
723
  - [Hooks Design Document](../hooks-design.md) - Technical architecture details
@@ -46,6 +46,16 @@ specific event.
46
46
  - `tool_input`: (`object`) The arguments passed to the tool.
47
47
  - `tool_response`: (`object`, **AfterTool only**) The raw output from the tool
48
48
  execution.
49
+ - `mcp_context`: (`object`, **optional**) Present only for MCP tool invocations.
50
+ Contains server identity information:
51
+ - `server_name`: (`string`) The configured name of the MCP server.
52
+ - `tool_name`: (`string`) The original tool name from the MCP server.
53
+ - `command`: (`string`, optional) For stdio transport, the command used to
54
+ start the server.
55
+ - `args`: (`string[]`, optional) For stdio transport, the command arguments.
56
+ - `cwd`: (`string`, optional) For stdio transport, the working directory.
57
+ - `url`: (`string`, optional) For SSE/HTTP transport, the server URL.
58
+ - `tcp`: (`string`, optional) For WebSocket transport, the TCP address.
49
59
 
50
60
  #### Agent Events (`BeforeAgent`, `AfterAgent`)
51
61
 
@@ -84,15 +94,15 @@ If the hook exits with `0`, the CLI attempts to parse `stdout` as JSON.
84
94
 
85
95
  ### Common Output Fields
86
96
 
87
- | Field | Type | Description |
88
- | :------------------- | :-------- | :----------------------------------------------------------------------- |
89
- | `decision` | `string` | One of: `allow`, `deny`, `block`, `ask`, `approve`. |
90
- | `reason` | `string` | Explanation shown to the **agent** when a decision is `deny` or `block`. |
91
- | `systemMessage` | `string` | Message displayed to the **user** in the CLI terminal. |
92
- | `continue` | `boolean` | If `false`, immediately terminates the agent loop for this turn. |
93
- | `stopReason` | `string` | Message shown to the user when `continue` is `false`. |
94
- | `suppressOutput` | `boolean` | If `true`, the hook execution is hidden from the CLI transcript. |
95
- | `hookSpecificOutput` | `object` | Container for event-specific data (see below). |
97
+ | Field | Type | Description |
98
+ | :------------------- | :-------- | :------------------------------------------------------------------------------------- |
99
+ | `decision` | `string` | One of: `allow`, `deny`, `block`, `ask`, `approve`. |
100
+ | `reason` | `string` | Explanation shown to the **agent** when a decision is `deny` or `block`. |
101
+ | `systemMessage` | `string` | Message displayed in Gemini CLI terminal to provide warning or context to the **user** |
102
+ | `continue` | `boolean` | If `false`, immediately terminates the agent loop for this turn. |
103
+ | `stopReason` | `string` | Message shown to the user when `continue` is `false`. |
104
+ | `suppressOutput` | `boolean` | If `true`, the hook execution is hidden from the CLI transcript. |
105
+ | `hookSpecificOutput` | `object` | Container for event-specific data (see below). |
96
106
 
97
107
  ### `hookSpecificOutput` Reference
98
108
 
@@ -1018,9 +1018,27 @@ const SECRET_PATTERNS = [
1018
1018
  ];
1019
1019
  ```
1020
1020
 
1021
+ ## Packaging as an extension
1022
+
1023
+ While project-level hooks are great for specific repositories, you might want to
1024
+ share your hooks across multiple projects or with other users. You can do this
1025
+ by packaging your hooks as a [Gemini CLI extension](../extensions/index.md).
1026
+
1027
+ Packaging as an extension provides:
1028
+
1029
+ - **Easy distribution:** Share hooks via a git repository or GitHub release.
1030
+ - **Centralized management:** Install, update, and disable hooks using
1031
+ `gemini extensions` commands.
1032
+ - **Version control:** Manage hook versions separately from your project code.
1033
+ - **Variable substitution:** Use `${extensionPath}` and `${process.execPath}`
1034
+ for portable, cross-platform scripts.
1035
+
1036
+ To package hooks as an extension, follow the
1037
+ [extensions hook documentation](../extensions/index.md#hooks).
1038
+
1021
1039
  ## Learn more
1022
1040
 
1023
1041
  - [Hooks Reference](index.md) - Complete API reference and configuration
1024
1042
  - [Best Practices](best-practices.md) - Security, performance, and debugging
1025
- - [Configuration](../cli/configuration.md) - Gemini CLI settings
1043
+ - [Configuration](../get-started/configuration.md) - Gemini CLI settings
1026
1044
  - [Custom Commands](../cli/custom-commands.md) - Create custom commands
@@ -88,6 +88,10 @@
88
88
  "label": "Session Management",
89
89
  "slug": "docs/cli/session-management"
90
90
  },
91
+ {
92
+ "label": "Agent Skills",
93
+ "slug": "docs/cli/skills"
94
+ },
91
95
  {
92
96
  "label": "Settings",
93
97
  "slug": "docs/cli/settings"
@@ -43,9 +43,15 @@ topics on:
43
43
  - **Cause:** You may be on a corporate network with a firewall that intercepts
44
44
  and inspects SSL/TLS traffic. This often requires a custom root CA
45
45
  certificate to be trusted by Node.js.
46
- - **Solution:** Set the `NODE_EXTRA_CA_CERTS` environment variable to the
47
- absolute path of your corporate root CA certificate file.
48
- - Example: `export NODE_EXTRA_CA_CERTS=/path/to/your/corporate-ca.crt`
46
+ - **Solution:** First try setting `NODE_USE_SYSTEM_CA`; if that does not
47
+ resolve the issue, set `NODE_EXTRA_CA_CERTS`.
48
+ - Set the `NODE_USE_SYSTEM_CA=1` environment variable to tell Node.js to use
49
+ the operating system's native certificate store (where corporate
50
+ certificates are typically already installed).
51
+ - Example: `export NODE_USE_SYSTEM_CA=1`
52
+ - Set the `NODE_EXTRA_CA_CERTS` environment variable to the absolute path of
53
+ your corporate root CA certificate file.
54
+ - Example: `export NODE_EXTRA_CA_CERTS=/path/to/your/corporate-ca.crt`
49
55
 
50
56
  ## Common error messages and solutions
51
57
 
@@ -32,6 +32,10 @@ export declare class A2AClientManager {
32
32
  * @returns The loaded AgentCard.
33
33
  */
34
34
  loadAgent(name: string, agentCardUrl: string, authHandler?: AuthenticationHandler): Promise<AgentCard>;
35
+ /**
36
+ * Invalidates all cached clients and agent cards.
37
+ */
38
+ clearCache(): void;
35
39
  /**
36
40
  * Sends a message to a loaded agent.
37
41
  * @param agentName The name of the agent to send the message to.
@@ -71,3 +75,8 @@ export declare class A2AClientManager {
71
75
  */
72
76
  cancelTask(agentName: string, taskId: string): Promise<Task>;
73
77
  }
78
+ /**
79
+ * Creates a fetch implementation that adapts standard A2A SDK requests to the
80
+ * proto-JSON dialect and endpoint shapes required by Vertex AI Agent Engine.
81
+ */
82
+ export declare function createAdapterFetch(baseFetch: typeof fetch): typeof fetch;
@@ -48,6 +48,9 @@ export class A2AClientManager {
48
48
  if (authHandler) {
49
49
  fetchImpl = createAuthenticatingFetchWithRetry(fetch, authHandler);
50
50
  }
51
+ // Wrap with custom adapter for ADK Reasoning Engine compatibility
52
+ // TODO: Remove this when a2a-js fixes compatibility
53
+ fetchImpl = createAdapterFetch(fetchImpl);
51
54
  const resolver = new DefaultAgentCardResolver({ fetchImpl });
52
55
  const options = ClientFactoryOptions.createFrom(ClientFactoryOptions.default, {
53
56
  transports: [
@@ -64,6 +67,14 @@ export class A2AClientManager {
64
67
  debugLogger.debug(`[A2AClientManager] Loaded agent '${name}' from ${agentCardUrl}`);
65
68
  return agentCard;
66
69
  }
70
+ /**
71
+ * Invalidates all cached clients and agent cards.
72
+ */
73
+ clearCache() {
74
+ this.clients.clear();
75
+ this.agentCards.clear();
76
+ debugLogger.debug('[A2AClientManager] Cache cleared.');
77
+ }
67
78
  /**
68
79
  * Sends a message to a loaded agent.
69
80
  * @param agentName The name of the agent to send the message to.
@@ -162,4 +173,123 @@ export class A2AClientManager {
162
173
  }
163
174
  }
164
175
  }
176
+ /**
177
+ * Maps TaskState proto-JSON enums to lower-case strings.
178
+ */
179
+ function mapTaskState(state) {
180
+ if (!state)
181
+ return state;
182
+ if (state.startsWith('TASK_STATE_')) {
183
+ return state.replace('TASK_STATE_', '').toLowerCase();
184
+ }
185
+ return state.toLowerCase();
186
+ }
187
+ /**
188
+ * Creates a fetch implementation that adapts standard A2A SDK requests to the
189
+ * proto-JSON dialect and endpoint shapes required by Vertex AI Agent Engine.
190
+ */
191
+ export function createAdapterFetch(baseFetch) {
192
+ return async (input, init) => {
193
+ const body = init?.body;
194
+ // Protocol Detection
195
+ // JSON-RPC requests bypass the adapter as they are standard-compliant and
196
+ // don't require the dialect translation intended for Vertex AI REST bindings.
197
+ // This logic can be removed when a2a-js/sdk is fully compliant.
198
+ let effectiveBody = body;
199
+ if (typeof body === 'string') {
200
+ try {
201
+ const jsonBody = JSON.parse(body);
202
+ // If the SDK decided to use JSON-RPC, we bypass the adapter because
203
+ // JSON-RPC requests are correctly supported in a2a-js/sdk.
204
+ if (jsonBody.jsonrpc === '2.0') {
205
+ return await baseFetch(input, init);
206
+ }
207
+ // Dialect Mapping (REST / HTTP+JSON)
208
+ // Apply translation for Vertex AI Agent Engine compatibility.
209
+ const message = jsonBody.message || jsonBody;
210
+ if (message && typeof message === 'object') {
211
+ // Role: user -> ROLE_USER, agent/model -> ROLE_AGENT
212
+ if (message.role === 'user')
213
+ message.role = 'ROLE_USER';
214
+ if (message.role === 'agent' || message.role === 'model') {
215
+ message.role = 'ROLE_AGENT';
216
+ }
217
+ // Strip SDK-specific 'kind' field
218
+ delete message.kind;
219
+ // Map 'parts' to 'content' (Proto-JSON dialect often uses 'content' or typed parts)
220
+ // Also strip 'kind' from parts.
221
+ if (Array.isArray(message.parts)) {
222
+ message.content = message.parts.map((p) => {
223
+ const { kind: _k, ...rest } = p;
224
+ // If it's a simple text part, ensure it matches { text: "..." }
225
+ if (p.kind === 'text')
226
+ return { text: p.text };
227
+ return rest;
228
+ });
229
+ delete message.parts;
230
+ }
231
+ }
232
+ effectiveBody = JSON.stringify(jsonBody);
233
+ }
234
+ catch (error) {
235
+ debugLogger.debug('[A2AClientManager] Failed to parse request body for dialect translation:', error);
236
+ }
237
+ }
238
+ const response = await baseFetch(input, { ...init, body: effectiveBody });
239
+ if (response.ok) {
240
+ try {
241
+ const responseData = await response.clone().json();
242
+ const result = responseData.task || responseData.message || responseData;
243
+ // Restore 'kind' for the SDK and a2aUtils parsing
244
+ if (result && typeof result === 'object' && !result.kind) {
245
+ if (responseData.task || (result.id && result.status)) {
246
+ result.kind = 'task';
247
+ }
248
+ else if (responseData.message || result.messageId) {
249
+ result.kind = 'message';
250
+ }
251
+ }
252
+ // Restore 'kind' on parts so extractMessageText works
253
+ if (result?.parts && Array.isArray(result.parts)) {
254
+ for (const part of result.parts) {
255
+ if (!part.kind) {
256
+ if (part.file)
257
+ part.kind = 'file';
258
+ else if (part.data)
259
+ part.kind = 'data';
260
+ else if (part.text)
261
+ part.kind = 'text';
262
+ }
263
+ }
264
+ }
265
+ // Recursively restore 'kind' on artifact parts
266
+ if (result?.artifacts && Array.isArray(result.artifacts)) {
267
+ for (const artifact of result.artifacts) {
268
+ if (artifact.parts && Array.isArray(artifact.parts)) {
269
+ for (const part of artifact.parts) {
270
+ if (!part.kind) {
271
+ if (part.file)
272
+ part.kind = 'file';
273
+ else if (part.data)
274
+ part.kind = 'data';
275
+ else if (part.text)
276
+ part.kind = 'text';
277
+ }
278
+ }
279
+ }
280
+ }
281
+ }
282
+ // Map Task States back to SDK expectations
283
+ if (result && typeof result === 'object' && result.status) {
284
+ result.status.state = mapTaskState(result.status.state);
285
+ }
286
+ return new Response(JSON.stringify(result), response);
287
+ }
288
+ catch (_e) {
289
+ // Non-JSON response or unwrapping failure
290
+ }
291
+ }
292
+ return response;
293
+ };
294
+ }
165
295
  //# sourceMappingURL=a2a-client-manager.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"a2a-client-manager.js","sourceRoot":"","sources":["../../../src/agents/a2a-client-manager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"a2a-client-manager.js","sourceRoot":"","sources":["../../../src/agents/a2a-client-manager.ts"],"names":[],"mappings":"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"}
@@ -4,7 +4,7 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
  import { vi, describe, it, expect, beforeEach, afterEach } from 'vitest';
7
- import { A2AClientManager, } from './a2a-client-manager.js';
7
+ import { A2AClientManager, createAdapterFetch, } from './a2a-client-manager.js';
8
8
  import { ClientFactory, DefaultAgentCardResolver } from '@a2a-js/sdk/client';
9
9
  import { debugLogger } from '../utils/debugLogger.js';
10
10
  import { createAuthenticatingFetchWithRetry, ClientFactoryOptions, } from '@a2a-js/sdk/client';
@@ -106,6 +106,15 @@ describe('A2AClientManager', () => {
106
106
  await manager.loadAgent('TestAgent', 'http://test.agent/card');
107
107
  expect(debugLogger.debug).toHaveBeenCalledWith("[A2AClientManager] Loaded agent 'TestAgent' from http://test.agent/card");
108
108
  });
109
+ it('should clear the cache', async () => {
110
+ await manager.loadAgent('TestAgent', 'http://test.agent/card');
111
+ expect(manager.getAgentCard('TestAgent')).toBeDefined();
112
+ expect(manager.getClient('TestAgent')).toBeDefined();
113
+ manager.clearCache();
114
+ expect(manager.getAgentCard('TestAgent')).toBeUndefined();
115
+ expect(manager.getClient('TestAgent')).toBeUndefined();
116
+ expect(debugLogger.debug).toHaveBeenCalledWith('[A2AClientManager] Cache cleared.');
117
+ });
109
118
  });
110
119
  describe('sendMessage', () => {
111
120
  beforeEach(async () => {
@@ -207,5 +216,66 @@ describe('A2AClientManager', () => {
207
216
  await expect(manager.cancelTask('NonExistentAgent', 'task123')).rejects.toThrow("Agent 'NonExistentAgent' not found.");
208
217
  });
209
218
  });
219
+ describe('createAdapterFetch', () => {
220
+ it('normalizes TASK_STATE_ enums to lower-case', async () => {
221
+ const baseFetch = vi
222
+ .fn()
223
+ .mockResolvedValue(new Response(JSON.stringify({ status: { state: 'TASK_STATE_WORKING' } })));
224
+ const adapter = createAdapterFetch(baseFetch);
225
+ const response = await adapter('http://example.com', {
226
+ method: 'POST',
227
+ body: '{}',
228
+ });
229
+ const data = await response.json();
230
+ expect(data.status.state).toBe('working');
231
+ });
232
+ it('lowercases non-prefixed task states', async () => {
233
+ const baseFetch = vi
234
+ .fn()
235
+ .mockResolvedValue(new Response(JSON.stringify({ status: { state: 'WORKING' } })));
236
+ const adapter = createAdapterFetch(baseFetch);
237
+ const response = await adapter('http://example.com', {
238
+ method: 'POST',
239
+ body: '{}',
240
+ });
241
+ const data = await response.json();
242
+ expect(data.status.state).toBe('working');
243
+ });
244
+ it('bypasses adapter for JSON-RPC requests', async () => {
245
+ const baseFetch = vi.fn().mockResolvedValue(new Response('{}'));
246
+ const adapter = createAdapterFetch(baseFetch);
247
+ const rpcBody = JSON.stringify({ jsonrpc: '2.0', method: 'foo' });
248
+ await adapter('http://example.com', {
249
+ method: 'POST',
250
+ body: rpcBody,
251
+ });
252
+ // Verify baseFetch was called with original body, not modified
253
+ expect(baseFetch).toHaveBeenCalledWith('http://example.com', expect.objectContaining({ body: rpcBody }));
254
+ });
255
+ it('applies dialect translation for remote REST requests', async () => {
256
+ const baseFetch = vi.fn().mockResolvedValue(new Response('{}'));
257
+ const adapter = createAdapterFetch(baseFetch);
258
+ const originalBody = JSON.stringify({
259
+ message: {
260
+ role: 'user',
261
+ parts: [{ kind: 'text', text: 'hi' }],
262
+ },
263
+ });
264
+ await adapter('https://remote-agent.com/v1/message:send', {
265
+ method: 'POST',
266
+ body: originalBody,
267
+ });
268
+ // Verify body WAS modified:
269
+ // 1. role: 'user' -> 'ROLE_USER'
270
+ // 2. parts mapped to content, kind stripped
271
+ const expectedBody = JSON.stringify({
272
+ message: {
273
+ role: 'ROLE_USER',
274
+ content: [{ text: 'hi' }],
275
+ },
276
+ });
277
+ expect(baseFetch).toHaveBeenCalledWith(expect.any(String), expect.objectContaining({ body: expectedBody }));
278
+ });
279
+ });
210
280
  });
211
281
  //# sourceMappingURL=a2a-client-manager.test.js.map