@illuma-ai/agents 1.4.0-alpha.6 → 1.5.1

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 (653) hide show
  1. package/README.md +62 -0
  2. package/dist/cjs/agents/AgentContext.cjs +274 -67
  3. package/dist/cjs/agents/AgentContext.cjs.map +1 -1
  4. package/dist/cjs/common/enum.cjs +44 -13
  5. package/dist/cjs/common/enum.cjs.map +1 -1
  6. package/dist/cjs/graphs/Graph.cjs +182 -5
  7. package/dist/cjs/graphs/Graph.cjs.map +1 -1
  8. package/dist/cjs/graphs/MultiAgentGraph.cjs +152 -1167
  9. package/dist/cjs/graphs/MultiAgentGraph.cjs.map +1 -1
  10. package/dist/cjs/graphs/phases/memoryFlushPhase.cjs +1 -1
  11. package/dist/cjs/graphs/phases/memoryFlushPhase.cjs.map +1 -1
  12. package/dist/cjs/hooks/HookRegistry.cjs +162 -0
  13. package/dist/cjs/hooks/HookRegistry.cjs.map +1 -0
  14. package/dist/cjs/hooks/executeHooks.cjs +276 -0
  15. package/dist/cjs/hooks/executeHooks.cjs.map +1 -0
  16. package/dist/cjs/hooks/matchers.cjs +256 -0
  17. package/dist/cjs/hooks/matchers.cjs.map +1 -0
  18. package/dist/cjs/hooks/types.cjs +27 -0
  19. package/dist/cjs/hooks/types.cjs.map +1 -0
  20. package/dist/cjs/langchain/google-common.cjs +3 -0
  21. package/dist/cjs/langchain/google-common.cjs.map +1 -0
  22. package/dist/cjs/langchain/index.cjs +86 -0
  23. package/dist/cjs/langchain/index.cjs.map +1 -0
  24. package/dist/cjs/langchain/language_models/chat_models.cjs +3 -0
  25. package/dist/cjs/langchain/language_models/chat_models.cjs.map +1 -0
  26. package/dist/cjs/langchain/messages/tool.cjs +3 -0
  27. package/dist/cjs/langchain/messages/tool.cjs.map +1 -0
  28. package/dist/cjs/langchain/messages.cjs +51 -0
  29. package/dist/cjs/langchain/messages.cjs.map +1 -0
  30. package/dist/cjs/langchain/openai.cjs +3 -0
  31. package/dist/cjs/langchain/openai.cjs.map +1 -0
  32. package/dist/cjs/langchain/prompts.cjs +11 -0
  33. package/dist/cjs/langchain/prompts.cjs.map +1 -0
  34. package/dist/cjs/langchain/runnables.cjs +19 -0
  35. package/dist/cjs/langchain/runnables.cjs.map +1 -0
  36. package/dist/cjs/langchain/tools.cjs +23 -0
  37. package/dist/cjs/langchain/tools.cjs.map +1 -0
  38. package/dist/cjs/langchain/utils/env.cjs +11 -0
  39. package/dist/cjs/langchain/utils/env.cjs.map +1 -0
  40. package/dist/cjs/llm/anthropic/utils/message_inputs.cjs +5 -1
  41. package/dist/cjs/llm/anthropic/utils/message_inputs.cjs.map +1 -1
  42. package/dist/cjs/llm/bedrock/cacheSupport.cjs +55 -0
  43. package/dist/cjs/llm/bedrock/cacheSupport.cjs.map +1 -0
  44. package/dist/cjs/llm/bedrock/index.cjs +61 -33
  45. package/dist/cjs/llm/bedrock/index.cjs.map +1 -1
  46. package/dist/cjs/llm/openai/index.cjs +1 -4
  47. package/dist/cjs/llm/openai/index.cjs.map +1 -1
  48. package/dist/cjs/llm/openai/utils/index.cjs +27 -10
  49. package/dist/cjs/llm/openai/utils/index.cjs.map +1 -1
  50. package/dist/cjs/main.cjs +178 -127
  51. package/dist/cjs/main.cjs.map +1 -1
  52. package/dist/cjs/memory/citations.cjs +4 -4
  53. package/dist/cjs/memory/citations.cjs.map +1 -1
  54. package/dist/cjs/memory/constants.cjs +17 -17
  55. package/dist/cjs/memory/constants.cjs.map +1 -1
  56. package/dist/cjs/memory/mmr.cjs +1 -1
  57. package/dist/cjs/memory/mmr.cjs.map +1 -1
  58. package/dist/cjs/memory/paths.cjs +1 -1
  59. package/dist/cjs/memory/paths.cjs.map +1 -1
  60. package/dist/cjs/memory/recallTracking.cjs +3 -3
  61. package/dist/cjs/memory/recallTracking.cjs.map +1 -1
  62. package/dist/cjs/memory/temporalDecay.cjs +2 -2
  63. package/dist/cjs/memory/temporalDecay.cjs.map +1 -1
  64. package/dist/cjs/messages/cache.cjs +89 -0
  65. package/dist/cjs/messages/cache.cjs.map +1 -1
  66. package/dist/cjs/messages/contextPruning.cjs +156 -0
  67. package/dist/cjs/messages/contextPruning.cjs.map +1 -0
  68. package/dist/cjs/messages/contextPruningSettings.cjs +53 -0
  69. package/dist/cjs/messages/contextPruningSettings.cjs.map +1 -0
  70. package/dist/cjs/messages/format.cjs +144 -20
  71. package/dist/cjs/messages/format.cjs.map +1 -1
  72. package/dist/cjs/messages/prune.cjs +505 -4
  73. package/dist/cjs/messages/prune.cjs.map +1 -1
  74. package/dist/cjs/run.cjs +141 -1
  75. package/dist/cjs/run.cjs.map +1 -1
  76. package/dist/cjs/tools/BashExecutor.cjs +235 -0
  77. package/dist/cjs/tools/BashExecutor.cjs.map +1 -0
  78. package/dist/cjs/tools/BashProgrammaticToolCalling.cjs +297 -0
  79. package/dist/cjs/tools/BashProgrammaticToolCalling.cjs.map +1 -0
  80. package/dist/cjs/tools/CodeExecutor.cjs +45 -47
  81. package/dist/cjs/tools/CodeExecutor.cjs.map +1 -1
  82. package/dist/cjs/tools/ProgrammaticToolCalling.cjs +16 -11
  83. package/dist/cjs/tools/ProgrammaticToolCalling.cjs.map +1 -1
  84. package/dist/cjs/tools/ReadFile.cjs +44 -0
  85. package/dist/cjs/tools/ReadFile.cjs.map +1 -0
  86. package/dist/cjs/tools/SkillTool.cjs +51 -0
  87. package/dist/cjs/tools/SkillTool.cjs.map +1 -0
  88. package/dist/cjs/tools/SubagentTool.cjs +93 -0
  89. package/dist/cjs/tools/SubagentTool.cjs.map +1 -0
  90. package/dist/cjs/tools/ToolNode.cjs +450 -24
  91. package/dist/cjs/tools/ToolNode.cjs.map +1 -1
  92. package/dist/cjs/tools/memory/memoryAppendTool.cjs +1 -1
  93. package/dist/cjs/tools/memory/memoryAppendTool.cjs.map +1 -1
  94. package/dist/cjs/tools/memory/memoryGetTool.cjs +2 -2
  95. package/dist/cjs/tools/memory/memoryGetTool.cjs.map +1 -1
  96. package/dist/cjs/tools/memory/memorySearchTool.cjs +3 -3
  97. package/dist/cjs/tools/memory/memorySearchTool.cjs.map +1 -1
  98. package/dist/cjs/tools/memory/shared.cjs +1 -1
  99. package/dist/cjs/tools/memory/shared.cjs.map +1 -1
  100. package/dist/cjs/tools/search/search.cjs +11 -3
  101. package/dist/cjs/tools/search/search.cjs.map +1 -1
  102. package/dist/cjs/tools/search/tavily-scraper.cjs +189 -0
  103. package/dist/cjs/tools/search/tavily-scraper.cjs.map +1 -0
  104. package/dist/cjs/tools/search/tavily-search.cjs +372 -0
  105. package/dist/cjs/tools/search/tavily-search.cjs.map +1 -0
  106. package/dist/cjs/tools/search/tool.cjs +28 -4
  107. package/dist/cjs/tools/search/tool.cjs.map +1 -1
  108. package/dist/cjs/tools/search/utils.cjs +10 -3
  109. package/dist/cjs/tools/search/utils.cjs.map +1 -1
  110. package/dist/cjs/tools/skillCatalog.cjs +84 -0
  111. package/dist/cjs/tools/skillCatalog.cjs.map +1 -0
  112. package/dist/cjs/tools/subagent/SubagentExecutor.cjs +512 -0
  113. package/dist/cjs/tools/subagent/SubagentExecutor.cjs.map +1 -0
  114. package/dist/cjs/tools/toolOutputReferences.cjs +670 -0
  115. package/dist/cjs/tools/toolOutputReferences.cjs.map +1 -0
  116. package/dist/cjs/types/agent-cache.cjs +54 -0
  117. package/dist/cjs/types/agent-cache.cjs.map +1 -0
  118. package/dist/cjs/types/graph.cjs.map +1 -1
  119. package/dist/cjs/utils/truncation.cjs +135 -0
  120. package/dist/cjs/utils/truncation.cjs.map +1 -0
  121. package/dist/esm/agents/AgentContext.mjs +274 -67
  122. package/dist/esm/agents/AgentContext.mjs.map +1 -1
  123. package/dist/esm/common/enum.mjs +44 -12
  124. package/dist/esm/common/enum.mjs.map +1 -1
  125. package/dist/esm/graphs/Graph.mjs +182 -5
  126. package/dist/esm/graphs/Graph.mjs.map +1 -1
  127. package/dist/esm/graphs/MultiAgentGraph.mjs +155 -1170
  128. package/dist/esm/graphs/MultiAgentGraph.mjs.map +1 -1
  129. package/dist/esm/graphs/phases/memoryFlushPhase.mjs +1 -1
  130. package/dist/esm/graphs/phases/memoryFlushPhase.mjs.map +1 -1
  131. package/dist/esm/hooks/HookRegistry.mjs +160 -0
  132. package/dist/esm/hooks/HookRegistry.mjs.map +1 -0
  133. package/dist/esm/hooks/executeHooks.mjs +273 -0
  134. package/dist/esm/hooks/executeHooks.mjs.map +1 -0
  135. package/dist/esm/hooks/matchers.mjs +251 -0
  136. package/dist/esm/hooks/matchers.mjs.map +1 -0
  137. package/dist/esm/hooks/types.mjs +25 -0
  138. package/dist/esm/hooks/types.mjs.map +1 -0
  139. package/dist/esm/langchain/google-common.mjs +2 -0
  140. package/dist/esm/langchain/google-common.mjs.map +1 -0
  141. package/dist/esm/langchain/index.mjs +5 -0
  142. package/dist/esm/langchain/language_models/chat_models.mjs +2 -0
  143. package/dist/esm/langchain/language_models/chat_models.mjs.map +1 -0
  144. package/dist/esm/langchain/messages/tool.mjs +2 -0
  145. package/dist/esm/langchain/messages/tool.mjs.map +1 -0
  146. package/dist/esm/langchain/messages.mjs +2 -0
  147. package/dist/esm/langchain/messages.mjs.map +1 -0
  148. package/dist/esm/langchain/openai.mjs +2 -0
  149. package/dist/esm/langchain/openai.mjs.map +1 -0
  150. package/dist/esm/langchain/prompts.mjs +2 -0
  151. package/dist/esm/langchain/prompts.mjs.map +1 -0
  152. package/dist/esm/langchain/runnables.mjs +2 -0
  153. package/dist/esm/langchain/runnables.mjs.map +1 -0
  154. package/dist/esm/langchain/tools.mjs +2 -0
  155. package/dist/esm/langchain/tools.mjs.map +1 -0
  156. package/dist/esm/langchain/utils/env.mjs +2 -0
  157. package/dist/esm/langchain/utils/env.mjs.map +1 -0
  158. package/dist/esm/llm/anthropic/utils/message_inputs.mjs +5 -1
  159. package/dist/esm/llm/anthropic/utils/message_inputs.mjs.map +1 -1
  160. package/dist/esm/llm/bedrock/cacheSupport.mjs +52 -0
  161. package/dist/esm/llm/bedrock/cacheSupport.mjs.map +1 -0
  162. package/dist/esm/llm/bedrock/index.mjs +61 -34
  163. package/dist/esm/llm/bedrock/index.mjs.map +1 -1
  164. package/dist/esm/llm/openai/index.mjs +1 -4
  165. package/dist/esm/llm/openai/index.mjs.map +1 -1
  166. package/dist/esm/llm/openai/utils/index.mjs +27 -10
  167. package/dist/esm/llm/openai/utils/index.mjs.map +1 -1
  168. package/dist/esm/main.mjs +21 -27
  169. package/dist/esm/main.mjs.map +1 -1
  170. package/dist/esm/memory/citations.mjs +4 -4
  171. package/dist/esm/memory/citations.mjs.map +1 -1
  172. package/dist/esm/memory/constants.mjs +17 -17
  173. package/dist/esm/memory/constants.mjs.map +1 -1
  174. package/dist/esm/memory/mmr.mjs +1 -1
  175. package/dist/esm/memory/mmr.mjs.map +1 -1
  176. package/dist/esm/memory/paths.mjs +1 -1
  177. package/dist/esm/memory/paths.mjs.map +1 -1
  178. package/dist/esm/memory/recallTracking.mjs +3 -3
  179. package/dist/esm/memory/recallTracking.mjs.map +1 -1
  180. package/dist/esm/memory/temporalDecay.mjs +2 -2
  181. package/dist/esm/memory/temporalDecay.mjs.map +1 -1
  182. package/dist/esm/messages/cache.mjs +89 -0
  183. package/dist/esm/messages/cache.mjs.map +1 -1
  184. package/dist/esm/messages/contextPruning.mjs +154 -0
  185. package/dist/esm/messages/contextPruning.mjs.map +1 -0
  186. package/dist/esm/messages/contextPruningSettings.mjs +50 -0
  187. package/dist/esm/messages/contextPruningSettings.mjs.map +1 -0
  188. package/dist/esm/messages/format.mjs +136 -12
  189. package/dist/esm/messages/format.mjs.map +1 -1
  190. package/dist/esm/messages/prune.mjs +504 -7
  191. package/dist/esm/messages/prune.mjs.map +1 -1
  192. package/dist/esm/run.mjs +141 -1
  193. package/dist/esm/run.mjs.map +1 -1
  194. package/dist/esm/tools/BashExecutor.mjs +227 -0
  195. package/dist/esm/tools/BashExecutor.mjs.map +1 -0
  196. package/dist/esm/tools/BashProgrammaticToolCalling.mjs +288 -0
  197. package/dist/esm/tools/BashProgrammaticToolCalling.mjs.map +1 -0
  198. package/dist/esm/tools/CodeExecutor.mjs +45 -48
  199. package/dist/esm/tools/CodeExecutor.mjs.map +1 -1
  200. package/dist/esm/tools/ProgrammaticToolCalling.mjs +17 -12
  201. package/dist/esm/tools/ProgrammaticToolCalling.mjs.map +1 -1
  202. package/dist/esm/tools/ReadFile.mjs +39 -0
  203. package/dist/esm/tools/ReadFile.mjs.map +1 -0
  204. package/dist/esm/tools/SkillTool.mjs +46 -0
  205. package/dist/esm/tools/SkillTool.mjs.map +1 -0
  206. package/dist/esm/tools/SubagentTool.mjs +86 -0
  207. package/dist/esm/tools/SubagentTool.mjs.map +1 -0
  208. package/dist/esm/tools/ToolNode.mjs +452 -26
  209. package/dist/esm/tools/ToolNode.mjs.map +1 -1
  210. package/dist/esm/tools/memory/memoryAppendTool.mjs +1 -1
  211. package/dist/esm/tools/memory/memoryAppendTool.mjs.map +1 -1
  212. package/dist/esm/tools/memory/memoryGetTool.mjs +2 -2
  213. package/dist/esm/tools/memory/memoryGetTool.mjs.map +1 -1
  214. package/dist/esm/tools/memory/memorySearchTool.mjs +3 -3
  215. package/dist/esm/tools/memory/memorySearchTool.mjs.map +1 -1
  216. package/dist/esm/tools/memory/shared.mjs +1 -1
  217. package/dist/esm/tools/memory/shared.mjs.map +1 -1
  218. package/dist/esm/tools/search/search.mjs +11 -3
  219. package/dist/esm/tools/search/search.mjs.map +1 -1
  220. package/dist/esm/tools/search/tavily-scraper.mjs +186 -0
  221. package/dist/esm/tools/search/tavily-scraper.mjs.map +1 -0
  222. package/dist/esm/tools/search/tavily-search.mjs +370 -0
  223. package/dist/esm/tools/search/tavily-search.mjs.map +1 -0
  224. package/dist/esm/tools/search/tool.mjs +28 -4
  225. package/dist/esm/tools/search/tool.mjs.map +1 -1
  226. package/dist/esm/tools/search/utils.mjs +10 -3
  227. package/dist/esm/tools/search/utils.mjs.map +1 -1
  228. package/dist/esm/tools/skillCatalog.mjs +82 -0
  229. package/dist/esm/tools/skillCatalog.mjs.map +1 -0
  230. package/dist/esm/tools/subagent/SubagentExecutor.mjs +506 -0
  231. package/dist/esm/tools/subagent/SubagentExecutor.mjs.map +1 -0
  232. package/dist/esm/tools/toolOutputReferences.mjs +662 -0
  233. package/dist/esm/tools/toolOutputReferences.mjs.map +1 -0
  234. package/dist/esm/types/agent-cache.mjs +52 -0
  235. package/dist/esm/types/agent-cache.mjs.map +1 -0
  236. package/dist/esm/types/graph.mjs.map +1 -1
  237. package/dist/esm/utils/truncation.mjs +128 -0
  238. package/dist/esm/utils/truncation.mjs.map +1 -0
  239. package/dist/types/agents/AgentContext.d.ts +101 -8
  240. package/dist/types/common/enum.d.ts +39 -12
  241. package/dist/types/common/index.d.ts +0 -1
  242. package/dist/types/graphs/Graph.d.ts +43 -0
  243. package/dist/types/graphs/MultiAgentGraph.d.ts +26 -150
  244. package/dist/types/graphs/index.d.ts +0 -1
  245. package/dist/types/graphs/phases/memoryFlushPhase.d.ts +2 -2
  246. package/dist/types/hooks/HookRegistry.d.ts +56 -0
  247. package/dist/types/hooks/executeHooks.d.ts +79 -0
  248. package/dist/types/hooks/index.d.ts +6 -0
  249. package/dist/types/hooks/matchers.d.ts +95 -0
  250. package/dist/types/hooks/types.d.ts +320 -0
  251. package/dist/types/index.d.ts +9 -9
  252. package/dist/types/langchain/google-common.d.ts +1 -0
  253. package/dist/types/langchain/index.d.ts +8 -0
  254. package/dist/types/langchain/language_models/chat_models.d.ts +1 -0
  255. package/dist/types/langchain/messages/tool.d.ts +1 -0
  256. package/dist/types/langchain/messages.d.ts +2 -0
  257. package/dist/types/langchain/openai.d.ts +1 -0
  258. package/dist/types/langchain/prompts.d.ts +1 -0
  259. package/dist/types/langchain/runnables.d.ts +2 -0
  260. package/dist/types/langchain/tools.d.ts +2 -0
  261. package/dist/types/langchain/utils/env.d.ts +1 -0
  262. package/dist/types/llm/bedrock/cacheSupport.d.ts +35 -0
  263. package/dist/types/llm/bedrock/index.d.ts +54 -1
  264. package/dist/types/llm/openai/index.d.ts +1 -1
  265. package/dist/types/memory/citations.d.ts +4 -4
  266. package/dist/types/memory/constants.d.ts +17 -17
  267. package/dist/types/memory/mmr.d.ts +3 -3
  268. package/dist/types/memory/paths.d.ts +1 -1
  269. package/dist/types/memory/temporalDecay.d.ts +2 -2
  270. package/dist/types/memory/types.d.ts +3 -3
  271. package/dist/types/messages/contextPruning.d.ts +42 -0
  272. package/dist/types/messages/contextPruningSettings.d.ts +44 -0
  273. package/dist/types/messages/format.d.ts +9 -1
  274. package/dist/types/messages/index.d.ts +2 -0
  275. package/dist/types/messages/prune.d.ts +91 -1
  276. package/dist/types/run.d.ts +2 -0
  277. package/dist/types/tools/BashExecutor.d.ts +76 -0
  278. package/dist/types/tools/BashProgrammaticToolCalling.d.ts +72 -0
  279. package/dist/types/tools/CodeExecutor.d.ts +8 -26
  280. package/dist/types/tools/ReadFile.d.ts +28 -0
  281. package/dist/types/tools/SkillTool.d.ts +40 -0
  282. package/dist/types/tools/SubagentTool.d.ts +36 -0
  283. package/dist/types/tools/ToolNode.d.ts +77 -5
  284. package/dist/types/tools/memory/shared.d.ts +1 -1
  285. package/dist/types/tools/search/tavily-scraper.d.ts +19 -0
  286. package/dist/types/tools/search/tavily-search.d.ts +4 -0
  287. package/dist/types/tools/search/types.d.ts +99 -5
  288. package/dist/types/tools/search/utils.d.ts +2 -2
  289. package/dist/types/tools/skillCatalog.d.ts +19 -0
  290. package/dist/types/tools/subagent/SubagentExecutor.d.ts +137 -0
  291. package/dist/types/tools/subagent/index.d.ts +2 -0
  292. package/dist/types/tools/subagent/types.d.ts +84 -0
  293. package/dist/types/tools/toolOutputReferences.d.ts +236 -0
  294. package/dist/types/types/agent-cache.d.ts +71 -0
  295. package/dist/types/types/graph.d.ts +163 -22
  296. package/dist/types/types/index.d.ts +3 -0
  297. package/dist/types/types/messages.d.ts +26 -0
  298. package/dist/types/types/run.d.ts +22 -0
  299. package/dist/types/types/skill.d.ts +9 -0
  300. package/dist/types/types/tools.d.ts +111 -0
  301. package/dist/types/utils/index.d.ts +1 -3
  302. package/dist/types/utils/truncation.d.ts +70 -0
  303. package/package.json +57 -17
  304. package/src/agents/AgentContext.ts +321 -78
  305. package/src/agents/__tests__/AgentContext.cacheTtl.live.test.ts +259 -0
  306. package/src/agents/__tests__/AgentContext.crossAgentTier1.live.test.ts +266 -0
  307. package/src/agents/__tests__/AgentContext.crossUserCache.live.test.ts +342 -0
  308. package/src/agents/__tests__/AgentContext.test.ts +632 -0
  309. package/src/common/__tests__/enum.test.ts +7 -17
  310. package/src/common/enum.ts +43 -12
  311. package/src/common/index.ts +0 -1
  312. package/src/graphs/Graph.ts +222 -2
  313. package/src/graphs/MultiAgentGraph.ts +154 -1466
  314. package/src/graphs/__tests__/MultiAgentGraph.test.ts +91 -0
  315. package/src/graphs/gapFeatures.test.ts +1 -1
  316. package/src/graphs/index.ts +0 -1
  317. package/src/graphs/phases/__tests__/memoryFlushPhase.test.ts +1 -1
  318. package/src/graphs/phases/memoryFlushPhase.ts +2 -2
  319. package/src/hooks/HookRegistry.ts +208 -0
  320. package/src/hooks/__tests__/HookRegistry.test.ts +190 -0
  321. package/src/hooks/__tests__/compactHooks.test.ts +214 -0
  322. package/src/hooks/__tests__/executeHooks.test.ts +1013 -0
  323. package/src/hooks/__tests__/integration.test.ts +337 -0
  324. package/src/hooks/__tests__/matchers.test.ts +238 -0
  325. package/src/hooks/__tests__/toolHooks.test.ts +665 -0
  326. package/src/hooks/executeHooks.ts +375 -0
  327. package/src/hooks/index.ts +57 -0
  328. package/src/hooks/matchers.ts +280 -0
  329. package/src/hooks/types.ts +404 -0
  330. package/src/index.ts +15 -24
  331. package/src/langchain/google-common.ts +1 -0
  332. package/src/langchain/index.ts +8 -0
  333. package/src/langchain/language_models/chat_models.ts +1 -0
  334. package/src/langchain/messages/tool.ts +5 -0
  335. package/src/langchain/messages.ts +21 -0
  336. package/src/langchain/openai.ts +1 -0
  337. package/src/langchain/prompts.ts +1 -0
  338. package/src/langchain/runnables.ts +7 -0
  339. package/src/langchain/tools.ts +8 -0
  340. package/src/langchain/utils/env.ts +1 -0
  341. package/src/llm/anthropic/utils/message_inputs.ts +10 -1
  342. package/src/llm/anthropic/utils/server-tool-inputs.test.ts +436 -0
  343. package/src/llm/bedrock/__tests__/bedrock-caching.test.ts +166 -18
  344. package/src/llm/bedrock/cacheSupport.test.ts +99 -0
  345. package/src/llm/bedrock/cacheSupport.ts +53 -0
  346. package/src/llm/bedrock/index.ts +116 -41
  347. package/src/llm/openai/index.ts +2 -2
  348. package/src/llm/openai/utils/index.ts +31 -14
  349. package/src/memory/citations.ts +4 -4
  350. package/src/memory/constants.ts +17 -17
  351. package/src/memory/mmr.ts +3 -3
  352. package/src/memory/paths.ts +1 -1
  353. package/src/memory/recallTracking.ts +3 -3
  354. package/src/memory/temporalDecay.ts +2 -2
  355. package/src/memory/types.ts +3 -3
  356. package/src/messages/__tests__/contextPruning.test.ts +228 -0
  357. package/src/messages/cache.test.ts +62 -24
  358. package/src/messages/cache.ts +112 -0
  359. package/src/messages/contextPruning.ts +191 -0
  360. package/src/messages/contextPruningSettings.ts +90 -0
  361. package/src/messages/ensureThinkingBlock.test.ts +1 -1
  362. package/src/messages/format.ts +164 -12
  363. package/src/messages/formatAgentMessages.skills.test.ts +413 -0
  364. package/src/messages/formatAgentMessages.test.ts +1 -1
  365. package/src/messages/index.ts +2 -0
  366. package/src/messages/prune.ts +661 -4
  367. package/src/run.ts +155 -1
  368. package/src/scripts/multi-agent-chain.ts +2 -2
  369. package/src/scripts/multi-agent-document-review-chain.ts +2 -2
  370. package/src/scripts/multi-agent-hybrid-flow.ts +4 -4
  371. package/src/scripts/multi-agent-parallel.ts +3 -3
  372. package/src/scripts/multi-agent-sequence.ts +3 -3
  373. package/src/scripts/multi-agent-subagent.ts +246 -0
  374. package/src/scripts/multi-agent-supervisor.ts +5 -5
  375. package/src/scripts/poc-multi-agent-comprehensive.ts +8 -8
  376. package/src/scripts/sequential-full-metadata-test.ts +2 -2
  377. package/src/scripts/subagent-event-driven-debug.ts +190 -0
  378. package/src/scripts/subagent-tools-debug.ts +160 -0
  379. package/src/scripts/test-custom-prompt-key.ts +3 -3
  380. package/src/scripts/test-handoff-input.ts +1 -1
  381. package/src/scripts/test-handoff-steering.ts +3 -3
  382. package/src/scripts/test-multi-agent-list-handoff.ts +1 -1
  383. package/src/scripts/test-parallel-agent-labeling.ts +3 -3
  384. package/src/scripts/test-parallel-handoffs.ts +2 -2
  385. package/src/scripts/test-thinking-handoff-bedrock.ts +1 -1
  386. package/src/scripts/test-thinking-handoff.ts +1 -1
  387. package/src/scripts/test-thinking-to-thinking-handoff-bedrock.ts +1 -1
  388. package/src/scripts/test-tool-before-handoff-role-order.ts +1 -1
  389. package/src/scripts/test-tools-before-handoff.ts +1 -1
  390. package/src/specs/agent-handoffs.test.ts +26 -483
  391. package/src/specs/anthropic.simple.test.ts +61 -0
  392. package/src/specs/multi-agent-summarization.test.ts +396 -0
  393. package/src/specs/prune.orphans.test.ts +248 -0
  394. package/src/specs/prune.test.ts +104 -16
  395. package/src/specs/thinking-handoff.test.ts +19 -19
  396. package/src/tools/BashExecutor.ts +281 -0
  397. package/src/tools/BashProgrammaticToolCalling.ts +397 -0
  398. package/src/tools/CodeExecutor.ts +63 -54
  399. package/src/tools/ProgrammaticToolCalling.ts +29 -14
  400. package/src/tools/ReadFile.ts +39 -0
  401. package/src/tools/SkillTool.ts +46 -0
  402. package/src/tools/SubagentTool.ts +100 -0
  403. package/src/tools/ToolNode.ts +548 -26
  404. package/src/tools/__tests__/BashExecutor.test.ts +49 -0
  405. package/src/tools/__tests__/CodeExecutor.test.ts +37 -36
  406. package/src/tools/__tests__/ProgrammaticToolCalling.test.ts +60 -0
  407. package/src/tools/__tests__/ReadFile.test.ts +44 -0
  408. package/src/tools/__tests__/SkillTool.test.ts +442 -0
  409. package/src/tools/__tests__/SubagentExecutor.test.ts +1148 -0
  410. package/src/tools/__tests__/SubagentTool.test.ts +149 -0
  411. package/src/tools/__tests__/ToolNode.outputReferences.test.ts +1438 -0
  412. package/src/tools/__tests__/annotateMessagesForLLM.test.ts +479 -0
  413. package/src/tools/__tests__/skillCatalog.test.ts +161 -0
  414. package/src/tools/__tests__/subagentHooks.test.ts +210 -0
  415. package/src/tools/__tests__/toolOutputReferences.test.ts +415 -0
  416. package/src/tools/memory/memoryAppendTool.ts +1 -1
  417. package/src/tools/memory/memoryGetTool.ts +2 -2
  418. package/src/tools/memory/memorySearchTool.ts +3 -3
  419. package/src/tools/memory/shared.ts +1 -1
  420. package/src/tools/search/search.ts +12 -2
  421. package/src/tools/search/tavily-scraper.ts +235 -0
  422. package/src/tools/search/tavily-search.ts +424 -0
  423. package/src/tools/search/tavily.test.ts +965 -0
  424. package/src/tools/search/tool.ts +36 -2
  425. package/src/tools/search/types.ts +133 -8
  426. package/src/tools/search/utils.ts +13 -5
  427. package/src/tools/skillCatalog.ts +126 -0
  428. package/src/tools/subagent/SubagentExecutor.ts +676 -0
  429. package/src/tools/subagent/index.ts +13 -0
  430. package/src/tools/subagent/types.test.ts +70 -0
  431. package/src/tools/subagent/types.ts +115 -0
  432. package/src/tools/toolOutputReferences.ts +825 -0
  433. package/src/types/agent-cache.ts +74 -0
  434. package/src/types/graph.ts +172 -20
  435. package/src/types/index.ts +3 -0
  436. package/src/types/messages.ts +27 -0
  437. package/src/types/run.ts +22 -0
  438. package/src/types/skill.ts +11 -0
  439. package/src/types/tools.ts +118 -0
  440. package/src/utils/__tests__/truncation.test.ts +66 -0
  441. package/src/utils/index.ts +1 -3
  442. package/src/utils/truncation.ts +154 -0
  443. package/dist/cjs/common/spawnPath.cjs +0 -104
  444. package/dist/cjs/common/spawnPath.cjs.map +0 -1
  445. package/dist/cjs/content/ArtifactStore.cjs +0 -579
  446. package/dist/cjs/content/ArtifactStore.cjs.map +0 -1
  447. package/dist/cjs/content/ContentStore.cjs +0 -638
  448. package/dist/cjs/content/ContentStore.cjs.map +0 -1
  449. package/dist/cjs/content/contentAnalyzer.cjs +0 -91
  450. package/dist/cjs/content/contentAnalyzer.cjs.map +0 -1
  451. package/dist/cjs/content/index.cjs +0 -20
  452. package/dist/cjs/content/index.cjs.map +0 -1
  453. package/dist/cjs/content/mcpAutoCache.cjs +0 -115
  454. package/dist/cjs/content/mcpAutoCache.cjs.map +0 -1
  455. package/dist/cjs/graphs/HandoffRegistry.cjs +0 -143
  456. package/dist/cjs/graphs/HandoffRegistry.cjs.map +0 -1
  457. package/dist/cjs/providers/a2a/A2ACapabilityProvider.cjs +0 -288
  458. package/dist/cjs/providers/a2a/A2ACapabilityProvider.cjs.map +0 -1
  459. package/dist/cjs/providers/a2a/client.cjs +0 -92
  460. package/dist/cjs/providers/a2a/client.cjs.map +0 -1
  461. package/dist/cjs/providers/a2a/config.cjs +0 -38
  462. package/dist/cjs/providers/a2a/config.cjs.map +0 -1
  463. package/dist/cjs/providers/capabilityNaming.cjs +0 -43
  464. package/dist/cjs/providers/capabilityNaming.cjs.map +0 -1
  465. package/dist/cjs/providers/mcp/MCPCapabilityProvider.cjs +0 -244
  466. package/dist/cjs/providers/mcp/MCPCapabilityProvider.cjs.map +0 -1
  467. package/dist/cjs/providers/mcp/config.cjs +0 -42
  468. package/dist/cjs/providers/mcp/config.cjs.map +0 -1
  469. package/dist/cjs/providers/mcp/transport.cjs +0 -65
  470. package/dist/cjs/providers/mcp/transport.cjs.map +0 -1
  471. package/dist/cjs/providers/tools-server/ToolsServerCapabilityProvider.cjs +0 -128
  472. package/dist/cjs/providers/tools-server/ToolsServerCapabilityProvider.cjs.map +0 -1
  473. package/dist/cjs/providers/types.cjs +0 -51
  474. package/dist/cjs/providers/types.cjs.map +0 -1
  475. package/dist/cjs/tools/artifacts/schema.cjs +0 -86
  476. package/dist/cjs/tools/artifacts/schema.cjs.map +0 -1
  477. package/dist/cjs/tools/artifacts/tool.cjs +0 -219
  478. package/dist/cjs/tools/artifacts/tool.cjs.map +0 -1
  479. package/dist/cjs/tools/fileSearch/formatter.cjs +0 -93
  480. package/dist/cjs/tools/fileSearch/formatter.cjs.map +0 -1
  481. package/dist/cjs/tools/fileSearch/ragClient.cjs +0 -102
  482. package/dist/cjs/tools/fileSearch/ragClient.cjs.map +0 -1
  483. package/dist/cjs/tools/fileSearch/schema.cjs +0 -18
  484. package/dist/cjs/tools/fileSearch/schema.cjs.map +0 -1
  485. package/dist/cjs/tools/fileSearch/tool.cjs +0 -155
  486. package/dist/cjs/tools/fileSearch/tool.cjs.map +0 -1
  487. package/dist/cjs/tools/proxyTool.cjs +0 -102
  488. package/dist/cjs/tools/proxyTool.cjs.map +0 -1
  489. package/dist/cjs/utils/childAgentContext.cjs +0 -242
  490. package/dist/cjs/utils/childAgentContext.cjs.map +0 -1
  491. package/dist/cjs/utils/credentials.cjs +0 -142
  492. package/dist/cjs/utils/credentials.cjs.map +0 -1
  493. package/dist/cjs/utils/httpClient.cjs +0 -74
  494. package/dist/cjs/utils/httpClient.cjs.map +0 -1
  495. package/dist/cjs/utils/toolManifest.cjs +0 -100
  496. package/dist/cjs/utils/toolManifest.cjs.map +0 -1
  497. package/dist/esm/common/spawnPath.mjs +0 -95
  498. package/dist/esm/common/spawnPath.mjs.map +0 -1
  499. package/dist/esm/content/ArtifactStore.mjs +0 -576
  500. package/dist/esm/content/ArtifactStore.mjs.map +0 -1
  501. package/dist/esm/content/ContentStore.mjs +0 -635
  502. package/dist/esm/content/ContentStore.mjs.map +0 -1
  503. package/dist/esm/content/contentAnalyzer.mjs +0 -87
  504. package/dist/esm/content/contentAnalyzer.mjs.map +0 -1
  505. package/dist/esm/content/index.mjs +0 -5
  506. package/dist/esm/content/mcpAutoCache.mjs +0 -111
  507. package/dist/esm/content/mcpAutoCache.mjs.map +0 -1
  508. package/dist/esm/graphs/HandoffRegistry.mjs +0 -141
  509. package/dist/esm/graphs/HandoffRegistry.mjs.map +0 -1
  510. package/dist/esm/providers/a2a/A2ACapabilityProvider.mjs +0 -281
  511. package/dist/esm/providers/a2a/A2ACapabilityProvider.mjs.map +0 -1
  512. package/dist/esm/providers/a2a/client.mjs +0 -88
  513. package/dist/esm/providers/a2a/client.mjs.map +0 -1
  514. package/dist/esm/providers/a2a/config.mjs +0 -35
  515. package/dist/esm/providers/a2a/config.mjs.map +0 -1
  516. package/dist/esm/providers/capabilityNaming.mjs +0 -39
  517. package/dist/esm/providers/capabilityNaming.mjs.map +0 -1
  518. package/dist/esm/providers/mcp/MCPCapabilityProvider.mjs +0 -240
  519. package/dist/esm/providers/mcp/MCPCapabilityProvider.mjs.map +0 -1
  520. package/dist/esm/providers/mcp/config.mjs +0 -39
  521. package/dist/esm/providers/mcp/config.mjs.map +0 -1
  522. package/dist/esm/providers/mcp/transport.mjs +0 -63
  523. package/dist/esm/providers/mcp/transport.mjs.map +0 -1
  524. package/dist/esm/providers/tools-server/ToolsServerCapabilityProvider.mjs +0 -126
  525. package/dist/esm/providers/tools-server/ToolsServerCapabilityProvider.mjs.map +0 -1
  526. package/dist/esm/providers/types.mjs +0 -51
  527. package/dist/esm/providers/types.mjs.map +0 -1
  528. package/dist/esm/tools/artifacts/schema.mjs +0 -79
  529. package/dist/esm/tools/artifacts/schema.mjs.map +0 -1
  530. package/dist/esm/tools/artifacts/tool.mjs +0 -213
  531. package/dist/esm/tools/artifacts/tool.mjs.map +0 -1
  532. package/dist/esm/tools/fileSearch/formatter.mjs +0 -90
  533. package/dist/esm/tools/fileSearch/formatter.mjs.map +0 -1
  534. package/dist/esm/tools/fileSearch/ragClient.mjs +0 -98
  535. package/dist/esm/tools/fileSearch/ragClient.mjs.map +0 -1
  536. package/dist/esm/tools/fileSearch/schema.mjs +0 -15
  537. package/dist/esm/tools/fileSearch/schema.mjs.map +0 -1
  538. package/dist/esm/tools/fileSearch/tool.mjs +0 -152
  539. package/dist/esm/tools/fileSearch/tool.mjs.map +0 -1
  540. package/dist/esm/tools/proxyTool.mjs +0 -100
  541. package/dist/esm/tools/proxyTool.mjs.map +0 -1
  542. package/dist/esm/utils/childAgentContext.mjs +0 -237
  543. package/dist/esm/utils/childAgentContext.mjs.map +0 -1
  544. package/dist/esm/utils/credentials.mjs +0 -135
  545. package/dist/esm/utils/credentials.mjs.map +0 -1
  546. package/dist/esm/utils/httpClient.mjs +0 -70
  547. package/dist/esm/utils/httpClient.mjs.map +0 -1
  548. package/dist/esm/utils/toolManifest.mjs +0 -96
  549. package/dist/esm/utils/toolManifest.mjs.map +0 -1
  550. package/dist/types/common/spawnPath.d.ts +0 -59
  551. package/dist/types/content/ArtifactStore.d.ts +0 -223
  552. package/dist/types/content/ContentStore.d.ts +0 -140
  553. package/dist/types/content/contentAnalyzer.d.ts +0 -38
  554. package/dist/types/content/index.d.ts +0 -24
  555. package/dist/types/content/mcpAutoCache.d.ts +0 -89
  556. package/dist/types/content/types.d.ts +0 -75
  557. package/dist/types/graphs/HandoffRegistry.d.ts +0 -97
  558. package/dist/types/providers/a2a/A2ACapabilityProvider.d.ts +0 -89
  559. package/dist/types/providers/a2a/client.d.ts +0 -47
  560. package/dist/types/providers/a2a/config.d.ts +0 -18
  561. package/dist/types/providers/a2a/index.d.ts +0 -6
  562. package/dist/types/providers/a2a/types.d.ts +0 -173
  563. package/dist/types/providers/capabilityNaming.d.ts +0 -25
  564. package/dist/types/providers/index.d.ts +0 -12
  565. package/dist/types/providers/mcp/MCPCapabilityProvider.d.ts +0 -54
  566. package/dist/types/providers/mcp/config.d.ts +0 -20
  567. package/dist/types/providers/mcp/index.d.ts +0 -5
  568. package/dist/types/providers/mcp/transport.d.ts +0 -18
  569. package/dist/types/providers/mcp/types.d.ts +0 -112
  570. package/dist/types/providers/tools-server/ToolsServerCapabilityProvider.d.ts +0 -59
  571. package/dist/types/providers/tools-server/index.d.ts +0 -1
  572. package/dist/types/providers/types.d.ts +0 -184
  573. package/dist/types/tools/artifacts/index.d.ts +0 -3
  574. package/dist/types/tools/artifacts/schema.d.ts +0 -63
  575. package/dist/types/tools/artifacts/tool.d.ts +0 -16
  576. package/dist/types/tools/artifacts/types.d.ts +0 -127
  577. package/dist/types/tools/fileSearch/formatter.d.ts +0 -25
  578. package/dist/types/tools/fileSearch/index.d.ts +0 -5
  579. package/dist/types/tools/fileSearch/ragClient.d.ts +0 -32
  580. package/dist/types/tools/fileSearch/schema.d.ts +0 -13
  581. package/dist/types/tools/fileSearch/tool.d.ts +0 -18
  582. package/dist/types/tools/fileSearch/types.d.ts +0 -139
  583. package/dist/types/tools/proxyTool.d.ts +0 -62
  584. package/dist/types/tools/search/test.d.ts +0 -1
  585. package/dist/types/utils/childAgentContext.d.ts +0 -99
  586. package/dist/types/utils/credentials.d.ts +0 -77
  587. package/dist/types/utils/httpClient.d.ts +0 -46
  588. package/dist/types/utils/toolManifest.d.ts +0 -49
  589. package/src/common/__tests__/spawnPath.test.ts +0 -110
  590. package/src/common/spawnPath.ts +0 -101
  591. package/src/content/ArtifactStore.ts +0 -782
  592. package/src/content/ContentStore.ts +0 -753
  593. package/src/content/contentAnalyzer.ts +0 -105
  594. package/src/content/index.ts +0 -51
  595. package/src/content/mcpAutoCache.ts +0 -185
  596. package/src/content/types.ts +0 -82
  597. package/src/graphs/HandoffRegistry.ts +0 -199
  598. package/src/graphs/__tests__/HandoffRegistry.test.ts +0 -410
  599. package/src/graphs/__tests__/multi-agent-delegate.test.ts +0 -458
  600. package/src/graphs/__tests__/multi-agent-edges.test.ts +0 -276
  601. package/src/graphs/__tests__/multi-agent-nested-subgraph.test.ts +0 -221
  602. package/src/graphs/handoffValidation.test.ts +0 -353
  603. package/src/providers/__tests__/ToolsServerCapabilityProvider.integration.spec.ts +0 -79
  604. package/src/providers/__tests__/ToolsServerCapabilityProvider.test.ts +0 -271
  605. package/src/providers/__tests__/types.test.ts +0 -64
  606. package/src/providers/a2a/A2ACapabilityProvider.ts +0 -384
  607. package/src/providers/a2a/__tests__/A2ACapabilityProvider.integration.spec.ts +0 -345
  608. package/src/providers/a2a/__tests__/A2ACapabilityProvider.test.ts +0 -460
  609. package/src/providers/a2a/client.ts +0 -115
  610. package/src/providers/a2a/config.ts +0 -40
  611. package/src/providers/a2a/index.ts +0 -29
  612. package/src/providers/a2a/types.ts +0 -191
  613. package/src/providers/capabilityNaming.ts +0 -42
  614. package/src/providers/index.ts +0 -68
  615. package/src/providers/mcp/MCPCapabilityProvider.ts +0 -345
  616. package/src/providers/mcp/__tests__/MCPCapabilityProvider.integration.spec.ts +0 -386
  617. package/src/providers/mcp/__tests__/MCPCapabilityProvider.test.ts +0 -371
  618. package/src/providers/mcp/config.ts +0 -45
  619. package/src/providers/mcp/index.ts +0 -21
  620. package/src/providers/mcp/transport.ts +0 -76
  621. package/src/providers/mcp/types.ts +0 -139
  622. package/src/providers/tools-server/ToolsServerCapabilityProvider.ts +0 -249
  623. package/src/providers/tools-server/index.ts +0 -1
  624. package/src/providers/types.ts +0 -204
  625. package/src/scripts/test-bedrock-handoff-autonomous.ts +0 -267
  626. package/src/scripts/test-handoff-preamble.ts +0 -278
  627. package/src/specs/agent-handoffs-bedrock.integration.test.ts +0 -415
  628. package/src/tools/artifacts/__tests__/tool.test.ts +0 -259
  629. package/src/tools/artifacts/index.ts +0 -33
  630. package/src/tools/artifacts/schema.ts +0 -99
  631. package/src/tools/artifacts/tool.ts +0 -289
  632. package/src/tools/artifacts/types.ts +0 -162
  633. package/src/tools/fileSearch/__tests__/tool.test.ts +0 -261
  634. package/src/tools/fileSearch/formatter.ts +0 -129
  635. package/src/tools/fileSearch/index.ts +0 -23
  636. package/src/tools/fileSearch/ragClient.ts +0 -137
  637. package/src/tools/fileSearch/schema.ts +0 -19
  638. package/src/tools/fileSearch/tool.ts +0 -207
  639. package/src/tools/fileSearch/types.ts +0 -149
  640. package/src/tools/proxyTool.ts +0 -166
  641. package/src/tools/search/output.md +0 -2775
  642. package/src/tools/search/test.html +0 -884
  643. package/src/tools/search/test.md +0 -643
  644. package/src/tools/search/test.ts +0 -159
  645. package/src/utils/__tests__/childAgentContext.test.ts +0 -217
  646. package/src/utils/__tests__/credentials.test.ts +0 -130
  647. package/src/utils/__tests__/httpClient.test.ts +0 -75
  648. package/src/utils/__tests__/toolManifest.test.ts +0 -116
  649. package/src/utils/childAgentContext.ts +0 -259
  650. package/src/utils/credentials.ts +0 -157
  651. package/src/utils/httpClient.ts +0 -92
  652. package/src/utils/toolManifest.ts +0 -109
  653. /package/dist/esm/{content → langchain}/index.mjs.map +0 -0
@@ -0,0 +1,99 @@
1
+ import {
2
+ DEFAULT_BEDROCK_CACHE_MODEL_PATTERNS,
3
+ isBedrockCacheSupported,
4
+ } from './cacheSupport';
5
+
6
+ describe('isBedrockCacheSupported', () => {
7
+ describe('default allowlist — supported models', () => {
8
+ const supported = [
9
+ // Anthropic Claude direct
10
+ 'anthropic.claude-3-5-sonnet-20241022-v2:0',
11
+ 'anthropic.claude-3-haiku-20240307-v1:0',
12
+ 'anthropic.claude-opus-4-5-20250514-v1:0',
13
+ 'anthropic.claude-sonnet-4-5-20250929-v1:0',
14
+ // Anthropic Claude via cross-region inference profile
15
+ 'us.anthropic.claude-sonnet-4-5-20250929-v1:0',
16
+ 'us.anthropic.claude-haiku-4-5-20251001-v1:0',
17
+ 'eu.anthropic.claude-3-5-sonnet-20241022-v2:0',
18
+ // Amazon Nova
19
+ 'amazon.nova-pro-v1:0',
20
+ 'amazon.nova-lite-v1:0',
21
+ 'amazon.nova-canvas-v1:0',
22
+ 'us.amazon.nova-pro-v1:0',
23
+ ];
24
+
25
+ for (const model of supported) {
26
+ it(`accepts "${model}"`, () => {
27
+ expect(isBedrockCacheSupported(model)).toBe(true);
28
+ });
29
+ }
30
+ });
31
+
32
+ describe('default allowlist — unsupported models', () => {
33
+ const unsupported = [
34
+ 'amazon.titan-text-premier-v1:0',
35
+ 'amazon.titan-embed-text-v2:0',
36
+ 'meta.llama3-1-405b-instruct-v1:0',
37
+ 'meta.llama3-2-90b-instruct-v1:0',
38
+ 'cohere.command-r-plus-v1:0',
39
+ 'mistral.mistral-large-2402-v1:0',
40
+ 'ai21.j2-ultra-v1',
41
+ 'stability.sd3-5-large-v1:0',
42
+ // Adversarial — substring match would falsely accept these
43
+ 'meta.llama-claude-killer-v1', // contains "claude" but isn't an Anthropic model
44
+ 'fake.anthropic-impersonator', // contains "anthropic" but wrong vendor
45
+ ];
46
+
47
+ for (const model of unsupported) {
48
+ it(`rejects "${model}"`, () => {
49
+ expect(isBedrockCacheSupported(model)).toBe(false);
50
+ });
51
+ }
52
+ });
53
+
54
+ describe('edge cases', () => {
55
+ it('returns false for undefined', () => {
56
+ expect(isBedrockCacheSupported(undefined)).toBe(false);
57
+ });
58
+
59
+ it('returns false for empty string', () => {
60
+ expect(isBedrockCacheSupported('')).toBe(false);
61
+ });
62
+ });
63
+
64
+ describe('consumer extension via additionalPatterns', () => {
65
+ it('accepts model matching consumer-supplied pattern', () => {
66
+ expect(
67
+ isBedrockCacheSupported('mycorp.future-model-v1:0', [
68
+ /^mycorp\.future-/i,
69
+ ]),
70
+ ).toBe(true);
71
+ });
72
+
73
+ it('still rejects models not in default OR consumer allowlist', () => {
74
+ expect(
75
+ isBedrockCacheSupported('cohere.command-r-plus-v1:0', [
76
+ /^mycorp\./i,
77
+ ]),
78
+ ).toBe(false);
79
+ });
80
+
81
+ it('default allowlist still works alongside extensions', () => {
82
+ // Both default + custom pattern work
83
+ expect(
84
+ isBedrockCacheSupported('anthropic.claude-3-haiku-20240307-v1:0', [
85
+ /^mycorp\./i,
86
+ ]),
87
+ ).toBe(true);
88
+ });
89
+ });
90
+
91
+ describe('DEFAULT_BEDROCK_CACHE_MODEL_PATTERNS export', () => {
92
+ it('is a non-empty readonly array of RegExp', () => {
93
+ expect(DEFAULT_BEDROCK_CACHE_MODEL_PATTERNS.length).toBeGreaterThan(0);
94
+ for (const pattern of DEFAULT_BEDROCK_CACHE_MODEL_PATTERNS) {
95
+ expect(pattern).toBeInstanceOf(RegExp);
96
+ }
97
+ });
98
+ });
99
+ });
@@ -0,0 +1,53 @@
1
+ /**
2
+ * Bedrock prompt-cache model support detection.
3
+ * ===============================================
4
+ *
5
+ * Bedrock prompt caching (via `cachePoint` blocks) is only supported on
6
+ * specific model families. Other families silently reject or ignore the
7
+ * markers. We maintain an allowlist instead of a substring heuristic so
8
+ * a future model with an unfortunate name (e.g. `llama-claude-killer`)
9
+ * doesn't accidentally match.
10
+ *
11
+ * Consumers can extend the allowlist with `bedrockCacheModelPatterns` in
12
+ * `clientOptions` for proprietary or pre-release model IDs not yet in
13
+ * the reference library.
14
+ */
15
+
16
+ /**
17
+ * Default allowlist of Bedrock model ID patterns that support cachePoint.
18
+ * Sourced from AWS Bedrock documentation (verified against us-east-1
19
+ * 2026-05).
20
+ *
21
+ * Adding a new model: append a RegExp here AND add a regression test in
22
+ * `cacheSupport.test.ts` covering at least one full model ID for that
23
+ * family. Removing a model: do not remove without operator confirmation
24
+ * — silent removal would suddenly stop emitting cachePoint markers and
25
+ * regress cost savings.
26
+ */
27
+ export const DEFAULT_BEDROCK_CACHE_MODEL_PATTERNS: readonly RegExp[] = [
28
+ // Anthropic Claude family (anthropic.claude-* and us.anthropic.claude-*)
29
+ /(?:^|[/.])anthropic\.claude-/i,
30
+ /(?:^|\.)us\.anthropic\.claude-/i,
31
+ // Amazon Nova family (nova-pro, nova-lite, nova-canvas, etc.)
32
+ /(?:^|[/.])amazon\.nova-/i,
33
+ /(?:^|\.)us\.amazon\.nova-/i,
34
+ ];
35
+
36
+ /**
37
+ * Returns true when the given Bedrock model ID belongs to a family that
38
+ * supports cachePoint blocks. `additionalPatterns` lets consumers extend
39
+ * the allowlist for models the library doesn't know about yet.
40
+ *
41
+ * @param modelId Bedrock model ID (e.g. `us.anthropic.claude-sonnet-4-5-20250929-v1:0`)
42
+ * @param additionalPatterns Extra patterns from consumer config
43
+ */
44
+ export function isBedrockCacheSupported(
45
+ modelId: string | undefined,
46
+ additionalPatterns?: readonly RegExp[],
47
+ ): boolean {
48
+ if (!modelId) return false;
49
+ const allPatterns = additionalPatterns
50
+ ? [...DEFAULT_BEDROCK_CACHE_MODEL_PATTERNS, ...additionalPatterns]
51
+ : DEFAULT_BEDROCK_CACHE_MODEL_PATTERNS;
52
+ return allPatterns.some((p) => p.test(modelId));
53
+ }
@@ -38,6 +38,7 @@ import type { BaseMessage } from '@langchain/core/messages';
38
38
  import { ChatGenerationChunk, ChatResult } from '@langchain/core/outputs';
39
39
  import type { CallbackManagerForLLMRun } from '@langchain/core/callbacks/manager';
40
40
  import type { ChatBedrockConverseInput } from '@langchain/aws';
41
+ import { isBedrockCacheSupported } from './cacheSupport';
41
42
  import {
42
43
  convertToConverseMessages,
43
44
  handleConverseStreamContentBlockStart,
@@ -52,19 +53,72 @@ import {
52
53
  */
53
54
  export type ServiceTierType = 'priority' | 'default' | 'flex' | 'reserved';
54
55
 
56
+ /**
57
+ * Tool cachePoint allocation strategy.
58
+ *
59
+ * - 'single': one cachePoint at the END of the tools array (whole array
60
+ * cached as one unit). Lightest budget use (1 cachePoint).
61
+ * - 'split': split tools into groups via `toolGroupSelector`. Each
62
+ * non-empty group gets its own cachePoint. Use when groups
63
+ * have different volatility (e.g. stable core tools vs
64
+ * volatile MCP tools). Costs more cachePoint budget.
65
+ * - 'none': no cachePoint on tools array. Use when tool definitions
66
+ * change every request anyway.
67
+ */
68
+ export type ToolCacheStrategy = 'single' | 'split' | 'none';
69
+
70
+ /**
71
+ * Group selector for `toolCacheStrategy: 'split'`. Receives the tool name
72
+ * and returns a stable group key — tools with the same key are grouped
73
+ * together. Group order in the output array follows first-encounter order.
74
+ */
75
+ export type ToolGroupSelector = (toolName: string) => string;
76
+
77
+ /**
78
+ * Default group selector — puts all tools in a single group named 'core'.
79
+ * Equivalent to 'single' strategy but explicit. Consumers override this
80
+ * to enable per-source grouping (e.g. by inspecting tool-name substrings
81
+ * to separate stable framework tools from volatile MCP-sourced tools).
82
+ */
83
+ export const DEFAULT_TOOL_GROUP_SELECTOR: ToolGroupSelector = () => 'core';
84
+
55
85
  /**
56
86
  * Extended input interface with additional features:
57
87
  * - promptCache: Enable Bedrock prompt caching for tool definitions
58
88
  * - applicationInferenceProfile: Use an inference profile ARN instead of model ID
59
89
  * - serviceTier: Specify service tier (Priority, Standard, Flex, Reserved)
90
+ * - toolCacheStrategy: How to allocate cachePoints across tools array
91
+ * - toolGroupSelector: Group key resolver for the 'split' strategy
60
92
  */
61
93
  export interface IllumaBedrockConverseInput extends ChatBedrockConverseInput {
62
94
  /**
63
95
  * Enable Bedrock prompt caching for tool definitions.
64
- * When true, adds cachePoint markers to tools array.
96
+ * When true, adds cachePoint marker(s) to tools array per
97
+ * `toolCacheStrategy`. Defaults to 'single'.
65
98
  */
66
99
  promptCache?: boolean;
67
100
 
101
+ /**
102
+ * Tool cachePoint allocation. Defaults to 'single' — one cachePoint at
103
+ * the end of the tools array. Set to 'split' (with `toolGroupSelector`)
104
+ * when different tool groups have different volatility.
105
+ */
106
+ toolCacheStrategy?: ToolCacheStrategy;
107
+
108
+ /**
109
+ * Group selector for 'split' strategy. Receives a tool name, returns
110
+ * a stable group key. Defaults to a one-group selector (equivalent
111
+ * to 'single').
112
+ */
113
+ toolGroupSelector?: ToolGroupSelector;
114
+
115
+ /**
116
+ * Additional model ID patterns to consider Bedrock-cache-supported.
117
+ * Defaults are in `src/llm/bedrock/cacheSupport.ts`. Use this when
118
+ * AWS adds a new model family before the next library release.
119
+ */
120
+ bedrockCacheModelPatterns?: readonly RegExp[];
121
+
68
122
  /**
69
123
  * Application Inference Profile ARN to use for the model.
70
124
  * For example, "arn:aws:bedrock:eu-west-1:123456789102:application-inference-profile/fm16bt65tzgx"
@@ -108,11 +162,24 @@ export class IllumaBedrockConverse extends ChatBedrockConverse {
108
162
  /** Service tier for model invocation */
109
163
  serviceTier?: ServiceTierType;
110
164
 
165
+ /** Tool cachePoint allocation strategy. */
166
+ toolCacheStrategy: ToolCacheStrategy;
167
+
168
+ /** Group selector for 'split' strategy. */
169
+ toolGroupSelector: ToolGroupSelector;
170
+
171
+ /** Optional consumer extensions to the cache-supported model allowlist. */
172
+ bedrockCacheModelPatterns?: readonly RegExp[];
173
+
111
174
  constructor(fields?: IllumaBedrockConverseInput) {
112
175
  super(fields);
113
176
  this.promptCache = fields?.promptCache ?? false;
114
177
  this.applicationInferenceProfile = fields?.applicationInferenceProfile;
115
178
  this.serviceTier = fields?.serviceTier;
179
+ this.toolCacheStrategy = fields?.toolCacheStrategy ?? 'single';
180
+ this.toolGroupSelector =
181
+ fields?.toolGroupSelector ?? DEFAULT_TOOL_GROUP_SELECTOR;
182
+ this.bedrockCacheModelPatterns = fields?.bedrockCacheModelPatterns;
116
183
 
117
184
  // Fix: Force supportsToolChoiceValues for Claude models
118
185
  // The parent constructor checks `model.includes('claude-3')` but this fails when:
@@ -183,56 +250,64 @@ export class IllumaBedrockConverse extends ChatBedrockConverse {
183
250
  }
184
251
  }
185
252
 
186
- // Only Claude models support cachePoint - check model name
187
- const modelId = this.model.toLowerCase();
188
- const isClaudeModel =
189
- modelId.includes('claude') || modelId.includes('anthropic');
253
+ /* Allowlist-based gate (see cacheSupport.ts). Replaces the old
254
+ * substring heuristic — same default behavior for Claude/Anthropic/
255
+ * Nova models, plus extension via `bedrockCacheModelPatterns`. */
256
+ const cacheSupported = isBedrockCacheSupported(
257
+ this.model,
258
+ this.bedrockCacheModelPatterns,
259
+ );
190
260
 
191
261
  if (
192
262
  this.promptCache &&
193
- isClaudeModel &&
263
+ cacheSupported &&
264
+ this.toolCacheStrategy !== 'none' &&
194
265
  params.toolConfig?.tools &&
195
266
  Array.isArray(params.toolConfig.tools) &&
196
267
  params.toolConfig.tools.length > 0
197
268
  ) {
198
- // Separate core tools from MCP tools
199
- // MCP tools have '_mcp_' in their name (e.g., 'search_emails_mcp_Google-Workspace')
200
- const coreTools: typeof params.toolConfig.tools = [];
201
- const mcpTools: typeof params.toolConfig.tools = [];
202
-
203
- for (const tool of params.toolConfig.tools) {
204
- // Check if tool has a name property with '_mcp_' pattern
205
- const toolName =
206
- (tool as { toolSpec?: { name?: string } }).toolSpec?.name ?? '';
207
- if (toolName.includes('_mcp_')) {
208
- mcpTools.push(tool);
209
- } else {
210
- coreTools.push(tool);
269
+ const tools = params.toolConfig.tools;
270
+
271
+ if (this.toolCacheStrategy === 'single') {
272
+ /* SINGLE: one cachePoint at the end of the tools array. Lightest
273
+ * budget use; appropriate when the entire tools array is treated
274
+ * as one unit and changes together. */
275
+ const toolsWithCache = [
276
+ ...tools,
277
+ { cachePoint: { type: 'default' } } as (typeof tools)[number],
278
+ ];
279
+ params.toolConfig.tools = toolsWithCache;
280
+ } else if (this.toolCacheStrategy === 'split') {
281
+ /* SPLIT: group tools by `toolGroupSelector` and emit a cachePoint
282
+ * after each non-empty group. Group order follows first-encounter
283
+ * order in the input. Use when groups have different volatility
284
+ * (e.g. stable core tools + volatile MCP tools). */
285
+ const groupOrder: string[] = [];
286
+ const groupMap = new Map<string, typeof tools>();
287
+ for (const tool of tools) {
288
+ const toolName =
289
+ (tool as { toolSpec?: { name?: string } }).toolSpec?.name ?? '';
290
+ const groupKey = this.toolGroupSelector(toolName);
291
+ let group = groupMap.get(groupKey);
292
+ if (!group) {
293
+ group = [];
294
+ groupMap.set(groupKey, group);
295
+ groupOrder.push(groupKey);
296
+ }
297
+ group.push(tool);
211
298
  }
212
- }
213
-
214
- // Build tools array with strategic cachePoints:
215
- // [CoreTool1, CoreTool2, cachePoint] + [MCPTool1, MCPTool2, cachePoint]
216
- const toolsWithCache: typeof params.toolConfig.tools = [];
217
-
218
- // Add core tools with cachePoint (if any)
219
- if (coreTools.length > 0) {
220
- toolsWithCache.push(...coreTools);
221
- toolsWithCache.push({ cachePoint: { type: 'default' } });
222
- }
223
299
 
224
- // Add MCP tools with their own cachePoint (if any)
225
- if (mcpTools.length > 0) {
226
- toolsWithCache.push(...mcpTools);
227
- toolsWithCache.push({ cachePoint: { type: 'default' } });
228
- }
229
-
230
- // If no tools at all (shouldn't happen but safety check)
231
- if (toolsWithCache.length === 0) {
232
- toolsWithCache.push({ cachePoint: { type: 'default' } });
300
+ const toolsWithCache: typeof tools = [];
301
+ for (const groupKey of groupOrder) {
302
+ const group = groupMap.get(groupKey);
303
+ if (!group || group.length === 0) continue;
304
+ toolsWithCache.push(...group);
305
+ toolsWithCache.push(
306
+ { cachePoint: { type: 'default' } } as (typeof tools)[number],
307
+ );
308
+ }
309
+ params.toolConfig.tools = toolsWithCache;
233
310
  }
234
-
235
- params.toolConfig.tools = toolsWithCache;
236
311
  }
237
312
 
238
313
  // Add serviceTier support
@@ -896,8 +896,8 @@ export interface XAIUsageMetadata
896
896
  }
897
897
 
898
898
  export class ChatMoonshot extends ChatOpenAI {
899
- static lc_name(): 'LibreChatMoonshot' {
900
- return 'LibreChatMoonshot';
899
+ static lc_name(): 'IllumaMoonshot' {
900
+ return 'IllumaMoonshot';
901
901
  }
902
902
 
903
903
  protected _convertMessages(messages: BaseMessage[]): OpenAICompletionParam[] {
@@ -302,6 +302,10 @@ export function _convertMessagesToOpenAIParams(
302
302
  model?: string,
303
303
  options?: ConvertMessagesOptions
304
304
  ): OpenAICompletionParam[] {
305
+ /* DeepSeek reasoning roundtrip (PR #136): reasoning_content on
306
+ * an AI message must be re-sent only when the message participates in a
307
+ * tool-call exchange. Track context across the message flat-map. */
308
+ let hasReasoningToolCallContext = false;
305
309
  // TODO: Function messages do not support array content, fix cast
306
310
  return messages.flatMap((message) => {
307
311
  let role = messageToOpenAIRole(message);
@@ -332,6 +336,8 @@ export function _convertMessagesToOpenAIParams(
332
336
  role,
333
337
  content,
334
338
  };
339
+ let messageHasToolCalls = false;
340
+ let messageIsToolResult = false;
335
341
  if (message.name != null) {
336
342
  completionParam.name = message.name;
337
343
  }
@@ -340,17 +346,11 @@ export function _convertMessagesToOpenAIParams(
340
346
  completionParam.content = '';
341
347
  }
342
348
  if (isAIMessage(message) && !!message.tool_calls?.length) {
349
+ messageHasToolCalls = true;
343
350
  completionParam.tool_calls = message.tool_calls.map(
344
351
  convertLangChainToolCallToOpenAI
345
352
  );
346
353
  completionParam.content = hasAnthropicThinkingBlock ? content : '';
347
- if (
348
- options?.includeReasoningContent === true &&
349
- message.additional_kwargs.reasoning_content != null
350
- ) {
351
- completionParam.reasoning_content =
352
- message.additional_kwargs.reasoning_content;
353
- }
354
354
  if (
355
355
  options?.includeReasoningDetails === true &&
356
356
  message.additional_kwargs.reasoning_details != null
@@ -398,14 +398,10 @@ export function _convertMessagesToOpenAIParams(
398
398
  }
399
399
  } else {
400
400
  if (message.additional_kwargs.tool_calls != null) {
401
+ messageHasToolCalls =
402
+ !Array.isArray(message.additional_kwargs.tool_calls) ||
403
+ message.additional_kwargs.tool_calls.length > 0;
401
404
  completionParam.tool_calls = message.additional_kwargs.tool_calls;
402
- if (
403
- options?.includeReasoningContent === true &&
404
- message.additional_kwargs.reasoning_content != null
405
- ) {
406
- completionParam.reasoning_content =
407
- message.additional_kwargs.reasoning_content;
408
- }
409
405
  if (
410
406
  options?.includeReasoningDetails === true &&
411
407
  message.additional_kwargs.reasoning_details != null
@@ -453,10 +449,31 @@ export function _convertMessagesToOpenAIParams(
453
449
  }
454
450
  }
455
451
  if ((message as ToolMessage).tool_call_id != null) {
452
+ messageIsToolResult = true;
456
453
  completionParam.tool_call_id = (message as ToolMessage).tool_call_id;
457
454
  }
458
455
  }
459
456
 
457
+ /* DeepSeek reasoning roundtrip (PR #136): emit
458
+ * reasoning_content only when the message is part of a tool-call
459
+ * exchange — either the message itself has tool_calls, or a previous
460
+ * AI/tool message established the context. Skipping the gate causes
461
+ * DeepSeek to drop reasoning content during multi-turn replays. */
462
+ if (
463
+ options?.includeReasoningContent === true &&
464
+ isAIMessage(message) &&
465
+ (hasReasoningToolCallContext || messageHasToolCalls) &&
466
+ typeof message.additional_kwargs.reasoning_content === 'string' &&
467
+ message.additional_kwargs.reasoning_content !== ''
468
+ ) {
469
+ completionParam.reasoning_content =
470
+ message.additional_kwargs.reasoning_content;
471
+ }
472
+
473
+ if (messageHasToolCalls || messageIsToolResult) {
474
+ hasReasoningToolCallContext = true;
475
+ }
476
+
460
477
  if (
461
478
  message.additional_kwargs.audio &&
462
479
  typeof message.additional_kwargs.audio === 'object' &&
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * Citation decoration — Phase 2.
3
3
  *
4
- * Ported from upstream `extensions/memory-core/src/tools.citations.ts`.
4
+ * Ported from a reference implementation `extensions/memory-core/src/tools.citations.ts`.
5
5
  * Decorates memory_search hits with `[path#L{start}-L{end}]` markers so
6
6
  * the model can attribute claims back to specific memory files when it
7
7
  * uses them in its answer.
@@ -10,7 +10,7 @@
10
10
  * compute line ranges from the returned content block on the fly:
11
11
  * - `startLine` = 1 (line 1 of the file)
12
12
  * - `endLine` = total number of lines in the block
13
- * This matches upstream's output format exactly while keeping the pg
13
+ * This matches the standard output format exactly while keeping the pg
14
14
  * schema chunk-free.
15
15
  */
16
16
 
@@ -48,7 +48,7 @@ function formatCitation(
48
48
  }
49
49
 
50
50
  /**
51
- * Decorate each hit with a citation marker. Mirrors upstream's behavior:
51
+ * Decorate each hit with a citation marker. Mirrors the standard behavior:
52
52
  * appends `\n\nSource: <citation>` to the content and sets `citation`.
53
53
  * When `include=false`, clears any existing citation field.
54
54
  */
@@ -69,7 +69,7 @@ export function decorateCitations<T extends CitationCandidate>(
69
69
  /**
70
70
  * Whether citations should be emitted for this call.
71
71
  *
72
- * Upstream keys `auto` off the session type (direct/group/channel). In
72
+ * The reference implementation keys `auto` off the session type (direct/group/channel). In
73
73
  * Phase 1 we only have direct chat, so `auto` => `on`. Callers that
74
74
  * later distinguish session types can pass `mode` explicitly.
75
75
  */
@@ -26,14 +26,14 @@ export const MEMORY_PHASE_NORMAL = 'normal';
26
26
  export const MEMORY_PHASE_FLUSHING = 'memory_flushing';
27
27
 
28
28
  /**
29
- * Search defaults — aligned with upstream's upstream defaults.
29
+ * Search defaults — aligned with the standard defaults.
30
30
  *
31
31
  * Sources:
32
- * - `upstream reference` → maxResults=6
33
- * - `upstream reference` → maxInjectedChars=4000
32
+ * - `reference` → maxResults=6
33
+ * - `reference` → maxInjectedChars=4000
34
34
  *
35
- * Keeping these in lockstep with upstream means the mandatory-recall tool
36
- * description, budget clamps, and eval corpora line up with upstream's
35
+ * Keeping these in lockstep with means the mandatory-recall tool
36
+ * description, budget clamps, and eval corpora line up with the standard
37
37
  * tuning — we inherit their calibration instead of re-tuning from scratch.
38
38
  */
39
39
  export const DEFAULT_MAX_SEARCH_RESULTS = 6;
@@ -45,11 +45,11 @@ export const HYBRID_VECTOR_WEIGHT = 0.7;
45
45
  export const HYBRID_TEXT_WEIGHT = 0.3;
46
46
 
47
47
  /**
48
- * Phase 2 rerank defaults — ported from upstream.
48
+ * Phase 2 rerank defaults — ported from a reference implementation.
49
49
  *
50
50
  * Sources:
51
- * - `upstream reference` → lambda=0.7
52
- * - `upstream reference` → halfLifeDays=30
51
+ * - `reference` → lambda=0.7
52
+ * - `reference` → halfLifeDays=30
53
53
  *
54
54
  * Both features are opt-in (enabled=false by default) — the Phase 2
55
55
  * features are layered on top of hybrid search and don't change default
@@ -63,11 +63,11 @@ export const DEFAULT_RECALL_TRACKING_ENABLED = false;
63
63
  export const DEFAULT_CITATIONS_MODE = 'auto' as const;
64
64
 
65
65
  /**
66
- * Flush trigger margins (token counts) — aligned with upstream upstream.
66
+ * Flush trigger margins (token counts) — aligned with standard.
67
67
  *
68
68
  * Sources:
69
- * - `upstream reference` → softThreshold=4000
70
- * - `upstream reference` → reserveFloor=20000
69
+ * - `reference` → softThreshold=4000
70
+ * - `reference` → reserveFloor=20000
71
71
  */
72
72
  export const DEFAULT_FLUSH_SOFT_THRESHOLD_TOKENS = 4000;
73
73
  export const DEFAULT_FLUSH_RESERVE_FLOOR_TOKENS = 20000;
@@ -79,7 +79,7 @@ export const DEFAULT_MAX_APPENDS_PER_FLUSH = 20;
79
79
  * Hard cap on agentic loop iterations inside {@link runMemoryFlush}.
80
80
  *
81
81
  * Each iteration = one model.invoke() followed by execution of any
82
- * `memory_append` tool_calls it emits. Mirrors upstream's flush-plan
82
+ * `memory_append` tool_calls it emits. Mirrors the standard flush-plan
83
83
  * loop cap; 8 is enough for ~2–3 reflections of batched notes while
84
84
  * protecting against runaway cycles if the model refuses to stop.
85
85
  */
@@ -97,9 +97,9 @@ export const MEMORY_APPEND_TOOL_NAME = 'memory_append';
97
97
  * Mandatory-recall description — the single most load-bearing line in the
98
98
  * whole memory system. Do not soften, shorten, or reword without an eval run.
99
99
  *
100
- * Ported VERBATIM from upstream `extensions/memory-core/src/tools.ts:186`.
100
+ * Ported VERBATIM from a reference implementation `extensions/memory-core/src/tools.ts:186`.
101
101
  * The wiki/corpus clause is retained even though Phase 1 doesn't ship
102
- * compiled-wiki supplements — keeping the string identical means upstream's
102
+ * compiled-wiki supplements — keeping the string identical means the standard
103
103
  * eval corpora remain drop-in valid.
104
104
  */
105
105
  export const MEMORY_SEARCH_DESCRIPTION =
@@ -111,7 +111,7 @@ export const MEMORY_SEARCH_DESCRIPTION =
111
111
  'unavailable and should be surfaced to the user.';
112
112
 
113
113
  /**
114
- * Ported VERBATIM from upstream `extensions/memory-core/src/tools.ts:322`.
114
+ * Ported VERBATIM from a reference implementation `extensions/memory-core/src/tools.ts:322`.
115
115
  */
116
116
  export const MEMORY_GET_DESCRIPTION =
117
117
  'Safe snippet read from MEMORY.md or memory/*.md with optional from/lines; ' +
@@ -122,7 +122,7 @@ export const MEMORY_GET_DESCRIPTION =
122
122
  * `memory_append` tool description.
123
123
  *
124
124
  * Phase 1 historically wrote to a single date-keyed file
125
- * (`memory/YYYY-MM-DD.md`), ported verbatim from upstream. That scheme
125
+ * (`memory/YYYY-MM-DD.md`), ported verbatim from a reference implementation. That scheme
126
126
  * is now replaced by an 8-path canonical whitelist — see
127
127
  * {@link ./paths.MEMORY_ALL_PATHS}. The tool description no longer
128
128
  * names a specific file; the flush-turn prompt renders the full rubric
@@ -137,7 +137,7 @@ export const MEMORY_APPEND_DESCRIPTION =
137
137
 
138
138
  /**
139
139
  * Reply token that signals the flush turn produced no user-visible output.
140
- * Ported VERBATIM from upstream `src/auto-reply/tokens.ts:4`.
140
+ * Ported VERBATIM from a reference implementation `src/auto-reply/tokens.ts:4`.
141
141
  */
142
142
  export const SILENT_REPLY_TOKEN = 'NO_REPLY';
143
143
 
package/src/memory/mmr.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * Maximal Marginal Relevance (MMR) re-ranking — Phase 2.
3
3
  *
4
- * Ported from upstream `extensions/memory-core/src/memory/mmr.ts` with
4
+ * Ported from a reference implementation `extensions/memory-core/src/memory/mmr.ts` with
5
5
  * minor adaptation for our `MemoryEntry` shape (content vs snippet, id vs
6
6
  * path+startLine). Behavior is identical: normalize scores, iteratively
7
7
  * pick the item that maximizes `λ * relevance - (1-λ) * max_similarity`
@@ -11,9 +11,9 @@
11
11
  */
12
12
 
13
13
  export interface MMRConfig {
14
- /** Opt-in. Upstream default is false. */
14
+ /** Opt-in. Default is false. */
15
15
  enabled: boolean;
16
- /** 0 = max diversity, 1 = max relevance. Upstream default 0.7. */
16
+ /** 0 = max diversity, 1 = max relevance. Default 0.7. */
17
17
  lambda: number;
18
18
  }
19
19
 
@@ -8,7 +8,7 @@
8
8
  *
9
9
  * ## Why a whitelist?
10
10
  *
11
- * Earlier upstream-faithful designs used date-keyed files
11
+ * Earlier historical designs used date-keyed files
12
12
  * (`memory/YYYY-MM-DD.md`), which have three problems for a persistent
13
13
  * multi-user agent:
14
14
  *
@@ -1,9 +1,9 @@
1
1
  /**
2
2
  * Recall tracking — Phase 2.
3
3
  *
4
- * Lightweight adaptation of upstream
4
+ * Lightweight adaptation of an external recall-tracking module
5
5
  * `extensions/memory-core/src/short-term-promotion.ts::recordShortTermRecalls`.
6
- * Upstream stores recalls in a JSON file under `memory/.dreams/`; we store
6
+ * The reference implementation stores recalls in a JSON file under `memory/.dreams/`; we store
7
7
  * them in a Postgres table `agent_memory_recalls`. Schema captures what the
8
8
  * future Phase 3 dreaming/promotion algorithm will need:
9
9
  * - which memory row was surfaced (`memory_id`)
@@ -90,7 +90,7 @@ export class PgvectorRecallTracker implements RecallTracker {
90
90
  const bucket = dayBucket(nowMs);
91
91
 
92
92
  // [recall-tracking] debug: upsert one row per (agent, memory, query, day)
93
- // Upstream dedupes per-day per-query so repeated searches don't inflate counts.
93
+ // The reference implementation dedupes per-day per-query so repeated searches don't inflate counts.
94
94
  const values: string[] = [];
95
95
  const args: unknown[] = [];
96
96
  let i = 1;
@@ -1,14 +1,14 @@
1
1
  /**
2
2
  * Temporal decay — Phase 2.
3
3
  *
4
- * Ported from upstream `extensions/memory-core/src/memory/temporal-decay.ts`.
4
+ * Ported from a reference implementation `extensions/memory-core/src/memory/temporal-decay.ts`.
5
5
  * Ages dated memory files (`memory/YYYY-MM-DD.md`) using exponential decay
6
6
  * `multiplier = exp(-ln(2) / halfLifeDays * ageInDays)`. At half-life, the
7
7
  * score is exactly halved.
8
8
  *
9
9
  * Evergreen files (MEMORY.md, memory/topics.md, any non-dated file inside
10
10
  * memory/) do NOT decay — they represent durable knowledge and should stay
11
- * hot regardless of age. This mirrors upstream's `isEvergreenMemoryPath`.
11
+ * hot regardless of age. This mirrors the standard `isEvergreenMemoryPath`.
12
12
  *
13
13
  * Since our pgvector rows carry `createdAt`, we don't need filesystem stat
14
14
  * fallback — the row timestamp is authoritative for any file without a