@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.
- package/README.md +270 -0
- package/dist/__tests__/attachment-selector.test.d.ts +11 -0
- package/dist/__tests__/attachment-selector.test.d.ts.map +1 -0
- package/dist/__tests__/attachment-selector.test.js +449 -0
- package/dist/__tests__/attachment-selector.test.js.map +1 -0
- package/dist/__tests__/cache-breakpoints.test.d.ts +11 -0
- package/dist/__tests__/cache-breakpoints.test.d.ts.map +1 -0
- package/dist/__tests__/cache-breakpoints.test.js +398 -0
- package/dist/__tests__/cache-breakpoints.test.js.map +1 -0
- package/dist/__tests__/codecs.test.d.ts +7 -0
- package/dist/__tests__/codecs.test.d.ts.map +1 -0
- package/dist/__tests__/codecs.test.js +331 -0
- package/dist/__tests__/codecs.test.js.map +1 -0
- package/dist/__tests__/compactor.test.d.ts +11 -0
- package/dist/__tests__/compactor.test.d.ts.map +1 -0
- package/dist/__tests__/compactor.test.js +519 -0
- package/dist/__tests__/compactor.test.js.map +1 -0
- package/dist/__tests__/context-graph.test.d.ts +7 -0
- package/dist/__tests__/context-graph.test.d.ts.map +1 -0
- package/dist/__tests__/context-graph.test.js +262 -0
- package/dist/__tests__/context-graph.test.js.map +1 -0
- package/dist/__tests__/hash.test.d.ts +7 -0
- package/dist/__tests__/hash.test.d.ts.map +1 -0
- package/dist/__tests__/hash.test.js +228 -0
- package/dist/__tests__/hash.test.js.map +1 -0
- package/dist/__tests__/integration.test.d.ts +15 -0
- package/dist/__tests__/integration.test.d.ts.map +1 -0
- package/dist/__tests__/integration.test.js +728 -0
- package/dist/__tests__/integration.test.js.map +1 -0
- package/dist/__tests__/kind-order.test.d.ts +7 -0
- package/dist/__tests__/kind-order.test.d.ts.map +1 -0
- package/dist/__tests__/kind-order.test.js +243 -0
- package/dist/__tests__/kind-order.test.js.map +1 -0
- package/dist/__tests__/phase2-integration.test.d.ts +5 -0
- package/dist/__tests__/phase2-integration.test.d.ts.map +1 -0
- package/dist/__tests__/phase2-integration.test.js +222 -0
- package/dist/__tests__/phase2-integration.test.js.map +1 -0
- package/dist/__tests__/queries.test.d.ts +7 -0
- package/dist/__tests__/queries.test.d.ts.map +1 -0
- package/dist/__tests__/queries.test.js +254 -0
- package/dist/__tests__/queries.test.js.map +1 -0
- package/dist/__tests__/token-estimator.test.d.ts +7 -0
- package/dist/__tests__/token-estimator.test.d.ts.map +1 -0
- package/dist/__tests__/token-estimator.test.js +267 -0
- package/dist/__tests__/token-estimator.test.js.map +1 -0
- package/dist/adapters/anthropic-estimator.d.ts +38 -0
- package/dist/adapters/anthropic-estimator.d.ts.map +1 -0
- package/dist/adapters/anthropic-estimator.js +108 -0
- package/dist/adapters/anthropic-estimator.js.map +1 -0
- package/dist/adapters/attachment-resolver.d.ts +96 -0
- package/dist/adapters/attachment-resolver.d.ts.map +1 -0
- package/dist/adapters/attachment-resolver.js +176 -0
- package/dist/adapters/attachment-resolver.js.map +1 -0
- package/dist/adapters/attachment-selector.d.ts +59 -0
- package/dist/adapters/attachment-selector.d.ts.map +1 -0
- package/dist/adapters/attachment-selector.js +163 -0
- package/dist/adapters/attachment-selector.js.map +1 -0
- package/dist/adapters/gemini-estimator.d.ts +27 -0
- package/dist/adapters/gemini-estimator.d.ts.map +1 -0
- package/dist/adapters/gemini-estimator.js +80 -0
- package/dist/adapters/gemini-estimator.js.map +1 -0
- package/dist/adapters/index.d.ts +12 -0
- package/dist/adapters/index.d.ts.map +1 -0
- package/dist/adapters/index.js +28 -0
- package/dist/adapters/index.js.map +1 -0
- package/dist/adapters/memory-store.d.ts +139 -0
- package/dist/adapters/memory-store.d.ts.map +1 -0
- package/dist/adapters/memory-store.js +187 -0
- package/dist/adapters/memory-store.js.map +1 -0
- package/dist/adapters/openai-estimator.d.ts +35 -0
- package/dist/adapters/openai-estimator.d.ts.map +1 -0
- package/dist/adapters/openai-estimator.js +89 -0
- package/dist/adapters/openai-estimator.js.map +1 -0
- package/dist/adapters/summarizer.d.ts +121 -0
- package/dist/adapters/summarizer.d.ts.map +1 -0
- package/dist/adapters/summarizer.js +121 -0
- package/dist/adapters/summarizer.js.map +1 -0
- package/dist/adapters/token-estimator.d.ts +63 -0
- package/dist/adapters/token-estimator.d.ts.map +1 -0
- package/dist/adapters/token-estimator.js +37 -0
- package/dist/adapters/token-estimator.js.map +1 -0
- package/dist/builder/context-builder.d.ts +186 -0
- package/dist/builder/context-builder.d.ts.map +1 -0
- package/dist/builder/context-builder.js +305 -0
- package/dist/builder/context-builder.js.map +1 -0
- package/dist/builder/context-fork.d.ts +166 -0
- package/dist/builder/context-fork.d.ts.map +1 -0
- package/dist/builder/context-fork.js +282 -0
- package/dist/builder/context-fork.js.map +1 -0
- package/dist/builder/index.d.ts +6 -0
- package/dist/builder/index.d.ts.map +1 -0
- package/dist/builder/index.js +22 -0
- package/dist/builder/index.js.map +1 -0
- package/dist/codecs/base.d.ts +18 -0
- package/dist/codecs/base.d.ts.map +1 -0
- package/dist/codecs/base.js +39 -0
- package/dist/codecs/base.js.map +1 -0
- package/dist/codecs/conversation-history.codec.d.ts +81 -0
- package/dist/codecs/conversation-history.codec.d.ts.map +1 -0
- package/dist/codecs/conversation-history.codec.js +89 -0
- package/dist/codecs/conversation-history.codec.js.map +1 -0
- package/dist/codecs/index.d.ts +31 -0
- package/dist/codecs/index.d.ts.map +1 -0
- package/dist/codecs/index.js +71 -0
- package/dist/codecs/index.js.map +1 -0
- package/dist/codecs/redacted-stub.codec.d.ts +32 -0
- package/dist/codecs/redacted-stub.codec.d.ts.map +1 -0
- package/dist/codecs/redacted-stub.codec.js +64 -0
- package/dist/codecs/redacted-stub.codec.js.map +1 -0
- package/dist/codecs/structured-reference.codec.d.ts +40 -0
- package/dist/codecs/structured-reference.codec.d.ts.map +1 -0
- package/dist/codecs/structured-reference.codec.js +81 -0
- package/dist/codecs/structured-reference.codec.js.map +1 -0
- package/dist/codecs/system-rules.codec.d.ts +32 -0
- package/dist/codecs/system-rules.codec.d.ts.map +1 -0
- package/dist/codecs/system-rules.codec.js +62 -0
- package/dist/codecs/system-rules.codec.js.map +1 -0
- package/dist/codecs/tool-output.codec.d.ts +66 -0
- package/dist/codecs/tool-output.codec.d.ts.map +1 -0
- package/dist/codecs/tool-output.codec.js +95 -0
- package/dist/codecs/tool-output.codec.js.map +1 -0
- package/dist/codecs/tool-schema.codec.d.ts +36 -0
- package/dist/codecs/tool-schema.codec.d.ts.map +1 -0
- package/dist/codecs/tool-schema.codec.js +74 -0
- package/dist/codecs/tool-schema.codec.js.map +1 -0
- package/dist/codecs/unsafe-text.codec.d.ts +28 -0
- package/dist/codecs/unsafe-text.codec.d.ts.map +1 -0
- package/dist/codecs/unsafe-text.codec.js +63 -0
- package/dist/codecs/unsafe-text.codec.js.map +1 -0
- package/dist/graph/context-graph.d.ts +121 -0
- package/dist/graph/context-graph.d.ts.map +1 -0
- package/dist/graph/context-graph.js +166 -0
- package/dist/graph/context-graph.js.map +1 -0
- package/dist/graph/index.d.ts +8 -0
- package/dist/graph/index.d.ts.map +1 -0
- package/dist/graph/index.js +24 -0
- package/dist/graph/index.js.map +1 -0
- package/dist/graph/kind-order.d.ts +60 -0
- package/dist/graph/kind-order.d.ts.map +1 -0
- package/dist/graph/kind-order.js +113 -0
- package/dist/graph/kind-order.js.map +1 -0
- package/dist/graph/queries.d.ts +68 -0
- package/dist/graph/queries.d.ts.map +1 -0
- package/dist/graph/queries.js +240 -0
- package/dist/graph/queries.js.map +1 -0
- package/dist/graph/views.d.ts +90 -0
- package/dist/graph/views.d.ts.map +1 -0
- package/dist/graph/views.js +173 -0
- package/dist/graph/views.js.map +1 -0
- package/dist/index.d.ts +16 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +40 -0
- package/dist/index.js.map +1 -0
- package/dist/pipeline/compactor.d.ts +128 -0
- package/dist/pipeline/compactor.d.ts.map +1 -0
- package/dist/pipeline/compactor.js +346 -0
- package/dist/pipeline/compactor.js.map +1 -0
- package/dist/pipeline/index.d.ts +6 -0
- package/dist/pipeline/index.d.ts.map +1 -0
- package/dist/pipeline/index.js +22 -0
- package/dist/pipeline/index.js.map +1 -0
- package/dist/pipeline/summarizer.d.ts +18 -0
- package/dist/pipeline/summarizer.d.ts.map +1 -0
- package/dist/pipeline/summarizer.js +68 -0
- package/dist/pipeline/summarizer.js.map +1 -0
- package/dist/policies/default-policy.d.ts +29 -0
- package/dist/policies/default-policy.d.ts.map +1 -0
- package/dist/policies/default-policy.js +58 -0
- package/dist/policies/default-policy.js.map +1 -0
- package/dist/policies/index.d.ts +5 -0
- package/dist/policies/index.d.ts.map +1 -0
- package/dist/policies/index.js +21 -0
- package/dist/policies/index.js.map +1 -0
- package/dist/providers/anthropic-compiler.d.ts +58 -0
- package/dist/providers/anthropic-compiler.d.ts.map +1 -0
- package/dist/providers/anthropic-compiler.js +182 -0
- package/dist/providers/anthropic-compiler.js.map +1 -0
- package/dist/providers/capabilities.d.ts +54 -0
- package/dist/providers/capabilities.d.ts.map +1 -0
- package/dist/providers/capabilities.js +87 -0
- package/dist/providers/capabilities.js.map +1 -0
- package/dist/providers/gemini-compiler.d.ts +51 -0
- package/dist/providers/gemini-compiler.d.ts.map +1 -0
- package/dist/providers/gemini-compiler.js +206 -0
- package/dist/providers/gemini-compiler.js.map +1 -0
- package/dist/providers/index.d.ts +8 -0
- package/dist/providers/index.d.ts.map +1 -0
- package/dist/providers/index.js +24 -0
- package/dist/providers/index.js.map +1 -0
- package/dist/providers/openai-compiler.d.ts +46 -0
- package/dist/providers/openai-compiler.d.ts.map +1 -0
- package/dist/providers/openai-compiler.js +149 -0
- package/dist/providers/openai-compiler.js.map +1 -0
- package/dist/types/attachment.d.ts +62 -0
- package/dist/types/attachment.d.ts.map +1 -0
- package/dist/types/attachment.js +6 -0
- package/dist/types/attachment.js.map +1 -0
- package/dist/types/block.d.ts +61 -0
- package/dist/types/block.d.ts.map +1 -0
- package/dist/types/block.js +8 -0
- package/dist/types/block.js.map +1 -0
- package/dist/types/codec.d.ts +58 -0
- package/dist/types/codec.d.ts.map +1 -0
- package/dist/types/codec.js +6 -0
- package/dist/types/codec.js.map +1 -0
- package/dist/types/compiled.d.ts +91 -0
- package/dist/types/compiled.d.ts.map +1 -0
- package/dist/types/compiled.js +6 -0
- package/dist/types/compiled.js.map +1 -0
- package/dist/types/hash.d.ts +24 -0
- package/dist/types/hash.d.ts.map +1 -0
- package/dist/types/hash.js +49 -0
- package/dist/types/hash.js.map +1 -0
- package/dist/types/index.d.ts +10 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +26 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/policy.d.ts +128 -0
- package/dist/types/policy.d.ts.map +1 -0
- package/dist/types/policy.js +55 -0
- package/dist/types/policy.js.map +1 -0
- package/package.json +55 -0
- package/postcss.config.js +4 -0
- package/src/__tests__/attachment-selector.test.ts +559 -0
- package/src/__tests__/cache-breakpoints.test.ts +566 -0
- package/src/__tests__/codecs.test.ts +417 -0
- package/src/__tests__/compactor.test.ts +608 -0
- package/src/__tests__/context-graph.test.ts +383 -0
- package/src/__tests__/hash.test.ts +274 -0
- package/src/__tests__/integration.test.ts +866 -0
- package/src/__tests__/kind-order.test.ts +312 -0
- package/src/__tests__/phase2-integration.test.ts +253 -0
- package/src/__tests__/queries.test.ts +387 -0
- package/src/__tests__/token-estimator.test.ts +326 -0
- package/src/adapters/anthropic-estimator.ts +125 -0
- package/src/adapters/attachment-resolver.ts +295 -0
- package/src/adapters/attachment-selector.ts +218 -0
- package/src/adapters/gemini-estimator.ts +93 -0
- package/src/adapters/index.ts +12 -0
- package/src/adapters/memory-store.ts +299 -0
- package/src/adapters/openai-estimator.ts +105 -0
- package/src/adapters/summarizer.ts +250 -0
- package/src/adapters/token-estimator.ts +74 -0
- package/src/builder/context-builder.ts +467 -0
- package/src/builder/context-fork.ts +471 -0
- package/src/builder/index.ts +6 -0
- package/src/codecs/base.ts +36 -0
- package/src/codecs/conversation-history.codec.ts +108 -0
- package/src/codecs/index.ts +57 -0
- package/src/codecs/redacted-stub.codec.ts +76 -0
- package/src/codecs/structured-reference.codec.ts +96 -0
- package/src/codecs/system-rules.codec.ts +74 -0
- package/src/codecs/tool-output.codec.ts +109 -0
- package/src/codecs/tool-schema.codec.ts +87 -0
- package/src/codecs/unsafe-text.codec.ts +74 -0
- package/src/graph/context-graph.ts +205 -0
- package/src/graph/index.ts +8 -0
- package/src/graph/kind-order.ts +125 -0
- package/src/graph/queries.ts +306 -0
- package/src/graph/views.ts +255 -0
- package/src/index.ts +31 -0
- package/src/pipeline/compactor.ts +563 -0
- package/src/pipeline/index.ts +6 -0
- package/src/pipeline/summarizer.ts +76 -0
- package/src/policies/default-policy.ts +69 -0
- package/src/policies/index.ts +5 -0
- package/src/providers/anthropic-compiler.ts +294 -0
- package/src/providers/capabilities.ts +144 -0
- package/src/providers/gemini-compiler.ts +272 -0
- package/src/providers/index.ts +8 -0
- package/src/providers/openai-compiler.ts +191 -0
- package/src/types/attachment.ts +86 -0
- package/src/types/block.ts +84 -0
- package/src/types/codec.ts +68 -0
- package/src/types/compiled.ts +109 -0
- package/src/types/hash.ts +58 -0
- package/src/types/index.ts +10 -0
- package/src/types/policy.ts +194 -0
- package/tsconfig.json +21 -0
- 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"}
|