@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.
- package/README.md +62 -0
- package/dist/cjs/agents/AgentContext.cjs +274 -67
- package/dist/cjs/agents/AgentContext.cjs.map +1 -1
- package/dist/cjs/common/enum.cjs +44 -13
- package/dist/cjs/common/enum.cjs.map +1 -1
- package/dist/cjs/graphs/Graph.cjs +182 -5
- package/dist/cjs/graphs/Graph.cjs.map +1 -1
- package/dist/cjs/graphs/MultiAgentGraph.cjs +152 -1167
- package/dist/cjs/graphs/MultiAgentGraph.cjs.map +1 -1
- package/dist/cjs/graphs/phases/memoryFlushPhase.cjs +1 -1
- package/dist/cjs/graphs/phases/memoryFlushPhase.cjs.map +1 -1
- package/dist/cjs/hooks/HookRegistry.cjs +162 -0
- package/dist/cjs/hooks/HookRegistry.cjs.map +1 -0
- package/dist/cjs/hooks/executeHooks.cjs +276 -0
- package/dist/cjs/hooks/executeHooks.cjs.map +1 -0
- package/dist/cjs/hooks/matchers.cjs +256 -0
- package/dist/cjs/hooks/matchers.cjs.map +1 -0
- package/dist/cjs/hooks/types.cjs +27 -0
- package/dist/cjs/hooks/types.cjs.map +1 -0
- package/dist/cjs/langchain/google-common.cjs +3 -0
- package/dist/cjs/langchain/google-common.cjs.map +1 -0
- package/dist/cjs/langchain/index.cjs +86 -0
- package/dist/cjs/langchain/index.cjs.map +1 -0
- package/dist/cjs/langchain/language_models/chat_models.cjs +3 -0
- package/dist/cjs/langchain/language_models/chat_models.cjs.map +1 -0
- package/dist/cjs/langchain/messages/tool.cjs +3 -0
- package/dist/cjs/langchain/messages/tool.cjs.map +1 -0
- package/dist/cjs/langchain/messages.cjs +51 -0
- package/dist/cjs/langchain/messages.cjs.map +1 -0
- package/dist/cjs/langchain/openai.cjs +3 -0
- package/dist/cjs/langchain/openai.cjs.map +1 -0
- package/dist/cjs/langchain/prompts.cjs +11 -0
- package/dist/cjs/langchain/prompts.cjs.map +1 -0
- package/dist/cjs/langchain/runnables.cjs +19 -0
- package/dist/cjs/langchain/runnables.cjs.map +1 -0
- package/dist/cjs/langchain/tools.cjs +23 -0
- package/dist/cjs/langchain/tools.cjs.map +1 -0
- package/dist/cjs/langchain/utils/env.cjs +11 -0
- package/dist/cjs/langchain/utils/env.cjs.map +1 -0
- package/dist/cjs/llm/anthropic/utils/message_inputs.cjs +5 -1
- package/dist/cjs/llm/anthropic/utils/message_inputs.cjs.map +1 -1
- package/dist/cjs/llm/bedrock/cacheSupport.cjs +55 -0
- package/dist/cjs/llm/bedrock/cacheSupport.cjs.map +1 -0
- package/dist/cjs/llm/bedrock/index.cjs +61 -33
- package/dist/cjs/llm/bedrock/index.cjs.map +1 -1
- package/dist/cjs/llm/openai/index.cjs +1 -4
- package/dist/cjs/llm/openai/index.cjs.map +1 -1
- package/dist/cjs/llm/openai/utils/index.cjs +27 -10
- package/dist/cjs/llm/openai/utils/index.cjs.map +1 -1
- package/dist/cjs/main.cjs +178 -127
- package/dist/cjs/main.cjs.map +1 -1
- package/dist/cjs/memory/citations.cjs +4 -4
- package/dist/cjs/memory/citations.cjs.map +1 -1
- package/dist/cjs/memory/constants.cjs +17 -17
- package/dist/cjs/memory/constants.cjs.map +1 -1
- package/dist/cjs/memory/mmr.cjs +1 -1
- package/dist/cjs/memory/mmr.cjs.map +1 -1
- package/dist/cjs/memory/paths.cjs +1 -1
- package/dist/cjs/memory/paths.cjs.map +1 -1
- package/dist/cjs/memory/recallTracking.cjs +3 -3
- package/dist/cjs/memory/recallTracking.cjs.map +1 -1
- package/dist/cjs/memory/temporalDecay.cjs +2 -2
- package/dist/cjs/memory/temporalDecay.cjs.map +1 -1
- package/dist/cjs/messages/cache.cjs +89 -0
- package/dist/cjs/messages/cache.cjs.map +1 -1
- package/dist/cjs/messages/contextPruning.cjs +156 -0
- package/dist/cjs/messages/contextPruning.cjs.map +1 -0
- package/dist/cjs/messages/contextPruningSettings.cjs +53 -0
- package/dist/cjs/messages/contextPruningSettings.cjs.map +1 -0
- package/dist/cjs/messages/format.cjs +144 -20
- package/dist/cjs/messages/format.cjs.map +1 -1
- package/dist/cjs/messages/prune.cjs +505 -4
- package/dist/cjs/messages/prune.cjs.map +1 -1
- package/dist/cjs/run.cjs +141 -1
- package/dist/cjs/run.cjs.map +1 -1
- package/dist/cjs/tools/BashExecutor.cjs +235 -0
- package/dist/cjs/tools/BashExecutor.cjs.map +1 -0
- package/dist/cjs/tools/BashProgrammaticToolCalling.cjs +297 -0
- package/dist/cjs/tools/BashProgrammaticToolCalling.cjs.map +1 -0
- package/dist/cjs/tools/CodeExecutor.cjs +45 -47
- package/dist/cjs/tools/CodeExecutor.cjs.map +1 -1
- package/dist/cjs/tools/ProgrammaticToolCalling.cjs +16 -11
- package/dist/cjs/tools/ProgrammaticToolCalling.cjs.map +1 -1
- package/dist/cjs/tools/ReadFile.cjs +44 -0
- package/dist/cjs/tools/ReadFile.cjs.map +1 -0
- package/dist/cjs/tools/SkillTool.cjs +51 -0
- package/dist/cjs/tools/SkillTool.cjs.map +1 -0
- package/dist/cjs/tools/SubagentTool.cjs +93 -0
- package/dist/cjs/tools/SubagentTool.cjs.map +1 -0
- package/dist/cjs/tools/ToolNode.cjs +450 -24
- package/dist/cjs/tools/ToolNode.cjs.map +1 -1
- package/dist/cjs/tools/memory/memoryAppendTool.cjs +1 -1
- package/dist/cjs/tools/memory/memoryAppendTool.cjs.map +1 -1
- package/dist/cjs/tools/memory/memoryGetTool.cjs +2 -2
- package/dist/cjs/tools/memory/memoryGetTool.cjs.map +1 -1
- package/dist/cjs/tools/memory/memorySearchTool.cjs +3 -3
- package/dist/cjs/tools/memory/memorySearchTool.cjs.map +1 -1
- package/dist/cjs/tools/memory/shared.cjs +1 -1
- package/dist/cjs/tools/memory/shared.cjs.map +1 -1
- package/dist/cjs/tools/search/search.cjs +11 -3
- package/dist/cjs/tools/search/search.cjs.map +1 -1
- package/dist/cjs/tools/search/tavily-scraper.cjs +189 -0
- package/dist/cjs/tools/search/tavily-scraper.cjs.map +1 -0
- package/dist/cjs/tools/search/tavily-search.cjs +372 -0
- package/dist/cjs/tools/search/tavily-search.cjs.map +1 -0
- package/dist/cjs/tools/search/tool.cjs +28 -4
- package/dist/cjs/tools/search/tool.cjs.map +1 -1
- package/dist/cjs/tools/search/utils.cjs +10 -3
- package/dist/cjs/tools/search/utils.cjs.map +1 -1
- package/dist/cjs/tools/skillCatalog.cjs +84 -0
- package/dist/cjs/tools/skillCatalog.cjs.map +1 -0
- package/dist/cjs/tools/subagent/SubagentExecutor.cjs +512 -0
- package/dist/cjs/tools/subagent/SubagentExecutor.cjs.map +1 -0
- package/dist/cjs/tools/toolOutputReferences.cjs +670 -0
- package/dist/cjs/tools/toolOutputReferences.cjs.map +1 -0
- package/dist/cjs/types/agent-cache.cjs +54 -0
- package/dist/cjs/types/agent-cache.cjs.map +1 -0
- package/dist/cjs/types/graph.cjs.map +1 -1
- package/dist/cjs/utils/truncation.cjs +135 -0
- package/dist/cjs/utils/truncation.cjs.map +1 -0
- package/dist/esm/agents/AgentContext.mjs +274 -67
- package/dist/esm/agents/AgentContext.mjs.map +1 -1
- package/dist/esm/common/enum.mjs +44 -12
- package/dist/esm/common/enum.mjs.map +1 -1
- package/dist/esm/graphs/Graph.mjs +182 -5
- package/dist/esm/graphs/Graph.mjs.map +1 -1
- package/dist/esm/graphs/MultiAgentGraph.mjs +155 -1170
- package/dist/esm/graphs/MultiAgentGraph.mjs.map +1 -1
- package/dist/esm/graphs/phases/memoryFlushPhase.mjs +1 -1
- package/dist/esm/graphs/phases/memoryFlushPhase.mjs.map +1 -1
- package/dist/esm/hooks/HookRegistry.mjs +160 -0
- package/dist/esm/hooks/HookRegistry.mjs.map +1 -0
- package/dist/esm/hooks/executeHooks.mjs +273 -0
- package/dist/esm/hooks/executeHooks.mjs.map +1 -0
- package/dist/esm/hooks/matchers.mjs +251 -0
- package/dist/esm/hooks/matchers.mjs.map +1 -0
- package/dist/esm/hooks/types.mjs +25 -0
- package/dist/esm/hooks/types.mjs.map +1 -0
- package/dist/esm/langchain/google-common.mjs +2 -0
- package/dist/esm/langchain/google-common.mjs.map +1 -0
- package/dist/esm/langchain/index.mjs +5 -0
- package/dist/esm/langchain/language_models/chat_models.mjs +2 -0
- package/dist/esm/langchain/language_models/chat_models.mjs.map +1 -0
- package/dist/esm/langchain/messages/tool.mjs +2 -0
- package/dist/esm/langchain/messages/tool.mjs.map +1 -0
- package/dist/esm/langchain/messages.mjs +2 -0
- package/dist/esm/langchain/messages.mjs.map +1 -0
- package/dist/esm/langchain/openai.mjs +2 -0
- package/dist/esm/langchain/openai.mjs.map +1 -0
- package/dist/esm/langchain/prompts.mjs +2 -0
- package/dist/esm/langchain/prompts.mjs.map +1 -0
- package/dist/esm/langchain/runnables.mjs +2 -0
- package/dist/esm/langchain/runnables.mjs.map +1 -0
- package/dist/esm/langchain/tools.mjs +2 -0
- package/dist/esm/langchain/tools.mjs.map +1 -0
- package/dist/esm/langchain/utils/env.mjs +2 -0
- package/dist/esm/langchain/utils/env.mjs.map +1 -0
- package/dist/esm/llm/anthropic/utils/message_inputs.mjs +5 -1
- package/dist/esm/llm/anthropic/utils/message_inputs.mjs.map +1 -1
- package/dist/esm/llm/bedrock/cacheSupport.mjs +52 -0
- package/dist/esm/llm/bedrock/cacheSupport.mjs.map +1 -0
- package/dist/esm/llm/bedrock/index.mjs +61 -34
- package/dist/esm/llm/bedrock/index.mjs.map +1 -1
- package/dist/esm/llm/openai/index.mjs +1 -4
- package/dist/esm/llm/openai/index.mjs.map +1 -1
- package/dist/esm/llm/openai/utils/index.mjs +27 -10
- package/dist/esm/llm/openai/utils/index.mjs.map +1 -1
- package/dist/esm/main.mjs +21 -27
- package/dist/esm/main.mjs.map +1 -1
- package/dist/esm/memory/citations.mjs +4 -4
- package/dist/esm/memory/citations.mjs.map +1 -1
- package/dist/esm/memory/constants.mjs +17 -17
- package/dist/esm/memory/constants.mjs.map +1 -1
- package/dist/esm/memory/mmr.mjs +1 -1
- package/dist/esm/memory/mmr.mjs.map +1 -1
- package/dist/esm/memory/paths.mjs +1 -1
- package/dist/esm/memory/paths.mjs.map +1 -1
- package/dist/esm/memory/recallTracking.mjs +3 -3
- package/dist/esm/memory/recallTracking.mjs.map +1 -1
- package/dist/esm/memory/temporalDecay.mjs +2 -2
- package/dist/esm/memory/temporalDecay.mjs.map +1 -1
- package/dist/esm/messages/cache.mjs +89 -0
- package/dist/esm/messages/cache.mjs.map +1 -1
- package/dist/esm/messages/contextPruning.mjs +154 -0
- package/dist/esm/messages/contextPruning.mjs.map +1 -0
- package/dist/esm/messages/contextPruningSettings.mjs +50 -0
- package/dist/esm/messages/contextPruningSettings.mjs.map +1 -0
- package/dist/esm/messages/format.mjs +136 -12
- package/dist/esm/messages/format.mjs.map +1 -1
- package/dist/esm/messages/prune.mjs +504 -7
- package/dist/esm/messages/prune.mjs.map +1 -1
- package/dist/esm/run.mjs +141 -1
- package/dist/esm/run.mjs.map +1 -1
- package/dist/esm/tools/BashExecutor.mjs +227 -0
- package/dist/esm/tools/BashExecutor.mjs.map +1 -0
- package/dist/esm/tools/BashProgrammaticToolCalling.mjs +288 -0
- package/dist/esm/tools/BashProgrammaticToolCalling.mjs.map +1 -0
- package/dist/esm/tools/CodeExecutor.mjs +45 -48
- package/dist/esm/tools/CodeExecutor.mjs.map +1 -1
- package/dist/esm/tools/ProgrammaticToolCalling.mjs +17 -12
- package/dist/esm/tools/ProgrammaticToolCalling.mjs.map +1 -1
- package/dist/esm/tools/ReadFile.mjs +39 -0
- package/dist/esm/tools/ReadFile.mjs.map +1 -0
- package/dist/esm/tools/SkillTool.mjs +46 -0
- package/dist/esm/tools/SkillTool.mjs.map +1 -0
- package/dist/esm/tools/SubagentTool.mjs +86 -0
- package/dist/esm/tools/SubagentTool.mjs.map +1 -0
- package/dist/esm/tools/ToolNode.mjs +452 -26
- package/dist/esm/tools/ToolNode.mjs.map +1 -1
- package/dist/esm/tools/memory/memoryAppendTool.mjs +1 -1
- package/dist/esm/tools/memory/memoryAppendTool.mjs.map +1 -1
- package/dist/esm/tools/memory/memoryGetTool.mjs +2 -2
- package/dist/esm/tools/memory/memoryGetTool.mjs.map +1 -1
- package/dist/esm/tools/memory/memorySearchTool.mjs +3 -3
- package/dist/esm/tools/memory/memorySearchTool.mjs.map +1 -1
- package/dist/esm/tools/memory/shared.mjs +1 -1
- package/dist/esm/tools/memory/shared.mjs.map +1 -1
- package/dist/esm/tools/search/search.mjs +11 -3
- package/dist/esm/tools/search/search.mjs.map +1 -1
- package/dist/esm/tools/search/tavily-scraper.mjs +186 -0
- package/dist/esm/tools/search/tavily-scraper.mjs.map +1 -0
- package/dist/esm/tools/search/tavily-search.mjs +370 -0
- package/dist/esm/tools/search/tavily-search.mjs.map +1 -0
- package/dist/esm/tools/search/tool.mjs +28 -4
- package/dist/esm/tools/search/tool.mjs.map +1 -1
- package/dist/esm/tools/search/utils.mjs +10 -3
- package/dist/esm/tools/search/utils.mjs.map +1 -1
- package/dist/esm/tools/skillCatalog.mjs +82 -0
- package/dist/esm/tools/skillCatalog.mjs.map +1 -0
- package/dist/esm/tools/subagent/SubagentExecutor.mjs +506 -0
- package/dist/esm/tools/subagent/SubagentExecutor.mjs.map +1 -0
- package/dist/esm/tools/toolOutputReferences.mjs +662 -0
- package/dist/esm/tools/toolOutputReferences.mjs.map +1 -0
- package/dist/esm/types/agent-cache.mjs +52 -0
- package/dist/esm/types/agent-cache.mjs.map +1 -0
- package/dist/esm/types/graph.mjs.map +1 -1
- package/dist/esm/utils/truncation.mjs +128 -0
- package/dist/esm/utils/truncation.mjs.map +1 -0
- package/dist/types/agents/AgentContext.d.ts +101 -8
- package/dist/types/common/enum.d.ts +39 -12
- package/dist/types/common/index.d.ts +0 -1
- package/dist/types/graphs/Graph.d.ts +43 -0
- package/dist/types/graphs/MultiAgentGraph.d.ts +26 -150
- package/dist/types/graphs/index.d.ts +0 -1
- package/dist/types/graphs/phases/memoryFlushPhase.d.ts +2 -2
- package/dist/types/hooks/HookRegistry.d.ts +56 -0
- package/dist/types/hooks/executeHooks.d.ts +79 -0
- package/dist/types/hooks/index.d.ts +6 -0
- package/dist/types/hooks/matchers.d.ts +95 -0
- package/dist/types/hooks/types.d.ts +320 -0
- package/dist/types/index.d.ts +9 -9
- package/dist/types/langchain/google-common.d.ts +1 -0
- package/dist/types/langchain/index.d.ts +8 -0
- package/dist/types/langchain/language_models/chat_models.d.ts +1 -0
- package/dist/types/langchain/messages/tool.d.ts +1 -0
- package/dist/types/langchain/messages.d.ts +2 -0
- package/dist/types/langchain/openai.d.ts +1 -0
- package/dist/types/langchain/prompts.d.ts +1 -0
- package/dist/types/langchain/runnables.d.ts +2 -0
- package/dist/types/langchain/tools.d.ts +2 -0
- package/dist/types/langchain/utils/env.d.ts +1 -0
- package/dist/types/llm/bedrock/cacheSupport.d.ts +35 -0
- package/dist/types/llm/bedrock/index.d.ts +54 -1
- package/dist/types/llm/openai/index.d.ts +1 -1
- package/dist/types/memory/citations.d.ts +4 -4
- package/dist/types/memory/constants.d.ts +17 -17
- package/dist/types/memory/mmr.d.ts +3 -3
- package/dist/types/memory/paths.d.ts +1 -1
- package/dist/types/memory/temporalDecay.d.ts +2 -2
- package/dist/types/memory/types.d.ts +3 -3
- package/dist/types/messages/contextPruning.d.ts +42 -0
- package/dist/types/messages/contextPruningSettings.d.ts +44 -0
- package/dist/types/messages/format.d.ts +9 -1
- package/dist/types/messages/index.d.ts +2 -0
- package/dist/types/messages/prune.d.ts +91 -1
- package/dist/types/run.d.ts +2 -0
- package/dist/types/tools/BashExecutor.d.ts +76 -0
- package/dist/types/tools/BashProgrammaticToolCalling.d.ts +72 -0
- package/dist/types/tools/CodeExecutor.d.ts +8 -26
- package/dist/types/tools/ReadFile.d.ts +28 -0
- package/dist/types/tools/SkillTool.d.ts +40 -0
- package/dist/types/tools/SubagentTool.d.ts +36 -0
- package/dist/types/tools/ToolNode.d.ts +77 -5
- package/dist/types/tools/memory/shared.d.ts +1 -1
- package/dist/types/tools/search/tavily-scraper.d.ts +19 -0
- package/dist/types/tools/search/tavily-search.d.ts +4 -0
- package/dist/types/tools/search/types.d.ts +99 -5
- package/dist/types/tools/search/utils.d.ts +2 -2
- package/dist/types/tools/skillCatalog.d.ts +19 -0
- package/dist/types/tools/subagent/SubagentExecutor.d.ts +137 -0
- package/dist/types/tools/subagent/index.d.ts +2 -0
- package/dist/types/tools/subagent/types.d.ts +84 -0
- package/dist/types/tools/toolOutputReferences.d.ts +236 -0
- package/dist/types/types/agent-cache.d.ts +71 -0
- package/dist/types/types/graph.d.ts +163 -22
- package/dist/types/types/index.d.ts +3 -0
- package/dist/types/types/messages.d.ts +26 -0
- package/dist/types/types/run.d.ts +22 -0
- package/dist/types/types/skill.d.ts +9 -0
- package/dist/types/types/tools.d.ts +111 -0
- package/dist/types/utils/index.d.ts +1 -3
- package/dist/types/utils/truncation.d.ts +70 -0
- package/package.json +57 -17
- package/src/agents/AgentContext.ts +321 -78
- package/src/agents/__tests__/AgentContext.cacheTtl.live.test.ts +259 -0
- package/src/agents/__tests__/AgentContext.crossAgentTier1.live.test.ts +266 -0
- package/src/agents/__tests__/AgentContext.crossUserCache.live.test.ts +342 -0
- package/src/agents/__tests__/AgentContext.test.ts +632 -0
- package/src/common/__tests__/enum.test.ts +7 -17
- package/src/common/enum.ts +43 -12
- package/src/common/index.ts +0 -1
- package/src/graphs/Graph.ts +222 -2
- package/src/graphs/MultiAgentGraph.ts +154 -1466
- package/src/graphs/__tests__/MultiAgentGraph.test.ts +91 -0
- package/src/graphs/gapFeatures.test.ts +1 -1
- package/src/graphs/index.ts +0 -1
- package/src/graphs/phases/__tests__/memoryFlushPhase.test.ts +1 -1
- package/src/graphs/phases/memoryFlushPhase.ts +2 -2
- package/src/hooks/HookRegistry.ts +208 -0
- package/src/hooks/__tests__/HookRegistry.test.ts +190 -0
- package/src/hooks/__tests__/compactHooks.test.ts +214 -0
- package/src/hooks/__tests__/executeHooks.test.ts +1013 -0
- package/src/hooks/__tests__/integration.test.ts +337 -0
- package/src/hooks/__tests__/matchers.test.ts +238 -0
- package/src/hooks/__tests__/toolHooks.test.ts +665 -0
- package/src/hooks/executeHooks.ts +375 -0
- package/src/hooks/index.ts +57 -0
- package/src/hooks/matchers.ts +280 -0
- package/src/hooks/types.ts +404 -0
- package/src/index.ts +15 -24
- package/src/langchain/google-common.ts +1 -0
- package/src/langchain/index.ts +8 -0
- package/src/langchain/language_models/chat_models.ts +1 -0
- package/src/langchain/messages/tool.ts +5 -0
- package/src/langchain/messages.ts +21 -0
- package/src/langchain/openai.ts +1 -0
- package/src/langchain/prompts.ts +1 -0
- package/src/langchain/runnables.ts +7 -0
- package/src/langchain/tools.ts +8 -0
- package/src/langchain/utils/env.ts +1 -0
- package/src/llm/anthropic/utils/message_inputs.ts +10 -1
- package/src/llm/anthropic/utils/server-tool-inputs.test.ts +436 -0
- package/src/llm/bedrock/__tests__/bedrock-caching.test.ts +166 -18
- package/src/llm/bedrock/cacheSupport.test.ts +99 -0
- package/src/llm/bedrock/cacheSupport.ts +53 -0
- package/src/llm/bedrock/index.ts +116 -41
- package/src/llm/openai/index.ts +2 -2
- package/src/llm/openai/utils/index.ts +31 -14
- package/src/memory/citations.ts +4 -4
- package/src/memory/constants.ts +17 -17
- package/src/memory/mmr.ts +3 -3
- package/src/memory/paths.ts +1 -1
- package/src/memory/recallTracking.ts +3 -3
- package/src/memory/temporalDecay.ts +2 -2
- package/src/memory/types.ts +3 -3
- package/src/messages/__tests__/contextPruning.test.ts +228 -0
- package/src/messages/cache.test.ts +62 -24
- package/src/messages/cache.ts +112 -0
- package/src/messages/contextPruning.ts +191 -0
- package/src/messages/contextPruningSettings.ts +90 -0
- package/src/messages/ensureThinkingBlock.test.ts +1 -1
- package/src/messages/format.ts +164 -12
- package/src/messages/formatAgentMessages.skills.test.ts +413 -0
- package/src/messages/formatAgentMessages.test.ts +1 -1
- package/src/messages/index.ts +2 -0
- package/src/messages/prune.ts +661 -4
- package/src/run.ts +155 -1
- package/src/scripts/multi-agent-chain.ts +2 -2
- package/src/scripts/multi-agent-document-review-chain.ts +2 -2
- package/src/scripts/multi-agent-hybrid-flow.ts +4 -4
- package/src/scripts/multi-agent-parallel.ts +3 -3
- package/src/scripts/multi-agent-sequence.ts +3 -3
- package/src/scripts/multi-agent-subagent.ts +246 -0
- package/src/scripts/multi-agent-supervisor.ts +5 -5
- package/src/scripts/poc-multi-agent-comprehensive.ts +8 -8
- package/src/scripts/sequential-full-metadata-test.ts +2 -2
- package/src/scripts/subagent-event-driven-debug.ts +190 -0
- package/src/scripts/subagent-tools-debug.ts +160 -0
- package/src/scripts/test-custom-prompt-key.ts +3 -3
- package/src/scripts/test-handoff-input.ts +1 -1
- package/src/scripts/test-handoff-steering.ts +3 -3
- package/src/scripts/test-multi-agent-list-handoff.ts +1 -1
- package/src/scripts/test-parallel-agent-labeling.ts +3 -3
- package/src/scripts/test-parallel-handoffs.ts +2 -2
- package/src/scripts/test-thinking-handoff-bedrock.ts +1 -1
- package/src/scripts/test-thinking-handoff.ts +1 -1
- package/src/scripts/test-thinking-to-thinking-handoff-bedrock.ts +1 -1
- package/src/scripts/test-tool-before-handoff-role-order.ts +1 -1
- package/src/scripts/test-tools-before-handoff.ts +1 -1
- package/src/specs/agent-handoffs.test.ts +26 -483
- package/src/specs/anthropic.simple.test.ts +61 -0
- package/src/specs/multi-agent-summarization.test.ts +396 -0
- package/src/specs/prune.orphans.test.ts +248 -0
- package/src/specs/prune.test.ts +104 -16
- package/src/specs/thinking-handoff.test.ts +19 -19
- package/src/tools/BashExecutor.ts +281 -0
- package/src/tools/BashProgrammaticToolCalling.ts +397 -0
- package/src/tools/CodeExecutor.ts +63 -54
- package/src/tools/ProgrammaticToolCalling.ts +29 -14
- package/src/tools/ReadFile.ts +39 -0
- package/src/tools/SkillTool.ts +46 -0
- package/src/tools/SubagentTool.ts +100 -0
- package/src/tools/ToolNode.ts +548 -26
- package/src/tools/__tests__/BashExecutor.test.ts +49 -0
- package/src/tools/__tests__/CodeExecutor.test.ts +37 -36
- package/src/tools/__tests__/ProgrammaticToolCalling.test.ts +60 -0
- package/src/tools/__tests__/ReadFile.test.ts +44 -0
- package/src/tools/__tests__/SkillTool.test.ts +442 -0
- package/src/tools/__tests__/SubagentExecutor.test.ts +1148 -0
- package/src/tools/__tests__/SubagentTool.test.ts +149 -0
- package/src/tools/__tests__/ToolNode.outputReferences.test.ts +1438 -0
- package/src/tools/__tests__/annotateMessagesForLLM.test.ts +479 -0
- package/src/tools/__tests__/skillCatalog.test.ts +161 -0
- package/src/tools/__tests__/subagentHooks.test.ts +210 -0
- package/src/tools/__tests__/toolOutputReferences.test.ts +415 -0
- package/src/tools/memory/memoryAppendTool.ts +1 -1
- package/src/tools/memory/memoryGetTool.ts +2 -2
- package/src/tools/memory/memorySearchTool.ts +3 -3
- package/src/tools/memory/shared.ts +1 -1
- package/src/tools/search/search.ts +12 -2
- package/src/tools/search/tavily-scraper.ts +235 -0
- package/src/tools/search/tavily-search.ts +424 -0
- package/src/tools/search/tavily.test.ts +965 -0
- package/src/tools/search/tool.ts +36 -2
- package/src/tools/search/types.ts +133 -8
- package/src/tools/search/utils.ts +13 -5
- package/src/tools/skillCatalog.ts +126 -0
- package/src/tools/subagent/SubagentExecutor.ts +676 -0
- package/src/tools/subagent/index.ts +13 -0
- package/src/tools/subagent/types.test.ts +70 -0
- package/src/tools/subagent/types.ts +115 -0
- package/src/tools/toolOutputReferences.ts +825 -0
- package/src/types/agent-cache.ts +74 -0
- package/src/types/graph.ts +172 -20
- package/src/types/index.ts +3 -0
- package/src/types/messages.ts +27 -0
- package/src/types/run.ts +22 -0
- package/src/types/skill.ts +11 -0
- package/src/types/tools.ts +118 -0
- package/src/utils/__tests__/truncation.test.ts +66 -0
- package/src/utils/index.ts +1 -3
- package/src/utils/truncation.ts +154 -0
- package/dist/cjs/common/spawnPath.cjs +0 -104
- package/dist/cjs/common/spawnPath.cjs.map +0 -1
- package/dist/cjs/content/ArtifactStore.cjs +0 -579
- package/dist/cjs/content/ArtifactStore.cjs.map +0 -1
- package/dist/cjs/content/ContentStore.cjs +0 -638
- package/dist/cjs/content/ContentStore.cjs.map +0 -1
- package/dist/cjs/content/contentAnalyzer.cjs +0 -91
- package/dist/cjs/content/contentAnalyzer.cjs.map +0 -1
- package/dist/cjs/content/index.cjs +0 -20
- package/dist/cjs/content/index.cjs.map +0 -1
- package/dist/cjs/content/mcpAutoCache.cjs +0 -115
- package/dist/cjs/content/mcpAutoCache.cjs.map +0 -1
- package/dist/cjs/graphs/HandoffRegistry.cjs +0 -143
- package/dist/cjs/graphs/HandoffRegistry.cjs.map +0 -1
- package/dist/cjs/providers/a2a/A2ACapabilityProvider.cjs +0 -288
- package/dist/cjs/providers/a2a/A2ACapabilityProvider.cjs.map +0 -1
- package/dist/cjs/providers/a2a/client.cjs +0 -92
- package/dist/cjs/providers/a2a/client.cjs.map +0 -1
- package/dist/cjs/providers/a2a/config.cjs +0 -38
- package/dist/cjs/providers/a2a/config.cjs.map +0 -1
- package/dist/cjs/providers/capabilityNaming.cjs +0 -43
- package/dist/cjs/providers/capabilityNaming.cjs.map +0 -1
- package/dist/cjs/providers/mcp/MCPCapabilityProvider.cjs +0 -244
- package/dist/cjs/providers/mcp/MCPCapabilityProvider.cjs.map +0 -1
- package/dist/cjs/providers/mcp/config.cjs +0 -42
- package/dist/cjs/providers/mcp/config.cjs.map +0 -1
- package/dist/cjs/providers/mcp/transport.cjs +0 -65
- package/dist/cjs/providers/mcp/transport.cjs.map +0 -1
- package/dist/cjs/providers/tools-server/ToolsServerCapabilityProvider.cjs +0 -128
- package/dist/cjs/providers/tools-server/ToolsServerCapabilityProvider.cjs.map +0 -1
- package/dist/cjs/providers/types.cjs +0 -51
- package/dist/cjs/providers/types.cjs.map +0 -1
- package/dist/cjs/tools/artifacts/schema.cjs +0 -86
- package/dist/cjs/tools/artifacts/schema.cjs.map +0 -1
- package/dist/cjs/tools/artifacts/tool.cjs +0 -219
- package/dist/cjs/tools/artifacts/tool.cjs.map +0 -1
- package/dist/cjs/tools/fileSearch/formatter.cjs +0 -93
- package/dist/cjs/tools/fileSearch/formatter.cjs.map +0 -1
- package/dist/cjs/tools/fileSearch/ragClient.cjs +0 -102
- package/dist/cjs/tools/fileSearch/ragClient.cjs.map +0 -1
- package/dist/cjs/tools/fileSearch/schema.cjs +0 -18
- package/dist/cjs/tools/fileSearch/schema.cjs.map +0 -1
- package/dist/cjs/tools/fileSearch/tool.cjs +0 -155
- package/dist/cjs/tools/fileSearch/tool.cjs.map +0 -1
- package/dist/cjs/tools/proxyTool.cjs +0 -102
- package/dist/cjs/tools/proxyTool.cjs.map +0 -1
- package/dist/cjs/utils/childAgentContext.cjs +0 -242
- package/dist/cjs/utils/childAgentContext.cjs.map +0 -1
- package/dist/cjs/utils/credentials.cjs +0 -142
- package/dist/cjs/utils/credentials.cjs.map +0 -1
- package/dist/cjs/utils/httpClient.cjs +0 -74
- package/dist/cjs/utils/httpClient.cjs.map +0 -1
- package/dist/cjs/utils/toolManifest.cjs +0 -100
- package/dist/cjs/utils/toolManifest.cjs.map +0 -1
- package/dist/esm/common/spawnPath.mjs +0 -95
- package/dist/esm/common/spawnPath.mjs.map +0 -1
- package/dist/esm/content/ArtifactStore.mjs +0 -576
- package/dist/esm/content/ArtifactStore.mjs.map +0 -1
- package/dist/esm/content/ContentStore.mjs +0 -635
- package/dist/esm/content/ContentStore.mjs.map +0 -1
- package/dist/esm/content/contentAnalyzer.mjs +0 -87
- package/dist/esm/content/contentAnalyzer.mjs.map +0 -1
- package/dist/esm/content/index.mjs +0 -5
- package/dist/esm/content/mcpAutoCache.mjs +0 -111
- package/dist/esm/content/mcpAutoCache.mjs.map +0 -1
- package/dist/esm/graphs/HandoffRegistry.mjs +0 -141
- package/dist/esm/graphs/HandoffRegistry.mjs.map +0 -1
- package/dist/esm/providers/a2a/A2ACapabilityProvider.mjs +0 -281
- package/dist/esm/providers/a2a/A2ACapabilityProvider.mjs.map +0 -1
- package/dist/esm/providers/a2a/client.mjs +0 -88
- package/dist/esm/providers/a2a/client.mjs.map +0 -1
- package/dist/esm/providers/a2a/config.mjs +0 -35
- package/dist/esm/providers/a2a/config.mjs.map +0 -1
- package/dist/esm/providers/capabilityNaming.mjs +0 -39
- package/dist/esm/providers/capabilityNaming.mjs.map +0 -1
- package/dist/esm/providers/mcp/MCPCapabilityProvider.mjs +0 -240
- package/dist/esm/providers/mcp/MCPCapabilityProvider.mjs.map +0 -1
- package/dist/esm/providers/mcp/config.mjs +0 -39
- package/dist/esm/providers/mcp/config.mjs.map +0 -1
- package/dist/esm/providers/mcp/transport.mjs +0 -63
- package/dist/esm/providers/mcp/transport.mjs.map +0 -1
- package/dist/esm/providers/tools-server/ToolsServerCapabilityProvider.mjs +0 -126
- package/dist/esm/providers/tools-server/ToolsServerCapabilityProvider.mjs.map +0 -1
- package/dist/esm/providers/types.mjs +0 -51
- package/dist/esm/providers/types.mjs.map +0 -1
- package/dist/esm/tools/artifacts/schema.mjs +0 -79
- package/dist/esm/tools/artifacts/schema.mjs.map +0 -1
- package/dist/esm/tools/artifacts/tool.mjs +0 -213
- package/dist/esm/tools/artifacts/tool.mjs.map +0 -1
- package/dist/esm/tools/fileSearch/formatter.mjs +0 -90
- package/dist/esm/tools/fileSearch/formatter.mjs.map +0 -1
- package/dist/esm/tools/fileSearch/ragClient.mjs +0 -98
- package/dist/esm/tools/fileSearch/ragClient.mjs.map +0 -1
- package/dist/esm/tools/fileSearch/schema.mjs +0 -15
- package/dist/esm/tools/fileSearch/schema.mjs.map +0 -1
- package/dist/esm/tools/fileSearch/tool.mjs +0 -152
- package/dist/esm/tools/fileSearch/tool.mjs.map +0 -1
- package/dist/esm/tools/proxyTool.mjs +0 -100
- package/dist/esm/tools/proxyTool.mjs.map +0 -1
- package/dist/esm/utils/childAgentContext.mjs +0 -237
- package/dist/esm/utils/childAgentContext.mjs.map +0 -1
- package/dist/esm/utils/credentials.mjs +0 -135
- package/dist/esm/utils/credentials.mjs.map +0 -1
- package/dist/esm/utils/httpClient.mjs +0 -70
- package/dist/esm/utils/httpClient.mjs.map +0 -1
- package/dist/esm/utils/toolManifest.mjs +0 -96
- package/dist/esm/utils/toolManifest.mjs.map +0 -1
- package/dist/types/common/spawnPath.d.ts +0 -59
- package/dist/types/content/ArtifactStore.d.ts +0 -223
- package/dist/types/content/ContentStore.d.ts +0 -140
- package/dist/types/content/contentAnalyzer.d.ts +0 -38
- package/dist/types/content/index.d.ts +0 -24
- package/dist/types/content/mcpAutoCache.d.ts +0 -89
- package/dist/types/content/types.d.ts +0 -75
- package/dist/types/graphs/HandoffRegistry.d.ts +0 -97
- package/dist/types/providers/a2a/A2ACapabilityProvider.d.ts +0 -89
- package/dist/types/providers/a2a/client.d.ts +0 -47
- package/dist/types/providers/a2a/config.d.ts +0 -18
- package/dist/types/providers/a2a/index.d.ts +0 -6
- package/dist/types/providers/a2a/types.d.ts +0 -173
- package/dist/types/providers/capabilityNaming.d.ts +0 -25
- package/dist/types/providers/index.d.ts +0 -12
- package/dist/types/providers/mcp/MCPCapabilityProvider.d.ts +0 -54
- package/dist/types/providers/mcp/config.d.ts +0 -20
- package/dist/types/providers/mcp/index.d.ts +0 -5
- package/dist/types/providers/mcp/transport.d.ts +0 -18
- package/dist/types/providers/mcp/types.d.ts +0 -112
- package/dist/types/providers/tools-server/ToolsServerCapabilityProvider.d.ts +0 -59
- package/dist/types/providers/tools-server/index.d.ts +0 -1
- package/dist/types/providers/types.d.ts +0 -184
- package/dist/types/tools/artifacts/index.d.ts +0 -3
- package/dist/types/tools/artifacts/schema.d.ts +0 -63
- package/dist/types/tools/artifacts/tool.d.ts +0 -16
- package/dist/types/tools/artifacts/types.d.ts +0 -127
- package/dist/types/tools/fileSearch/formatter.d.ts +0 -25
- package/dist/types/tools/fileSearch/index.d.ts +0 -5
- package/dist/types/tools/fileSearch/ragClient.d.ts +0 -32
- package/dist/types/tools/fileSearch/schema.d.ts +0 -13
- package/dist/types/tools/fileSearch/tool.d.ts +0 -18
- package/dist/types/tools/fileSearch/types.d.ts +0 -139
- package/dist/types/tools/proxyTool.d.ts +0 -62
- package/dist/types/tools/search/test.d.ts +0 -1
- package/dist/types/utils/childAgentContext.d.ts +0 -99
- package/dist/types/utils/credentials.d.ts +0 -77
- package/dist/types/utils/httpClient.d.ts +0 -46
- package/dist/types/utils/toolManifest.d.ts +0 -49
- package/src/common/__tests__/spawnPath.test.ts +0 -110
- package/src/common/spawnPath.ts +0 -101
- package/src/content/ArtifactStore.ts +0 -782
- package/src/content/ContentStore.ts +0 -753
- package/src/content/contentAnalyzer.ts +0 -105
- package/src/content/index.ts +0 -51
- package/src/content/mcpAutoCache.ts +0 -185
- package/src/content/types.ts +0 -82
- package/src/graphs/HandoffRegistry.ts +0 -199
- package/src/graphs/__tests__/HandoffRegistry.test.ts +0 -410
- package/src/graphs/__tests__/multi-agent-delegate.test.ts +0 -458
- package/src/graphs/__tests__/multi-agent-edges.test.ts +0 -276
- package/src/graphs/__tests__/multi-agent-nested-subgraph.test.ts +0 -221
- package/src/graphs/handoffValidation.test.ts +0 -353
- package/src/providers/__tests__/ToolsServerCapabilityProvider.integration.spec.ts +0 -79
- package/src/providers/__tests__/ToolsServerCapabilityProvider.test.ts +0 -271
- package/src/providers/__tests__/types.test.ts +0 -64
- package/src/providers/a2a/A2ACapabilityProvider.ts +0 -384
- package/src/providers/a2a/__tests__/A2ACapabilityProvider.integration.spec.ts +0 -345
- package/src/providers/a2a/__tests__/A2ACapabilityProvider.test.ts +0 -460
- package/src/providers/a2a/client.ts +0 -115
- package/src/providers/a2a/config.ts +0 -40
- package/src/providers/a2a/index.ts +0 -29
- package/src/providers/a2a/types.ts +0 -191
- package/src/providers/capabilityNaming.ts +0 -42
- package/src/providers/index.ts +0 -68
- package/src/providers/mcp/MCPCapabilityProvider.ts +0 -345
- package/src/providers/mcp/__tests__/MCPCapabilityProvider.integration.spec.ts +0 -386
- package/src/providers/mcp/__tests__/MCPCapabilityProvider.test.ts +0 -371
- package/src/providers/mcp/config.ts +0 -45
- package/src/providers/mcp/index.ts +0 -21
- package/src/providers/mcp/transport.ts +0 -76
- package/src/providers/mcp/types.ts +0 -139
- package/src/providers/tools-server/ToolsServerCapabilityProvider.ts +0 -249
- package/src/providers/tools-server/index.ts +0 -1
- package/src/providers/types.ts +0 -204
- package/src/scripts/test-bedrock-handoff-autonomous.ts +0 -267
- package/src/scripts/test-handoff-preamble.ts +0 -278
- package/src/specs/agent-handoffs-bedrock.integration.test.ts +0 -415
- package/src/tools/artifacts/__tests__/tool.test.ts +0 -259
- package/src/tools/artifacts/index.ts +0 -33
- package/src/tools/artifacts/schema.ts +0 -99
- package/src/tools/artifacts/tool.ts +0 -289
- package/src/tools/artifacts/types.ts +0 -162
- package/src/tools/fileSearch/__tests__/tool.test.ts +0 -261
- package/src/tools/fileSearch/formatter.ts +0 -129
- package/src/tools/fileSearch/index.ts +0 -23
- package/src/tools/fileSearch/ragClient.ts +0 -137
- package/src/tools/fileSearch/schema.ts +0 -19
- package/src/tools/fileSearch/tool.ts +0 -207
- package/src/tools/fileSearch/types.ts +0 -149
- package/src/tools/proxyTool.ts +0 -166
- package/src/tools/search/output.md +0 -2775
- package/src/tools/search/test.html +0 -884
- package/src/tools/search/test.md +0 -643
- package/src/tools/search/test.ts +0 -159
- package/src/utils/__tests__/childAgentContext.test.ts +0 -217
- package/src/utils/__tests__/credentials.test.ts +0 -130
- package/src/utils/__tests__/httpClient.test.ts +0 -75
- package/src/utils/__tests__/toolManifest.test.ts +0 -116
- package/src/utils/childAgentContext.ts +0 -259
- package/src/utils/credentials.ts +0 -157
- package/src/utils/httpClient.ts +0 -92
- package/src/utils/toolManifest.ts +0 -109
- /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
|
+
}
|
package/src/llm/bedrock/index.ts
CHANGED
|
@@ -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
|
|
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
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
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
|
-
|
|
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
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
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
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
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
|
package/src/llm/openai/index.ts
CHANGED
|
@@ -896,8 +896,8 @@ export interface XAIUsageMetadata
|
|
|
896
896
|
}
|
|
897
897
|
|
|
898
898
|
export class ChatMoonshot extends ChatOpenAI {
|
|
899
|
-
static lc_name(): '
|
|
900
|
-
return '
|
|
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' &&
|
package/src/memory/citations.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Citation decoration — Phase 2.
|
|
3
3
|
*
|
|
4
|
-
* Ported from
|
|
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
|
|
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
|
|
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
|
-
*
|
|
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
|
*/
|
package/src/memory/constants.ts
CHANGED
|
@@ -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
|
|
29
|
+
* Search defaults — aligned with the standard defaults.
|
|
30
30
|
*
|
|
31
31
|
* Sources:
|
|
32
|
-
* - `
|
|
33
|
-
* - `
|
|
32
|
+
* - `reference` → maxResults=6
|
|
33
|
+
* - `reference` → maxInjectedChars=4000
|
|
34
34
|
*
|
|
35
|
-
* Keeping these in lockstep with
|
|
36
|
-
* description, budget clamps, and eval corpora line up with
|
|
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
|
|
48
|
+
* Phase 2 rerank defaults — ported from a reference implementation.
|
|
49
49
|
*
|
|
50
50
|
* Sources:
|
|
51
|
-
* - `
|
|
52
|
-
* - `
|
|
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
|
|
66
|
+
* Flush trigger margins (token counts) — aligned with standard.
|
|
67
67
|
*
|
|
68
68
|
* Sources:
|
|
69
|
-
* - `
|
|
70
|
-
* - `
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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.
|
|
14
|
+
/** Opt-in. Default is false. */
|
|
15
15
|
enabled: boolean;
|
|
16
|
-
/** 0 = max diversity, 1 = max relevance.
|
|
16
|
+
/** 0 = max diversity, 1 = max relevance. Default 0.7. */
|
|
17
17
|
lambda: number;
|
|
18
18
|
}
|
|
19
19
|
|
package/src/memory/paths.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Recall tracking — Phase 2.
|
|
3
3
|
*
|
|
4
|
-
* Lightweight adaptation of
|
|
4
|
+
* Lightweight adaptation of an external recall-tracking module
|
|
5
5
|
* `extensions/memory-core/src/short-term-promotion.ts::recordShortTermRecalls`.
|
|
6
|
-
*
|
|
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
|
-
//
|
|
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
|
|
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
|
|
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
|