@framers/agentos 0.1.46 → 0.1.48
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 +7 -7
- package/dist/cognitive_substrate/IGMI.d.ts +2 -0
- package/dist/cognitive_substrate/IGMI.d.ts.map +1 -1
- package/dist/cognitive_substrate/IGMI.js.map +1 -1
- package/dist/cognitive_substrate/personas/IPersonaDefinition.d.ts +2 -0
- package/dist/cognitive_substrate/personas/IPersonaDefinition.d.ts.map +1 -1
- package/dist/core/audio/AdaptiveVAD.d.ts +147 -0
- package/dist/core/audio/AdaptiveVAD.d.ts.map +1 -0
- package/dist/core/audio/AdaptiveVAD.js +239 -0
- package/dist/core/audio/AdaptiveVAD.js.map +1 -0
- package/dist/core/audio/AudioProcessor.d.ts +121 -0
- package/dist/core/audio/AudioProcessor.d.ts.map +1 -0
- package/dist/core/audio/AudioProcessor.js +299 -0
- package/dist/core/audio/AudioProcessor.js.map +1 -0
- package/dist/core/audio/EnvironmentalCalibrator.d.ts +187 -0
- package/dist/core/audio/EnvironmentalCalibrator.d.ts.map +1 -0
- package/dist/core/audio/EnvironmentalCalibrator.js +360 -0
- package/dist/core/audio/EnvironmentalCalibrator.js.map +1 -0
- package/dist/core/audio/SilenceDetector.d.ts +111 -0
- package/dist/core/audio/SilenceDetector.d.ts.map +1 -0
- package/dist/core/audio/SilenceDetector.js +178 -0
- package/dist/core/audio/SilenceDetector.js.map +1 -0
- package/dist/core/llm/IPromptEngine.d.ts +2 -0
- package/dist/core/llm/IPromptEngine.d.ts.map +1 -1
- package/dist/core/llm/IPromptEngine.js.map +1 -1
- package/dist/core/llm/providers/implementations/OllamaProvider.js +2 -2
- package/dist/core/llm/providers/implementations/OllamaProvider.js.map +1 -1
- package/dist/core/llm/providers/implementations/OpenAIProvider.d.ts.map +1 -1
- package/dist/core/llm/providers/implementations/OpenAIProvider.js +8 -1
- package/dist/core/llm/providers/implementations/OpenAIProvider.js.map +1 -1
- package/dist/discovery/CapabilityIndex.d.ts.map +1 -1
- package/dist/discovery/CapabilityIndex.js +18 -4
- package/dist/discovery/CapabilityIndex.js.map +1 -1
- package/dist/extensions/ExtensionManager.d.ts.map +1 -1
- package/dist/extensions/ExtensionManager.js +9 -1
- package/dist/extensions/ExtensionManager.js.map +1 -1
- package/dist/extensions/types.d.ts +20 -2
- package/dist/extensions/types.d.ts.map +1 -1
- package/dist/extensions/types.js +4 -0
- package/dist/extensions/types.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/memory/CognitiveMemoryManager.d.ts +133 -0
- package/dist/memory/CognitiveMemoryManager.d.ts.map +1 -0
- package/dist/memory/CognitiveMemoryManager.js +519 -0
- package/dist/memory/CognitiveMemoryManager.js.map +1 -0
- package/dist/memory/config.d.ts +135 -0
- package/dist/memory/config.d.ts.map +1 -0
- package/dist/memory/config.js +28 -0
- package/dist/memory/config.js.map +1 -0
- package/dist/memory/consolidation/ConsolidationPipeline.d.ts +70 -0
- package/dist/memory/consolidation/ConsolidationPipeline.d.ts.map +1 -0
- package/dist/memory/consolidation/ConsolidationPipeline.js +301 -0
- package/dist/memory/consolidation/ConsolidationPipeline.js.map +1 -0
- package/dist/memory/context/CompactionEngine.d.ts +21 -0
- package/dist/memory/context/CompactionEngine.d.ts.map +1 -0
- package/dist/memory/context/CompactionEngine.js +35 -0
- package/dist/memory/context/CompactionEngine.js.map +1 -0
- package/dist/memory/context/CompactionLog.d.ts +50 -0
- package/dist/memory/context/CompactionLog.d.ts.map +1 -0
- package/dist/memory/context/CompactionLog.js +139 -0
- package/dist/memory/context/CompactionLog.js.map +1 -0
- package/dist/memory/context/ContextWindowManager.d.ts +114 -0
- package/dist/memory/context/ContextWindowManager.d.ts.map +1 -0
- package/dist/memory/context/ContextWindowManager.js +225 -0
- package/dist/memory/context/ContextWindowManager.js.map +1 -0
- package/dist/memory/context/RollingSummaryChain.d.ts +53 -0
- package/dist/memory/context/RollingSummaryChain.d.ts.map +1 -0
- package/dist/memory/context/RollingSummaryChain.js +193 -0
- package/dist/memory/context/RollingSummaryChain.js.map +1 -0
- package/dist/memory/context/index.d.ts +15 -0
- package/dist/memory/context/index.d.ts.map +1 -0
- package/dist/memory/context/index.js +14 -0
- package/dist/memory/context/index.js.map +1 -0
- package/dist/memory/context/strategies/HierarchicalStrategy.d.ts +25 -0
- package/dist/memory/context/strategies/HierarchicalStrategy.d.ts.map +1 -0
- package/dist/memory/context/strategies/HierarchicalStrategy.js +240 -0
- package/dist/memory/context/strategies/HierarchicalStrategy.js.map +1 -0
- package/dist/memory/context/strategies/HybridStrategy.d.ts +26 -0
- package/dist/memory/context/strategies/HybridStrategy.d.ts.map +1 -0
- package/dist/memory/context/strategies/HybridStrategy.js +245 -0
- package/dist/memory/context/strategies/HybridStrategy.js.map +1 -0
- package/dist/memory/context/strategies/SlidingSummaryStrategy.d.ts +22 -0
- package/dist/memory/context/strategies/SlidingSummaryStrategy.d.ts.map +1 -0
- package/dist/memory/context/strategies/SlidingSummaryStrategy.js +203 -0
- package/dist/memory/context/strategies/SlidingSummaryStrategy.js.map +1 -0
- package/dist/memory/context/types.d.ts +120 -0
- package/dist/memory/context/types.d.ts.map +1 -0
- package/dist/memory/context/types.js +17 -0
- package/dist/memory/context/types.js.map +1 -0
- package/dist/memory/decay/DecayModel.d.ts +87 -0
- package/dist/memory/decay/DecayModel.d.ts.map +1 -0
- package/dist/memory/decay/DecayModel.js +117 -0
- package/dist/memory/decay/DecayModel.js.map +1 -0
- package/dist/memory/decay/RetrievalPriorityScorer.d.ts +63 -0
- package/dist/memory/decay/RetrievalPriorityScorer.d.ts.map +1 -0
- package/dist/memory/decay/RetrievalPriorityScorer.js +110 -0
- package/dist/memory/decay/RetrievalPriorityScorer.js.map +1 -0
- package/dist/memory/encoding/ContentFeatureDetector.d.ts +37 -0
- package/dist/memory/encoding/ContentFeatureDetector.d.ts.map +1 -0
- package/dist/memory/encoding/ContentFeatureDetector.js +176 -0
- package/dist/memory/encoding/ContentFeatureDetector.js.map +1 -0
- package/dist/memory/encoding/EncodingModel.d.ts +67 -0
- package/dist/memory/encoding/EncodingModel.d.ts.map +1 -0
- package/dist/memory/encoding/EncodingModel.js +171 -0
- package/dist/memory/encoding/EncodingModel.js.map +1 -0
- package/dist/memory/extension/CognitiveMemoryExtension.d.ts +18 -0
- package/dist/memory/extension/CognitiveMemoryExtension.d.ts.map +1 -0
- package/dist/memory/extension/CognitiveMemoryExtension.js +131 -0
- package/dist/memory/extension/CognitiveMemoryExtension.js.map +1 -0
- package/dist/memory/graph/GraphologyMemoryGraph.d.ts +29 -0
- package/dist/memory/graph/GraphologyMemoryGraph.d.ts.map +1 -0
- package/dist/memory/graph/GraphologyMemoryGraph.js +224 -0
- package/dist/memory/graph/GraphologyMemoryGraph.js.map +1 -0
- package/dist/memory/graph/IMemoryGraph.d.ts +70 -0
- package/dist/memory/graph/IMemoryGraph.d.ts.map +1 -0
- package/dist/memory/graph/IMemoryGraph.js +15 -0
- package/dist/memory/graph/IMemoryGraph.js.map +1 -0
- package/dist/memory/graph/KnowledgeGraphMemoryGraph.d.ts +38 -0
- package/dist/memory/graph/KnowledgeGraphMemoryGraph.d.ts.map +1 -0
- package/dist/memory/graph/KnowledgeGraphMemoryGraph.js +264 -0
- package/dist/memory/graph/KnowledgeGraphMemoryGraph.js.map +1 -0
- package/dist/memory/graph/SpreadingActivation.d.ts +36 -0
- package/dist/memory/graph/SpreadingActivation.d.ts.map +1 -0
- package/dist/memory/graph/SpreadingActivation.js +100 -0
- package/dist/memory/graph/SpreadingActivation.js.map +1 -0
- package/dist/memory/index.d.ts +52 -0
- package/dist/memory/index.d.ts.map +1 -0
- package/dist/memory/index.js +43 -0
- package/dist/memory/index.js.map +1 -0
- package/dist/memory/observation/MemoryObserver.d.ts +59 -0
- package/dist/memory/observation/MemoryObserver.d.ts.map +1 -0
- package/dist/memory/observation/MemoryObserver.js +136 -0
- package/dist/memory/observation/MemoryObserver.js.map +1 -0
- package/dist/memory/observation/MemoryReflector.d.ts +51 -0
- package/dist/memory/observation/MemoryReflector.d.ts.map +1 -0
- package/dist/memory/observation/MemoryReflector.js +184 -0
- package/dist/memory/observation/MemoryReflector.js.map +1 -0
- package/dist/memory/observation/ObservationBuffer.d.ts +51 -0
- package/dist/memory/observation/ObservationBuffer.d.ts.map +1 -0
- package/dist/memory/observation/ObservationBuffer.js +81 -0
- package/dist/memory/observation/ObservationBuffer.js.map +1 -0
- package/dist/memory/prompt/MemoryFormatters.d.ts +22 -0
- package/dist/memory/prompt/MemoryFormatters.d.ts.map +1 -0
- package/dist/memory/prompt/MemoryFormatters.js +113 -0
- package/dist/memory/prompt/MemoryFormatters.js.map +1 -0
- package/dist/memory/prompt/MemoryPromptAssembler.d.ts +40 -0
- package/dist/memory/prompt/MemoryPromptAssembler.d.ts.map +1 -0
- package/dist/memory/prompt/MemoryPromptAssembler.js +180 -0
- package/dist/memory/prompt/MemoryPromptAssembler.js.map +1 -0
- package/dist/memory/prospective/ProspectiveMemoryManager.d.ts +83 -0
- package/dist/memory/prospective/ProspectiveMemoryManager.d.ts.map +1 -0
- package/dist/memory/prospective/ProspectiveMemoryManager.js +128 -0
- package/dist/memory/prospective/ProspectiveMemoryManager.js.map +1 -0
- package/dist/memory/store/MemoryStore.d.ts +76 -0
- package/dist/memory/store/MemoryStore.d.ts.map +1 -0
- package/dist/memory/store/MemoryStore.js +320 -0
- package/dist/memory/store/MemoryStore.js.map +1 -0
- package/dist/memory/types.d.ts +184 -0
- package/dist/memory/types.d.ts.map +1 -0
- package/dist/memory/types.js +14 -0
- package/dist/memory/types.js.map +1 -0
- package/dist/memory/working/CognitiveWorkingMemory.d.ts +87 -0
- package/dist/memory/working/CognitiveWorkingMemory.d.ts.map +1 -0
- package/dist/memory/working/CognitiveWorkingMemory.js +230 -0
- package/dist/memory/working/CognitiveWorkingMemory.js.map +1 -0
- package/dist/rag/EmbeddingManager.d.ts.map +1 -1
- package/dist/rag/EmbeddingManager.js +8 -1
- package/dist/rag/EmbeddingManager.js.map +1 -1
- package/dist/rag/HydeRetriever.d.ts +111 -0
- package/dist/rag/HydeRetriever.d.ts.map +1 -0
- package/dist/rag/HydeRetriever.js +143 -0
- package/dist/rag/HydeRetriever.js.map +1 -0
- package/dist/rag/IRetrievalAugmentor.d.ts +15 -0
- package/dist/rag/IRetrievalAugmentor.d.ts.map +1 -1
- package/dist/rag/index.d.ts +1 -0
- package/dist/rag/index.d.ts.map +1 -1
- package/dist/rag/index.js +2 -0
- package/dist/rag/index.js.map +1 -1
- package/dist/speech/SpeechProviderRegistry.d.ts +17 -0
- package/dist/speech/SpeechProviderRegistry.d.ts.map +1 -0
- package/dist/speech/SpeechProviderRegistry.js +47 -0
- package/dist/speech/SpeechProviderRegistry.js.map +1 -0
- package/dist/speech/SpeechRuntime.d.ts +30 -0
- package/dist/speech/SpeechRuntime.d.ts.map +1 -0
- package/dist/speech/SpeechRuntime.js +156 -0
- package/dist/speech/SpeechRuntime.js.map +1 -0
- package/dist/speech/SpeechSession.d.ts +37 -0
- package/dist/speech/SpeechSession.d.ts.map +1 -0
- package/dist/speech/SpeechSession.js +285 -0
- package/dist/speech/SpeechSession.js.map +1 -0
- package/dist/speech/audio.d.ts +3 -0
- package/dist/speech/audio.d.ts.map +1 -0
- package/dist/speech/audio.js +39 -0
- package/dist/speech/audio.js.map +1 -0
- package/dist/speech/index.d.ts +11 -0
- package/dist/speech/index.d.ts.map +1 -0
- package/dist/speech/index.js +11 -0
- package/dist/speech/index.js.map +1 -0
- package/dist/speech/providerCatalog.d.ts +7 -0
- package/dist/speech/providerCatalog.d.ts.map +1 -0
- package/dist/speech/providerCatalog.js +243 -0
- package/dist/speech/providerCatalog.js.map +1 -0
- package/dist/speech/providers/BuiltInAdaptiveVadProvider.d.ts +20 -0
- package/dist/speech/providers/BuiltInAdaptiveVadProvider.d.ts.map +1 -0
- package/dist/speech/providers/BuiltInAdaptiveVadProvider.js +29 -0
- package/dist/speech/providers/BuiltInAdaptiveVadProvider.js.map +1 -0
- package/dist/speech/providers/ElevenLabsTextToSpeechProvider.d.ts +20 -0
- package/dist/speech/providers/ElevenLabsTextToSpeechProvider.d.ts.map +1 -0
- package/dist/speech/providers/ElevenLabsTextToSpeechProvider.js +95 -0
- package/dist/speech/providers/ElevenLabsTextToSpeechProvider.js.map +1 -0
- package/dist/speech/providers/OpenAITextToSpeechProvider.d.ts +20 -0
- package/dist/speech/providers/OpenAITextToSpeechProvider.d.ts.map +1 -0
- package/dist/speech/providers/OpenAITextToSpeechProvider.js +75 -0
- package/dist/speech/providers/OpenAITextToSpeechProvider.js.map +1 -0
- package/dist/speech/providers/OpenAIWhisperSpeechToTextProvider.d.ts +18 -0
- package/dist/speech/providers/OpenAIWhisperSpeechToTextProvider.d.ts.map +1 -0
- package/dist/speech/providers/OpenAIWhisperSpeechToTextProvider.js +109 -0
- package/dist/speech/providers/OpenAIWhisperSpeechToTextProvider.js.map +1 -0
- package/dist/speech/types.d.ts +272 -0
- package/dist/speech/types.d.ts.map +1 -0
- package/dist/speech/types.js +2 -0
- package/dist/speech/types.js.map +1 -0
- package/package.json +22 -2
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* RollingSummaryChain — Linked chain of conversation summaries.
|
|
3
|
+
*
|
|
4
|
+
* Each compaction produces a summary node. When the chain itself exceeds
|
|
5
|
+
* its token budget, older nodes are re-summarized into higher-level nodes
|
|
6
|
+
* (summary-of-summaries), forming a tree structure:
|
|
7
|
+
*
|
|
8
|
+
* [L2: turns 1-300]
|
|
9
|
+
* ├── [L1: turns 1-120]
|
|
10
|
+
* │ ├── [L0: turns 1-50]
|
|
11
|
+
* │ └── [L0: turns 51-120]
|
|
12
|
+
* └── [L1: turns 121-300]
|
|
13
|
+
* ├── [L0: turns 121-200]
|
|
14
|
+
* └── [L0: turns 201-300]
|
|
15
|
+
*
|
|
16
|
+
* The chain head (highest-level summary covering all compacted turns)
|
|
17
|
+
* is always included in the prompt as "conversation so far".
|
|
18
|
+
*/
|
|
19
|
+
/** Approximate tokens from character count (~4 chars/token). */
|
|
20
|
+
function estimateTokens(text) {
|
|
21
|
+
return Math.ceil(text.length / 4);
|
|
22
|
+
}
|
|
23
|
+
export class RollingSummaryChain {
|
|
24
|
+
constructor(maxBudgetTokens = 2000, llmInvoker) {
|
|
25
|
+
this.nodes = new Map();
|
|
26
|
+
this.maxBudgetTokens = maxBudgetTokens;
|
|
27
|
+
this.llmInvoker = llmInvoker;
|
|
28
|
+
}
|
|
29
|
+
// ── Write ──────────────────────────────────────────────────────────
|
|
30
|
+
/** Add new leaf nodes from a compaction. */
|
|
31
|
+
addNodes(nodes) {
|
|
32
|
+
for (const node of nodes) {
|
|
33
|
+
this.nodes.set(node.id, node);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Collapse the chain if it exceeds the token budget.
|
|
38
|
+
* Merges the oldest leaf nodes into a higher-level summary.
|
|
39
|
+
* Returns any newly created parent nodes.
|
|
40
|
+
*/
|
|
41
|
+
async collapse() {
|
|
42
|
+
const created = [];
|
|
43
|
+
// Keep collapsing while over budget.
|
|
44
|
+
while (this.getTotalTokens() > this.maxBudgetTokens) {
|
|
45
|
+
const leaves = this.getActiveLeaves();
|
|
46
|
+
if (leaves.length <= 1)
|
|
47
|
+
break; // can't compress further
|
|
48
|
+
// Take the 2-4 oldest leaves to merge.
|
|
49
|
+
const toMerge = leaves.slice(0, Math.min(4, leaves.length));
|
|
50
|
+
const parent = await this.mergeNodes(toMerge);
|
|
51
|
+
if (!parent)
|
|
52
|
+
break; // LLM not available, stop
|
|
53
|
+
// Mark children as absorbed.
|
|
54
|
+
for (const child of toMerge) {
|
|
55
|
+
const node = this.nodes.get(child.id);
|
|
56
|
+
if (node)
|
|
57
|
+
node.parentId = parent.id;
|
|
58
|
+
}
|
|
59
|
+
this.nodes.set(parent.id, parent);
|
|
60
|
+
created.push(parent);
|
|
61
|
+
}
|
|
62
|
+
return created;
|
|
63
|
+
}
|
|
64
|
+
// ── Read ───────────────────────────────────────────────────────────
|
|
65
|
+
/** Get the active chain — top-level nodes without parents, sorted by turn range. */
|
|
66
|
+
getActiveChain() {
|
|
67
|
+
return this.getActiveLeaves();
|
|
68
|
+
}
|
|
69
|
+
/** Format the chain for inclusion in a prompt. */
|
|
70
|
+
formatForPrompt() {
|
|
71
|
+
const chain = this.getActiveChain();
|
|
72
|
+
if (chain.length === 0)
|
|
73
|
+
return '';
|
|
74
|
+
const totalTurnRange = [
|
|
75
|
+
chain[0].turnRange[0],
|
|
76
|
+
chain[chain.length - 1].turnRange[1],
|
|
77
|
+
];
|
|
78
|
+
const parts = [
|
|
79
|
+
`[Conversation history — turns ${totalTurnRange[0]}–${totalTurnRange[1]}, compressed]`,
|
|
80
|
+
];
|
|
81
|
+
for (const node of chain) {
|
|
82
|
+
if (chain.length > 1) {
|
|
83
|
+
parts.push(`--- Turns ${node.turnRange[0]}–${node.turnRange[1]} ---`);
|
|
84
|
+
}
|
|
85
|
+
parts.push(node.summary);
|
|
86
|
+
}
|
|
87
|
+
return parts.join('\n');
|
|
88
|
+
}
|
|
89
|
+
/** Total tokens across all active (non-absorbed) nodes. */
|
|
90
|
+
getTotalTokens() {
|
|
91
|
+
return this.getActiveLeaves().reduce((sum, n) => sum + n.tokenEstimate, 0);
|
|
92
|
+
}
|
|
93
|
+
/** Get all nodes (including absorbed children, for audit/UI). */
|
|
94
|
+
getAllNodes() {
|
|
95
|
+
return Array.from(this.nodes.values()).sort((a, b) => a.turnRange[0] - b.turnRange[0]);
|
|
96
|
+
}
|
|
97
|
+
/** Get the full turn range covered by the chain. */
|
|
98
|
+
getCoveredRange() {
|
|
99
|
+
const chain = this.getActiveChain();
|
|
100
|
+
if (chain.length === 0)
|
|
101
|
+
return null;
|
|
102
|
+
return [chain[0].turnRange[0], chain[chain.length - 1].turnRange[1]];
|
|
103
|
+
}
|
|
104
|
+
get size() {
|
|
105
|
+
return this.nodes.size;
|
|
106
|
+
}
|
|
107
|
+
// ── Internal ───────────────────────────────────────────────────────
|
|
108
|
+
/** Active leaves = nodes without a parent, sorted by turn range. */
|
|
109
|
+
getActiveLeaves() {
|
|
110
|
+
return Array.from(this.nodes.values())
|
|
111
|
+
.filter((n) => !n.parentId)
|
|
112
|
+
.sort((a, b) => a.turnRange[0] - b.turnRange[0]);
|
|
113
|
+
}
|
|
114
|
+
/** Merge multiple nodes into a single higher-level summary. */
|
|
115
|
+
async mergeNodes(nodes) {
|
|
116
|
+
if (!this.llmInvoker) {
|
|
117
|
+
// No LLM — fall back to simple concatenation with truncation.
|
|
118
|
+
return this.fallbackMerge(nodes);
|
|
119
|
+
}
|
|
120
|
+
const combinedText = nodes.map((n) => n.summary).join('\n\n');
|
|
121
|
+
const turnRange = [
|
|
122
|
+
nodes[0].turnRange[0],
|
|
123
|
+
nodes[nodes.length - 1].turnRange[1],
|
|
124
|
+
];
|
|
125
|
+
const prompt = [
|
|
126
|
+
'You are a conversation summarizer. Merge the following conversation summaries into a single, more concise summary.',
|
|
127
|
+
'Preserve all key decisions, action items, named entities, and important context.',
|
|
128
|
+
'Drop redundant details and transitional language.',
|
|
129
|
+
`Target: approximately ${Math.ceil(combinedText.length / 4 / 3)} tokens (3:1 compression of input).`,
|
|
130
|
+
'',
|
|
131
|
+
`These summaries cover turns ${turnRange[0]}–${turnRange[1]}:`,
|
|
132
|
+
'',
|
|
133
|
+
combinedText,
|
|
134
|
+
'',
|
|
135
|
+
'Produce ONLY the merged summary, no preamble:',
|
|
136
|
+
].join('\n');
|
|
137
|
+
try {
|
|
138
|
+
const summary = await this.llmInvoker(prompt);
|
|
139
|
+
const allEntities = new Set();
|
|
140
|
+
for (const n of nodes) {
|
|
141
|
+
for (const e of n.entities)
|
|
142
|
+
allEntities.add(e);
|
|
143
|
+
}
|
|
144
|
+
return {
|
|
145
|
+
id: `chain-${Date.now()}-L${(nodes[0].level || 0) + 1}`,
|
|
146
|
+
level: (nodes[0].level || 0) + 1,
|
|
147
|
+
turnRange,
|
|
148
|
+
summary: summary.trim(),
|
|
149
|
+
tokenEstimate: estimateTokens(summary),
|
|
150
|
+
createdAt: Date.now(),
|
|
151
|
+
childIds: nodes.map((n) => n.id),
|
|
152
|
+
entities: Array.from(allEntities),
|
|
153
|
+
compactionEntryId: nodes[0].compactionEntryId,
|
|
154
|
+
};
|
|
155
|
+
}
|
|
156
|
+
catch {
|
|
157
|
+
return this.fallbackMerge(nodes);
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
/** Non-LLM fallback: concatenate and truncate to budget. */
|
|
161
|
+
fallbackMerge(nodes) {
|
|
162
|
+
const combined = nodes.map((n) => n.summary).join(' ');
|
|
163
|
+
// Truncate to roughly half the budget.
|
|
164
|
+
const targetChars = (this.maxBudgetTokens / 2) * 4;
|
|
165
|
+
const truncated = combined.length > targetChars
|
|
166
|
+
? combined.slice(0, targetChars) + '...'
|
|
167
|
+
: combined;
|
|
168
|
+
const allEntities = new Set();
|
|
169
|
+
for (const n of nodes) {
|
|
170
|
+
for (const e of n.entities)
|
|
171
|
+
allEntities.add(e);
|
|
172
|
+
}
|
|
173
|
+
return {
|
|
174
|
+
id: `chain-${Date.now()}-L${(nodes[0].level || 0) + 1}`,
|
|
175
|
+
level: (nodes[0].level || 0) + 1,
|
|
176
|
+
turnRange: [
|
|
177
|
+
nodes[0].turnRange[0],
|
|
178
|
+
nodes[nodes.length - 1].turnRange[1],
|
|
179
|
+
],
|
|
180
|
+
summary: truncated,
|
|
181
|
+
tokenEstimate: estimateTokens(truncated),
|
|
182
|
+
createdAt: Date.now(),
|
|
183
|
+
childIds: nodes.map((n) => n.id),
|
|
184
|
+
entities: Array.from(allEntities),
|
|
185
|
+
compactionEntryId: nodes[0].compactionEntryId,
|
|
186
|
+
};
|
|
187
|
+
}
|
|
188
|
+
/** Reset the chain. */
|
|
189
|
+
clear() {
|
|
190
|
+
this.nodes.clear();
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
//# sourceMappingURL=RollingSummaryChain.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RollingSummaryChain.js","sourceRoot":"","sources":["../../../src/memory/context/RollingSummaryChain.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Infinite Context Window — Module exports.
|
|
3
|
+
*/
|
|
4
|
+
export type { CompactionEntry, CompactionInput, CompactionResult, CompactionStrategy, ContextMessage, ICompactionStrategy, InfiniteContextConfig, SummaryChainNode, TransparencyLevel, } from './types.js';
|
|
5
|
+
export { DEFAULT_INFINITE_CONTEXT_CONFIG } from './types.js';
|
|
6
|
+
export { ContextWindowManager } from './ContextWindowManager.js';
|
|
7
|
+
export type { ContextWindowManagerConfig, ContextWindowStats, } from './ContextWindowManager.js';
|
|
8
|
+
export { CompactionEngine } from './CompactionEngine.js';
|
|
9
|
+
export { CompactionLog } from './CompactionLog.js';
|
|
10
|
+
export type { CompactionLogStats } from './CompactionLog.js';
|
|
11
|
+
export { RollingSummaryChain } from './RollingSummaryChain.js';
|
|
12
|
+
export { SlidingSummaryStrategy } from './strategies/SlidingSummaryStrategy.js';
|
|
13
|
+
export { HierarchicalStrategy } from './strategies/HierarchicalStrategy.js';
|
|
14
|
+
export { HybridStrategy } from './strategies/HybridStrategy.js';
|
|
15
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/memory/context/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,YAAY,EACV,eAAe,EACf,eAAe,EACf,gBAAgB,EAChB,kBAAkB,EAClB,cAAc,EACd,mBAAmB,EACnB,qBAAqB,EACrB,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,+BAA+B,EAAE,MAAM,YAAY,CAAC;AAG7D,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,YAAY,EACV,0BAA0B,EAC1B,kBAAkB,GACnB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,YAAY,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAC7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAG/D,OAAO,EAAE,sBAAsB,EAAE,MAAM,wCAAwC,CAAC;AAChF,OAAO,EAAE,oBAAoB,EAAE,MAAM,sCAAsC,CAAC;AAC5E,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Infinite Context Window — Module exports.
|
|
3
|
+
*/
|
|
4
|
+
export { DEFAULT_INFINITE_CONTEXT_CONFIG } from './types.js';
|
|
5
|
+
// Core
|
|
6
|
+
export { ContextWindowManager } from './ContextWindowManager.js';
|
|
7
|
+
export { CompactionEngine } from './CompactionEngine.js';
|
|
8
|
+
export { CompactionLog } from './CompactionLog.js';
|
|
9
|
+
export { RollingSummaryChain } from './RollingSummaryChain.js';
|
|
10
|
+
// Strategies
|
|
11
|
+
export { SlidingSummaryStrategy } from './strategies/SlidingSummaryStrategy.js';
|
|
12
|
+
export { HierarchicalStrategy } from './strategies/HierarchicalStrategy.js';
|
|
13
|
+
export { HybridStrategy } from './strategies/HybridStrategy.js';
|
|
14
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/memory/context/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAcH,OAAO,EAAE,+BAA+B,EAAE,MAAM,YAAY,CAAC;AAE7D,OAAO;AACP,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAKjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAE/D,aAAa;AACb,OAAO,EAAE,sBAAsB,EAAE,MAAM,wCAAwC,CAAC;AAChF,OAAO,EAAE,oBAAoB,EAAE,MAAM,sCAAsC,CAAC;AAC5E,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HierarchicalStrategy — Multi-level summary tree for very long conversations.
|
|
3
|
+
*
|
|
4
|
+
* Maintains 4 levels of compression:
|
|
5
|
+
* L0: Raw messages (last N turns)
|
|
6
|
+
* L1: Per-segment summaries (~50 turns each)
|
|
7
|
+
* L2: Per-session summaries (merges L1 nodes)
|
|
8
|
+
* L3: Overall conversation summary (single node)
|
|
9
|
+
*
|
|
10
|
+
* Each level compresses ~5-10x, giving total compression of up to 1000x
|
|
11
|
+
* for multi-day conversations.
|
|
12
|
+
*/
|
|
13
|
+
import type { CompactionInput, CompactionResult, ICompactionStrategy, InfiniteContextConfig } from '../types.js';
|
|
14
|
+
export declare class HierarchicalStrategy implements ICompactionStrategy {
|
|
15
|
+
readonly name: "hierarchical";
|
|
16
|
+
private readonly llmInvoker;
|
|
17
|
+
constructor(llmInvoker: (prompt: string) => Promise<string>);
|
|
18
|
+
compact(input: CompactionInput, config: InfiniteContextConfig): Promise<CompactionResult>;
|
|
19
|
+
private createL0Summary;
|
|
20
|
+
private mergeLevel;
|
|
21
|
+
private extractEntitiesFromText;
|
|
22
|
+
private collectEntities;
|
|
23
|
+
private noopResult;
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=HierarchicalStrategy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HierarchicalStrategy.d.ts","sourceRoot":"","sources":["../../../../src/memory/context/strategies/HierarchicalStrategy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAEV,eAAe,EACf,gBAAgB,EAEhB,mBAAmB,EACnB,qBAAqB,EAEtB,MAAM,aAAa,CAAC;AAerB,qBAAa,oBAAqB,YAAW,mBAAmB;IAC9D,QAAQ,CAAC,IAAI,EAAG,cAAc,CAAU;IACxC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAsC;gBAErD,UAAU,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC;IAIrD,OAAO,CACX,KAAK,EAAE,eAAe,EACtB,MAAM,EAAE,qBAAqB,GAC5B,OAAO,CAAC,gBAAgB,CAAC;YA0Gd,eAAe;YA+Cf,UAAU;IAuDxB,OAAO,CAAC,uBAAuB;IAgB/B,OAAO,CAAC,eAAe;IAQvB,OAAO,CAAC,UAAU;CAwBnB"}
|
|
@@ -0,0 +1,240 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HierarchicalStrategy — Multi-level summary tree for very long conversations.
|
|
3
|
+
*
|
|
4
|
+
* Maintains 4 levels of compression:
|
|
5
|
+
* L0: Raw messages (last N turns)
|
|
6
|
+
* L1: Per-segment summaries (~50 turns each)
|
|
7
|
+
* L2: Per-session summaries (merges L1 nodes)
|
|
8
|
+
* L3: Overall conversation summary (single node)
|
|
9
|
+
*
|
|
10
|
+
* Each level compresses ~5-10x, giving total compression of up to 1000x
|
|
11
|
+
* for multi-day conversations.
|
|
12
|
+
*/
|
|
13
|
+
function estimateTokens(text) {
|
|
14
|
+
return Math.ceil(text.length / 4);
|
|
15
|
+
}
|
|
16
|
+
function generateId(level) {
|
|
17
|
+
return `hier-L${level}-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;
|
|
18
|
+
}
|
|
19
|
+
/** Maximum L1 nodes before triggering L2 merge. */
|
|
20
|
+
const MAX_L1_NODES = 5;
|
|
21
|
+
/** Maximum L2 nodes before triggering L3 merge. */
|
|
22
|
+
const MAX_L2_NODES = 3;
|
|
23
|
+
export class HierarchicalStrategy {
|
|
24
|
+
constructor(llmInvoker) {
|
|
25
|
+
this.name = 'hierarchical';
|
|
26
|
+
this.llmInvoker = llmInvoker;
|
|
27
|
+
}
|
|
28
|
+
async compact(input, config) {
|
|
29
|
+
const startTime = Date.now();
|
|
30
|
+
const { messages, summaryChain } = input;
|
|
31
|
+
// Preserve recent turns.
|
|
32
|
+
const preserveCount = Math.min(config.preserveRecentTurns * 2, messages.length - 2);
|
|
33
|
+
const splitIdx = messages.length - preserveCount;
|
|
34
|
+
if (splitIdx <= 0) {
|
|
35
|
+
return this.noopResult(messages, startTime);
|
|
36
|
+
}
|
|
37
|
+
const toCompact = messages.slice(0, splitIdx);
|
|
38
|
+
const toKeep = messages.slice(splitIdx);
|
|
39
|
+
const inputTokens = toCompact.reduce((s, m) => s + m.tokenEstimate, 0);
|
|
40
|
+
// Step 1: Create L0 summary of the compacted segment.
|
|
41
|
+
const l0Node = await this.createL0Summary(toCompact, config);
|
|
42
|
+
const allNewNodes = [l0Node];
|
|
43
|
+
// Step 2: Check if we need L1 merge (too many L0 nodes).
|
|
44
|
+
const existingL0 = summaryChain.filter((n) => n.level === 0 && !n.parentId);
|
|
45
|
+
const allL0 = [...existingL0, l0Node];
|
|
46
|
+
if (allL0.length > MAX_L1_NODES) {
|
|
47
|
+
const l1Node = await this.mergeLevel(allL0, 1, config);
|
|
48
|
+
if (l1Node) {
|
|
49
|
+
for (const child of allL0)
|
|
50
|
+
child.parentId = l1Node.id;
|
|
51
|
+
allNewNodes.push(l1Node);
|
|
52
|
+
// Step 3: Check if we need L2 merge.
|
|
53
|
+
const existingL1 = summaryChain.filter((n) => n.level === 1 && !n.parentId);
|
|
54
|
+
const allL1 = [...existingL1, l1Node];
|
|
55
|
+
if (allL1.length > MAX_L2_NODES) {
|
|
56
|
+
const l2Node = await this.mergeLevel(allL1, 2, config);
|
|
57
|
+
if (l2Node) {
|
|
58
|
+
for (const child of allL1)
|
|
59
|
+
child.parentId = l2Node.id;
|
|
60
|
+
allNewNodes.push(l2Node);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
// Build summary message for prompt injection.
|
|
66
|
+
const activeNodes = [...summaryChain, ...allNewNodes].filter((n) => !n.parentId);
|
|
67
|
+
const summaryText = activeNodes
|
|
68
|
+
.sort((a, b) => a.turnRange[0] - b.turnRange[0])
|
|
69
|
+
.map((n) => {
|
|
70
|
+
const levelTag = n.level > 0 ? ` (L${n.level} summary)` : '';
|
|
71
|
+
return `[Turns ${n.turnRange[0]}–${n.turnRange[1]}${levelTag}]\n${n.summary}`;
|
|
72
|
+
})
|
|
73
|
+
.join('\n\n');
|
|
74
|
+
const outputTokens = estimateTokens(summaryText);
|
|
75
|
+
const summaryMessage = {
|
|
76
|
+
role: 'system',
|
|
77
|
+
content: `[Hierarchical conversation history — ${inputTokens} tokens → ${outputTokens} tokens]\n${summaryText}`,
|
|
78
|
+
timestamp: Date.now(),
|
|
79
|
+
turnIndex: toCompact[0].turnIndex,
|
|
80
|
+
tokenEstimate: outputTokens + 20,
|
|
81
|
+
compacted: true,
|
|
82
|
+
};
|
|
83
|
+
const entryId = generateId(0);
|
|
84
|
+
const turnRange = [
|
|
85
|
+
toCompact[0].turnIndex,
|
|
86
|
+
toCompact[toCompact.length - 1].turnIndex,
|
|
87
|
+
];
|
|
88
|
+
const entry = {
|
|
89
|
+
id: entryId,
|
|
90
|
+
timestamp: Date.now(),
|
|
91
|
+
turnRange,
|
|
92
|
+
strategy: 'hierarchical',
|
|
93
|
+
inputTokens,
|
|
94
|
+
outputTokens,
|
|
95
|
+
compressionRatio: outputTokens > 0
|
|
96
|
+
? Math.round((inputTokens / outputTokens) * 10) / 10
|
|
97
|
+
: inputTokens,
|
|
98
|
+
summary: summaryText,
|
|
99
|
+
droppedContent: [],
|
|
100
|
+
preservedEntities: this.collectEntities(allNewNodes),
|
|
101
|
+
tracesCreated: [],
|
|
102
|
+
emotionalContext: input.emotionalContext,
|
|
103
|
+
durationMs: Date.now() - startTime,
|
|
104
|
+
};
|
|
105
|
+
return {
|
|
106
|
+
messages: [summaryMessage, ...toKeep],
|
|
107
|
+
newNodes: allNewNodes,
|
|
108
|
+
entry,
|
|
109
|
+
tracesToEncode: [],
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
// ── Level summaries ────────────────────────────────────────────────
|
|
113
|
+
async createL0Summary(messages, config) {
|
|
114
|
+
const text = messages.map((m) => `[${m.role}] ${m.content}`).join('\n');
|
|
115
|
+
const targetTokens = Math.max(80, Math.ceil(estimateTokens(text) / config.targetCompressionRatio));
|
|
116
|
+
const turnRange = [
|
|
117
|
+
messages[0].turnIndex,
|
|
118
|
+
messages[messages.length - 1].turnIndex,
|
|
119
|
+
];
|
|
120
|
+
const prompt = [
|
|
121
|
+
'Summarize this conversation segment. Preserve decisions, action items, entities, technical details, and open questions.',
|
|
122
|
+
`Target: ~${targetTokens} tokens.`,
|
|
123
|
+
'',
|
|
124
|
+
`Turns ${turnRange[0]}–${turnRange[1]}:`,
|
|
125
|
+
text,
|
|
126
|
+
'',
|
|
127
|
+
'Summary:',
|
|
128
|
+
].join('\n');
|
|
129
|
+
let summary;
|
|
130
|
+
try {
|
|
131
|
+
summary = (await this.llmInvoker(prompt)).trim();
|
|
132
|
+
}
|
|
133
|
+
catch {
|
|
134
|
+
summary = `Conversation turns ${turnRange[0]}–${turnRange[1]}: ${messages
|
|
135
|
+
.filter((m) => m.role === 'user')
|
|
136
|
+
.map((m) => m.content.slice(0, 80))
|
|
137
|
+
.join('; ')}`;
|
|
138
|
+
}
|
|
139
|
+
return {
|
|
140
|
+
id: generateId(0),
|
|
141
|
+
level: 0,
|
|
142
|
+
turnRange,
|
|
143
|
+
summary,
|
|
144
|
+
tokenEstimate: estimateTokens(summary),
|
|
145
|
+
createdAt: Date.now(),
|
|
146
|
+
childIds: [],
|
|
147
|
+
entities: this.extractEntitiesFromText(summary),
|
|
148
|
+
compactionEntryId: '',
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
async mergeLevel(nodes, targetLevel, config) {
|
|
152
|
+
const combined = nodes
|
|
153
|
+
.map((n) => `[Turns ${n.turnRange[0]}–${n.turnRange[1]}]\n${n.summary}`)
|
|
154
|
+
.join('\n\n');
|
|
155
|
+
const targetTokens = Math.max(60, Math.ceil(estimateTokens(combined) / (config.targetCompressionRatio / 2)));
|
|
156
|
+
const turnRange = [
|
|
157
|
+
nodes[0].turnRange[0],
|
|
158
|
+
nodes[nodes.length - 1].turnRange[1],
|
|
159
|
+
];
|
|
160
|
+
const prompt = [
|
|
161
|
+
`Merge these L${targetLevel - 1} conversation summaries into a single higher-level summary.`,
|
|
162
|
+
'Preserve the most important decisions, outcomes, and ongoing threads.',
|
|
163
|
+
'Consolidate redundant information.',
|
|
164
|
+
`Target: ~${targetTokens} tokens.`,
|
|
165
|
+
'',
|
|
166
|
+
combined,
|
|
167
|
+
'',
|
|
168
|
+
'Merged summary:',
|
|
169
|
+
].join('\n');
|
|
170
|
+
try {
|
|
171
|
+
const summary = (await this.llmInvoker(prompt)).trim();
|
|
172
|
+
const allEntities = new Set();
|
|
173
|
+
for (const n of nodes) {
|
|
174
|
+
for (const e of n.entities)
|
|
175
|
+
allEntities.add(e);
|
|
176
|
+
}
|
|
177
|
+
return {
|
|
178
|
+
id: generateId(targetLevel),
|
|
179
|
+
level: targetLevel,
|
|
180
|
+
turnRange,
|
|
181
|
+
summary,
|
|
182
|
+
tokenEstimate: estimateTokens(summary),
|
|
183
|
+
createdAt: Date.now(),
|
|
184
|
+
childIds: nodes.map((n) => n.id),
|
|
185
|
+
entities: Array.from(allEntities),
|
|
186
|
+
compactionEntryId: '',
|
|
187
|
+
};
|
|
188
|
+
}
|
|
189
|
+
catch {
|
|
190
|
+
return null;
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
// ── Helpers ────────────────────────────────────────────────────────
|
|
194
|
+
extractEntitiesFromText(text) {
|
|
195
|
+
const entities = new Set();
|
|
196
|
+
const patterns = [
|
|
197
|
+
/[\w/.-]+\.\w{1,5}/g, // file paths
|
|
198
|
+
/https?:\/\/[^\s)]+/g, // URLs
|
|
199
|
+
/`[^`]+`/g, // code identifiers
|
|
200
|
+
];
|
|
201
|
+
for (const p of patterns) {
|
|
202
|
+
const matches = text.match(p);
|
|
203
|
+
if (matches) {
|
|
204
|
+
for (const m of matches)
|
|
205
|
+
entities.add(m.replace(/`/g, ''));
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
return Array.from(entities).slice(0, 30);
|
|
209
|
+
}
|
|
210
|
+
collectEntities(nodes) {
|
|
211
|
+
const all = new Set();
|
|
212
|
+
for (const n of nodes) {
|
|
213
|
+
for (const e of n.entities)
|
|
214
|
+
all.add(e);
|
|
215
|
+
}
|
|
216
|
+
return Array.from(all);
|
|
217
|
+
}
|
|
218
|
+
noopResult(messages, startTime) {
|
|
219
|
+
return {
|
|
220
|
+
messages,
|
|
221
|
+
newNodes: [],
|
|
222
|
+
entry: {
|
|
223
|
+
id: generateId(0),
|
|
224
|
+
timestamp: Date.now(),
|
|
225
|
+
turnRange: [0, 0],
|
|
226
|
+
strategy: 'hierarchical',
|
|
227
|
+
inputTokens: 0,
|
|
228
|
+
outputTokens: 0,
|
|
229
|
+
compressionRatio: 1,
|
|
230
|
+
summary: '',
|
|
231
|
+
droppedContent: [],
|
|
232
|
+
preservedEntities: [],
|
|
233
|
+
tracesCreated: [],
|
|
234
|
+
durationMs: Date.now() - startTime,
|
|
235
|
+
},
|
|
236
|
+
tracesToEncode: [],
|
|
237
|
+
};
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
//# sourceMappingURL=HierarchicalStrategy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HierarchicalStrategy.js","sourceRoot":"","sources":["../../../../src/memory/context/strategies/HierarchicalStrategy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAYH,SAAS,cAAc,CAAC,IAAY;IAClC,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACpC,CAAC;AAED,SAAS,UAAU,CAAC,KAAa;IAC/B,OAAO,SAAS,KAAK,IAAI,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;AAClF,CAAC;AAED,mDAAmD;AACnD,MAAM,YAAY,GAAG,CAAC,CAAC;AACvB,mDAAmD;AACnD,MAAM,YAAY,GAAG,CAAC,CAAC;AAEvB,MAAM,OAAO,oBAAoB;IAI/B,YAAY,UAA+C;QAHlD,SAAI,GAAG,cAAuB,CAAC;QAItC,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IAC/B,CAAC;IAED,KAAK,CAAC,OAAO,CACX,KAAsB,EACtB,MAA6B;QAE7B,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC7B,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,GAAG,KAAK,CAAC;QAEzC,yBAAyB;QACzB,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,CAC5B,MAAM,CAAC,mBAAmB,GAAG,CAAC,EAC9B,QAAQ,CAAC,MAAM,GAAG,CAAC,CACpB,CAAC;QACF,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,GAAG,aAAa,CAAC;QACjD,IAAI,QAAQ,IAAI,CAAC,EAAE,CAAC;YAClB,OAAO,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QAC9C,CAAC;QAED,MAAM,SAAS,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;QAC9C,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QACxC,MAAM,WAAW,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC;QAEvE,sDAAsD;QACtD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QAC7D,MAAM,WAAW,GAAuB,CAAC,MAAM,CAAC,CAAC;QAEjD,yDAAyD;QACzD,MAAM,UAAU,GAAG,YAAY,CAAC,MAAM,CACpC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CACpC,CAAC;QACF,MAAM,KAAK,GAAG,CAAC,GAAG,UAAU,EAAE,MAAM,CAAC,CAAC;QACtC,IAAI,KAAK,CAAC,MAAM,GAAG,YAAY,EAAE,CAAC;YAChC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC;YACvD,IAAI,MAAM,EAAE,CAAC;gBACX,KAAK,MAAM,KAAK,IAAI,KAAK;oBAAE,KAAK,CAAC,QAAQ,GAAG,MAAM,CAAC,EAAE,CAAC;gBACtD,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBAEzB,qCAAqC;gBACrC,MAAM,UAAU,GAAG,YAAY,CAAC,MAAM,CACpC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CACpC,CAAC;gBACF,MAAM,KAAK,GAAG,CAAC,GAAG,UAAU,EAAE,MAAM,CAAC,CAAC;gBACtC,IAAI,KAAK,CAAC,MAAM,GAAG,YAAY,EAAE,CAAC;oBAChC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC;oBACvD,IAAI,MAAM,EAAE,CAAC;wBACX,KAAK,MAAM,KAAK,IAAI,KAAK;4BAAE,KAAK,CAAC,QAAQ,GAAG,MAAM,CAAC,EAAE,CAAC;wBACtD,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;oBAC3B,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAED,8CAA8C;QAC9C,MAAM,WAAW,GAAG,CAAC,GAAG,YAAY,EAAE,GAAG,WAAW,CAAC,CAAC,MAAM,CAC1D,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CACnB,CAAC;QACF,MAAM,WAAW,GAAG,WAAW;aAC5B,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;aAC/C,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;YACT,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC;YAC7D,OAAO,UAAU,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,QAAQ,MAAM,CAAC,CAAC,OAAO,EAAE,CAAC;QAChF,CAAC,CAAC;aACD,IAAI,CAAC,MAAM,CAAC,CAAC;QAEhB,MAAM,YAAY,GAAG,cAAc,CAAC,WAAW,CAAC,CAAC;QAEjD,MAAM,cAAc,GAAmB;YACrC,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,wCAAwC,WAAW,aAAa,YAAY,aAAa,WAAW,EAAE;YAC/G,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;YACrB,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS;YACjC,aAAa,EAAE,YAAY,GAAG,EAAE;YAChC,SAAS,EAAE,IAAI;SAChB,CAAC;QAEF,MAAM,OAAO,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;QAC9B,MAAM,SAAS,GAAqB;YAClC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS;YACtB,SAAS,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,SAAS;SAC1C,CAAC;QAEF,MAAM,KAAK,GAAoB;YAC7B,EAAE,EAAE,OAAO;YACX,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;YACrB,SAAS;YACT,QAAQ,EAAE,cAAc;YACxB,WAAW;YACX,YAAY;YACZ,gBAAgB,EACd,YAAY,GAAG,CAAC;gBACd,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,WAAW,GAAG,YAAY,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE;gBACpD,CAAC,CAAC,WAAW;YACjB,OAAO,EAAE,WAAW;YACpB,cAAc,EAAE,EAAE;YAClB,iBAAiB,EAAE,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC;YACpD,aAAa,EAAE,EAAE;YACjB,gBAAgB,EAAE,KAAK,CAAC,gBAAgB;YACxC,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;SACnC,CAAC;QAEF,OAAO;YACL,QAAQ,EAAE,CAAC,cAAc,EAAE,GAAG,MAAM,CAAC;YACrC,QAAQ,EAAE,WAAW;YACrB,KAAK;YACL,cAAc,EAAE,EAAE;SACnB,CAAC;IACJ,CAAC;IAED,sEAAsE;IAE9D,KAAK,CAAC,eAAe,CAC3B,QAA0B,EAC1B,MAA6B;QAE7B,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACxE,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAC3B,EAAE,EACF,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,sBAAsB,CAAC,CAChE,CAAC;QACF,MAAM,SAAS,GAAqB;YAClC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS;YACrB,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,SAAS;SACxC,CAAC;QAEF,MAAM,MAAM,GAAG;YACb,yHAAyH;YACzH,YAAY,YAAY,UAAU;YAClC,EAAE;YACF,SAAS,SAAS,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,GAAG;YACxC,IAAI;YACJ,EAAE;YACF,UAAU;SACX,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEb,IAAI,OAAe,CAAC;QACpB,IAAI,CAAC;YACH,OAAO,GAAG,CAAC,MAAM,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACnD,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,GAAG,sBAAsB,SAAS,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,KAAK,QAAQ;iBACtE,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC;iBAChC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;iBAClC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAClB,CAAC;QAED,OAAO;YACL,EAAE,EAAE,UAAU,CAAC,CAAC,CAAC;YACjB,KAAK,EAAE,CAAC;YACR,SAAS;YACT,OAAO;YACP,aAAa,EAAE,cAAc,CAAC,OAAO,CAAC;YACtC,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;YACrB,QAAQ,EAAE,EAAE;YACZ,QAAQ,EAAE,IAAI,CAAC,uBAAuB,CAAC,OAAO,CAAC;YAC/C,iBAAiB,EAAE,EAAE;SACtB,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,UAAU,CACtB,KAAyB,EACzB,WAAmB,EACnB,MAA6B;QAE7B,MAAM,QAAQ,GAAG,KAAK;aACnB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,CAAC;aACvE,IAAI,CAAC,MAAM,CAAC,CAAC;QAEhB,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAC3B,EAAE,EACF,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,sBAAsB,GAAG,CAAC,CAAC,CAAC,CAC1E,CAAC;QAEF,MAAM,SAAS,GAAqB;YAClC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;YACrB,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;SACrC,CAAC;QAEF,MAAM,MAAM,GAAG;YACb,gBAAgB,WAAW,GAAG,CAAC,6DAA6D;YAC5F,uEAAuE;YACvE,oCAAoC;YACpC,YAAY,YAAY,UAAU;YAClC,EAAE;YACF,QAAQ;YACR,EAAE;YACF,iBAAiB;SAClB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEb,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,CAAC,MAAM,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YACvD,MAAM,WAAW,GAAG,IAAI,GAAG,EAAU,CAAC;YACtC,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;gBACtB,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,QAAQ;oBAAE,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACjD,CAAC;YAED,OAAO;gBACL,EAAE,EAAE,UAAU,CAAC,WAAW,CAAC;gBAC3B,KAAK,EAAE,WAAW;gBAClB,SAAS;gBACT,OAAO;gBACP,aAAa,EAAE,cAAc,CAAC,OAAO,CAAC;gBACtC,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;gBACrB,QAAQ,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAChC,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC;gBACjC,iBAAiB,EAAE,EAAE;aACtB,CAAC;QACJ,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED,sEAAsE;IAE9D,uBAAuB,CAAC,IAAY;QAC1C,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAU,CAAC;QACnC,MAAM,QAAQ,GAAG;YACf,oBAAoB,EAAE,aAAa;YACnC,qBAAqB,EAAE,OAAO;YAC9B,UAAU,EAAE,mBAAmB;SAChC,CAAC;QACF,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;YACzB,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAC9B,IAAI,OAAO,EAAE,CAAC;gBACZ,KAAK,MAAM,CAAC,IAAI,OAAO;oBAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC;YAC7D,CAAC;QACH,CAAC;QACD,OAAO,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAC3C,CAAC;IAEO,eAAe,CAAC,KAAyB;QAC/C,MAAM,GAAG,GAAG,IAAI,GAAG,EAAU,CAAC;QAC9B,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;YACtB,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,QAAQ;gBAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACzC,CAAC;QACD,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACzB,CAAC;IAEO,UAAU,CAChB,QAA0B,EAC1B,SAAiB;QAEjB,OAAO;YACL,QAAQ;YACR,QAAQ,EAAE,EAAE;YACZ,KAAK,EAAE;gBACL,EAAE,EAAE,UAAU,CAAC,CAAC,CAAC;gBACjB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;gBACrB,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;gBACjB,QAAQ,EAAE,cAAc;gBACxB,WAAW,EAAE,CAAC;gBACd,YAAY,EAAE,CAAC;gBACf,gBAAgB,EAAE,CAAC;gBACnB,OAAO,EAAE,EAAE;gBACX,cAAc,EAAE,EAAE;gBAClB,iBAAiB,EAAE,EAAE;gBACrB,aAAa,EAAE,EAAE;gBACjB,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;aACnC;YACD,cAAc,EAAE,EAAE;SACnB,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HybridStrategy — Best-quality compaction using the full cognitive memory pipeline.
|
|
3
|
+
*
|
|
4
|
+
* Combines three approaches:
|
|
5
|
+
* 1. MemoryObserver — personality-biased note extraction from conversation
|
|
6
|
+
* 2. MemoryReflector — consolidation of notes into typed long-term traces
|
|
7
|
+
* 3. Rolling summary — narrative continuity via SlidingSummaryStrategy
|
|
8
|
+
*
|
|
9
|
+
* Produces both a readable summary AND long-term memory traces, giving
|
|
10
|
+
* the agent both narrative context and structured recall.
|
|
11
|
+
*/
|
|
12
|
+
import type { MemoryObserver } from '../../observation/MemoryObserver.js';
|
|
13
|
+
import type { MemoryReflector } from '../../observation/MemoryReflector.js';
|
|
14
|
+
import type { CompactionInput, CompactionResult, ICompactionStrategy, InfiniteContextConfig } from '../types.js';
|
|
15
|
+
export declare class HybridStrategy implements ICompactionStrategy {
|
|
16
|
+
readonly name: "hybrid";
|
|
17
|
+
private readonly llmInvoker;
|
|
18
|
+
private readonly observer?;
|
|
19
|
+
private readonly reflector?;
|
|
20
|
+
constructor(llmInvoker: (prompt: string) => Promise<string>, observer?: MemoryObserver, reflector?: MemoryReflector);
|
|
21
|
+
compact(input: CompactionInput, config: InfiniteContextConfig): Promise<CompactionResult>;
|
|
22
|
+
private generateHybridSummary;
|
|
23
|
+
private extractEntities;
|
|
24
|
+
private noopResult;
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=HybridStrategy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HybridStrategy.d.ts","sourceRoot":"","sources":["../../../../src/memory/context/strategies/HybridStrategy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAmB,MAAM,qCAAqC,CAAC;AAC3F,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sCAAsC,CAAC;AAE5E,OAAO,KAAK,EAEV,eAAe,EACf,gBAAgB,EAEhB,mBAAmB,EACnB,qBAAqB,EAEtB,MAAM,aAAa,CAAC;AAUrB,qBAAa,cAAe,YAAW,mBAAmB;IACxD,QAAQ,CAAC,IAAI,EAAG,QAAQ,CAAU;IAClC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAsC;IACjE,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAiB;IAC3C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAkB;gBAG3C,UAAU,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,EAC/C,QAAQ,CAAC,EAAE,cAAc,EACzB,SAAS,CAAC,EAAE,eAAe;IAOvB,OAAO,CACX,KAAK,EAAE,eAAe,EACtB,MAAM,EAAE,qBAAqB,GAC5B,OAAO,CAAC,gBAAgB,CAAC;YAqJd,qBAAqB;IAyEnC,OAAO,CAAC,eAAe;IA6BvB,OAAO,CAAC,UAAU;CAwBnB"}
|