@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,398 @@
1
+ "use strict";
2
+ /**
3
+ * Unit tests for Anthropic cache breakpoint resolution.
4
+ *
5
+ * Tests:
6
+ * - "After last matching block" rule
7
+ * - Selector matching (kind, codecId, tag, source)
8
+ * - Diagnostics for no matches / many matches
9
+ * - Cache control placement in system messages
10
+ */
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ const vitest_1 = require("vitest");
13
+ const anthropic_compiler_js_1 = require("../providers/anthropic-compiler.js");
14
+ // Mock codec for testing
15
+ const mockCodec = {
16
+ codecId: 'test-codec',
17
+ version: '1.0.0',
18
+ payloadSchema: null,
19
+ canonicalize: (payload) => payload,
20
+ hash: (canon) => 'test-hash',
21
+ validate: (payload) => payload,
22
+ render: (block) => ({
23
+ anthropic: [{ type: 'text', text: JSON.stringify(block.payload) }],
24
+ openai: { role: 'system', content: JSON.stringify(block.payload) },
25
+ gemini: JSON.stringify(block.payload),
26
+ }),
27
+ };
28
+ (0, vitest_1.describe)('Anthropic Cache Breakpoints', () => {
29
+ (0, vitest_1.describe)('Cache Breakpoint Resolution', () => {
30
+ (0, vitest_1.it)('should resolve to last matching block by kind', () => {
31
+ const blocks = [
32
+ createBlock('hash1', 'pinned', 'block1'),
33
+ createBlock('hash2', 'pinned', 'block2'),
34
+ createBlock('hash3', 'pinned', 'block3'),
35
+ ];
36
+ const codecRegistry = new Map([['test-codec', mockCodec]]);
37
+ const result = (0, anthropic_compiler_js_1.compileAnthropicContext)(blocks, createTestPolicy(), {
38
+ codecRegistry,
39
+ cacheBreakpoint: { kind: 'pinned' },
40
+ });
41
+ // Cache control should be on last pinned block (index 2)
42
+ const systemMessages = result.system;
43
+ (0, vitest_1.expect)(systemMessages).toHaveLength(3);
44
+ (0, vitest_1.expect)(systemMessages[0].cache_control).toBeUndefined();
45
+ (0, vitest_1.expect)(systemMessages[1].cache_control).toBeUndefined();
46
+ (0, vitest_1.expect)(systemMessages[2].cache_control).toEqual({ type: 'ephemeral' });
47
+ });
48
+ (0, vitest_1.it)('should resolve to last matching block by codecId', () => {
49
+ const blocks = [
50
+ createBlockWithCodec('hash1', 'pinned', 'codec-a', 'block1'),
51
+ createBlockWithCodec('hash2', 'pinned', 'codec-b', 'block2'),
52
+ createBlockWithCodec('hash3', 'pinned', 'codec-a', 'block3'),
53
+ ];
54
+ const codecA = { ...mockCodec, codecId: 'codec-a' };
55
+ const codecB = { ...mockCodec, codecId: 'codec-b' };
56
+ const codecRegistry = new Map([
57
+ ['codec-a', codecA],
58
+ ['codec-b', codecB],
59
+ ]);
60
+ const result = (0, anthropic_compiler_js_1.compileAnthropicContext)(blocks, createTestPolicy(), {
61
+ codecRegistry,
62
+ cacheBreakpoint: { codecId: 'codec-a' },
63
+ });
64
+ // Cache control should be on last codec-a block (index 2)
65
+ const systemMessages = result.system;
66
+ (0, vitest_1.expect)(systemMessages[2].cache_control).toEqual({ type: 'ephemeral' });
67
+ });
68
+ (0, vitest_1.it)('should resolve to last matching block by tag', () => {
69
+ const blocks = [
70
+ createBlockWithTags('hash1', 'pinned', ['tag1'], 'block1'),
71
+ createBlockWithTags('hash2', 'pinned', ['tag2'], 'block2'),
72
+ createBlockWithTags('hash3', 'pinned', ['tag1', 'tag2'], 'block3'),
73
+ ];
74
+ const codecRegistry = new Map([['test-codec', mockCodec]]);
75
+ const result = (0, anthropic_compiler_js_1.compileAnthropicContext)(blocks, createTestPolicy(), {
76
+ codecRegistry,
77
+ cacheBreakpoint: { tag: 'tag1' },
78
+ });
79
+ // Cache control should be on last block with tag1 (index 2)
80
+ const systemMessages = result.system;
81
+ (0, vitest_1.expect)(systemMessages[2].cache_control).toEqual({ type: 'ephemeral' });
82
+ });
83
+ (0, vitest_1.it)('should resolve to last matching block by source', () => {
84
+ const blocks = [
85
+ createBlockWithSource('hash1', 'pinned', 'source-a', 'block1'),
86
+ createBlockWithSource('hash2', 'pinned', 'source-b', 'block2'),
87
+ createBlockWithSource('hash3', 'pinned', 'source-a', 'block3'),
88
+ ];
89
+ const codecRegistry = new Map([['test-codec', mockCodec]]);
90
+ const result = (0, anthropic_compiler_js_1.compileAnthropicContext)(blocks, createTestPolicy(), {
91
+ codecRegistry,
92
+ cacheBreakpoint: { source: 'source-a' },
93
+ });
94
+ // Cache control should be on last source-a block (index 2)
95
+ const systemMessages = result.system;
96
+ (0, vitest_1.expect)(systemMessages[2].cache_control).toEqual({ type: 'ephemeral' });
97
+ });
98
+ (0, vitest_1.it)('should match blocks with multiple criteria (AND logic)', () => {
99
+ const blocks = [
100
+ createBlockWithDetails('hash1', 'pinned', 'codec-a', ['tag1'], 'source-a', 'block1'),
101
+ createBlockWithDetails('hash2', 'pinned', 'codec-a', ['tag2'], 'source-a', 'block2'),
102
+ createBlockWithDetails('hash3', 'pinned', 'codec-a', ['tag1'], 'source-b', 'block3'),
103
+ createBlockWithDetails('hash4', 'pinned', 'codec-a', ['tag1'], 'source-a', 'block4'),
104
+ ];
105
+ const codecRegistry = new Map([['codec-a', mockCodec]]);
106
+ const result = (0, anthropic_compiler_js_1.compileAnthropicContext)(blocks, createTestPolicy(), {
107
+ codecRegistry,
108
+ cacheBreakpoint: {
109
+ kind: 'pinned',
110
+ codecId: 'codec-a',
111
+ tag: 'tag1',
112
+ source: 'source-a',
113
+ },
114
+ });
115
+ // Only hash1 and hash4 match all criteria, cache control on hash4 (last)
116
+ const systemMessages = result.system;
117
+ (0, vitest_1.expect)(systemMessages[3].cache_control).toEqual({ type: 'ephemeral' });
118
+ });
119
+ });
120
+ (0, vitest_1.describe)('No Matches', () => {
121
+ (0, vitest_1.it)('should not add cache_control when no blocks match', () => {
122
+ const blocks = [
123
+ createBlock('hash1', 'pinned', 'block1'),
124
+ createBlock('hash2', 'pinned', 'block2'),
125
+ ];
126
+ const codecRegistry = new Map([['test-codec', mockCodec]]);
127
+ const result = (0, anthropic_compiler_js_1.compileAnthropicContext)(blocks, createTestPolicy(), {
128
+ codecRegistry,
129
+ cacheBreakpoint: { kind: 'memory' }, // No memory blocks
130
+ });
131
+ // No cache_control on any block
132
+ const systemMessages = result.system;
133
+ (0, vitest_1.expect)(systemMessages.every((m) => !m.cache_control)).toBe(true);
134
+ });
135
+ (0, vitest_1.it)('should handle empty blocks array', () => {
136
+ const blocks = [];
137
+ const codecRegistry = new Map([['test-codec', mockCodec]]);
138
+ const result = (0, anthropic_compiler_js_1.compileAnthropicContext)(blocks, createTestPolicy(), {
139
+ codecRegistry,
140
+ cacheBreakpoint: { kind: 'pinned' },
141
+ });
142
+ (0, vitest_1.expect)(result.system).toBeUndefined();
143
+ });
144
+ });
145
+ (0, vitest_1.describe)('No Cache Breakpoint', () => {
146
+ (0, vitest_1.it)('should not add cache_control when no breakpoint provided', () => {
147
+ const blocks = [
148
+ createBlock('hash1', 'pinned', 'block1'),
149
+ createBlock('hash2', 'pinned', 'block2'),
150
+ ];
151
+ const codecRegistry = new Map([['test-codec', mockCodec]]);
152
+ const result = (0, anthropic_compiler_js_1.compileAnthropicContext)(blocks, createTestPolicy(), {
153
+ codecRegistry,
154
+ // No cacheBreakpoint
155
+ });
156
+ const systemMessages = result.system;
157
+ (0, vitest_1.expect)(systemMessages.every((m) => !m.cache_control)).toBe(true);
158
+ });
159
+ });
160
+ (0, vitest_1.describe)('System vs Message Blocks', () => {
161
+ (0, vitest_1.it)('should only apply cache control to system blocks (pinned)', () => {
162
+ const blocks = [
163
+ createBlock('hash1', 'pinned', 'system1'),
164
+ createBlock('hash2', 'pinned', 'system2'),
165
+ createBlock('hash3', 'memory', 'memory1'), // Not pinned
166
+ createBlock('hash4', 'history', 'history1'), // Not pinned
167
+ ];
168
+ const codecRegistry = new Map([['test-codec', mockCodec]]);
169
+ const result = (0, anthropic_compiler_js_1.compileAnthropicContext)(blocks, createTestPolicy(), {
170
+ codecRegistry,
171
+ cacheBreakpoint: { kind: 'pinned' },
172
+ });
173
+ // Only system messages should have cache_control possibility
174
+ (0, vitest_1.expect)(result.system).toHaveLength(2);
175
+ (0, vitest_1.expect)(result.messages).toHaveLength(2);
176
+ (0, vitest_1.expect)(result.system[1].cache_control).toEqual({ type: 'ephemeral' });
177
+ });
178
+ (0, vitest_1.it)('should not add cache control to non-pinned blocks', () => {
179
+ const blocks = [
180
+ createBlock('hash1', 'memory', 'memory1'),
181
+ createBlock('hash2', 'history', 'history1'),
182
+ ];
183
+ const codecRegistry = new Map([['test-codec', mockCodec]]);
184
+ const result = (0, anthropic_compiler_js_1.compileAnthropicContext)(blocks, createTestPolicy(), {
185
+ codecRegistry,
186
+ cacheBreakpoint: { kind: 'memory' },
187
+ });
188
+ // No system blocks, so no cache control
189
+ (0, vitest_1.expect)(result.system).toBeUndefined();
190
+ (0, vitest_1.expect)(result.messages).toHaveLength(2);
191
+ });
192
+ });
193
+ (0, vitest_1.describe)('Edge Cases', () => {
194
+ (0, vitest_1.it)('should handle single matching block', () => {
195
+ const blocks = [
196
+ createBlock('hash1', 'pinned', 'block1'),
197
+ ];
198
+ const codecRegistry = new Map([['test-codec', mockCodec]]);
199
+ const result = (0, anthropic_compiler_js_1.compileAnthropicContext)(blocks, createTestPolicy(), {
200
+ codecRegistry,
201
+ cacheBreakpoint: { kind: 'pinned' },
202
+ });
203
+ const systemMessages = result.system;
204
+ (0, vitest_1.expect)(systemMessages).toHaveLength(1);
205
+ (0, vitest_1.expect)(systemMessages[0].cache_control).toEqual({ type: 'ephemeral' });
206
+ });
207
+ (0, vitest_1.it)('should handle many matching blocks (use last)', () => {
208
+ const blocks = Array.from({ length: 100 }, (_, i) => createBlock(`hash${i}`, 'pinned', `block${i}`));
209
+ const codecRegistry = new Map([['test-codec', mockCodec]]);
210
+ const result = (0, anthropic_compiler_js_1.compileAnthropicContext)(blocks, createTestPolicy(), {
211
+ codecRegistry,
212
+ cacheBreakpoint: { kind: 'pinned' },
213
+ });
214
+ // Cache control on last block
215
+ const systemMessages = result.system;
216
+ (0, vitest_1.expect)(systemMessages).toHaveLength(100);
217
+ (0, vitest_1.expect)(systemMessages[99].cache_control).toEqual({ type: 'ephemeral' });
218
+ // All others should not have cache_control
219
+ for (let i = 0; i < 99; i++) {
220
+ (0, vitest_1.expect)(systemMessages[i].cache_control).toBeUndefined();
221
+ }
222
+ });
223
+ (0, vitest_1.it)('should handle interleaved matching and non-matching blocks', () => {
224
+ const blocks = [
225
+ createBlockWithCodec('hash1', 'pinned', 'codec-a', 'block1'),
226
+ createBlockWithCodec('hash2', 'pinned', 'codec-b', 'block2'),
227
+ createBlockWithCodec('hash3', 'pinned', 'codec-a', 'block3'),
228
+ createBlockWithCodec('hash4', 'pinned', 'codec-b', 'block4'),
229
+ createBlockWithCodec('hash5', 'pinned', 'codec-a', 'block5'),
230
+ ];
231
+ const codecA = { ...mockCodec, codecId: 'codec-a' };
232
+ const codecB = { ...mockCodec, codecId: 'codec-b' };
233
+ const codecRegistry = new Map([
234
+ ['codec-a', codecA],
235
+ ['codec-b', codecB],
236
+ ]);
237
+ const result = (0, anthropic_compiler_js_1.compileAnthropicContext)(blocks, createTestPolicy(), {
238
+ codecRegistry,
239
+ cacheBreakpoint: { codecId: 'codec-a' },
240
+ });
241
+ // Cache control on last codec-a block (index 4)
242
+ const systemMessages = result.system;
243
+ (0, vitest_1.expect)(systemMessages[4].cache_control).toEqual({ type: 'ephemeral' });
244
+ });
245
+ });
246
+ (0, vitest_1.describe)('Selector Combinations', () => {
247
+ (0, vitest_1.it)('should match when kind AND codecId both match', () => {
248
+ const blocks = [
249
+ createBlockWithCodec('hash1', 'pinned', 'codec-a', 'block1'),
250
+ createBlockWithCodec('hash2', 'memory', 'codec-a', 'block2'), // Wrong kind
251
+ createBlockWithCodec('hash3', 'pinned', 'codec-b', 'block3'), // Wrong codec
252
+ createBlockWithCodec('hash4', 'pinned', 'codec-a', 'block4'), // Match
253
+ ];
254
+ const codecA = { ...mockCodec, codecId: 'codec-a' };
255
+ const codecB = { ...mockCodec, codecId: 'codec-b' };
256
+ const codecRegistry = new Map([
257
+ ['codec-a', codecA],
258
+ ['codec-b', codecB],
259
+ ]);
260
+ const result = (0, anthropic_compiler_js_1.compileAnthropicContext)(blocks.filter((b) => b.meta.kind === 'pinned'), // Only pinned blocks become system messages
261
+ createTestPolicy(), {
262
+ codecRegistry,
263
+ cacheBreakpoint: { kind: 'pinned', codecId: 'codec-a' },
264
+ });
265
+ // hash1 and hash4 match, cache control on hash4 (last)
266
+ const systemMessages = result.system;
267
+ // Only 3 pinned blocks: hash1, hash3, hash4
268
+ (0, vitest_1.expect)(systemMessages).toHaveLength(3);
269
+ (0, vitest_1.expect)(systemMessages[2].cache_control).toEqual({ type: 'ephemeral' });
270
+ });
271
+ (0, vitest_1.it)('should not match when only some criteria match', () => {
272
+ const blocks = [
273
+ createBlockWithDetails('hash1', 'pinned', 'codec-a', ['tag1'], 'source-a', 'block1'),
274
+ createBlockWithDetails('hash2', 'pinned', 'codec-a', ['tag2'], 'source-a', 'block2'),
275
+ ];
276
+ const codecRegistry = new Map([['codec-a', mockCodec]]);
277
+ const result = (0, anthropic_compiler_js_1.compileAnthropicContext)(blocks, createTestPolicy(), {
278
+ codecRegistry,
279
+ cacheBreakpoint: {
280
+ codecId: 'codec-a',
281
+ tag: 'tag1',
282
+ source: 'source-b', // Doesn't match
283
+ },
284
+ });
285
+ // No blocks match all criteria
286
+ const systemMessages = result.system;
287
+ (0, vitest_1.expect)(systemMessages.every((m) => !m.cache_control)).toBe(true);
288
+ });
289
+ });
290
+ (0, vitest_1.describe)('Determinism', () => {
291
+ (0, vitest_1.it)('should produce same cache placement for same input', () => {
292
+ const blocks = [
293
+ createBlock('hash1', 'pinned', 'block1'),
294
+ createBlock('hash2', 'pinned', 'block2'),
295
+ createBlock('hash3', 'pinned', 'block3'),
296
+ ];
297
+ const codecRegistry = new Map([['test-codec', mockCodec]]);
298
+ const result1 = (0, anthropic_compiler_js_1.compileAnthropicContext)(blocks, createTestPolicy(), {
299
+ codecRegistry,
300
+ cacheBreakpoint: { kind: 'pinned' },
301
+ });
302
+ const result2 = (0, anthropic_compiler_js_1.compileAnthropicContext)(blocks, createTestPolicy(), {
303
+ codecRegistry,
304
+ cacheBreakpoint: { kind: 'pinned' },
305
+ });
306
+ (0, vitest_1.expect)(result1.system).toEqual(result2.system);
307
+ });
308
+ });
309
+ });
310
+ // Test helpers
311
+ function createBlock(hash, kind, payload) {
312
+ return {
313
+ blockHash: hash,
314
+ meta: {
315
+ kind,
316
+ sensitivity: 'public',
317
+ codecId: 'test-codec',
318
+ codecVersion: '1.0.0',
319
+ createdAt: Date.now(),
320
+ },
321
+ payload,
322
+ };
323
+ }
324
+ function createBlockWithCodec(hash, kind, codecId, payload) {
325
+ return {
326
+ blockHash: hash,
327
+ meta: {
328
+ kind,
329
+ sensitivity: 'public',
330
+ codecId,
331
+ codecVersion: '1.0.0',
332
+ createdAt: Date.now(),
333
+ },
334
+ payload,
335
+ };
336
+ }
337
+ function createBlockWithTags(hash, kind, tags, payload) {
338
+ return {
339
+ blockHash: hash,
340
+ meta: {
341
+ kind,
342
+ sensitivity: 'public',
343
+ codecId: 'test-codec',
344
+ codecVersion: '1.0.0',
345
+ createdAt: Date.now(),
346
+ tags,
347
+ },
348
+ payload,
349
+ };
350
+ }
351
+ function createBlockWithSource(hash, kind, source, payload) {
352
+ return {
353
+ blockHash: hash,
354
+ meta: {
355
+ kind,
356
+ sensitivity: 'public',
357
+ codecId: 'test-codec',
358
+ codecVersion: '1.0.0',
359
+ createdAt: Date.now(),
360
+ source,
361
+ },
362
+ payload,
363
+ };
364
+ }
365
+ function createBlockWithDetails(hash, kind, codecId, tags, source, payload) {
366
+ return {
367
+ blockHash: hash,
368
+ meta: {
369
+ kind,
370
+ sensitivity: 'public',
371
+ codecId,
372
+ codecVersion: '1.0.0',
373
+ createdAt: Date.now(),
374
+ tags,
375
+ source,
376
+ },
377
+ payload,
378
+ };
379
+ }
380
+ function createTestPolicy() {
381
+ return {
382
+ modelId: 'test-model',
383
+ provider: 'anthropic',
384
+ contextWindow: 100000,
385
+ completionReserve: 4000,
386
+ overflowStrategy: 'error',
387
+ kindPriorities: [],
388
+ sensitivity: {
389
+ maxSensitivity: 'public',
390
+ redactRestricted: true,
391
+ },
392
+ compaction: {
393
+ pruneToolOutputs: false,
394
+ summarizeHistory: false,
395
+ },
396
+ };
397
+ }
398
+ //# sourceMappingURL=cache-breakpoints.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache-breakpoints.test.js","sourceRoot":"","sources":["../../src/__tests__/cache-breakpoints.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Unit tests for built-in codecs.
3
+ *
4
+ * Tests canonicalization, hash computation, validation, and rendering for all codecs.
5
+ */
6
+ export {};
7
+ //# sourceMappingURL=codecs.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codecs.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/codecs.test.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}