agentfootprint 6.44.0 → 6.45.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (366) hide show
  1. package/ai-instructions/setup.sh +0 -0
  2. package/dist/core/agent/buildAgentChart.js +2 -1
  3. package/dist/core/agent/buildAgentChart.js.map +1 -1
  4. package/dist/core/agent/buildDynamicAgentChart.js +3 -1
  5. package/dist/core/agent/buildDynamicAgentChart.js.map +1 -1
  6. package/dist/core/agent/stages/pickEntry.js +3 -1
  7. package/dist/core/agent/stages/pickEntry.js.map +1 -1
  8. package/dist/esm/adapters/identity/agentcore.d.ts +100 -0
  9. package/dist/esm/adapters/llm/AnthropicProvider.d.ts +130 -0
  10. package/dist/esm/adapters/llm/BedrockProvider.d.ts +100 -0
  11. package/dist/esm/adapters/llm/BrowserAnthropicProvider.d.ts +41 -0
  12. package/dist/esm/adapters/llm/BrowserOpenAIProvider.d.ts +95 -0
  13. package/dist/esm/adapters/llm/MockProvider.d.ts +153 -0
  14. package/dist/esm/adapters/llm/OpenAIProvider.d.ts +220 -0
  15. package/dist/esm/adapters/llm/createProvider.d.ts +85 -0
  16. package/dist/esm/adapters/memory/agentcore.d.ts +146 -0
  17. package/dist/esm/adapters/memory/bedrockAgentMemory.d.ts +95 -0
  18. package/dist/esm/adapters/memory/redis.d.ts +127 -0
  19. package/dist/esm/adapters/observability/agentcore.d.ts +67 -0
  20. package/dist/esm/adapters/observability/audit.d.ts +254 -0
  21. package/dist/esm/adapters/observability/cloudwatch.d.ts +96 -0
  22. package/dist/esm/adapters/observability/otel.d.ts +237 -0
  23. package/dist/esm/adapters/observability/xray.d.ts +88 -0
  24. package/dist/esm/adapters/types.d.ts +378 -0
  25. package/dist/esm/bridge/eventMeta.d.ts +59 -0
  26. package/dist/esm/cache/CacheDecisionSubflow.d.ts +85 -0
  27. package/dist/esm/cache/CacheGateDecider.d.ts +127 -0
  28. package/dist/esm/cache/applyCachePolicy.d.ts +37 -0
  29. package/dist/esm/cache/cacheRecorder.d.ts +85 -0
  30. package/dist/esm/cache/index.d.ts +33 -0
  31. package/dist/esm/cache/strategies/AnthropicCacheStrategy.d.ts +38 -0
  32. package/dist/esm/cache/strategies/BedrockCacheStrategy.d.ts +33 -0
  33. package/dist/esm/cache/strategies/NoOpCacheStrategy.d.ts +29 -0
  34. package/dist/esm/cache/strategies/OpenAICacheStrategy.d.ts +36 -0
  35. package/dist/esm/cache/strategyRegistry.d.ts +45 -0
  36. package/dist/esm/cache/types.d.ts +243 -0
  37. package/dist/esm/conventions.d.ts +203 -0
  38. package/dist/esm/core/Agent.d.ts +355 -0
  39. package/dist/esm/core/LLMCall.d.ts +139 -0
  40. package/dist/esm/core/RunnerBase.d.ts +267 -0
  41. package/dist/esm/core/agent/AgentBuilder.d.ts +565 -0
  42. package/dist/esm/core/agent/buildAgentChart.d.ts +109 -0
  43. package/dist/esm/core/agent/buildAgentChart.js +2 -1
  44. package/dist/esm/core/agent/buildAgentChart.js.map +1 -1
  45. package/dist/esm/core/agent/buildAgentMessageApiChart.d.ts +40 -0
  46. package/dist/esm/core/agent/buildCacheSubflow.d.ts +35 -0
  47. package/dist/esm/core/agent/buildDynamicAgentChart.d.ts +56 -0
  48. package/dist/esm/core/agent/buildDynamicAgentChart.js +3 -1
  49. package/dist/esm/core/agent/buildDynamicAgentChart.js.map +1 -1
  50. package/dist/esm/core/agent/buildMessageApiChart.d.ts +47 -0
  51. package/dist/esm/core/agent/buildToolRegistry.d.ts +61 -0
  52. package/dist/esm/core/agent/memoryRecallInjections.d.ts +8 -0
  53. package/dist/esm/core/agent/stages/breakFinal.d.ts +22 -0
  54. package/dist/esm/core/agent/stages/callLLM.d.ts +74 -0
  55. package/dist/esm/core/agent/stages/pickEntry.d.ts +19 -0
  56. package/dist/esm/core/agent/stages/pickEntry.js +3 -1
  57. package/dist/esm/core/agent/stages/pickEntry.js.map +1 -1
  58. package/dist/esm/core/agent/stages/prepareFinal.d.ts +19 -0
  59. package/dist/esm/core/agent/stages/reliabilityExecution.d.ts +135 -0
  60. package/dist/esm/core/agent/stages/route.d.ts +18 -0
  61. package/dist/esm/core/agent/stages/seed.d.ts +53 -0
  62. package/dist/esm/core/agent/stages/toolCalls.d.ts +76 -0
  63. package/dist/esm/core/agent/toolArgsValidation.d.ts +62 -0
  64. package/dist/esm/core/agent/types.d.ts +382 -0
  65. package/dist/esm/core/agent/validators.d.ts +52 -0
  66. package/dist/esm/core/cost.d.ts +38 -0
  67. package/dist/esm/core/flowchartAsTool.d.ts +200 -0
  68. package/dist/esm/core/humanizeLLMError.d.ts +23 -0
  69. package/dist/esm/core/outputFallback.d.ts +139 -0
  70. package/dist/esm/core/outputSchema.d.ts +127 -0
  71. package/dist/esm/core/pause.d.ts +74 -0
  72. package/dist/esm/core/runCheckpoint.d.ts +179 -0
  73. package/dist/esm/core/runner.d.ts +203 -0
  74. package/dist/esm/core/slots/buildMessagesSlot.d.ts +40 -0
  75. package/dist/esm/core/slots/buildSystemPromptSlot.d.ts +41 -0
  76. package/dist/esm/core/slots/buildThinkingSubflow.d.ts +40 -0
  77. package/dist/esm/core/slots/buildToolsSlot.d.ts +60 -0
  78. package/dist/esm/core/slots/helpers.d.ts +27 -0
  79. package/dist/esm/core/toolContract.d.ts +43 -0
  80. package/dist/esm/core/tools.d.ts +90 -0
  81. package/dist/esm/core/translator.d.ts +94 -0
  82. package/dist/esm/core-flow/Conditional.d.ts +119 -0
  83. package/dist/esm/core-flow/Loop.d.ts +160 -0
  84. package/dist/esm/core-flow/Parallel.d.ts +360 -0
  85. package/dist/esm/core-flow/Sequence.d.ts +133 -0
  86. package/dist/esm/events/dispatcher.d.ts +134 -0
  87. package/dist/esm/events/payloads.d.ts +761 -0
  88. package/dist/esm/events/registry.d.ts +198 -0
  89. package/dist/esm/events/types.d.ts +70 -0
  90. package/dist/esm/identity/kinds.d.ts +36 -0
  91. package/dist/esm/identity/staticTokens.d.ts +28 -0
  92. package/dist/esm/identity/types.d.ts +113 -0
  93. package/dist/esm/identity/withCredentialRetry.d.ts +64 -0
  94. package/dist/esm/identity.d.ts +31 -0
  95. package/dist/esm/index.d.ts +64 -0
  96. package/dist/esm/index.js +2 -0
  97. package/dist/esm/index.js.map +1 -1
  98. package/dist/esm/injection-engine.d.ts +4 -0
  99. package/dist/esm/lib/canonicalJson.d.ts +56 -0
  100. package/dist/esm/lib/context-bisect/ablation.d.ts +109 -0
  101. package/dist/esm/lib/context-bisect/bisect.d.ts +75 -0
  102. package/dist/esm/lib/context-bisect/cost.d.ts +37 -0
  103. package/dist/esm/lib/context-bisect/index.d.ts +31 -0
  104. package/dist/esm/lib/context-bisect/index.js +3 -0
  105. package/dist/esm/lib/context-bisect/index.js.map +1 -1
  106. package/dist/esm/lib/context-bisect/llmEdgeWeigher.d.ts +124 -0
  107. package/dist/esm/lib/context-bisect/localize.d.ts +152 -0
  108. package/dist/esm/lib/context-bisect/localize.js +2 -0
  109. package/dist/esm/lib/context-bisect/localize.js.map +1 -1
  110. package/dist/esm/lib/context-bisect/loop-recall.d.ts +97 -0
  111. package/dist/esm/lib/context-bisect/missingContext.d.ts +71 -0
  112. package/dist/esm/lib/context-bisect/restoration.d.ts +39 -0
  113. package/dist/esm/lib/context-bisect/toBacktrackTrace.d.ts +138 -0
  114. package/dist/esm/lib/context-bisect/trajectory.d.ts +168 -0
  115. package/dist/esm/lib/context-bisect/types.d.ts +448 -0
  116. package/dist/esm/lib/context-bisect/walk-to-root.d.ts +103 -0
  117. package/dist/esm/lib/influence-core/attributability.d.ts +72 -0
  118. package/dist/esm/lib/influence-core/cache.d.ts +94 -0
  119. package/dist/esm/lib/influence-core/contrastive.d.ts +26 -0
  120. package/dist/esm/lib/influence-core/index.d.ts +34 -0
  121. package/dist/esm/lib/influence-core/margin.d.ts +33 -0
  122. package/dist/esm/lib/influence-core/signals.d.ts +128 -0
  123. package/dist/esm/lib/influence-core/similarity.d.ts +25 -0
  124. package/dist/esm/lib/influence-core/types.d.ts +252 -0
  125. package/dist/esm/lib/injection-engine/SkillRegistry.d.ts +147 -0
  126. package/dist/esm/lib/injection-engine/buildInjectionEngineSubflow.d.ts +110 -0
  127. package/dist/esm/lib/injection-engine/buildInjectionEngineSubflow.js +1 -0
  128. package/dist/esm/lib/injection-engine/buildInjectionEngineSubflow.js.map +1 -1
  129. package/dist/esm/lib/injection-engine/entryScorer.d.ts +93 -0
  130. package/dist/esm/lib/injection-engine/entryScorer.js +172 -0
  131. package/dist/esm/lib/injection-engine/entryScorer.js.map +1 -0
  132. package/dist/esm/lib/injection-engine/evaluator.d.ts +24 -0
  133. package/dist/esm/lib/injection-engine/factories/defineFact.d.ts +60 -0
  134. package/dist/esm/lib/injection-engine/factories/defineInjection.d.ts +41 -0
  135. package/dist/esm/lib/injection-engine/factories/defineInstruction.d.ts +78 -0
  136. package/dist/esm/lib/injection-engine/factories/defineRelevanceHint.d.ts +26 -0
  137. package/dist/esm/lib/injection-engine/factories/defineSkill.d.ts +160 -0
  138. package/dist/esm/lib/injection-engine/factories/defineSteering.d.ts +39 -0
  139. package/dist/esm/lib/injection-engine/index.d.ts +22 -0
  140. package/dist/esm/lib/injection-engine/index.js +1 -0
  141. package/dist/esm/lib/injection-engine/index.js.map +1 -1
  142. package/dist/esm/lib/injection-engine/skillContract.d.ts +29 -0
  143. package/dist/esm/lib/injection-engine/skillGraph.d.ts +289 -0
  144. package/dist/esm/lib/injection-engine/skillGraph.js +35 -41
  145. package/dist/esm/lib/injection-engine/skillGraph.js.map +1 -1
  146. package/dist/esm/lib/injection-engine/skillGraphCheckup.d.ts +49 -0
  147. package/dist/esm/lib/injection-engine/skillTools.d.ts +72 -0
  148. package/dist/esm/lib/injection-engine/softmax.d.ts +11 -0
  149. package/dist/esm/lib/injection-engine/types.d.ts +229 -0
  150. package/dist/esm/lib/injection-engine/types.js.map +1 -1
  151. package/dist/esm/lib/lazyRequire.d.ts +29 -0
  152. package/dist/esm/lib/mcp/index.d.ts +9 -0
  153. package/dist/esm/lib/mcp/mcpClient.d.ts +46 -0
  154. package/dist/esm/lib/mcp/mockMcpClient.d.ts +65 -0
  155. package/dist/esm/lib/mcp/types.d.ts +133 -0
  156. package/dist/esm/lib/rag/defineRAG.d.ts +139 -0
  157. package/dist/esm/lib/rag/index.d.ts +7 -0
  158. package/dist/esm/lib/rag/indexDocuments.d.ts +105 -0
  159. package/dist/esm/lib/tool-lint/analyze.d.ts +83 -0
  160. package/dist/esm/lib/tool-lint/cli.d.ts +43 -0
  161. package/dist/esm/lib/tool-lint/format.d.ts +18 -0
  162. package/dist/esm/lib/tool-lint/index.d.ts +23 -0
  163. package/dist/esm/lib/tool-lint/rules.d.ts +85 -0
  164. package/dist/esm/lib/tool-lint/types.d.ts +155 -0
  165. package/dist/esm/lib/trace-toolpack/bounded.d.ts +47 -0
  166. package/dist/esm/lib/trace-toolpack/debugPrompt.d.ts +19 -0
  167. package/dist/esm/lib/trace-toolpack/index.d.ts +20 -0
  168. package/dist/esm/lib/trace-toolpack/lazyToolpack.d.ts +35 -0
  169. package/dist/esm/lib/trace-toolpack/selfExplain.d.ts +100 -0
  170. package/dist/esm/lib/trace-toolpack/traceDebugAgent.d.ts +42 -0
  171. package/dist/esm/lib/trace-toolpack/traceToolpack.d.ts +69 -0
  172. package/dist/esm/lib/trace-toolpack/types.d.ts +59 -0
  173. package/dist/esm/llm-providers.d.ts +26 -0
  174. package/dist/esm/locales/index.d.ts +132 -0
  175. package/dist/esm/memory/beats/extractBeats.d.ts +61 -0
  176. package/dist/esm/memory/beats/extractor.d.ts +47 -0
  177. package/dist/esm/memory/beats/formatAsNarrative.d.ts +62 -0
  178. package/dist/esm/memory/beats/heuristicExtractor.d.ts +37 -0
  179. package/dist/esm/memory/beats/index.d.ts +12 -0
  180. package/dist/esm/memory/beats/llmExtractor.d.ts +56 -0
  181. package/dist/esm/memory/beats/types.d.ts +60 -0
  182. package/dist/esm/memory/beats/writeBeats.d.ts +22 -0
  183. package/dist/esm/memory/causal/evidenceRecorder.d.ts +66 -0
  184. package/dist/esm/memory/causal/index.d.ts +6 -0
  185. package/dist/esm/memory/causal/loadSnapshot.d.ts +51 -0
  186. package/dist/esm/memory/causal/snapshotPipeline.d.ts +35 -0
  187. package/dist/esm/memory/causal/types.d.ts +130 -0
  188. package/dist/esm/memory/causal/writeSnapshot.d.ts +73 -0
  189. package/dist/esm/memory/define.d.ts +63 -0
  190. package/dist/esm/memory/define.types.d.ts +276 -0
  191. package/dist/esm/memory/define.types.js +1 -1
  192. package/dist/esm/memory/embedding/cosine.d.ts +18 -0
  193. package/dist/esm/memory/embedding/embedMessages.d.ts +58 -0
  194. package/dist/esm/memory/embedding/index.d.ts +8 -0
  195. package/dist/esm/memory/embedding/loadRelevant.d.ts +51 -0
  196. package/dist/esm/memory/embedding/mockEmbedder.d.ts +22 -0
  197. package/dist/esm/memory/embedding/types.d.ts +46 -0
  198. package/dist/esm/memory/entry/decay.d.ts +36 -0
  199. package/dist/esm/memory/entry/index.d.ts +2 -0
  200. package/dist/esm/memory/entry/types.d.ts +140 -0
  201. package/dist/esm/memory/facts/extractFacts.d.ts +50 -0
  202. package/dist/esm/memory/facts/extractor.d.ts +33 -0
  203. package/dist/esm/memory/facts/formatFacts.d.ts +60 -0
  204. package/dist/esm/memory/facts/index.d.ts +14 -0
  205. package/dist/esm/memory/facts/llmFactExtractor.d.ts +64 -0
  206. package/dist/esm/memory/facts/loadFacts.d.ts +43 -0
  207. package/dist/esm/memory/facts/patternFactExtractor.d.ts +2 -0
  208. package/dist/esm/memory/facts/types.d.ts +68 -0
  209. package/dist/esm/memory/facts/writeFacts.d.ts +19 -0
  210. package/dist/esm/memory/identity/index.d.ts +2 -0
  211. package/dist/esm/memory/identity/types.d.ts +49 -0
  212. package/dist/esm/memory/index.d.ts +19 -0
  213. package/dist/esm/memory/pipeline/auto.d.ts +59 -0
  214. package/dist/esm/memory/pipeline/default.d.ts +49 -0
  215. package/dist/esm/memory/pipeline/ephemeral.d.ts +28 -0
  216. package/dist/esm/memory/pipeline/fact.d.ts +26 -0
  217. package/dist/esm/memory/pipeline/index.d.ts +13 -0
  218. package/dist/esm/memory/pipeline/narrative.d.ts +35 -0
  219. package/dist/esm/memory/pipeline/semantic.d.ts +37 -0
  220. package/dist/esm/memory/pipeline/types.d.ts +31 -0
  221. package/dist/esm/memory/stages/formatDefault.d.ts +64 -0
  222. package/dist/esm/memory/stages/index.d.ts +13 -0
  223. package/dist/esm/memory/stages/loadRecent.d.ts +49 -0
  224. package/dist/esm/memory/stages/pickByBudget.d.ts +63 -0
  225. package/dist/esm/memory/stages/summarize.d.ts +87 -0
  226. package/dist/esm/memory/stages/tokenize.d.ts +43 -0
  227. package/dist/esm/memory/stages/types.d.ts +75 -0
  228. package/dist/esm/memory/stages/writeMessages.d.ts +71 -0
  229. package/dist/esm/memory/store/InMemoryStore.d.ts +62 -0
  230. package/dist/esm/memory/store/index.d.ts +2 -0
  231. package/dist/esm/memory/store/types.d.ts +223 -0
  232. package/dist/esm/memory/wire/index.d.ts +2 -0
  233. package/dist/esm/memory/wire/mountMemoryPipeline.d.ts +108 -0
  234. package/dist/esm/memory-providers.d.ts +37 -0
  235. package/dist/esm/observability/contextError/finders/compareFinders.d.ts +19 -0
  236. package/dist/esm/observability/contextError/finders/index.d.ts +22 -0
  237. package/dist/esm/observability/contextError/finders/rankSuspects.d.ts +2 -0
  238. package/dist/esm/observability/contextError/finders/removeAndRetry.d.ts +11 -0
  239. package/dist/esm/observability/contextError/finders/shrinkToCause.d.ts +11 -0
  240. package/dist/esm/observability/contextError/finders/testManyCombos.d.ts +11 -0
  241. package/dist/esm/observability/contextError/finders/traceSteps.d.ts +2 -0
  242. package/dist/esm/observability/contextError/finders/types.d.ts +88 -0
  243. package/dist/esm/observability-providers.d.ts +46 -0
  244. package/dist/esm/observe.d.ts +62 -0
  245. package/dist/esm/patterns/Debate.d.ts +39 -0
  246. package/dist/esm/patterns/MapReduce.d.ts +66 -0
  247. package/dist/esm/patterns/Reflection.d.ts +51 -0
  248. package/dist/esm/patterns/SelfConsistency.d.ts +43 -0
  249. package/dist/esm/patterns/Swarm.d.ts +60 -0
  250. package/dist/esm/patterns/ToT.d.ts +53 -0
  251. package/dist/esm/patterns/index.d.ts +22 -0
  252. package/dist/esm/providers.d.ts +33 -0
  253. package/dist/esm/recorders/core/AgentRecorder.d.ts +15 -0
  254. package/dist/esm/recorders/core/CompositionRecorder.d.ts +17 -0
  255. package/dist/esm/recorders/core/ContextEvaluatedRecorder.d.ts +23 -0
  256. package/dist/esm/recorders/core/ContextRecorder.d.ts +47 -0
  257. package/dist/esm/recorders/core/CostRecorder.d.ts +14 -0
  258. package/dist/esm/recorders/core/EmitBridge.d.ts +30 -0
  259. package/dist/esm/recorders/core/ErrorBridge.d.ts +38 -0
  260. package/dist/esm/recorders/core/EvalRecorder.d.ts +16 -0
  261. package/dist/esm/recorders/core/MemoryRecorder.d.ts +17 -0
  262. package/dist/esm/recorders/core/PermissionRecorder.d.ts +16 -0
  263. package/dist/esm/recorders/core/ReliabilityRecorder.d.ts +24 -0
  264. package/dist/esm/recorders/core/SkillRecorder.d.ts +14 -0
  265. package/dist/esm/recorders/core/StreamRecorder.d.ts +15 -0
  266. package/dist/esm/recorders/core/ToolsRecorder.d.ts +18 -0
  267. package/dist/esm/recorders/core/ValidationRecorder.d.ts +16 -0
  268. package/dist/esm/recorders/core/contextEngineering.d.ts +136 -0
  269. package/dist/esm/recorders/core/typedEmit.d.ts +34 -0
  270. package/dist/esm/recorders/core/types.d.ts +97 -0
  271. package/dist/esm/recorders/observability/AgentThinkingTraceRecorder.d.ts +117 -0
  272. package/dist/esm/recorders/observability/BoundaryRecorder.d.ts +546 -0
  273. package/dist/esm/recorders/observability/FlowchartRecorder.d.ts +220 -0
  274. package/dist/esm/recorders/observability/LiveStateRecorder.d.ts +250 -0
  275. package/dist/esm/recorders/observability/LoggingRecorder.d.ts +91 -0
  276. package/dist/esm/recorders/observability/RouteRecorder.d.ts +83 -0
  277. package/dist/esm/recorders/observability/RunStepRecorder.d.ts +231 -0
  278. package/dist/esm/recorders/observability/StatusRecorder.d.ts +36 -0
  279. package/dist/esm/recorders/observability/ToolChoiceRecorder.d.ts +164 -0
  280. package/dist/esm/recorders/observability/ToolLineageRecorder.d.ts +71 -0
  281. package/dist/esm/recorders/observability/commentary/commentaryTemplates.d.ts +105 -0
  282. package/dist/esm/recorders/observability/internal/ActorArrowClassifier.d.ts +25 -0
  283. package/dist/esm/recorders/observability/internal/CandidateAnswerBuffer.d.ts +28 -0
  284. package/dist/esm/recorders/observability/internal/ForkTracker.d.ts +60 -0
  285. package/dist/esm/recorders/observability/internal/RootInferrer.d.ts +51 -0
  286. package/dist/esm/recorders/observability/internal/SequenceSiblingTracker.d.ts +24 -0
  287. package/dist/esm/recorders/observability/localObservability.d.ts +48 -0
  288. package/dist/esm/recorders/observability/observeRunId.d.ts +36 -0
  289. package/dist/esm/recorders/observability/status/statusTemplates.d.ts +106 -0
  290. package/dist/esm/recorders/observability/trace.d.ts +119 -0
  291. package/dist/esm/reliability/CircuitBreaker.d.ts +75 -0
  292. package/dist/esm/reliability/buildReliabilityGateChart.d.ts +53 -0
  293. package/dist/esm/reliability/classifyError.d.ts +28 -0
  294. package/dist/esm/reliability/index.d.ts +35 -0
  295. package/dist/esm/reliability/types.d.ts +327 -0
  296. package/dist/esm/resilience/fallbackProvider.d.ts +33 -0
  297. package/dist/esm/resilience/index.d.ts +21 -0
  298. package/dist/esm/resilience/withCircuitBreaker.d.ts +129 -0
  299. package/dist/esm/resilience/withFallback.d.ts +45 -0
  300. package/dist/esm/resilience/withRetry.d.ts +71 -0
  301. package/dist/esm/security/PermissionPolicy.d.ts +124 -0
  302. package/dist/esm/security/PolicyHaltError.d.ts +72 -0
  303. package/dist/esm/security/extractSequence.d.ts +46 -0
  304. package/dist/esm/security/index.d.ts +44 -0
  305. package/dist/esm/security/thinkingRedaction.d.ts +50 -0
  306. package/dist/esm/status.d.ts +48 -0
  307. package/dist/esm/strategies/attach.d.ts +47 -0
  308. package/dist/esm/strategies/compose.d.ts +48 -0
  309. package/dist/esm/strategies/defaults/chatBubbleLiveStatus.d.ts +36 -0
  310. package/dist/esm/strategies/defaults/consoleObservability.d.ts +42 -0
  311. package/dist/esm/strategies/defaults/inMemorySinkCost.d.ts +50 -0
  312. package/dist/esm/strategies/defaults/index.d.ts +30 -0
  313. package/dist/esm/strategies/defaults/noopLens.d.ts +28 -0
  314. package/dist/esm/strategies/index.d.ts +36 -0
  315. package/dist/esm/strategies/registry.d.ts +70 -0
  316. package/dist/esm/strategies/types.d.ts +303 -0
  317. package/dist/esm/stream.d.ts +82 -0
  318. package/dist/esm/thinking/AnthropicThinkingHandler.d.ts +42 -0
  319. package/dist/esm/thinking/MockThinkingHandler.d.ts +50 -0
  320. package/dist/esm/thinking/OpenAIThinkingHandler.d.ts +37 -0
  321. package/dist/esm/thinking/index.d.ts +51 -0
  322. package/dist/esm/thinking/registry.d.ts +33 -0
  323. package/dist/esm/thinking/types.d.ts +162 -0
  324. package/dist/esm/tool-providers/gatedTools.d.ts +36 -0
  325. package/dist/esm/tool-providers/index.d.ts +41 -0
  326. package/dist/esm/tool-providers/skillScopedTools.d.ts +45 -0
  327. package/dist/esm/tool-providers/staticTools.d.ts +21 -0
  328. package/dist/esm/tool-providers/types.d.ts +138 -0
  329. package/dist/index.js +6 -2
  330. package/dist/index.js.map +1 -1
  331. package/dist/lib/context-bisect/index.js +3 -0
  332. package/dist/lib/context-bisect/index.js.map +1 -1
  333. package/dist/lib/context-bisect/localize.js +2 -0
  334. package/dist/lib/context-bisect/localize.js.map +1 -1
  335. package/dist/lib/injection-engine/buildInjectionEngineSubflow.js +1 -0
  336. package/dist/lib/injection-engine/buildInjectionEngineSubflow.js.map +1 -1
  337. package/dist/lib/injection-engine/entryScorer.js +178 -0
  338. package/dist/lib/injection-engine/entryScorer.js.map +1 -0
  339. package/dist/lib/injection-engine/index.js +5 -1
  340. package/dist/lib/injection-engine/index.js.map +1 -1
  341. package/dist/lib/injection-engine/skillGraph.js +35 -41
  342. package/dist/lib/injection-engine/skillGraph.js.map +1 -1
  343. package/dist/lib/injection-engine/types.js.map +1 -1
  344. package/dist/memory/define.types.js +1 -1
  345. package/dist/types/core/agent/buildAgentChart.d.ts.map +1 -1
  346. package/dist/types/core/agent/buildDynamicAgentChart.d.ts.map +1 -1
  347. package/dist/types/core/agent/stages/pickEntry.d.ts.map +1 -1
  348. package/dist/types/core/agent/types.d.ts +8 -4
  349. package/dist/types/core/agent/types.d.ts.map +1 -1
  350. package/dist/types/index.d.ts +1 -1
  351. package/dist/types/index.d.ts.map +1 -1
  352. package/dist/types/lib/context-bisect/index.d.ts +3 -0
  353. package/dist/types/lib/context-bisect/index.d.ts.map +1 -1
  354. package/dist/types/lib/context-bisect/localize.d.ts +2 -0
  355. package/dist/types/lib/context-bisect/localize.d.ts.map +1 -1
  356. package/dist/types/lib/injection-engine/buildInjectionEngineSubflow.d.ts.map +1 -1
  357. package/dist/types/lib/injection-engine/entryScorer.d.ts +94 -0
  358. package/dist/types/lib/injection-engine/entryScorer.d.ts.map +1 -0
  359. package/dist/types/lib/injection-engine/index.d.ts +1 -0
  360. package/dist/types/lib/injection-engine/index.d.ts.map +1 -1
  361. package/dist/types/lib/injection-engine/skillGraph.d.ts +21 -24
  362. package/dist/types/lib/injection-engine/skillGraph.d.ts.map +1 -1
  363. package/dist/types/lib/injection-engine/types.d.ts +9 -4
  364. package/dist/types/lib/injection-engine/types.d.ts.map +1 -1
  365. package/dist/types/memory/define.types.d.ts +1 -1
  366. package/package.json +203 -56
@@ -0,0 +1,276 @@
1
+ /**
2
+ * Memory subsystem — public type surface.
3
+ *
4
+ * THE 2D mental model the library teaches:
5
+ *
6
+ * MEMORY = TYPE × STRATEGY × STORE
7
+ *
8
+ * TYPE — what shape of memory you're keeping
9
+ * (Episodic messages / Semantic facts / Narrative beats /
10
+ * Causal footprintjs snapshots)
11
+ * STRATEGY — how to fit content into the next LLM call
12
+ * (Window / Budget / Summarize / TopK / Extract / Decay / Hybrid)
13
+ * STORE — where the bytes live
14
+ * (InMemoryStore / Redis / Postgres / DynamoDB / Vector ...)
15
+ *
16
+ * Strategy is universal — same Window works for Episodic and for Causal.
17
+ * That's why examples are organized by strategy (the discipline) not by
18
+ * type (the shape).
19
+ *
20
+ * Pattern: Single-Source-of-Truth const objects + discriminated union.
21
+ * Mirrors `src/conventions.ts` (SUBFLOW_IDS, INJECTION_KEYS).
22
+ * NEVER enums (TS enums emit runtime objects + opacity).
23
+ * Const-as-const erases at compile time, accepts string literals,
24
+ * and gives consumers IDE autocomplete + refactor safety.
25
+ *
26
+ * Role: Layer-1 contract for the memory subsystem. Step 2's
27
+ * `defineMemory()` factory consumes these to build pipelines;
28
+ * Step 4's `Agent.memory()` builder mounts the resulting
29
+ * definitions; Step 5's Causal machinery extends them.
30
+ *
31
+ * Emits: Indirectly — every memory pipeline emits the unified
32
+ * `agentfootprint.context.injected` event with `source: 'memory'`
33
+ * when its read subflow places content into the messages slot.
34
+ *
35
+ * @see ./define.ts for the `defineMemory()` factory itself
36
+ * @see ../../docs-next for guides + the 7 strategy examples
37
+ * @see MEMORY.md for the load-bearing design memory
38
+ */
39
+ import type { LLMProvider } from '../adapters/types.js';
40
+ import type { ContextRole } from '../events/types.js';
41
+ import type { Embedder } from './embedding/index.js';
42
+ import type { MemoryStore } from './store/index.js';
43
+ /**
44
+ * What shape of memory you're keeping.
45
+ *
46
+ * - `EPISODIC` — raw conversation messages, replayed on next turn
47
+ * - `SEMANTIC` — extracted structured facts, deduped on key
48
+ * - `NARRATIVE` — beats / summaries of prior runs (append-only)
49
+ * - `CAUSAL` — footprintjs execution snapshots, the differentiator
50
+ * (replays stored decisions + tool evidence for "why?"
51
+ * follow-ups — harvested automatically per run)
52
+ */
53
+ export declare const MEMORY_TYPES: {
54
+ readonly EPISODIC: "episodic";
55
+ readonly SEMANTIC: "semantic";
56
+ readonly NARRATIVE: "narrative";
57
+ readonly CAUSAL: "causal";
58
+ };
59
+ export type MemoryType = (typeof MEMORY_TYPES)[keyof typeof MEMORY_TYPES];
60
+ /**
61
+ * How content is selected / compressed for the next LLM call.
62
+ *
63
+ * Universal across types. A `WINDOW` strategy on an Episodic store keeps
64
+ * the last N messages; on a Causal store it keeps the last N snapshots.
65
+ * Mix and match.
66
+ */
67
+ export declare const MEMORY_STRATEGIES: {
68
+ readonly WINDOW: "window";
69
+ readonly BUDGET: "budget";
70
+ readonly SUMMARIZE: "summarize";
71
+ readonly TOP_K: "topK";
72
+ readonly EXTRACT: "extract";
73
+ readonly DECAY: "decay";
74
+ readonly HYBRID: "hybrid";
75
+ };
76
+ export type MemoryStrategyKind = (typeof MEMORY_STRATEGIES)[keyof typeof MEMORY_STRATEGIES];
77
+ /**
78
+ * When the memory's READ subflow runs.
79
+ *
80
+ * Default `TURN_START` reads memory once per `agent.run()`. Use
81
+ * `EVERY_ITERATION` only when the strategy is sensitive to in-loop tool
82
+ * results — every-iteration multiplies store-latency by iteration-count.
83
+ */
84
+ export declare const MEMORY_TIMING: {
85
+ readonly EVERY_ITERATION: "every-iteration";
86
+ readonly TURN_START: "turn-start";
87
+ };
88
+ export type MemoryTiming = (typeof MEMORY_TIMING)[keyof typeof MEMORY_TIMING];
89
+ /**
90
+ * For Causal memory only — which slice of a footprintjs snapshot to
91
+ * inject. Snapshots can run 100KB+; projecting prevents context blowup.
92
+ *
93
+ * - `DECISIONS` — `decide()`/`select()` evidence only (the "why" chain)
94
+ * - `COMMITS` — commitLog only (every state write, ordered)
95
+ * - `NARRATIVE` — narrative entries only (human-readable trace)
96
+ * - `FULL` — entire snapshot (use sparingly)
97
+ */
98
+ export declare const SNAPSHOT_PROJECTIONS: {
99
+ readonly DECISIONS: "decisions";
100
+ readonly COMMITS: "commits";
101
+ readonly NARRATIVE: "narrative";
102
+ readonly FULL: "full";
103
+ };
104
+ export type SnapshotProjection = (typeof SNAPSHOT_PROJECTIONS)[keyof typeof SNAPSHOT_PROJECTIONS];
105
+ /** Window — keep the last `size` entries. Pure rule, no LLM, no embedder. */
106
+ export interface WindowStrategy {
107
+ readonly kind: typeof MEMORY_STRATEGIES.WINDOW;
108
+ readonly size: number;
109
+ }
110
+ /**
111
+ * Budget — pick entries that fit within a token budget. Used as a
112
+ * decider stage: skip-if-empty | skip-if-no-budget | pick-by-tokens.
113
+ */
114
+ export interface BudgetStrategy {
115
+ readonly kind: typeof MEMORY_STRATEGIES.BUDGET;
116
+ /** Reserve N tokens for prompt headers / new user message. Default 256. */
117
+ readonly reserveTokens?: number;
118
+ /** Skip injection below this token floor. Default 100. */
119
+ readonly minimumTokens?: number;
120
+ /** Hard cap on entries to inject — guards against "lost-in-the-middle". */
121
+ readonly maxEntries?: number;
122
+ }
123
+ /**
124
+ * Summarize — when the conversation grows long, an LLM compresses older
125
+ * turns into a paragraph; recent N turns stay raw. The standard answer
126
+ * to "long conversations blow context."
127
+ */
128
+ export interface SummarizeStrategy {
129
+ readonly kind: typeof MEMORY_STRATEGIES.SUMMARIZE;
130
+ /** Keep this many most-recent turns uncompressed. */
131
+ readonly recent: number;
132
+ /** LLM that does the compression — recommend a cheap model (haiku). */
133
+ readonly llm: LLMProvider;
134
+ }
135
+ /**
136
+ * Top-K — embed the user's query, retrieve top-K by cosine similarity.
137
+ * STRICT threshold: when no entry meets the threshold, return EMPTY.
138
+ * No fallback — garbage in context is worse than no memory.
139
+ */
140
+ export interface TopKStrategy {
141
+ readonly kind: typeof MEMORY_STRATEGIES.TOP_K;
142
+ readonly topK: number;
143
+ /** Min cosine similarity. Strict — no fallback below this. Default 0.7. */
144
+ readonly threshold?: number;
145
+ readonly embedder: Embedder;
146
+ }
147
+ /**
148
+ * Extract — on WRITE, an LLM (or pattern matcher) distills entries from
149
+ * raw messages into structured shapes (facts/beats). Usually paired with
150
+ * a load-side strategy like TopK or Window for the read direction.
151
+ */
152
+ export interface ExtractStrategy {
153
+ readonly kind: typeof MEMORY_STRATEGIES.EXTRACT;
154
+ /** Pattern-based (regex heuristics, free) or LLM-based (paid). */
155
+ readonly extractor: 'pattern' | 'llm';
156
+ /** Required when `extractor: 'llm'`. */
157
+ readonly llm?: LLMProvider;
158
+ /** Discard extractions below this confidence. Default 0.7. */
159
+ readonly minConfidence?: number;
160
+ /** Cap entries extracted per turn. Default 5. */
161
+ readonly maxPerTurn?: number;
162
+ }
163
+ /**
164
+ * Decay — score entries by `recency × accessCount`, drop below floor.
165
+ * For long-running agents where unused memory should fade.
166
+ */
167
+ export interface DecayStrategy {
168
+ readonly kind: typeof MEMORY_STRATEGIES.DECAY;
169
+ /** Half-life in milliseconds for the recency component. */
170
+ readonly halfLifeMs: number;
171
+ /** Drop entries scoring below this. Default 0.1. */
172
+ readonly minScore?: number;
173
+ }
174
+ /**
175
+ * Hybrid — compose multiple strategies. Each sub-strategy runs as its
176
+ * own selector branch; results are merged in the order listed.
177
+ */
178
+ export interface HybridStrategy {
179
+ readonly kind: typeof MEMORY_STRATEGIES.HYBRID;
180
+ readonly strategies: ReadonlyArray<Exclude<Strategy, HybridStrategy>>;
181
+ }
182
+ /** The full strategy union — discriminated by `kind`. */
183
+ export type Strategy = WindowStrategy | BudgetStrategy | SummarizeStrategy | TopKStrategy | ExtractStrategy | DecayStrategy | HybridStrategy;
184
+ /**
185
+ * Reserved API surface for content redaction before memory writes.
186
+ * Impl is deferred; the field exists now so adding redaction later
187
+ * is non-breaking. Snapshot/episodic writes may carry PII — this is
188
+ * the integration point.
189
+ */
190
+ export interface MemoryRedactionPolicy {
191
+ /** Patterns to mask in stored content. */
192
+ readonly patterns?: readonly RegExp[];
193
+ /** Replacement string. Default `'[REDACTED]'`. */
194
+ readonly replacement?: string;
195
+ }
196
+ /**
197
+ * The opaque value `defineMemory()` returns. `Agent.memory()` consumes
198
+ * one of these per memory the consumer registers; multiple definitions
199
+ * layer cleanly via per-id scope keys (`memoryInjection_${id}`).
200
+ *
201
+ * Generic `T` is the payload shape stored — `Message` for episodic,
202
+ * `Fact` for semantic, `NarrativeBeat` for narrative, `RunSnapshot` for
203
+ * causal. The factory infers `T` from `type`.
204
+ */
205
+ export interface MemoryDefinition<T = unknown> {
206
+ /** Stable identifier. Becomes the scope-key suffix and the Lens label. */
207
+ readonly id: string;
208
+ /** Surfaces in narrative / Lens hover. */
209
+ readonly description?: string;
210
+ /** Which TYPE shape — gates legal STRATEGY combinations. */
211
+ readonly type: MemoryType;
212
+ /** Compiled read subflow (built by the factory from type × strategy). */
213
+ readonly read: ReadonlyMemoryFlowChart<T>;
214
+ /** Compiled write subflow. Optional — `EPHEMERAL`-style configs omit. */
215
+ readonly write?: ReadonlyMemoryFlowChart<T>;
216
+ /** When `read` runs. Default `TURN_START`. */
217
+ readonly timing: MemoryTiming;
218
+ /** Role to use when injecting formatted content into the messages slot. */
219
+ readonly asRole: ContextRole;
220
+ /** Reserved for a future release — patterns to redact before write. */
221
+ readonly redact?: MemoryRedactionPolicy;
222
+ /** Snapshot projection — only meaningful when `type === CAUSAL`. */
223
+ readonly projection?: SnapshotProjection;
224
+ }
225
+ /**
226
+ * Opaque tag for the compiled flowchart the factory hands back.
227
+ * The actual type is `FlowChart<MemoryState>` from footprintjs but we
228
+ * keep it nominal here so consumers can't reach in. The phantom type
229
+ * parameter is preserved so consumers can write `ReadonlyMemoryFlowChart<MyShape>`
230
+ * for documentation, even though the brand erases the parameter at runtime.
231
+ */
232
+ export type ReadonlyMemoryFlowChart<_T> = {
233
+ readonly __brand: 'ReadonlyMemoryFlowChart';
234
+ };
235
+ /**
236
+ * Common options for every memory type. Type-specific options layer on
237
+ * top via discriminated `type` field in the next overload set (Step 2).
238
+ */
239
+ export interface DefineMemoryOptionsBase {
240
+ readonly id: string;
241
+ readonly description?: string;
242
+ readonly store: MemoryStore;
243
+ readonly strategy: Strategy;
244
+ readonly timing?: MemoryTiming;
245
+ readonly asRole?: ContextRole;
246
+ readonly redact?: MemoryRedactionPolicy;
247
+ }
248
+ export interface DefineEpisodicOptions extends DefineMemoryOptionsBase {
249
+ readonly type: typeof MEMORY_TYPES.EPISODIC;
250
+ }
251
+ export interface DefineSemanticOptions extends DefineMemoryOptionsBase {
252
+ readonly type: typeof MEMORY_TYPES.SEMANTIC;
253
+ }
254
+ export interface DefineNarrativeOptions extends DefineMemoryOptionsBase {
255
+ readonly type: typeof MEMORY_TYPES.NARRATIVE;
256
+ }
257
+ export interface DefineCausalOptions extends DefineMemoryOptionsBase {
258
+ readonly type: typeof MEMORY_TYPES.CAUSAL;
259
+ /** Slice of the snapshot to inject. Default `DECISIONS`. */
260
+ readonly projection?: SnapshotProjection;
261
+ }
262
+ /** Discriminated by `type`. The factory uses this to pick the pipeline. */
263
+ export type DefineMemoryOptions = DefineEpisodicOptions | DefineSemanticOptions | DefineNarrativeOptions | DefineCausalOptions;
264
+ export declare function isMemoryType(value: string): value is MemoryType;
265
+ export declare function isMemoryStrategyKind(value: string): value is MemoryStrategyKind;
266
+ export declare function isMemoryTiming(value: string): value is MemoryTiming;
267
+ export declare function isSnapshotProjection(value: string): value is SnapshotProjection;
268
+ /**
269
+ * Scope-key prefix used when mounting multiple `.memory()` definitions
270
+ * on the same Agent. Each memory writes to `memoryInjection_${id}` so
271
+ * registrations never collide. Formatter merges all keys with this
272
+ * prefix in registration order.
273
+ */
274
+ export declare const MEMORY_INJECTION_KEY_PREFIX: "memoryInjection_";
275
+ export declare function memoryInjectionKey(id: string): string;
276
+ export declare function isMemoryInjectionKey(key: string): boolean;
@@ -33,7 +33,7 @@
33
33
  * when its read subflow places content into the messages slot.
34
34
  *
35
35
  * @see ./define.ts for the `defineMemory()` factory itself
36
- * @see ../../docs-site for guides + the 7 strategy examples
36
+ * @see ../../docs-next for guides + the 7 strategy examples
37
37
  * @see MEMORY.md for the load-bearing design memory
38
38
  */
39
39
  // ─── Const-objects (SSOT) ───────────────────────────────────────────
@@ -0,0 +1,18 @@
1
+ /**
2
+ * cosineSimilarity — the similarity metric used by `store.search()`.
3
+ *
4
+ * cos(a, b) = dot(a, b) / (||a|| * ||b||)
5
+ *
6
+ * Range: [-1, 1]. Equal-direction vectors → 1. Orthogonal → 0.
7
+ * Opposite → -1.
8
+ *
9
+ * Zero-magnitude handling: if either vector is all-zero (or the empty
10
+ * vector), returns 0 — never NaN. NaN in a similarity score would
11
+ * poison downstream picker comparisons (NaN < x is false for all x)
12
+ * and silently demote the entry. Explicit 0 is safer.
13
+ *
14
+ * Length mismatch THROWS: comparing vectors of different dimensions
15
+ * is almost always a bug (different embedders mixed in the same store).
16
+ * Fail loud rather than silently truncate.
17
+ */
18
+ export declare function cosineSimilarity(a: readonly number[], b: readonly number[]): number;
@@ -0,0 +1,58 @@
1
+ /**
2
+ * embedMessages — write-side stage that attaches an embedding vector
3
+ * to each `MemoryEntry` in `scope.newMessages` before persistence.
4
+ *
5
+ * Reads from scope: `newMessages` (Message[]) — same input as writeMessages
6
+ * Writes to scope: `newMessages` (with entries pre-wrapped — see note)
7
+ *
8
+ * Note on composition:
9
+ * Unlike the `extractBeats → writeBeats` pair (which produces fully
10
+ * wrapped `MemoryEntry<NarrativeBeat>[]`), `embedMessages` runs
11
+ * AFTER a packaging step and BEFORE `writeMessages`. The simplest
12
+ * shape is: stage writes `scope.newMessageEmbeddings: number[][]`
13
+ * — one vector per message — and `writeMessages` merges it into the
14
+ * entries it builds.
15
+ *
16
+ * We take the cleaner path: embed here, write the embeddings to
17
+ * scope as a parallel array keyed by message index, and extend
18
+ * `writeMessages` to pick them up. No reshuffle of the existing
19
+ * write stage's contract.
20
+ */
21
+ import type { TypedScope } from 'footprintjs';
22
+ import type { Embedder } from './types.js';
23
+ import type { LLMMessage as Message } from '../../adapters/types.js';
24
+ import type { MemoryState } from '../stages/index.js';
25
+ /** Extend MemoryState to carry per-message embeddings for writeMessages. */
26
+ export interface EmbedMessagesState extends MemoryState {
27
+ /**
28
+ * Per-message embedding vectors, indexed by position in `newMessages`.
29
+ * Produced by `embedMessages`; consumed by `writeMessages` when the
30
+ * pipeline is a semantic one.
31
+ */
32
+ newMessageEmbeddings?: readonly (readonly number[])[];
33
+ /** Identifier of the embedder — carried onto entries for model-mismatch guards. */
34
+ newMessageEmbeddingModel?: string;
35
+ }
36
+ export interface EmbedMessagesConfig {
37
+ /** The embedder to call. Typically OpenAI / Voyage / Cohere / custom. */
38
+ readonly embedder: Embedder;
39
+ /**
40
+ * Identifier for the embedder — stored on each entry's
41
+ * `embeddingModel` so `store.search({ embedderId })` can guard
42
+ * against cross-model pollution. Use a stable string like
43
+ * `"openai-text-embedding-3-small"`.
44
+ */
45
+ readonly embedderId?: string;
46
+ /**
47
+ * Pull the text to embed from a message. Default: extracts the
48
+ * message content as a string (supports both `string` content and
49
+ * `[{ type: 'text', text: ... }]` block arrays).
50
+ */
51
+ readonly textFrom?: (message: Message) => string;
52
+ }
53
+ /**
54
+ * Build the `embedMessages` stage. Prefers `embedBatch()` when the
55
+ * embedder implements it (one round-trip for the whole turn), otherwise
56
+ * falls back to N sequential `embed()` calls.
57
+ */
58
+ export declare function embedMessages(config: EmbedMessagesConfig): (scope: TypedScope<EmbedMessagesState>) => Promise<void>;
@@ -0,0 +1,8 @@
1
+ export type { Embedder, EmbedArgs, EmbedBatchArgs } from './types.js';
2
+ export { cosineSimilarity } from './cosine.js';
3
+ export { mockEmbedder } from './mockEmbedder.js';
4
+ export type { MockEmbedderOptions } from './mockEmbedder.js';
5
+ export { embedMessages } from './embedMessages.js';
6
+ export type { EmbedMessagesConfig, EmbedMessagesState } from './embedMessages.js';
7
+ export { loadRelevant } from './loadRelevant.js';
8
+ export type { LoadRelevantConfig } from './loadRelevant.js';
@@ -0,0 +1,51 @@
1
+ /**
2
+ * loadRelevant — read-side stage that embeds a query and fetches the
3
+ * top-k most similar entries from a vector-capable `MemoryStore`.
4
+ *
5
+ * Reads from scope: `identity`, `newMessages` (or custom queryFrom)
6
+ * Writes to scope: `loaded` (MemoryEntry[], ordered best-first — to be
7
+ * narrowed by `pickByBudget` downstream)
8
+ *
9
+ * Query derivation:
10
+ * Default: the last user message in `newMessages`. That's the natural
11
+ * "what is the user asking about?" signal. Override with `queryFrom`
12
+ * for custom retrieval (e.g., compose user + assistant content,
13
+ * pull a summary, etc.).
14
+ *
15
+ * Empty behavior:
16
+ * No query text → no search → `loaded = []`. Downstream
17
+ * `pickByBudget` picks nothing and the formatter emits nothing — safe.
18
+ *
19
+ * Feature detection:
20
+ * Throws at stage build time if the store doesn't implement
21
+ * `search()`. Fail-loud — a semantic pipeline configured against a
22
+ * non-vector store is a config bug, not a runtime condition.
23
+ */
24
+ import type { TypedScope } from 'footprintjs';
25
+ import type { MemoryStore } from '../store/index.js';
26
+ import type { MemoryState } from '../stages/index.js';
27
+ import type { Embedder } from './types.js';
28
+ export interface LoadRelevantConfig {
29
+ /** The vector-capable store. Must implement `search()`. */
30
+ readonly store: MemoryStore;
31
+ /** Embedder used to turn the query text into a vector. */
32
+ readonly embedder: Embedder;
33
+ /**
34
+ * Identifier for the embedder. When set, the search filters entries
35
+ * to those produced by the same embedder (prevents cross-model
36
+ * similarity pollution).
37
+ */
38
+ readonly embedderId?: string;
39
+ /** Top-k to retrieve. Default 20 — picker will narrow further by budget. */
40
+ readonly k?: number;
41
+ /** Minimum cosine score [-1, 1] to consider a match. Default: none. */
42
+ readonly minScore?: number;
43
+ /** Filter results by tier. */
44
+ readonly tiers?: ReadonlyArray<'hot' | 'warm' | 'cold'>;
45
+ /**
46
+ * Extract the query text from scope. Default: the last user message
47
+ * in `newMessages`. Override for custom retrieval signals.
48
+ */
49
+ readonly queryFrom?: (scope: TypedScope<MemoryState>) => string;
50
+ }
51
+ export declare function loadRelevant(config: LoadRelevantConfig): (scope: TypedScope<MemoryState>) => Promise<void>;
@@ -0,0 +1,22 @@
1
+ /**
2
+ * mockEmbedder — deterministic character-frequency embedder for tests.
3
+ *
4
+ * Produces a vector of length `dimensions` (default 32) where each
5
+ * coordinate is the count of characters whose code-point modulo
6
+ * `dimensions` lands on that index. Same text → same vector always,
7
+ * and texts that share characters have elevated cosine similarity.
8
+ *
9
+ * This is good enough for testing pipeline plumbing and basic
10
+ * retrieval semantics (e.g. "dogs" retrieves beats mentioning "dog"
11
+ * over beats mentioning "car"). It is NOT a real embedder — do not
12
+ * use for anything consumer-facing.
13
+ */
14
+ import type { Embedder } from './types.js';
15
+ export interface MockEmbedderOptions {
16
+ readonly dimensions?: number;
17
+ }
18
+ /**
19
+ * Build a deterministic mock embedder. Same text always yields the
20
+ * same vector; texts sharing characters share cosine similarity.
21
+ */
22
+ export declare function mockEmbedder(options?: MockEmbedderOptions): Embedder;
@@ -0,0 +1,46 @@
1
+ /**
2
+ * Embedder — text-to-vector abstraction.
3
+ *
4
+ * Pluggable interface: consumers bring their own embedding backend
5
+ * (OpenAI, Voyage, Cohere, Sentence Transformers, a local model, a
6
+ * custom rules-based hashing scheme, etc.). The library ships
7
+ * `mockEmbedder()` for tests — no default real embedder, since LLM
8
+ * providers' embedding APIs are not uniform (Anthropic doesn't
9
+ * publish one at all).
10
+ *
11
+ * An embedder is configured once (model + api key + dims) and reused
12
+ * across many turns. `dimensions` is a constant per instance — mixing
13
+ * embedders of different dims within the same `MemoryStore` breaks
14
+ * cosine similarity, so adapters should reject mismatched sizes.
15
+ */
16
+ export interface EmbedArgs {
17
+ /** The text to embed. */
18
+ readonly text: string;
19
+ /**
20
+ * Optional abort signal — embedders making network calls should
21
+ * thread this through to respect run-level timeouts.
22
+ */
23
+ readonly signal?: AbortSignal;
24
+ }
25
+ export interface EmbedBatchArgs {
26
+ readonly texts: readonly string[];
27
+ readonly signal?: AbortSignal;
28
+ }
29
+ /**
30
+ * An Embedder turns text into a dense vector of constant dimensionality.
31
+ * Implement `embedBatch` for backends that support one-call multi-embed
32
+ * (OpenAI / Voyage / etc.) — without it, batch callers fall back to
33
+ * N sequential `embed()` calls.
34
+ */
35
+ export interface Embedder {
36
+ /** Vector length. Constant per embedder instance. */
37
+ readonly dimensions: number;
38
+ /** Embed a single text into a vector of length `dimensions`. */
39
+ embed(args: EmbedArgs): Promise<number[]>;
40
+ /**
41
+ * Optional batch API. When present, pipeline stages can avoid N
42
+ * sequential round-trips for turn-level indexing. Adapter SHOULD
43
+ * implement when the backend supports it.
44
+ */
45
+ embedBatch?(args: EmbedBatchArgs): Promise<number[][]>;
46
+ }
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Decay computation — pure function.
3
+ *
4
+ * Applied by retrieval stages to compute an entry's effective relevance at
5
+ * read time. Never mutates the entry; only returns a scaling factor in
6
+ * `[0, +∞)` that stages apply to their existing score.
7
+ *
8
+ * Model:
9
+ * factor = exp(-ln2 · Δt / halfLife) · min(accessBoost^accessCount, MAX_BOOST)
10
+ *
11
+ * The time term is exponential decay (half after one half-life). The access
12
+ * term is multiplicative — each read of an entry boosts its future
13
+ * relevance. `MAX_BOOST_MULTIPLIER` caps runaway boosting so a frequently-
14
+ * read but old entry doesn't crowd out newer relevant entries indefinitely.
15
+ */
16
+ import type { DecayPolicy, MemoryEntry } from './types.js';
17
+ /**
18
+ * Compute the decay factor for an entry at a given moment.
19
+ *
20
+ * @param entry The memory entry to score. Must have `lastAccessedAt` and
21
+ * `accessCount` set (storage adapters populate these).
22
+ * @param now The reference time (unix ms). Defaults to `Date.now()`.
23
+ * @param policy Optional override — when omitted, uses `entry.decayPolicy`.
24
+ * Stages can pass a stage-wide default so entries without a
25
+ * per-entry policy still decay consistently. If neither is
26
+ * set, returns 1.0 (no decay applied).
27
+ *
28
+ * @returns Scaling factor in `[0, MAX_BOOST_MULTIPLIER]` — stages multiply
29
+ * this against their existing relevance score.
30
+ */
31
+ export declare function computeDecayFactor(entry: Pick<MemoryEntry, 'lastAccessedAt' | 'accessCount' | 'decayPolicy'>, now?: number, policy?: DecayPolicy): number;
32
+ /**
33
+ * Compute decay for multiple entries in one call. Order-preserving; returns
34
+ * one factor per entry. Convenience for stages that rank whole batches.
35
+ */
36
+ export declare function computeDecayFactors(entries: readonly Pick<MemoryEntry, 'lastAccessedAt' | 'accessCount' | 'decayPolicy'>[], now?: number, policy?: DecayPolicy): number[];
@@ -0,0 +1,2 @@
1
+ export type { MemoryEntry, MemorySource, DecayPolicy } from './types.js';
2
+ export { computeDecayFactor, computeDecayFactors } from './decay.js';