@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,113 @@
1
+ "use strict";
2
+ /**
3
+ * KIND_ORDER: Deterministic block ordering for context compilation.
4
+ *
5
+ * This is the single source of truth for block ordering.
6
+ * All context compilation MUST respect this order.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.KIND_ORDER = void 0;
10
+ exports.getKindIndex = getKindIndex;
11
+ exports.compareKinds = compareKinds;
12
+ exports.sortBlocksByKind = sortBlocksByKind;
13
+ exports.validateBlockOrder = validateBlockOrder;
14
+ exports.groupBlocksByKind = groupBlocksByKind;
15
+ exports.isValidKind = isValidKind;
16
+ /**
17
+ * Immutable block kind ordering (pinned → reference → memory → state → tool_output → history → turn).
18
+ *
19
+ * NEVER modify this array. It is the contract for deterministic compilation.
20
+ */
21
+ exports.KIND_ORDER = Object.freeze([
22
+ 'pinned', // System rules, always first
23
+ 'reference', // Tool schemas, external docs
24
+ 'memory', // Long-term memory, RAG results
25
+ 'state', // Current workflow/session state
26
+ 'tool_output', // Tool execution results
27
+ 'history', // Conversation history
28
+ 'turn', // Current turn (user message)
29
+ ]);
30
+ /**
31
+ * Get kind index for ordering comparison.
32
+ * Returns -1 if kind is not in KIND_ORDER.
33
+ *
34
+ * @param kind - Block kind
35
+ * @returns Index in KIND_ORDER, or -1 if not found
36
+ */
37
+ function getKindIndex(kind) {
38
+ return exports.KIND_ORDER.indexOf(kind);
39
+ }
40
+ /**
41
+ * Compare two block kinds for ordering.
42
+ * Returns negative if a < b, positive if a > b, zero if equal.
43
+ *
44
+ * @param a - First block kind
45
+ * @param b - Second block kind
46
+ * @returns Comparison result
47
+ */
48
+ function compareKinds(a, b) {
49
+ const indexA = getKindIndex(a);
50
+ const indexB = getKindIndex(b);
51
+ // Throw if either kind is not in KIND_ORDER
52
+ if (indexA === -1) {
53
+ throw new Error(`Invalid block kind: ${a}`);
54
+ }
55
+ if (indexB === -1) {
56
+ throw new Error(`Invalid block kind: ${b}`);
57
+ }
58
+ return indexA - indexB;
59
+ }
60
+ /**
61
+ * Sort blocks by KIND_ORDER (stable sort, preserves relative order within same kind).
62
+ *
63
+ * @param blocks - Blocks to sort
64
+ * @returns Sorted blocks (new array)
65
+ */
66
+ function sortBlocksByKind(blocks) {
67
+ return [...blocks].sort((a, b) => compareKinds(a.meta.kind, b.meta.kind));
68
+ }
69
+ /**
70
+ * Validate that blocks are sorted by KIND_ORDER.
71
+ * Throws if blocks are not sorted correctly.
72
+ *
73
+ * @param blocks - Blocks to validate
74
+ */
75
+ function validateBlockOrder(blocks) {
76
+ for (let i = 1; i < blocks.length; i++) {
77
+ const prev = blocks[i - 1];
78
+ const curr = blocks[i];
79
+ const comparison = compareKinds(prev.meta.kind, curr.meta.kind);
80
+ if (comparison > 0) {
81
+ throw new Error(`Blocks not sorted by KIND_ORDER: ${prev.meta.kind} (index ${i - 1}) ` +
82
+ `comes before ${curr.meta.kind} (index ${i})`);
83
+ }
84
+ }
85
+ }
86
+ /**
87
+ * Group blocks by kind (in KIND_ORDER).
88
+ * Returns a map of kind -> blocks.
89
+ *
90
+ * @param blocks - Blocks to group
91
+ * @returns Map of kind to blocks
92
+ */
93
+ function groupBlocksByKind(blocks) {
94
+ const groups = new Map();
95
+ for (const block of blocks) {
96
+ const kind = block.meta.kind;
97
+ if (!groups.has(kind)) {
98
+ groups.set(kind, []);
99
+ }
100
+ groups.get(kind).push(block);
101
+ }
102
+ return groups;
103
+ }
104
+ /**
105
+ * Check if a kind is valid (exists in KIND_ORDER).
106
+ *
107
+ * @param kind - Block kind to check
108
+ * @returns True if valid
109
+ */
110
+ function isValidKind(kind) {
111
+ return getKindIndex(kind) !== -1;
112
+ }
113
+ //# sourceMappingURL=kind-order.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kind-order.js","sourceRoot":"","sources":["../../src/graph/kind-order.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,68 @@
1
+ /**
2
+ * BlockQuery: Filtering and selection of context blocks.
3
+ *
4
+ * Supports filtering by kind, tags, sensitivity, stability, provenance, and token budget.
5
+ */
6
+ import type { BlockKind, SensitivityLevel, ContextBlock } from '../types/block.js';
7
+ import type { ContextGraph } from './context-graph.js';
8
+ /**
9
+ * Block query for filtering blocks in a ContextGraph.
10
+ */
11
+ export interface BlockQuery {
12
+ /** Filter by block kinds (OR logic: match any) */
13
+ kinds?: BlockKind[];
14
+ /** Filter by tags (AND logic: block must have all tags) */
15
+ tags?: string[];
16
+ /** Filter by minimum sensitivity level */
17
+ minSensitivity?: SensitivityLevel;
18
+ /** Filter by maximum sensitivity level */
19
+ maxSensitivity?: SensitivityLevel;
20
+ /** Filter by source identifier */
21
+ source?: string;
22
+ /** Filter by minimum creation timestamp (Unix seconds) */
23
+ minCreatedAt?: number;
24
+ /** Filter by maximum creation timestamp (Unix seconds) */
25
+ maxCreatedAt?: number;
26
+ /** Filter by provenance: only blocks derived from given hashes */
27
+ derivedFromAny?: string[];
28
+ /** Filter by provenance: only blocks NOT derived from given hashes */
29
+ notDerivedFromAny?: string[];
30
+ /** Filter by references: only blocks referencing any of given hashes */
31
+ referencesAny?: string[];
32
+ /** Exclude blocks with given hashes */
33
+ excludeHashes?: string[];
34
+ /** Maximum token budget (requires token estimation - applied in views) */
35
+ maxTokens?: number;
36
+ }
37
+ /**
38
+ * Compare two sensitivity levels.
39
+ *
40
+ * @param a - First sensitivity level
41
+ * @param b - Second sensitivity level
42
+ * @returns Negative if a < b, positive if a > b, zero if equal
43
+ */
44
+ export declare function compareSensitivity(a: SensitivityLevel, b: SensitivityLevel): number;
45
+ /**
46
+ * Check if a block matches a query.
47
+ * Does NOT apply token budget (that's done in view creation).
48
+ *
49
+ * @param block - Block to check
50
+ * @param query - Query to match
51
+ * @param graph - Context graph (for provenance/reference lookups)
52
+ * @returns True if block matches query
53
+ */
54
+ export declare function matchesQuery(block: ContextBlock<unknown>, query: BlockQuery, graph: ContextGraph): boolean;
55
+ /**
56
+ * Create an empty query (matches all blocks).
57
+ *
58
+ * @returns Empty query
59
+ */
60
+ export declare function emptyQuery(): BlockQuery;
61
+ /**
62
+ * Merge multiple queries (AND logic: block must match all queries).
63
+ *
64
+ * @param queries - Queries to merge
65
+ * @returns Merged query
66
+ */
67
+ export declare function mergeQueries(...queries: BlockQuery[]): BlockQuery;
68
+ //# sourceMappingURL=queries.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queries.d.ts","sourceRoot":"","sources":["../../src/graph/queries.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACnF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAEvD;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,kDAAkD;IAClD,KAAK,CAAC,EAAE,SAAS,EAAE,CAAC;IAEpB,2DAA2D;IAC3D,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAEhB,0CAA0C;IAC1C,cAAc,CAAC,EAAE,gBAAgB,CAAC;IAElC,0CAA0C;IAC1C,cAAc,CAAC,EAAE,gBAAgB,CAAC;IAElC,kCAAkC;IAClC,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,0DAA0D;IAC1D,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB,0DAA0D;IAC1D,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB,kEAAkE;IAClE,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAE1B,sEAAsE;IACtE,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;IAE7B,wEAAwE;IACxE,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IAEzB,uCAAuC;IACvC,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IAEzB,0EAA0E;IAC1E,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAWD;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,gBAAgB,EAAE,CAAC,EAAE,gBAAgB,GAAG,MAAM,CAEnF;AAED;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAC1B,KAAK,EAAE,YAAY,CAAC,OAAO,CAAC,EAC5B,KAAK,EAAE,UAAU,EACjB,KAAK,EAAE,YAAY,GAClB,OAAO,CA+FT;AAED;;;;GAIG;AACH,wBAAgB,UAAU,IAAI,UAAU,CAEvC;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,GAAG,OAAO,EAAE,UAAU,EAAE,GAAG,UAAU,CA8GjE"}
@@ -0,0 +1,240 @@
1
+ "use strict";
2
+ /**
3
+ * BlockQuery: Filtering and selection of context blocks.
4
+ *
5
+ * Supports filtering by kind, tags, sensitivity, stability, provenance, and token budget.
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.compareSensitivity = compareSensitivity;
9
+ exports.matchesQuery = matchesQuery;
10
+ exports.emptyQuery = emptyQuery;
11
+ exports.mergeQueries = mergeQueries;
12
+ /**
13
+ * Sensitivity level ordering (public < internal < restricted).
14
+ */
15
+ const SENSITIVITY_ORDER = {
16
+ public: 0,
17
+ internal: 1,
18
+ restricted: 2,
19
+ };
20
+ /**
21
+ * Compare two sensitivity levels.
22
+ *
23
+ * @param a - First sensitivity level
24
+ * @param b - Second sensitivity level
25
+ * @returns Negative if a < b, positive if a > b, zero if equal
26
+ */
27
+ function compareSensitivity(a, b) {
28
+ return SENSITIVITY_ORDER[a] - SENSITIVITY_ORDER[b];
29
+ }
30
+ /**
31
+ * Check if a block matches a query.
32
+ * Does NOT apply token budget (that's done in view creation).
33
+ *
34
+ * @param block - Block to check
35
+ * @param query - Query to match
36
+ * @param graph - Context graph (for provenance/reference lookups)
37
+ * @returns True if block matches query
38
+ */
39
+ function matchesQuery(block, query, graph) {
40
+ // Filter by kinds (OR logic)
41
+ if (query.kinds && query.kinds.length > 0) {
42
+ if (!query.kinds.includes(block.meta.kind)) {
43
+ return false;
44
+ }
45
+ }
46
+ // Filter by tags (AND logic: block must have all query tags)
47
+ if (query.tags && query.tags.length > 0) {
48
+ const blockTags = new Set(block.meta.tags ?? []);
49
+ for (const tag of query.tags) {
50
+ if (!blockTags.has(tag)) {
51
+ return false;
52
+ }
53
+ }
54
+ }
55
+ // Filter by minimum sensitivity
56
+ if (query.minSensitivity !== undefined) {
57
+ if (compareSensitivity(block.meta.sensitivity, query.minSensitivity) < 0) {
58
+ return false;
59
+ }
60
+ }
61
+ // Filter by maximum sensitivity
62
+ if (query.maxSensitivity !== undefined) {
63
+ if (compareSensitivity(block.meta.sensitivity, query.maxSensitivity) > 0) {
64
+ return false;
65
+ }
66
+ }
67
+ // Filter by source
68
+ if (query.source !== undefined) {
69
+ if (block.meta.source !== query.source) {
70
+ return false;
71
+ }
72
+ }
73
+ // Filter by minimum creation timestamp
74
+ if (query.minCreatedAt !== undefined) {
75
+ if (block.meta.createdAt < query.minCreatedAt) {
76
+ return false;
77
+ }
78
+ }
79
+ // Filter by maximum creation timestamp
80
+ if (query.maxCreatedAt !== undefined) {
81
+ if (block.meta.createdAt > query.maxCreatedAt) {
82
+ return false;
83
+ }
84
+ }
85
+ // Filter by provenance: derivedFromAny
86
+ if (query.derivedFromAny && query.derivedFromAny.length > 0) {
87
+ const parents = graph.getDerivedFrom(block.blockHash);
88
+ const parentHashes = new Set(parents.map((p) => p.blockHash));
89
+ const hasMatch = query.derivedFromAny.some((hash) => parentHashes.has(hash));
90
+ if (!hasMatch) {
91
+ return false;
92
+ }
93
+ }
94
+ // Filter by provenance: notDerivedFromAny
95
+ if (query.notDerivedFromAny && query.notDerivedFromAny.length > 0) {
96
+ const parents = graph.getDerivedFrom(block.blockHash);
97
+ const parentHashes = new Set(parents.map((p) => p.blockHash));
98
+ const hasMatch = query.notDerivedFromAny.some((hash) => parentHashes.has(hash));
99
+ if (hasMatch) {
100
+ return false;
101
+ }
102
+ }
103
+ // Filter by references: referencesAny
104
+ if (query.referencesAny && query.referencesAny.length > 0) {
105
+ const refs = graph.getReferences(block.blockHash);
106
+ const refSet = new Set(refs);
107
+ const hasMatch = query.referencesAny.some((hash) => refSet.has(hash));
108
+ if (!hasMatch) {
109
+ return false;
110
+ }
111
+ }
112
+ // Exclude specific hashes
113
+ if (query.excludeHashes && query.excludeHashes.length > 0) {
114
+ if (query.excludeHashes.includes(block.blockHash)) {
115
+ return false;
116
+ }
117
+ }
118
+ // All filters passed
119
+ return true;
120
+ }
121
+ /**
122
+ * Create an empty query (matches all blocks).
123
+ *
124
+ * @returns Empty query
125
+ */
126
+ function emptyQuery() {
127
+ return {};
128
+ }
129
+ /**
130
+ * Merge multiple queries (AND logic: block must match all queries).
131
+ *
132
+ * @param queries - Queries to merge
133
+ * @returns Merged query
134
+ */
135
+ function mergeQueries(...queries) {
136
+ const merged = {};
137
+ for (const query of queries) {
138
+ // Merge kinds (intersection)
139
+ if (query.kinds) {
140
+ if (merged.kinds) {
141
+ const kindSet = new Set(merged.kinds);
142
+ merged.kinds = query.kinds.filter((k) => kindSet.has(k));
143
+ }
144
+ else {
145
+ merged.kinds = [...query.kinds];
146
+ }
147
+ }
148
+ // Merge tags (union - block must have all)
149
+ if (query.tags) {
150
+ merged.tags = [...(merged.tags ?? []), ...query.tags];
151
+ }
152
+ // Merge sensitivity (most restrictive)
153
+ if (query.minSensitivity !== undefined) {
154
+ if (merged.minSensitivity === undefined) {
155
+ merged.minSensitivity = query.minSensitivity;
156
+ }
157
+ else {
158
+ // Take the higher minimum
159
+ if (compareSensitivity(query.minSensitivity, merged.minSensitivity) > 0) {
160
+ merged.minSensitivity = query.minSensitivity;
161
+ }
162
+ }
163
+ }
164
+ if (query.maxSensitivity !== undefined) {
165
+ if (merged.maxSensitivity === undefined) {
166
+ merged.maxSensitivity = query.maxSensitivity;
167
+ }
168
+ else {
169
+ // Take the lower maximum
170
+ if (compareSensitivity(query.maxSensitivity, merged.maxSensitivity) < 0) {
171
+ merged.maxSensitivity = query.maxSensitivity;
172
+ }
173
+ }
174
+ }
175
+ // Merge source (must match - conflicting sources = no results)
176
+ if (query.source !== undefined) {
177
+ if (merged.source !== undefined && merged.source !== query.source) {
178
+ // Conflict: return impossible query
179
+ merged.kinds = [];
180
+ }
181
+ else {
182
+ merged.source = query.source;
183
+ }
184
+ }
185
+ // Merge timestamps (most restrictive)
186
+ if (query.minCreatedAt !== undefined) {
187
+ if (merged.minCreatedAt === undefined) {
188
+ merged.minCreatedAt = query.minCreatedAt;
189
+ }
190
+ else {
191
+ merged.minCreatedAt = Math.max(merged.minCreatedAt, query.minCreatedAt);
192
+ }
193
+ }
194
+ if (query.maxCreatedAt !== undefined) {
195
+ if (merged.maxCreatedAt === undefined) {
196
+ merged.maxCreatedAt = query.maxCreatedAt;
197
+ }
198
+ else {
199
+ merged.maxCreatedAt = Math.min(merged.maxCreatedAt, query.maxCreatedAt);
200
+ }
201
+ }
202
+ // Merge provenance (union)
203
+ if (query.derivedFromAny) {
204
+ merged.derivedFromAny = [
205
+ ...(merged.derivedFromAny ?? []),
206
+ ...query.derivedFromAny,
207
+ ];
208
+ }
209
+ if (query.notDerivedFromAny) {
210
+ merged.notDerivedFromAny = [
211
+ ...(merged.notDerivedFromAny ?? []),
212
+ ...query.notDerivedFromAny,
213
+ ];
214
+ }
215
+ if (query.referencesAny) {
216
+ merged.referencesAny = [
217
+ ...(merged.referencesAny ?? []),
218
+ ...query.referencesAny,
219
+ ];
220
+ }
221
+ // Merge excludeHashes (union)
222
+ if (query.excludeHashes) {
223
+ merged.excludeHashes = [
224
+ ...(merged.excludeHashes ?? []),
225
+ ...query.excludeHashes,
226
+ ];
227
+ }
228
+ // Merge maxTokens (minimum)
229
+ if (query.maxTokens !== undefined) {
230
+ if (merged.maxTokens === undefined) {
231
+ merged.maxTokens = query.maxTokens;
232
+ }
233
+ else {
234
+ merged.maxTokens = Math.min(merged.maxTokens, query.maxTokens);
235
+ }
236
+ }
237
+ }
238
+ return merged;
239
+ }
240
+ //# sourceMappingURL=queries.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queries.js","sourceRoot":"","sources":["../../src/graph/queries.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,90 @@
1
+ /**
2
+ * ContextView: Immutable, deterministically-ordered snapshot of context blocks.
3
+ *
4
+ * Views provide stable ordering (KIND_ORDER + lexicographic) and token estimation.
5
+ */
6
+ import type { ContextBlock } from '../types/block.js';
7
+ import type { ContextGraph } from './context-graph.js';
8
+ import type { BlockQuery } from './queries.js';
9
+ import type { TokenEstimator } from '../adapters/token-estimator.js';
10
+ /**
11
+ * View options for creating a ContextView.
12
+ */
13
+ export interface ViewOptions {
14
+ /** Query to filter blocks (default: all blocks) */
15
+ query?: BlockQuery;
16
+ /** Token estimator for budget enforcement (optional) */
17
+ tokenEstimator?: TokenEstimator;
18
+ /** Maximum token budget (requires tokenEstimator) */
19
+ maxTokens?: number;
20
+ }
21
+ /**
22
+ * Token estimation result for a view.
23
+ */
24
+ export interface ViewTokenEstimate {
25
+ /** Estimated token count */
26
+ tokens: number;
27
+ /** Confidence level */
28
+ confidence: 'exact' | 'high' | 'low';
29
+ /** Whether token budget was exceeded (blocks were truncated) */
30
+ truncated: boolean;
31
+ }
32
+ /**
33
+ * ContextView: Immutable snapshot of blocks with deterministic ordering.
34
+ *
35
+ * Ordering rules:
36
+ * 1. Primary: KIND_ORDER (pinned → reference → memory → state → tool_output → history → turn)
37
+ * 2. Secondary: Lexicographic by blockHash within same kind
38
+ */
39
+ export interface ContextView {
40
+ /** Ordered blocks (immutable) */
41
+ readonly blocks: ReadonlyArray<ContextBlock<unknown>>;
42
+ /** Token estimation (if estimator provided) */
43
+ readonly tokenEstimate?: ViewTokenEstimate;
44
+ /**
45
+ * Stable prefix hash (computed from ordered block hashes).
46
+ * Two views with identical ordered blocks have identical prefix hashes.
47
+ */
48
+ readonly stablePrefixHash: string;
49
+ /** View creation timestamp */
50
+ readonly createdAt: number;
51
+ }
52
+ /**
53
+ * Sort blocks deterministically by KIND_ORDER + lexicographic.
54
+ *
55
+ * @param blocks - Blocks to sort
56
+ * @returns Sorted blocks (new array)
57
+ */
58
+ export declare function sortBlocksDeterministic(blocks: ContextBlock<unknown>[]): ContextBlock<unknown>[];
59
+ /**
60
+ * Compute stable prefix hash from ordered block hashes.
61
+ *
62
+ * @param blocks - Ordered blocks
63
+ * @returns Hex-encoded SHA-256 hash
64
+ */
65
+ export declare function computeStablePrefixHash(blocks: ReadonlyArray<ContextBlock<unknown>>): string;
66
+ /**
67
+ * Create a ContextView from a graph and options.
68
+ *
69
+ * @param graph - Context graph
70
+ * @param options - View options
71
+ * @returns ContextView
72
+ */
73
+ export declare function createContextView(graph: ContextGraph, options: ViewOptions): Promise<ContextView>;
74
+ /**
75
+ * Check if two views have identical content (same blocks in same order).
76
+ *
77
+ * @param a - First view
78
+ * @param b - Second view
79
+ * @returns True if views have identical content
80
+ */
81
+ export declare function viewsEqual(a: ContextView, b: ContextView): boolean;
82
+ /**
83
+ * Merge multiple views into a single view (preserves ordering).
84
+ * Deduplicates blocks by hash.
85
+ *
86
+ * @param views - Views to merge
87
+ * @returns Merged view
88
+ */
89
+ export declare function mergeViews(...views: ContextView[]): ContextView;
90
+ //# sourceMappingURL=views.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"views.d.ts","sourceRoot":"","sources":["../../src/graph/views.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAGrE;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,mDAAmD;IACnD,KAAK,CAAC,EAAE,UAAU,CAAC;IAEnB,wDAAwD;IACxD,cAAc,CAAC,EAAE,cAAc,CAAC;IAEhC,qDAAqD;IACrD,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,4BAA4B;IAC5B,MAAM,EAAE,MAAM,CAAC;IAEf,uBAAuB;IACvB,UAAU,EAAE,OAAO,GAAG,MAAM,GAAG,KAAK,CAAC;IAErC,gEAAgE;IAChE,SAAS,EAAE,OAAO,CAAC;CACpB;AAED;;;;;;GAMG;AACH,MAAM,WAAW,WAAW;IAC1B,iCAAiC;IACjC,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC;IAEtD,+CAA+C;IAC/C,QAAQ,CAAC,aAAa,CAAC,EAAE,iBAAiB,CAAC;IAE3C;;;OAGG;IACH,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAElC,8BAA8B;IAC9B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,YAAY,CAAC,OAAO,CAAC,EAAE,GAC9B,YAAY,CAAC,OAAO,CAAC,EAAE,CAWzB;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,aAAa,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,GAAG,MAAM,CAU5F;AA6DD;;;;;;GAMG;AACH,wBAAsB,iBAAiB,CACrC,KAAK,EAAE,YAAY,EACnB,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC,WAAW,CAAC,CAqCtB;AAED;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,WAAW,GAAG,OAAO,CAElE;AAED;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,GAAG,KAAK,EAAE,WAAW,EAAE,GAAG,WAAW,CAwB/D"}