@framers/agentos 0.1.46 → 0.1.47

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 (211) 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/OpenAIProvider.d.ts.map +1 -1
  27. package/dist/core/llm/providers/implementations/OpenAIProvider.js +8 -1
  28. package/dist/core/llm/providers/implementations/OpenAIProvider.js.map +1 -1
  29. package/dist/extensions/ExtensionManager.d.ts.map +1 -1
  30. package/dist/extensions/ExtensionManager.js +9 -1
  31. package/dist/extensions/ExtensionManager.js.map +1 -1
  32. package/dist/extensions/types.d.ts +20 -2
  33. package/dist/extensions/types.d.ts.map +1 -1
  34. package/dist/extensions/types.js +4 -0
  35. package/dist/extensions/types.js.map +1 -1
  36. package/dist/index.d.ts +2 -0
  37. package/dist/index.d.ts.map +1 -1
  38. package/dist/index.js +4 -0
  39. package/dist/index.js.map +1 -1
  40. package/dist/memory/CognitiveMemoryManager.d.ts +133 -0
  41. package/dist/memory/CognitiveMemoryManager.d.ts.map +1 -0
  42. package/dist/memory/CognitiveMemoryManager.js +519 -0
  43. package/dist/memory/CognitiveMemoryManager.js.map +1 -0
  44. package/dist/memory/config.d.ts +135 -0
  45. package/dist/memory/config.d.ts.map +1 -0
  46. package/dist/memory/config.js +28 -0
  47. package/dist/memory/config.js.map +1 -0
  48. package/dist/memory/consolidation/ConsolidationPipeline.d.ts +70 -0
  49. package/dist/memory/consolidation/ConsolidationPipeline.d.ts.map +1 -0
  50. package/dist/memory/consolidation/ConsolidationPipeline.js +301 -0
  51. package/dist/memory/consolidation/ConsolidationPipeline.js.map +1 -0
  52. package/dist/memory/context/CompactionEngine.d.ts +21 -0
  53. package/dist/memory/context/CompactionEngine.d.ts.map +1 -0
  54. package/dist/memory/context/CompactionEngine.js +35 -0
  55. package/dist/memory/context/CompactionEngine.js.map +1 -0
  56. package/dist/memory/context/CompactionLog.d.ts +50 -0
  57. package/dist/memory/context/CompactionLog.d.ts.map +1 -0
  58. package/dist/memory/context/CompactionLog.js +139 -0
  59. package/dist/memory/context/CompactionLog.js.map +1 -0
  60. package/dist/memory/context/ContextWindowManager.d.ts +114 -0
  61. package/dist/memory/context/ContextWindowManager.d.ts.map +1 -0
  62. package/dist/memory/context/ContextWindowManager.js +225 -0
  63. package/dist/memory/context/ContextWindowManager.js.map +1 -0
  64. package/dist/memory/context/RollingSummaryChain.d.ts +53 -0
  65. package/dist/memory/context/RollingSummaryChain.d.ts.map +1 -0
  66. package/dist/memory/context/RollingSummaryChain.js +193 -0
  67. package/dist/memory/context/RollingSummaryChain.js.map +1 -0
  68. package/dist/memory/context/index.d.ts +15 -0
  69. package/dist/memory/context/index.d.ts.map +1 -0
  70. package/dist/memory/context/index.js +14 -0
  71. package/dist/memory/context/index.js.map +1 -0
  72. package/dist/memory/context/strategies/HierarchicalStrategy.d.ts +25 -0
  73. package/dist/memory/context/strategies/HierarchicalStrategy.d.ts.map +1 -0
  74. package/dist/memory/context/strategies/HierarchicalStrategy.js +240 -0
  75. package/dist/memory/context/strategies/HierarchicalStrategy.js.map +1 -0
  76. package/dist/memory/context/strategies/HybridStrategy.d.ts +26 -0
  77. package/dist/memory/context/strategies/HybridStrategy.d.ts.map +1 -0
  78. package/dist/memory/context/strategies/HybridStrategy.js +245 -0
  79. package/dist/memory/context/strategies/HybridStrategy.js.map +1 -0
  80. package/dist/memory/context/strategies/SlidingSummaryStrategy.d.ts +22 -0
  81. package/dist/memory/context/strategies/SlidingSummaryStrategy.d.ts.map +1 -0
  82. package/dist/memory/context/strategies/SlidingSummaryStrategy.js +203 -0
  83. package/dist/memory/context/strategies/SlidingSummaryStrategy.js.map +1 -0
  84. package/dist/memory/context/types.d.ts +120 -0
  85. package/dist/memory/context/types.d.ts.map +1 -0
  86. package/dist/memory/context/types.js +17 -0
  87. package/dist/memory/context/types.js.map +1 -0
  88. package/dist/memory/decay/DecayModel.d.ts +87 -0
  89. package/dist/memory/decay/DecayModel.d.ts.map +1 -0
  90. package/dist/memory/decay/DecayModel.js +117 -0
  91. package/dist/memory/decay/DecayModel.js.map +1 -0
  92. package/dist/memory/decay/RetrievalPriorityScorer.d.ts +63 -0
  93. package/dist/memory/decay/RetrievalPriorityScorer.d.ts.map +1 -0
  94. package/dist/memory/decay/RetrievalPriorityScorer.js +110 -0
  95. package/dist/memory/decay/RetrievalPriorityScorer.js.map +1 -0
  96. package/dist/memory/encoding/ContentFeatureDetector.d.ts +37 -0
  97. package/dist/memory/encoding/ContentFeatureDetector.d.ts.map +1 -0
  98. package/dist/memory/encoding/ContentFeatureDetector.js +176 -0
  99. package/dist/memory/encoding/ContentFeatureDetector.js.map +1 -0
  100. package/dist/memory/encoding/EncodingModel.d.ts +67 -0
  101. package/dist/memory/encoding/EncodingModel.d.ts.map +1 -0
  102. package/dist/memory/encoding/EncodingModel.js +171 -0
  103. package/dist/memory/encoding/EncodingModel.js.map +1 -0
  104. package/dist/memory/extension/CognitiveMemoryExtension.d.ts +18 -0
  105. package/dist/memory/extension/CognitiveMemoryExtension.d.ts.map +1 -0
  106. package/dist/memory/extension/CognitiveMemoryExtension.js +131 -0
  107. package/dist/memory/extension/CognitiveMemoryExtension.js.map +1 -0
  108. package/dist/memory/graph/GraphologyMemoryGraph.d.ts +29 -0
  109. package/dist/memory/graph/GraphologyMemoryGraph.d.ts.map +1 -0
  110. package/dist/memory/graph/GraphologyMemoryGraph.js +224 -0
  111. package/dist/memory/graph/GraphologyMemoryGraph.js.map +1 -0
  112. package/dist/memory/graph/IMemoryGraph.d.ts +70 -0
  113. package/dist/memory/graph/IMemoryGraph.d.ts.map +1 -0
  114. package/dist/memory/graph/IMemoryGraph.js +15 -0
  115. package/dist/memory/graph/IMemoryGraph.js.map +1 -0
  116. package/dist/memory/graph/KnowledgeGraphMemoryGraph.d.ts +38 -0
  117. package/dist/memory/graph/KnowledgeGraphMemoryGraph.d.ts.map +1 -0
  118. package/dist/memory/graph/KnowledgeGraphMemoryGraph.js +264 -0
  119. package/dist/memory/graph/KnowledgeGraphMemoryGraph.js.map +1 -0
  120. package/dist/memory/graph/SpreadingActivation.d.ts +36 -0
  121. package/dist/memory/graph/SpreadingActivation.d.ts.map +1 -0
  122. package/dist/memory/graph/SpreadingActivation.js +100 -0
  123. package/dist/memory/graph/SpreadingActivation.js.map +1 -0
  124. package/dist/memory/index.d.ts +52 -0
  125. package/dist/memory/index.d.ts.map +1 -0
  126. package/dist/memory/index.js +43 -0
  127. package/dist/memory/index.js.map +1 -0
  128. package/dist/memory/observation/MemoryObserver.d.ts +59 -0
  129. package/dist/memory/observation/MemoryObserver.d.ts.map +1 -0
  130. package/dist/memory/observation/MemoryObserver.js +136 -0
  131. package/dist/memory/observation/MemoryObserver.js.map +1 -0
  132. package/dist/memory/observation/MemoryReflector.d.ts +51 -0
  133. package/dist/memory/observation/MemoryReflector.d.ts.map +1 -0
  134. package/dist/memory/observation/MemoryReflector.js +184 -0
  135. package/dist/memory/observation/MemoryReflector.js.map +1 -0
  136. package/dist/memory/observation/ObservationBuffer.d.ts +51 -0
  137. package/dist/memory/observation/ObservationBuffer.d.ts.map +1 -0
  138. package/dist/memory/observation/ObservationBuffer.js +81 -0
  139. package/dist/memory/observation/ObservationBuffer.js.map +1 -0
  140. package/dist/memory/prompt/MemoryFormatters.d.ts +22 -0
  141. package/dist/memory/prompt/MemoryFormatters.d.ts.map +1 -0
  142. package/dist/memory/prompt/MemoryFormatters.js +113 -0
  143. package/dist/memory/prompt/MemoryFormatters.js.map +1 -0
  144. package/dist/memory/prompt/MemoryPromptAssembler.d.ts +40 -0
  145. package/dist/memory/prompt/MemoryPromptAssembler.d.ts.map +1 -0
  146. package/dist/memory/prompt/MemoryPromptAssembler.js +180 -0
  147. package/dist/memory/prompt/MemoryPromptAssembler.js.map +1 -0
  148. package/dist/memory/prospective/ProspectiveMemoryManager.d.ts +83 -0
  149. package/dist/memory/prospective/ProspectiveMemoryManager.d.ts.map +1 -0
  150. package/dist/memory/prospective/ProspectiveMemoryManager.js +128 -0
  151. package/dist/memory/prospective/ProspectiveMemoryManager.js.map +1 -0
  152. package/dist/memory/store/MemoryStore.d.ts +76 -0
  153. package/dist/memory/store/MemoryStore.d.ts.map +1 -0
  154. package/dist/memory/store/MemoryStore.js +320 -0
  155. package/dist/memory/store/MemoryStore.js.map +1 -0
  156. package/dist/memory/types.d.ts +184 -0
  157. package/dist/memory/types.d.ts.map +1 -0
  158. package/dist/memory/types.js +14 -0
  159. package/dist/memory/types.js.map +1 -0
  160. package/dist/memory/working/CognitiveWorkingMemory.d.ts +87 -0
  161. package/dist/memory/working/CognitiveWorkingMemory.d.ts.map +1 -0
  162. package/dist/memory/working/CognitiveWorkingMemory.js +230 -0
  163. package/dist/memory/working/CognitiveWorkingMemory.js.map +1 -0
  164. package/dist/rag/EmbeddingManager.d.ts.map +1 -1
  165. package/dist/rag/EmbeddingManager.js +8 -1
  166. package/dist/rag/EmbeddingManager.js.map +1 -1
  167. package/dist/speech/SpeechProviderRegistry.d.ts +17 -0
  168. package/dist/speech/SpeechProviderRegistry.d.ts.map +1 -0
  169. package/dist/speech/SpeechProviderRegistry.js +47 -0
  170. package/dist/speech/SpeechProviderRegistry.js.map +1 -0
  171. package/dist/speech/SpeechRuntime.d.ts +28 -0
  172. package/dist/speech/SpeechRuntime.d.ts.map +1 -0
  173. package/dist/speech/SpeechRuntime.js +138 -0
  174. package/dist/speech/SpeechRuntime.js.map +1 -0
  175. package/dist/speech/SpeechSession.d.ts +37 -0
  176. package/dist/speech/SpeechSession.d.ts.map +1 -0
  177. package/dist/speech/SpeechSession.js +285 -0
  178. package/dist/speech/SpeechSession.js.map +1 -0
  179. package/dist/speech/audio.d.ts +3 -0
  180. package/dist/speech/audio.d.ts.map +1 -0
  181. package/dist/speech/audio.js +39 -0
  182. package/dist/speech/audio.js.map +1 -0
  183. package/dist/speech/index.d.ts +11 -0
  184. package/dist/speech/index.d.ts.map +1 -0
  185. package/dist/speech/index.js +11 -0
  186. package/dist/speech/index.js.map +1 -0
  187. package/dist/speech/providerCatalog.d.ts +7 -0
  188. package/dist/speech/providerCatalog.d.ts.map +1 -0
  189. package/dist/speech/providerCatalog.js +243 -0
  190. package/dist/speech/providerCatalog.js.map +1 -0
  191. package/dist/speech/providers/BuiltInAdaptiveVadProvider.d.ts +20 -0
  192. package/dist/speech/providers/BuiltInAdaptiveVadProvider.d.ts.map +1 -0
  193. package/dist/speech/providers/BuiltInAdaptiveVadProvider.js +29 -0
  194. package/dist/speech/providers/BuiltInAdaptiveVadProvider.js.map +1 -0
  195. package/dist/speech/providers/ElevenLabsTextToSpeechProvider.d.ts +20 -0
  196. package/dist/speech/providers/ElevenLabsTextToSpeechProvider.d.ts.map +1 -0
  197. package/dist/speech/providers/ElevenLabsTextToSpeechProvider.js +95 -0
  198. package/dist/speech/providers/ElevenLabsTextToSpeechProvider.js.map +1 -0
  199. package/dist/speech/providers/OpenAITextToSpeechProvider.d.ts +20 -0
  200. package/dist/speech/providers/OpenAITextToSpeechProvider.d.ts.map +1 -0
  201. package/dist/speech/providers/OpenAITextToSpeechProvider.js +75 -0
  202. package/dist/speech/providers/OpenAITextToSpeechProvider.js.map +1 -0
  203. package/dist/speech/providers/OpenAIWhisperSpeechToTextProvider.d.ts +18 -0
  204. package/dist/speech/providers/OpenAIWhisperSpeechToTextProvider.d.ts.map +1 -0
  205. package/dist/speech/providers/OpenAIWhisperSpeechToTextProvider.js +109 -0
  206. package/dist/speech/providers/OpenAIWhisperSpeechToTextProvider.js.map +1 -0
  207. package/dist/speech/types.d.ts +270 -0
  208. package/dist/speech/types.d.ts.map +1 -0
  209. package/dist/speech/types.js +2 -0
  210. package/dist/speech/types.js.map +1 -0
  211. package/package.json +22 -2
@@ -0,0 +1,50 @@
1
+ /**
2
+ * CompactionLog — Transparency audit trail for context window compaction.
3
+ *
4
+ * Every compaction event is logged with full provenance: what was compressed,
5
+ * the summary produced, entities preserved, content dropped, traces created.
6
+ * The log is queryable so agents and users can trace what happened to any
7
+ * piece of conversation history.
8
+ */
9
+ import type { CompactionEntry, TransparencyLevel } from './types.js';
10
+ export declare class CompactionLog {
11
+ private entries;
12
+ private readonly maxEntries;
13
+ private readonly level;
14
+ constructor(maxEntries?: number, level?: TransparencyLevel);
15
+ /** Record a compaction event. */
16
+ append(entry: CompactionEntry): void;
17
+ /** All entries, newest last. */
18
+ getAll(): readonly CompactionEntry[];
19
+ /** Get a single entry by ID. */
20
+ getById(id: string): CompactionEntry | undefined;
21
+ /** Find compaction entries that cover a specific turn index. */
22
+ findByTurn(turnIndex: number): CompactionEntry[];
23
+ /** Find entries that mention a specific entity. */
24
+ findByEntity(entity: string): CompactionEntry[];
25
+ /** Find entries within a time range. */
26
+ findByTimeRange(startMs: number, endMs: number): CompactionEntry[];
27
+ /** Search compaction summaries for a keyword. */
28
+ search(keyword: string): CompactionEntry[];
29
+ /** Aggregate statistics across all logged compactions. */
30
+ getStats(): CompactionLogStats;
31
+ /** Format a single entry for display in the agent's context or UI. */
32
+ static formatEntry(entry: CompactionEntry): string;
33
+ /** Format full log for display. */
34
+ format(): string;
35
+ /** Clear all entries. */
36
+ clear(): void;
37
+ get size(): number;
38
+ }
39
+ export interface CompactionLogStats {
40
+ totalCompactions: number;
41
+ totalInputTokens: number;
42
+ totalOutputTokens: number;
43
+ avgCompressionRatio: number;
44
+ totalTracesCreated: number;
45
+ totalEntitiesPreserved: number;
46
+ avgDurationMs: number;
47
+ oldestEntry: CompactionEntry | undefined;
48
+ newestEntry: CompactionEntry | undefined;
49
+ }
50
+ //# sourceMappingURL=CompactionLog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CompactionLog.d.ts","sourceRoot":"","sources":["../../../src/memory/context/CompactionLog.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAErE,qBAAa,aAAa;IACxB,OAAO,CAAC,OAAO,CAAyB;IACxC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAoB;gBAE9B,UAAU,SAAM,EAAE,KAAK,GAAE,iBAA6B;IAOlE,iCAAiC;IACjC,MAAM,CAAC,KAAK,EAAE,eAAe,GAAG,IAAI;IAuBpC,gCAAgC;IAChC,MAAM,IAAI,SAAS,eAAe,EAAE;IAIpC,gCAAgC;IAChC,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS;IAIhD,gEAAgE;IAChE,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,eAAe,EAAE;IAMhD,mDAAmD;IACnD,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,eAAe,EAAE;IAO/C,wCAAwC;IACxC,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,eAAe,EAAE;IAMlE,iDAAiD;IACjD,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,eAAe,EAAE;IAO1C,0DAA0D;IAC1D,QAAQ,IAAI,kBAAkB;IA6C9B,sEAAsE;IACtE,MAAM,CAAC,WAAW,CAAC,KAAK,EAAE,eAAe,GAAG,MAAM;IAqBlD,mCAAmC;IACnC,MAAM,IAAI,MAAM;IAOhB,yBAAyB;IACzB,KAAK,IAAI,IAAI;IAIb,IAAI,IAAI,IAAI,MAAM,CAEjB;CACF;AAED,MAAM,WAAW,kBAAkB;IACjC,gBAAgB,EAAE,MAAM,CAAC;IACzB,gBAAgB,EAAE,MAAM,CAAC;IACzB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,sBAAsB,EAAE,MAAM,CAAC;IAC/B,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,eAAe,GAAG,SAAS,CAAC;IACzC,WAAW,EAAE,eAAe,GAAG,SAAS,CAAC;CAC1C"}
@@ -0,0 +1,139 @@
1
+ /**
2
+ * CompactionLog — Transparency audit trail for context window compaction.
3
+ *
4
+ * Every compaction event is logged with full provenance: what was compressed,
5
+ * the summary produced, entities preserved, content dropped, traces created.
6
+ * The log is queryable so agents and users can trace what happened to any
7
+ * piece of conversation history.
8
+ */
9
+ export class CompactionLog {
10
+ constructor(maxEntries = 100, level = 'summary') {
11
+ this.entries = [];
12
+ this.maxEntries = maxEntries;
13
+ this.level = level;
14
+ }
15
+ // ── Write ──────────────────────────────────────────────────────────
16
+ /** Record a compaction event. */
17
+ append(entry) {
18
+ if (this.level === 'silent')
19
+ return;
20
+ // In 'summary' mode strip verbose fields to save memory.
21
+ const stored = this.level === 'summary'
22
+ ? {
23
+ ...entry,
24
+ droppedContent: [], // omit detailed dropped fragments
25
+ observationNotes: undefined,
26
+ }
27
+ : { ...entry };
28
+ this.entries.push(stored);
29
+ // Evict oldest if over retention limit.
30
+ while (this.entries.length > this.maxEntries) {
31
+ this.entries.shift();
32
+ }
33
+ }
34
+ // ── Read ───────────────────────────────────────────────────────────
35
+ /** All entries, newest last. */
36
+ getAll() {
37
+ return this.entries;
38
+ }
39
+ /** Get a single entry by ID. */
40
+ getById(id) {
41
+ return this.entries.find((e) => e.id === id);
42
+ }
43
+ /** Find compaction entries that cover a specific turn index. */
44
+ findByTurn(turnIndex) {
45
+ return this.entries.filter((e) => turnIndex >= e.turnRange[0] && turnIndex <= e.turnRange[1]);
46
+ }
47
+ /** Find entries that mention a specific entity. */
48
+ findByEntity(entity) {
49
+ const lower = entity.toLowerCase();
50
+ return this.entries.filter((e) => e.preservedEntities.some((pe) => pe.toLowerCase().includes(lower)));
51
+ }
52
+ /** Find entries within a time range. */
53
+ findByTimeRange(startMs, endMs) {
54
+ return this.entries.filter((e) => e.timestamp >= startMs && e.timestamp <= endMs);
55
+ }
56
+ /** Search compaction summaries for a keyword. */
57
+ search(keyword) {
58
+ const lower = keyword.toLowerCase();
59
+ return this.entries.filter((e) => e.summary.toLowerCase().includes(lower));
60
+ }
61
+ // ── Stats ──────────────────────────────────────────────────────────
62
+ /** Aggregate statistics across all logged compactions. */
63
+ getStats() {
64
+ if (this.entries.length === 0) {
65
+ return {
66
+ totalCompactions: 0,
67
+ totalInputTokens: 0,
68
+ totalOutputTokens: 0,
69
+ avgCompressionRatio: 0,
70
+ totalTracesCreated: 0,
71
+ totalEntitiesPreserved: 0,
72
+ avgDurationMs: 0,
73
+ oldestEntry: undefined,
74
+ newestEntry: undefined,
75
+ };
76
+ }
77
+ let totalInput = 0;
78
+ let totalOutput = 0;
79
+ let totalTraces = 0;
80
+ let totalDuration = 0;
81
+ const entitySet = new Set();
82
+ for (const e of this.entries) {
83
+ totalInput += e.inputTokens;
84
+ totalOutput += e.outputTokens;
85
+ totalTraces += e.tracesCreated.length;
86
+ totalDuration += e.durationMs;
87
+ for (const ent of e.preservedEntities)
88
+ entitySet.add(ent);
89
+ }
90
+ return {
91
+ totalCompactions: this.entries.length,
92
+ totalInputTokens: totalInput,
93
+ totalOutputTokens: totalOutput,
94
+ avgCompressionRatio: totalOutput > 0 ? Math.round((totalInput / totalOutput) * 10) / 10 : 0,
95
+ totalTracesCreated: totalTraces,
96
+ totalEntitiesPreserved: entitySet.size,
97
+ avgDurationMs: Math.round(totalDuration / this.entries.length),
98
+ oldestEntry: this.entries[0],
99
+ newestEntry: this.entries[this.entries.length - 1],
100
+ };
101
+ }
102
+ // ── Formatting ─────────────────────────────────────────────────────
103
+ /** Format a single entry for display in the agent's context or UI. */
104
+ static formatEntry(entry) {
105
+ const lines = [
106
+ `[Compaction ${entry.id}]`,
107
+ ` Time: ${new Date(entry.timestamp).toISOString()}`,
108
+ ` Turns: ${entry.turnRange[0]}–${entry.turnRange[1]}`,
109
+ ` Strategy: ${entry.strategy}`,
110
+ ` Compression: ${entry.inputTokens} → ${entry.outputTokens} tokens (${entry.compressionRatio.toFixed(1)}x)`,
111
+ ` Duration: ${entry.durationMs}ms`,
112
+ ];
113
+ if (entry.preservedEntities.length > 0) {
114
+ lines.push(` Entities preserved: ${entry.preservedEntities.join(', ')}`);
115
+ }
116
+ if (entry.tracesCreated.length > 0) {
117
+ lines.push(` Memory traces created: ${entry.tracesCreated.length}`);
118
+ }
119
+ if (entry.droppedContent.length > 0) {
120
+ lines.push(` Dropped fragments: ${entry.droppedContent.length}`);
121
+ }
122
+ return lines.join('\n');
123
+ }
124
+ /** Format full log for display. */
125
+ format() {
126
+ if (this.entries.length === 0)
127
+ return '[No compaction events recorded]';
128
+ return this.entries.map(CompactionLog.formatEntry).join('\n\n');
129
+ }
130
+ // ── Lifecycle ──────────────────────────────────────────────────────
131
+ /** Clear all entries. */
132
+ clear() {
133
+ this.entries = [];
134
+ }
135
+ get size() {
136
+ return this.entries.length;
137
+ }
138
+ }
139
+ //# sourceMappingURL=CompactionLog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CompactionLog.js","sourceRoot":"","sources":["../../../src/memory/context/CompactionLog.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,114 @@
1
+ /**
2
+ * ContextWindowManager — Lifecycle orchestrator for infinite context conversations.
3
+ *
4
+ * Sits between the conversation loop and the LLM call. Before each turn:
5
+ * 1. Tracks all messages and their token costs
6
+ * 2. Checks if context window is approaching capacity
7
+ * 3. Triggers compaction when threshold is reached
8
+ * 4. Replaces old messages with compressed summaries
9
+ * 5. Logs every compaction with full transparency
10
+ * 6. Encodes important content as long-term memory traces
11
+ *
12
+ * The manager maintains a rolling summary chain so the agent always has
13
+ * narrative context from the full conversation history.
14
+ */
15
+ import type { EmotionalContext, MemoryTrace } from '../types.js';
16
+ import { CompactionEngine } from './CompactionEngine.js';
17
+ import { CompactionLog, type CompactionLogStats } from './CompactionLog.js';
18
+ import type { CompactionEntry, ContextMessage, InfiniteContextConfig, SummaryChainNode } from './types.js';
19
+ import type { MemoryObserver } from '../observation/MemoryObserver.js';
20
+ import type { MemoryReflector } from '../observation/MemoryReflector.js';
21
+ export interface ContextWindowManagerConfig {
22
+ /** Maximum context window size in tokens. */
23
+ maxContextTokens: number;
24
+ /** Infinite context configuration. */
25
+ infiniteContext: Partial<InfiniteContextConfig>;
26
+ /** LLM invoker for summarization. */
27
+ llmInvoker: (prompt: string) => Promise<string>;
28
+ /** Optional: MemoryObserver for hybrid strategy. */
29
+ observer?: MemoryObserver;
30
+ /** Optional: MemoryReflector for hybrid strategy. */
31
+ reflector?: MemoryReflector;
32
+ /** Callback to encode traces into long-term memory. */
33
+ onTracesCreated?: (traces: Partial<MemoryTrace>[]) => Promise<void>;
34
+ }
35
+ export declare class ContextWindowManager {
36
+ private messages;
37
+ private turnCounter;
38
+ private readonly config;
39
+ private readonly maxContextTokens;
40
+ private readonly engine;
41
+ private readonly log;
42
+ private readonly chain;
43
+ private readonly onTracesCreated?;
44
+ /** Total compactions performed in this session. */
45
+ private compactionCount;
46
+ /** Whether a compaction is currently running (prevent re-entry). */
47
+ private compacting;
48
+ constructor(managerConfig: ContextWindowManagerConfig);
49
+ /**
50
+ * Add a message to the tracked conversation.
51
+ * Call this for every message (user, assistant, system, tool).
52
+ */
53
+ addMessage(role: 'user' | 'assistant' | 'system' | 'tool', content: string): void;
54
+ /**
55
+ * Check whether compaction is needed and perform it if so.
56
+ * Call this BEFORE assembling the prompt for the LLM.
57
+ *
58
+ * Returns the current message list (potentially compacted).
59
+ */
60
+ beforeTurn(systemPromptTokens: number, memoryBudgetTokens: number, emotionalContext?: EmotionalContext): Promise<ContextMessage[]>;
61
+ /**
62
+ * Get the formatted summary chain for injection into the system prompt
63
+ * or as a conversation-history block.
64
+ */
65
+ getSummaryContext(): string;
66
+ /** Get all current messages (including any summary blocks). */
67
+ getMessages(): readonly ContextMessage[];
68
+ /** Get only the raw (non-compacted) messages. */
69
+ getRawMessages(): ContextMessage[];
70
+ /** Current total token estimate across all messages. */
71
+ getCurrentTokens(): number;
72
+ /** Current turn index. */
73
+ getCurrentTurn(): number;
74
+ /** Replace the message list (e.g. after external manipulation). */
75
+ setMessages(messages: ContextMessage[]): void;
76
+ /** Get the compaction log. */
77
+ getLog(): CompactionLog;
78
+ /** Get all compaction entries. */
79
+ getCompactionHistory(): readonly CompactionEntry[];
80
+ /** Get aggregate stats. */
81
+ getStats(): ContextWindowStats;
82
+ /** Get the summary chain for UI display. */
83
+ getSummaryChain(): SummaryChainNode[];
84
+ /** Search the compaction log for a keyword. */
85
+ searchHistory(keyword: string): CompactionEntry[];
86
+ /** Find what happened to a specific turn. */
87
+ findTurnHistory(turnIndex: number): CompactionEntry[];
88
+ /**
89
+ * Format a transparency report for the agent's context.
90
+ * Includes: current state, recent compactions, summary chain.
91
+ */
92
+ formatTransparencyReport(): string;
93
+ /** Reset all state. */
94
+ clear(): void;
95
+ /** Get the compaction engine (for strategy inspection/testing). */
96
+ getEngine(): CompactionEngine;
97
+ /** Whether infinite context is enabled. */
98
+ get enabled(): boolean;
99
+ /** Current config (read-only). */
100
+ getConfig(): Readonly<InfiniteContextConfig>;
101
+ }
102
+ export interface ContextWindowStats extends CompactionLogStats {
103
+ currentTokens: number;
104
+ maxTokens: number;
105
+ utilization: number;
106
+ currentTurn: number;
107
+ messageCount: number;
108
+ compactedMessageCount: number;
109
+ summaryChainNodes: number;
110
+ summaryChainTokens: number;
111
+ strategy: string;
112
+ enabled: boolean;
113
+ }
114
+ //# sourceMappingURL=ContextWindowManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ContextWindowManager.d.ts","sourceRoot":"","sources":["../../../src/memory/context/ContextWindowManager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,225 @@
1
+ /**
2
+ * ContextWindowManager — Lifecycle orchestrator for infinite context conversations.
3
+ *
4
+ * Sits between the conversation loop and the LLM call. Before each turn:
5
+ * 1. Tracks all messages and their token costs
6
+ * 2. Checks if context window is approaching capacity
7
+ * 3. Triggers compaction when threshold is reached
8
+ * 4. Replaces old messages with compressed summaries
9
+ * 5. Logs every compaction with full transparency
10
+ * 6. Encodes important content as long-term memory traces
11
+ *
12
+ * The manager maintains a rolling summary chain so the agent always has
13
+ * narrative context from the full conversation history.
14
+ */
15
+ import { CompactionEngine } from './CompactionEngine.js';
16
+ import { CompactionLog } from './CompactionLog.js';
17
+ import { RollingSummaryChain } from './RollingSummaryChain.js';
18
+ import { DEFAULT_INFINITE_CONTEXT_CONFIG } from './types.js';
19
+ function estimateTokens(text) {
20
+ return Math.ceil(text.length / 4);
21
+ }
22
+ export class ContextWindowManager {
23
+ constructor(managerConfig) {
24
+ this.messages = [];
25
+ this.turnCounter = 0;
26
+ /** Total compactions performed in this session. */
27
+ this.compactionCount = 0;
28
+ /** Whether a compaction is currently running (prevent re-entry). */
29
+ this.compacting = false;
30
+ this.config = {
31
+ ...DEFAULT_INFINITE_CONTEXT_CONFIG,
32
+ ...managerConfig.infiniteContext,
33
+ };
34
+ this.maxContextTokens = managerConfig.maxContextTokens;
35
+ this.onTracesCreated = managerConfig.onTracesCreated;
36
+ const llmInvoker = this.config.llmInvoker ?? managerConfig.llmInvoker;
37
+ this.engine = new CompactionEngine(llmInvoker, managerConfig.observer, managerConfig.reflector);
38
+ this.log = new CompactionLog(this.config.logRetention, this.config.transparencyLevel);
39
+ this.chain = new RollingSummaryChain(this.config.maxSummaryChainTokens, llmInvoker);
40
+ }
41
+ // ── Core API ───────────────────────────────────────────────────────
42
+ /**
43
+ * Add a message to the tracked conversation.
44
+ * Call this for every message (user, assistant, system, tool).
45
+ */
46
+ addMessage(role, content) {
47
+ const msg = {
48
+ role,
49
+ content,
50
+ timestamp: Date.now(),
51
+ turnIndex: this.turnCounter,
52
+ tokenEstimate: estimateTokens(content),
53
+ };
54
+ this.messages.push(msg);
55
+ // Increment turn counter on user messages (start of a new turn).
56
+ if (role === 'user') {
57
+ this.turnCounter++;
58
+ }
59
+ }
60
+ /**
61
+ * Check whether compaction is needed and perform it if so.
62
+ * Call this BEFORE assembling the prompt for the LLM.
63
+ *
64
+ * Returns the current message list (potentially compacted).
65
+ */
66
+ async beforeTurn(systemPromptTokens, memoryBudgetTokens, emotionalContext) {
67
+ if (!this.config.enabled || this.compacting) {
68
+ return this.messages;
69
+ }
70
+ const conversationTokens = this.messages.reduce((s, m) => s + m.tokenEstimate, 0);
71
+ const totalTokens = systemPromptTokens + memoryBudgetTokens + conversationTokens;
72
+ const threshold = this.maxContextTokens * this.config.compactionThreshold;
73
+ if (totalTokens < threshold) {
74
+ return this.messages;
75
+ }
76
+ // Perform compaction.
77
+ this.compacting = true;
78
+ try {
79
+ const result = await this.engine.compact({
80
+ messages: this.messages,
81
+ maxContextTokens: this.maxContextTokens,
82
+ currentTokens: totalTokens,
83
+ summaryChain: this.chain.getAllNodes(),
84
+ emotionalContext,
85
+ }, this.config);
86
+ // Update internal state.
87
+ this.messages = result.messages;
88
+ this.chain.addNodes(result.newNodes);
89
+ this.log.append(result.entry);
90
+ this.compactionCount++;
91
+ // Collapse the summary chain if it's grown too large.
92
+ const collapseNodes = await this.chain.collapse();
93
+ if (collapseNodes.length > 0) {
94
+ this.chain.addNodes(collapseNodes);
95
+ }
96
+ // Encode any traces produced by the compaction (hybrid strategy).
97
+ if (result.tracesToEncode.length > 0 && this.onTracesCreated) {
98
+ // Fire and forget — don't block the conversation turn.
99
+ this.onTracesCreated(result.tracesToEncode).catch(() => {
100
+ /* trace encoding failure is non-fatal */
101
+ });
102
+ }
103
+ return this.messages;
104
+ }
105
+ finally {
106
+ this.compacting = false;
107
+ }
108
+ }
109
+ /**
110
+ * Get the formatted summary chain for injection into the system prompt
111
+ * or as a conversation-history block.
112
+ */
113
+ getSummaryContext() {
114
+ return this.chain.formatForPrompt();
115
+ }
116
+ // ── Message Management ─────────────────────────────────────────────
117
+ /** Get all current messages (including any summary blocks). */
118
+ getMessages() {
119
+ return this.messages;
120
+ }
121
+ /** Get only the raw (non-compacted) messages. */
122
+ getRawMessages() {
123
+ return this.messages.filter((m) => !m.compacted);
124
+ }
125
+ /** Current total token estimate across all messages. */
126
+ getCurrentTokens() {
127
+ return this.messages.reduce((s, m) => s + m.tokenEstimate, 0);
128
+ }
129
+ /** Current turn index. */
130
+ getCurrentTurn() {
131
+ return this.turnCounter;
132
+ }
133
+ /** Replace the message list (e.g. after external manipulation). */
134
+ setMessages(messages) {
135
+ this.messages = messages;
136
+ }
137
+ // ── Transparency ───────────────────────────────────────────────────
138
+ /** Get the compaction log. */
139
+ getLog() {
140
+ return this.log;
141
+ }
142
+ /** Get all compaction entries. */
143
+ getCompactionHistory() {
144
+ return this.log.getAll();
145
+ }
146
+ /** Get aggregate stats. */
147
+ getStats() {
148
+ const logStats = this.log.getStats();
149
+ return {
150
+ ...logStats,
151
+ currentTokens: this.getCurrentTokens(),
152
+ maxTokens: this.maxContextTokens,
153
+ utilization: this.getCurrentTokens() / this.maxContextTokens,
154
+ currentTurn: this.turnCounter,
155
+ messageCount: this.messages.length,
156
+ compactedMessageCount: this.messages.filter((m) => m.compacted).length,
157
+ summaryChainNodes: this.chain.size,
158
+ summaryChainTokens: this.chain.getTotalTokens(),
159
+ strategy: this.config.strategy,
160
+ enabled: this.config.enabled,
161
+ };
162
+ }
163
+ /** Get the summary chain for UI display. */
164
+ getSummaryChain() {
165
+ return this.chain.getAllNodes();
166
+ }
167
+ /** Search the compaction log for a keyword. */
168
+ searchHistory(keyword) {
169
+ return this.log.search(keyword);
170
+ }
171
+ /** Find what happened to a specific turn. */
172
+ findTurnHistory(turnIndex) {
173
+ return this.log.findByTurn(turnIndex);
174
+ }
175
+ /**
176
+ * Format a transparency report for the agent's context.
177
+ * Includes: current state, recent compactions, summary chain.
178
+ */
179
+ formatTransparencyReport() {
180
+ const stats = this.getStats();
181
+ const lines = [
182
+ '=== Context Window Status ===',
183
+ `Tokens: ${stats.currentTokens}/${stats.maxTokens} (${(stats.utilization * 100).toFixed(1)}%)`,
184
+ `Turn: ${stats.currentTurn}, Messages: ${stats.messageCount} (${stats.compactedMessageCount} compacted)`,
185
+ `Strategy: ${stats.strategy}, Compactions: ${stats.totalCompactions}`,
186
+ ];
187
+ if (stats.totalCompactions > 0) {
188
+ lines.push(`Avg compression: ${stats.avgCompressionRatio}x, Total traces created: ${stats.totalTracesCreated}`);
189
+ }
190
+ const recent = this.log.getAll().slice(-3);
191
+ if (recent.length > 0) {
192
+ lines.push('', '--- Recent Compactions ---');
193
+ for (const entry of recent) {
194
+ lines.push(CompactionLog.formatEntry(entry));
195
+ }
196
+ }
197
+ const summaryContext = this.chain.formatForPrompt();
198
+ if (summaryContext) {
199
+ lines.push('', '--- Summary Chain ---', summaryContext);
200
+ }
201
+ return lines.join('\n');
202
+ }
203
+ // ── Lifecycle ──────────────────────────────────────────────────────
204
+ /** Reset all state. */
205
+ clear() {
206
+ this.messages = [];
207
+ this.turnCounter = 0;
208
+ this.compactionCount = 0;
209
+ this.log.clear();
210
+ this.chain.clear();
211
+ }
212
+ /** Get the compaction engine (for strategy inspection/testing). */
213
+ getEngine() {
214
+ return this.engine;
215
+ }
216
+ /** Whether infinite context is enabled. */
217
+ get enabled() {
218
+ return this.config.enabled;
219
+ }
220
+ /** Current config (read-only). */
221
+ getConfig() {
222
+ return this.config;
223
+ }
224
+ }
225
+ //# sourceMappingURL=ContextWindowManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ContextWindowManager.js","sourceRoot":"","sources":["../../../src/memory/context/ContextWindowManager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,53 @@
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
+ import type { SummaryChainNode } from './types.js';
20
+ export declare class RollingSummaryChain {
21
+ private nodes;
22
+ private readonly maxBudgetTokens;
23
+ private readonly llmInvoker?;
24
+ constructor(maxBudgetTokens?: number, llmInvoker?: (prompt: string) => Promise<string>);
25
+ /** Add new leaf nodes from a compaction. */
26
+ addNodes(nodes: SummaryChainNode[]): void;
27
+ /**
28
+ * Collapse the chain if it exceeds the token budget.
29
+ * Merges the oldest leaf nodes into a higher-level summary.
30
+ * Returns any newly created parent nodes.
31
+ */
32
+ collapse(): Promise<SummaryChainNode[]>;
33
+ /** Get the active chain — top-level nodes without parents, sorted by turn range. */
34
+ getActiveChain(): SummaryChainNode[];
35
+ /** Format the chain for inclusion in a prompt. */
36
+ formatForPrompt(): string;
37
+ /** Total tokens across all active (non-absorbed) nodes. */
38
+ getTotalTokens(): number;
39
+ /** Get all nodes (including absorbed children, for audit/UI). */
40
+ getAllNodes(): SummaryChainNode[];
41
+ /** Get the full turn range covered by the chain. */
42
+ getCoveredRange(): [number, number] | null;
43
+ get size(): number;
44
+ /** Active leaves = nodes without a parent, sorted by turn range. */
45
+ private getActiveLeaves;
46
+ /** Merge multiple nodes into a single higher-level summary. */
47
+ private mergeNodes;
48
+ /** Non-LLM fallback: concatenate and truncate to budget. */
49
+ private fallbackMerge;
50
+ /** Reset the chain. */
51
+ clear(): void;
52
+ }
53
+ //# sourceMappingURL=RollingSummaryChain.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RollingSummaryChain.d.ts","sourceRoot":"","sources":["../../../src/memory/context/RollingSummaryChain.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAOnD,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,KAAK,CAA4C;IACzD,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAS;IACzC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAsC;gBAGhE,eAAe,SAAO,EACtB,UAAU,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC;IAQlD,4CAA4C;IAC5C,QAAQ,CAAC,KAAK,EAAE,gBAAgB,EAAE,GAAG,IAAI;IAMzC;;;;OAIG;IACG,QAAQ,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC;IA4B7C,oFAAoF;IACpF,cAAc,IAAI,gBAAgB,EAAE;IAIpC,kDAAkD;IAClD,eAAe,IAAI,MAAM;IAuBzB,2DAA2D;IAC3D,cAAc,IAAI,MAAM;IAOxB,iEAAiE;IACjE,WAAW,IAAI,gBAAgB,EAAE;IAMjC,oDAAoD;IACpD,eAAe,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI;IAM1C,IAAI,IAAI,IAAI,MAAM,CAEjB;IAID,oEAAoE;IACpE,OAAO,CAAC,eAAe;IAMvB,+DAA+D;YACjD,UAAU;IAkDxB,4DAA4D;IAC5D,OAAO,CAAC,aAAa;IA8BrB,uBAAuB;IACvB,KAAK,IAAI,IAAI;CAGd"}