@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.
Files changed (226) hide show
  1. package/README.md +7 -7
  2. package/dist/cognitive_substrate/IGMI.d.ts +2 -0
  3. package/dist/cognitive_substrate/IGMI.d.ts.map +1 -1
  4. package/dist/cognitive_substrate/IGMI.js.map +1 -1
  5. package/dist/cognitive_substrate/personas/IPersonaDefinition.d.ts +2 -0
  6. package/dist/cognitive_substrate/personas/IPersonaDefinition.d.ts.map +1 -1
  7. package/dist/core/audio/AdaptiveVAD.d.ts +147 -0
  8. package/dist/core/audio/AdaptiveVAD.d.ts.map +1 -0
  9. package/dist/core/audio/AdaptiveVAD.js +239 -0
  10. package/dist/core/audio/AdaptiveVAD.js.map +1 -0
  11. package/dist/core/audio/AudioProcessor.d.ts +121 -0
  12. package/dist/core/audio/AudioProcessor.d.ts.map +1 -0
  13. package/dist/core/audio/AudioProcessor.js +299 -0
  14. package/dist/core/audio/AudioProcessor.js.map +1 -0
  15. package/dist/core/audio/EnvironmentalCalibrator.d.ts +187 -0
  16. package/dist/core/audio/EnvironmentalCalibrator.d.ts.map +1 -0
  17. package/dist/core/audio/EnvironmentalCalibrator.js +360 -0
  18. package/dist/core/audio/EnvironmentalCalibrator.js.map +1 -0
  19. package/dist/core/audio/SilenceDetector.d.ts +111 -0
  20. package/dist/core/audio/SilenceDetector.d.ts.map +1 -0
  21. package/dist/core/audio/SilenceDetector.js +178 -0
  22. package/dist/core/audio/SilenceDetector.js.map +1 -0
  23. package/dist/core/llm/IPromptEngine.d.ts +2 -0
  24. package/dist/core/llm/IPromptEngine.d.ts.map +1 -1
  25. package/dist/core/llm/IPromptEngine.js.map +1 -1
  26. package/dist/core/llm/providers/implementations/OllamaProvider.js +2 -2
  27. package/dist/core/llm/providers/implementations/OllamaProvider.js.map +1 -1
  28. package/dist/core/llm/providers/implementations/OpenAIProvider.d.ts.map +1 -1
  29. package/dist/core/llm/providers/implementations/OpenAIProvider.js +8 -1
  30. package/dist/core/llm/providers/implementations/OpenAIProvider.js.map +1 -1
  31. package/dist/discovery/CapabilityIndex.d.ts.map +1 -1
  32. package/dist/discovery/CapabilityIndex.js +18 -4
  33. package/dist/discovery/CapabilityIndex.js.map +1 -1
  34. package/dist/extensions/ExtensionManager.d.ts.map +1 -1
  35. package/dist/extensions/ExtensionManager.js +9 -1
  36. package/dist/extensions/ExtensionManager.js.map +1 -1
  37. package/dist/extensions/types.d.ts +20 -2
  38. package/dist/extensions/types.d.ts.map +1 -1
  39. package/dist/extensions/types.js +4 -0
  40. package/dist/extensions/types.js.map +1 -1
  41. package/dist/index.d.ts +2 -0
  42. package/dist/index.d.ts.map +1 -1
  43. package/dist/index.js +4 -0
  44. package/dist/index.js.map +1 -1
  45. package/dist/memory/CognitiveMemoryManager.d.ts +133 -0
  46. package/dist/memory/CognitiveMemoryManager.d.ts.map +1 -0
  47. package/dist/memory/CognitiveMemoryManager.js +519 -0
  48. package/dist/memory/CognitiveMemoryManager.js.map +1 -0
  49. package/dist/memory/config.d.ts +135 -0
  50. package/dist/memory/config.d.ts.map +1 -0
  51. package/dist/memory/config.js +28 -0
  52. package/dist/memory/config.js.map +1 -0
  53. package/dist/memory/consolidation/ConsolidationPipeline.d.ts +70 -0
  54. package/dist/memory/consolidation/ConsolidationPipeline.d.ts.map +1 -0
  55. package/dist/memory/consolidation/ConsolidationPipeline.js +301 -0
  56. package/dist/memory/consolidation/ConsolidationPipeline.js.map +1 -0
  57. package/dist/memory/context/CompactionEngine.d.ts +21 -0
  58. package/dist/memory/context/CompactionEngine.d.ts.map +1 -0
  59. package/dist/memory/context/CompactionEngine.js +35 -0
  60. package/dist/memory/context/CompactionEngine.js.map +1 -0
  61. package/dist/memory/context/CompactionLog.d.ts +50 -0
  62. package/dist/memory/context/CompactionLog.d.ts.map +1 -0
  63. package/dist/memory/context/CompactionLog.js +139 -0
  64. package/dist/memory/context/CompactionLog.js.map +1 -0
  65. package/dist/memory/context/ContextWindowManager.d.ts +114 -0
  66. package/dist/memory/context/ContextWindowManager.d.ts.map +1 -0
  67. package/dist/memory/context/ContextWindowManager.js +225 -0
  68. package/dist/memory/context/ContextWindowManager.js.map +1 -0
  69. package/dist/memory/context/RollingSummaryChain.d.ts +53 -0
  70. package/dist/memory/context/RollingSummaryChain.d.ts.map +1 -0
  71. package/dist/memory/context/RollingSummaryChain.js +193 -0
  72. package/dist/memory/context/RollingSummaryChain.js.map +1 -0
  73. package/dist/memory/context/index.d.ts +15 -0
  74. package/dist/memory/context/index.d.ts.map +1 -0
  75. package/dist/memory/context/index.js +14 -0
  76. package/dist/memory/context/index.js.map +1 -0
  77. package/dist/memory/context/strategies/HierarchicalStrategy.d.ts +25 -0
  78. package/dist/memory/context/strategies/HierarchicalStrategy.d.ts.map +1 -0
  79. package/dist/memory/context/strategies/HierarchicalStrategy.js +240 -0
  80. package/dist/memory/context/strategies/HierarchicalStrategy.js.map +1 -0
  81. package/dist/memory/context/strategies/HybridStrategy.d.ts +26 -0
  82. package/dist/memory/context/strategies/HybridStrategy.d.ts.map +1 -0
  83. package/dist/memory/context/strategies/HybridStrategy.js +245 -0
  84. package/dist/memory/context/strategies/HybridStrategy.js.map +1 -0
  85. package/dist/memory/context/strategies/SlidingSummaryStrategy.d.ts +22 -0
  86. package/dist/memory/context/strategies/SlidingSummaryStrategy.d.ts.map +1 -0
  87. package/dist/memory/context/strategies/SlidingSummaryStrategy.js +203 -0
  88. package/dist/memory/context/strategies/SlidingSummaryStrategy.js.map +1 -0
  89. package/dist/memory/context/types.d.ts +120 -0
  90. package/dist/memory/context/types.d.ts.map +1 -0
  91. package/dist/memory/context/types.js +17 -0
  92. package/dist/memory/context/types.js.map +1 -0
  93. package/dist/memory/decay/DecayModel.d.ts +87 -0
  94. package/dist/memory/decay/DecayModel.d.ts.map +1 -0
  95. package/dist/memory/decay/DecayModel.js +117 -0
  96. package/dist/memory/decay/DecayModel.js.map +1 -0
  97. package/dist/memory/decay/RetrievalPriorityScorer.d.ts +63 -0
  98. package/dist/memory/decay/RetrievalPriorityScorer.d.ts.map +1 -0
  99. package/dist/memory/decay/RetrievalPriorityScorer.js +110 -0
  100. package/dist/memory/decay/RetrievalPriorityScorer.js.map +1 -0
  101. package/dist/memory/encoding/ContentFeatureDetector.d.ts +37 -0
  102. package/dist/memory/encoding/ContentFeatureDetector.d.ts.map +1 -0
  103. package/dist/memory/encoding/ContentFeatureDetector.js +176 -0
  104. package/dist/memory/encoding/ContentFeatureDetector.js.map +1 -0
  105. package/dist/memory/encoding/EncodingModel.d.ts +67 -0
  106. package/dist/memory/encoding/EncodingModel.d.ts.map +1 -0
  107. package/dist/memory/encoding/EncodingModel.js +171 -0
  108. package/dist/memory/encoding/EncodingModel.js.map +1 -0
  109. package/dist/memory/extension/CognitiveMemoryExtension.d.ts +18 -0
  110. package/dist/memory/extension/CognitiveMemoryExtension.d.ts.map +1 -0
  111. package/dist/memory/extension/CognitiveMemoryExtension.js +131 -0
  112. package/dist/memory/extension/CognitiveMemoryExtension.js.map +1 -0
  113. package/dist/memory/graph/GraphologyMemoryGraph.d.ts +29 -0
  114. package/dist/memory/graph/GraphologyMemoryGraph.d.ts.map +1 -0
  115. package/dist/memory/graph/GraphologyMemoryGraph.js +224 -0
  116. package/dist/memory/graph/GraphologyMemoryGraph.js.map +1 -0
  117. package/dist/memory/graph/IMemoryGraph.d.ts +70 -0
  118. package/dist/memory/graph/IMemoryGraph.d.ts.map +1 -0
  119. package/dist/memory/graph/IMemoryGraph.js +15 -0
  120. package/dist/memory/graph/IMemoryGraph.js.map +1 -0
  121. package/dist/memory/graph/KnowledgeGraphMemoryGraph.d.ts +38 -0
  122. package/dist/memory/graph/KnowledgeGraphMemoryGraph.d.ts.map +1 -0
  123. package/dist/memory/graph/KnowledgeGraphMemoryGraph.js +264 -0
  124. package/dist/memory/graph/KnowledgeGraphMemoryGraph.js.map +1 -0
  125. package/dist/memory/graph/SpreadingActivation.d.ts +36 -0
  126. package/dist/memory/graph/SpreadingActivation.d.ts.map +1 -0
  127. package/dist/memory/graph/SpreadingActivation.js +100 -0
  128. package/dist/memory/graph/SpreadingActivation.js.map +1 -0
  129. package/dist/memory/index.d.ts +52 -0
  130. package/dist/memory/index.d.ts.map +1 -0
  131. package/dist/memory/index.js +43 -0
  132. package/dist/memory/index.js.map +1 -0
  133. package/dist/memory/observation/MemoryObserver.d.ts +59 -0
  134. package/dist/memory/observation/MemoryObserver.d.ts.map +1 -0
  135. package/dist/memory/observation/MemoryObserver.js +136 -0
  136. package/dist/memory/observation/MemoryObserver.js.map +1 -0
  137. package/dist/memory/observation/MemoryReflector.d.ts +51 -0
  138. package/dist/memory/observation/MemoryReflector.d.ts.map +1 -0
  139. package/dist/memory/observation/MemoryReflector.js +184 -0
  140. package/dist/memory/observation/MemoryReflector.js.map +1 -0
  141. package/dist/memory/observation/ObservationBuffer.d.ts +51 -0
  142. package/dist/memory/observation/ObservationBuffer.d.ts.map +1 -0
  143. package/dist/memory/observation/ObservationBuffer.js +81 -0
  144. package/dist/memory/observation/ObservationBuffer.js.map +1 -0
  145. package/dist/memory/prompt/MemoryFormatters.d.ts +22 -0
  146. package/dist/memory/prompt/MemoryFormatters.d.ts.map +1 -0
  147. package/dist/memory/prompt/MemoryFormatters.js +113 -0
  148. package/dist/memory/prompt/MemoryFormatters.js.map +1 -0
  149. package/dist/memory/prompt/MemoryPromptAssembler.d.ts +40 -0
  150. package/dist/memory/prompt/MemoryPromptAssembler.d.ts.map +1 -0
  151. package/dist/memory/prompt/MemoryPromptAssembler.js +180 -0
  152. package/dist/memory/prompt/MemoryPromptAssembler.js.map +1 -0
  153. package/dist/memory/prospective/ProspectiveMemoryManager.d.ts +83 -0
  154. package/dist/memory/prospective/ProspectiveMemoryManager.d.ts.map +1 -0
  155. package/dist/memory/prospective/ProspectiveMemoryManager.js +128 -0
  156. package/dist/memory/prospective/ProspectiveMemoryManager.js.map +1 -0
  157. package/dist/memory/store/MemoryStore.d.ts +76 -0
  158. package/dist/memory/store/MemoryStore.d.ts.map +1 -0
  159. package/dist/memory/store/MemoryStore.js +320 -0
  160. package/dist/memory/store/MemoryStore.js.map +1 -0
  161. package/dist/memory/types.d.ts +184 -0
  162. package/dist/memory/types.d.ts.map +1 -0
  163. package/dist/memory/types.js +14 -0
  164. package/dist/memory/types.js.map +1 -0
  165. package/dist/memory/working/CognitiveWorkingMemory.d.ts +87 -0
  166. package/dist/memory/working/CognitiveWorkingMemory.d.ts.map +1 -0
  167. package/dist/memory/working/CognitiveWorkingMemory.js +230 -0
  168. package/dist/memory/working/CognitiveWorkingMemory.js.map +1 -0
  169. package/dist/rag/EmbeddingManager.d.ts.map +1 -1
  170. package/dist/rag/EmbeddingManager.js +8 -1
  171. package/dist/rag/EmbeddingManager.js.map +1 -1
  172. package/dist/rag/HydeRetriever.d.ts +111 -0
  173. package/dist/rag/HydeRetriever.d.ts.map +1 -0
  174. package/dist/rag/HydeRetriever.js +143 -0
  175. package/dist/rag/HydeRetriever.js.map +1 -0
  176. package/dist/rag/IRetrievalAugmentor.d.ts +15 -0
  177. package/dist/rag/IRetrievalAugmentor.d.ts.map +1 -1
  178. package/dist/rag/index.d.ts +1 -0
  179. package/dist/rag/index.d.ts.map +1 -1
  180. package/dist/rag/index.js +2 -0
  181. package/dist/rag/index.js.map +1 -1
  182. package/dist/speech/SpeechProviderRegistry.d.ts +17 -0
  183. package/dist/speech/SpeechProviderRegistry.d.ts.map +1 -0
  184. package/dist/speech/SpeechProviderRegistry.js +47 -0
  185. package/dist/speech/SpeechProviderRegistry.js.map +1 -0
  186. package/dist/speech/SpeechRuntime.d.ts +30 -0
  187. package/dist/speech/SpeechRuntime.d.ts.map +1 -0
  188. package/dist/speech/SpeechRuntime.js +156 -0
  189. package/dist/speech/SpeechRuntime.js.map +1 -0
  190. package/dist/speech/SpeechSession.d.ts +37 -0
  191. package/dist/speech/SpeechSession.d.ts.map +1 -0
  192. package/dist/speech/SpeechSession.js +285 -0
  193. package/dist/speech/SpeechSession.js.map +1 -0
  194. package/dist/speech/audio.d.ts +3 -0
  195. package/dist/speech/audio.d.ts.map +1 -0
  196. package/dist/speech/audio.js +39 -0
  197. package/dist/speech/audio.js.map +1 -0
  198. package/dist/speech/index.d.ts +11 -0
  199. package/dist/speech/index.d.ts.map +1 -0
  200. package/dist/speech/index.js +11 -0
  201. package/dist/speech/index.js.map +1 -0
  202. package/dist/speech/providerCatalog.d.ts +7 -0
  203. package/dist/speech/providerCatalog.d.ts.map +1 -0
  204. package/dist/speech/providerCatalog.js +243 -0
  205. package/dist/speech/providerCatalog.js.map +1 -0
  206. package/dist/speech/providers/BuiltInAdaptiveVadProvider.d.ts +20 -0
  207. package/dist/speech/providers/BuiltInAdaptiveVadProvider.d.ts.map +1 -0
  208. package/dist/speech/providers/BuiltInAdaptiveVadProvider.js +29 -0
  209. package/dist/speech/providers/BuiltInAdaptiveVadProvider.js.map +1 -0
  210. package/dist/speech/providers/ElevenLabsTextToSpeechProvider.d.ts +20 -0
  211. package/dist/speech/providers/ElevenLabsTextToSpeechProvider.d.ts.map +1 -0
  212. package/dist/speech/providers/ElevenLabsTextToSpeechProvider.js +95 -0
  213. package/dist/speech/providers/ElevenLabsTextToSpeechProvider.js.map +1 -0
  214. package/dist/speech/providers/OpenAITextToSpeechProvider.d.ts +20 -0
  215. package/dist/speech/providers/OpenAITextToSpeechProvider.d.ts.map +1 -0
  216. package/dist/speech/providers/OpenAITextToSpeechProvider.js +75 -0
  217. package/dist/speech/providers/OpenAITextToSpeechProvider.js.map +1 -0
  218. package/dist/speech/providers/OpenAIWhisperSpeechToTextProvider.d.ts +18 -0
  219. package/dist/speech/providers/OpenAIWhisperSpeechToTextProvider.d.ts.map +1 -0
  220. package/dist/speech/providers/OpenAIWhisperSpeechToTextProvider.js +109 -0
  221. package/dist/speech/providers/OpenAIWhisperSpeechToTextProvider.js.map +1 -0
  222. package/dist/speech/types.d.ts +272 -0
  223. package/dist/speech/types.d.ts.map +1 -0
  224. package/dist/speech/types.js +2 -0
  225. package/dist/speech/types.js.map +1 -0
  226. package/package.json +22 -2
@@ -0,0 +1,245 @@
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
+ function estimateTokens(text) {
13
+ return Math.ceil(text.length / 4);
14
+ }
15
+ function generateId() {
16
+ return `hybrid-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;
17
+ }
18
+ export class HybridStrategy {
19
+ constructor(llmInvoker, observer, reflector) {
20
+ this.name = 'hybrid';
21
+ this.llmInvoker = llmInvoker;
22
+ this.observer = observer;
23
+ this.reflector = reflector;
24
+ }
25
+ async compact(input, config) {
26
+ const startTime = Date.now();
27
+ const { messages } = input;
28
+ const preserveCount = Math.min(config.preserveRecentTurns * 2, messages.length - 2);
29
+ const splitIdx = messages.length - preserveCount;
30
+ if (splitIdx <= 0) {
31
+ return this.noopResult(messages, startTime);
32
+ }
33
+ const toCompact = messages.slice(0, splitIdx);
34
+ const toKeep = messages.slice(splitIdx);
35
+ const inputTokens = toCompact.reduce((s, m) => s + m.tokenEstimate, 0);
36
+ const turnRange = [
37
+ toCompact[0].turnIndex,
38
+ toCompact[toCompact.length - 1].turnIndex,
39
+ ];
40
+ // ── Phase 1: Extract observation notes via MemoryObserver ────────
41
+ const observationNotes = [];
42
+ if (this.observer) {
43
+ // Feed all compactable messages through the observer.
44
+ for (const msg of toCompact) {
45
+ const notes = await this.observer.observe(msg.role, msg.content, input.emotionalContext
46
+ ? {
47
+ valence: input.emotionalContext.valence,
48
+ arousal: input.emotionalContext.arousal,
49
+ dominance: input.emotionalContext.dominance,
50
+ }
51
+ : undefined);
52
+ if (notes)
53
+ observationNotes.push(...notes);
54
+ }
55
+ // Force-extract any remaining buffered content.
56
+ const remaining = await this.observer.extractNotes(input.emotionalContext
57
+ ? {
58
+ valence: input.emotionalContext.valence,
59
+ arousal: input.emotionalContext.arousal,
60
+ dominance: input.emotionalContext.dominance,
61
+ }
62
+ : undefined);
63
+ if (remaining)
64
+ observationNotes.push(...remaining);
65
+ }
66
+ // ── Phase 2: Consolidate notes into long-term traces via Reflector
67
+ const tracesToEncode = [];
68
+ if (this.reflector && observationNotes.length > 0) {
69
+ // Feed notes to reflector.
70
+ for (const note of observationNotes) {
71
+ const result = await this.reflector.addNotes([note]);
72
+ if (result) {
73
+ tracesToEncode.push(...result.traces);
74
+ }
75
+ }
76
+ // Force reflect if notes remain.
77
+ if (this.reflector.getPendingNoteCount() > 0) {
78
+ const result = await this.reflector.reflect();
79
+ if (result) {
80
+ tracesToEncode.push(...result.traces);
81
+ }
82
+ }
83
+ }
84
+ // ── Phase 3: Generate narrative summary (for prompt context) ─────
85
+ const summary = await this.generateHybridSummary(toCompact, observationNotes, tracesToEncode, config);
86
+ const outputTokens = estimateTokens(summary);
87
+ // ── Assemble result ──────────────────────────────────────────────
88
+ const summaryMessage = {
89
+ role: 'system',
90
+ content: [
91
+ `[Hybrid compaction — turns ${turnRange[0]}–${turnRange[1]}]`,
92
+ `[${inputTokens} tokens → ${outputTokens} tokens, ${observationNotes.length} observations, ${tracesToEncode.length} traces created]`,
93
+ summary,
94
+ ].join('\n'),
95
+ timestamp: Date.now(),
96
+ turnIndex: toCompact[0].turnIndex,
97
+ tokenEstimate: outputTokens + 30,
98
+ compacted: true,
99
+ };
100
+ const entryId = generateId();
101
+ const entities = this.extractEntities(summary, observationNotes);
102
+ const node = {
103
+ id: `chain-${entryId}`,
104
+ level: 0,
105
+ turnRange,
106
+ summary,
107
+ tokenEstimate: outputTokens,
108
+ createdAt: Date.now(),
109
+ childIds: [],
110
+ entities,
111
+ compactionEntryId: entryId,
112
+ };
113
+ const entry = {
114
+ id: entryId,
115
+ timestamp: Date.now(),
116
+ turnRange,
117
+ strategy: 'hybrid',
118
+ inputTokens,
119
+ outputTokens,
120
+ compressionRatio: outputTokens > 0
121
+ ? Math.round((inputTokens / outputTokens) * 10) / 10
122
+ : inputTokens,
123
+ summary,
124
+ droppedContent: [],
125
+ preservedEntities: entities,
126
+ tracesCreated: tracesToEncode
127
+ .filter((t) => t.id)
128
+ .map((t) => t.id),
129
+ observationNotes,
130
+ emotionalContext: input.emotionalContext,
131
+ durationMs: Date.now() - startTime,
132
+ };
133
+ return {
134
+ messages: [summaryMessage, ...toKeep],
135
+ newNodes: [node],
136
+ entry,
137
+ tracesToEncode,
138
+ };
139
+ }
140
+ // ── Summary generation ─────────────────────────────────────────────
141
+ async generateHybridSummary(messages, notes, traces, config) {
142
+ const conversationText = messages
143
+ .map((m) => `[${m.role}] ${m.content}`)
144
+ .join('\n');
145
+ const inputTokens = estimateTokens(conversationText);
146
+ const targetTokens = Math.max(120, Math.ceil(inputTokens / config.targetCompressionRatio));
147
+ // Build context from extracted notes and traces.
148
+ const notesSummary = notes.length > 0
149
+ ? `\n\nExtracted observations (${notes.length}):\n${notes
150
+ .slice(0, 15)
151
+ .map((n) => `- [${n.type}] ${n.content} (importance: ${n.importance.toFixed(2)})`)
152
+ .join('\n')}`
153
+ : '';
154
+ const tracesSummary = traces.length > 0
155
+ ? `\n\nConsolidated memory traces (${traces.length}):\n${traces
156
+ .slice(0, 10)
157
+ .map((t) => `- [${t.type}/${t.scope}] ${t.content?.slice(0, 150)}`)
158
+ .join('\n')}`
159
+ : '';
160
+ const prompt = [
161
+ 'Create a rich conversation summary that serves as context for an ongoing conversation.',
162
+ 'You have access to both the raw conversation AND extracted cognitive observations.',
163
+ '',
164
+ 'Structure your summary as:',
165
+ '1. **Key context**: What the conversation is about, who is involved',
166
+ '2. **Decisions & outcomes**: What was decided, built, or resolved',
167
+ '3. **Open threads**: Unresolved questions, pending work, next steps',
168
+ '4. **Important details**: Technical specifics, file paths, configurations',
169
+ '',
170
+ `Target: ~${targetTokens} tokens.`,
171
+ '',
172
+ 'Raw conversation:',
173
+ conversationText,
174
+ notesSummary,
175
+ tracesSummary,
176
+ '',
177
+ 'Summary:',
178
+ ].join('\n');
179
+ try {
180
+ return (await this.llmInvoker(prompt)).trim();
181
+ }
182
+ catch {
183
+ // Fallback: use observation notes as summary.
184
+ if (notes.length > 0) {
185
+ return notes
186
+ .sort((a, b) => b.importance - a.importance)
187
+ .slice(0, 10)
188
+ .map((n) => `[${n.type}] ${n.content}`)
189
+ .join('\n');
190
+ }
191
+ return `Conversation turns ${messages[0].turnIndex}–${messages[messages.length - 1].turnIndex}: ${messages
192
+ .filter((m) => m.role === 'user')
193
+ .slice(0, 3)
194
+ .map((m) => m.content.slice(0, 100))
195
+ .join('; ')}`;
196
+ }
197
+ }
198
+ // ── Helpers ────────────────────────────────────────────────────────
199
+ extractEntities(summary, notes) {
200
+ const entities = new Set();
201
+ // From summary text.
202
+ const patterns = [
203
+ /[\w/.-]+\.\w{1,5}/g,
204
+ /https?:\/\/[^\s)]+/g,
205
+ /`[^`]+`/g,
206
+ ];
207
+ for (const p of patterns) {
208
+ const matches = summary.match(p);
209
+ if (matches) {
210
+ for (const m of matches)
211
+ entities.add(m.replace(/`/g, ''));
212
+ }
213
+ }
214
+ // From observation notes.
215
+ for (const note of notes) {
216
+ if (note.entities) {
217
+ for (const e of note.entities)
218
+ entities.add(e);
219
+ }
220
+ }
221
+ return Array.from(entities).slice(0, 50);
222
+ }
223
+ noopResult(messages, startTime) {
224
+ return {
225
+ messages,
226
+ newNodes: [],
227
+ entry: {
228
+ id: generateId(),
229
+ timestamp: Date.now(),
230
+ turnRange: [0, 0],
231
+ strategy: 'hybrid',
232
+ inputTokens: 0,
233
+ outputTokens: 0,
234
+ compressionRatio: 1,
235
+ summary: '',
236
+ droppedContent: [],
237
+ preservedEntities: [],
238
+ tracesCreated: [],
239
+ durationMs: Date.now() - startTime,
240
+ },
241
+ tracesToEncode: [],
242
+ };
243
+ }
244
+ }
245
+ //# sourceMappingURL=HybridStrategy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HybridStrategy.js","sourceRoot":"","sources":["../../../../src/memory/context/strategies/HybridStrategy.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * SlidingSummaryStrategy — Default compaction strategy.
3
+ *
4
+ * Summarizes the oldest N messages into a single paragraph, preserving
5
+ * the most recent K turns raw. Simple, predictable, low latency.
6
+ */
7
+ import type { CompactionInput, CompactionResult, ICompactionStrategy, InfiniteContextConfig } from '../types.js';
8
+ export declare class SlidingSummaryStrategy implements ICompactionStrategy {
9
+ readonly name: "sliding";
10
+ private readonly llmInvoker;
11
+ constructor(llmInvoker: (prompt: string) => Promise<string>);
12
+ compact(input: CompactionInput, config: InfiniteContextConfig): Promise<CompactionResult>;
13
+ /** Extract likely entity names from summary text. */
14
+ private extractEntities;
15
+ /** Detect content fragments from compacted messages missing from summary. */
16
+ private detectDropped;
17
+ /** Crude fallback when LLM is unavailable. */
18
+ private fallbackSummary;
19
+ /** No-op result when nothing needs compaction. */
20
+ private noopResult;
21
+ }
22
+ //# sourceMappingURL=SlidingSummaryStrategy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SlidingSummaryStrategy.d.ts","sourceRoot":"","sources":["../../../../src/memory/context/strategies/SlidingSummaryStrategy.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAEV,eAAe,EACf,gBAAgB,EAEhB,mBAAmB,EACnB,qBAAqB,EAEtB,MAAM,aAAa,CAAC;AAWrB,qBAAa,sBAAuB,YAAW,mBAAmB;IAChE,QAAQ,CAAC,IAAI,EAAG,SAAS,CAAU;IACnC,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;IA0H5B,qDAAqD;IACrD,OAAO,CAAC,eAAe;IA8BvB,6EAA6E;IAC7E,OAAO,CAAC,aAAa;IAyBrB,8CAA8C;IAC9C,OAAO,CAAC,eAAe;IAcvB,kDAAkD;IAClD,OAAO,CAAC,UAAU;CAwBnB"}
@@ -0,0 +1,203 @@
1
+ /**
2
+ * SlidingSummaryStrategy — Default compaction strategy.
3
+ *
4
+ * Summarizes the oldest N messages into a single paragraph, preserving
5
+ * the most recent K turns raw. Simple, predictable, low latency.
6
+ */
7
+ /** ~4 chars per token. */
8
+ function estimateTokens(text) {
9
+ return Math.ceil(text.length / 4);
10
+ }
11
+ function generateId() {
12
+ return `compact-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;
13
+ }
14
+ export class SlidingSummaryStrategy {
15
+ constructor(llmInvoker) {
16
+ this.name = 'sliding';
17
+ this.llmInvoker = llmInvoker;
18
+ }
19
+ async compact(input, config) {
20
+ const startTime = Date.now();
21
+ const { messages, maxContextTokens } = input;
22
+ // Determine how many messages to keep raw.
23
+ const preserveCount = Math.min(config.preserveRecentTurns * 2, // turns → messages (user+assistant)
24
+ messages.length - 2);
25
+ const splitIdx = messages.length - preserveCount;
26
+ if (splitIdx <= 0) {
27
+ // Nothing to compact.
28
+ return this.noopResult(messages, startTime);
29
+ }
30
+ const toCompact = messages.slice(0, splitIdx);
31
+ const toKeep = messages.slice(splitIdx);
32
+ // Calculate input tokens.
33
+ const inputTokens = toCompact.reduce((s, m) => s + m.tokenEstimate, 0);
34
+ // Build the summarization prompt.
35
+ const targetTokens = Math.max(100, Math.ceil(inputTokens / config.targetCompressionRatio));
36
+ const conversationText = toCompact
37
+ .map((m) => `[${m.role}] ${m.content}`)
38
+ .join('\n');
39
+ const prompt = [
40
+ 'Summarize this conversation segment concisely, preserving:',
41
+ '- All decisions made and their rationale',
42
+ '- Action items and commitments',
43
+ '- Named entities (people, projects, URLs, file paths)',
44
+ '- Technical details that affect ongoing work',
45
+ '- Any unresolved questions or open threads',
46
+ '',
47
+ 'Drop: greetings, filler, repeated information, verbose explanations of things already decided.',
48
+ `Target length: ~${targetTokens} tokens.`,
49
+ '',
50
+ `Conversation (turns ${toCompact[0].turnIndex}–${toCompact[toCompact.length - 1].turnIndex}):`,
51
+ '',
52
+ conversationText,
53
+ '',
54
+ 'Summary:',
55
+ ].join('\n');
56
+ let summary;
57
+ let entities;
58
+ let droppedContent = [];
59
+ try {
60
+ const raw = await this.llmInvoker(prompt);
61
+ summary = raw.trim();
62
+ entities = this.extractEntities(summary);
63
+ droppedContent = this.detectDropped(toCompact, summary);
64
+ }
65
+ catch {
66
+ // Fallback: take first and last messages as crude summary.
67
+ summary = this.fallbackSummary(toCompact);
68
+ entities = this.extractEntities(summary);
69
+ }
70
+ const outputTokens = estimateTokens(summary);
71
+ const turnRange = [
72
+ toCompact[0].turnIndex,
73
+ toCompact[toCompact.length - 1].turnIndex,
74
+ ];
75
+ // Build the summary message that replaces compacted messages.
76
+ const summaryMessage = {
77
+ role: 'system',
78
+ content: `[Conversation summary — turns ${turnRange[0]}–${turnRange[1]}, ${inputTokens} tokens compressed to ${outputTokens}]\n${summary}`,
79
+ timestamp: Date.now(),
80
+ turnIndex: toCompact[0].turnIndex,
81
+ tokenEstimate: outputTokens + 20, // overhead for the header
82
+ compacted: true,
83
+ };
84
+ const entryId = generateId();
85
+ const node = {
86
+ id: `chain-${entryId}`,
87
+ level: 0,
88
+ turnRange,
89
+ summary,
90
+ tokenEstimate: outputTokens,
91
+ createdAt: Date.now(),
92
+ childIds: [],
93
+ entities,
94
+ compactionEntryId: entryId,
95
+ };
96
+ const entry = {
97
+ id: entryId,
98
+ timestamp: Date.now(),
99
+ turnRange,
100
+ strategy: 'sliding',
101
+ inputTokens,
102
+ outputTokens,
103
+ compressionRatio: outputTokens > 0
104
+ ? Math.round((inputTokens / outputTokens) * 10) / 10
105
+ : inputTokens,
106
+ summary,
107
+ droppedContent,
108
+ preservedEntities: entities,
109
+ tracesCreated: [],
110
+ emotionalContext: input.emotionalContext,
111
+ durationMs: Date.now() - startTime,
112
+ };
113
+ return {
114
+ messages: [summaryMessage, ...toKeep],
115
+ newNodes: [node],
116
+ entry,
117
+ tracesToEncode: [],
118
+ };
119
+ }
120
+ // ── Helpers ────────────────────────────────────────────────────────
121
+ /** Extract likely entity names from summary text. */
122
+ extractEntities(text) {
123
+ const entities = new Set();
124
+ // File paths.
125
+ const pathMatches = text.match(/[\w/.-]+\.\w{1,5}/g);
126
+ if (pathMatches) {
127
+ for (const p of pathMatches)
128
+ entities.add(p);
129
+ }
130
+ // URLs.
131
+ const urlMatches = text.match(/https?:\/\/[^\s)]+/g);
132
+ if (urlMatches) {
133
+ for (const u of urlMatches)
134
+ entities.add(u);
135
+ }
136
+ // Capitalized multi-word names (simple heuristic).
137
+ const nameMatches = text.match(/[A-Z][a-z]+(?:\s+[A-Z][a-z]+)+/g);
138
+ if (nameMatches) {
139
+ for (const n of nameMatches)
140
+ entities.add(n);
141
+ }
142
+ // Backtick-quoted identifiers.
143
+ const codeMatches = text.match(/`[^`]+`/g);
144
+ if (codeMatches) {
145
+ for (const c of codeMatches)
146
+ entities.add(c.replace(/`/g, ''));
147
+ }
148
+ return Array.from(entities).slice(0, 50); // cap at 50
149
+ }
150
+ /** Detect content fragments from compacted messages missing from summary. */
151
+ detectDropped(messages, summary) {
152
+ const dropped = [];
153
+ const summaryLower = summary.toLowerCase();
154
+ for (const msg of messages) {
155
+ // Check if any significant user statements are absent.
156
+ if (msg.role !== 'user' || msg.content.length < 30)
157
+ continue;
158
+ // Extract key phrases (first sentence or up to 80 chars).
159
+ const firstSentence = msg.content.split(/[.!?\n]/)[0].trim();
160
+ if (firstSentence.length > 15 &&
161
+ !summaryLower.includes(firstSentence.toLowerCase().slice(0, 30))) {
162
+ dropped.push(`Turn ${msg.turnIndex}: "${firstSentence.slice(0, 100)}"`);
163
+ }
164
+ }
165
+ return dropped.slice(0, 20); // cap
166
+ }
167
+ /** Crude fallback when LLM is unavailable. */
168
+ fallbackSummary(messages) {
169
+ const userMsgs = messages.filter((m) => m.role === 'user');
170
+ if (userMsgs.length === 0)
171
+ return 'Previous conversation context.';
172
+ // Take first and last user messages as anchors.
173
+ const first = userMsgs[0].content.slice(0, 200);
174
+ const last = userMsgs[userMsgs.length - 1].content.slice(0, 200);
175
+ if (userMsgs.length === 1) {
176
+ return `User discussed: ${first}`;
177
+ }
178
+ return `Conversation started with: ${first}\n\nMost recently discussed: ${last}`;
179
+ }
180
+ /** No-op result when nothing needs compaction. */
181
+ noopResult(messages, startTime) {
182
+ return {
183
+ messages,
184
+ newNodes: [],
185
+ entry: {
186
+ id: generateId(),
187
+ timestamp: Date.now(),
188
+ turnRange: [0, 0],
189
+ strategy: 'sliding',
190
+ inputTokens: 0,
191
+ outputTokens: 0,
192
+ compressionRatio: 1,
193
+ summary: '',
194
+ droppedContent: [],
195
+ preservedEntities: [],
196
+ tracesCreated: [],
197
+ durationMs: Date.now() - startTime,
198
+ },
199
+ tracesToEncode: [],
200
+ };
201
+ }
202
+ }
203
+ //# sourceMappingURL=SlidingSummaryStrategy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SlidingSummaryStrategy.js","sourceRoot":"","sources":["../../../../src/memory/context/strategies/SlidingSummaryStrategy.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,120 @@
1
+ /**
2
+ * Infinite Context Window — Types
3
+ *
4
+ * Data model for context window lifecycle management, compaction strategies,
5
+ * and transparency logging.
6
+ */
7
+ import type { EmotionalContext, MemoryTrace } from '../types.js';
8
+ import type { ObservationNote } from '../observation/MemoryObserver.js';
9
+ export type CompactionStrategy = 'sliding' | 'hierarchical' | 'hybrid';
10
+ export type TransparencyLevel = 'full' | 'summary' | 'silent';
11
+ export interface InfiniteContextConfig {
12
+ /** Enable infinite context window management. */
13
+ enabled: boolean;
14
+ /** Compaction strategy to use. */
15
+ strategy: CompactionStrategy;
16
+ /** Trigger compaction when context reaches this fraction of max tokens (0–1). */
17
+ compactionThreshold: number;
18
+ /** Never compact the most recent N turns. */
19
+ preserveRecentTurns: number;
20
+ /** Transparency logging level. */
21
+ transparencyLevel: TransparencyLevel;
22
+ /** Max compaction log entries retained in memory. */
23
+ logRetention: number;
24
+ /** Token budget for the rolling summary chain header. */
25
+ maxSummaryChainTokens: number;
26
+ /** Target compression ratio for summaries (e.g. 8 = 8:1). */
27
+ targetCompressionRatio: number;
28
+ /** LLM invoker for summarization. Falls back to Observer/Reflector invokers. */
29
+ llmInvoker?: (prompt: string) => Promise<string>;
30
+ /** Model ID for summarization calls. */
31
+ modelId?: string;
32
+ }
33
+ export declare const DEFAULT_INFINITE_CONTEXT_CONFIG: InfiniteContextConfig;
34
+ export interface ContextMessage {
35
+ role: 'user' | 'assistant' | 'system' | 'tool';
36
+ content: string;
37
+ timestamp: number;
38
+ turnIndex: number;
39
+ tokenEstimate: number;
40
+ /** Set to true after this message has been compacted into a summary. */
41
+ compacted?: boolean;
42
+ }
43
+ export interface CompactionEntry {
44
+ id: string;
45
+ timestamp: number;
46
+ /** Inclusive turn range that was compacted. */
47
+ turnRange: [number, number];
48
+ /** Strategy that produced this compaction. */
49
+ strategy: CompactionStrategy;
50
+ /** Token count of the raw messages before compaction. */
51
+ inputTokens: number;
52
+ /** Token count of the produced summary. */
53
+ outputTokens: number;
54
+ /** Compression ratio (inputTokens / outputTokens). */
55
+ compressionRatio: number;
56
+ /** The summary text that replaced the raw messages. */
57
+ summary: string;
58
+ /** Content fragments intentionally dropped (low importance). */
59
+ droppedContent: string[];
60
+ /** Named entities preserved in the summary. */
61
+ preservedEntities: string[];
62
+ /** Memory trace IDs created from this compaction. */
63
+ tracesCreated: string[];
64
+ /** Observation notes extracted during compaction (hybrid strategy). */
65
+ observationNotes?: ObservationNote[];
66
+ /** Emotional context at time of compaction. */
67
+ emotionalContext?: EmotionalContext;
68
+ /** Duration of the compaction operation in ms. */
69
+ durationMs: number;
70
+ }
71
+ export interface SummaryChainNode {
72
+ id: string;
73
+ /** Level in the hierarchy (0 = leaf summary, higher = summary-of-summaries). */
74
+ level: number;
75
+ /** Turn range covered by this node. */
76
+ turnRange: [number, number];
77
+ /** The summary text. */
78
+ summary: string;
79
+ /** Token estimate for this summary. */
80
+ tokenEstimate: number;
81
+ /** Timestamp of creation. */
82
+ createdAt: number;
83
+ /** ID of the parent node (summary that absorbed this one), if any. */
84
+ parentId?: string;
85
+ /** IDs of child nodes that were merged to create this node. */
86
+ childIds: string[];
87
+ /** Key entities mentioned in this summary. */
88
+ entities: string[];
89
+ /** Compaction entry ID that produced this node. */
90
+ compactionEntryId: string;
91
+ }
92
+ export interface CompactionInput {
93
+ /** All messages in the conversation. */
94
+ messages: ContextMessage[];
95
+ /** Maximum token budget for the entire context window. */
96
+ maxContextTokens: number;
97
+ /** Current total token count. */
98
+ currentTokens: number;
99
+ /** Existing summary chain (for incremental compaction). */
100
+ summaryChain: SummaryChainNode[];
101
+ /** Current emotional context, if available. */
102
+ emotionalContext?: EmotionalContext;
103
+ /** Recent memory traces for context (hybrid strategy). */
104
+ recentTraces?: MemoryTrace[];
105
+ }
106
+ export interface CompactionResult {
107
+ /** Messages after compaction (some replaced with summary blocks). */
108
+ messages: ContextMessage[];
109
+ /** New summary chain nodes produced. */
110
+ newNodes: SummaryChainNode[];
111
+ /** Compaction log entry. */
112
+ entry: CompactionEntry;
113
+ /** Memory traces to encode from the compacted content. */
114
+ tracesToEncode: Partial<MemoryTrace>[];
115
+ }
116
+ export interface ICompactionStrategy {
117
+ readonly name: CompactionStrategy;
118
+ compact(input: CompactionInput, config: InfiniteContextConfig): Promise<CompactionResult>;
119
+ }
120
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/memory/context/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Infinite Context Window — Types
3
+ *
4
+ * Data model for context window lifecycle management, compaction strategies,
5
+ * and transparency logging.
6
+ */
7
+ export const DEFAULT_INFINITE_CONTEXT_CONFIG = {
8
+ enabled: false,
9
+ strategy: 'sliding',
10
+ compactionThreshold: 0.75,
11
+ preserveRecentTurns: 20,
12
+ transparencyLevel: 'summary',
13
+ logRetention: 100,
14
+ maxSummaryChainTokens: 2000,
15
+ targetCompressionRatio: 8,
16
+ };
17
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/memory/context/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAiCH,MAAM,CAAC,MAAM,+BAA+B,GAA0B;IACpE,OAAO,EAAE,KAAK;IACd,QAAQ,EAAE,SAAS;IACnB,mBAAmB,EAAE,IAAI;IACzB,mBAAmB,EAAE,EAAE;IACvB,iBAAiB,EAAE,SAAS;IAC5B,YAAY,EAAE,GAAG;IACjB,qBAAqB,EAAE,IAAI;IAC3B,sBAAsB,EAAE,CAAC;CAC1B,CAAC"}