@duckcodeailabs/dql-agent 1.6.31 → 1.6.32

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 (160) hide show
  1. package/dist/agent-run-engine.d.ts +42 -6
  2. package/dist/agent-run-engine.d.ts.map +1 -1
  3. package/dist/agent-run-engine.js +133 -79
  4. package/dist/agent-run-engine.js.map +1 -1
  5. package/dist/agent-run-gates.d.ts.map +1 -1
  6. package/dist/agent-run-gates.js +72 -5
  7. package/dist/agent-run-gates.js.map +1 -1
  8. package/dist/agent-run-planner.d.ts.map +1 -1
  9. package/dist/agent-run-planner.js +13 -0
  10. package/dist/agent-run-planner.js.map +1 -1
  11. package/dist/answer-loop.d.ts +110 -8
  12. package/dist/answer-loop.d.ts.map +1 -1
  13. package/dist/answer-loop.js +1679 -1299
  14. package/dist/answer-loop.js.map +1 -1
  15. package/dist/answer-shape.d.ts +16 -0
  16. package/dist/answer-shape.d.ts.map +1 -0
  17. package/dist/answer-shape.js +85 -0
  18. package/dist/answer-shape.js.map +1 -0
  19. package/dist/cascade/budgets.d.ts +101 -0
  20. package/dist/cascade/budgets.d.ts.map +1 -0
  21. package/dist/cascade/budgets.js +184 -0
  22. package/dist/cascade/budgets.js.map +1 -0
  23. package/dist/cascade/cascade.d.ts +86 -0
  24. package/dist/cascade/cascade.d.ts.map +1 -0
  25. package/dist/cascade/cascade.js +115 -0
  26. package/dist/cascade/cascade.js.map +1 -0
  27. package/dist/cascade/route-policy.d.ts +14 -0
  28. package/dist/cascade/route-policy.d.ts.map +1 -0
  29. package/dist/cascade/route-policy.js +48 -0
  30. package/dist/cascade/route-policy.js.map +1 -0
  31. package/dist/cascade/triage.d.ts +20 -0
  32. package/dist/cascade/triage.d.ts.map +1 -0
  33. package/dist/cascade/triage.js +25 -0
  34. package/dist/cascade/triage.js.map +1 -0
  35. package/dist/conversation/rolling-summary.d.ts +13 -0
  36. package/dist/conversation/rolling-summary.d.ts.map +1 -0
  37. package/dist/conversation/rolling-summary.js +43 -0
  38. package/dist/conversation/rolling-summary.js.map +1 -0
  39. package/dist/conversation/session-store.d.ts +110 -0
  40. package/dist/conversation/session-store.d.ts.map +1 -0
  41. package/dist/conversation/session-store.js +387 -0
  42. package/dist/conversation/session-store.js.map +1 -0
  43. package/dist/conversation/snapshot.d.ts +59 -0
  44. package/dist/conversation/snapshot.d.ts.map +1 -0
  45. package/dist/conversation/snapshot.js +153 -0
  46. package/dist/conversation/snapshot.js.map +1 -0
  47. package/dist/conversation/working-state.d.ts +49 -0
  48. package/dist/conversation/working-state.d.ts.map +1 -0
  49. package/dist/conversation/working-state.js +249 -0
  50. package/dist/conversation/working-state.js.map +1 -0
  51. package/dist/embeddings/provider.d.ts +62 -0
  52. package/dist/embeddings/provider.d.ts.map +1 -1
  53. package/dist/embeddings/provider.js +98 -0
  54. package/dist/embeddings/provider.js.map +1 -1
  55. package/dist/grounding/context-ledger.d.ts +30 -0
  56. package/dist/grounding/context-ledger.d.ts.map +1 -0
  57. package/dist/grounding/context-ledger.js +54 -0
  58. package/dist/grounding/context-ledger.js.map +1 -0
  59. package/dist/grounding/regrounding.d.ts +24 -0
  60. package/dist/grounding/regrounding.d.ts.map +1 -0
  61. package/dist/grounding/regrounding.js +219 -0
  62. package/dist/grounding/regrounding.js.map +1 -0
  63. package/dist/grounding/value-index.d.ts +32 -0
  64. package/dist/grounding/value-index.d.ts.map +1 -0
  65. package/dist/grounding/value-index.js +67 -0
  66. package/dist/grounding/value-index.js.map +1 -0
  67. package/dist/index.d.ts +45 -14
  68. package/dist/index.d.ts.map +1 -1
  69. package/dist/index.js +102 -11
  70. package/dist/index.js.map +1 -1
  71. package/dist/intent-controller.d.ts +7 -0
  72. package/dist/intent-controller.d.ts.map +1 -1
  73. package/dist/intent-controller.js +22 -1
  74. package/dist/intent-controller.js.map +1 -1
  75. package/dist/kg/build.d.ts.map +1 -1
  76. package/dist/kg/build.js +44 -17
  77. package/dist/kg/build.js.map +1 -1
  78. package/dist/kg/sqlite-fts.d.ts +3 -1
  79. package/dist/kg/sqlite-fts.d.ts.map +1 -1
  80. package/dist/kg/sqlite-fts.js +16 -2
  81. package/dist/kg/sqlite-fts.js.map +1 -1
  82. package/dist/kg/types.d.ts +23 -1
  83. package/dist/kg/types.d.ts.map +1 -1
  84. package/dist/memory/fts-query.d.ts +7 -0
  85. package/dist/memory/fts-query.d.ts.map +1 -0
  86. package/dist/memory/fts-query.js +36 -0
  87. package/dist/memory/fts-query.js.map +1 -0
  88. package/dist/memory/sqlite-memory.d.ts.map +1 -1
  89. package/dist/memory/sqlite-memory.js +1 -30
  90. package/dist/memory/sqlite-memory.js.map +1 -1
  91. package/dist/metadata/analysis-planner.d.ts +23 -0
  92. package/dist/metadata/analysis-planner.d.ts.map +1 -1
  93. package/dist/metadata/analysis-planner.js +432 -2
  94. package/dist/metadata/analysis-planner.js.map +1 -1
  95. package/dist/metadata/block-fit.d.ts +24 -0
  96. package/dist/metadata/block-fit.d.ts.map +1 -0
  97. package/dist/metadata/block-fit.js +373 -0
  98. package/dist/metadata/block-fit.js.map +1 -0
  99. package/dist/metadata/catalog.d.ts +72 -3
  100. package/dist/metadata/catalog.d.ts.map +1 -1
  101. package/dist/metadata/catalog.js +1452 -72
  102. package/dist/metadata/catalog.js.map +1 -1
  103. package/dist/metadata/drafts.d.ts +25 -0
  104. package/dist/metadata/drafts.d.ts.map +1 -1
  105. package/dist/metadata/drafts.js +112 -2
  106. package/dist/metadata/drafts.js.map +1 -1
  107. package/dist/metadata/metric-match.d.ts +55 -6
  108. package/dist/metadata/metric-match.d.ts.map +1 -1
  109. package/dist/metadata/metric-match.js +158 -13
  110. package/dist/metadata/metric-match.js.map +1 -1
  111. package/dist/metadata/sql-context-validation.d.ts +13 -1
  112. package/dist/metadata/sql-context-validation.d.ts.map +1 -1
  113. package/dist/metadata/sql-context-validation.js +172 -19
  114. package/dist/metadata/sql-context-validation.js.map +1 -1
  115. package/dist/metadata/sql-retrieval.d.ts +3 -2
  116. package/dist/metadata/sql-retrieval.d.ts.map +1 -1
  117. package/dist/metadata/sql-retrieval.js +6 -4
  118. package/dist/metadata/sql-retrieval.js.map +1 -1
  119. package/dist/providers/claude.d.ts +2 -1
  120. package/dist/providers/claude.d.ts.map +1 -1
  121. package/dist/providers/claude.js +95 -0
  122. package/dist/providers/claude.js.map +1 -1
  123. package/dist/providers/index.d.ts +1 -1
  124. package/dist/providers/index.d.ts.map +1 -1
  125. package/dist/providers/index.js.map +1 -1
  126. package/dist/providers/openai.d.ts +2 -1
  127. package/dist/providers/openai.d.ts.map +1 -1
  128. package/dist/providers/openai.js +143 -0
  129. package/dist/providers/openai.js.map +1 -1
  130. package/dist/providers/tool-output.d.ts +2 -0
  131. package/dist/providers/tool-output.d.ts.map +1 -0
  132. package/dist/providers/tool-output.js +22 -0
  133. package/dist/providers/tool-output.js.map +1 -0
  134. package/dist/providers/types.d.ts +23 -0
  135. package/dist/providers/types.d.ts.map +1 -1
  136. package/dist/providers/types.js.map +1 -1
  137. package/dist/semantic-bridge/compose.d.ts +89 -0
  138. package/dist/semantic-bridge/compose.d.ts.map +1 -0
  139. package/dist/semantic-bridge/compose.js +528 -0
  140. package/dist/semantic-bridge/compose.js.map +1 -0
  141. package/dist/semantic-bridge/member-select.d.ts +23 -0
  142. package/dist/semantic-bridge/member-select.d.ts.map +1 -0
  143. package/dist/semantic-bridge/member-select.js +106 -0
  144. package/dist/semantic-bridge/member-select.js.map +1 -0
  145. package/dist/skills/defaults.d.ts.map +1 -1
  146. package/dist/skills/defaults.js +5 -0
  147. package/dist/skills/defaults.js.map +1 -1
  148. package/dist/synthesize.d.ts +26 -0
  149. package/dist/synthesize.d.ts.map +1 -1
  150. package/dist/synthesize.js +72 -3
  151. package/dist/synthesize.js.map +1 -1
  152. package/dist/tools/registry.d.ts +15 -0
  153. package/dist/tools/registry.d.ts.map +1 -0
  154. package/dist/tools/registry.js +692 -0
  155. package/dist/tools/registry.js.map +1 -0
  156. package/dist/trust/stamp.d.ts +26 -0
  157. package/dist/trust/stamp.d.ts.map +1 -0
  158. package/dist/trust/stamp.js +33 -0
  159. package/dist/trust/stamp.js.map +1 -0
  160. package/package.json +4 -4
@@ -0,0 +1,49 @@
1
+ /**
2
+ * Deterministic conversation working state: the entities / measures / dimensions /
3
+ * filters "in play" across turns, plus explicit topic-relation classification
4
+ * (continuation | refinement | shift | return).
5
+ *
6
+ * This replaces regex guesswork with state: a topic SHIFT deterministically
7
+ * clears carried filters (stale-context protection), and a RETURN to a prior
8
+ * topic restores its filters and source block.
9
+ */
10
+ import type { ConversationTurn } from './session-store.js';
11
+ export type TopicRelation = 'continuation' | 'refinement' | 'shift' | 'return';
12
+ export interface ConversationTopicFrame {
13
+ topicKey: string;
14
+ filters: string[];
15
+ sourceCertifiedBlock?: string;
16
+ contextPackId?: string;
17
+ measures: string[];
18
+ dimensions: string[];
19
+ }
20
+ export interface ConversationWorkingState {
21
+ entities: string[];
22
+ measures: string[];
23
+ dimensions: string[];
24
+ filters: Array<{
25
+ value: string;
26
+ sourceTurnId: string;
27
+ }>;
28
+ timeframe?: string;
29
+ limit?: number;
30
+ sourceCertifiedBlock?: string;
31
+ lastContextPackId?: string;
32
+ lastResultColumns?: string[];
33
+ lastResultDimensionValues?: Record<string, string[]>;
34
+ /** Normalized entity+measure key of the CURRENT topic, for shift detection. */
35
+ topicKey?: string;
36
+ /** Small ring of prior topics so a "return" can restore filters/block. */
37
+ priorTopics?: ConversationTopicFrame[];
38
+ }
39
+ export declare function emptyWorkingState(): ConversationWorkingState;
40
+ export declare function parseWorkingState(raw: Record<string, unknown> | undefined): ConversationWorkingState;
41
+ /**
42
+ * Fold a completed turn into the working state and classify how it relates to
43
+ * the ongoing topic. Pure and deterministic — safe to re-run.
44
+ */
45
+ export declare function reduceWorkingState(prev: ConversationWorkingState, turn: ConversationTurn): {
46
+ state: ConversationWorkingState;
47
+ topicRelation: TopicRelation;
48
+ };
49
+ //# sourceMappingURL=working-state.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"working-state.d.ts","sourceRoot":"","sources":["../../src/conversation/working-state.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAE3D,MAAM,MAAM,aAAa,GAAG,cAAc,GAAG,YAAY,GAAG,OAAO,GAAG,QAAQ,CAAC;AAE/E,MAAM,WAAW,sBAAsB;IACrC,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB;AAED,MAAM,WAAW,wBAAwB;IACvC,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,OAAO,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACxD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC7B,yBAAyB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IACrD,+EAA+E;IAC/E,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,0EAA0E;IAC1E,WAAW,CAAC,EAAE,sBAAsB,EAAE,CAAC;CACxC;AAgBD,wBAAgB,iBAAiB,IAAI,wBAAwB,CAE5D;AAED,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,GAAG,wBAAwB,CAkBpG;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,wBAAwB,EAC9B,IAAI,EAAE,gBAAgB,GACrB;IAAE,KAAK,EAAE,wBAAwB,CAAC;IAAC,aAAa,EAAE,aAAa,CAAA;CAAE,CA4EnE"}
@@ -0,0 +1,249 @@
1
+ /**
2
+ * Deterministic conversation working state: the entities / measures / dimensions /
3
+ * filters "in play" across turns, plus explicit topic-relation classification
4
+ * (continuation | refinement | shift | return).
5
+ *
6
+ * This replaces regex guesswork with state: a topic SHIFT deterministically
7
+ * clears carried filters (stale-context protection), and a RETURN to a prior
8
+ * topic restores its filters and source block.
9
+ */
10
+ const MAX_TERMS = 12;
11
+ const MAX_FILTERS = 16;
12
+ const MAX_PRIOR_TOPICS = 4;
13
+ export function emptyWorkingState() {
14
+ return { entities: [], measures: [], dimensions: [], filters: [] };
15
+ }
16
+ export function parseWorkingState(raw) {
17
+ if (!raw)
18
+ return emptyWorkingState();
19
+ return {
20
+ entities: stringArray(raw.entities),
21
+ measures: stringArray(raw.measures),
22
+ dimensions: stringArray(raw.dimensions),
23
+ filters: filterArray(raw.filters),
24
+ timeframe: optionalString(raw.timeframe),
25
+ limit: typeof raw.limit === 'number' ? raw.limit : undefined,
26
+ sourceCertifiedBlock: optionalString(raw.sourceCertifiedBlock),
27
+ lastContextPackId: optionalString(raw.lastContextPackId),
28
+ lastResultColumns: raw.lastResultColumns ? stringArray(raw.lastResultColumns) : undefined,
29
+ lastResultDimensionValues: stringRecord(raw.lastResultDimensionValues),
30
+ topicKey: optionalString(raw.topicKey),
31
+ priorTopics: Array.isArray(raw.priorTopics)
32
+ ? raw.priorTopics.map(parseTopicFrame).filter((frame) => Boolean(frame)).slice(0, MAX_PRIOR_TOPICS)
33
+ : undefined,
34
+ };
35
+ }
36
+ /**
37
+ * Fold a completed turn into the working state and classify how it relates to
38
+ * the ongoing topic. Pure and deterministic — safe to re-run.
39
+ */
40
+ export function reduceWorkingState(prev, turn) {
41
+ const shape = shapeFromTurn(turn);
42
+ const newKey = topicKeyFor(shape);
43
+ const relation = classifyTopicRelation(prev, shape, newKey);
44
+ if (relation === 'shift') {
45
+ // Stale-context protection: a new topic starts with a CLEAN filter slate.
46
+ // The outgoing topic is remembered so a later "return" can restore it.
47
+ const priorTopics = prev.topicKey
48
+ ? [frameFromState(prev), ...(prev.priorTopics ?? [])].slice(0, MAX_PRIOR_TOPICS)
49
+ : prev.priorTopics;
50
+ return {
51
+ topicRelation: relation,
52
+ state: {
53
+ entities: shape.entities.slice(0, MAX_TERMS),
54
+ measures: shape.measures.slice(0, MAX_TERMS),
55
+ dimensions: shape.dimensions.slice(0, MAX_TERMS),
56
+ filters: shape.filters.map((value) => ({ value, sourceTurnId: turn.id })).slice(0, MAX_FILTERS),
57
+ timeframe: shape.timeframe,
58
+ limit: shape.limit,
59
+ sourceCertifiedBlock: turn.sourceCertifiedBlock,
60
+ lastContextPackId: turn.contextPackId,
61
+ lastResultColumns: turn.result?.columns,
62
+ lastResultDimensionValues: turn.result?.dimensionValues,
63
+ topicKey: newKey || undefined,
64
+ priorTopics,
65
+ },
66
+ };
67
+ }
68
+ if (relation === 'return') {
69
+ const returned = (prev.priorTopics ?? []).find((frame) => overlaps(frame.topicKey, newKey) >= 0.5);
70
+ const remaining = (prev.priorTopics ?? []).filter((frame) => frame !== returned);
71
+ const currentFrame = prev.topicKey ? [frameFromState(prev)] : [];
72
+ return {
73
+ topicRelation: relation,
74
+ state: {
75
+ entities: merge(shape.entities, returned?.topicKey.split('|') ?? []),
76
+ measures: merge(shape.measures, returned?.measures ?? []),
77
+ dimensions: merge(shape.dimensions, returned?.dimensions ?? []),
78
+ filters: [
79
+ ...(returned?.filters ?? []).map((value) => ({ value, sourceTurnId: turn.id })),
80
+ ...shape.filters.map((value) => ({ value, sourceTurnId: turn.id })),
81
+ ].slice(0, MAX_FILTERS),
82
+ timeframe: shape.timeframe ?? prev.timeframe,
83
+ limit: shape.limit ?? prev.limit,
84
+ sourceCertifiedBlock: turn.sourceCertifiedBlock ?? returned?.sourceCertifiedBlock,
85
+ lastContextPackId: turn.contextPackId ?? returned?.contextPackId,
86
+ lastResultColumns: turn.result?.columns ?? prev.lastResultColumns,
87
+ lastResultDimensionValues: turn.result?.dimensionValues ?? prev.lastResultDimensionValues,
88
+ topicKey: returned?.topicKey ?? newKey ?? prev.topicKey,
89
+ priorTopics: [...currentFrame, ...remaining].slice(0, MAX_PRIOR_TOPICS),
90
+ },
91
+ };
92
+ }
93
+ // continuation / refinement: accumulate.
94
+ return {
95
+ topicRelation: relation,
96
+ state: {
97
+ entities: merge(prev.entities, shape.entities),
98
+ measures: merge(prev.measures, shape.measures),
99
+ dimensions: merge(prev.dimensions, shape.dimensions),
100
+ filters: mergeFilters(prev.filters, shape.filters.map((value) => ({ value, sourceTurnId: turn.id }))),
101
+ timeframe: shape.timeframe ?? prev.timeframe,
102
+ limit: shape.limit ?? prev.limit,
103
+ sourceCertifiedBlock: turn.sourceCertifiedBlock ?? prev.sourceCertifiedBlock,
104
+ lastContextPackId: turn.contextPackId ?? prev.lastContextPackId,
105
+ lastResultColumns: turn.result?.columns ?? prev.lastResultColumns,
106
+ lastResultDimensionValues: turn.result?.dimensionValues ?? prev.lastResultDimensionValues,
107
+ topicKey: prev.topicKey && newKey && prev.topicKey !== newKey
108
+ ? mergeTopicKeys(prev.topicKey, newKey)
109
+ : prev.topicKey ?? newKey ?? undefined,
110
+ priorTopics: prev.priorTopics,
111
+ },
112
+ };
113
+ }
114
+ function classifyTopicRelation(prev, shape, newKey) {
115
+ if (!prev.topicKey)
116
+ return 'continuation';
117
+ if (!newKey) {
118
+ // No topical signal in the new turn: filters/limit-only turns narrow the
119
+ // current topic (refinement); a bare deictic follow-up just continues it.
120
+ return shape.filters.length > 0 || shape.limit !== undefined ? 'refinement' : 'continuation';
121
+ }
122
+ const overlap = overlaps(prev.topicKey, newKey);
123
+ if (overlap >= 0.5)
124
+ return 'continuation';
125
+ if (overlap > 0)
126
+ return 'refinement';
127
+ const returned = (prev.priorTopics ?? []).some((frame) => overlaps(frame.topicKey, newKey) >= 0.5);
128
+ if (returned)
129
+ return 'return';
130
+ // Zero overlap with the current topic: filters/limit-only turns are refinements;
131
+ // a turn with its own entities/measures is a genuine shift.
132
+ if (shape.entities.length === 0 && shape.measures.length === 0)
133
+ return 'refinement';
134
+ return 'shift';
135
+ }
136
+ function shapeFromTurn(turn) {
137
+ const contract = turn.contract ?? {};
138
+ const topN = contract.topN;
139
+ return {
140
+ entities: stringArray(contract.entities),
141
+ measures: stringArray(contract.measures),
142
+ dimensions: stringArray(contract.dimensions),
143
+ filters: stringArray(contract.filters),
144
+ timeframe: optionalString(contract.timeframe),
145
+ limit: typeof topN === 'number'
146
+ ? topN
147
+ : topN && typeof topN === 'object' && typeof topN.n === 'number'
148
+ ? topN.n
149
+ : undefined,
150
+ };
151
+ }
152
+ function topicKeyFor(shape) {
153
+ return Array.from(new Set([
154
+ ...shape.entities.map(normalizeTerm),
155
+ ...shape.measures.map(normalizeTerm),
156
+ ].filter(Boolean))).sort().join('|');
157
+ }
158
+ /** Jaccard overlap of two topic keys ('|'-joined normalized term sets). */
159
+ function overlaps(a, b) {
160
+ const setA = new Set(a.split('|').filter(Boolean));
161
+ const setB = new Set(b.split('|').filter(Boolean));
162
+ if (setA.size === 0 || setB.size === 0)
163
+ return 0;
164
+ let shared = 0;
165
+ for (const term of setA)
166
+ if (setB.has(term))
167
+ shared += 1;
168
+ return shared / (setA.size + setB.size - shared);
169
+ }
170
+ function frameFromState(state) {
171
+ return {
172
+ topicKey: state.topicKey ?? '',
173
+ filters: state.filters.map((filter) => filter.value),
174
+ sourceCertifiedBlock: state.sourceCertifiedBlock,
175
+ contextPackId: state.lastContextPackId,
176
+ measures: state.measures,
177
+ dimensions: state.dimensions,
178
+ };
179
+ }
180
+ function parseTopicFrame(raw) {
181
+ if (!raw || typeof raw !== 'object' || Array.isArray(raw))
182
+ return undefined;
183
+ const record = raw;
184
+ const topicKey = optionalString(record.topicKey);
185
+ if (!topicKey)
186
+ return undefined;
187
+ return {
188
+ topicKey,
189
+ filters: stringArray(record.filters),
190
+ sourceCertifiedBlock: optionalString(record.sourceCertifiedBlock),
191
+ contextPackId: optionalString(record.contextPackId),
192
+ measures: stringArray(record.measures),
193
+ dimensions: stringArray(record.dimensions),
194
+ };
195
+ }
196
+ function mergeTopicKeys(a, b) {
197
+ return Array.from(new Set([...a.split('|'), ...b.split('|')].filter(Boolean))).sort().slice(0, 8).join('|');
198
+ }
199
+ function merge(a, b) {
200
+ return Array.from(new Set([...a, ...b].map(normalizeTerm).filter(Boolean))).slice(0, MAX_TERMS);
201
+ }
202
+ function mergeFilters(prev, next) {
203
+ const seen = new Set();
204
+ const out = [];
205
+ for (const filter of [...prev, ...next]) {
206
+ const key = filter.value.toLowerCase();
207
+ if (seen.has(key))
208
+ continue;
209
+ seen.add(key);
210
+ out.push(filter);
211
+ }
212
+ return out.slice(0, MAX_FILTERS);
213
+ }
214
+ function normalizeTerm(value) {
215
+ return value.toLowerCase().replace(/[^a-z0-9_ ]+/g, '').replace(/s$/, '').trim();
216
+ }
217
+ function stringArray(value) {
218
+ if (!Array.isArray(value))
219
+ return [];
220
+ return value.filter((item) => typeof item === 'string' && item.trim().length > 0);
221
+ }
222
+ function filterArray(value) {
223
+ if (!Array.isArray(value))
224
+ return [];
225
+ return value.flatMap((item) => {
226
+ if (!item || typeof item !== 'object' || Array.isArray(item))
227
+ return [];
228
+ const record = item;
229
+ const filterValue = optionalString(record.value);
230
+ if (!filterValue)
231
+ return [];
232
+ return [{ value: filterValue, sourceTurnId: optionalString(record.sourceTurnId) ?? '' }];
233
+ });
234
+ }
235
+ function optionalString(value) {
236
+ return typeof value === 'string' && value.trim() ? value.trim() : undefined;
237
+ }
238
+ function stringRecord(value) {
239
+ if (!value || typeof value !== 'object' || Array.isArray(value))
240
+ return undefined;
241
+ const out = {};
242
+ for (const [key, raw] of Object.entries(value)) {
243
+ const values = stringArray(raw);
244
+ if (values.length > 0)
245
+ out[key] = values;
246
+ }
247
+ return Object.keys(out).length > 0 ? out : undefined;
248
+ }
249
+ //# sourceMappingURL=working-state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"working-state.js","sourceRoot":"","sources":["../../src/conversation/working-state.ts"],"names":[],"mappings":"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"}
@@ -36,6 +36,68 @@ export declare class HashedTokenEmbeddingProvider implements EmbeddingProvider {
36
36
  }
37
37
  /** The safe default provider: deterministic + offline. */
38
38
  export declare function defaultEmbeddingProvider(): EmbeddingProvider;
39
+ /** Minimal fetch signature so the OpenAI provider stays dependency-free and testable. */
40
+ export type EmbeddingFetch = (url: string, init: {
41
+ method: string;
42
+ headers: Record<string, string>;
43
+ body: string;
44
+ signal?: AbortSignal;
45
+ }) => Promise<{
46
+ ok: boolean;
47
+ status: number;
48
+ json: () => Promise<unknown>;
49
+ }>;
50
+ export interface OpenAIEmbeddingOptions {
51
+ apiKey: string;
52
+ model?: string;
53
+ baseUrl?: string;
54
+ dimensions?: number;
55
+ fetchImpl?: EmbeddingFetch;
56
+ }
57
+ /**
58
+ * Real embeddings via an OpenAI-compatible `/embeddings` endpoint (dependency-free
59
+ * over fetch). Opt-in: only constructed when an API key is configured. Falls back
60
+ * to the hashed provider at the resolver level when unavailable, so offline and
61
+ * un-keyed projects keep working deterministically.
62
+ */
63
+ export declare class OpenAIEmbeddingProvider implements EmbeddingProvider {
64
+ readonly id: string;
65
+ readonly dimensions: number;
66
+ private readonly apiKey;
67
+ private readonly model;
68
+ private readonly baseUrl;
69
+ private readonly fetchImpl;
70
+ constructor(options: OpenAIEmbeddingOptions);
71
+ embed(texts: string[]): Promise<number[][]>;
72
+ }
73
+ /**
74
+ * Content-hash cache around any provider so repeated texts (block example
75
+ * questions, metric labels) are embedded once. Bounded LRU-ish by insertion order.
76
+ */
77
+ export declare class CachingEmbeddingProvider implements EmbeddingProvider {
78
+ readonly id: string;
79
+ readonly dimensions: number;
80
+ private readonly inner;
81
+ private readonly cache;
82
+ private readonly maxEntries;
83
+ constructor(inner: EmbeddingProvider, maxEntries?: number);
84
+ embed(texts: string[]): Promise<number[][]>;
85
+ private put;
86
+ }
87
+ export interface EmbeddingResolveOptions {
88
+ /** API key for an OpenAI-compatible embeddings endpoint. */
89
+ openaiApiKey?: string;
90
+ model?: string;
91
+ baseUrl?: string;
92
+ fetchImpl?: EmbeddingFetch;
93
+ }
94
+ /**
95
+ * Pick the best available embedding provider: a real OpenAI-compatible embedder
96
+ * when an API key is configured (wrapped in a content-hash cache), else the safe
97
+ * deterministic hashed-token provider. This is the single place config chooses an
98
+ * embedder, so retrieval/matching call sites just call resolveEmbeddingProvider().
99
+ */
100
+ export declare function resolveEmbeddingProvider(options?: EmbeddingResolveOptions): EmbeddingProvider;
39
101
  export interface HybridRankItem<T> {
40
102
  item: T;
41
103
  /** Text the item is embedded/searched on. */
@@ -1 +1 @@
1
- {"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../src/embeddings/provider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH,MAAM,WAAW,iBAAiB;IAChC,oEAAoE;IACpE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,6BAA6B;IAC7B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,8EAA8E;IAC9E,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;CAC7C;AAED,8DAA8D;AAC9D,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,CAYjE;AAQD;;;;;;GAMG;AACH,qBAAa,4BAA6B,YAAW,iBAAiB;IACpE,QAAQ,CAAC,EAAE,qBAAqB;IAChC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;gBAEhB,UAAU,SAAM;IAItB,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;IAIjD,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE;CAejC;AAQD,0DAA0D;AAC1D,wBAAgB,wBAAwB,IAAI,iBAAiB,CAE5D;AAED,MAAM,WAAW,cAAc,CAAC,CAAC;IAC/B,IAAI,EAAE,CAAC,CAAC;IACR,6CAA6C;IAC7C,IAAI,EAAE,MAAM,CAAC;IACb,4DAA4D;IAC5D,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,iBAAiB;IAChC;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,iBAAiB,CAAC;CAC9B;AAED,MAAM,WAAW,YAAY,CAAC,CAAC;IAC7B,IAAI,EAAE,CAAC,CAAC;IACR,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;;GAIG;AACH,wBAAsB,UAAU,CAAC,CAAC,EAChC,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,cAAc,CAAC,CAAC,CAAC,EAAE,EAC1B,OAAO,GAAE,iBAAsB,GAC9B,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,CAiB5B"}
1
+ {"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../src/embeddings/provider.ts"],"names":[],"mappings":"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"}
@@ -74,6 +74,104 @@ function hashToken(token) {
74
74
  export function defaultEmbeddingProvider() {
75
75
  return new HashedTokenEmbeddingProvider();
76
76
  }
77
+ /**
78
+ * Real embeddings via an OpenAI-compatible `/embeddings` endpoint (dependency-free
79
+ * over fetch). Opt-in: only constructed when an API key is configured. Falls back
80
+ * to the hashed provider at the resolver level when unavailable, so offline and
81
+ * un-keyed projects keep working deterministically.
82
+ */
83
+ export class OpenAIEmbeddingProvider {
84
+ id;
85
+ dimensions;
86
+ apiKey;
87
+ model;
88
+ baseUrl;
89
+ fetchImpl;
90
+ constructor(options) {
91
+ this.apiKey = options.apiKey;
92
+ this.model = options.model ?? 'text-embedding-3-small';
93
+ this.baseUrl = (options.baseUrl ?? 'https://api.openai.com/v1').replace(/\/$/, '');
94
+ this.dimensions = options.dimensions ?? 1536;
95
+ this.id = `openai:${this.model}`;
96
+ this.fetchImpl = options.fetchImpl ?? ((url, init) => fetch(url, init));
97
+ }
98
+ async embed(texts) {
99
+ if (texts.length === 0)
100
+ return [];
101
+ const response = await this.fetchImpl(`${this.baseUrl}/embeddings`, {
102
+ method: 'POST',
103
+ headers: { 'content-type': 'application/json', authorization: `Bearer ${this.apiKey}` },
104
+ body: JSON.stringify({ model: this.model, input: texts }),
105
+ });
106
+ if (!response.ok)
107
+ throw new Error(`Embedding request failed (${response.status})`);
108
+ const payload = await response.json();
109
+ const rows = payload.data ?? [];
110
+ // Preserve request order via the returned index.
111
+ const out = new Array(texts.length).fill(null).map(() => []);
112
+ rows.forEach((row, i) => {
113
+ const index = typeof row.index === 'number' ? row.index : i;
114
+ out[index] = row.embedding ?? [];
115
+ });
116
+ return out;
117
+ }
118
+ }
119
+ /**
120
+ * Content-hash cache around any provider so repeated texts (block example
121
+ * questions, metric labels) are embedded once. Bounded LRU-ish by insertion order.
122
+ */
123
+ export class CachingEmbeddingProvider {
124
+ id;
125
+ dimensions;
126
+ inner;
127
+ cache = new Map();
128
+ maxEntries;
129
+ constructor(inner, maxEntries = 4096) {
130
+ this.inner = inner;
131
+ this.id = `cached:${inner.id}`;
132
+ this.dimensions = inner.dimensions;
133
+ this.maxEntries = maxEntries;
134
+ }
135
+ async embed(texts) {
136
+ const missing = [];
137
+ const keys = texts.map((text) => {
138
+ const key = createHash('sha1').update(text).digest('hex');
139
+ if (!this.cache.has(key))
140
+ missing.push({ text, key });
141
+ return key;
142
+ });
143
+ if (missing.length > 0) {
144
+ const vectors = await this.inner.embed(missing.map((entry) => entry.text));
145
+ missing.forEach((entry, i) => this.put(entry.key, vectors[i] ?? []));
146
+ }
147
+ return keys.map((key) => this.cache.get(key) ?? []);
148
+ }
149
+ put(key, vector) {
150
+ this.cache.set(key, vector);
151
+ if (this.cache.size > this.maxEntries) {
152
+ const oldest = this.cache.keys().next().value;
153
+ if (oldest !== undefined)
154
+ this.cache.delete(oldest);
155
+ }
156
+ }
157
+ }
158
+ /**
159
+ * Pick the best available embedding provider: a real OpenAI-compatible embedder
160
+ * when an API key is configured (wrapped in a content-hash cache), else the safe
161
+ * deterministic hashed-token provider. This is the single place config chooses an
162
+ * embedder, so retrieval/matching call sites just call resolveEmbeddingProvider().
163
+ */
164
+ export function resolveEmbeddingProvider(options = {}) {
165
+ if (options.openaiApiKey) {
166
+ return new CachingEmbeddingProvider(new OpenAIEmbeddingProvider({
167
+ apiKey: options.openaiApiKey,
168
+ ...(options.model ? { model: options.model } : {}),
169
+ ...(options.baseUrl ? { baseUrl: options.baseUrl } : {}),
170
+ ...(options.fetchImpl ? { fetchImpl: options.fetchImpl } : {}),
171
+ }));
172
+ }
173
+ return defaultEmbeddingProvider();
174
+ }
77
175
  /**
78
176
  * Blend FTS5 relevance with embedding cosine similarity. When `alpha` is 0 (the
79
177
  * default) this is a pure pass-through of the FTS ordering — FTS5 stays the safe
@@ -1 +1 @@
1
- {"version":3,"file":"provider.js","sourceRoot":"","sources":["../../src/embeddings/provider.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"provider.js","sourceRoot":"","sources":["../../src/embeddings/provider.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ import type { LocalContextPack, MetadataAgentIntent, RuntimeSchemaTable } from '../metadata/catalog.js';
2
+ import { type SqlContextValidationResult } from '../metadata/sql-context-validation.js';
3
+ import { type GroundingValidationResult, type RelationResolution, type SchemaGrounding } from '../metadata/sql-grounding.js';
4
+ import { type GroundingExpansionResult } from './regrounding.js';
5
+ export interface ContextLedgerInput {
6
+ contextPack?: LocalContextPack;
7
+ schemaContext?: RuntimeSchemaTable[];
8
+ }
9
+ export interface ContextLedgerSqlValidationOptions {
10
+ question?: string;
11
+ intent?: MetadataAgentIntent | string;
12
+ filterValues?: string[];
13
+ trustedFilterValues?: string[];
14
+ }
15
+ export interface ContextLedgerExpansionResult {
16
+ ledger: ContextLedger;
17
+ notes: string[];
18
+ }
19
+ export declare class ContextLedger {
20
+ readonly contextPack?: LocalContextPack;
21
+ readonly schemaContext: RuntimeSchemaTable[];
22
+ readonly grounding?: SchemaGrounding;
23
+ constructor(input?: ContextLedgerInput);
24
+ qualifySql(sql: string): RelationResolution;
25
+ validateSql(sql: string, options?: ContextLedgerSqlValidationOptions): SqlContextValidationResult;
26
+ validateRuntimeGrounding(sql: string): GroundingValidationResult | undefined;
27
+ withExpansion(expansion: GroundingExpansionResult | undefined): ContextLedgerExpansionResult;
28
+ }
29
+ export declare function createContextLedger(input?: ContextLedgerInput): ContextLedger;
30
+ //# sourceMappingURL=context-ledger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-ledger.d.ts","sourceRoot":"","sources":["../../src/grounding/context-ledger.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,gBAAgB,EAChB,mBAAmB,EACnB,kBAAkB,EACnB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAEL,KAAK,0BAA0B,EAChC,MAAM,uCAAuC,CAAC;AAC/C,OAAO,EAIL,KAAK,yBAAyB,EAC9B,KAAK,kBAAkB,EACvB,KAAK,eAAe,EACrB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAEL,KAAK,wBAAwB,EAC9B,MAAM,kBAAkB,CAAC;AAE1B,MAAM,WAAW,kBAAkB;IACjC,WAAW,CAAC,EAAE,gBAAgB,CAAC;IAC/B,aAAa,CAAC,EAAE,kBAAkB,EAAE,CAAC;CACtC;AAED,MAAM,WAAW,iCAAiC;IAChD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,mBAAmB,GAAG,MAAM,CAAC;IACtC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC;CAChC;AAED,MAAM,WAAW,4BAA4B;IAC3C,MAAM,EAAE,aAAa,CAAC;IACtB,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,qBAAa,aAAa;IACxB,QAAQ,CAAC,WAAW,CAAC,EAAE,gBAAgB,CAAC;IACxC,QAAQ,CAAC,aAAa,EAAE,kBAAkB,EAAE,CAAC;IAC7C,QAAQ,CAAC,SAAS,CAAC,EAAE,eAAe,CAAC;gBAEzB,KAAK,GAAE,kBAAuB;IAM1C,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,kBAAkB;IAK3C,WAAW,CACT,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,iCAAsC,GAC9C,0BAA0B;IAO7B,wBAAwB,CAAC,GAAG,EAAE,MAAM,GAAG,yBAAyB,GAAG,SAAS;IAI5E,aAAa,CAAC,SAAS,EAAE,wBAAwB,GAAG,SAAS,GAAG,4BAA4B;CAU7F;AAED,wBAAgB,mBAAmB,CAAC,KAAK,GAAE,kBAAuB,GAAG,aAAa,CAEjF"}
@@ -0,0 +1,54 @@
1
+ import { validateSqlAgainstLocalContext, } from '../metadata/sql-context-validation.js';
2
+ import { buildGroundingFromRuntimeRelations, resolveRelationsInSql, validateSqlAgainstGrounding, } from '../metadata/sql-grounding.js';
3
+ import { applyGroundingExpansion, } from './regrounding.js';
4
+ export class ContextLedger {
5
+ contextPack;
6
+ schemaContext;
7
+ grounding;
8
+ constructor(input = {}) {
9
+ this.contextPack = input.contextPack;
10
+ this.schemaContext = input.schemaContext ?? [];
11
+ this.grounding = buildRuntimeGrounding(this.schemaContext);
12
+ }
13
+ qualifySql(sql) {
14
+ if (!this.grounding)
15
+ return { sql, rewrites: [] };
16
+ return resolveRelationsInSql(sql, this.grounding, { prefer: 'qualified' });
17
+ }
18
+ validateSql(sql, options = {}) {
19
+ return validateSqlAgainstLocalContext(sql, this.contextPack, {
20
+ ...options,
21
+ runtimeSchema: this.schemaContext,
22
+ });
23
+ }
24
+ validateRuntimeGrounding(sql) {
25
+ return this.grounding ? validateSqlAgainstGrounding(sql, this.grounding) : undefined;
26
+ }
27
+ withExpansion(expansion) {
28
+ const merged = applyGroundingExpansion(this.contextPack, this.schemaContext, expansion);
29
+ return {
30
+ ledger: new ContextLedger({
31
+ contextPack: merged.contextPack,
32
+ schemaContext: merged.schemaContext,
33
+ }),
34
+ notes: merged.notes,
35
+ };
36
+ }
37
+ }
38
+ export function createContextLedger(input = {}) {
39
+ return new ContextLedger(input);
40
+ }
41
+ function buildRuntimeGrounding(schemaContext) {
42
+ if (schemaContext.length === 0)
43
+ return undefined;
44
+ return buildGroundingFromRuntimeRelations(schemaContext.map((table) => ({
45
+ relation: table.relation,
46
+ name: table.name,
47
+ columns: table.columns.map((column) => ({
48
+ name: column.name,
49
+ type: column.type,
50
+ description: column.description,
51
+ })),
52
+ })));
53
+ }
54
+ //# sourceMappingURL=context-ledger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-ledger.js","sourceRoot":"","sources":["../../src/grounding/context-ledger.ts"],"names":[],"mappings":"AAKA,OAAO,EACL,8BAA8B,GAE/B,MAAM,uCAAuC,CAAC;AAC/C,OAAO,EACL,kCAAkC,EAClC,qBAAqB,EACrB,2BAA2B,GAI5B,MAAM,8BAA8B,CAAC;AACtC,OAAO,EACL,uBAAuB,GAExB,MAAM,kBAAkB,CAAC;AAmB1B,MAAM,OAAO,aAAa;IACf,WAAW,CAAoB;IAC/B,aAAa,CAAuB;IACpC,SAAS,CAAmB;IAErC,YAAY,QAA4B,EAAE;QACxC,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC;QACrC,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC,aAAa,IAAI,EAAE,CAAC;QAC/C,IAAI,CAAC,SAAS,GAAG,qBAAqB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IAC7D,CAAC;IAED,UAAU,CAAC,GAAW;QACpB,IAAI,CAAC,IAAI,CAAC,SAAS;YAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;QAClD,OAAO,qBAAqB,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC;IAC7E,CAAC;IAED,WAAW,CACT,GAAW,EACX,UAA6C,EAAE;QAE/C,OAAO,8BAA8B,CAAC,GAAG,EAAE,IAAI,CAAC,WAAW,EAAE;YAC3D,GAAG,OAAO;YACV,aAAa,EAAE,IAAI,CAAC,aAAa;SAClC,CAAC,CAAC;IACL,CAAC;IAED,wBAAwB,CAAC,GAAW;QAClC,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,2BAA2B,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACvF,CAAC;IAED,aAAa,CAAC,SAA+C;QAC3D,MAAM,MAAM,GAAG,uBAAuB,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC;QACxF,OAAO;YACL,MAAM,EAAE,IAAI,aAAa,CAAC;gBACxB,WAAW,EAAE,MAAM,CAAC,WAAW;gBAC/B,aAAa,EAAE,MAAM,CAAC,aAAa;aACpC,CAAC;YACF,KAAK,EAAE,MAAM,CAAC,KAAK;SACpB,CAAC;IACJ,CAAC;CACF;AAED,MAAM,UAAU,mBAAmB,CAAC,QAA4B,EAAE;IAChE,OAAO,IAAI,aAAa,CAAC,KAAK,CAAC,CAAC;AAClC,CAAC;AAED,SAAS,qBAAqB,CAAC,aAAmC;IAChE,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IACjD,OAAO,kCAAkC,CACvC,aAAa,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QAC5B,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;YACtC,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,WAAW,EAAE,MAAM,CAAC,WAAW;SAChC,CAAC,CAAC;KACJ,CAAC,CAAC,CACJ,CAAC;AACJ,CAAC"}