@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,173 @@
1
+ "use strict";
2
+ /**
3
+ * ContextView: Immutable, deterministically-ordered snapshot of context blocks.
4
+ *
5
+ * Views provide stable ordering (KIND_ORDER + lexicographic) and token estimation.
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.sortBlocksDeterministic = sortBlocksDeterministic;
9
+ exports.computeStablePrefixHash = computeStablePrefixHash;
10
+ exports.createContextView = createContextView;
11
+ exports.viewsEqual = viewsEqual;
12
+ exports.mergeViews = mergeViews;
13
+ const crypto_1 = require("crypto");
14
+ const kind_order_js_1 = require("./kind-order.js");
15
+ /**
16
+ * Sort blocks deterministically by KIND_ORDER + lexicographic.
17
+ *
18
+ * @param blocks - Blocks to sort
19
+ * @returns Sorted blocks (new array)
20
+ */
21
+ function sortBlocksDeterministic(blocks) {
22
+ return [...blocks].sort((a, b) => {
23
+ // Primary: KIND_ORDER
24
+ const kindCmp = (0, kind_order_js_1.compareKinds)(a.meta.kind, b.meta.kind);
25
+ if (kindCmp !== 0) {
26
+ return kindCmp;
27
+ }
28
+ // Secondary: Lexicographic by blockHash
29
+ return a.blockHash.localeCompare(b.blockHash);
30
+ });
31
+ }
32
+ /**
33
+ * Compute stable prefix hash from ordered block hashes.
34
+ *
35
+ * @param blocks - Ordered blocks
36
+ * @returns Hex-encoded SHA-256 hash
37
+ */
38
+ function computeStablePrefixHash(blocks) {
39
+ // Concatenate block hashes in order
40
+ const concatenated = blocks.map((b) => b.blockHash).join('|');
41
+ // Compute SHA-256 hash
42
+ const hash = (0, crypto_1.createHash)('sha256')
43
+ .update(concatenated)
44
+ .digest('hex');
45
+ return hash;
46
+ }
47
+ /**
48
+ * Apply token budget to blocks (truncate if needed).
49
+ * Returns blocks that fit within budget + estimation metadata.
50
+ *
51
+ * @param blocks - Ordered blocks
52
+ * @param estimator - Token estimator
53
+ * @param maxTokens - Maximum token budget
54
+ * @returns Truncated blocks + estimation result
55
+ */
56
+ async function applyTokenBudget(blocks, estimator, maxTokens) {
57
+ let totalTokens = 0;
58
+ let lowestConfidence = 'exact';
59
+ const includedBlocks = [];
60
+ for (const block of blocks) {
61
+ // Estimate tokens for this block
62
+ const blockEstimate = await estimator.estimateBlock(block);
63
+ const projectedTotal = totalTokens + blockEstimate.tokens;
64
+ // Check if adding this block would exceed budget
65
+ if (projectedTotal > maxTokens) {
66
+ // Budget exceeded - stop here
67
+ return {
68
+ blocks: includedBlocks,
69
+ estimate: {
70
+ tokens: totalTokens,
71
+ confidence: lowestConfidence,
72
+ truncated: true,
73
+ },
74
+ };
75
+ }
76
+ // Include block
77
+ includedBlocks.push(block);
78
+ totalTokens += blockEstimate.tokens;
79
+ // Track lowest confidence
80
+ if (blockEstimate.confidence === 'low') {
81
+ lowestConfidence = 'low';
82
+ }
83
+ else if (blockEstimate.confidence === 'high' && lowestConfidence === 'exact') {
84
+ lowestConfidence = 'high';
85
+ }
86
+ }
87
+ // All blocks fit within budget
88
+ return {
89
+ blocks: includedBlocks,
90
+ estimate: {
91
+ tokens: totalTokens,
92
+ confidence: lowestConfidence,
93
+ truncated: false,
94
+ },
95
+ };
96
+ }
97
+ /**
98
+ * Create a ContextView from a graph and options.
99
+ *
100
+ * @param graph - Context graph
101
+ * @param options - View options
102
+ * @returns ContextView
103
+ */
104
+ async function createContextView(graph, options) {
105
+ // Select blocks matching query
106
+ const query = options.query ?? {};
107
+ let selectedBlocks = graph.select(query);
108
+ // Sort blocks deterministically
109
+ selectedBlocks = sortBlocksDeterministic(selectedBlocks);
110
+ // Apply token budget if provided
111
+ let tokenEstimate;
112
+ if (options.tokenEstimator && options.maxTokens !== undefined) {
113
+ const result = await applyTokenBudget(selectedBlocks, options.tokenEstimator, options.maxTokens);
114
+ selectedBlocks = result.blocks;
115
+ tokenEstimate = result.estimate;
116
+ }
117
+ else if (options.tokenEstimator) {
118
+ // Estimate without budget enforcement
119
+ const estimate = await options.tokenEstimator.estimate(selectedBlocks);
120
+ tokenEstimate = {
121
+ tokens: estimate.tokens,
122
+ confidence: estimate.confidence,
123
+ truncated: false,
124
+ };
125
+ }
126
+ // Compute stable prefix hash
127
+ const stablePrefixHash = computeStablePrefixHash(selectedBlocks);
128
+ return {
129
+ blocks: selectedBlocks,
130
+ tokenEstimate,
131
+ stablePrefixHash,
132
+ createdAt: Math.floor(Date.now() / 1000),
133
+ };
134
+ }
135
+ /**
136
+ * Check if two views have identical content (same blocks in same order).
137
+ *
138
+ * @param a - First view
139
+ * @param b - Second view
140
+ * @returns True if views have identical content
141
+ */
142
+ function viewsEqual(a, b) {
143
+ return a.stablePrefixHash === b.stablePrefixHash;
144
+ }
145
+ /**
146
+ * Merge multiple views into a single view (preserves ordering).
147
+ * Deduplicates blocks by hash.
148
+ *
149
+ * @param views - Views to merge
150
+ * @returns Merged view
151
+ */
152
+ function mergeViews(...views) {
153
+ const seenHashes = new Set();
154
+ const mergedBlocks = [];
155
+ for (const view of views) {
156
+ for (const block of view.blocks) {
157
+ if (!seenHashes.has(block.blockHash)) {
158
+ seenHashes.add(block.blockHash);
159
+ mergedBlocks.push(block);
160
+ }
161
+ }
162
+ }
163
+ // Re-sort merged blocks
164
+ const sortedBlocks = sortBlocksDeterministic(mergedBlocks);
165
+ // Compute new prefix hash
166
+ const stablePrefixHash = computeStablePrefixHash(sortedBlocks);
167
+ return {
168
+ blocks: sortedBlocks,
169
+ stablePrefixHash,
170
+ createdAt: Math.floor(Date.now() / 1000),
171
+ };
172
+ }
173
+ //# sourceMappingURL=views.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"views.js","sourceRoot":"","sources":["../../src/graph/views.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * @foundry/context - Context management library for LLM conversations
3
+ *
4
+ * Phase 1: Core Types & Codecs
5
+ * Phase 2: Context Graph & Token Estimation
6
+ * Phase 3: Builder & Compilation Pipeline
7
+ */
8
+ export * from './types/index.js';
9
+ export * from './graph/index.js';
10
+ export * from './codecs/index.js';
11
+ export * from './adapters/index.js';
12
+ export * from './builder/index.js';
13
+ export * from './pipeline/index.js';
14
+ export * from './providers/index.js';
15
+ export * from './policies/index.js';
16
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,cAAc,kBAAkB,CAAC;AAGjC,cAAc,kBAAkB,CAAC;AAGjC,cAAc,mBAAmB,CAAC;AAGlC,cAAc,qBAAqB,CAAC;AAGpC,cAAc,oBAAoB,CAAC;AAGnC,cAAc,qBAAqB,CAAC;AAGpC,cAAc,sBAAsB,CAAC;AAGrC,cAAc,qBAAqB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+ /**
3
+ * @foundry/context - Context management library for LLM conversations
4
+ *
5
+ * Phase 1: Core Types & Codecs
6
+ * Phase 2: Context Graph & Token Estimation
7
+ * Phase 3: Builder & Compilation Pipeline
8
+ */
9
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ var desc = Object.getOwnPropertyDescriptor(m, k);
12
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
13
+ desc = { enumerable: true, get: function() { return m[k]; } };
14
+ }
15
+ Object.defineProperty(o, k2, desc);
16
+ }) : (function(o, m, k, k2) {
17
+ if (k2 === undefined) k2 = k;
18
+ o[k2] = m[k];
19
+ }));
20
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
21
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
22
+ };
23
+ Object.defineProperty(exports, "__esModule", { value: true });
24
+ // Core types
25
+ __exportStar(require("./types/index.js"), exports);
26
+ // Graph utilities (KIND_ORDER, ContextGraph, queries, views)
27
+ __exportStar(require("./graph/index.js"), exports);
28
+ // Built-in codecs
29
+ __exportStar(require("./codecs/index.js"), exports);
30
+ // Token estimators
31
+ __exportStar(require("./adapters/index.js"), exports);
32
+ // Context builder (Phase 3)
33
+ __exportStar(require("./builder/index.js"), exports);
34
+ // Pipeline utilities (compaction, fork)
35
+ __exportStar(require("./pipeline/index.js"), exports);
36
+ // Provider compilers
37
+ __exportStar(require("./providers/index.js"), exports);
38
+ // Policy configurations
39
+ __exportStar(require("./policies/index.js"), exports);
40
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;;;;;;;;;;;;;;AAEH,aAAa;AACb,mDAAiC;AAEjC,6DAA6D;AAC7D,mDAAiC;AAEjC,kBAAkB;AAClB,oDAAkC;AAElC,mBAAmB;AACnB,sDAAoC;AAEpC,4BAA4B;AAC5B,qDAAmC;AAEnC,wCAAwC;AACxC,sDAAoC;AAEpC,qBAAqB;AACrB,uDAAqC;AAErC,wBAAwB;AACxB,sDAAoC"}
@@ -0,0 +1,128 @@
1
+ /**
2
+ * Compactor: View-based context compaction with provenance tracking.
3
+ *
4
+ * Responsibilities:
5
+ * - Prune tool outputs (keep errors, truncate large outputs)
6
+ * - Deduplicate identical blocks
7
+ * - Trim conversation history (keep recent + errors)
8
+ * - Summarize history (optional, needs Summarizer)
9
+ *
10
+ * IMPORTANT: View-based compaction never mutates the input graph.
11
+ * Creates replacement blocks with full provenance (derivedFrom, method, version).
12
+ */
13
+ import type { ContextBlock } from '../types/block.js';
14
+ import type { ContextView } from '../graph/views.js';
15
+ import type { TokenEstimator } from '../adapters/token-estimator.js';
16
+ /**
17
+ * Compaction step identifier.
18
+ */
19
+ export type CompactionStep = 'dedupe' | 'tool_output_prune' | 'history_trim' | 'summarize_history';
20
+ /**
21
+ * History compaction summarizer interface.
22
+ * Implementations use LLM to condense old conversation history.
23
+ *
24
+ * Note: This is different from the structured Summarizer in adapters/summarizer.ts
25
+ * which is designed for schema-validated outputs with provenance tracking.
26
+ */
27
+ export interface HistorySummarizer {
28
+ /**
29
+ * Summarize a list of history blocks into a single summary block.
30
+ *
31
+ * @param blocks - History blocks to summarize
32
+ * @param targetTokens - Target token count for summary
33
+ * @returns Summary block replacing the input blocks
34
+ */
35
+ summarize(blocks: ContextBlock[], targetTokens: number): Promise<ContextBlock>;
36
+ }
37
+ /**
38
+ * Tool output pruning configuration.
39
+ */
40
+ export interface ToolOutputPruningConfig {
41
+ /** Maximum raw tail characters to keep (default: 500) */
42
+ maxRawTailChars: number;
43
+ /** Preserve error tail even if large (default: true) */
44
+ preserveErrorTail: boolean;
45
+ /** Maximum outputs per tool type (default: 3) */
46
+ maxOutputsPerTool: number;
47
+ }
48
+ /**
49
+ * Compaction configuration for the pipeline.
50
+ */
51
+ export interface PipelineCompactionConfig {
52
+ /** Compaction steps to apply (in order) */
53
+ steps: CompactionStep[];
54
+ /** Tool output pruning config */
55
+ toolOutputPruning?: ToolOutputPruningConfig;
56
+ /** History trim config */
57
+ historyTrim?: {
58
+ /** Keep most recent N messages */
59
+ keepRecentMessages: number;
60
+ /** Always keep messages with errors */
61
+ keepErrorMessages: boolean;
62
+ };
63
+ /** Summarization config (optional, requires HistorySummarizer) */
64
+ summarization?: {
65
+ /** Minimum messages to trigger summarization */
66
+ minMessages: number;
67
+ /** Summarizer to use for history compaction */
68
+ summarizer?: HistorySummarizer;
69
+ };
70
+ }
71
+ /**
72
+ * Compaction result.
73
+ */
74
+ export interface CompactionResult {
75
+ /** Compacted blocks (includes replacements) */
76
+ blocks: ContextBlock[];
77
+ /** Blocks that were removed */
78
+ removedBlocks: ContextBlock[];
79
+ /** Compaction report */
80
+ report: CompactionReport;
81
+ }
82
+ /**
83
+ * Compaction report with token savings and lossiness flags.
84
+ */
85
+ export interface CompactionReport {
86
+ /** Tokens before compaction */
87
+ beforeTokens: number;
88
+ /** Tokens after compaction */
89
+ afterTokens: number;
90
+ /** Token savings */
91
+ savedTokens: number;
92
+ /** Compaction steps applied */
93
+ stepsApplied: CompactionStep[];
94
+ /** Step-specific reports */
95
+ stepReports: StepReport[];
96
+ }
97
+ /**
98
+ * Per-step compaction report.
99
+ */
100
+ export interface StepReport {
101
+ /** Step identifier */
102
+ step: CompactionStep;
103
+ /** Blocks removed */
104
+ blocksRemoved: number;
105
+ /** Blocks replaced */
106
+ blocksReplaced: number;
107
+ /** Tokens saved */
108
+ tokensSaved: number;
109
+ /** Lossy compaction (information lost) */
110
+ lossy: boolean;
111
+ /** Human-readable description */
112
+ description: string;
113
+ }
114
+ /**
115
+ * Default tool output pruning configuration.
116
+ */
117
+ export declare const DEFAULT_TOOL_OUTPUT_PRUNING: ToolOutputPruningConfig;
118
+ /**
119
+ * Compact a context view.
120
+ * Returns a new set of blocks with replacements tracked via provenance.
121
+ *
122
+ * @param view - Context view to compact
123
+ * @param config - Compaction configuration
124
+ * @param estimator - Token estimator for calculating savings
125
+ * @returns Compaction result
126
+ */
127
+ export declare function compactView(view: ContextView, config: PipelineCompactionConfig, estimator: TokenEstimator): Promise<CompactionResult>;
128
+ //# sourceMappingURL=compactor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compactor.d.ts","sourceRoot":"","sources":["../../src/pipeline/compactor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAuB,MAAM,mBAAmB,CAAC;AAC3E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAErE;;GAEG;AACH,MAAM,MAAM,cAAc,GACtB,QAAQ,GACR,mBAAmB,GACnB,cAAc,GACd,mBAAmB,CAAC;AAExB;;;;;;GAMG;AACH,MAAM,WAAW,iBAAiB;IAChC;;;;;;OAMG;IACH,SAAS,CACP,MAAM,EAAE,YAAY,EAAE,EACtB,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,YAAY,CAAC,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,yDAAyD;IACzD,eAAe,EAAE,MAAM,CAAC;IAExB,wDAAwD;IACxD,iBAAiB,EAAE,OAAO,CAAC;IAE3B,iDAAiD;IACjD,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC,2CAA2C;IAC3C,KAAK,EAAE,cAAc,EAAE,CAAC;IAExB,iCAAiC;IACjC,iBAAiB,CAAC,EAAE,uBAAuB,CAAC;IAE5C,0BAA0B;IAC1B,WAAW,CAAC,EAAE;QACZ,kCAAkC;QAClC,kBAAkB,EAAE,MAAM,CAAC;QAE3B,uCAAuC;QACvC,iBAAiB,EAAE,OAAO,CAAC;KAC5B,CAAC;IAEF,kEAAkE;IAClE,aAAa,CAAC,EAAE;QACd,gDAAgD;QAChD,WAAW,EAAE,MAAM,CAAC;QAEpB,+CAA+C;QAC/C,UAAU,CAAC,EAAE,iBAAiB,CAAC;KAChC,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,+CAA+C;IAC/C,MAAM,EAAE,YAAY,EAAE,CAAC;IAEvB,+BAA+B;IAC/B,aAAa,EAAE,YAAY,EAAE,CAAC;IAE9B,wBAAwB;IACxB,MAAM,EAAE,gBAAgB,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,+BAA+B;IAC/B,YAAY,EAAE,MAAM,CAAC;IAErB,8BAA8B;IAC9B,WAAW,EAAE,MAAM,CAAC;IAEpB,oBAAoB;IACpB,WAAW,EAAE,MAAM,CAAC;IAEpB,+BAA+B;IAC/B,YAAY,EAAE,cAAc,EAAE,CAAC;IAE/B,4BAA4B;IAC5B,WAAW,EAAE,UAAU,EAAE,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,sBAAsB;IACtB,IAAI,EAAE,cAAc,CAAC;IAErB,qBAAqB;IACrB,aAAa,EAAE,MAAM,CAAC;IAEtB,sBAAsB;IACtB,cAAc,EAAE,MAAM,CAAC;IAEvB,mBAAmB;IACnB,WAAW,EAAE,MAAM,CAAC;IAEpB,0CAA0C;IAC1C,KAAK,EAAE,OAAO,CAAC;IAEf,iCAAiC;IACjC,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,eAAO,MAAM,2BAA2B,EAAE,uBAIzC,CAAC;AAEF;;;;;;;;GAQG;AACH,wBAAsB,WAAW,CAC/B,IAAI,EAAE,WAAW,EACjB,MAAM,EAAE,wBAAwB,EAChC,SAAS,EAAE,cAAc,GACxB,OAAO,CAAC,gBAAgB,CAAC,CAyL3B"}