@google/gemini-cli-core 0.42.0-preview.1 → 0.43.0-preview.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 (341) hide show
  1. package/dist/docs/changelogs/index.md +14 -0
  2. package/dist/docs/changelogs/latest.md +108 -166
  3. package/dist/docs/changelogs/preview.md +227 -103
  4. package/dist/docs/cli/auto-memory.md +60 -38
  5. package/dist/docs/cli/settings.md +1 -1
  6. package/dist/docs/cli/tutorials/memory-management.md +1 -1
  7. package/dist/docs/extensions/releasing.md +58 -24
  8. package/dist/docs/reference/configuration.md +14 -1
  9. package/dist/docs/reference/keyboard-shortcuts.md +23 -0
  10. package/dist/src/agent/content-utils.js +2 -0
  11. package/dist/src/agent/content-utils.js.map +1 -1
  12. package/dist/src/agent/content-utils.test.js +5 -1
  13. package/dist/src/agent/content-utils.test.js.map +1 -1
  14. package/dist/src/agent/event-translator.js +7 -6
  15. package/dist/src/agent/event-translator.js.map +1 -1
  16. package/dist/src/agent/legacy-agent-session.js +4 -0
  17. package/dist/src/agent/legacy-agent-session.js.map +1 -1
  18. package/dist/src/agent/legacy-agent-session.test.js +9 -1
  19. package/dist/src/agent/legacy-agent-session.test.js.map +1 -1
  20. package/dist/src/agent/tool-display-utils.d.ts +3 -2
  21. package/dist/src/agent/tool-display-utils.js +3 -2
  22. package/dist/src/agent/tool-display-utils.js.map +1 -1
  23. package/dist/src/agent/types.d.ts +33 -3
  24. package/dist/src/agents/a2aUtils.d.ts +1 -1
  25. package/dist/src/agents/a2aUtils.js +4 -3
  26. package/dist/src/agents/a2aUtils.js.map +1 -1
  27. package/dist/src/agents/agentLoader.d.ts +2 -2
  28. package/dist/src/agents/browser/browserAgentInvocation.js +24 -19
  29. package/dist/src/agents/browser/browserAgentInvocation.js.map +1 -1
  30. package/dist/src/agents/local-executor.d.ts +1 -0
  31. package/dist/src/agents/local-executor.js +46 -32
  32. package/dist/src/agents/local-executor.js.map +1 -1
  33. package/dist/src/agents/local-executor.test.js +127 -0
  34. package/dist/src/agents/local-executor.test.js.map +1 -1
  35. package/dist/src/agents/local-invocation.js +24 -20
  36. package/dist/src/agents/local-invocation.js.map +1 -1
  37. package/dist/src/agents/local-invocation.test.js +9 -9
  38. package/dist/src/agents/local-invocation.test.js.map +1 -1
  39. package/dist/src/agents/local-subagent-protocol.d.ts +18 -0
  40. package/dist/src/agents/local-subagent-protocol.js +357 -0
  41. package/dist/src/agents/local-subagent-protocol.js.map +1 -0
  42. package/dist/src/agents/local-subagent-protocol.test.d.ts +6 -0
  43. package/dist/src/agents/local-subagent-protocol.test.js +676 -0
  44. package/dist/src/agents/local-subagent-protocol.test.js.map +1 -0
  45. package/dist/src/agents/remote-invocation.js +6 -6
  46. package/dist/src/agents/remote-invocation.js.map +1 -1
  47. package/dist/src/agents/remote-invocation.test.js +23 -12
  48. package/dist/src/agents/remote-invocation.test.js.map +1 -1
  49. package/dist/src/agents/remote-subagent-protocol.d.ts +31 -0
  50. package/dist/src/agents/remote-subagent-protocol.js +330 -0
  51. package/dist/src/agents/remote-subagent-protocol.js.map +1 -0
  52. package/dist/src/agents/remote-subagent-protocol.test.d.ts +6 -0
  53. package/dist/src/agents/remote-subagent-protocol.test.js +652 -0
  54. package/dist/src/agents/remote-subagent-protocol.test.js.map +1 -0
  55. package/dist/src/agents/skill-extraction-agent.js +1 -0
  56. package/dist/src/agents/skill-extraction-agent.js.map +1 -1
  57. package/dist/src/agents/skill-extraction-agent.test.js +1 -0
  58. package/dist/src/agents/skill-extraction-agent.test.js.map +1 -1
  59. package/dist/src/agents/types.d.ts +13 -2
  60. package/dist/src/agents/types.js +7 -0
  61. package/dist/src/agents/types.js.map +1 -1
  62. package/dist/src/availability/modelAvailabilityService.d.ts +6 -6
  63. package/dist/src/availability/modelAvailabilityService.js +14 -7
  64. package/dist/src/availability/modelAvailabilityService.js.map +1 -1
  65. package/dist/src/availability/modelAvailabilityService.test.js +34 -0
  66. package/dist/src/availability/modelAvailabilityService.test.js.map +1 -1
  67. package/dist/src/availability/policyHelpers.js +24 -12
  68. package/dist/src/availability/policyHelpers.js.map +1 -1
  69. package/dist/src/availability/policyHelpers.test.js +3 -2
  70. package/dist/src/availability/policyHelpers.test.js.map +1 -1
  71. package/dist/src/code_assist/oauth2.js +3 -0
  72. package/dist/src/code_assist/oauth2.js.map +1 -1
  73. package/dist/src/code_assist/setup.d.ts +3 -0
  74. package/dist/src/code_assist/setup.js +9 -0
  75. package/dist/src/code_assist/setup.js.map +1 -1
  76. package/dist/src/code_assist/setup.test.js +9 -1
  77. package/dist/src/code_assist/setup.test.js.map +1 -1
  78. package/dist/src/commands/memory.d.ts +5 -14
  79. package/dist/src/commands/memory.js +19 -141
  80. package/dist/src/commands/memory.js.map +1 -1
  81. package/dist/src/commands/memory.test.js +62 -0
  82. package/dist/src/commands/memory.test.js.map +1 -1
  83. package/dist/src/config/config.d.ts +6 -2
  84. package/dist/src/config/config.js +63 -8
  85. package/dist/src/config/config.js.map +1 -1
  86. package/dist/src/config/config.test.js +48 -0
  87. package/dist/src/config/config.test.js.map +1 -1
  88. package/dist/src/config/defaultModelConfigs.js +13 -0
  89. package/dist/src/config/defaultModelConfigs.js.map +1 -1
  90. package/dist/src/config/models.js +1 -1
  91. package/dist/src/config/models.js.map +1 -1
  92. package/dist/src/config/projectRegistry.d.ts +1 -0
  93. package/dist/src/config/projectRegistry.js +13 -2
  94. package/dist/src/config/projectRegistry.js.map +1 -1
  95. package/dist/src/config/projectRegistry.test.js +43 -0
  96. package/dist/src/config/projectRegistry.test.js.map +1 -1
  97. package/dist/src/context/config/profiles.js +4 -0
  98. package/dist/src/context/config/profiles.js.map +1 -1
  99. package/dist/src/context/contextManager.barrier.test.js +4 -3
  100. package/dist/src/context/contextManager.barrier.test.js.map +1 -1
  101. package/dist/src/context/contextManager.d.ts +9 -2
  102. package/dist/src/context/contextManager.hotstart.test.d.ts +6 -0
  103. package/dist/src/context/contextManager.hotstart.test.js +61 -0
  104. package/dist/src/context/contextManager.hotstart.test.js.map +1 -0
  105. package/dist/src/context/contextManager.js +96 -21
  106. package/dist/src/context/contextManager.js.map +1 -1
  107. package/dist/src/context/eventBus.d.ts +6 -0
  108. package/dist/src/context/eventBus.js +6 -0
  109. package/dist/src/context/eventBus.js.map +1 -1
  110. package/dist/src/context/graph/render.d.ts +3 -1
  111. package/dist/src/context/graph/render.js +33 -9
  112. package/dist/src/context/graph/render.js.map +1 -1
  113. package/dist/src/context/graph/render.test.d.ts +6 -0
  114. package/dist/src/context/graph/render.test.js +203 -0
  115. package/dist/src/context/graph/render.test.js.map +1 -0
  116. package/dist/src/context/graph/toGraph.js +3 -3
  117. package/dist/src/context/graph/toGraph.js.map +1 -1
  118. package/dist/src/context/graph/toGraph.test.d.ts +6 -0
  119. package/dist/src/context/graph/toGraph.test.js +35 -0
  120. package/dist/src/context/graph/toGraph.test.js.map +1 -0
  121. package/dist/src/context/initializer.js +11 -2
  122. package/dist/src/context/initializer.js.map +1 -1
  123. package/dist/src/context/pipeline/contextWorkingBuffer.d.ts +5 -7
  124. package/dist/src/context/pipeline/contextWorkingBuffer.js +105 -29
  125. package/dist/src/context/pipeline/contextWorkingBuffer.js.map +1 -1
  126. package/dist/src/context/pipeline/contextWorkingBuffer.test.js +67 -0
  127. package/dist/src/context/pipeline/contextWorkingBuffer.test.js.map +1 -1
  128. package/dist/src/context/pipeline/environment.d.ts +4 -0
  129. package/dist/src/context/pipeline/environmentImpl.d.ts +6 -5
  130. package/dist/src/context/pipeline/environmentImpl.js +6 -8
  131. package/dist/src/context/pipeline/environmentImpl.js.map +1 -1
  132. package/dist/src/context/pipeline/environmentImpl.test.js +5 -1
  133. package/dist/src/context/pipeline/environmentImpl.test.js.map +1 -1
  134. package/dist/src/context/pipeline/orchestrator.d.ts +1 -0
  135. package/dist/src/context/pipeline/orchestrator.js +59 -24
  136. package/dist/src/context/pipeline/orchestrator.js.map +1 -1
  137. package/dist/src/context/processors/blobDegradationProcessor.test.js +2 -2
  138. package/dist/src/context/processors/rollingSummaryProcessor.js +2 -15
  139. package/dist/src/context/processors/rollingSummaryProcessor.js.map +1 -1
  140. package/dist/src/context/processors/stateSnapshotAsyncProcessor.d.ts +7 -0
  141. package/dist/src/context/processors/stateSnapshotAsyncProcessor.js +33 -21
  142. package/dist/src/context/processors/stateSnapshotAsyncProcessor.js.map +1 -1
  143. package/dist/src/context/processors/stateSnapshotAsyncProcessor.test.js +31 -7
  144. package/dist/src/context/processors/stateSnapshotAsyncProcessor.test.js.map +1 -1
  145. package/dist/src/context/processors/stateSnapshotProcessor.d.ts +2 -0
  146. package/dist/src/context/processors/stateSnapshotProcessor.js +28 -4
  147. package/dist/src/context/processors/stateSnapshotProcessor.js.map +1 -1
  148. package/dist/src/context/processors/stateSnapshotProcessor.test.js +40 -1
  149. package/dist/src/context/processors/stateSnapshotProcessor.test.js.map +1 -1
  150. package/dist/src/context/system-tests/hysteresis.test.d.ts +6 -0
  151. package/dist/src/context/system-tests/hysteresis.test.js +98 -0
  152. package/dist/src/context/system-tests/hysteresis.test.js.map +1 -0
  153. package/dist/src/context/system-tests/lifecycle.golden.test.js +90 -69
  154. package/dist/src/context/system-tests/lifecycle.golden.test.js.map +1 -1
  155. package/dist/src/context/system-tests/simulationHarness.d.ts +1 -4
  156. package/dist/src/context/system-tests/simulationHarness.js +16 -30
  157. package/dist/src/context/system-tests/simulationHarness.js.map +1 -1
  158. package/dist/src/context/testing/contextTestUtils.d.ts +1 -0
  159. package/dist/src/context/testing/contextTestUtils.js +48 -25
  160. package/dist/src/context/testing/contextTestUtils.js.map +1 -1
  161. package/dist/src/context/utils/adaptiveTokenCalculator.d.ts +61 -0
  162. package/dist/src/context/utils/adaptiveTokenCalculator.js +116 -0
  163. package/dist/src/context/utils/adaptiveTokenCalculator.js.map +1 -0
  164. package/dist/src/context/utils/adaptiveTokenCalculator.test.d.ts +6 -0
  165. package/dist/src/context/utils/adaptiveTokenCalculator.test.js +85 -0
  166. package/dist/src/context/utils/adaptiveTokenCalculator.test.js.map +1 -0
  167. package/dist/src/context/utils/contextTokenCalculator.d.ts +47 -1
  168. package/dist/src/context/utils/contextTokenCalculator.js +20 -3
  169. package/dist/src/context/utils/contextTokenCalculator.js.map +1 -1
  170. package/dist/src/context/utils/contextTokenCalculator.test.js +8 -8
  171. package/dist/src/context/utils/contextTokenCalculator.test.js.map +1 -1
  172. package/dist/src/context/utils/formatNodesForLlm.d.ts +21 -0
  173. package/dist/src/context/utils/formatNodesForLlm.js +69 -0
  174. package/dist/src/context/utils/formatNodesForLlm.js.map +1 -0
  175. package/dist/src/context/utils/formatNodesForLlm.test.d.ts +6 -0
  176. package/dist/src/context/utils/formatNodesForLlm.test.js +110 -0
  177. package/dist/src/context/utils/formatNodesForLlm.test.js.map +1 -0
  178. package/dist/src/context/utils/snapshotGenerator.d.ts +23 -1
  179. package/dist/src/context/utils/snapshotGenerator.js +249 -31
  180. package/dist/src/context/utils/snapshotGenerator.js.map +1 -1
  181. package/dist/src/context/utils/snapshotGenerator.test.d.ts +6 -0
  182. package/dist/src/context/utils/snapshotGenerator.test.js +255 -0
  183. package/dist/src/context/utils/snapshotGenerator.test.js.map +1 -0
  184. package/dist/src/context/utils/tokenCalibration.d.ts +9 -0
  185. package/dist/src/context/utils/tokenCalibration.js +30 -0
  186. package/dist/src/context/utils/tokenCalibration.js.map +1 -0
  187. package/dist/src/core/baseLlmClient.d.ts +8 -0
  188. package/dist/src/core/baseLlmClient.js +14 -0
  189. package/dist/src/core/baseLlmClient.js.map +1 -1
  190. package/dist/src/core/client.js +12 -1
  191. package/dist/src/core/client.js.map +1 -1
  192. package/dist/src/core/client.test.js +4 -4
  193. package/dist/src/core/contentGenerator.js +12 -10
  194. package/dist/src/core/contentGenerator.js.map +1 -1
  195. package/dist/src/core/geminiChat.d.ts +2 -0
  196. package/dist/src/core/geminiChat.js +60 -5
  197. package/dist/src/core/geminiChat.js.map +1 -1
  198. package/dist/src/core/geminiChat.test.js +195 -2
  199. package/dist/src/core/geminiChat.test.js.map +1 -1
  200. package/dist/src/core/turn.js +30 -2
  201. package/dist/src/core/turn.js.map +1 -1
  202. package/dist/src/core/turn.test.js +13 -8
  203. package/dist/src/core/turn.test.js.map +1 -1
  204. package/dist/src/generated/git-commit.d.ts +2 -2
  205. package/dist/src/generated/git-commit.js +2 -2
  206. package/dist/src/hooks/hookEventHandler.js +3 -2
  207. package/dist/src/hooks/hookEventHandler.js.map +1 -1
  208. package/dist/src/hooks/hookEventHandler.test.js +80 -0
  209. package/dist/src/hooks/hookEventHandler.test.js.map +1 -1
  210. package/dist/src/index.d.ts +2 -1
  211. package/dist/src/index.js +2 -2
  212. package/dist/src/index.js.map +1 -1
  213. package/dist/src/prompts/snippets.js +1 -1
  214. package/dist/src/prompts/snippets.js.map +1 -1
  215. package/dist/src/routing/strategies/approvalModeStrategy.js +5 -3
  216. package/dist/src/routing/strategies/approvalModeStrategy.js.map +1 -1
  217. package/dist/src/routing/strategies/approvalModeStrategy.test.js +2 -0
  218. package/dist/src/routing/strategies/approvalModeStrategy.test.js.map +1 -1
  219. package/dist/src/routing/strategies/classifierStrategy.js +8 -1
  220. package/dist/src/routing/strategies/classifierStrategy.js.map +1 -1
  221. package/dist/src/routing/strategies/classifierStrategy.test.js +4 -0
  222. package/dist/src/routing/strategies/classifierStrategy.test.js.map +1 -1
  223. package/dist/src/routing/strategies/gemmaClassifierStrategy.js +7 -1
  224. package/dist/src/routing/strategies/gemmaClassifierStrategy.js.map +1 -1
  225. package/dist/src/routing/strategies/gemmaClassifierStrategy.test.js +4 -0
  226. package/dist/src/routing/strategies/gemmaClassifierStrategy.test.js.map +1 -1
  227. package/dist/src/routing/strategies/numericalClassifierStrategy.d.ts +1 -0
  228. package/dist/src/routing/strategies/numericalClassifierStrategy.js +22 -3
  229. package/dist/src/routing/strategies/numericalClassifierStrategy.js.map +1 -1
  230. package/dist/src/routing/strategies/numericalClassifierStrategy.test.js +168 -23
  231. package/dist/src/routing/strategies/numericalClassifierStrategy.test.js.map +1 -1
  232. package/dist/src/scheduler/scheduler.js +11 -0
  233. package/dist/src/scheduler/scheduler.js.map +1 -1
  234. package/dist/src/scheduler/scheduler.test.js +1 -1
  235. package/dist/src/scheduler/scheduler.test.js.map +1 -1
  236. package/dist/src/scheduler/state-manager.js +5 -1
  237. package/dist/src/scheduler/state-manager.js.map +1 -1
  238. package/dist/src/scheduler/tool-executor.js +7 -4
  239. package/dist/src/scheduler/tool-executor.js.map +1 -1
  240. package/dist/src/scheduler/types.d.ts +5 -1
  241. package/dist/src/scheduler/types.js.map +1 -1
  242. package/dist/src/services/fileDiscoveryService.js +2 -1
  243. package/dist/src/services/fileDiscoveryService.js.map +1 -1
  244. package/dist/src/services/fileDiscoveryService.test.js +36 -0
  245. package/dist/src/services/fileDiscoveryService.test.js.map +1 -1
  246. package/dist/src/services/gitService.js +8 -1
  247. package/dist/src/services/gitService.js.map +1 -1
  248. package/dist/src/services/gitService.test.js +104 -0
  249. package/dist/src/services/gitService.test.js.map +1 -1
  250. package/dist/src/services/keychainService.js +14 -5
  251. package/dist/src/services/keychainService.js.map +1 -1
  252. package/dist/src/services/memoryPatchUtils.d.ts +66 -4
  253. package/dist/src/services/memoryPatchUtils.js +267 -5
  254. package/dist/src/services/memoryPatchUtils.js.map +1 -1
  255. package/dist/src/services/memoryService.js +25 -1
  256. package/dist/src/services/memoryService.js.map +1 -1
  257. package/dist/src/services/memoryService.test.js +61 -1
  258. package/dist/src/services/memoryService.test.js.map +1 -1
  259. package/dist/src/services/test-data/resolved-aliases-retry.golden.json +11 -0
  260. package/dist/src/services/test-data/resolved-aliases.golden.json +11 -0
  261. package/dist/src/telemetry/gcp-exporters.d.ts +2 -0
  262. package/dist/src/telemetry/gcp-exporters.js +69 -5
  263. package/dist/src/telemetry/gcp-exporters.js.map +1 -1
  264. package/dist/src/telemetry/gcp-exporters.test.js +52 -0
  265. package/dist/src/telemetry/gcp-exporters.test.js.map +1 -1
  266. package/dist/src/telemetry/metrics.js +13 -2
  267. package/dist/src/telemetry/metrics.js.map +1 -1
  268. package/dist/src/telemetry/metrics.test.js +61 -1
  269. package/dist/src/telemetry/metrics.test.js.map +1 -1
  270. package/dist/src/tools/definitions/model-family-sets/default-legacy.js +5 -2
  271. package/dist/src/tools/definitions/model-family-sets/default-legacy.js.map +1 -1
  272. package/dist/src/tools/definitions/model-family-sets/gemini-3.js +7 -4
  273. package/dist/src/tools/definitions/model-family-sets/gemini-3.js.map +1 -1
  274. package/dist/src/tools/edit.js +19 -0
  275. package/dist/src/tools/edit.js.map +1 -1
  276. package/dist/src/tools/edit.test.js +9 -0
  277. package/dist/src/tools/edit.test.js.map +1 -1
  278. package/dist/src/tools/grep.js +13 -1
  279. package/dist/src/tools/grep.js.map +1 -1
  280. package/dist/src/tools/ls.js +5 -0
  281. package/dist/src/tools/ls.js.map +1 -1
  282. package/dist/src/tools/mcp-client.js +17 -3
  283. package/dist/src/tools/mcp-client.js.map +1 -1
  284. package/dist/src/tools/mcp-client.test.js +24 -0
  285. package/dist/src/tools/mcp-client.test.js.map +1 -1
  286. package/dist/src/tools/read-file.js +11 -6
  287. package/dist/src/tools/read-file.js.map +1 -1
  288. package/dist/src/tools/read-file.test.js +20 -8
  289. package/dist/src/tools/read-file.test.js.map +1 -1
  290. package/dist/src/tools/ripGrep.js +13 -1
  291. package/dist/src/tools/ripGrep.js.map +1 -1
  292. package/dist/src/tools/shell.js +14 -0
  293. package/dist/src/tools/shell.js.map +1 -1
  294. package/dist/src/tools/shell.test.js +5 -0
  295. package/dist/src/tools/shell.test.js.map +1 -1
  296. package/dist/src/tools/tools.d.ts +6 -0
  297. package/dist/src/tools/tools.js.map +1 -1
  298. package/dist/src/tools/topicTool.js +5 -0
  299. package/dist/src/tools/topicTool.js.map +1 -1
  300. package/dist/src/tools/write-file.js +13 -0
  301. package/dist/src/tools/write-file.js.map +1 -1
  302. package/dist/src/tools/write-file.test.js +8 -0
  303. package/dist/src/tools/write-file.test.js.map +1 -1
  304. package/dist/src/utils/errors.js +3 -8
  305. package/dist/src/utils/errors.js.map +1 -1
  306. package/dist/src/utils/filesearch/ignore.js +4 -1
  307. package/dist/src/utils/filesearch/ignore.js.map +1 -1
  308. package/dist/src/utils/ignoreFileParser.js +1 -1
  309. package/dist/src/utils/ignoreFileParser.js.map +1 -1
  310. package/dist/src/utils/ignorePatterns.js +2 -0
  311. package/dist/src/utils/ignorePatterns.js.map +1 -1
  312. package/dist/src/utils/ignorePatterns.test.js +1 -0
  313. package/dist/src/utils/ignorePatterns.test.js.map +1 -1
  314. package/dist/src/utils/memoryDiscovery.js +55 -40
  315. package/dist/src/utils/memoryDiscovery.js.map +1 -1
  316. package/dist/src/utils/memoryDiscovery.test.js +77 -9
  317. package/dist/src/utils/memoryDiscovery.test.js.map +1 -1
  318. package/dist/src/utils/modelUtils.d.ts +14 -0
  319. package/dist/src/utils/modelUtils.js +17 -0
  320. package/dist/src/utils/modelUtils.js.map +1 -0
  321. package/dist/src/utils/modelUtils.test.d.ts +6 -0
  322. package/dist/src/utils/modelUtils.test.js +23 -0
  323. package/dist/src/utils/modelUtils.test.js.map +1 -0
  324. package/dist/src/utils/paths.d.ts +15 -1
  325. package/dist/src/utils/paths.js +22 -7
  326. package/dist/src/utils/paths.js.map +1 -1
  327. package/dist/src/utils/paths.test.js +25 -1
  328. package/dist/src/utils/paths.test.js.map +1 -1
  329. package/dist/src/utils/quotaErrorDetection.js +23 -12
  330. package/dist/src/utils/quotaErrorDetection.js.map +1 -1
  331. package/dist/src/utils/shell-utils.js +9 -1
  332. package/dist/src/utils/shell-utils.js.map +1 -1
  333. package/dist/src/utils/shell-utils.test.js +7 -3
  334. package/dist/src/utils/shell-utils.test.js.map +1 -1
  335. package/dist/src/utils/tokenCalculation.js +2 -1
  336. package/dist/src/utils/tokenCalculation.js.map +1 -1
  337. package/dist/src/utils/tokenCalculation.test.js +15 -0
  338. package/dist/src/utils/tokenCalculation.test.js.map +1 -1
  339. package/dist/tsconfig.tsbuildinfo +1 -1
  340. package/package.json +1 -1
  341. package/dist/google-gemini-cli-core-0.42.0-preview.0.tgz +0 -0
@@ -0,0 +1,110 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2026 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { describe, it, expect } from 'vitest';
7
+ import { formatNodesForLlm } from './formatNodesForLlm.js';
8
+ import { NodeType } from '../graph/types.js';
9
+ describe('formatNodesForLlm', () => {
10
+ it('should format standard user and model text messages with relative turns', () => {
11
+ const nodes = [
12
+ {
13
+ id: '1',
14
+ turnId: 'turn-a',
15
+ type: NodeType.USER_PROMPT,
16
+ timestamp: 1000,
17
+ role: 'user',
18
+ payload: { text: 'Hello AI' },
19
+ },
20
+ {
21
+ id: '2',
22
+ turnId: 'turn-b',
23
+ type: NodeType.AGENT_THOUGHT,
24
+ timestamp: 1001,
25
+ role: 'model',
26
+ payload: { text: 'Hello User' },
27
+ },
28
+ ];
29
+ const result = formatNodesForLlm(nodes);
30
+ // turn-a is idx 0 (relative: -1)
31
+ // turn-b is idx 1 (relative: 0)
32
+ expect(result).toContain('[Turn -1] [USER] [USER_PROMPT]: Hello AI');
33
+ expect(result).toContain('[Turn 0] [MODEL] [AGENT_THOUGHT]: Hello User');
34
+ });
35
+ it('should format tool calls correctly', () => {
36
+ const nodes = [
37
+ {
38
+ id: '1',
39
+ turnId: '1',
40
+ type: NodeType.TOOL_EXECUTION,
41
+ timestamp: 1000,
42
+ role: 'model',
43
+ payload: {
44
+ functionCall: { name: 'run_shell_command', args: { cmd: 'ls' } },
45
+ },
46
+ },
47
+ ];
48
+ const result = formatNodesForLlm(nodes);
49
+ expect(result).toContain('[Turn 0] [MODEL] [TOOL_EXECUTION]: CALL: run_shell_command({"cmd":"ls"})');
50
+ });
51
+ it('should format tool responses with semantic wrappers', () => {
52
+ const nodes = [
53
+ {
54
+ id: '1',
55
+ turnId: '1',
56
+ type: NodeType.TOOL_EXECUTION,
57
+ timestamp: 1000,
58
+ role: 'user',
59
+ payload: {
60
+ functionResponse: {
61
+ name: 'run_shell_command',
62
+ response: { output: 'file.txt' },
63
+ },
64
+ },
65
+ },
66
+ ];
67
+ const result = formatNodesForLlm(nodes);
68
+ expect(result).toContain('[Turn 0] [USER] [TOOL_EXECUTION]: [SHELL EXECUTION (run_shell_command)]: {"output":"file.txt"}');
69
+ });
70
+ it('should truncate massive tool responses and retain the semantic wrapper', () => {
71
+ // Generate a 3000 character string (exceeds the default 2000 limit)
72
+ const massiveOutput = 'A'.repeat(1500) + 'B'.repeat(1500);
73
+ const nodes = [
74
+ {
75
+ id: '1',
76
+ turnId: '1',
77
+ type: NodeType.TOOL_EXECUTION,
78
+ timestamp: 1000,
79
+ role: 'user',
80
+ payload: {
81
+ functionResponse: {
82
+ name: 'read_file',
83
+ response: { output: massiveOutput },
84
+ },
85
+ },
86
+ },
87
+ ];
88
+ const result = formatNodesForLlm(nodes, { maxToolResponseChars: 2000 });
89
+ expect(result).toContain('[FILE/WEB CONTENT (read_file)]: {"output":"AAAA');
90
+ expect(result).toContain('[TRUNCATED');
91
+ expect(result).toContain('chars] ...BBBB');
92
+ expect(result.length).toBeLessThan(2500); // Ensure it was actually truncated
93
+ });
94
+ it('should fallback to SYSTEM role if role is undefined', () => {
95
+ const nodes = [
96
+ {
97
+ id: '1',
98
+ turnId: '1',
99
+ type: NodeType.SNAPSHOT,
100
+ timestamp: 1000,
101
+ // @ts-expect-error testing undefined role
102
+ role: undefined,
103
+ payload: { text: 'Summary of past' },
104
+ },
105
+ ];
106
+ const result = formatNodesForLlm(nodes);
107
+ expect(result).toContain('[Turn 0] [SYSTEM] [SNAPSHOT]: Summary of past');
108
+ });
109
+ });
110
+ //# sourceMappingURL=formatNodesForLlm.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formatNodesForLlm.test.js","sourceRoot":"","sources":["../../../../src/context/utils/formatNodesForLlm.test.ts"],"names":[],"mappings":"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"}
@@ -5,8 +5,30 @@
5
5
  */
6
6
  import type { ConcreteNode } from '../graph/types.js';
7
7
  import type { ContextEnvironment } from '../pipeline/environment.js';
8
+ export interface SnapshotState {
9
+ active_tasks: Array<{
10
+ id: string;
11
+ description: string;
12
+ }>;
13
+ discovered_facts: string[];
14
+ constraints_and_preferences: string[];
15
+ recent_arc: string[];
16
+ }
17
+ export interface BaselineSnapshotInfo {
18
+ text: string;
19
+ abstractsIds: string[];
20
+ id: string;
21
+ }
22
+ /**
23
+ * Global Lookback: Scans the target nodes in reverse to find the absolute
24
+ * most recent valid Snapshot node to use as a Delta baseline.
25
+ */
26
+ export declare function findLatestSnapshotBaseline(targets: readonly ConcreteNode[]): BaselineSnapshotInfo | undefined;
8
27
  export declare class SnapshotGenerator {
9
28
  private readonly env;
10
29
  constructor(env: ContextEnvironment);
11
- synthesizeSnapshot(nodes: readonly ConcreteNode[], systemInstruction?: string): Promise<string>;
30
+ synthesizeSnapshot(nodes: readonly ConcreteNode[], previousStateJson?: string, options?: {
31
+ maxSummaryTurns?: number;
32
+ maxStateTokens?: number;
33
+ }): Promise<string>;
12
34
  }
@@ -1,41 +1,259 @@
1
+ import { NodeType } from '../graph/types.js';
1
2
  import { LlmRole } from '../../telemetry/llmRole.js';
3
+ import { formatNodesForLlm } from './formatNodesForLlm.js';
4
+ import { randomUUID } from 'node:crypto';
5
+ import { isRecord } from '../../utils/markdownUtils.js';
6
+ function isStringArray(value) {
7
+ return (Array.isArray(value) && value.every((item) => typeof item === 'string'));
8
+ }
9
+ function isNumberArray(value) {
10
+ return (Array.isArray(value) && value.every((item) => typeof item === 'number'));
11
+ }
12
+ function isTaskArray(value) {
13
+ return (Array.isArray(value) &&
14
+ value.every((item) => {
15
+ if (!isRecord(item))
16
+ return false;
17
+ const id = item['id'];
18
+ const desc = item['description'];
19
+ return typeof id === 'string' && typeof desc === 'string';
20
+ }));
21
+ }
22
+ function isString(value) {
23
+ return typeof value === 'string';
24
+ }
25
+ /**
26
+ * Global Lookback: Scans the target nodes in reverse to find the absolute
27
+ * most recent valid Snapshot node to use as a Delta baseline.
28
+ */
29
+ export function findLatestSnapshotBaseline(targets) {
30
+ const lastSnapshotNode = [...targets]
31
+ .reverse()
32
+ .find((n) => n.type === NodeType.SNAPSHOT && n.payload.text);
33
+ if (lastSnapshotNode?.payload.text) {
34
+ return {
35
+ text: lastSnapshotNode.payload.text,
36
+ abstractsIds: lastSnapshotNode.abstractsIds
37
+ ? [...lastSnapshotNode.abstractsIds]
38
+ : [],
39
+ id: lastSnapshotNode.id,
40
+ };
41
+ }
42
+ return undefined;
43
+ }
2
44
  export class SnapshotGenerator {
3
45
  env;
4
46
  constructor(env) {
5
47
  this.env = env;
6
48
  }
7
- async synthesizeSnapshot(nodes, systemInstruction) {
8
- const systemPrompt = systemInstruction ??
9
- `You are an expert Context Memory Manager. You will be provided with a raw transcript of older conversation turns between a user and an AI assistant.
10
- Your task is to synthesize these turns into a single, dense, factual snapshot that preserves all critical context, preferences, active tasks, and factual knowledge.
49
+ async synthesizeSnapshot(nodes, previousStateJson, options = {}) {
50
+ const emptyState = {
51
+ active_tasks: [],
52
+ discovered_facts: [],
53
+ constraints_and_preferences: [],
54
+ recent_arc: [],
55
+ };
56
+ let previousState = emptyState;
57
+ if (previousStateJson) {
58
+ try {
59
+ const parsed = JSON.parse(previousStateJson);
60
+ if (isRecord(parsed)) {
61
+ let loadedArc = [];
62
+ if (isStringArray(parsed['recent_arc'])) {
63
+ loadedArc = parsed['recent_arc'];
64
+ }
65
+ else if (isString(parsed['summary']) && parsed['summary']) {
66
+ // Migrate legacy v1 summary to V2 recent_arc array
67
+ loadedArc = [parsed['summary']];
68
+ }
69
+ previousState = {
70
+ active_tasks: isTaskArray(parsed['active_tasks'])
71
+ ? parsed['active_tasks']
72
+ : [],
73
+ discovered_facts: isStringArray(parsed['discovered_facts'])
74
+ ? parsed['discovered_facts']
75
+ : [],
76
+ constraints_and_preferences: isStringArray(parsed['constraints_and_preferences'])
77
+ ? parsed['constraints_and_preferences']
78
+ : [],
79
+ recent_arc: loadedArc,
80
+ };
81
+ }
82
+ }
83
+ catch {
84
+ // Fallback to empty if parse fails
85
+ }
86
+ }
87
+ let pressureWarning = '';
88
+ const stateString = JSON.stringify(previousState);
89
+ const estimatedTokens = this.env.tokenCalculator.estimateTokensForString(stateString);
90
+ const maxTokens = options.maxStateTokens ?? 4000;
91
+ if (estimatedTokens > maxTokens * 0.8) {
92
+ pressureWarning = `\n\n[CRITICAL WARNING]: The Master State is currently at ${((estimatedTokens / maxTokens) * 100).toFixed(0)}% of its maximum capacity! You MUST aggressively prune obsolete, irrelevant, or overly granular facts and constraints using \`obsolete_fact_indices\` and \`obsolete_constraint_indices\`.`;
93
+ }
94
+ const systemPrompt = `You are an expert Context Memory Manager. You maintain the long-term "Master State" of the AI agent's memory.
95
+ You will be provided with the CURRENT Master State and a raw transcript of new conversation turns.
96
+ Your task is to generate a JSON Delta Patch representing what has changed in the transcript.${pressureWarning}
11
97
 
12
- Discard conversational filler, pleasantries, and redundant back-and-forth iterations. Output ONLY the raw factual snapshot, formatted compactly. Do not include markdown wrappers, prefixes like "Here is the snapshot", or conversational elements.`;
13
- let userPromptText = 'TRANSCRIPT TO SNAPSHOT:\n\n';
14
- for (const node of nodes) {
15
- const payload = node.payload;
16
- let nodeContent = '';
17
- if (payload.text) {
18
- nodeContent = payload.text;
19
- }
20
- else if (payload.functionCall) {
21
- nodeContent = `CALL: ${payload.functionCall.name}(${JSON.stringify(payload.functionCall.args)})`;
22
- }
23
- else if (payload.functionResponse) {
24
- nodeContent = `RESPONSE: ${JSON.stringify(payload.functionResponse.response)}`;
25
- }
26
- userPromptText += `[${node.type}]: ${nodeContent}\n`;
27
- }
28
- const response = await this.env.llmClient.generateContent({
29
- role: LlmRole.UTILITY_STATE_SNAPSHOT_PROCESSOR,
30
- modelConfigKey: { model: 'gemini-3-flash-base' },
31
- contents: [{ role: 'user', parts: [{ text: userPromptText }] }],
32
- systemInstruction: { role: 'system', parts: [{ text: systemPrompt }] },
33
- promptId: this.env.promptId,
34
- abortSignal: new AbortController().signal,
35
- });
36
- const candidate = response.candidates?.[0];
37
- const textPart = candidate?.content?.parts?.[0];
38
- return textPart?.text || '';
98
+ CRITICAL OPERATIONAL RULES:
99
+ 1. FACTS: Extract explicit empirical facts (file paths, exact error codes, specific configs).
100
+ 2. PRUNING: Keep facts dense. Use obsolete indices to aggressively delete facts that are no longer relevant to the current objective.
101
+ 3. TASKS: Add any new active user requests to "new_tasks".
102
+ 4. TASK RESOLUTION: A task may ONLY be placed in "resolved_task_ids" if a success message or explicit confirmation was provided in the transcript. If the task was being worked on but no final confirmation exists, it MUST remain active. Do not prematurely resolve tasks.`;
103
+ const userPromptText = `CURRENT MASTER STATE:
104
+ ${JSON.stringify(previousState, null, 2)}
105
+
106
+ TRANSCRIPT OF NEW TURNS:
107
+ ${formatNodesForLlm(nodes)}`;
108
+ const patchSchema = {
109
+ type: 'object',
110
+ properties: {
111
+ new_facts: {
112
+ type: 'array',
113
+ items: { type: 'string' },
114
+ description: 'New specific, empirical facts discovered in this transcript chunk.',
115
+ },
116
+ new_constraints: {
117
+ type: 'array',
118
+ items: { type: 'string' },
119
+ description: 'New specific rules or instructions provided by the user in this chunk.',
120
+ },
121
+ new_tasks: {
122
+ type: 'array',
123
+ items: {
124
+ type: 'object',
125
+ properties: {
126
+ description: {
127
+ type: 'string',
128
+ description: 'The task goal/description.',
129
+ },
130
+ },
131
+ },
132
+ },
133
+ resolved_task_ids: {
134
+ type: 'array',
135
+ items: { type: 'string' },
136
+ description: 'IDs of tasks from the CURRENT MASTER STATE that were explicitly completed or abandoned in this transcript chunk.',
137
+ },
138
+ obsolete_fact_indices: {
139
+ type: 'array',
140
+ items: { type: 'number' },
141
+ description: 'Array indices of facts from CURRENT MASTER STATE that are no longer true or relevant and should be deleted.',
142
+ },
143
+ obsolete_constraint_indices: {
144
+ type: 'array',
145
+ items: { type: 'number' },
146
+ description: 'Array indices of constraints from CURRENT MASTER STATE that are no longer true or relevant and should be deleted.',
147
+ },
148
+ chronological_summary: {
149
+ type: 'string',
150
+ description: 'A 1-2 sentence summary of the mechanical actions taken in this transcript chunk.',
151
+ },
152
+ },
153
+ };
154
+ let patch = {};
155
+ try {
156
+ const result = await this.env.llmClient.generateJson({
157
+ role: LlmRole.UTILITY_STATE_SNAPSHOT_PROCESSOR,
158
+ modelConfigKey: { model: 'context-snapshotter' },
159
+ contents: [{ role: 'user', parts: [{ text: userPromptText }] }],
160
+ systemInstruction: { role: 'system', parts: [{ text: systemPrompt }] },
161
+ schema: patchSchema,
162
+ promptId: this.env.promptId,
163
+ abortSignal: new AbortController().signal,
164
+ });
165
+ if (isRecord(result)) {
166
+ patch = result;
167
+ }
168
+ }
169
+ catch {
170
+ // If generateJson fails, return the unmodified previous state
171
+ return JSON.stringify(previousState);
172
+ }
173
+ // Merging Application Logic (The Safeguard)
174
+ const newState = {
175
+ active_tasks: [...previousState.active_tasks],
176
+ discovered_facts: [...previousState.discovered_facts],
177
+ constraints_and_preferences: [
178
+ ...previousState.constraints_and_preferences,
179
+ ],
180
+ recent_arc: [...previousState.recent_arc],
181
+ };
182
+ // 1. Process Deletions (Resolved Tasks & Obsolete Items)
183
+ const resolvedIds = patch['resolved_task_ids'];
184
+ if (isStringArray(resolvedIds)) {
185
+ const resolvedSet = new Set(resolvedIds);
186
+ newState.active_tasks = newState.active_tasks.filter((t) => !resolvedSet.has(t.id));
187
+ }
188
+ const obsFacts = patch['obsolete_fact_indices'];
189
+ if (isNumberArray(obsFacts)) {
190
+ const dropSet = new Set(obsFacts);
191
+ newState.discovered_facts = newState.discovered_facts.filter((_, i) => !dropSet.has(i));
192
+ }
193
+ const obsConstraints = patch['obsolete_constraint_indices'];
194
+ if (isNumberArray(obsConstraints)) {
195
+ const dropSet = new Set(obsConstraints);
196
+ newState.constraints_and_preferences =
197
+ newState.constraints_and_preferences.filter((_, i) => !dropSet.has(i));
198
+ }
199
+ // 2. Process Additions
200
+ const newTasks = patch['new_tasks'];
201
+ if (Array.isArray(newTasks)) {
202
+ for (const t of newTasks) {
203
+ if (isRecord(t)) {
204
+ const desc = t['description'];
205
+ if (typeof desc === 'string' && desc) {
206
+ newState.active_tasks.push({
207
+ id: `task_${randomUUID().slice(0, 8)}`,
208
+ description: desc,
209
+ });
210
+ }
211
+ }
212
+ }
213
+ }
214
+ const newFacts = patch['new_facts'];
215
+ if (isStringArray(newFacts)) {
216
+ newState.discovered_facts.push(...newFacts);
217
+ }
218
+ const newConstraints = patch['new_constraints'];
219
+ if (isStringArray(newConstraints)) {
220
+ newState.constraints_and_preferences.push(...newConstraints);
221
+ }
222
+ // 3. Update Summary (Rolling Window)
223
+ const chronoSummary = patch['chronological_summary'];
224
+ if (typeof chronoSummary === 'string' && chronoSummary) {
225
+ newState.recent_arc.push(chronoSummary);
226
+ const maxTurns = options.maxSummaryTurns ?? 5;
227
+ if (newState.recent_arc.length > maxTurns) {
228
+ newState.recent_arc = newState.recent_arc.slice(-maxTurns);
229
+ }
230
+ }
231
+ // 4. Enforce Token Budget (Structured Pruning Backstop)
232
+ let currentTokens = this.env.tokenCalculator.estimateTokensForString(JSON.stringify(newState));
233
+ while (currentTokens > maxTokens) {
234
+ // Priority 1: Drop oldest facts
235
+ if (newState.discovered_facts.length > 0) {
236
+ newState.discovered_facts.shift();
237
+ }
238
+ // Priority 2: Drop oldest constraints
239
+ else if (newState.constraints_and_preferences.length > 0) {
240
+ newState.constraints_and_preferences.shift();
241
+ }
242
+ // Priority 3: Drop oldest narrative arc
243
+ else if (newState.recent_arc.length > 0) {
244
+ newState.recent_arc.shift();
245
+ }
246
+ // Priority 4: Drop oldest active tasks (Pathological emergency)
247
+ else if (newState.active_tasks.length > 0) {
248
+ newState.active_tasks.shift();
249
+ }
250
+ // Priority 5: The state is completely empty, break to avoid infinite loop
251
+ else {
252
+ break;
253
+ }
254
+ currentTokens = this.env.tokenCalculator.estimateTokensForString(JSON.stringify(newState));
255
+ }
256
+ return JSON.stringify(newState);
39
257
  }
40
258
  }
41
259
  //# sourceMappingURL=snapshotGenerator.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"snapshotGenerator.js","sourceRoot":"","sources":["../../../../src/context/utils/snapshotGenerator.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAC;AAErD,MAAM,OAAO,iBAAiB;IACC;IAA7B,YAA6B,GAAuB;QAAvB,QAAG,GAAH,GAAG,CAAoB;IAAG,CAAC;IAExD,KAAK,CAAC,kBAAkB,CACtB,KAA8B,EAC9B,iBAA0B;QAE1B,MAAM,YAAY,GAChB,iBAAiB;YACjB;;;qPAG+O,CAAC;QAElP,IAAI,cAAc,GAAG,6BAA6B,CAAC;QACnD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;YAC7B,IAAI,WAAW,GAAG,EAAE,CAAC;YACrB,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;gBACjB,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;YAC7B,CAAC;iBAAM,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;gBAChC,WAAW,GAAG,SAAS,OAAO,CAAC,YAAY,CAAC,IAAI,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC;YACnG,CAAC;iBAAM,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC;gBACpC,WAAW,GAAG,aAAa,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,gBAAgB,CAAC,QAAQ,CAAC,EAAE,CAAC;YACjF,CAAC;YAED,cAAc,IAAI,IAAI,IAAI,CAAC,IAAI,MAAM,WAAW,IAAI,CAAC;QACvD,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,eAAe,CAAC;YACxD,IAAI,EAAE,OAAO,CAAC,gCAAgC;YAC9C,cAAc,EAAE,EAAE,KAAK,EAAE,qBAAqB,EAAE;YAChD,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC,EAAE,CAAC;YAC/D,iBAAiB,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,EAAE;YACtE,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,QAAQ;YAC3B,WAAW,EAAE,IAAI,eAAe,EAAE,CAAC,MAAM;SAC1C,CAAC,CAAC;QAEH,MAAM,SAAS,GAAG,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC;QAC3C,MAAM,QAAQ,GAAG,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;QAChD,OAAO,QAAQ,EAAE,IAAI,IAAI,EAAE,CAAC;IAC9B,CAAC;CACF"}
1
+ {"version":3,"file":"snapshotGenerator.js","sourceRoot":"","sources":["../../../../src/context/utils/snapshotGenerator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2026 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ export {};