@machina.ai/cell-cli-core 1.41.1-rc2 → 1.45.1-rc2

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 (834) hide show
  1. package/dist/docs/AFTER_MERGE_PROMPT.md +1 -1
  2. package/dist/docs/changelogs/index.md +63 -0
  3. package/dist/docs/changelogs/latest.md +200 -244
  4. package/dist/docs/changelogs/preview.md +198 -385
  5. package/dist/docs/cli/auto-memory.md +61 -40
  6. package/dist/docs/cli/cli-reference.md +2 -1
  7. package/dist/docs/cli/creating-skills.md +165 -38
  8. package/dist/docs/cli/custom-commands.md +1 -0
  9. package/dist/docs/cli/gemini-md.md +0 -3
  10. package/dist/docs/cli/model-routing.md +3 -3
  11. package/dist/docs/cli/plan-mode.md +2 -2
  12. package/dist/docs/cli/settings.md +20 -19
  13. package/dist/docs/cli/skills-best-practices.md +78 -0
  14. package/dist/docs/cli/skills.md +98 -176
  15. package/dist/docs/cli/tutorials/memory-management.md +3 -3
  16. package/dist/docs/cli/tutorials/session-management.md +13 -0
  17. package/dist/docs/cli/tutorials/skills-getting-started.md +140 -92
  18. package/dist/docs/cli/using-agent-skills.md +90 -0
  19. package/dist/docs/core/gemma-setup.md +83 -0
  20. package/dist/docs/core/index.md +3 -2
  21. package/dist/docs/core/local-model-routing.md +14 -7
  22. package/dist/docs/extensions/reference.md +16 -0
  23. package/dist/docs/extensions/releasing.md +58 -24
  24. package/dist/docs/extensions/writing-extensions.md +7 -0
  25. package/dist/docs/get-started/installation.mdx +2 -2
  26. package/dist/docs/model-routing-spec.md +683 -0
  27. package/dist/docs/reference/commands.md +14 -7
  28. package/dist/docs/reference/configuration.md +264 -88
  29. package/dist/docs/reference/keyboard-shortcuts.md +24 -1
  30. package/dist/docs/reference/policy-engine.md +14 -3
  31. package/dist/docs/reference/tools.md +48 -1
  32. package/dist/docs/releases.md +2 -2
  33. package/dist/docs/sidebar.json +24 -2
  34. package/dist/docs/tools/activate-skill.md +1 -1
  35. package/dist/docs/tools/mcp-server.md +24 -3
  36. package/dist/docs/tools/memory.md +10 -13
  37. package/dist/docs/tools/shell.md +17 -0
  38. package/dist/package.json +18 -18
  39. package/dist/src/agent/content-utils.js +6 -1
  40. package/dist/src/agent/content-utils.js.map +1 -1
  41. package/dist/src/agent/content-utils.test.js +5 -1
  42. package/dist/src/agent/content-utils.test.js.map +1 -1
  43. package/dist/src/agent/event-translator.js +8 -7
  44. package/dist/src/agent/event-translator.js.map +1 -1
  45. package/dist/src/agent/event-translator.test.js +2 -2
  46. package/dist/src/agent/event-translator.test.js.map +1 -1
  47. package/dist/src/agent/legacy-agent-session.js +5 -1
  48. package/dist/src/agent/legacy-agent-session.js.map +1 -1
  49. package/dist/src/agent/legacy-agent-session.test.js +11 -3
  50. package/dist/src/agent/legacy-agent-session.test.js.map +1 -1
  51. package/dist/src/agent/tool-display-utils.d.ts +3 -2
  52. package/dist/src/agent/tool-display-utils.js +3 -2
  53. package/dist/src/agent/tool-display-utils.js.map +1 -1
  54. package/dist/src/agent/types.d.ts +33 -3
  55. package/dist/src/agents/a2aUtils.d.ts +1 -1
  56. package/dist/src/agents/a2aUtils.js +5 -4
  57. package/dist/src/agents/a2aUtils.js.map +1 -1
  58. package/dist/src/agents/a2aUtils.test.js +18 -0
  59. package/dist/src/agents/a2aUtils.test.js.map +1 -1
  60. package/dist/src/agents/agent-tool.d.ts +3 -1
  61. package/dist/src/agents/agent-tool.js +19 -3
  62. package/dist/src/agents/agent-tool.js.map +1 -1
  63. package/dist/src/agents/agent-tool.test.js +76 -0
  64. package/dist/src/agents/agent-tool.test.js.map +1 -1
  65. package/dist/src/agents/agentLoader.d.ts +127 -22
  66. package/dist/src/agents/agentLoader.js +20 -0
  67. package/dist/src/agents/agentLoader.js.map +1 -1
  68. package/dist/src/agents/agentLoader.test.js +60 -0
  69. package/dist/src/agents/agentLoader.test.js.map +1 -1
  70. package/dist/src/agents/auth-provider/types.d.ts +5 -0
  71. package/dist/src/agents/browser/browserAgentInvocation.js +24 -19
  72. package/dist/src/agents/browser/browserAgentInvocation.js.map +1 -1
  73. package/dist/src/agents/browser/snapshotSuperseder.js +11 -8
  74. package/dist/src/agents/browser/snapshotSuperseder.js.map +1 -1
  75. package/dist/src/agents/browser/snapshotSuperseder.test.js +6 -1
  76. package/dist/src/agents/browser/snapshotSuperseder.test.js.map +1 -1
  77. package/dist/src/agents/generalist-agent.js +8 -1
  78. package/dist/src/agents/generalist-agent.js.map +1 -1
  79. package/dist/src/agents/generalist-agent.test.js +24 -0
  80. package/dist/src/agents/generalist-agent.test.js.map +1 -1
  81. package/dist/src/agents/local-executor.d.ts +1 -0
  82. package/dist/src/agents/local-executor.js +76 -45
  83. package/dist/src/agents/local-executor.js.map +1 -1
  84. package/dist/src/agents/local-executor.test.js +199 -27
  85. package/dist/src/agents/local-executor.test.js.map +1 -1
  86. package/dist/src/agents/local-invocation.d.ts +1 -1
  87. package/dist/src/agents/local-invocation.js +47 -48
  88. package/dist/src/agents/local-invocation.js.map +1 -1
  89. package/dist/src/agents/local-invocation.test.js +13 -15
  90. package/dist/src/agents/local-invocation.test.js.map +1 -1
  91. package/dist/src/agents/local-session-invocation.d.ts +51 -0
  92. package/dist/src/agents/local-session-invocation.js +320 -0
  93. package/dist/src/agents/local-session-invocation.js.map +1 -0
  94. package/dist/src/agents/local-session-invocation.test.js +512 -0
  95. package/dist/src/agents/local-session-invocation.test.js.map +1 -0
  96. package/dist/src/agents/local-subagent-protocol.d.ts +18 -0
  97. package/dist/src/agents/local-subagent-protocol.js +357 -0
  98. package/dist/src/agents/local-subagent-protocol.js.map +1 -0
  99. package/dist/src/agents/local-subagent-protocol.test.js +676 -0
  100. package/dist/src/agents/local-subagent-protocol.test.js.map +1 -0
  101. package/dist/src/agents/registry.d.ts +8 -4
  102. package/dist/src/agents/registry.js +112 -47
  103. package/dist/src/agents/registry.js.map +1 -1
  104. package/dist/src/agents/registry.test.js +9 -20
  105. package/dist/src/agents/registry.test.js.map +1 -1
  106. package/dist/src/agents/remote-invocation.js +6 -6
  107. package/dist/src/agents/remote-invocation.js.map +1 -1
  108. package/dist/src/agents/remote-invocation.test.js +23 -12
  109. package/dist/src/agents/remote-invocation.test.js.map +1 -1
  110. package/dist/src/agents/remote-session-invocation.d.ts +48 -0
  111. package/dist/src/agents/remote-session-invocation.js +193 -0
  112. package/dist/src/agents/remote-session-invocation.js.map +1 -0
  113. package/dist/src/agents/remote-session-invocation.test.d.ts +6 -0
  114. package/dist/src/agents/remote-session-invocation.test.js +405 -0
  115. package/dist/src/agents/remote-session-invocation.test.js.map +1 -0
  116. package/dist/src/agents/remote-subagent-protocol.d.ts +42 -0
  117. package/dist/src/agents/remote-subagent-protocol.js +348 -0
  118. package/dist/src/agents/remote-subagent-protocol.js.map +1 -0
  119. package/dist/src/agents/remote-subagent-protocol.test.d.ts +6 -0
  120. package/dist/src/agents/remote-subagent-protocol.test.js +652 -0
  121. package/dist/src/agents/remote-subagent-protocol.test.js.map +1 -0
  122. package/dist/src/agents/skill-extraction-agent.d.ts +8 -1
  123. package/dist/src/agents/skill-extraction-agent.js +171 -21
  124. package/dist/src/agents/skill-extraction-agent.js.map +1 -1
  125. package/dist/src/agents/skill-extraction-agent.test.js +66 -2
  126. package/dist/src/agents/skill-extraction-agent.test.js.map +1 -1
  127. package/dist/src/agents/types.d.ts +38 -2
  128. package/dist/src/agents/types.js +7 -0
  129. package/dist/src/agents/types.js.map +1 -1
  130. package/dist/src/availability/autoRoutingFallback.integration.test.d.ts +6 -0
  131. package/dist/src/availability/autoRoutingFallback.integration.test.js +288 -0
  132. package/dist/src/availability/autoRoutingFallback.integration.test.js.map +1 -0
  133. package/dist/src/availability/fallbackIntegration.test.js +29 -0
  134. package/dist/src/availability/fallbackIntegration.test.js.map +1 -1
  135. package/dist/src/availability/modelAvailabilityService.d.ts +6 -6
  136. package/dist/src/availability/modelAvailabilityService.js +16 -8
  137. package/dist/src/availability/modelAvailabilityService.js.map +1 -1
  138. package/dist/src/availability/modelAvailabilityService.test.js +39 -0
  139. package/dist/src/availability/modelAvailabilityService.test.js.map +1 -1
  140. package/dist/src/availability/modelPolicy.d.ts +1 -0
  141. package/dist/src/availability/policyCatalog.d.ts +2 -0
  142. package/dist/src/availability/policyCatalog.js +38 -9
  143. package/dist/src/availability/policyCatalog.js.map +1 -1
  144. package/dist/src/availability/policyCatalog.test.js +5 -4
  145. package/dist/src/availability/policyCatalog.test.js.map +1 -1
  146. package/dist/src/availability/policyHelpers.js +42 -27
  147. package/dist/src/availability/policyHelpers.js.map +1 -1
  148. package/dist/src/availability/policyHelpers.test.js +47 -7
  149. package/dist/src/availability/policyHelpers.test.js.map +1 -1
  150. package/dist/src/availability/testUtils.js +1 -1
  151. package/dist/src/availability/testUtils.js.map +1 -1
  152. package/dist/src/code_assist/admin/admin_controls.js +3 -1
  153. package/dist/src/code_assist/admin/admin_controls.js.map +1 -1
  154. package/dist/src/code_assist/experiments/flagNames.d.ts +1 -1
  155. package/dist/src/code_assist/experiments/flagNames.js +1 -1
  156. package/dist/src/code_assist/experiments/flagNames.js.map +1 -1
  157. package/dist/src/code_assist/oauth-credential-storage.js +12 -3
  158. package/dist/src/code_assist/oauth-credential-storage.js.map +1 -1
  159. package/dist/src/code_assist/oauth-credential-storage.test.js +29 -2
  160. package/dist/src/code_assist/oauth-credential-storage.test.js.map +1 -1
  161. package/dist/src/code_assist/oauth2.js +12 -3
  162. package/dist/src/code_assist/oauth2.js.map +1 -1
  163. package/dist/src/code_assist/oauth2.test.js +38 -0
  164. package/dist/src/code_assist/oauth2.test.js.map +1 -1
  165. package/dist/src/code_assist/setup.d.ts +3 -0
  166. package/dist/src/code_assist/setup.js +9 -0
  167. package/dist/src/code_assist/setup.js.map +1 -1
  168. package/dist/src/code_assist/setup.test.js +10 -1
  169. package/dist/src/code_assist/setup.test.js.map +1 -1
  170. package/dist/src/commands/memory.d.ts +83 -2
  171. package/dist/src/commands/memory.js +479 -28
  172. package/dist/src/commands/memory.js.map +1 -1
  173. package/dist/src/commands/memory.test.js +414 -58
  174. package/dist/src/commands/memory.test.js.map +1 -1
  175. package/dist/src/config/config.d.ts +61 -37
  176. package/dist/src/config/config.js +294 -101
  177. package/dist/src/config/config.js.map +1 -1
  178. package/dist/src/config/config.test.js +365 -113
  179. package/dist/src/config/config.test.js.map +1 -1
  180. package/dist/src/config/defaultModelConfigs.js +185 -61
  181. package/dist/src/config/defaultModelConfigs.js.map +1 -1
  182. package/dist/src/config/flashFallback.test.js +31 -0
  183. package/dist/src/config/flashFallback.test.js.map +1 -1
  184. package/dist/src/config/models.d.ts +20 -10
  185. package/dist/src/config/models.js +105 -34
  186. package/dist/src/config/models.js.map +1 -1
  187. package/dist/src/config/models.test.js +204 -47
  188. package/dist/src/config/models.test.js.map +1 -1
  189. package/dist/src/config/projectRegistry.d.ts +1 -0
  190. package/dist/src/config/projectRegistry.js +14 -3
  191. package/dist/src/config/projectRegistry.js.map +1 -1
  192. package/dist/src/config/projectRegistry.test.js +43 -0
  193. package/dist/src/config/projectRegistry.test.js.map +1 -1
  194. package/dist/src/config/scoped-config.d.ts +22 -0
  195. package/dist/src/config/scoped-config.js +32 -0
  196. package/dist/src/config/scoped-config.js.map +1 -1
  197. package/dist/src/config/storage.d.ts +0 -1
  198. package/dist/src/config/storage.js +0 -3
  199. package/dist/src/config/storage.js.map +1 -1
  200. package/dist/src/confirmation-bus/message-bus.d.ts +3 -1
  201. package/dist/src/confirmation-bus/message-bus.js +14 -5
  202. package/dist/src/confirmation-bus/message-bus.js.map +1 -1
  203. package/dist/src/confirmation-bus/message-bus.test.js +34 -0
  204. package/dist/src/confirmation-bus/message-bus.test.js.map +1 -1
  205. package/dist/src/context/chatCompressionService.js +7 -5
  206. package/dist/src/context/chatCompressionService.js.map +1 -1
  207. package/dist/src/context/chatCompressionService.test.js +1 -1
  208. package/dist/src/context/chatCompressionService.test.js.map +1 -1
  209. package/dist/src/context/config/configLoader.js +4 -1
  210. package/dist/src/context/config/configLoader.js.map +1 -1
  211. package/dist/src/context/config/profiles.d.ts +10 -0
  212. package/dist/src/context/config/profiles.js +98 -3
  213. package/dist/src/context/config/profiles.js.map +1 -1
  214. package/dist/src/context/config/schema.d.ts +4 -0
  215. package/dist/src/context/config/schema.js +4 -0
  216. package/dist/src/context/config/schema.js.map +1 -1
  217. package/dist/src/context/config/types.d.ts +13 -1
  218. package/dist/src/context/contextCompressionService.test.js +7 -3
  219. package/dist/src/context/contextCompressionService.test.js.map +1 -1
  220. package/dist/src/context/contextManager.barrier.test.js +39 -16
  221. package/dist/src/context/contextManager.barrier.test.js.map +1 -1
  222. package/dist/src/context/contextManager.d.ts +25 -28
  223. package/dist/src/context/contextManager.hotstart.test.d.ts +6 -0
  224. package/dist/src/context/contextManager.hotstart.test.js +65 -0
  225. package/dist/src/context/contextManager.hotstart.test.js.map +1 -0
  226. package/dist/src/context/contextManager.incremental.test.d.ts +6 -0
  227. package/dist/src/context/contextManager.incremental.test.js +101 -0
  228. package/dist/src/context/contextManager.incremental.test.js.map +1 -0
  229. package/dist/src/context/contextManager.js +276 -79
  230. package/dist/src/context/contextManager.js.map +1 -1
  231. package/dist/src/context/contextManager.test.d.ts +6 -0
  232. package/dist/src/context/contextManager.test.js +142 -0
  233. package/dist/src/context/contextManager.test.js.map +1 -0
  234. package/dist/src/context/eventBus.d.ts +13 -0
  235. package/dist/src/context/eventBus.js +12 -0
  236. package/dist/src/context/eventBus.js.map +1 -1
  237. package/dist/src/context/graph/behaviorRegistry.d.ts +4 -12
  238. package/dist/src/context/graph/behaviorRegistry.js.map +1 -1
  239. package/dist/src/context/graph/builtinBehaviors.d.ts +6 -1
  240. package/dist/src/context/graph/builtinBehaviors.js +23 -108
  241. package/dist/src/context/graph/builtinBehaviors.js.map +1 -1
  242. package/dist/src/context/graph/fromGraph.d.ts +8 -3
  243. package/dist/src/context/graph/fromGraph.js +46 -30
  244. package/dist/src/context/graph/fromGraph.js.map +1 -1
  245. package/dist/src/context/graph/fromGraph.test.d.ts +6 -0
  246. package/dist/src/context/graph/fromGraph.test.js +186 -0
  247. package/dist/src/context/graph/fromGraph.test.js.map +1 -0
  248. package/dist/src/context/graph/mapper.d.ts +8 -10
  249. package/dist/src/context/graph/mapper.js +11 -19
  250. package/dist/src/context/graph/mapper.js.map +1 -1
  251. package/dist/src/context/graph/mapper.test.d.ts +6 -0
  252. package/dist/src/context/graph/mapper.test.js +101 -0
  253. package/dist/src/context/graph/mapper.test.js.map +1 -0
  254. package/dist/src/context/graph/nodeIdService.d.ts +17 -0
  255. package/dist/src/context/graph/nodeIdService.js +24 -0
  256. package/dist/src/context/graph/nodeIdService.js.map +1 -0
  257. package/dist/src/context/graph/render.d.ts +24 -5
  258. package/dist/src/context/graph/render.js +129 -34
  259. package/dist/src/context/graph/render.js.map +1 -1
  260. package/dist/src/context/graph/render.test.d.ts +6 -0
  261. package/dist/src/context/graph/render.test.js +280 -0
  262. package/dist/src/context/graph/render.test.js.map +1 -0
  263. package/dist/src/context/graph/toGraph.d.ts +16 -14
  264. package/dist/src/context/graph/toGraph.js +180 -202
  265. package/dist/src/context/graph/toGraph.js.map +1 -1
  266. package/dist/src/context/graph/toGraph.test.d.ts +6 -0
  267. package/dist/src/context/graph/toGraph.test.js +116 -0
  268. package/dist/src/context/graph/toGraph.test.js.map +1 -0
  269. package/dist/src/context/graph/types.d.ts +36 -73
  270. package/dist/src/context/graph/types.js +23 -14
  271. package/dist/src/context/graph/types.js.map +1 -1
  272. package/dist/src/context/initializer.js +26 -5
  273. package/dist/src/context/initializer.js.map +1 -1
  274. package/dist/src/context/pipeline/contextWorkingBuffer.d.ts +5 -8
  275. package/dist/src/context/pipeline/contextWorkingBuffer.js +105 -35
  276. package/dist/src/context/pipeline/contextWorkingBuffer.js.map +1 -1
  277. package/dist/src/context/pipeline/contextWorkingBuffer.test.js +81 -13
  278. package/dist/src/context/pipeline/contextWorkingBuffer.test.js.map +1 -1
  279. package/dist/src/context/pipeline/environment.d.ts +4 -0
  280. package/dist/src/context/pipeline/environmentImpl.d.ts +6 -5
  281. package/dist/src/context/pipeline/environmentImpl.js +7 -9
  282. package/dist/src/context/pipeline/environmentImpl.js.map +1 -1
  283. package/dist/src/context/pipeline/environmentImpl.test.js +5 -1
  284. package/dist/src/context/pipeline/environmentImpl.test.js.map +1 -1
  285. package/dist/src/context/pipeline/orchestrator.d.ts +20 -6
  286. package/dist/src/context/pipeline/orchestrator.js +97 -80
  287. package/dist/src/context/pipeline/orchestrator.js.map +1 -1
  288. package/dist/src/context/pipeline/orchestrator.test.js +33 -36
  289. package/dist/src/context/pipeline/orchestrator.test.js.map +1 -1
  290. package/dist/src/context/pipeline.d.ts +0 -1
  291. package/dist/src/context/processors/blobDegradationProcessor.js +43 -84
  292. package/dist/src/context/processors/blobDegradationProcessor.js.map +1 -1
  293. package/dist/src/context/processors/blobDegradationProcessor.test.js +33 -37
  294. package/dist/src/context/processors/blobDegradationProcessor.test.js.map +1 -1
  295. package/dist/src/context/processors/nodeDistillationProcessor.js +58 -80
  296. package/dist/src/context/processors/nodeDistillationProcessor.js.map +1 -1
  297. package/dist/src/context/processors/nodeDistillationProcessor.test.js +21 -15
  298. package/dist/src/context/processors/nodeDistillationProcessor.test.js.map +1 -1
  299. package/dist/src/context/processors/nodeTruncationProcessor.js +16 -60
  300. package/dist/src/context/processors/nodeTruncationProcessor.js.map +1 -1
  301. package/dist/src/context/processors/nodeTruncationProcessor.test.js +16 -19
  302. package/dist/src/context/processors/nodeTruncationProcessor.test.js.map +1 -1
  303. package/dist/src/context/processors/rollingSummaryProcessor.js +12 -25
  304. package/dist/src/context/processors/rollingSummaryProcessor.js.map +1 -1
  305. package/dist/src/context/processors/rollingSummaryProcessor.test.js +10 -9
  306. package/dist/src/context/processors/rollingSummaryProcessor.test.js.map +1 -1
  307. package/dist/src/context/processors/stateSnapshotAsyncProcessor.d.ts +7 -0
  308. package/dist/src/context/processors/stateSnapshotAsyncProcessor.js +37 -19
  309. package/dist/src/context/processors/stateSnapshotAsyncProcessor.js.map +1 -1
  310. package/dist/src/context/processors/stateSnapshotAsyncProcessor.test.js +35 -10
  311. package/dist/src/context/processors/stateSnapshotAsyncProcessor.test.js.map +1 -1
  312. package/dist/src/context/processors/stateSnapshotProcessor.d.ts +2 -0
  313. package/dist/src/context/processors/stateSnapshotProcessor.js +53 -21
  314. package/dist/src/context/processors/stateSnapshotProcessor.js.map +1 -1
  315. package/dist/src/context/processors/stateSnapshotProcessor.test.js +52 -12
  316. package/dist/src/context/processors/stateSnapshotProcessor.test.js.map +1 -1
  317. package/dist/src/context/processors/toolMaskingProcessor.js +96 -117
  318. package/dist/src/context/processors/toolMaskingProcessor.js.map +1 -1
  319. package/dist/src/context/processors/toolMaskingProcessor.test.js +50 -17
  320. package/dist/src/context/processors/toolMaskingProcessor.test.js.map +1 -1
  321. package/dist/src/context/system-tests/hysteresis.test.d.ts +6 -0
  322. package/dist/src/context/system-tests/hysteresis.test.js +100 -0
  323. package/dist/src/context/system-tests/hysteresis.test.js.map +1 -0
  324. package/dist/src/context/system-tests/lifecycle.golden.test.js +107 -72
  325. package/dist/src/context/system-tests/lifecycle.golden.test.js.map +1 -1
  326. package/dist/src/context/system-tests/powerUserLifecycle.test.d.ts +6 -0
  327. package/dist/src/context/system-tests/powerUserLifecycle.test.js +91 -0
  328. package/dist/src/context/system-tests/powerUserLifecycle.test.js.map +1 -0
  329. package/dist/src/context/system-tests/simulationHarness.d.ts +2 -5
  330. package/dist/src/context/system-tests/simulationHarness.js +34 -35
  331. package/dist/src/context/system-tests/simulationHarness.js.map +1 -1
  332. package/dist/src/context/testing/contextTestUtils.d.ts +5 -3
  333. package/dist/src/context/testing/contextTestUtils.js +74 -53
  334. package/dist/src/context/testing/contextTestUtils.js.map +1 -1
  335. package/dist/src/context/testing/testProfile.js +1 -0
  336. package/dist/src/context/testing/testProfile.js.map +1 -1
  337. package/dist/src/context/toolOutputMaskingService.js +1 -2
  338. package/dist/src/context/toolOutputMaskingService.js.map +1 -1
  339. package/dist/src/context/toolOutputMaskingService.test.js +5 -20
  340. package/dist/src/context/toolOutputMaskingService.test.js.map +1 -1
  341. package/dist/src/context/utils/adaptiveTokenCalculator.d.ts +70 -0
  342. package/dist/src/context/utils/adaptiveTokenCalculator.js +138 -0
  343. package/dist/src/context/utils/adaptiveTokenCalculator.js.map +1 -0
  344. package/dist/src/context/utils/adaptiveTokenCalculator.test.d.ts +6 -0
  345. package/dist/src/context/utils/adaptiveTokenCalculator.test.js +129 -0
  346. package/dist/src/context/utils/adaptiveTokenCalculator.test.js.map +1 -0
  347. package/dist/src/context/utils/contextTokenCalculator.d.ts +63 -2
  348. package/dist/src/context/utils/contextTokenCalculator.js +80 -5
  349. package/dist/src/context/utils/contextTokenCalculator.js.map +1 -1
  350. package/dist/src/context/utils/contextTokenCalculator.test.d.ts +6 -0
  351. package/dist/src/context/utils/contextTokenCalculator.test.js +54 -0
  352. package/dist/src/context/utils/contextTokenCalculator.test.js.map +1 -0
  353. package/dist/src/context/utils/formatNodesForLlm.d.ts +21 -0
  354. package/dist/src/context/utils/formatNodesForLlm.js +69 -0
  355. package/dist/src/context/utils/formatNodesForLlm.js.map +1 -0
  356. package/dist/src/context/utils/formatNodesForLlm.test.d.ts +6 -0
  357. package/dist/src/context/utils/formatNodesForLlm.test.js +110 -0
  358. package/dist/src/context/utils/formatNodesForLlm.test.js.map +1 -0
  359. package/dist/src/context/utils/invariantChecker.d.ts +11 -0
  360. package/dist/src/context/utils/invariantChecker.js +36 -0
  361. package/dist/src/context/utils/invariantChecker.js.map +1 -0
  362. package/dist/src/context/utils/snapshotGenerator.d.ts +43 -1
  363. package/dist/src/context/utils/snapshotGenerator.js +332 -33
  364. package/dist/src/context/utils/snapshotGenerator.js.map +1 -1
  365. package/dist/src/context/utils/snapshotGenerator.test.d.ts +6 -0
  366. package/dist/src/context/utils/snapshotGenerator.test.js +362 -0
  367. package/dist/src/context/utils/snapshotGenerator.test.js.map +1 -0
  368. package/dist/src/context/utils/tokenCalibration.d.ts +9 -0
  369. package/dist/src/context/utils/tokenCalibration.js +30 -0
  370. package/dist/src/context/utils/tokenCalibration.js.map +1 -0
  371. package/dist/src/core/agentChatHistory.d.ts +29 -14
  372. package/dist/src/core/agentChatHistory.js +27 -27
  373. package/dist/src/core/agentChatHistory.js.map +1 -1
  374. package/dist/src/core/baseLlmClient.d.ts +8 -0
  375. package/dist/src/core/baseLlmClient.js +23 -3
  376. package/dist/src/core/baseLlmClient.js.map +1 -1
  377. package/dist/src/core/baseLlmClient.test.js +27 -23
  378. package/dist/src/core/baseLlmClient.test.js.map +1 -1
  379. package/dist/src/core/client.d.ts +7 -5
  380. package/dist/src/core/client.js +65 -40
  381. package/dist/src/core/client.js.map +1 -1
  382. package/dist/src/core/client.test.js +35 -131
  383. package/dist/src/core/client.test.js.map +1 -1
  384. package/dist/src/core/contentGenerator.js +46 -21
  385. package/dist/src/core/contentGenerator.js.map +1 -1
  386. package/dist/src/core/contentGenerator.test.js +191 -13
  387. package/dist/src/core/contentGenerator.test.js.map +1 -1
  388. package/dist/src/core/fakeContentGenerator.d.ts +15 -3
  389. package/dist/src/core/fakeContentGenerator.js +29 -9
  390. package/dist/src/core/fakeContentGenerator.js.map +1 -1
  391. package/dist/src/core/geminiChat.d.ts +18 -7
  392. package/dist/src/core/geminiChat.js +312 -54
  393. package/dist/src/core/geminiChat.js.map +1 -1
  394. package/dist/src/core/geminiChat.test.js +448 -54
  395. package/dist/src/core/geminiChat.test.js.map +1 -1
  396. package/dist/src/core/geminiChat_network_retry.test.js +39 -0
  397. package/dist/src/core/geminiChat_network_retry.test.js.map +1 -1
  398. package/dist/src/core/localLiteRtLmClient.js +6 -2
  399. package/dist/src/core/localLiteRtLmClient.js.map +1 -1
  400. package/dist/src/core/prompts.test.js +12 -7
  401. package/dist/src/core/prompts.test.js.map +1 -1
  402. package/dist/src/core/turn.d.ts +7 -2
  403. package/dist/src/core/turn.js +61 -4
  404. package/dist/src/core/turn.js.map +1 -1
  405. package/dist/src/core/turn.test.js +19 -10
  406. package/dist/src/core/turn.test.js.map +1 -1
  407. package/dist/src/fallback/handler.js +16 -6
  408. package/dist/src/fallback/handler.js.map +1 -1
  409. package/dist/src/fallback/handler.test.js +8 -2
  410. package/dist/src/fallback/handler.test.js.map +1 -1
  411. package/dist/src/generated/git-commit.d.ts +2 -2
  412. package/dist/src/generated/git-commit.js +2 -2
  413. package/dist/src/hooks/hookEventHandler.js +3 -2
  414. package/dist/src/hooks/hookEventHandler.js.map +1 -1
  415. package/dist/src/hooks/hookEventHandler.test.js +80 -0
  416. package/dist/src/hooks/hookEventHandler.test.js.map +1 -1
  417. package/dist/src/hooks/hookRunner.test.js +3 -3
  418. package/dist/src/hooks/hookRunner.test.js.map +1 -1
  419. package/dist/src/hooks/hookTranslator.js +95 -5
  420. package/dist/src/hooks/hookTranslator.js.map +1 -1
  421. package/dist/src/hooks/hookTranslator.test.js +171 -0
  422. package/dist/src/hooks/hookTranslator.test.js.map +1 -1
  423. package/dist/src/ide/ide-client.js +5 -3
  424. package/dist/src/ide/ide-client.js.map +1 -1
  425. package/dist/src/ide/ide-connection-utils.js +12 -10
  426. package/dist/src/ide/ide-connection-utils.js.map +1 -1
  427. package/dist/src/ide/ide-connection-utils.test.js +25 -2
  428. package/dist/src/ide/ide-connection-utils.test.js.map +1 -1
  429. package/dist/src/ide/types.d.ts +16 -16
  430. package/dist/src/index.d.ts +5 -2
  431. package/dist/src/index.js +5 -3
  432. package/dist/src/index.js.map +1 -1
  433. package/dist/src/mcp/oauth-provider.d.ts +8 -0
  434. package/dist/src/mcp/oauth-provider.js +41 -0
  435. package/dist/src/mcp/oauth-provider.js.map +1 -1
  436. package/dist/src/mcp/oauth-token-storage.js +7 -1
  437. package/dist/src/mcp/oauth-token-storage.js.map +1 -1
  438. package/dist/src/mcp/oauth-token-storage.test.js +55 -0
  439. package/dist/src/mcp/oauth-token-storage.test.js.map +1 -1
  440. package/dist/src/mcp/stored-token-provider.d.ts +27 -0
  441. package/dist/src/mcp/stored-token-provider.js +76 -0
  442. package/dist/src/mcp/stored-token-provider.js.map +1 -0
  443. package/dist/src/mcp/token-storage/keychain-token-storage.js +2 -2
  444. package/dist/src/mcp/token-storage/keychain-token-storage.js.map +1 -1
  445. package/dist/src/mcp/token-storage/keychain-token-storage.test.js +14 -1
  446. package/dist/src/mcp/token-storage/keychain-token-storage.test.js.map +1 -1
  447. package/dist/src/output/json-formatter.d.ts +1 -1
  448. package/dist/src/output/json-formatter.js +4 -1
  449. package/dist/src/output/json-formatter.js.map +1 -1
  450. package/dist/src/output/json-formatter.test.js +7 -0
  451. package/dist/src/output/json-formatter.test.js.map +1 -1
  452. package/dist/src/output/types.d.ts +1 -0
  453. package/dist/src/output/types.js.map +1 -1
  454. package/dist/src/policy/config.js +25 -0
  455. package/dist/src/policy/config.js.map +1 -1
  456. package/dist/src/policy/config.test.js +80 -0
  457. package/dist/src/policy/config.test.js.map +1 -1
  458. package/dist/src/policy/core-tools-mapping.test.js +9 -1
  459. package/dist/src/policy/core-tools-mapping.test.js.map +1 -1
  460. package/dist/src/policy/policies/plan.toml +1 -1
  461. package/dist/src/policy/policies/write.toml +0 -7
  462. package/dist/src/policy/policy-engine.test.js +0 -8
  463. package/dist/src/policy/policy-engine.test.js.map +1 -1
  464. package/dist/src/policy/sandboxPolicyManager.d.ts +20 -20
  465. package/dist/src/policy/stable-stringify.js +10 -6
  466. package/dist/src/policy/stable-stringify.js.map +1 -1
  467. package/dist/src/policy/stable-stringify.test.js +157 -0
  468. package/dist/src/policy/stable-stringify.test.js.map +1 -0
  469. package/dist/src/policy/types.d.ts +1 -0
  470. package/dist/src/policy/types.js.map +1 -1
  471. package/dist/src/prompts/promptProvider.js +8 -9
  472. package/dist/src/prompts/promptProvider.js.map +1 -1
  473. package/dist/src/prompts/promptProvider.test.js +3 -1
  474. package/dist/src/prompts/promptProvider.test.js.map +1 -1
  475. package/dist/src/prompts/snippets-memory.test.d.ts +6 -0
  476. package/dist/src/prompts/{snippets-memory-v2.test.js → snippets-memory.test.js} +5 -23
  477. package/dist/src/prompts/snippets-memory.test.js.map +1 -0
  478. package/dist/src/prompts/snippets.d.ts +6 -11
  479. package/dist/src/prompts/snippets.js +28 -30
  480. package/dist/src/prompts/snippets.js.map +1 -1
  481. package/dist/src/prompts/snippets.legacy.d.ts +0 -1
  482. package/dist/src/prompts/snippets.legacy.js +8 -15
  483. package/dist/src/prompts/snippets.legacy.js.map +1 -1
  484. package/dist/src/routing/strategies/approvalModeStrategy.js +5 -3
  485. package/dist/src/routing/strategies/approvalModeStrategy.js.map +1 -1
  486. package/dist/src/routing/strategies/approvalModeStrategy.test.js +9 -0
  487. package/dist/src/routing/strategies/approvalModeStrategy.test.js.map +1 -1
  488. package/dist/src/routing/strategies/classifierStrategy.js +18 -4
  489. package/dist/src/routing/strategies/classifierStrategy.js.map +1 -1
  490. package/dist/src/routing/strategies/classifierStrategy.test.js +77 -1
  491. package/dist/src/routing/strategies/classifierStrategy.test.js.map +1 -1
  492. package/dist/src/routing/strategies/defaultStrategy.js +1 -1
  493. package/dist/src/routing/strategies/defaultStrategy.js.map +1 -1
  494. package/dist/src/routing/strategies/fallbackStrategy.js +1 -1
  495. package/dist/src/routing/strategies/fallbackStrategy.js.map +1 -1
  496. package/dist/src/routing/strategies/gemmaClassifierStrategy.js +7 -1
  497. package/dist/src/routing/strategies/gemmaClassifierStrategy.js.map +1 -1
  498. package/dist/src/routing/strategies/gemmaClassifierStrategy.test.js +15 -1
  499. package/dist/src/routing/strategies/gemmaClassifierStrategy.test.js.map +1 -1
  500. package/dist/src/routing/strategies/numericalClassifierStrategy.d.ts +1 -0
  501. package/dist/src/routing/strategies/numericalClassifierStrategy.js +32 -5
  502. package/dist/src/routing/strategies/numericalClassifierStrategy.js.map +1 -1
  503. package/dist/src/routing/strategies/numericalClassifierStrategy.test.js +247 -25
  504. package/dist/src/routing/strategies/numericalClassifierStrategy.test.js.map +1 -1
  505. package/dist/src/routing/strategies/overrideStrategy.js +1 -1
  506. package/dist/src/routing/strategies/overrideStrategy.js.map +1 -1
  507. package/dist/src/sandbox/utils/commandSafety.js +22 -2
  508. package/dist/src/sandbox/utils/commandSafety.js.map +1 -1
  509. package/dist/src/sandbox/utils/commandSafety.test.d.ts +6 -0
  510. package/dist/src/sandbox/utils/commandSafety.test.js +85 -0
  511. package/dist/src/sandbox/utils/commandSafety.test.js.map +1 -0
  512. package/dist/src/scheduler/confirmation.test.js +29 -0
  513. package/dist/src/scheduler/confirmation.test.js.map +1 -1
  514. package/dist/src/scheduler/scheduler.js +15 -0
  515. package/dist/src/scheduler/scheduler.js.map +1 -1
  516. package/dist/src/scheduler/scheduler.test.js +1 -1
  517. package/dist/src/scheduler/scheduler.test.js.map +1 -1
  518. package/dist/src/scheduler/scheduler_parallel.test.js +37 -0
  519. package/dist/src/scheduler/scheduler_parallel.test.js.map +1 -1
  520. package/dist/src/scheduler/state-manager.js +5 -1
  521. package/dist/src/scheduler/state-manager.js.map +1 -1
  522. package/dist/src/scheduler/tool-executor.js +7 -4
  523. package/dist/src/scheduler/tool-executor.js.map +1 -1
  524. package/dist/src/scheduler/types.d.ts +5 -1
  525. package/dist/src/scheduler/types.js.map +1 -1
  526. package/dist/src/services/chatRecordingService.d.ts +14 -7
  527. package/dist/src/services/chatRecordingService.js +157 -133
  528. package/dist/src/services/chatRecordingService.js.map +1 -1
  529. package/dist/src/services/chatRecordingService.test.js +189 -52
  530. package/dist/src/services/chatRecordingService.test.js.map +1 -1
  531. package/dist/src/services/fileDiscoveryService.js +2 -1
  532. package/dist/src/services/fileDiscoveryService.js.map +1 -1
  533. package/dist/src/services/fileDiscoveryService.test.js +36 -0
  534. package/dist/src/services/fileDiscoveryService.test.js.map +1 -1
  535. package/dist/src/services/gitService.js +43 -4
  536. package/dist/src/services/gitService.js.map +1 -1
  537. package/dist/src/services/gitService.test.js +105 -1
  538. package/dist/src/services/gitService.test.js.map +1 -1
  539. package/dist/src/services/keychainService.js +14 -5
  540. package/dist/src/services/keychainService.js.map +1 -1
  541. package/dist/src/services/memoryPatchUtils.d.ts +93 -0
  542. package/dist/src/services/memoryPatchUtils.js +310 -2
  543. package/dist/src/services/memoryPatchUtils.js.map +1 -1
  544. package/dist/src/services/memoryService.d.ts +2 -0
  545. package/dist/src/services/memoryService.js +214 -9
  546. package/dist/src/services/memoryService.js.map +1 -1
  547. package/dist/src/services/memoryService.test.js +133 -0
  548. package/dist/src/services/memoryService.test.js.map +1 -1
  549. package/dist/src/services/modelConfigService.d.ts +3 -0
  550. package/dist/src/services/modelConfigService.js +22 -13
  551. package/dist/src/services/modelConfigService.js.map +1 -1
  552. package/dist/src/services/modelConfigService.test.js +73 -0
  553. package/dist/src/services/modelConfigService.test.js.map +1 -1
  554. package/dist/src/services/shellExecutionService.js +88 -41
  555. package/dist/src/services/shellExecutionService.js.map +1 -1
  556. package/dist/src/services/shellExecutionService.test.js +22 -9
  557. package/dist/src/services/shellExecutionService.test.js.map +1 -1
  558. package/dist/src/services/shellExecutionService.windows.integration.test.d.ts +6 -0
  559. package/dist/src/services/shellExecutionService.windows.integration.test.js +63 -0
  560. package/dist/src/services/shellExecutionService.windows.integration.test.js.map +1 -0
  561. package/dist/src/services/test-data/resolved-aliases-retry.golden.json +85 -7
  562. package/dist/src/services/test-data/resolved-aliases.golden.json +85 -7
  563. package/dist/src/services/trackerTypes.d.ts +4 -4
  564. package/dist/src/skills/skillManager.d.ts +4 -0
  565. package/dist/src/skills/skillManager.js +6 -0
  566. package/dist/src/skills/skillManager.js.map +1 -1
  567. package/dist/src/skills/skillManager.test.js +10 -0
  568. package/dist/src/skills/skillManager.test.js.map +1 -1
  569. package/dist/src/telemetry/file-exporters.d.ts +4 -1
  570. package/dist/src/telemetry/file-exporters.js +21 -3
  571. package/dist/src/telemetry/file-exporters.js.map +1 -1
  572. package/dist/src/telemetry/file-exporters.test.js +32 -2
  573. package/dist/src/telemetry/file-exporters.test.js.map +1 -1
  574. package/dist/src/telemetry/gcp-exporters.d.ts +3 -0
  575. package/dist/src/telemetry/gcp-exporters.js +72 -5
  576. package/dist/src/telemetry/gcp-exporters.js.map +1 -1
  577. package/dist/src/telemetry/gcp-exporters.test.js +52 -0
  578. package/dist/src/telemetry/gcp-exporters.test.js.map +1 -1
  579. package/dist/src/telemetry/heap-snapshot.d.ts +12 -0
  580. package/dist/src/telemetry/heap-snapshot.js +35 -0
  581. package/dist/src/telemetry/heap-snapshot.js.map +1 -0
  582. package/dist/src/telemetry/heap-snapshot.test.d.ts +6 -0
  583. package/dist/src/telemetry/heap-snapshot.test.js +38 -0
  584. package/dist/src/telemetry/heap-snapshot.test.js.map +1 -0
  585. package/dist/src/telemetry/index.d.ts +1 -0
  586. package/dist/src/telemetry/index.js +1 -0
  587. package/dist/src/telemetry/index.js.map +1 -1
  588. package/dist/src/telemetry/loggers.test.js +1 -0
  589. package/dist/src/telemetry/loggers.test.js.map +1 -1
  590. package/dist/src/telemetry/memory-monitor.d.ts +5 -0
  591. package/dist/src/telemetry/memory-monitor.js +8 -0
  592. package/dist/src/telemetry/memory-monitor.js.map +1 -1
  593. package/dist/src/telemetry/metrics.js +13 -2
  594. package/dist/src/telemetry/metrics.js.map +1 -1
  595. package/dist/src/telemetry/metrics.test.js +61 -1
  596. package/dist/src/telemetry/metrics.test.js.map +1 -1
  597. package/dist/src/test-utils/config.js +10 -1
  598. package/dist/src/test-utils/config.js.map +1 -1
  599. package/dist/src/tools/ask-user.js +25 -1
  600. package/dist/src/tools/ask-user.js.map +1 -1
  601. package/dist/src/tools/ask-user.test.js +46 -1
  602. package/dist/src/tools/ask-user.test.js.map +1 -1
  603. package/dist/src/tools/definitions/base-declarations.d.ts +0 -3
  604. package/dist/src/tools/definitions/base-declarations.js +0 -4
  605. package/dist/src/tools/definitions/base-declarations.js.map +1 -1
  606. package/dist/src/tools/definitions/coreTools.d.ts +1 -2
  607. package/dist/src/tools/definitions/coreTools.js +2 -8
  608. package/dist/src/tools/definitions/coreTools.js.map +1 -1
  609. package/dist/src/tools/definitions/coreToolsModelSnapshots.test.js +1 -2
  610. package/dist/src/tools/definitions/coreToolsModelSnapshots.test.js.map +1 -1
  611. package/dist/src/tools/definitions/model-family-sets/default-legacy.js +7 -31
  612. package/dist/src/tools/definitions/model-family-sets/default-legacy.js.map +1 -1
  613. package/dist/src/tools/definitions/model-family-sets/gemini-3.js +9 -26
  614. package/dist/src/tools/definitions/model-family-sets/gemini-3.js.map +1 -1
  615. package/dist/src/tools/definitions/types.d.ts +0 -1
  616. package/dist/src/tools/edit.js +27 -5
  617. package/dist/src/tools/edit.js.map +1 -1
  618. package/dist/src/tools/edit.test.js +37 -0
  619. package/dist/src/tools/edit.test.js.map +1 -1
  620. package/dist/src/tools/grep.js +14 -2
  621. package/dist/src/tools/grep.js.map +1 -1
  622. package/dist/src/tools/grep.test.js +17 -0
  623. package/dist/src/tools/grep.test.js.map +1 -1
  624. package/dist/src/tools/jit-context.d.ts +1 -1
  625. package/dist/src/tools/jit-context.js +1 -4
  626. package/dist/src/tools/jit-context.js.map +1 -1
  627. package/dist/src/tools/jit-context.test.js +1 -13
  628. package/dist/src/tools/jit-context.test.js.map +1 -1
  629. package/dist/src/tools/ls.js +5 -0
  630. package/dist/src/tools/ls.js.map +1 -1
  631. package/dist/src/tools/mcp-client-manager.js +2 -1
  632. package/dist/src/tools/mcp-client-manager.js.map +1 -1
  633. package/dist/src/tools/mcp-client-manager.test.js +29 -0
  634. package/dist/src/tools/mcp-client-manager.test.js.map +1 -1
  635. package/dist/src/tools/mcp-client.js +89 -50
  636. package/dist/src/tools/mcp-client.js.map +1 -1
  637. package/dist/src/tools/mcp-client.test.js +353 -59
  638. package/dist/src/tools/mcp-client.test.js.map +1 -1
  639. package/dist/src/tools/{xcode-mcp-fix-transport.d.ts → mcp-compliance-transport.d.ts} +6 -6
  640. package/dist/src/tools/{xcode-mcp-fix-transport.js → mcp-compliance-transport.js} +6 -6
  641. package/dist/src/tools/mcp-compliance-transport.js.map +1 -0
  642. package/dist/src/tools/mcp-compliance-transport.test.d.ts +6 -0
  643. package/dist/src/tools/mcp-compliance-transport.test.js +162 -0
  644. package/dist/src/tools/mcp-compliance-transport.test.js.map +1 -0
  645. package/dist/src/tools/memoryTool.d.ts +9 -31
  646. package/dist/src/tools/memoryTool.js +47 -262
  647. package/dist/src/tools/memoryTool.js.map +1 -1
  648. package/dist/src/tools/memoryTool.test.js +41 -312
  649. package/dist/src/tools/memoryTool.test.js.map +1 -1
  650. package/dist/src/tools/read-file.js +11 -6
  651. package/dist/src/tools/read-file.js.map +1 -1
  652. package/dist/src/tools/read-file.test.js +20 -8
  653. package/dist/src/tools/read-file.test.js.map +1 -1
  654. package/dist/src/tools/read-many-files.js +2 -2
  655. package/dist/src/tools/read-many-files.js.map +1 -1
  656. package/dist/src/tools/ripGrep.d.ts +3 -7
  657. package/dist/src/tools/ripGrep.js +57 -35
  658. package/dist/src/tools/ripGrep.js.map +1 -1
  659. package/dist/src/tools/ripGrep.test.js +197 -276
  660. package/dist/src/tools/ripGrep.test.js.map +1 -1
  661. package/dist/src/tools/shell.d.ts +5 -3
  662. package/dist/src/tools/shell.js +130 -36
  663. package/dist/src/tools/shell.js.map +1 -1
  664. package/dist/src/tools/shell.test.js +186 -14
  665. package/dist/src/tools/shell.test.js.map +1 -1
  666. package/dist/src/tools/shell_proactive.test.js +1 -0
  667. package/dist/src/tools/shell_proactive.test.js.map +1 -1
  668. package/dist/src/tools/tool-names.d.ts +3 -3
  669. package/dist/src/tools/tool-names.js +4 -5
  670. package/dist/src/tools/tool-names.js.map +1 -1
  671. package/dist/src/tools/tool-registry.js +1 -1
  672. package/dist/src/tools/tool-registry.js.map +1 -1
  673. package/dist/src/tools/tools.d.ts +6 -0
  674. package/dist/src/tools/tools.js.map +1 -1
  675. package/dist/src/tools/topicTool.js +5 -0
  676. package/dist/src/tools/topicTool.js.map +1 -1
  677. package/dist/src/tools/write-file.js +13 -0
  678. package/dist/src/tools/write-file.js.map +1 -1
  679. package/dist/src/tools/write-file.test.js +8 -0
  680. package/dist/src/tools/write-file.test.js.map +1 -1
  681. package/dist/src/utils/atCommandUtils.d.ts +35 -0
  682. package/dist/src/utils/atCommandUtils.js +163 -0
  683. package/dist/src/utils/atCommandUtils.js.map +1 -0
  684. package/dist/src/utils/atCommandUtils.test.d.ts +6 -0
  685. package/dist/src/utils/atCommandUtils.test.js +292 -0
  686. package/dist/src/utils/atCommandUtils.test.js.map +1 -0
  687. package/dist/src/utils/channel.d.ts +8 -0
  688. package/dist/src/utils/channel.js +21 -10
  689. package/dist/src/utils/channel.js.map +1 -1
  690. package/dist/src/utils/cryptoUtils.d.ts +11 -0
  691. package/dist/src/utils/cryptoUtils.js +19 -0
  692. package/dist/src/utils/cryptoUtils.js.map +1 -0
  693. package/dist/src/utils/cryptoUtils.test.d.ts +6 -0
  694. package/dist/src/utils/cryptoUtils.test.js +31 -0
  695. package/dist/src/utils/cryptoUtils.test.js.map +1 -0
  696. package/dist/src/utils/editor.d.ts +29 -3
  697. package/dist/src/utils/editor.js +94 -3
  698. package/dist/src/utils/editor.js.map +1 -1
  699. package/dist/src/utils/editor.test.js +176 -2
  700. package/dist/src/utils/editor.test.js.map +1 -1
  701. package/dist/src/utils/environmentContext.d.ts +2 -1
  702. package/dist/src/utils/environmentContext.js +15 -8
  703. package/dist/src/utils/environmentContext.js.map +1 -1
  704. package/dist/src/utils/environmentContext.test.js +4 -14
  705. package/dist/src/utils/environmentContext.test.js.map +1 -1
  706. package/dist/src/utils/errors.js +3 -8
  707. package/dist/src/utils/errors.js.map +1 -1
  708. package/dist/src/utils/events.d.ts +26 -1
  709. package/dist/src/utils/events.js +21 -2
  710. package/dist/src/utils/events.js.map +1 -1
  711. package/dist/src/utils/events.test.js +39 -0
  712. package/dist/src/utils/events.test.js.map +1 -1
  713. package/dist/src/utils/extensionLoader.js +2 -2
  714. package/dist/src/utils/extensionLoader.js.map +1 -1
  715. package/dist/src/utils/extensionLoader.test.js +22 -15
  716. package/dist/src/utils/extensionLoader.test.js.map +1 -1
  717. package/dist/src/utils/fetch.d.ts +3 -3
  718. package/dist/src/utils/fetch.js +44 -20
  719. package/dist/src/utils/fetch.js.map +1 -1
  720. package/dist/src/utils/fetch.test.js +93 -17
  721. package/dist/src/utils/fetch.test.js.map +1 -1
  722. package/dist/src/utils/fileUtils.js +4 -1
  723. package/dist/src/utils/fileUtils.js.map +1 -1
  724. package/dist/src/utils/filesearch/fileSearch.js +20 -9
  725. package/dist/src/utils/filesearch/fileSearch.js.map +1 -1
  726. package/dist/src/utils/filesearch/ignore.js +4 -1
  727. package/dist/src/utils/filesearch/ignore.js.map +1 -1
  728. package/dist/src/utils/generateContentResponseUtilities.d.ts +1 -0
  729. package/dist/src/utils/generateContentResponseUtilities.js +37 -7
  730. package/dist/src/utils/generateContentResponseUtilities.js.map +1 -1
  731. package/dist/src/utils/generateContentResponseUtilities.test.js +33 -0
  732. package/dist/src/utils/generateContentResponseUtilities.test.js.map +1 -1
  733. package/dist/src/utils/gitUtils.d.ts +5 -0
  734. package/dist/src/utils/gitUtils.js +11 -0
  735. package/dist/src/utils/gitUtils.js.map +1 -1
  736. package/dist/src/utils/historyHardening.d.ts +37 -0
  737. package/dist/src/utils/historyHardening.js +332 -0
  738. package/dist/src/utils/historyHardening.js.map +1 -0
  739. package/dist/src/utils/historyHardening.test.d.ts +6 -0
  740. package/dist/src/utils/historyHardening.test.js +317 -0
  741. package/dist/src/utils/historyHardening.test.js.map +1 -0
  742. package/dist/src/utils/ignoreFileParser.js +1 -1
  743. package/dist/src/utils/ignoreFileParser.js.map +1 -1
  744. package/dist/src/utils/ignorePatterns.js +2 -0
  745. package/dist/src/utils/ignorePatterns.js.map +1 -1
  746. package/dist/src/utils/ignorePatterns.test.js +1 -0
  747. package/dist/src/utils/ignorePatterns.test.js.map +1 -1
  748. package/dist/src/utils/memoryDiscovery.d.ts +0 -20
  749. package/dist/src/utils/memoryDiscovery.js +57 -220
  750. package/dist/src/utils/memoryDiscovery.js.map +1 -1
  751. package/dist/src/utils/memoryDiscovery.test.js +112 -403
  752. package/dist/src/utils/memoryDiscovery.test.js.map +1 -1
  753. package/dist/src/utils/modelUtils.d.ts +14 -0
  754. package/dist/src/utils/modelUtils.js +17 -0
  755. package/dist/src/utils/modelUtils.js.map +1 -0
  756. package/dist/src/utils/modelUtils.test.d.ts +6 -0
  757. package/dist/src/utils/modelUtils.test.js +23 -0
  758. package/dist/src/utils/modelUtils.test.js.map +1 -0
  759. package/dist/src/utils/partUtils.d.ts +26 -1
  760. package/dist/src/utils/partUtils.js +37 -0
  761. package/dist/src/utils/partUtils.js.map +1 -1
  762. package/dist/src/utils/path-validator.d.ts +17 -0
  763. package/dist/src/utils/path-validator.js +76 -0
  764. package/dist/src/utils/path-validator.js.map +1 -0
  765. package/dist/src/utils/path-validator.test.d.ts +6 -0
  766. package/dist/src/utils/path-validator.test.js +91 -0
  767. package/dist/src/utils/path-validator.test.js.map +1 -0
  768. package/dist/src/utils/pathReader.js +12 -0
  769. package/dist/src/utils/pathReader.js.map +1 -1
  770. package/dist/src/utils/pathReader.test.js +95 -0
  771. package/dist/src/utils/pathReader.test.js.map +1 -1
  772. package/dist/src/utils/paths.d.ts +19 -1
  773. package/dist/src/utils/paths.js +74 -9
  774. package/dist/src/utils/paths.js.map +1 -1
  775. package/dist/src/utils/paths.test.js +111 -1
  776. package/dist/src/utils/paths.test.js.map +1 -1
  777. package/dist/src/utils/quotaErrorDetection.js +23 -12
  778. package/dist/src/utils/quotaErrorDetection.js.map +1 -1
  779. package/dist/src/utils/ragLogger.d.ts +32 -0
  780. package/dist/src/utils/ragLogger.js +56 -0
  781. package/dist/src/utils/ragLogger.js.map +1 -0
  782. package/dist/src/utils/ragLogger.test.d.ts +6 -0
  783. package/dist/src/utils/ragLogger.test.js +97 -0
  784. package/dist/src/utils/ragLogger.test.js.map +1 -0
  785. package/dist/src/utils/retry.js +8 -3
  786. package/dist/src/utils/retry.js.map +1 -1
  787. package/dist/src/utils/retry.test.js +17 -0
  788. package/dist/src/utils/retry.test.js.map +1 -1
  789. package/dist/src/utils/safeJsonStringify.js +0 -2
  790. package/dist/src/utils/safeJsonStringify.js.map +1 -1
  791. package/dist/src/utils/sessionOperations.d.ts +26 -0
  792. package/dist/src/utils/sessionOperations.js +177 -8
  793. package/dist/src/utils/sessionOperations.js.map +1 -1
  794. package/dist/src/utils/sessionUtils.d.ts +11 -5
  795. package/dist/src/utils/sessionUtils.js +139 -68
  796. package/dist/src/utils/sessionUtils.js.map +1 -1
  797. package/dist/src/utils/sessionUtils.test.js +31 -5
  798. package/dist/src/utils/sessionUtils.test.js.map +1 -1
  799. package/dist/src/utils/shell-utils.d.ts +9 -1
  800. package/dist/src/utils/shell-utils.js +51 -20
  801. package/dist/src/utils/shell-utils.js.map +1 -1
  802. package/dist/src/utils/shell-utils.test.js +87 -46
  803. package/dist/src/utils/shell-utils.test.js.map +1 -1
  804. package/dist/src/utils/textUtils.d.ts +12 -2
  805. package/dist/src/utils/textUtils.js +30 -3
  806. package/dist/src/utils/textUtils.js.map +1 -1
  807. package/dist/src/utils/textUtils.test.js +96 -1
  808. package/dist/src/utils/textUtils.test.js.map +1 -1
  809. package/dist/src/utils/tokenCalculation.d.ts +3 -2
  810. package/dist/src/utils/tokenCalculation.js +9 -5
  811. package/dist/src/utils/tokenCalculation.js.map +1 -1
  812. package/dist/src/utils/tokenCalculation.test.js +15 -0
  813. package/dist/src/utils/tokenCalculation.test.js.map +1 -1
  814. package/dist/tsconfig.tsbuildinfo +1 -1
  815. package/package.json +18 -18
  816. package/dist/src/context/historyObserver.d.ts +0 -28
  817. package/dist/src/context/historyObserver.js +0 -63
  818. package/dist/src/context/historyObserver.js.map +0 -1
  819. package/dist/src/policy/memory-manager-policy.test.js +0 -80
  820. package/dist/src/policy/memory-manager-policy.test.js.map +0 -1
  821. package/dist/src/policy/policies/memory-manager.toml +0 -20
  822. package/dist/src/prompts/snippets-memory-v2.test.js.map +0 -1
  823. package/dist/src/tools/xcode-mcp-fix-transport.js.map +0 -1
  824. package/dist/src/tools/xcode-mcp-fix-transport.test.d.ts +0 -1
  825. package/dist/src/tools/xcode-mcp-fix-transport.test.js +0 -98
  826. package/dist/src/tools/xcode-mcp-fix-transport.test.js.map +0 -1
  827. package/dist/src/utils/systemEncoding.d.ts +0 -40
  828. package/dist/src/utils/systemEncoding.js +0 -150
  829. package/dist/src/utils/systemEncoding.js.map +0 -1
  830. package/dist/src/utils/systemEncoding.test.js +0 -369
  831. package/dist/src/utils/systemEncoding.test.js.map +0 -1
  832. /package/dist/src/{policy/memory-manager-policy.test.d.ts → agents/local-session-invocation.test.d.ts} +0 -0
  833. /package/dist/src/{prompts/snippets-memory-v2.test.d.ts → agents/local-subagent-protocol.test.d.ts} +0 -0
  834. /package/dist/src/{utils/systemEncoding.test.d.ts → policy/stable-stringify.test.d.ts} +0 -0
@@ -3,90 +3,184 @@
3
3
  * Copyright 2026 Google LLC
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
- import { HistoryObserver } from './historyObserver.js';
7
6
  import { render } from './graph/render.js';
8
7
  import { ContextWorkingBufferImpl } from './pipeline/contextWorkingBuffer.js';
8
+ import { debugLogger } from '../utils/debugLogger.js';
9
+ import { deriveStableId } from '../utils/cryptoUtils.js';
10
+ import { hardenHistory } from '../utils/historyHardening.js';
11
+ import { checkContextInvariants } from './utils/invariantChecker.js';
9
12
  export class ContextManager {
10
13
  sidecar;
11
14
  env;
12
15
  tracer;
13
- // The master state containing the pristine graph and current active graph.
16
+ chatHistory;
17
+ advancedTokenCalculator;
18
+ headerProvider;
19
+ // Master state containing the pristine graph and current active graph.
14
20
  buffer = ContextWorkingBufferImpl.initialize([]);
15
21
  eventBus;
16
- // Internal sub-components
17
22
  orchestrator;
18
- historyObserver;
19
- constructor(sidecar, env, tracer, orchestrator, chatHistory) {
23
+ // Track what IDs have been evaluated for triggers to prevent redundant processing
24
+ evaluatedNodeIds = new Set();
25
+ // Hysteresis tracking to prevent utility call churn
26
+ lastTriggeredDeficit = 0;
27
+ lastTriggeredNormalizeDeficit = 0;
28
+ // Cache for Anomaly 3 (Redundant Renders)
29
+ lastRenderCache;
30
+ hasPerformedHotStart = false;
31
+ constructor(sidecar, env, tracer, orchestrator, chatHistory, advancedTokenCalculator, headerProvider) {
20
32
  this.sidecar = sidecar;
21
33
  this.env = env;
22
34
  this.tracer = tracer;
35
+ this.chatHistory = chatHistory;
36
+ this.advancedTokenCalculator = advancedTokenCalculator;
37
+ this.headerProvider = headerProvider;
23
38
  this.eventBus = env.eventBus;
24
39
  this.orchestrator = orchestrator;
25
- this.historyObserver = new HistoryObserver(chatHistory, this.env.eventBus, this.tracer, this.env.tokenCalculator, this.env.graphMapper);
26
- this.eventBus.onPristineHistoryUpdated((event) => {
27
- const newIds = new Set(event.nodes.map((n) => n.id));
28
- const addedNodes = event.nodes.filter((n) => event.newNodes.has(n.id));
29
- // Prune any pristine nodes that were dropped from the upstream history
30
- this.buffer = this.buffer.prunePristineNodes(newIds);
31
- if (addedNodes.length > 0) {
32
- this.buffer = this.buffer.appendPristineNodes(addedNodes);
33
- }
34
- this.evaluateTriggers(event.newNodes);
35
- });
40
+ // Direct synchronization: ContextManager is the "Pull Master"
41
+ // and tells the orchestrator what to do.
42
+ this.orchestrator.setNodeProvider(() => this.buffer.nodes);
36
43
  this.eventBus.onProcessorResult((event) => {
44
+ // Defensive: Verify all targets are still present in the buffer.
45
+ const bufferIds = new Set(this.buffer.nodes.map((n) => n.id));
46
+ if (!event.targets.every((t) => bufferIds.has(t.id))) {
47
+ debugLogger.warn(`[ContextManager] Dropping processor result from ${event.processorId}: targets no longer in buffer.`);
48
+ return;
49
+ }
37
50
  this.buffer = this.buffer.applyProcessorResult(event.processorId, event.targets, event.returnedNodes);
38
51
  });
39
- this.historyObserver.start();
40
- }
41
- /**
42
- * Safely stops background async pipelines and clears event listeners.
43
- */
44
- shutdown() {
45
- this.orchestrator.shutdown();
46
- this.historyObserver.stop();
47
52
  }
48
- /**
49
- * Evaluates if the current working buffer exceeds configured budget thresholds,
50
- * firing consolidation events if necessary.
51
- */
52
- evaluateTriggers(newNodes) {
53
- if (!this.sidecar.config.budget)
54
- return;
55
- if (newNodes.size > 0) {
56
- this.eventBus.emitChunkReceived({
57
- nodes: this.buffer.nodes,
58
- targetNodeIds: newNodes,
59
- });
53
+ async renderHistory(pendingRequest, activeTaskIds = new Set(), abortSignal) {
54
+ this.tracer.logEvent('ContextManager', 'Starting rendering of LLM context');
55
+ // 1. Explicit Sync with the durable history.
56
+ const currentHistory = this.chatHistory.get();
57
+ const pristineNodes = this.env.graphMapper.sync(currentHistory);
58
+ this.buffer = this.buffer.syncPristineHistory(pristineNodes);
59
+ // Identify truly "new" nodes that haven't been evaluated for triggers yet.
60
+ const newPrimalNodes = new Set();
61
+ for (const node of pristineNodes) {
62
+ if (!this.evaluatedNodeIds.has(node.id)) {
63
+ newPrimalNodes.add(node.id);
64
+ this.evaluatedNodeIds.add(node.id);
65
+ }
60
66
  }
61
- const currentTokens = this.env.tokenCalculator.calculateConcreteListTokens(this.buffer.nodes);
62
- if (currentTokens > this.sidecar.config.budget.retainedTokens) {
63
- const agedOutNodes = new Set();
64
- let rollingTokens = 0;
65
- // Walk backwards finding nodes that fall out of the retained budget
66
- for (let i = this.buffer.nodes.length - 1; i >= 0; i--) {
67
- const node = this.buffer.nodes[i];
68
- rollingTokens += this.env.tokenCalculator.calculateConcreteListTokens([
69
- node,
70
- ]);
71
- if (rollingTokens > this.sidecar.config.budget.retainedTokens) {
72
- agedOutNodes.add(node.id);
67
+ // 2. Preview the pending request.
68
+ let previewNodes = [];
69
+ if (pendingRequest) {
70
+ const syncedNodes = this.env.graphMapper.sync([pendingRequest]);
71
+ const previewNodeIds = new Set(syncedNodes.map((n) => n.id));
72
+ const previewBuffer = ContextWorkingBufferImpl.initialize(syncedNodes);
73
+ const processedPreviewBuffer = await this.orchestrator.executeTriggerSync('new_message', previewBuffer, previewNodeIds);
74
+ previewNodes = processedPreviewBuffer.nodes;
75
+ }
76
+ // --- Hot Start Calibration ---
77
+ const hotStartPromise = (async () => {
78
+ if (!this.hasPerformedHotStart) {
79
+ this.hasPerformedHotStart = true;
80
+ if (this.buffer.nodes.length > 0) {
81
+ const nodesForHotStart = [...this.buffer.nodes, ...previewNodes];
82
+ await this.performHotStartCalibration(nodesForHotStart, abortSignal);
73
83
  }
74
84
  }
75
- if (agedOutNodes.size > 0) {
76
- this.env.tokenCalculator.garbageCollectCache(new Set(this.buffer.nodes.map((n) => n.id)));
77
- this.eventBus.emitConsolidationNeeded({
78
- nodes: this.buffer.nodes,
79
- targetDeficit: currentTokens - this.sidecar.config.budget.retainedTokens,
80
- targetNodeIds: agedOutNodes,
81
- });
85
+ })();
86
+ // 3. Synchronous Pressure Barrier
87
+ await Promise.all([this.orchestrator.waitForPipelines(), hotStartPromise]);
88
+ let nodes = this.buffer.nodes;
89
+ const previewNodeIds = new Set();
90
+ if (previewNodes.length > 0) {
91
+ nodes = [...nodes, ...previewNodes];
92
+ for (const node of previewNodes) {
93
+ previewNodeIds.add(node.id);
82
94
  }
83
95
  }
96
+ // 4. Trigger Management (GC/Distillation/Normalization)
97
+ await this.evaluateTriggers(nodes, newPrimalNodes, activeTaskIds);
98
+ // Re-fetch nodes from buffer (master) and combine with ephemeral previews
99
+ nodes = [...this.buffer.nodes, ...previewNodes];
100
+ // 5. Final Render
101
+ const header = this.headerProvider
102
+ ? await this.headerProvider()
103
+ : undefined;
104
+ const nodesHash = deriveStableId([
105
+ ...nodes.map((n) => n.id),
106
+ header ? JSON.stringify(header.parts) : 'no-header',
107
+ ]);
108
+ if (this.lastRenderCache?.nodesHash === nodesHash) {
109
+ this.tracer.logEvent('ContextManager', 'Render Cache Hit', { nodesHash });
110
+ return this.lastRenderCache.result;
111
+ }
112
+ const protectionReasons = this.getProtectedNodeIds(nodes, activeTaskIds);
113
+ const renderResult = await render(nodes, this.orchestrator, this.sidecar, this.tracer, this.env, this.advancedTokenCalculator, {
114
+ protectionReasons,
115
+ header,
116
+ lateBindPrompt: !!pendingRequest,
117
+ });
118
+ const { history: renderedHistory, pendingHistory, didApplyManagement, baseUnits, processedNodes, } = renderResult;
119
+ if (didApplyManagement) {
120
+ // Commit the GC backstop results back to the master buffer.
121
+ // We must be careful to only apply results to the nodes that belong to the master buffer.
122
+ const masterIdsInResult = new Set(this.buffer.nodes.map((n) => n.id));
123
+ const processedMasterNodes = processedNodes.filter((n) => !previewNodeIds.has(n.id) || masterIdsInResult.has(n.id));
124
+ this.buffer = this.buffer.applyProcessorResult('sync_backstop', this.buffer.nodes, processedMasterNodes);
125
+ }
126
+ // Structural validation
127
+ checkContextInvariants(this.buffer.nodes, 'RenderHistory');
128
+ const fullHistoryToHarden = [...renderedHistory, ...pendingHistory];
129
+ const hardenedFullHistory = hardenHistory(fullHistoryToHarden, {
130
+ sentinels: this.sidecar.sentinels,
131
+ });
132
+ const envContextId = deriveStableId(['environment-context']);
133
+ const pendingIds = new Set(pendingHistory.map((t) => t.id));
134
+ const resultHistory = [];
135
+ const resultPending = [];
136
+ let foundPending = false;
137
+ for (const turn of hardenedFullHistory) {
138
+ if (!foundPending &&
139
+ (pendingIds.has(turn.id) ||
140
+ (turn.id.startsWith('turn_') &&
141
+ pendingIds.has(turn.id.substring(5)))) &&
142
+ turn.id !== envContextId &&
143
+ turn.id !== `turn_${envContextId}`) {
144
+ foundPending = true;
145
+ }
146
+ if (foundPending) {
147
+ resultPending.push(turn);
148
+ }
149
+ else {
150
+ resultHistory.push(turn);
151
+ }
152
+ }
153
+ const result = {
154
+ history: renderedHistory,
155
+ apiHistory: resultHistory.map((h) => h.content),
156
+ pendingApiHistory: resultPending.map((h) => h.content),
157
+ didApplyManagement,
158
+ baseUnits,
159
+ processedNodes,
160
+ };
161
+ if (header) {
162
+ result.apiHistory.unshift(header);
163
+ }
164
+ this.lastRenderCache = { nodesHash, result };
165
+ this.tracer.logEvent('ContextManager', 'Rendering Complete', {
166
+ historySize: renderedHistory.length,
167
+ pendingSize: pendingHistory.length,
168
+ didApplyManagement,
169
+ });
170
+ return result;
171
+ }
172
+ async waitForPipelines() {
173
+ await this.orchestrator.waitForPipelines();
174
+ }
175
+ shutdown() {
176
+ this.orchestrator.shutdown();
177
+ }
178
+ getNodes() {
179
+ return this.buffer.nodes;
180
+ }
181
+ getEnvironment() {
182
+ return this.env;
84
183
  }
85
- /**
86
- * Retrieves the raw, uncompressed Episodic Context Graph graph.
87
- * Useful for internal tool rendering (like the trace viewer).
88
- * Note: This is an expensive, deep clone operation.
89
- */
90
184
  getPristineGraph() {
91
185
  const pristineSet = new Map();
92
186
  for (const node of this.buffer.nodes) {
@@ -95,28 +189,131 @@ export class ContextManager {
95
189
  pristineSet.set(root.id, root);
96
190
  }
97
191
  }
98
- // We sort them by timestamp to ensure they are returned in chronological order
99
192
  return Array.from(pristineSet.values()).sort((a, b) => a.timestamp - b.timestamp);
100
193
  }
101
- /**
102
- * Generates a virtual view of the pristine graph, substituting in variants
103
- * up to the configured token budget.
104
- * This is the view that will eventually be projected back to the LLM.
105
- */
106
- getNodes() {
107
- return [...this.buffer.nodes];
194
+ async evaluateTriggers(nodes, newPrimalNodes, activeTaskIds) {
195
+ if (newPrimalNodes.size > 0) {
196
+ this.buffer = await this.orchestrator.executeTriggerSync('nodes_added', this.buffer, newPrimalNodes);
197
+ }
198
+ // Identify ephemeral preview nodes that are NOT in the master buffer.
199
+ const bufferIds = new Set(this.buffer.nodes.map((n) => n.id));
200
+ const previewNodes = nodes.filter((n) => !bufferIds.has(n.id));
201
+ const currentNodes = [...this.buffer.nodes, ...previewNodes];
202
+ const currentTokens = this.env.tokenCalculator.calculateConcreteListTokens(currentNodes);
203
+ if (currentTokens > this.sidecar.config.budget.retainedTokens) {
204
+ const agedOutRetainedNodes = new Set();
205
+ const agedOutNormalizedNodes = new Set();
206
+ const protectionMap = this.getProtectedNodeIds(currentNodes, activeTaskIds);
207
+ const protectedIds = new Set(protectionMap.keys());
208
+ // Also pin Turn 0 (Environment Context)
209
+ const envTurnId = `turn_${deriveStableId(['environment-context'])}`;
210
+ const turn0Nodes = currentNodes.filter((n) => n.turnId === envTurnId);
211
+ for (const n of turn0Nodes) {
212
+ protectedIds.add(n.id);
213
+ }
214
+ let rollingTokens = 0;
215
+ for (let i = currentNodes.length - 1; i >= 0; i--) {
216
+ const node = currentNodes[i];
217
+ const priorTokens = rollingTokens;
218
+ rollingTokens += this.env.tokenCalculator.calculateConcreteListTokens([
219
+ node,
220
+ ]);
221
+ if (priorTokens > this.sidecar.config.budget.retainedTokens) {
222
+ if (!protectedIds.has(node.id)) {
223
+ const hasNormalizedTier = this.sidecar.config.budget.normalizedTokens !== undefined;
224
+ if (!hasNormalizedTier ||
225
+ priorTokens <= this.sidecar.config.budget.normalizedTokens) {
226
+ agedOutRetainedNodes.add(node.id);
227
+ }
228
+ if (hasNormalizedTier &&
229
+ priorTokens > this.sidecar.config.budget.normalizedTokens) {
230
+ agedOutNormalizedNodes.add(node.id);
231
+ }
232
+ }
233
+ }
234
+ }
235
+ if (agedOutRetainedNodes.size > 0) {
236
+ const targetDeficit = currentTokens - this.sidecar.config.budget.retainedTokens;
237
+ const threshold = this.sidecar.config.budget.coalescingThresholdTokens || 0;
238
+ if (targetDeficit < this.lastTriggeredDeficit) {
239
+ this.lastTriggeredDeficit = targetDeficit;
240
+ }
241
+ if (targetDeficit > this.lastTriggeredDeficit + threshold) {
242
+ this.lastTriggeredDeficit = targetDeficit;
243
+ this.eventBus.emitConsolidationNeeded({
244
+ nodes: this.buffer.nodes,
245
+ targetDeficit,
246
+ targetNodeIds: agedOutRetainedNodes,
247
+ });
248
+ this.env.tokenCalculator.garbageCollectCache(new Set(this.buffer.nodes.map((n) => n.id)));
249
+ this.buffer = await this.orchestrator.executeTriggerSync('nodes_aged_out', this.buffer, agedOutRetainedNodes, protectedIds);
250
+ }
251
+ }
252
+ else {
253
+ this.lastTriggeredDeficit = 0;
254
+ }
255
+ if (agedOutNormalizedNodes.size > 0) {
256
+ const targetDeficit = currentTokens - this.sidecar.config.budget.normalizedTokens;
257
+ const threshold = this.sidecar.config.budget.coalescingThresholdTokens || 0;
258
+ if (targetDeficit < this.lastTriggeredNormalizeDeficit) {
259
+ this.lastTriggeredNormalizeDeficit = targetDeficit;
260
+ }
261
+ if (targetDeficit > this.lastTriggeredNormalizeDeficit + threshold) {
262
+ this.lastTriggeredNormalizeDeficit = targetDeficit;
263
+ this.eventBus.emitNormalizeNeeded({
264
+ nodes: this.buffer.nodes,
265
+ targetDeficit,
266
+ targetNodeIds: agedOutNormalizedNodes,
267
+ });
268
+ this.buffer = await this.orchestrator.executeTriggerSync('normalized_exceeded', this.buffer, agedOutNormalizedNodes, protectedIds);
269
+ }
270
+ }
271
+ else {
272
+ this.lastTriggeredNormalizeDeficit = 0;
273
+ }
274
+ }
108
275
  }
109
- /**
110
- * Executes the final 'gc_backstop' pipeline if necessary, enforcing the token budget,
111
- * and maps the Episodic Context Graph back into a raw Gemini Content[] array for transmission.
112
- * This is the primary method called by the agent framework before sending a request.
113
- */
114
- async renderHistory(activeTaskIds = new Set()) {
115
- this.tracer.logEvent('ContextManager', 'Starting rendering of LLM context');
116
- // Apply final GC Backstop pressure barrier synchronously before mapping
117
- const finalHistory = await render(this.buffer.nodes, this.orchestrator, this.sidecar, this.tracer, this.env, activeTaskIds);
118
- this.tracer.logEvent('ContextManager', 'Finished rendering');
119
- return finalHistory;
276
+ getProtectedNodeIds(nodes, extraProtectedIds = new Set()) {
277
+ const protectionMap = new Map();
278
+ if (nodes.length === 0)
279
+ return protectionMap;
280
+ const lastNode = nodes[nodes.length - 1];
281
+ const lastTurnId = lastNode.turnId;
282
+ // Identify Environment Context (Turn 0) for pinning
283
+ const envContextId = deriveStableId(['environment-context']);
284
+ const envContextTurnId = `turn_${envContextId}`;
285
+ for (const node of nodes) {
286
+ if (node.turnId === envContextTurnId || node.turnId === envContextId) {
287
+ protectionMap.set(node.id, 'environment_context');
288
+ }
289
+ if (node.turnId === lastTurnId) {
290
+ protectionMap.set(node.id, 'recent_turn');
291
+ }
292
+ }
293
+ for (const id of extraProtectedIds) {
294
+ protectionMap.set(id, 'external_active_task');
295
+ }
296
+ return protectionMap;
297
+ }
298
+ async performHotStartCalibration(nodes, abortSignal) {
299
+ const history = this.env.graphMapper.fromGraph(nodes);
300
+ const contents = history.map((h) => h.content);
301
+ try {
302
+ const { totalTokens } = await this.env.llmClient.countTokens({
303
+ modelConfigKey: { model: 'context-calibrator' },
304
+ contents,
305
+ abortSignal,
306
+ });
307
+ if (totalTokens !== undefined) {
308
+ this.env.eventBus.emitTokenGroundTruth({
309
+ actualTokens: totalTokens,
310
+ promptBaseUnits: this.advancedTokenCalculator.getRawBaseUnits(nodes),
311
+ });
312
+ }
313
+ }
314
+ catch (e) {
315
+ debugLogger.warn('[ContextManager] Hot start calibration failed', e);
316
+ }
120
317
  }
121
318
  }
122
319
  //# sourceMappingURL=contextManager.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"contextManager.js","sourceRoot":"","sources":["../../../src/context/contextManager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"contextManager.js","sourceRoot":"","sources":["../../../src/context/contextManager.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 {};
@@ -0,0 +1,142 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2026 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { vi, describe, it, expect, beforeEach } from 'vitest';
7
+ import { ContextManager } from './contextManager.js';
8
+ import { createMockEnvironment } from './testing/contextTestUtils.js';
9
+ import { ContextWorkingBufferImpl } from './pipeline/contextWorkingBuffer.js';
10
+ import { deriveStableId } from '../utils/cryptoUtils.js';
11
+ describe('ContextManager', () => {
12
+ let mockSidecar;
13
+ let mockEnv;
14
+ let mockTracer;
15
+ let mockOrchestrator;
16
+ let mockChatHistory;
17
+ let mockAdvancedTokenCalculator;
18
+ beforeEach(() => {
19
+ vi.resetAllMocks();
20
+ mockSidecar = {
21
+ name: 'test-profile',
22
+ config: { budget: { retainedTokens: 1000, maxTokens: 2000 } },
23
+ buildPipelines: vi.fn().mockReturnValue([]),
24
+ buildAsyncPipelines: vi.fn().mockReturnValue([]),
25
+ };
26
+ mockEnv = createMockEnvironment();
27
+ mockTracer = mockEnv.tracer;
28
+ mockOrchestrator = {
29
+ setNodeProvider: vi.fn(),
30
+ waitForPipelines: vi.fn().mockResolvedValue(undefined),
31
+ executeTriggerSync: vi
32
+ .fn()
33
+ .mockImplementation(async (trigger, buffer) => buffer),
34
+ shutdown: vi.fn(),
35
+ };
36
+ mockChatHistory = {
37
+ all: vi.fn().mockReturnValue([]),
38
+ last: vi.fn(),
39
+ getById: vi.fn(),
40
+ getTurnById: vi.fn(),
41
+ getTurnsByIds: vi.fn(),
42
+ getNeighboringTurns: vi.fn(),
43
+ getHistory: vi.fn().mockReturnValue([]),
44
+ get: vi.fn().mockReturnValue([]),
45
+ setHistory: vi.fn(),
46
+ getHistoryTurns: vi.fn().mockReturnValue([]),
47
+ getRawHistory: vi.fn().mockReturnValue([]),
48
+ addTurn: vi.fn(),
49
+ updateTurn: vi.fn(),
50
+ addListener: vi.fn(),
51
+ removeListener: vi.fn(),
52
+ clear: vi.fn(),
53
+ subscribe: vi.fn(),
54
+ };
55
+ mockAdvancedTokenCalculator = {
56
+ getRawBaseUnits: vi.fn().mockReturnValue(0),
57
+ getRawBaseUnitsForContent: vi.fn().mockReturnValue(0),
58
+ calculateTokensAndBaseUnits: vi
59
+ .fn()
60
+ .mockReturnValue({ tokens: 0, baseUnits: 0 }),
61
+ };
62
+ });
63
+ it('renderHistory should process pendingRequest via the new_message pipeline', async () => {
64
+ const contextManager = new ContextManager(mockSidecar, mockEnv, mockTracer, mockOrchestrator, mockChatHistory, mockAdvancedTokenCalculator);
65
+ const largeToolOutput = 'a'.repeat(10000);
66
+ const pendingRequest = {
67
+ id: 'pending-turn-1',
68
+ content: {
69
+ role: 'user',
70
+ parts: [
71
+ {
72
+ functionResponse: {
73
+ name: 'run_shell_command',
74
+ response: {
75
+ output: largeToolOutput,
76
+ },
77
+ },
78
+ },
79
+ ],
80
+ },
81
+ };
82
+ await contextManager.renderHistory(pendingRequest);
83
+ expect(mockOrchestrator.executeTriggerSync).toHaveBeenCalledExactlyOnceWith('new_message', expect.any(ContextWorkingBufferImpl), expect.any(Set));
84
+ // Check that the node passed to the orchestrator corresponds to our pendingRequest
85
+ const call = mockOrchestrator.executeTriggerSync.mock
86
+ .calls[0];
87
+ const passedBuffer = call[1];
88
+ const passedNodes = passedBuffer.nodes;
89
+ const passedNodeIds = call[2];
90
+ expect(passedNodes).toHaveLength(1);
91
+ expect(passedNodes[0].type).toBe('TOOL_EXECUTION');
92
+ expect(passedNodes[0].payload.functionResponse.response.output).toBe(largeToolOutput);
93
+ expect(passedNodeIds.has(passedNodes[0].id)).toBe(true);
94
+ });
95
+ it('should correctly split historical context and pending prompt for late binding', async () => {
96
+ const envContextId = deriveStableId(['environment-context']);
97
+ const historicalTurn = {
98
+ id: `turn_${envContextId}`, // Turn 0
99
+ content: { role: 'user', parts: [{ text: 'System instruction' }] },
100
+ };
101
+ const organicTurn = {
102
+ id: 'turn-1',
103
+ content: { role: 'model', parts: [{ text: 'Previous model message' }] },
104
+ };
105
+ // Setup history with Turn 0 and Turn 1
106
+ mockChatHistory.get.mockReturnValue([
107
+ historicalTurn,
108
+ organicTurn,
109
+ ]);
110
+ const contextManager = new ContextManager(mockSidecar, mockEnv, mockTracer, mockOrchestrator, mockChatHistory, mockAdvancedTokenCalculator);
111
+ const pendingRequest = {
112
+ id: 'pending-turn',
113
+ content: { role: 'user', parts: [{ text: 'Active prompt' }] },
114
+ };
115
+ const { apiHistory, pendingApiHistory } = await contextManager.renderHistory(pendingRequest);
116
+ // apiHistory should contain Turn 0 and the previous model message.
117
+ // Note: hardenHistory may inject a sentinel user turn if the history segment
118
+ // being hardened starts with a model turn.
119
+ expect(apiHistory.length).toBeGreaterThanOrEqual(2);
120
+ expect(apiHistory[0].parts[0].text).toBe('System instruction');
121
+ // pendingApiHistory should contain ONLY the pending request
122
+ expect(pendingApiHistory).toHaveLength(1);
123
+ expect(pendingApiHistory[0].parts[0].text).toBe('Active prompt');
124
+ // The total combined history should be a valid alternating sequence
125
+ const combined = [...apiHistory, ...pendingApiHistory];
126
+ for (let i = 1; i < combined.length; i++) {
127
+ expect(combined[i].role).not.toBe(combined[i - 1].role);
128
+ }
129
+ });
130
+ it('renderHistory should exclude pendingRequest from the result (late binding)', async () => {
131
+ const contextManager = new ContextManager(mockSidecar, mockEnv, mockTracer, mockOrchestrator, mockChatHistory, mockAdvancedTokenCalculator);
132
+ const pendingRequest = {
133
+ id: 'pending-turn-1',
134
+ content: { role: 'user', parts: [{ text: 'Active prompt' }] },
135
+ };
136
+ const { history, apiHistory } = await contextManager.renderHistory(pendingRequest);
137
+ // Should be empty because mockChatHistory has no historical turns
138
+ expect(history).toHaveLength(0);
139
+ expect(apiHistory).toHaveLength(0);
140
+ });
141
+ });
142
+ //# sourceMappingURL=contextManager.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contextManager.test.js","sourceRoot":"","sources":["../../../src/context/contextManager.test.ts"],"names":[],"mappings":"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"}
@@ -23,13 +23,26 @@ export interface ChunkReceivedEvent {
23
23
  nodes: readonly ConcreteNode[];
24
24
  targetNodeIds: Set<string>;
25
25
  }
26
+ export interface TokenGroundTruthEvent {
27
+ actualTokens: number;
28
+ promptBaseUnits: number;
29
+ }
30
+ export interface NormalizeNeededEvent {
31
+ nodes: readonly ConcreteNode[];
32
+ targetDeficit: number;
33
+ targetNodeIds: Set<string>;
34
+ }
26
35
  export declare class ContextEventBus extends EventEmitter {
36
+ emitTokenGroundTruth(event: TokenGroundTruthEvent): void;
37
+ onTokenGroundTruth(listener: (event: TokenGroundTruthEvent) => void): void;
27
38
  emitPristineHistoryUpdated(event: PristineHistoryUpdatedEvent): void;
28
39
  onPristineHistoryUpdated(listener: (event: PristineHistoryUpdatedEvent) => void): void;
29
40
  emitChunkReceived(event: ChunkReceivedEvent): void;
30
41
  onChunkReceived(listener: (event: ChunkReceivedEvent) => void): void;
31
42
  emitConsolidationNeeded(event: ContextConsolidationEvent): void;
32
43
  onConsolidationNeeded(listener: (event: ContextConsolidationEvent) => void): void;
44
+ emitNormalizeNeeded(event: NormalizeNeededEvent): void;
45
+ onNormalizeNeeded(listener: (event: NormalizeNeededEvent) => void): void;
33
46
  emitProcessorResult(event: ProcessorResultEvent): void;
34
47
  onProcessorResult(listener: (event: ProcessorResultEvent) => void): void;
35
48
  }
@@ -5,6 +5,12 @@
5
5
  */
6
6
  import { EventEmitter } from 'node:events';
7
7
  export class ContextEventBus extends EventEmitter {
8
+ emitTokenGroundTruth(event) {
9
+ this.emit('TOKEN_GROUND_TRUTH', event);
10
+ }
11
+ onTokenGroundTruth(listener) {
12
+ this.on('TOKEN_GROUND_TRUTH', listener);
13
+ }
8
14
  emitPristineHistoryUpdated(event) {
9
15
  this.emit('PRISTINE_HISTORY_UPDATED', event);
10
16
  }
@@ -23,6 +29,12 @@ export class ContextEventBus extends EventEmitter {
23
29
  onConsolidationNeeded(listener) {
24
30
  this.on('BUDGET_RETAINED_CROSSED', listener);
25
31
  }
32
+ emitNormalizeNeeded(event) {
33
+ this.emit('BUDGET_NORMALIZED_CROSSED', event);
34
+ }
35
+ onNormalizeNeeded(listener) {
36
+ this.on('BUDGET_NORMALIZED_CROSSED', listener);
37
+ }
26
38
  emitProcessorResult(event) {
27
39
  this.emit('PROCESSOR_RESULT', event);
28
40
  }