@diyor28/context 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (280) hide show
  1. package/README.md +270 -0
  2. package/dist/__tests__/attachment-selector.test.d.ts +11 -0
  3. package/dist/__tests__/attachment-selector.test.d.ts.map +1 -0
  4. package/dist/__tests__/attachment-selector.test.js +449 -0
  5. package/dist/__tests__/attachment-selector.test.js.map +1 -0
  6. package/dist/__tests__/cache-breakpoints.test.d.ts +11 -0
  7. package/dist/__tests__/cache-breakpoints.test.d.ts.map +1 -0
  8. package/dist/__tests__/cache-breakpoints.test.js +398 -0
  9. package/dist/__tests__/cache-breakpoints.test.js.map +1 -0
  10. package/dist/__tests__/codecs.test.d.ts +7 -0
  11. package/dist/__tests__/codecs.test.d.ts.map +1 -0
  12. package/dist/__tests__/codecs.test.js +331 -0
  13. package/dist/__tests__/codecs.test.js.map +1 -0
  14. package/dist/__tests__/compactor.test.d.ts +11 -0
  15. package/dist/__tests__/compactor.test.d.ts.map +1 -0
  16. package/dist/__tests__/compactor.test.js +519 -0
  17. package/dist/__tests__/compactor.test.js.map +1 -0
  18. package/dist/__tests__/context-graph.test.d.ts +7 -0
  19. package/dist/__tests__/context-graph.test.d.ts.map +1 -0
  20. package/dist/__tests__/context-graph.test.js +262 -0
  21. package/dist/__tests__/context-graph.test.js.map +1 -0
  22. package/dist/__tests__/hash.test.d.ts +7 -0
  23. package/dist/__tests__/hash.test.d.ts.map +1 -0
  24. package/dist/__tests__/hash.test.js +228 -0
  25. package/dist/__tests__/hash.test.js.map +1 -0
  26. package/dist/__tests__/integration.test.d.ts +15 -0
  27. package/dist/__tests__/integration.test.d.ts.map +1 -0
  28. package/dist/__tests__/integration.test.js +728 -0
  29. package/dist/__tests__/integration.test.js.map +1 -0
  30. package/dist/__tests__/kind-order.test.d.ts +7 -0
  31. package/dist/__tests__/kind-order.test.d.ts.map +1 -0
  32. package/dist/__tests__/kind-order.test.js +243 -0
  33. package/dist/__tests__/kind-order.test.js.map +1 -0
  34. package/dist/__tests__/phase2-integration.test.d.ts +5 -0
  35. package/dist/__tests__/phase2-integration.test.d.ts.map +1 -0
  36. package/dist/__tests__/phase2-integration.test.js +222 -0
  37. package/dist/__tests__/phase2-integration.test.js.map +1 -0
  38. package/dist/__tests__/queries.test.d.ts +7 -0
  39. package/dist/__tests__/queries.test.d.ts.map +1 -0
  40. package/dist/__tests__/queries.test.js +254 -0
  41. package/dist/__tests__/queries.test.js.map +1 -0
  42. package/dist/__tests__/token-estimator.test.d.ts +7 -0
  43. package/dist/__tests__/token-estimator.test.d.ts.map +1 -0
  44. package/dist/__tests__/token-estimator.test.js +267 -0
  45. package/dist/__tests__/token-estimator.test.js.map +1 -0
  46. package/dist/adapters/anthropic-estimator.d.ts +38 -0
  47. package/dist/adapters/anthropic-estimator.d.ts.map +1 -0
  48. package/dist/adapters/anthropic-estimator.js +108 -0
  49. package/dist/adapters/anthropic-estimator.js.map +1 -0
  50. package/dist/adapters/attachment-resolver.d.ts +96 -0
  51. package/dist/adapters/attachment-resolver.d.ts.map +1 -0
  52. package/dist/adapters/attachment-resolver.js +176 -0
  53. package/dist/adapters/attachment-resolver.js.map +1 -0
  54. package/dist/adapters/attachment-selector.d.ts +59 -0
  55. package/dist/adapters/attachment-selector.d.ts.map +1 -0
  56. package/dist/adapters/attachment-selector.js +163 -0
  57. package/dist/adapters/attachment-selector.js.map +1 -0
  58. package/dist/adapters/gemini-estimator.d.ts +27 -0
  59. package/dist/adapters/gemini-estimator.d.ts.map +1 -0
  60. package/dist/adapters/gemini-estimator.js +80 -0
  61. package/dist/adapters/gemini-estimator.js.map +1 -0
  62. package/dist/adapters/index.d.ts +12 -0
  63. package/dist/adapters/index.d.ts.map +1 -0
  64. package/dist/adapters/index.js +28 -0
  65. package/dist/adapters/index.js.map +1 -0
  66. package/dist/adapters/memory-store.d.ts +139 -0
  67. package/dist/adapters/memory-store.d.ts.map +1 -0
  68. package/dist/adapters/memory-store.js +187 -0
  69. package/dist/adapters/memory-store.js.map +1 -0
  70. package/dist/adapters/openai-estimator.d.ts +35 -0
  71. package/dist/adapters/openai-estimator.d.ts.map +1 -0
  72. package/dist/adapters/openai-estimator.js +89 -0
  73. package/dist/adapters/openai-estimator.js.map +1 -0
  74. package/dist/adapters/summarizer.d.ts +121 -0
  75. package/dist/adapters/summarizer.d.ts.map +1 -0
  76. package/dist/adapters/summarizer.js +121 -0
  77. package/dist/adapters/summarizer.js.map +1 -0
  78. package/dist/adapters/token-estimator.d.ts +63 -0
  79. package/dist/adapters/token-estimator.d.ts.map +1 -0
  80. package/dist/adapters/token-estimator.js +37 -0
  81. package/dist/adapters/token-estimator.js.map +1 -0
  82. package/dist/builder/context-builder.d.ts +186 -0
  83. package/dist/builder/context-builder.d.ts.map +1 -0
  84. package/dist/builder/context-builder.js +305 -0
  85. package/dist/builder/context-builder.js.map +1 -0
  86. package/dist/builder/context-fork.d.ts +166 -0
  87. package/dist/builder/context-fork.d.ts.map +1 -0
  88. package/dist/builder/context-fork.js +282 -0
  89. package/dist/builder/context-fork.js.map +1 -0
  90. package/dist/builder/index.d.ts +6 -0
  91. package/dist/builder/index.d.ts.map +1 -0
  92. package/dist/builder/index.js +22 -0
  93. package/dist/builder/index.js.map +1 -0
  94. package/dist/codecs/base.d.ts +18 -0
  95. package/dist/codecs/base.d.ts.map +1 -0
  96. package/dist/codecs/base.js +39 -0
  97. package/dist/codecs/base.js.map +1 -0
  98. package/dist/codecs/conversation-history.codec.d.ts +81 -0
  99. package/dist/codecs/conversation-history.codec.d.ts.map +1 -0
  100. package/dist/codecs/conversation-history.codec.js +89 -0
  101. package/dist/codecs/conversation-history.codec.js.map +1 -0
  102. package/dist/codecs/index.d.ts +31 -0
  103. package/dist/codecs/index.d.ts.map +1 -0
  104. package/dist/codecs/index.js +71 -0
  105. package/dist/codecs/index.js.map +1 -0
  106. package/dist/codecs/redacted-stub.codec.d.ts +32 -0
  107. package/dist/codecs/redacted-stub.codec.d.ts.map +1 -0
  108. package/dist/codecs/redacted-stub.codec.js +64 -0
  109. package/dist/codecs/redacted-stub.codec.js.map +1 -0
  110. package/dist/codecs/structured-reference.codec.d.ts +40 -0
  111. package/dist/codecs/structured-reference.codec.d.ts.map +1 -0
  112. package/dist/codecs/structured-reference.codec.js +81 -0
  113. package/dist/codecs/structured-reference.codec.js.map +1 -0
  114. package/dist/codecs/system-rules.codec.d.ts +32 -0
  115. package/dist/codecs/system-rules.codec.d.ts.map +1 -0
  116. package/dist/codecs/system-rules.codec.js +62 -0
  117. package/dist/codecs/system-rules.codec.js.map +1 -0
  118. package/dist/codecs/tool-output.codec.d.ts +66 -0
  119. package/dist/codecs/tool-output.codec.d.ts.map +1 -0
  120. package/dist/codecs/tool-output.codec.js +95 -0
  121. package/dist/codecs/tool-output.codec.js.map +1 -0
  122. package/dist/codecs/tool-schema.codec.d.ts +36 -0
  123. package/dist/codecs/tool-schema.codec.d.ts.map +1 -0
  124. package/dist/codecs/tool-schema.codec.js +74 -0
  125. package/dist/codecs/tool-schema.codec.js.map +1 -0
  126. package/dist/codecs/unsafe-text.codec.d.ts +28 -0
  127. package/dist/codecs/unsafe-text.codec.d.ts.map +1 -0
  128. package/dist/codecs/unsafe-text.codec.js +63 -0
  129. package/dist/codecs/unsafe-text.codec.js.map +1 -0
  130. package/dist/graph/context-graph.d.ts +121 -0
  131. package/dist/graph/context-graph.d.ts.map +1 -0
  132. package/dist/graph/context-graph.js +166 -0
  133. package/dist/graph/context-graph.js.map +1 -0
  134. package/dist/graph/index.d.ts +8 -0
  135. package/dist/graph/index.d.ts.map +1 -0
  136. package/dist/graph/index.js +24 -0
  137. package/dist/graph/index.js.map +1 -0
  138. package/dist/graph/kind-order.d.ts +60 -0
  139. package/dist/graph/kind-order.d.ts.map +1 -0
  140. package/dist/graph/kind-order.js +113 -0
  141. package/dist/graph/kind-order.js.map +1 -0
  142. package/dist/graph/queries.d.ts +68 -0
  143. package/dist/graph/queries.d.ts.map +1 -0
  144. package/dist/graph/queries.js +240 -0
  145. package/dist/graph/queries.js.map +1 -0
  146. package/dist/graph/views.d.ts +90 -0
  147. package/dist/graph/views.d.ts.map +1 -0
  148. package/dist/graph/views.js +173 -0
  149. package/dist/graph/views.js.map +1 -0
  150. package/dist/index.d.ts +16 -0
  151. package/dist/index.d.ts.map +1 -0
  152. package/dist/index.js +40 -0
  153. package/dist/index.js.map +1 -0
  154. package/dist/pipeline/compactor.d.ts +128 -0
  155. package/dist/pipeline/compactor.d.ts.map +1 -0
  156. package/dist/pipeline/compactor.js +346 -0
  157. package/dist/pipeline/compactor.js.map +1 -0
  158. package/dist/pipeline/index.d.ts +6 -0
  159. package/dist/pipeline/index.d.ts.map +1 -0
  160. package/dist/pipeline/index.js +22 -0
  161. package/dist/pipeline/index.js.map +1 -0
  162. package/dist/pipeline/summarizer.d.ts +18 -0
  163. package/dist/pipeline/summarizer.d.ts.map +1 -0
  164. package/dist/pipeline/summarizer.js +68 -0
  165. package/dist/pipeline/summarizer.js.map +1 -0
  166. package/dist/policies/default-policy.d.ts +29 -0
  167. package/dist/policies/default-policy.d.ts.map +1 -0
  168. package/dist/policies/default-policy.js +58 -0
  169. package/dist/policies/default-policy.js.map +1 -0
  170. package/dist/policies/index.d.ts +5 -0
  171. package/dist/policies/index.d.ts.map +1 -0
  172. package/dist/policies/index.js +21 -0
  173. package/dist/policies/index.js.map +1 -0
  174. package/dist/providers/anthropic-compiler.d.ts +58 -0
  175. package/dist/providers/anthropic-compiler.d.ts.map +1 -0
  176. package/dist/providers/anthropic-compiler.js +182 -0
  177. package/dist/providers/anthropic-compiler.js.map +1 -0
  178. package/dist/providers/capabilities.d.ts +54 -0
  179. package/dist/providers/capabilities.d.ts.map +1 -0
  180. package/dist/providers/capabilities.js +87 -0
  181. package/dist/providers/capabilities.js.map +1 -0
  182. package/dist/providers/gemini-compiler.d.ts +51 -0
  183. package/dist/providers/gemini-compiler.d.ts.map +1 -0
  184. package/dist/providers/gemini-compiler.js +206 -0
  185. package/dist/providers/gemini-compiler.js.map +1 -0
  186. package/dist/providers/index.d.ts +8 -0
  187. package/dist/providers/index.d.ts.map +1 -0
  188. package/dist/providers/index.js +24 -0
  189. package/dist/providers/index.js.map +1 -0
  190. package/dist/providers/openai-compiler.d.ts +46 -0
  191. package/dist/providers/openai-compiler.d.ts.map +1 -0
  192. package/dist/providers/openai-compiler.js +149 -0
  193. package/dist/providers/openai-compiler.js.map +1 -0
  194. package/dist/types/attachment.d.ts +62 -0
  195. package/dist/types/attachment.d.ts.map +1 -0
  196. package/dist/types/attachment.js +6 -0
  197. package/dist/types/attachment.js.map +1 -0
  198. package/dist/types/block.d.ts +61 -0
  199. package/dist/types/block.d.ts.map +1 -0
  200. package/dist/types/block.js +8 -0
  201. package/dist/types/block.js.map +1 -0
  202. package/dist/types/codec.d.ts +58 -0
  203. package/dist/types/codec.d.ts.map +1 -0
  204. package/dist/types/codec.js +6 -0
  205. package/dist/types/codec.js.map +1 -0
  206. package/dist/types/compiled.d.ts +91 -0
  207. package/dist/types/compiled.d.ts.map +1 -0
  208. package/dist/types/compiled.js +6 -0
  209. package/dist/types/compiled.js.map +1 -0
  210. package/dist/types/hash.d.ts +24 -0
  211. package/dist/types/hash.d.ts.map +1 -0
  212. package/dist/types/hash.js +49 -0
  213. package/dist/types/hash.js.map +1 -0
  214. package/dist/types/index.d.ts +10 -0
  215. package/dist/types/index.d.ts.map +1 -0
  216. package/dist/types/index.js +26 -0
  217. package/dist/types/index.js.map +1 -0
  218. package/dist/types/policy.d.ts +128 -0
  219. package/dist/types/policy.d.ts.map +1 -0
  220. package/dist/types/policy.js +55 -0
  221. package/dist/types/policy.js.map +1 -0
  222. package/package.json +55 -0
  223. package/postcss.config.js +4 -0
  224. package/src/__tests__/attachment-selector.test.ts +559 -0
  225. package/src/__tests__/cache-breakpoints.test.ts +566 -0
  226. package/src/__tests__/codecs.test.ts +417 -0
  227. package/src/__tests__/compactor.test.ts +608 -0
  228. package/src/__tests__/context-graph.test.ts +383 -0
  229. package/src/__tests__/hash.test.ts +274 -0
  230. package/src/__tests__/integration.test.ts +866 -0
  231. package/src/__tests__/kind-order.test.ts +312 -0
  232. package/src/__tests__/phase2-integration.test.ts +253 -0
  233. package/src/__tests__/queries.test.ts +387 -0
  234. package/src/__tests__/token-estimator.test.ts +326 -0
  235. package/src/adapters/anthropic-estimator.ts +125 -0
  236. package/src/adapters/attachment-resolver.ts +295 -0
  237. package/src/adapters/attachment-selector.ts +218 -0
  238. package/src/adapters/gemini-estimator.ts +93 -0
  239. package/src/adapters/index.ts +12 -0
  240. package/src/adapters/memory-store.ts +299 -0
  241. package/src/adapters/openai-estimator.ts +105 -0
  242. package/src/adapters/summarizer.ts +250 -0
  243. package/src/adapters/token-estimator.ts +74 -0
  244. package/src/builder/context-builder.ts +467 -0
  245. package/src/builder/context-fork.ts +471 -0
  246. package/src/builder/index.ts +6 -0
  247. package/src/codecs/base.ts +36 -0
  248. package/src/codecs/conversation-history.codec.ts +108 -0
  249. package/src/codecs/index.ts +57 -0
  250. package/src/codecs/redacted-stub.codec.ts +76 -0
  251. package/src/codecs/structured-reference.codec.ts +96 -0
  252. package/src/codecs/system-rules.codec.ts +74 -0
  253. package/src/codecs/tool-output.codec.ts +109 -0
  254. package/src/codecs/tool-schema.codec.ts +87 -0
  255. package/src/codecs/unsafe-text.codec.ts +74 -0
  256. package/src/graph/context-graph.ts +205 -0
  257. package/src/graph/index.ts +8 -0
  258. package/src/graph/kind-order.ts +125 -0
  259. package/src/graph/queries.ts +306 -0
  260. package/src/graph/views.ts +255 -0
  261. package/src/index.ts +31 -0
  262. package/src/pipeline/compactor.ts +563 -0
  263. package/src/pipeline/index.ts +6 -0
  264. package/src/pipeline/summarizer.ts +76 -0
  265. package/src/policies/default-policy.ts +69 -0
  266. package/src/policies/index.ts +5 -0
  267. package/src/providers/anthropic-compiler.ts +294 -0
  268. package/src/providers/capabilities.ts +144 -0
  269. package/src/providers/gemini-compiler.ts +272 -0
  270. package/src/providers/index.ts +8 -0
  271. package/src/providers/openai-compiler.ts +191 -0
  272. package/src/types/attachment.ts +86 -0
  273. package/src/types/block.ts +84 -0
  274. package/src/types/codec.ts +68 -0
  275. package/src/types/compiled.ts +109 -0
  276. package/src/types/hash.ts +58 -0
  277. package/src/types/index.ts +10 -0
  278. package/src/types/policy.ts +194 -0
  279. package/tsconfig.json +21 -0
  280. package/vitest.config.ts +21 -0
@@ -0,0 +1,519 @@
1
+ "use strict";
2
+ /**
3
+ * Unit tests for Compactor: tool output pruning and deduplication.
4
+ *
5
+ * Tests:
6
+ * - Tool output pruning produces normalized shape
7
+ * - Deduplication removes identical blockHash
8
+ * - History trimming keeps recent + error messages
9
+ * - Provenance metadata is preserved
10
+ */
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ const vitest_1 = require("vitest");
13
+ const compactor_js_1 = require("../pipeline/compactor.js");
14
+ const token_estimator_js_1 = require("../adapters/token-estimator.js");
15
+ // Mock token estimator for tests
16
+ class MockTokenEstimator {
17
+ async estimate(blocks) {
18
+ const totalTokens = blocks.reduce((sum, block) => {
19
+ const text = (0, token_estimator_js_1.serializeBlockForEstimation)(block);
20
+ return sum + (0, token_estimator_js_1.heuristicTokenCount)(text);
21
+ }, 0);
22
+ return { tokens: totalTokens, confidence: 'low' };
23
+ }
24
+ async estimateBlock(block) {
25
+ const text = (0, token_estimator_js_1.serializeBlockForEstimation)(block);
26
+ return { tokens: (0, token_estimator_js_1.heuristicTokenCount)(text), confidence: 'low' };
27
+ }
28
+ }
29
+ (0, vitest_1.describe)('Compactor', () => {
30
+ (0, vitest_1.describe)('Deduplication', () => {
31
+ (0, vitest_1.it)('should remove duplicate blocks by blockHash', async () => {
32
+ const duplicateBlock = createBlock('hash1', 'memory', 'data');
33
+ const blocks = [
34
+ duplicateBlock,
35
+ duplicateBlock, // Duplicate
36
+ createBlock('hash2', 'memory', 'other'),
37
+ ];
38
+ const view = createTestView(blocks);
39
+ const estimator = new MockTokenEstimator();
40
+ const result = await (0, compactor_js_1.compactView)(view, { steps: ['dedupe'] }, estimator);
41
+ (0, vitest_1.expect)(result.blocks).toHaveLength(2);
42
+ (0, vitest_1.expect)(result.removedBlocks).toHaveLength(1);
43
+ (0, vitest_1.expect)(result.blocks.map((b) => b.blockHash)).toEqual(['hash1', 'hash2']);
44
+ });
45
+ (0, vitest_1.it)('should keep first occurrence of duplicate', async () => {
46
+ const block1 = createBlock('hash1', 'memory', 'first');
47
+ const block2 = createBlock('hash1', 'memory', 'duplicate');
48
+ const view = createTestView([block1, block2]);
49
+ const estimator = new MockTokenEstimator();
50
+ const result = await (0, compactor_js_1.compactView)(view, { steps: ['dedupe'] }, estimator);
51
+ (0, vitest_1.expect)(result.blocks).toHaveLength(1);
52
+ (0, vitest_1.expect)(result.blocks[0].payload).toBe('first');
53
+ });
54
+ (0, vitest_1.it)('should handle no duplicates', async () => {
55
+ const blocks = [
56
+ createBlock('hash1', 'memory', 'data1'),
57
+ createBlock('hash2', 'memory', 'data2'),
58
+ createBlock('hash3', 'memory', 'data3'),
59
+ ];
60
+ const view = createTestView(blocks);
61
+ const estimator = new MockTokenEstimator();
62
+ const result = await (0, compactor_js_1.compactView)(view, { steps: ['dedupe'] }, estimator);
63
+ (0, vitest_1.expect)(result.blocks).toHaveLength(3);
64
+ (0, vitest_1.expect)(result.removedBlocks).toHaveLength(0);
65
+ });
66
+ (0, vitest_1.it)('should report dedupe step results', async () => {
67
+ const duplicateBlock = createBlock('hash1', 'memory', 'data');
68
+ const blocks = [duplicateBlock, duplicateBlock, duplicateBlock];
69
+ const view = createTestView(blocks);
70
+ const estimator = new MockTokenEstimator();
71
+ const result = await (0, compactor_js_1.compactView)(view, { steps: ['dedupe'] }, estimator);
72
+ const dedupeReport = result.report.stepReports.find((r) => r.step === 'dedupe');
73
+ (0, vitest_1.expect)(dedupeReport).toBeDefined();
74
+ (0, vitest_1.expect)(dedupeReport.blocksRemoved).toBe(2);
75
+ (0, vitest_1.expect)(dedupeReport.lossy).toBe(false);
76
+ });
77
+ });
78
+ (0, vitest_1.describe)('Tool Output Pruning', () => {
79
+ (0, vitest_1.it)('should truncate large tool outputs', async () => {
80
+ const largeOutput = 'x'.repeat(1000);
81
+ const block = createBlock('hash1', 'tool_output', {
82
+ toolName: 'test_tool',
83
+ output: largeOutput,
84
+ });
85
+ const view = createTestView([block]);
86
+ const estimator = new MockTokenEstimator();
87
+ const result = await (0, compactor_js_1.compactView)(view, {
88
+ steps: ['tool_output_prune'],
89
+ toolOutputPruning: {
90
+ maxRawTailChars: 100,
91
+ preserveErrorTail: true,
92
+ maxOutputsPerTool: 3,
93
+ },
94
+ }, estimator);
95
+ // Should have a replacement block
96
+ (0, vitest_1.expect)(result.blocks).toHaveLength(1);
97
+ const truncated = result.blocks[0].payload;
98
+ (0, vitest_1.expect)(truncated._truncated).toBe(true);
99
+ (0, vitest_1.expect)(truncated.output.length).toBeLessThan(largeOutput.length);
100
+ (0, vitest_1.expect)(truncated.output).toContain('truncated');
101
+ });
102
+ (0, vitest_1.it)('should preserve error outputs even if large', async () => {
103
+ const largeErrorOutput = 'error: ' + 'x'.repeat(1000);
104
+ const block = createBlock('hash1', 'tool_output', {
105
+ toolName: 'test_tool',
106
+ output: largeErrorOutput,
107
+ error: true,
108
+ });
109
+ const view = createTestView([block]);
110
+ const estimator = new MockTokenEstimator();
111
+ const result = await (0, compactor_js_1.compactView)(view, {
112
+ steps: ['tool_output_prune'],
113
+ toolOutputPruning: {
114
+ maxRawTailChars: 100,
115
+ preserveErrorTail: true, // Keep errors
116
+ maxOutputsPerTool: 3,
117
+ },
118
+ }, estimator);
119
+ // Should NOT be truncated because it's an error
120
+ const output = result.blocks[0].payload;
121
+ (0, vitest_1.expect)(output._truncated).toBeUndefined();
122
+ (0, vitest_1.expect)(output.output).toBe(largeErrorOutput);
123
+ });
124
+ (0, vitest_1.it)('should keep only recent N outputs per tool', async () => {
125
+ const blocks = [
126
+ createToolOutputBlock('hash1', 'tool1', 'output1', 1000),
127
+ createToolOutputBlock('hash2', 'tool1', 'output2', 2000),
128
+ createToolOutputBlock('hash3', 'tool1', 'output3', 3000),
129
+ createToolOutputBlock('hash4', 'tool1', 'output4', 4000),
130
+ createToolOutputBlock('hash5', 'tool1', 'output5', 5000),
131
+ ];
132
+ const view = createTestView(blocks);
133
+ const estimator = new MockTokenEstimator();
134
+ const result = await (0, compactor_js_1.compactView)(view, {
135
+ steps: ['tool_output_prune'],
136
+ toolOutputPruning: {
137
+ maxRawTailChars: 500,
138
+ preserveErrorTail: true,
139
+ maxOutputsPerTool: 3, // Keep last 3
140
+ },
141
+ }, estimator);
142
+ // Should keep only 3 most recent
143
+ (0, vitest_1.expect)(result.blocks).toHaveLength(3);
144
+ (0, vitest_1.expect)(result.removedBlocks).toHaveLength(2);
145
+ // Check that most recent are kept
146
+ const hashes = result.blocks.map((b) => b.blockHash);
147
+ (0, vitest_1.expect)(hashes).toContain('hash3');
148
+ (0, vitest_1.expect)(hashes).toContain('hash4');
149
+ (0, vitest_1.expect)(hashes).toContain('hash5');
150
+ });
151
+ (0, vitest_1.it)('should handle multiple tool types independently', async () => {
152
+ const blocks = [
153
+ createToolOutputBlock('hash1', 'tool1', 'output1', 1000),
154
+ createToolOutputBlock('hash2', 'tool1', 'output2', 2000),
155
+ createToolOutputBlock('hash3', 'tool2', 'output3', 3000),
156
+ createToolOutputBlock('hash4', 'tool2', 'output4', 4000),
157
+ ];
158
+ const view = createTestView(blocks);
159
+ const estimator = new MockTokenEstimator();
160
+ const result = await (0, compactor_js_1.compactView)(view, {
161
+ steps: ['tool_output_prune'],
162
+ toolOutputPruning: {
163
+ maxRawTailChars: 500,
164
+ preserveErrorTail: true,
165
+ maxOutputsPerTool: 1, // Keep 1 per tool
166
+ },
167
+ }, estimator);
168
+ // Should keep 1 from each tool (most recent)
169
+ (0, vitest_1.expect)(result.blocks).toHaveLength(2);
170
+ (0, vitest_1.expect)(result.blocks.map((b) => b.blockHash).sort()).toEqual(['hash2', 'hash4']);
171
+ });
172
+ (0, vitest_1.it)('should preserve non-tool_output blocks', async () => {
173
+ const blocks = [
174
+ createBlock('hash1', 'pinned', 'system'),
175
+ createToolOutputBlock('hash2', 'tool1', 'output1', 1000),
176
+ createToolOutputBlock('hash3', 'tool1', 'output2', 2000),
177
+ createBlock('hash4', 'memory', 'memory'),
178
+ ];
179
+ const view = createTestView(blocks);
180
+ const estimator = new MockTokenEstimator();
181
+ const result = await (0, compactor_js_1.compactView)(view, {
182
+ steps: ['tool_output_prune'],
183
+ toolOutputPruning: {
184
+ maxRawTailChars: 500,
185
+ preserveErrorTail: true,
186
+ maxOutputsPerTool: 1,
187
+ },
188
+ }, estimator);
189
+ // Should keep all non-tool_output blocks + 1 tool output
190
+ (0, vitest_1.expect)(result.blocks).toHaveLength(3);
191
+ const kinds = result.blocks.map((b) => b.meta.kind);
192
+ (0, vitest_1.expect)(kinds).toContain('pinned');
193
+ (0, vitest_1.expect)(kinds).toContain('memory');
194
+ (0, vitest_1.expect)(kinds).toContain('tool_output');
195
+ });
196
+ (0, vitest_1.it)('should report pruning step results', async () => {
197
+ const largeOutput = 'x'.repeat(1000);
198
+ const block = createBlock('hash1', 'tool_output', {
199
+ toolName: 'test_tool',
200
+ output: largeOutput,
201
+ });
202
+ const view = createTestView([block]);
203
+ const estimator = new MockTokenEstimator();
204
+ const result = await (0, compactor_js_1.compactView)(view, {
205
+ steps: ['tool_output_prune'],
206
+ }, estimator);
207
+ const pruneReport = result.report.stepReports.find((r) => r.step === 'tool_output_prune');
208
+ (0, vitest_1.expect)(pruneReport).toBeDefined();
209
+ (0, vitest_1.expect)(pruneReport.blocksReplaced).toBeGreaterThan(0);
210
+ (0, vitest_1.expect)(pruneReport.lossy).toBe(true);
211
+ });
212
+ (0, vitest_1.it)('should use default config when not provided', async () => {
213
+ const largeOutput = 'x'.repeat(1000);
214
+ const block = createBlock('hash1', 'tool_output', {
215
+ toolName: 'test_tool',
216
+ output: largeOutput,
217
+ });
218
+ const view = createTestView([block]);
219
+ const estimator = new MockTokenEstimator();
220
+ const result = await (0, compactor_js_1.compactView)(view, {
221
+ steps: ['tool_output_prune'],
222
+ // No toolOutputPruning config - should use DEFAULT_TOOL_OUTPUT_PRUNING
223
+ }, estimator);
224
+ (0, vitest_1.expect)(result.blocks).toHaveLength(1);
225
+ const truncated = result.blocks[0].payload;
226
+ (0, vitest_1.expect)(truncated._truncated).toBe(true);
227
+ // Default maxRawTailChars is 500
228
+ (0, vitest_1.expect)(truncated.output.length).toBeLessThan(largeOutput.length);
229
+ });
230
+ });
231
+ (0, vitest_1.describe)('History Trimming', () => {
232
+ (0, vitest_1.it)('should keep recent N messages', async () => {
233
+ const blocks = [
234
+ createHistoryBlock('hash1', 1000),
235
+ createHistoryBlock('hash2', 2000),
236
+ createHistoryBlock('hash3', 3000),
237
+ createHistoryBlock('hash4', 4000),
238
+ createHistoryBlock('hash5', 5000),
239
+ ];
240
+ const view = createTestView(blocks);
241
+ const estimator = new MockTokenEstimator();
242
+ const result = await (0, compactor_js_1.compactView)(view, {
243
+ steps: ['history_trim'],
244
+ historyTrim: {
245
+ keepRecentMessages: 2,
246
+ keepErrorMessages: false,
247
+ },
248
+ }, estimator);
249
+ // Should keep 2 most recent
250
+ (0, vitest_1.expect)(result.blocks).toHaveLength(2);
251
+ (0, vitest_1.expect)(result.blocks.map((b) => b.blockHash)).toEqual(['hash4', 'hash5']);
252
+ });
253
+ (0, vitest_1.it)('should preserve error messages', async () => {
254
+ const blocks = [
255
+ createHistoryBlock('hash1', 1000, { hasError: true }),
256
+ createHistoryBlock('hash2', 2000, { hasError: false }),
257
+ createHistoryBlock('hash3', 3000, { hasError: false }),
258
+ createHistoryBlock('hash4', 4000, { hasError: false }),
259
+ ];
260
+ const view = createTestView(blocks);
261
+ const estimator = new MockTokenEstimator();
262
+ const result = await (0, compactor_js_1.compactView)(view, {
263
+ steps: ['history_trim'],
264
+ historyTrim: {
265
+ keepRecentMessages: 2, // Keep hash3, hash4
266
+ keepErrorMessages: true, // Also keep hash1 (error)
267
+ },
268
+ }, estimator);
269
+ // Should keep 2 recent + 1 error
270
+ (0, vitest_1.expect)(result.blocks).toHaveLength(3);
271
+ const hashes = result.blocks.map((b) => b.blockHash);
272
+ (0, vitest_1.expect)(hashes).toContain('hash1'); // Error message
273
+ (0, vitest_1.expect)(hashes).toContain('hash3'); // Recent
274
+ (0, vitest_1.expect)(hashes).toContain('hash4'); // Recent
275
+ });
276
+ (0, vitest_1.it)('should not remove error messages when keepErrorMessages is false', async () => {
277
+ const blocks = [
278
+ createHistoryBlock('hash1', 1000, { hasError: true }),
279
+ createHistoryBlock('hash2', 2000, { hasError: false }),
280
+ createHistoryBlock('hash3', 3000, { hasError: false }),
281
+ ];
282
+ const view = createTestView(blocks);
283
+ const estimator = new MockTokenEstimator();
284
+ const result = await (0, compactor_js_1.compactView)(view, {
285
+ steps: ['history_trim'],
286
+ historyTrim: {
287
+ keepRecentMessages: 1,
288
+ keepErrorMessages: false,
289
+ },
290
+ }, estimator);
291
+ // Should only keep 1 most recent (hash3)
292
+ (0, vitest_1.expect)(result.blocks).toHaveLength(1);
293
+ (0, vitest_1.expect)(result.blocks[0].blockHash).toBe('hash3');
294
+ });
295
+ (0, vitest_1.it)('should preserve non-history blocks', async () => {
296
+ const blocks = [
297
+ createBlock('hash1', 'pinned', 'system'),
298
+ createHistoryBlock('hash2', 1000),
299
+ createHistoryBlock('hash3', 2000),
300
+ createBlock('hash4', 'memory', 'memory'),
301
+ ];
302
+ const view = createTestView(blocks);
303
+ const estimator = new MockTokenEstimator();
304
+ const result = await (0, compactor_js_1.compactView)(view, {
305
+ steps: ['history_trim'],
306
+ historyTrim: {
307
+ keepRecentMessages: 1,
308
+ keepErrorMessages: false,
309
+ },
310
+ }, estimator);
311
+ // Should keep all non-history + 1 history
312
+ (0, vitest_1.expect)(result.blocks).toHaveLength(3);
313
+ const kinds = result.blocks.map((b) => b.meta.kind);
314
+ (0, vitest_1.expect)(kinds).toContain('pinned');
315
+ (0, vitest_1.expect)(kinds).toContain('memory');
316
+ (0, vitest_1.expect)(kinds).toContain('history');
317
+ });
318
+ (0, vitest_1.it)('should handle no history blocks', async () => {
319
+ const blocks = [
320
+ createBlock('hash1', 'pinned', 'system'),
321
+ createBlock('hash2', 'memory', 'memory'),
322
+ ];
323
+ const view = createTestView(blocks);
324
+ const estimator = new MockTokenEstimator();
325
+ const result = await (0, compactor_js_1.compactView)(view, {
326
+ steps: ['history_trim'],
327
+ }, estimator);
328
+ (0, vitest_1.expect)(result.blocks).toHaveLength(2);
329
+ (0, vitest_1.expect)(result.removedBlocks).toHaveLength(0);
330
+ });
331
+ (0, vitest_1.it)('should report trimming step results', async () => {
332
+ const blocks = [
333
+ createHistoryBlock('hash1', 1000),
334
+ createHistoryBlock('hash2', 2000),
335
+ createHistoryBlock('hash3', 3000),
336
+ ];
337
+ const view = createTestView(blocks);
338
+ const estimator = new MockTokenEstimator();
339
+ const result = await (0, compactor_js_1.compactView)(view, {
340
+ steps: ['history_trim'],
341
+ historyTrim: {
342
+ keepRecentMessages: 1,
343
+ keepErrorMessages: false,
344
+ },
345
+ }, estimator);
346
+ const trimReport = result.report.stepReports.find((r) => r.step === 'history_trim');
347
+ (0, vitest_1.expect)(trimReport).toBeDefined();
348
+ (0, vitest_1.expect)(trimReport.blocksRemoved).toBe(2);
349
+ (0, vitest_1.expect)(trimReport.lossy).toBe(true);
350
+ });
351
+ });
352
+ (0, vitest_1.describe)('Multiple Steps', () => {
353
+ (0, vitest_1.it)('should apply steps in order', async () => {
354
+ const duplicate = createBlock('hash1', 'memory', 'data');
355
+ const blocks = [
356
+ duplicate,
357
+ duplicate, // Will be removed by dedupe
358
+ createToolOutputBlock('hash2', 'tool1', 'x'.repeat(1000), 1000), // Will be truncated
359
+ createHistoryBlock('hash3', 1000), // Will be trimmed
360
+ createHistoryBlock('hash4', 2000),
361
+ ];
362
+ const view = createTestView(blocks);
363
+ const estimator = new MockTokenEstimator();
364
+ const result = await (0, compactor_js_1.compactView)(view, {
365
+ steps: ['dedupe', 'tool_output_prune', 'history_trim'],
366
+ toolOutputPruning: {
367
+ maxRawTailChars: 100,
368
+ preserveErrorTail: true,
369
+ maxOutputsPerTool: 3,
370
+ },
371
+ historyTrim: {
372
+ keepRecentMessages: 1,
373
+ keepErrorMessages: false,
374
+ },
375
+ }, estimator);
376
+ (0, vitest_1.expect)(result.report.stepsApplied).toEqual([
377
+ 'dedupe',
378
+ 'tool_output_prune',
379
+ 'history_trim',
380
+ ]);
381
+ (0, vitest_1.expect)(result.report.stepReports).toHaveLength(3);
382
+ });
383
+ (0, vitest_1.it)('should accumulate removed blocks', async () => {
384
+ const duplicate = createBlock('hash1', 'memory', 'data');
385
+ const blocks = [
386
+ duplicate,
387
+ duplicate,
388
+ createHistoryBlock('hash2', 1000),
389
+ createHistoryBlock('hash3', 2000),
390
+ ];
391
+ const view = createTestView(blocks);
392
+ const estimator = new MockTokenEstimator();
393
+ const result = await (0, compactor_js_1.compactView)(view, {
394
+ steps: ['dedupe', 'history_trim'],
395
+ historyTrim: {
396
+ keepRecentMessages: 1,
397
+ keepErrorMessages: false,
398
+ },
399
+ }, estimator);
400
+ // 1 removed by dedupe + 1 removed by trim
401
+ (0, vitest_1.expect)(result.removedBlocks).toHaveLength(2);
402
+ });
403
+ });
404
+ (0, vitest_1.describe)('Provenance Tracking', () => {
405
+ (0, vitest_1.it)('should add provenance to truncated tool outputs', async () => {
406
+ const largeOutput = 'x'.repeat(1000);
407
+ const block = {
408
+ blockHash: 'original-hash',
409
+ meta: {
410
+ kind: 'tool_output',
411
+ sensitivity: 'public',
412
+ codecId: 'tool-output',
413
+ codecVersion: '1.0.0',
414
+ createdAt: Date.now(),
415
+ source: 'test-source',
416
+ },
417
+ payload: {
418
+ toolName: 'test_tool',
419
+ output: largeOutput,
420
+ },
421
+ };
422
+ const view = createTestView([block]);
423
+ const estimator = new MockTokenEstimator();
424
+ const result = await (0, compactor_js_1.compactView)(view, {
425
+ steps: ['tool_output_prune'],
426
+ toolOutputPruning: {
427
+ maxRawTailChars: 100,
428
+ preserveErrorTail: true,
429
+ maxOutputsPerTool: 3,
430
+ },
431
+ }, estimator);
432
+ const replacement = result.blocks[0];
433
+ (0, vitest_1.expect)(replacement.meta.source).toContain('compacted');
434
+ (0, vitest_1.expect)(replacement.meta.tags).toContain('compacted:tool_output_prune');
435
+ });
436
+ });
437
+ (0, vitest_1.describe)('Compaction Report', () => {
438
+ (0, vitest_1.it)('should generate complete report', async () => {
439
+ const blocks = [
440
+ createBlock('hash1', 'memory', 'data'),
441
+ createBlock('hash1', 'memory', 'data'), // Duplicate
442
+ ];
443
+ const view = createTestView(blocks);
444
+ const estimator = new MockTokenEstimator();
445
+ const result = await (0, compactor_js_1.compactView)(view, {
446
+ steps: ['dedupe'],
447
+ }, estimator);
448
+ (0, vitest_1.expect)(result.report).toHaveProperty('beforeTokens');
449
+ (0, vitest_1.expect)(result.report).toHaveProperty('afterTokens');
450
+ (0, vitest_1.expect)(result.report).toHaveProperty('savedTokens');
451
+ (0, vitest_1.expect)(result.report.stepsApplied).toEqual(['dedupe']);
452
+ (0, vitest_1.expect)(result.report.stepReports).toHaveLength(1);
453
+ });
454
+ });
455
+ });
456
+ // Test helpers
457
+ function createBlock(hash, kind, payload) {
458
+ return {
459
+ blockHash: hash,
460
+ meta: {
461
+ kind,
462
+ sensitivity: 'public',
463
+ codecId: 'test',
464
+ codecVersion: '1.0.0',
465
+ createdAt: Date.now(),
466
+ },
467
+ payload,
468
+ };
469
+ }
470
+ function createToolOutputBlock(hash, codecId, output, createdAt) {
471
+ return {
472
+ blockHash: hash,
473
+ meta: {
474
+ kind: 'tool_output',
475
+ sensitivity: 'public',
476
+ codecId,
477
+ codecVersion: '1.0.0',
478
+ createdAt,
479
+ },
480
+ payload: {
481
+ toolName: codecId,
482
+ output,
483
+ },
484
+ };
485
+ }
486
+ function createHistoryBlock(hash, createdAt, options = {}) {
487
+ return {
488
+ blockHash: hash,
489
+ meta: {
490
+ kind: 'history',
491
+ sensitivity: 'public',
492
+ codecId: 'conversation-history',
493
+ codecVersion: '1.0.0',
494
+ createdAt,
495
+ },
496
+ payload: {
497
+ messages: [
498
+ {
499
+ role: 'user',
500
+ content: 'Test',
501
+ ...(options.hasError && { error: 'Test error' }),
502
+ },
503
+ ],
504
+ },
505
+ };
506
+ }
507
+ function createTestView(blocks) {
508
+ return {
509
+ blocks,
510
+ tokenEstimate: {
511
+ tokens: blocks.length * 100, // Simplified estimate
512
+ confidence: 'low',
513
+ truncated: false,
514
+ },
515
+ stablePrefixHash: 'test-hash',
516
+ createdAt: Date.now() / 1000,
517
+ };
518
+ }
519
+ //# sourceMappingURL=compactor.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compactor.test.js","sourceRoot":"","sources":["../../src/__tests__/compactor.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Unit tests for ContextGraph.
3
+ *
4
+ * Tests block management, relationship tracking, queries, and view creation.
5
+ */
6
+ export {};
7
+ //# sourceMappingURL=context-graph.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-graph.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/context-graph.test.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}