@askdb/core 1.0.0-beta.44 → 1.0.0-beta.45
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 +6 -7
- package/dist/ask.d.ts +30 -38
- package/dist/ask.d.ts.map +1 -1
- package/dist/ask.js +126 -307
- package/dist/ask.js.map +1 -1
- package/dist/enrichment/index.d.ts +1 -1
- package/dist/enrichment/index.d.ts.map +1 -1
- package/dist/enrichment/prompt.d.ts +3 -3
- package/dist/enrichment/prompt.d.ts.map +1 -1
- package/dist/enrichment/prompt.js +41 -17
- package/dist/enrichment/prompt.js.map +1 -1
- package/dist/enrichment/suggest.d.ts +2 -2
- package/dist/enrichment/suggest.d.ts.map +1 -1
- package/dist/enrichment/suggest.js +3 -1
- package/dist/enrichment/suggest.js.map +1 -1
- package/dist/enrichment/types.d.ts +20 -1
- package/dist/enrichment/types.d.ts.map +1 -1
- package/dist/errors.d.ts +68 -1
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +21 -0
- package/dist/errors.js.map +1 -1
- package/dist/index.d.ts +5 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -2
- package/dist/index.js.map +1 -1
- package/dist/retrieval/synthesize-ddl.d.ts +7 -1
- package/dist/retrieval/synthesize-ddl.d.ts.map +1 -1
- package/dist/retrieval/synthesize-ddl.js +36 -33
- package/dist/retrieval/synthesize-ddl.js.map +1 -1
- package/dist/schema/normalize.d.ts +6 -0
- package/dist/schema/normalize.d.ts.map +1 -1
- package/dist/schema/normalize.js +1 -0
- package/dist/schema/normalize.js.map +1 -1
- package/dist/schema/v2/format.d.ts +28 -1
- package/dist/schema/v2/format.d.ts.map +1 -1
- package/dist/schema/v2/format.js +53 -19
- package/dist/schema/v2/format.js.map +1 -1
- package/dist/schema/v2/index.d.ts +1 -1
- package/dist/schema/v2/index.d.ts.map +1 -1
- package/dist/schema/v2/index.js +1 -1
- package/dist/schema/v2/index.js.map +1 -1
- package/dist/schema/v2/loader.d.ts +7 -4
- package/dist/schema/v2/loader.d.ts.map +1 -1
- package/dist/schema/v2/loader.js +87 -27
- package/dist/schema/v2/loader.js.map +1 -1
- package/dist/schema/v2/mentions.d.ts +12 -0
- package/dist/schema/v2/mentions.d.ts.map +1 -1
- package/dist/schema/v2/mentions.js +65 -11
- package/dist/schema/v2/mentions.js.map +1 -1
- package/dist/schema/v2/tenant-policy.d.ts +2 -2
- package/dist/sql/bind.d.ts +18 -5
- package/dist/sql/bind.d.ts.map +1 -1
- package/dist/sql/bind.js +32 -14
- package/dist/sql/bind.js.map +1 -1
- package/dist/sql/dialect-spec.d.ts.map +1 -1
- package/dist/sql/dialect-spec.js +5 -1
- package/dist/sql/dialect-spec.js.map +1 -1
- package/dist/sql/generate.d.ts +17 -11
- package/dist/sql/generate.d.ts.map +1 -1
- package/dist/sql/generate.js +65 -33
- package/dist/sql/generate.js.map +1 -1
- package/dist/sql/guardrail-decide.d.ts +56 -0
- package/dist/sql/guardrail-decide.d.ts.map +1 -0
- package/dist/sql/guardrail-decide.js +161 -0
- package/dist/sql/guardrail-decide.js.map +1 -0
- package/dist/sql/guardrails.d.ts +52 -0
- package/dist/sql/guardrails.d.ts.map +1 -0
- package/dist/sql/guardrails.js +100 -0
- package/dist/sql/guardrails.js.map +1 -0
- package/dist/sql/index.d.ts +2 -1
- package/dist/sql/index.d.ts.map +1 -1
- package/dist/sql/index.js +2 -1
- package/dist/sql/index.js.map +1 -1
- package/dist/sql/lexer.d.ts +13 -0
- package/dist/sql/lexer.d.ts.map +1 -1
- package/dist/sql/lexer.js +42 -7
- package/dist/sql/lexer.js.map +1 -1
- package/dist/sql/prompt.d.ts.map +1 -1
- package/dist/sql/prompt.js +2 -1
- package/dist/sql/prompt.js.map +1 -1
- package/dist/sql/rebind.d.ts +89 -0
- package/dist/sql/rebind.d.ts.map +1 -0
- package/dist/sql/rebind.js +175 -0
- package/dist/sql/rebind.js.map +1 -0
- package/dist/sql/sensitive-guardrail.d.ts +7 -2
- package/dist/sql/sensitive-guardrail.d.ts.map +1 -1
- package/dist/sql/sensitive-guardrail.js +14 -33
- package/dist/sql/sensitive-guardrail.js.map +1 -1
- package/dist/sql/tenant-guardrail.d.ts +3 -14
- package/dist/sql/tenant-guardrail.d.ts.map +1 -1
- package/dist/sql/tenant-guardrail.js +16 -65
- package/dist/sql/tenant-guardrail.js.map +1 -1
- package/dist/sql/tenant-placeholders.d.ts +14 -3
- package/dist/sql/tenant-placeholders.d.ts.map +1 -1
- package/dist/sql/tenant-placeholders.js +43 -24
- package/dist/sql/tenant-placeholders.js.map +1 -1
- package/dist/sql/tenant-scope-expand.d.ts +46 -0
- package/dist/sql/tenant-scope-expand.d.ts.map +1 -0
- package/dist/sql/tenant-scope-expand.js +101 -0
- package/dist/sql/tenant-scope-expand.js.map +1 -0
- package/dist/sql/tsql-batch.d.ts +56 -0
- package/dist/sql/tsql-batch.d.ts.map +1 -0
- package/dist/sql/tsql-batch.js +246 -0
- package/dist/sql/tsql-batch.js.map +1 -0
- package/dist/sql/validate.d.ts +5 -2
- package/dist/sql/validate.d.ts.map +1 -1
- package/dist/sql/validate.js +22 -2
- package/dist/sql/validate.js.map +1 -1
- package/package.json +1 -1
package/dist/ask.js
CHANGED
|
@@ -4,14 +4,15 @@ import { synthesizeRetrievedDdl } from "./retrieval/synthesize-ddl.js";
|
|
|
4
4
|
import { unqualifiedNamespaceFor } from "./sql/prompt.js";
|
|
5
5
|
import { promptIdentifierQuoter } from "./sql/prompt-identifiers.js";
|
|
6
6
|
import { getDialectSpec, isBuiltInDialectId, } from "./sql/dialect-spec.js";
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
7
|
+
import { generateSelectSqlForAsk } from "./sql/generate.js";
|
|
8
|
+
import { decide, sensitiveGuardrailResult, tenantFindings, tenantGuardrailResult, throwIfDenied, } from "./sql/guardrail-decide.js";
|
|
9
|
+
import { evaluateGuardrails, guardrailPlan, logGuardrailVerdict } from "./sql/guardrails.js";
|
|
10
|
+
import { bindTenantIntoUnboundSql } from "./sql/rebind.js";
|
|
9
11
|
import { resolveTenantSql, } from "./sql/tenant-placeholders.js";
|
|
10
|
-
import {
|
|
12
|
+
import { expandTenantScope, } from "./sql/tenant-scope-expand.js";
|
|
11
13
|
import { validateTenantScope } from "./sql/tenant-scope-validate.js";
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
14
|
-
import { bindPreparedQuery, markerStyleForDialect, scanPlaceholders, sqlStructurallyEqual, } from "./sql/bind.js";
|
|
14
|
+
import { UnknownDialectError, } from "./errors.js";
|
|
15
|
+
import { renderPreparedQuery, scanTenantPlaceholders, sqlStructurallyEqual, } from "./sql/bind.js";
|
|
15
16
|
export async function ask(options) {
|
|
16
17
|
const logger = options.logger;
|
|
17
18
|
const mode = options.mode ?? DEFAULT_ASKDB_MODE;
|
|
@@ -30,7 +31,7 @@ export async function ask(options) {
|
|
|
30
31
|
// prompt, guardrail, and placeholder substitution all see the same per-root
|
|
31
32
|
// access — and a missing or malformed resolver fails before any model call is spent.
|
|
32
33
|
const tenantScope = tenantPolicy && options.tenantScope
|
|
33
|
-
? await
|
|
34
|
+
? await expandTenantScope(tenantPolicy, options.tenantScope, options.resolveTenantDescendants)
|
|
34
35
|
: options.tenantScope;
|
|
35
36
|
const explainRequested = options.explain ?? false;
|
|
36
37
|
const omitSensitive = options.omitSensitiveIdentifiersFromNlToSqlPrompt ?? false;
|
|
@@ -57,53 +58,89 @@ export async function ask(options) {
|
|
|
57
58
|
// Custom AskDialect implementations ignore this; built-in path uses it.
|
|
58
59
|
parameterize: dialectSpec ? parameterize : undefined,
|
|
59
60
|
});
|
|
61
|
+
// The guardrails run on the model's forms before AskDB renders them (ADR 0010): its
|
|
62
|
+
// bound `sql` and its `sql-unbound` block, with the `:tenant_<root>_ids` placeholders
|
|
63
|
+
// still in place. Rendering below only swaps placeholders for literals or driver
|
|
64
|
+
// markers, so one check covers every tenantSqlMode, dialect and output form. A custom
|
|
65
|
+
// AskDialect (no DialectSpec) gets no read-only check: it may target non-SELECT SQL.
|
|
66
|
+
const tenant = tenantPolicy && tenantScope ? { policy: tenantPolicy, scope: tenantScope } : undefined;
|
|
67
|
+
const { checks, modes } = guardrailPlan("ask", {
|
|
68
|
+
dialect: dialectSpec,
|
|
69
|
+
schema: options.schema,
|
|
70
|
+
tenantPolicy: tenant?.policy,
|
|
71
|
+
sensitiveGuardrailMode: options.sensitiveGuardrailMode,
|
|
72
|
+
});
|
|
73
|
+
const runSensitive = checks.includes("sensitive");
|
|
74
|
+
const findings = evaluateGuardrails({
|
|
75
|
+
forms: {
|
|
76
|
+
sql: generated.sql,
|
|
77
|
+
...(generated.unboundNamedSql !== undefined ? { template: generated.unboundNamedSql } : {}),
|
|
78
|
+
},
|
|
79
|
+
dialect: dialectSpec,
|
|
80
|
+
schema: options.schema,
|
|
81
|
+
...(tenant ? { tenant } : {}),
|
|
82
|
+
}, checks);
|
|
83
|
+
if (tenant)
|
|
84
|
+
findings.push(...generatorFindings(generated.tenantGuardrail));
|
|
85
|
+
const verdict = decide(findings, modes, "return");
|
|
86
|
+
logGuardrailVerdict(logger, verdict, { tenantPolicy, sensitiveChecked: runSensitive });
|
|
87
|
+
try {
|
|
88
|
+
throwIfDenied(verdict, modes, "return");
|
|
89
|
+
}
|
|
90
|
+
catch (e) {
|
|
91
|
+
// A denied run ends in pipeline.failed, as generateSelectSql() logs it (and as a
|
|
92
|
+
// read-only failure was logged when that check ran inside generation).
|
|
93
|
+
logger?.error({ event: AskDbLogEvent.PipelineFailed, phase: "generate", errMessage: e.message }, "nl-to-sql generate failed");
|
|
94
|
+
throw e;
|
|
95
|
+
}
|
|
60
96
|
// result.sql is always the model's bound SQL (possibly with tenant literals/
|
|
61
97
|
// markers applied below). Never overwrite it with a re-bound version.
|
|
62
|
-
const result = { sql: generated.sql };
|
|
98
|
+
const result = { sql: generated.sql, verdict };
|
|
63
99
|
if (generated.explain !== undefined)
|
|
64
100
|
result.explain = generated.explain;
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
101
|
+
if (tenant) {
|
|
102
|
+
result.tenantGuardrail = tenantGuardrailResult(findings);
|
|
103
|
+
}
|
|
104
|
+
else if (generated.tenantGuardrail !== undefined) {
|
|
105
|
+
// Without a tenant policy there is no mode to decide with: pass through what a
|
|
106
|
+
// custom dialect reported.
|
|
68
107
|
result.tenantGuardrail = generated.tenantGuardrail;
|
|
69
108
|
}
|
|
109
|
+
if (runSensitive)
|
|
110
|
+
result.sensitiveGuardrail = sensitiveGuardrailResult(findings);
|
|
70
111
|
if (generated.usage !== undefined)
|
|
71
112
|
result.usage = generated.usage;
|
|
72
|
-
//
|
|
73
|
-
//
|
|
74
|
-
|
|
113
|
+
// Reuse artifacts: bind the template's business values with the mechanical renderer,
|
|
114
|
+
// leaving its tenant placeholders in place, and keep them only when that reproduces the
|
|
115
|
+
// model's `sql`. Any failure drops the artifacts only.
|
|
75
116
|
if (parameterize &&
|
|
76
117
|
dialectSpec &&
|
|
77
118
|
generated.unboundNamedSql &&
|
|
78
119
|
generated.parameterManifest &&
|
|
79
120
|
generated.parameterManifest.parameters.length > 0) {
|
|
80
|
-
const
|
|
81
|
-
const businessParams = generated.parameterManifest.parameters.map((p) => ({
|
|
82
|
-
name: p.name,
|
|
83
|
-
placeholder: `:${p.name}`,
|
|
84
|
-
type: p.type,
|
|
85
|
-
cardinality: p.cardinality,
|
|
86
|
-
description: p.description,
|
|
87
|
-
source: "question",
|
|
88
|
-
}));
|
|
89
|
-
// Tenant placeholders stay in namedSql for the host-facing PreparedQuery, but
|
|
90
|
-
// bindPreparedQuery requires every placeholder to be declared. For the
|
|
91
|
-
// consistency check we mask :tenant_* so only business values are substituted.
|
|
92
|
-
const maskedNamed = maskTenantPlaceholders(generated.unboundNamedSql);
|
|
93
|
-
const maskedBound = maskTenantPlaceholders(generated.sql);
|
|
94
|
-
const preparedForBind = {
|
|
121
|
+
const prepared = {
|
|
95
122
|
version: 1,
|
|
96
|
-
dialect:
|
|
97
|
-
namedSql:
|
|
98
|
-
parameters:
|
|
123
|
+
dialect: dialectSpec.id,
|
|
124
|
+
namedSql: generated.unboundNamedSql,
|
|
125
|
+
parameters: [
|
|
126
|
+
...generated.parameterManifest.parameters.map((p) => ({
|
|
127
|
+
name: p.name,
|
|
128
|
+
placeholder: `:${p.name}`,
|
|
129
|
+
type: p.type,
|
|
130
|
+
cardinality: p.cardinality,
|
|
131
|
+
description: p.description,
|
|
132
|
+
source: "question",
|
|
133
|
+
})),
|
|
134
|
+
...tenantDecls(generated.unboundNamedSql, dialectSpec),
|
|
135
|
+
],
|
|
99
136
|
};
|
|
100
137
|
const values = {};
|
|
101
138
|
for (const p of generated.parameterManifest.parameters) {
|
|
102
139
|
values[p.name] = p.value;
|
|
103
140
|
}
|
|
104
141
|
try {
|
|
105
|
-
const bound =
|
|
106
|
-
if (!sqlStructurallyEqual(bound.sql,
|
|
142
|
+
const bound = renderPreparedQuery(prepared, values, { skipTenantPlaceholders: true });
|
|
143
|
+
if (!sqlStructurallyEqual(bound.sql, generated.sql)) {
|
|
107
144
|
logger?.debug?.({
|
|
108
145
|
event: AskDbLogEvent.PipelineParameterized,
|
|
109
146
|
parameterCount: 0,
|
|
@@ -112,21 +149,10 @@ export async function ask(options) {
|
|
|
112
149
|
}, "parameterize extras dropped");
|
|
113
150
|
}
|
|
114
151
|
else {
|
|
115
|
-
const tenantDecls = scanTenantDecls(generated.unboundNamedSql);
|
|
116
|
-
const prepared = {
|
|
117
|
-
version: 1,
|
|
118
|
-
dialect: dialectId,
|
|
119
|
-
namedSql: generated.unboundNamedSql,
|
|
120
|
-
parameters: [...businessParams, ...tenantDecls],
|
|
121
|
-
};
|
|
122
152
|
result.preparedQuery = prepared;
|
|
123
|
-
result.parameters = bound.bindings
|
|
124
|
-
|
|
125
|
-
// Restore real placeholder text (masking only affected namedSql).
|
|
126
|
-
}));
|
|
127
|
-
result.unboundSql = unmaskTenantPlaceholders(bound.unboundSql);
|
|
153
|
+
result.parameters = bound.bindings;
|
|
154
|
+
result.unboundSql = bound.unboundSql;
|
|
128
155
|
result.params = bound.params;
|
|
129
|
-
businessParamCount = bound.params.length;
|
|
130
156
|
logger?.info({
|
|
131
157
|
event: AskDbLogEvent.PipelineParameterized,
|
|
132
158
|
parameterCount: bound.bindings.length,
|
|
@@ -143,259 +169,67 @@ export async function ask(options) {
|
|
|
143
169
|
}, "parameterize extras dropped");
|
|
144
170
|
}
|
|
145
171
|
}
|
|
146
|
-
if (
|
|
147
|
-
// Tenant guardrail on the untrusted SQL, before rendering: the model's bound
|
|
148
|
-
// statement and its unbound block, with the `:tenant_<root>_ids` placeholders
|
|
149
|
-
// still in place. Rendering below only swaps each placeholder for literals or
|
|
150
|
-
// driver markers, so one check covers every tenantSqlMode, dialect and output
|
|
151
|
-
// form (#315). Runs for every dialect (built-in, DialectSpec, or custom
|
|
152
|
-
// AskDialect); the built-in generator skips its own check so this is the single
|
|
153
|
-
// report. `dialectSpec` is undefined for a custom AskDialect: the guardrail then
|
|
154
|
-
// requires the statement to pass under the standard-SQL, Postgres and MySQL readings.
|
|
155
|
-
result.tenantGuardrail = enforceTenantGuardrails([result.sql, generated.unboundNamedSql], tenantPolicy, tenantScope, logger, generated.tenantGuardrail, dialectSpec);
|
|
172
|
+
if (tenant) {
|
|
156
173
|
const tenantMode = options.tenantSqlMode ?? "sql-only";
|
|
157
174
|
// `sql` carries business values as inlined literals, so its only markers are
|
|
158
175
|
// tenant markers, numbered from the first slot: `sql` runs with `tenantParams`
|
|
159
176
|
// alone. `unboundSql` runs with the combined `params` (handled below).
|
|
160
|
-
const resolved = resolveTenantSql(result.sql,
|
|
177
|
+
const resolved = resolveTenantSql(result.sql, tenant.policy, tenant.scope, tenantMode, 1, dialectSpec);
|
|
161
178
|
result.sql = resolved.sql;
|
|
162
179
|
if (resolved.bindings.length > 0)
|
|
163
180
|
result.tenantBindings = resolved.bindings;
|
|
164
181
|
if (resolved.mode === "sql-params" && resolved.params.length > 0) {
|
|
165
182
|
result.tenantParams = resolved.params;
|
|
166
183
|
}
|
|
167
|
-
if (result.preparedQuery && result.unboundSql) {
|
|
184
|
+
if (result.preparedQuery && result.unboundSql !== undefined && result.params && result.parameters) {
|
|
168
185
|
if (tenantMode === "sql-only") {
|
|
169
|
-
|
|
170
|
-
result.unboundSql = unboundWithTenant.sql;
|
|
186
|
+
result.unboundSql = resolveTenantSql(result.unboundSql, tenant.policy, tenant.scope, "sql-only", 1, dialectSpec).sql;
|
|
171
187
|
}
|
|
172
|
-
else
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
188
|
+
else {
|
|
189
|
+
const rendered = bindTenantIntoUnboundSql({ unboundSql: result.unboundSql, params: result.params, bindings: result.parameters }, {
|
|
190
|
+
namedSql: result.preparedQuery.namedSql,
|
|
191
|
+
tenantPolicy: tenant.policy,
|
|
192
|
+
tenantScope: tenant.scope,
|
|
193
|
+
dialectSpec,
|
|
194
|
+
});
|
|
195
|
+
if (rendered) {
|
|
196
|
+
result.unboundSql = rendered.unboundSql;
|
|
197
|
+
result.params = rendered.params;
|
|
198
|
+
result.parameters = rendered.bindings;
|
|
199
|
+
}
|
|
200
|
+
else {
|
|
201
|
+
dropParameterizeExtras(result);
|
|
202
|
+
logger?.debug?.({
|
|
203
|
+
event: AskDbLogEvent.PipelineParameterized,
|
|
204
|
+
parameterCount: 0,
|
|
205
|
+
listParameterCount: 0,
|
|
206
|
+
reason: "tenant_param_alignment",
|
|
207
|
+
}, "parameterize extras dropped");
|
|
208
|
+
}
|
|
186
209
|
}
|
|
187
210
|
}
|
|
188
211
|
}
|
|
189
|
-
applySensitiveGuardrail(result, options, dialectSpec, logger);
|
|
190
212
|
return result;
|
|
191
213
|
}
|
|
192
214
|
/**
|
|
193
|
-
*
|
|
194
|
-
*
|
|
195
|
-
*
|
|
196
|
-
* when the subtree is the scope's root alone. Other access kinds pass through untouched.
|
|
197
|
-
*
|
|
198
|
-
* Each root's IDs stay under that root, so they bind only to its own placeholder:
|
|
199
|
-
* root tables have separate ID spaces, and folding a client ID into the agency
|
|
200
|
-
* placeholder would match another agency (#338). This relies on every root deriving a distinct
|
|
201
|
-
* placeholder, which `validateTenantScope()` and the policy loader enforce. The seeds are unioned into the
|
|
202
|
-
* `tenantRoot` entry here, not trusted to the resolver, so an ancestor never loses
|
|
203
|
-
* its own rows when a host returns strict descendants only.
|
|
204
|
-
*
|
|
205
|
-
* Fails closed with `SUBTREE_NOT_RESOLVABLE`: no resolver; a result that is an
|
|
206
|
-
* array (the old flat shape) or not a plain object; a key that isn't a root in
|
|
207
|
-
* this subtree; a value that isn't an array of non-empty strings; or no IDs at all.
|
|
208
|
-
*/
|
|
209
|
-
async function expandSubtreeScope(policy, scope, resolve) {
|
|
210
|
-
const access = scope.access;
|
|
211
|
-
if (access.kind !== "subtree")
|
|
212
|
-
return scope;
|
|
213
|
-
const { tenantRoot, rootIds } = access;
|
|
214
|
-
const levels = subtreeRootIds(policy, tenantRoot);
|
|
215
|
-
const shape = `{ ${levels.map((root) => `"${root}": [...]`).join(", ")} }`;
|
|
216
|
-
const fail = (message) => new TenantScopeError(message, "SUBTREE_NOT_RESOLVABLE");
|
|
217
|
-
if (!resolve) {
|
|
218
|
-
throw fail(`tenantScope.access is a 'subtree' of '${tenantRoot}', but no ` +
|
|
219
|
-
"resolveTenantDescendants was passed to ask(). AskDB does not query your database " +
|
|
220
|
-
"to find descendants: pass resolveTenantDescendants to expand the seed IDs, or pass " +
|
|
221
|
-
"an 'ids' or 'multi_root' access with each root's IDs already expanded.");
|
|
222
|
-
}
|
|
223
|
-
const result = await resolve(tenantRoot, rootIds);
|
|
224
|
-
if (Array.isArray(result)) {
|
|
225
|
-
throw fail(`resolveTenantDescendants for '${tenantRoot}' returned an array. It must return IDs per ` +
|
|
226
|
-
`tenant root, keyed by root table id: ${shape}. Root tables have separate ID spaces, so ` +
|
|
227
|
-
"a flat list can't say which root each ID belongs to, and binding them all to " +
|
|
228
|
-
`'${tenantRoot}' would match other tenants. Put the seeds and any same-table ` +
|
|
229
|
-
`descendants under '${tenantRoot}', and each descendant root's IDs under that root.`);
|
|
230
|
-
}
|
|
231
|
-
if (!isPlainObject(result)) {
|
|
232
|
-
throw fail(`resolveTenantDescendants for '${tenantRoot}' must return an object mapping each ` +
|
|
233
|
-
`tenant root in the subtree to its IDs: ${shape}.`);
|
|
234
|
-
}
|
|
235
|
-
// Read the result exactly once: validate and build from this snapshot, so a getter
|
|
236
|
-
// can't return one value to validation and another to the scope, and a property
|
|
237
|
-
// validation can't see (non-enumerable) is never read at all.
|
|
238
|
-
const idsByRoot = new Map();
|
|
239
|
-
const knownRoots = new Set(policy.roots.map((root) => root.id));
|
|
240
|
-
let returned = 0;
|
|
241
|
-
for (const [root, value] of Object.entries(result)) {
|
|
242
|
-
const ids = Array.isArray(value) ? [...value] : value;
|
|
243
|
-
if (!knownRoots.has(root)) {
|
|
244
|
-
throw fail(`resolveTenantDescendants returned IDs under a key the subtree can't have: '${root}' is ` +
|
|
245
|
-
`not a tenant root in the policy. Allowed keys for a subtree of '${tenantRoot}': ` +
|
|
246
|
-
`${levels.join(", ")}.`);
|
|
247
|
-
}
|
|
248
|
-
if (!levels.includes(root)) {
|
|
249
|
-
throw fail(`resolveTenantDescendants returned IDs under a key the subtree can't have: '${root}' is ` +
|
|
250
|
-
`not in the subtree of '${tenantRoot}' (the policy's hierarchy doesn't reach it from ` +
|
|
251
|
-
`there). Allowed keys: ${levels.join(", ")}.`);
|
|
252
|
-
}
|
|
253
|
-
if (!isTenantIdArray(ids)) {
|
|
254
|
-
throw fail(`resolveTenantDescendants: the IDs for '${root}' must be an array of non-empty strings.`);
|
|
255
|
-
}
|
|
256
|
-
idsByRoot.set(root, ids);
|
|
257
|
-
returned += ids.length;
|
|
258
|
-
}
|
|
259
|
-
if (returned === 0) {
|
|
260
|
-
throw fail(`resolveTenantDescendants returned no IDs for '${tenantRoot}' (seeds: ${rootIds.join(", ")}). ` +
|
|
261
|
-
`Return at least the seeds under '${tenantRoot}'; refusing to build an empty tenant scope.`);
|
|
262
|
-
}
|
|
263
|
-
// Every level the subtree covers stays in the scope, even one with no IDs. The
|
|
264
|
-
// guardrail then checks a read of that root on its own placeholder, and binding that
|
|
265
|
-
// placeholder fails closed (UNRESOLVED_TENANT_PLACEHOLDER). Dropping the level would
|
|
266
|
-
// leave its rows readable through a parent's foreign key or an ancestor, which is
|
|
267
|
-
// less restricted than a level the resolver narrowed to some IDs.
|
|
268
|
-
const scopes = levels.map((root) => {
|
|
269
|
-
const own = idsByRoot.get(root) ?? [];
|
|
270
|
-
return { tenantRoot: root, ids: [...new Set(root === tenantRoot ? [...rootIds, ...own] : own)] };
|
|
271
|
-
});
|
|
272
|
-
const expanded = scopes.length === 1 ? { kind: "ids", ...scopes[0] } : { kind: "multi_root", scopes };
|
|
273
|
-
return { ...scope, access: expanded };
|
|
274
|
-
}
|
|
275
|
-
function isTenantIdArray(value) {
|
|
276
|
-
return Array.isArray(value) && value.every((id) => typeof id === "string" && id.length > 0);
|
|
277
|
-
}
|
|
278
|
-
function isPlainObject(value) {
|
|
279
|
-
if (typeof value !== "object" || value === null)
|
|
280
|
-
return false;
|
|
281
|
-
const proto = Object.getPrototypeOf(value);
|
|
282
|
-
return proto === Object.prototype || proto === null;
|
|
283
|
-
}
|
|
284
|
-
/**
|
|
285
|
-
* Run the sensitive-identifier guardrail over the SQL the host is about to receive.
|
|
286
|
-
* Runs after tenant resolution so it sees exactly the statement in `result.sql`.
|
|
287
|
-
* With a built-in id or `DialectSpec`, the SQL is lexed the way that engine reads it;
|
|
288
|
-
* for a custom `AskDialect` (no spec) references are unioned across every built-in reading.
|
|
215
|
+
* A custom generator's `tenantGuardrail`, as tenant findings: its warnings, and one
|
|
216
|
+
* `UNPROVABLE_SCOPE` finding for a failure it reported without any, so it is never
|
|
217
|
+
* dropped. They add to `ask()`'s own check; they never replace it.
|
|
289
218
|
*/
|
|
290
|
-
function
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
if (
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
219
|
+
function generatorFindings(reported) {
|
|
220
|
+
if (!reported)
|
|
221
|
+
return [];
|
|
222
|
+
const findings = tenantFindings(reported.warnings ?? [], "generator");
|
|
223
|
+
if (reported.passed === false && findings.length === 0) {
|
|
224
|
+
findings.push({
|
|
225
|
+
check: "tenant",
|
|
226
|
+
form: "generator",
|
|
227
|
+
rule: "UNPROVABLE_SCOPE",
|
|
228
|
+
tableId: "",
|
|
229
|
+
message: "The custom SQL generator reported a failed tenant guardrail without details.",
|
|
300
230
|
});
|
|
301
|
-
result.sensitiveGuardrail = guardrail;
|
|
302
|
-
logSensitiveReferences(logger, guardrail.references);
|
|
303
|
-
}
|
|
304
|
-
catch (error) {
|
|
305
|
-
if (error instanceof SensitiveReferenceError) {
|
|
306
|
-
logSensitiveReferences(logger, error.references);
|
|
307
|
-
}
|
|
308
|
-
throw error;
|
|
309
231
|
}
|
|
310
|
-
|
|
311
|
-
function logSensitiveReferences(logger, references) {
|
|
312
|
-
if (references.length === 0)
|
|
313
|
-
return;
|
|
314
|
-
const sensitiveColumns = references.map(formatSensitiveReference);
|
|
315
|
-
logger?.info({
|
|
316
|
-
event: AskDbLogEvent.PipelineSensitiveSqlWarning,
|
|
317
|
-
sensitiveColumnCount: sensitiveColumns.length,
|
|
318
|
-
sensitiveColumns,
|
|
319
|
-
}, "generated SQL references sensitive identifiers");
|
|
320
|
-
}
|
|
321
|
-
/**
|
|
322
|
-
* Substitute tenant placeholders in `result.unboundSql` with driver markers and
|
|
323
|
-
* fold their values into `result.params`, so `unboundSql` + `params` is a single
|
|
324
|
-
* executable pair (`sql-params` mode).
|
|
325
|
-
*
|
|
326
|
-
* - `$N` / `@pN` dialects: markers are explicitly numbered, so tenant markers
|
|
327
|
-
* continue after the business slots and tenant values are appended.
|
|
328
|
-
* - `?` dialects: markers are positional, so `params` must follow source order.
|
|
329
|
-
* Business and tenant values are interleaved by walking the named template in
|
|
330
|
-
* order, and `parameters[].indices` are remapped to the new positions.
|
|
331
|
-
*
|
|
332
|
-
* Returns false when the business binding and the tenant substitution disagree
|
|
333
|
-
* about the statement's shape; the caller then drops the extras rather than ship
|
|
334
|
-
* misaligned params.
|
|
335
|
-
*/
|
|
336
|
-
function bindTenantIntoUnboundSql(result, ctx) {
|
|
337
|
-
if (result.unboundSql === undefined)
|
|
338
|
-
return false;
|
|
339
|
-
const unbound = resolveTenantSql(result.unboundSql, ctx.tenantPolicy, ctx.tenantScope, "sql-params", ctx.businessParamCount + 1, ctx.dialectSpec);
|
|
340
|
-
if (unbound.mode !== "sql-params")
|
|
341
|
-
return false;
|
|
342
|
-
const business = result.params ?? [];
|
|
343
|
-
const tenantValues = unbound.params;
|
|
344
|
-
const dialectId = ctx.dialectSpec?.id;
|
|
345
|
-
const style = dialectId !== undefined && isBuiltInDialectId(dialectId)
|
|
346
|
-
? markerStyleForDialect(dialectId)
|
|
347
|
-
: "dollar";
|
|
348
|
-
if (style !== "question") {
|
|
349
|
-
result.unboundSql = unbound.sql;
|
|
350
|
-
result.params = [...business, ...tenantValues];
|
|
351
|
-
return true;
|
|
352
|
-
}
|
|
353
|
-
const idsByPlaceholder = new Map(unbound.bindings.map((b) => [b.placeholder, b.ids]));
|
|
354
|
-
const bindingByName = new Map((result.parameters ?? []).map((b) => [b.name, b]));
|
|
355
|
-
// Same lexer reading as bindPreparedQuery and the tenant substitution above.
|
|
356
|
-
const occurrences = scanPlaceholders(ctx.namedSql, ctx.dialectSpec);
|
|
357
|
-
const occurrenceCount = new Map();
|
|
358
|
-
for (const occ of occurrences) {
|
|
359
|
-
occurrenceCount.set(occ.name, (occurrenceCount.get(occ.name) ?? 0) + 1);
|
|
360
|
-
}
|
|
361
|
-
const combined = [];
|
|
362
|
-
const indexMap = new Map();
|
|
363
|
-
const seen = new Map();
|
|
364
|
-
for (const occ of occurrences) {
|
|
365
|
-
const tenantIds = idsByPlaceholder.get(occ.placeholder);
|
|
366
|
-
if (tenantIds) {
|
|
367
|
-
combined.push(...tenantIds);
|
|
368
|
-
continue;
|
|
369
|
-
}
|
|
370
|
-
// bindPreparedQuery pushes each occurrence's values contiguously, in source
|
|
371
|
-
// order, so occurrence k of a name owns the k-th equal slice of its indices.
|
|
372
|
-
const binding = bindingByName.get(occ.name);
|
|
373
|
-
const total = occurrenceCount.get(occ.name);
|
|
374
|
-
if (!binding || binding.indices.length % total !== 0)
|
|
375
|
-
return false;
|
|
376
|
-
const per = binding.indices.length / total;
|
|
377
|
-
const k = seen.get(occ.name) ?? 0;
|
|
378
|
-
seen.set(occ.name, k + 1);
|
|
379
|
-
for (const idx of binding.indices.slice(k * per, (k + 1) * per)) {
|
|
380
|
-
if (idx >= business.length || indexMap.has(idx))
|
|
381
|
-
return false;
|
|
382
|
-
indexMap.set(idx, combined.length);
|
|
383
|
-
combined.push(business[idx]);
|
|
384
|
-
}
|
|
385
|
-
}
|
|
386
|
-
if (indexMap.size !== business.length ||
|
|
387
|
-
combined.length !== business.length + tenantValues.length) {
|
|
388
|
-
return false;
|
|
389
|
-
}
|
|
390
|
-
result.unboundSql = unbound.sql;
|
|
391
|
-
result.params = combined;
|
|
392
|
-
if (result.parameters) {
|
|
393
|
-
result.parameters = result.parameters.map((b) => ({
|
|
394
|
-
...b,
|
|
395
|
-
indices: b.indices.map((i) => indexMap.get(i)),
|
|
396
|
-
}));
|
|
397
|
-
}
|
|
398
|
-
return true;
|
|
232
|
+
return findings;
|
|
399
233
|
}
|
|
400
234
|
function dropParameterizeExtras(result) {
|
|
401
235
|
delete result.unboundSql;
|
|
@@ -403,31 +237,16 @@ function dropParameterizeExtras(result) {
|
|
|
403
237
|
delete result.parameters;
|
|
404
238
|
delete result.preparedQuery;
|
|
405
239
|
}
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
return
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
const out = [];
|
|
417
|
-
for (const m of namedSql.matchAll(/:tenant_([a-z0-9_]+)_ids/g)) {
|
|
418
|
-
const name = `tenant_${m[1]}_ids`;
|
|
419
|
-
if (seen.has(name))
|
|
420
|
-
continue;
|
|
421
|
-
seen.add(name);
|
|
422
|
-
out.push({
|
|
423
|
-
name,
|
|
424
|
-
placeholder: `:${name}`,
|
|
425
|
-
type: "string",
|
|
426
|
-
cardinality: "many",
|
|
427
|
-
source: "tenant",
|
|
428
|
-
});
|
|
429
|
-
}
|
|
430
|
-
return out;
|
|
240
|
+
/** A declaration per distinct `:tenant_<root>_ids` placeholder in the template. */
|
|
241
|
+
function tenantDecls(namedSql, dialect) {
|
|
242
|
+
const names = new Set(scanTenantPlaceholders(namedSql, dialect).map((p) => p.name));
|
|
243
|
+
return [...names].map((name) => ({
|
|
244
|
+
name,
|
|
245
|
+
placeholder: `:${name}`,
|
|
246
|
+
type: "string",
|
|
247
|
+
cardinality: "many",
|
|
248
|
+
source: "tenant",
|
|
249
|
+
}));
|
|
431
250
|
}
|
|
432
251
|
function isAskDialect(value) {
|
|
433
252
|
return typeof value.generate === "function";
|
|
@@ -459,9 +278,8 @@ function resolveDialect(input) {
|
|
|
459
278
|
}
|
|
460
279
|
function specToDialect(spec) {
|
|
461
280
|
return {
|
|
462
|
-
// ask() runs the
|
|
463
|
-
|
|
464
|
-
generate: (question, schema, model, options) => generateSelectSqlWithoutTenantGuardrail(spec, question, schema, model, options),
|
|
281
|
+
// ask() runs the guardrails itself, on the same forms, through one decision point.
|
|
282
|
+
generate: (question, schema, model, options) => generateSelectSqlForAsk(spec, question, schema, model, options),
|
|
465
283
|
};
|
|
466
284
|
}
|
|
467
285
|
/** Default chunk-count threshold below which the full DDL is preferred. */
|
|
@@ -515,6 +333,7 @@ async function maybeRetrieveDdl(args) {
|
|
|
515
333
|
k,
|
|
516
334
|
resultCount: results.length,
|
|
517
335
|
tablesEmitted: synth.tablesEmitted,
|
|
336
|
+
mentionDroppedCount: synth.mentionDroppedCount,
|
|
518
337
|
threshold,
|
|
519
338
|
totalChunks: total === Number.POSITIVE_INFINITY ? null : total,
|
|
520
339
|
}, "retriever supplied focused DDL");
|
package/dist/ask.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ask.js","sourceRoot":"","sources":["../src/ask.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAExD,OAAO,EAAE,kBAAkB,EAAoB,MAAM,kBAAkB,CAAC;AAExE,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AACvE,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAC1D,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AAOrE,OAAO,EAGL,cAAc,EACd,kBAAkB,GACnB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,uCAAuC,EAAE,MAAM,mBAAmB,CAAC;AAC5E,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,EACL,gBAAgB,GAGjB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AACrE,OAAO,EACL,wBAAwB,EACxB,6BAA6B,EAC7B,2BAA2B,GAG5B,MAAM,8BAA8B,CAAC;AACtC,OAAO,EACL,uBAAuB,EACvB,gBAAgB,EAChB,mBAAmB,GAEpB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,iBAAiB,EACjB,qBAAqB,EACrB,gBAAgB,EAChB,oBAAoB,GAKrB,MAAM,eAAe,CAAC;AAyRvB,MAAM,CAAC,KAAK,UAAU,GAAG,CAAC,OAA2B;IACnD,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAC9B,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,kBAAkB,CAAC;IAChD,MAAM,EAAE,IAAI,CAAC,EAAE,KAAK,EAAE,aAAa,CAAC,YAAY,EAAE,IAAI,EAAE,EAAE,eAAe,CAAC,CAAC;IAE3E,iFAAiF;IACjF,MAAM,YAAY,GAAG,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC;IAC1F,IAAI,YAAY,EAAE,CAAC;QACjB,mBAAmB,CAAC,YAAY,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;QACvD,MAAM,EAAE,IAAI,CACV;YACE,KAAK,EAAE,aAAa,CAAC,oBAAoB;YACzC,SAAS,EAAE,OAAO,CAAC,WAAY,CAAC,MAAM,CAAC,IAAI;YAC3C,WAAW,EAAE,YAAY,CAAC,WAAW;SACtC,EACD,wBAAwB,CACzB,CAAC;IACJ,CAAC;IACD,gFAAgF;IAChF,4EAA4E;IAC5E,qFAAqF;IACrF,MAAM,WAAW,GACf,YAAY,IAAI,OAAO,CAAC,WAAW;QACjC,CAAC,CAAC,MAAM,kBAAkB,CAAC,YAAY,EAAE,OAAO,CAAC,WAAW,EAAE,OAAO,CAAC,wBAAwB,CAAC;QAC/F,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC;IAE1B,MAAM,gBAAgB,GAAG,OAAO,CAAC,OAAO,IAAI,KAAK,CAAC;IAClD,MAAM,aAAa,GAAG,OAAO,CAAC,yCAAyC,IAAI,KAAK,CAAC;IACjF,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY,KAAK,KAAK,CAAC,CAAC,eAAe;IACpE,MAAM,WAAW,GAAG,kBAAkB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACxD,MAAM,WAAW,GAAG,MAAM,gBAAgB,CAAC;QACzC,OAAO;QACP,MAAM;QACN,aAAa;QACb,oBAAoB,EAAE,uBAAuB,CAAC,OAAO,CAAC,MAAM,EAAE,WAAW,EAAE,oBAAoB,CAAC;QAChG,eAAe,EAAE,WAAW,CAAC,CAAC,CAAC,sBAAsB,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,SAAS;KAC/E,CAAC,CAAC;IACH,MAAM,OAAO,GAAG,cAAc,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAChD,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,QAAQ,CACtC,OAAO,CAAC,QAAQ,EAChB,OAAO,CAAC,MAAM,EACd,OAAO,CAAC,KAAK,EACb;QACE,MAAM;QACN,OAAO,EAAE,gBAAgB;QACzB,yCAAyC,EAAE,aAAa,IAAI,SAAS;QACrE,YAAY,EAAE,OAAO,CAAC,IAAI,EAAE,YAAY;QACxC,eAAe,EAAE,OAAO,CAAC,IAAI,EAAE,eAAe;QAC9C,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,WAAW;QACX,YAAY;QACZ,WAAW;QACX,wEAAwE;QACxE,YAAY,EAAE,WAAW,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS;KACrD,CACF,CAAC;IACF,6EAA6E;IAC7E,sEAAsE;IACtE,MAAM,MAAM,GAAsB,EAAE,GAAG,EAAE,SAAS,CAAC,GAAG,EAAE,CAAC;IACzD,IAAI,SAAS,CAAC,OAAO,KAAK,SAAS;QAAE,MAAM,CAAC,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC;IACxE,sFAAsF;IACtF,gEAAgE;IAChE,IAAI,CAAC,YAAY,IAAI,SAAS,CAAC,eAAe,KAAK,SAAS,EAAE,CAAC;QAC7D,MAAM,CAAC,eAAe,GAAG,SAAS,CAAC,eAAe,CAAC;IACrD,CAAC;IACD,IAAI,SAAS,CAAC,KAAK,KAAK,SAAS;QAAE,MAAM,CAAC,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC;IAElE,qFAAqF;IACrF,8DAA8D;IAC9D,IAAI,kBAAkB,GAAG,CAAC,CAAC;IAC3B,IACE,YAAY;QACZ,WAAW;QACX,SAAS,CAAC,eAAe;QACzB,SAAS,CAAC,iBAAiB;QAC3B,SAAS,CAAC,iBAAiB,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EACjD,CAAC;QACD,MAAM,SAAS,GAAG,WAAW,CAAC,EAAsB,CAAC;QACrD,MAAM,cAAc,GAAG,SAAS,CAAC,iBAAiB,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACxE,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,WAAW,EAAE,IAAI,CAAC,CAAC,IAAI,EAAE;YACzB,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,WAAW,EAAE,CAAC,CAAC,WAAW;YAC1B,WAAW,EAAE,CAAC,CAAC,WAAW;YAC1B,MAAM,EAAE,UAAmB;SAC5B,CAAC,CAAC,CAAC;QAEJ,8EAA8E;QAC9E,uEAAuE;QACvE,+EAA+E;QAC/E,MAAM,WAAW,GAAG,sBAAsB,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;QACtE,MAAM,WAAW,GAAG,sBAAsB,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QAC1D,MAAM,eAAe,GAAkB;YACrC,OAAO,EAAE,CAAC;YACV,OAAO,EAAE,SAAS;YAClB,QAAQ,EAAE,WAAW;YACrB,UAAU,EAAE,cAAc;SAC3B,CAAC;QACF,MAAM,MAAM,GAAgE,EAAE,CAAC;QAC/E,KAAK,MAAM,CAAC,IAAI,SAAS,CAAC,iBAAiB,CAAC,UAAU,EAAE,CAAC;YACvD,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC;QAC3B,CAAC;QACD,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,iBAAiB,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;YACzD,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,GAAG,EAAE,WAAW,CAAC,EAAE,CAAC;gBAClD,MAAM,EAAE,KAAK,EAAE,CACb;oBACE,KAAK,EAAE,aAAa,CAAC,qBAAqB;oBAC1C,cAAc,EAAE,CAAC;oBACjB,kBAAkB,EAAE,CAAC;oBACrB,MAAM,EAAE,sBAAsB;iBAC/B,EACD,6BAA6B,CAC9B,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,MAAM,WAAW,GAAG,eAAe,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;gBAC/D,MAAM,QAAQ,GAAkB;oBAC9B,OAAO,EAAE,CAAC;oBACV,OAAO,EAAE,SAAS;oBAClB,QAAQ,EAAE,SAAS,CAAC,eAAe;oBACnC,UAAU,EAAE,CAAC,GAAG,cAAc,EAAE,GAAG,WAAW,CAAC;iBAChD,CAAC;gBACF,MAAM,CAAC,aAAa,GAAG,QAAQ,CAAC;gBAChC,MAAM,CAAC,UAAU,GAAG,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;oBAC7C,GAAG,CAAC;oBACJ,kEAAkE;iBACnE,CAAC,CAAC,CAAC;gBACJ,MAAM,CAAC,UAAU,GAAG,wBAAwB,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;gBAC/D,MAAM,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;gBAC7B,kBAAkB,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC;gBACzC,MAAM,EAAE,IAAI,CACV;oBACE,KAAK,EAAE,aAAa,CAAC,qBAAqB;oBAC1C,cAAc,EAAE,KAAK,CAAC,QAAQ,CAAC,MAAM;oBACrC,kBAAkB,EAAE,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,KAAK,MAAM,CAAC,CAAC,MAAM;iBAClF,EACD,8BAA8B,CAC/B,CAAC;YACJ,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,EAAE,KAAK,EAAE,CACb;gBACE,KAAK,EAAE,aAAa,CAAC,qBAAqB;gBAC1C,cAAc,EAAE,CAAC;gBACjB,kBAAkB,EAAE,CAAC;gBACrB,MAAM,EAAE,aAAa;aACtB,EACD,6BAA6B,CAC9B,CAAC;QACJ,CAAC;IACH,CAAC;IAED,IAAI,YAAY,IAAI,WAAW,EAAE,CAAC;QAChC,6EAA6E;QAC7E,8EAA8E;QAC9E,8EAA8E;QAC9E,8EAA8E;QAC9E,wEAAwE;QACxE,gFAAgF;QAChF,iFAAiF;QACjF,sFAAsF;QACtF,MAAM,CAAC,eAAe,GAAG,uBAAuB,CAC9C,CAAC,MAAM,CAAC,GAAG,EAAE,SAAS,CAAC,eAAe,CAAC,EACvC,YAAY,EACZ,WAAW,EACX,MAAM,EACN,SAAS,CAAC,eAAe,EACzB,WAAW,CACZ,CAAC;QAEF,MAAM,UAAU,GAAG,OAAO,CAAC,aAAa,IAAI,UAAU,CAAC;QACvD,6EAA6E;QAC7E,+EAA+E;QAC/E,uEAAuE;QACvE,MAAM,QAAQ,GAAG,gBAAgB,CAC/B,MAAM,CAAC,GAAG,EACV,YAAY,EACZ,WAAW,EACX,UAAU,EACV,CAAC,EACD,WAAW,CACZ,CAAC;QACF,MAAM,CAAC,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC;QAC1B,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC;YAAE,MAAM,CAAC,cAAc,GAAG,QAAQ,CAAC,QAAQ,CAAC;QAC5E,IAAI,QAAQ,CAAC,IAAI,KAAK,YAAY,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACjE,MAAM,CAAC,YAAY,GAAG,QAAQ,CAAC,MAAM,CAAC;QACxC,CAAC;QAED,IAAI,MAAM,CAAC,aAAa,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;YAC9C,IAAI,UAAU,KAAK,UAAU,EAAE,CAAC;gBAC9B,MAAM,iBAAiB,GAAG,gBAAgB,CACxC,MAAM,CAAC,UAAU,EACjB,YAAY,EACZ,WAAW,EACX,UAAU,EACV,CAAC,EACD,WAAW,CACZ,CAAC;gBACF,MAAM,CAAC,UAAU,GAAG,iBAAiB,CAAC,GAAG,CAAC;YAC5C,CAAC;iBAAM,IACL,CAAC,wBAAwB,CAAC,MAAM,EAAE;gBAChC,QAAQ,EAAE,MAAM,CAAC,aAAa,CAAC,QAAQ;gBACvC,kBAAkB;gBAClB,YAAY;gBACZ,WAAW;gBACX,WAAW;aACZ,CAAC,EACF,CAAC;gBACD,sBAAsB,CAAC,MAAM,CAAC,CAAC;gBAC/B,MAAM,EAAE,KAAK,EAAE,CACb;oBACE,KAAK,EAAE,aAAa,CAAC,qBAAqB;oBAC1C,cAAc,EAAE,CAAC;oBACjB,kBAAkB,EAAE,CAAC;oBACrB,MAAM,EAAE,wBAAwB;iBACjC,EACD,6BAA6B,CAC9B,CAAC;YACJ,CAAC;QACH,CAAC;IAEH,CAAC;IAED,uBAAuB,CAAC,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC;IAE9D,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,KAAK,UAAU,kBAAkB,CAC/B,MAA8B,EAC9B,KAAkB,EAClB,OAA6C;IAE7C,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;IAC5B,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IAC5C,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC;IACvC,MAAM,MAAM,GAAG,cAAc,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAClD,MAAM,KAAK,GAAG,KAAK,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,IAAI,UAAU,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;IAC3E,MAAM,IAAI,GAAG,CAAC,OAAe,EAAE,EAAE,CAAC,IAAI,gBAAgB,CAAC,OAAO,EAAE,wBAAwB,CAAC,CAAC;IAE1F,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,CACR,yCAAyC,UAAU,YAAY;YAC7D,mFAAmF;YACnF,qFAAqF;YACrF,wEAAwE,CAC3E,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAY,MAAM,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IAC3D,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAC1B,MAAM,IAAI,CACR,iCAAiC,UAAU,8CAA8C;YACvF,wCAAwC,KAAK,4CAA4C;YACzF,+EAA+E;YAC/E,IAAI,UAAU,gEAAgE;YAC9E,sBAAsB,UAAU,oDAAoD,CACvF,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3B,MAAM,IAAI,CACR,iCAAiC,UAAU,uCAAuC;YAChF,0CAA0C,KAAK,GAAG,CACrD,CAAC;IACJ,CAAC;IAED,mFAAmF;IACnF,gFAAgF;IAChF,8DAA8D;IAC9D,MAAM,SAAS,GAAG,IAAI,GAAG,EAA6B,CAAC;IACvD,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;IAChE,IAAI,QAAQ,GAAG,CAAC,CAAC;IACjB,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QACnD,MAAM,GAAG,GAAY,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;QAC/D,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAC1B,MAAM,IAAI,CACR,8EAA8E,IAAI,OAAO;gBACvF,mEAAmE,UAAU,KAAK;gBAClF,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAC1B,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YAC3B,MAAM,IAAI,CACR,8EAA8E,IAAI,OAAO;gBACvF,0BAA0B,UAAU,kDAAkD;gBACtF,yBAAyB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAChD,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC;YAC1B,MAAM,IAAI,CAAC,0CAA0C,IAAI,0CAA0C,CAAC,CAAC;QACvG,CAAC;QACD,SAAS,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QACzB,QAAQ,IAAI,GAAG,CAAC,MAAM,CAAC;IACzB,CAAC;IACD,IAAI,QAAQ,KAAK,CAAC,EAAE,CAAC;QACnB,MAAM,IAAI,CACR,iDAAiD,UAAU,aAAa,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK;YAC7F,oCAAoC,UAAU,6CAA6C,CAC9F,CAAC;IACJ,CAAC;IAED,+EAA+E;IAC/E,qFAAqF;IACrF,qFAAqF;IACrF,kFAAkF;IAClF,kEAAkE;IAClE,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QACjC,MAAM,GAAG,GAAG,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QACtC,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;IACnG,CAAC,CAAC,CAAC;IACH,MAAM,QAAQ,GACZ,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,CAAC,CAAC,CAAE,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC;IACxF,OAAO,EAAE,GAAG,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;AACxC,CAAC;AAED,SAAS,eAAe,CAAC,KAAc;IACrC,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,OAAO,EAAE,KAAK,QAAQ,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AAC9F,CAAC;AAED,SAAS,aAAa,CAAC,KAAc;IACnC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IAC9D,MAAM,KAAK,GAAG,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;IAC3C,OAAO,KAAK,KAAK,MAAM,CAAC,SAAS,IAAI,KAAK,KAAK,IAAI,CAAC;AACtD,CAAC;AAED;;;;;GAKG;AACH,SAAS,uBAAuB,CAC9B,MAAyB,EACzB,OAA2B,EAC3B,WAAoC,EACpC,MAA+B;IAE/B,MAAM,IAAI,GAAG,OAAO,CAAC,sBAAsB,IAAI,MAAM,CAAC;IACtD,IAAI,IAAI,KAAK,KAAK;QAAE,OAAO;IAC3B,IAAI,CAAC,6BAA6B,CAAC,OAAO,CAAC,MAAM,CAAC;QAAE,OAAO;IAE3D,IAAI,CAAC;QACH,MAAM,SAAS,GAAG,2BAA2B,CAAC,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,MAAM,EAAE;YACxE,IAAI;YACJ,OAAO,EAAE,WAAW;SACrB,CAAC,CAAC;QACH,MAAM,CAAC,kBAAkB,GAAG,SAAS,CAAC;QACtC,sBAAsB,CAAC,MAAM,EAAE,SAAS,CAAC,UAAU,CAAC,CAAC;IACvD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,uBAAuB,EAAE,CAAC;YAC7C,sBAAsB,CAAC,MAAM,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;QACnD,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,sBAAsB,CAC7B,MAA+B,EAC/B,UAAgC;IAEhC,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IACpC,MAAM,gBAAgB,GAAG,UAAU,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;IAClE,MAAM,EAAE,IAAI,CACV;QACE,KAAK,EAAE,aAAa,CAAC,2BAA2B;QAChD,oBAAoB,EAAE,gBAAgB,CAAC,MAAM;QAC7C,gBAAgB;KACjB,EACD,gDAAgD,CACjD,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,SAAS,wBAAwB,CAC/B,MAAyB,EACzB,GAMC;IAED,IAAI,MAAM,CAAC,UAAU,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IAClD,MAAM,OAAO,GAAG,gBAAgB,CAC9B,MAAM,CAAC,UAAU,EACjB,GAAG,CAAC,YAAY,EAChB,GAAG,CAAC,WAAW,EACf,YAAY,EACZ,GAAG,CAAC,kBAAkB,GAAG,CAAC,EAC1B,GAAG,CAAC,WAAW,CAChB,CAAC;IACF,IAAI,OAAO,CAAC,IAAI,KAAK,YAAY;QAAE,OAAO,KAAK,CAAC;IAChD,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC;IACrC,MAAM,YAAY,GAAG,OAAO,CAAC,MAA0B,CAAC;IAExD,MAAM,SAAS,GAAG,GAAG,CAAC,WAAW,EAAE,EAAE,CAAC;IACtC,MAAM,KAAK,GACT,SAAS,KAAK,SAAS,IAAI,kBAAkB,CAAC,SAAS,CAAC;QACtD,CAAC,CAAC,qBAAqB,CAAC,SAAS,CAAC;QAClC,CAAC,CAAC,QAAQ,CAAC;IACf,IAAI,KAAK,KAAK,UAAU,EAAE,CAAC;QACzB,MAAM,CAAC,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC;QAChC,MAAM,CAAC,MAAM,GAAG,CAAC,GAAG,QAAQ,EAAE,GAAG,YAAY,CAAC,CAAC;QAC/C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACtF,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACjF,6EAA6E;IAC7E,MAAM,WAAW,GAAG,gBAAgB,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,WAAW,CAAC,CAAC;IACpE,MAAM,eAAe,GAAG,IAAI,GAAG,EAAkB,CAAC;IAClD,KAAK,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;QAC9B,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1E,CAAC;IAED,MAAM,QAAQ,GAAqB,EAAE,CAAC;IACtC,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC3C,MAAM,IAAI,GAAG,IAAI,GAAG,EAAkB,CAAC;IACvC,KAAK,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;QAC9B,MAAM,SAAS,GAAG,gBAAgB,CAAC,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QACxD,IAAI,SAAS,EAAE,CAAC;YACd,QAAQ,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,CAAC;YAC5B,SAAS;QACX,CAAC;QACD,4EAA4E;QAC5E,6EAA6E;QAC7E,MAAM,OAAO,GAAG,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC5C,MAAM,KAAK,GAAG,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAE,CAAC;QAC7C,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,KAAK,KAAK,CAAC;YAAE,OAAO,KAAK,CAAC;QACnE,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,KAAK,CAAC;QAC3C,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QAC1B,KAAK,MAAM,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC;YAChE,IAAI,GAAG,IAAI,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC;gBAAE,OAAO,KAAK,CAAC;YAC9D,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;YACnC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAE,CAAC,CAAC;QAChC,CAAC;IACH,CAAC;IACD,IACE,QAAQ,CAAC,IAAI,KAAK,QAAQ,CAAC,MAAM;QACjC,QAAQ,CAAC,MAAM,KAAK,QAAQ,CAAC,MAAM,GAAG,YAAY,CAAC,MAAM,EACzD,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,CAAC,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC;IAChC,MAAM,CAAC,MAAM,GAAG,QAAQ,CAAC;IACzB,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;QACtB,MAAM,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAChD,GAAG,CAAC;YACJ,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAE,CAAC;SAChD,CAAC,CAAC,CAAC;IACN,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,sBAAsB,CAAC,MAAyB;IACvD,OAAO,MAAM,CAAC,UAAU,CAAC;IACzB,OAAO,MAAM,CAAC,MAAM,CAAC;IACrB,OAAO,MAAM,CAAC,UAAU,CAAC;IACzB,OAAO,MAAM,CAAC,aAAa,CAAC;AAC9B,CAAC;AAED,MAAM,cAAc,GAAG,2BAA2B,CAAC;AACnD,MAAM,gBAAgB,GAAG,oCAAoC,CAAC;AAE9D,SAAS,sBAAsB,CAAC,GAAW;IACzC,OAAO,GAAG,CAAC,OAAO,CAAC,cAAc,EAAE,yBAAyB,CAAC,CAAC;AAChE,CAAC;AAED,SAAS,wBAAwB,CAAC,GAAW;IAC3C,OAAO,GAAG,CAAC,OAAO,CAAC,gBAAgB,EAAE,gBAAgB,CAAC,CAAC;AACzD,CAAC;AAED,SAAS,eAAe,CAAC,QAAgB;IACvC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,MAAM,GAAG,GAAgC,EAAE,CAAC;IAC5C,KAAK,MAAM,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,2BAA2B,CAAC,EAAE,CAAC;QAC/D,MAAM,IAAI,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;QAClC,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,SAAS;QAC7B,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACf,GAAG,CAAC,IAAI,CAAC;YACP,IAAI;YACJ,WAAW,EAAE,IAAI,IAAI,EAAE;YACvB,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,MAAM;YACnB,MAAM,EAAE,QAAQ;SACjB,CAAC,CAAC;IACL,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,YAAY,CAAC,KAA+B;IACnD,OAAO,OAAQ,KAAoB,CAAC,QAAQ,KAAK,UAAU,CAAC;AAC9D,CAAC;AAED,uGAAuG;AACvG,SAAS,kBAAkB,CAAC,KAAsB;IAChD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACvE,CAAC;IACD,IAAI,YAAY,CAAC,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IAC1C,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;GAIG;AACH,SAAS,cAAc,CAAC,KAAsB;IAC5C,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,EAAE,CAAC;YAC/B,MAAM,IAAI,mBAAmB,CAC3B,uBAAuB,KAAK,6EAA6E,EACzG,KAAK,CACN,CAAC;QACJ,CAAC;QACD,OAAO,aAAa,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC;IAC9C,CAAC;IACD,IAAI,YAAY,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACtC,OAAO,aAAa,CAAC,KAAK,CAAC,CAAC;AAC9B,CAAC;AAED,SAAS,aAAa,CAAC,IAAiB;IACtC,OAAO;QACL,2EAA2E;QAC3E,2EAA2E;QAC3E,QAAQ,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,CAC7C,uCAAuC,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC;KAClF,CAAC;AACJ,CAAC;AAED,2EAA2E;AAC3E,MAAM,kCAAkC,GAAG,EAAE,CAAC;AAC9C,MAAM,mBAAmB,GAAG,CAAC,CAAC;AAE9B,KAAK,UAAU,gBAAgB,CAAC,IAM/B;IACC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,oBAAoB,EAAE,eAAe,EAAE,GAAG,IAAI,CAAC;IACvF,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;IACpC,IAAI,CAAC,SAAS;QAAE,OAAO,SAAS,CAAC;IAEjC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAChC,MAAM,EAAE,IAAI,CACV,EAAE,KAAK,EAAE,aAAa,CAAC,wBAAwB,EAAE,MAAM,EAAE,eAAe,EAAE,EAC1E,8DAA8D,CAC/D,CAAC;QACF,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,SAAS,GAAG,OAAO,CAAC,wBAAwB,IAAI,kCAAkC,CAAC;IACzF,MAAM,KAAK,GAAG,OAAO,CAAC,qBAAqB,IAAI,MAAM,CAAC,iBAAiB,CAAC;IACxE,IAAI,KAAK,IAAI,SAAS,EAAE,CAAC;QACvB,MAAM,EAAE,IAAI,CACV;YACE,KAAK,EAAE,aAAa,CAAC,wBAAwB;YAC7C,MAAM,EAAE,iBAAiB;YACzB,WAAW,EAAE,KAAK;YAClB,SAAS;SACV,EACD,mEAAmE,CACpE,CAAC;QACF,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,CAAC,GAAG,OAAO,CAAC,UAAU,IAAI,mBAAmB,CAAC;IACpD,MAAM,OAAO,GAAG,MAAM,SAAS,CAAC;QAC9B,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,CAAC;QACD,MAAM,EAAE,EAAE,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE;KAC9C,CAAC,CAAC;IACH,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,MAAM,EAAE,IAAI,CACV;YACE,KAAK,EAAE,aAAa,CAAC,wBAAwB;YAC7C,MAAM,EAAE,YAAY;YACpB,CAAC;YACD,SAAS;YACT,WAAW,EAAE,KAAK,KAAK,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK;SAC/D,EACD,+CAA+C,CAChD,CAAC;QACF,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,KAAK,GAAG,sBAAsB,CAAC;QACnC,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,OAAO;QACP,kCAAkC,EAAE,aAAa;QACjD,oBAAoB;QACpB,eAAe;KAChB,CAAC,CAAC;IACH,MAAM,EAAE,IAAI,CACV;QACE,KAAK,EAAE,aAAa,CAAC,qBAAqB;QAC1C,CAAC;QACD,WAAW,EAAE,OAAO,CAAC,MAAM;QAC3B,aAAa,EAAE,KAAK,CAAC,aAAa;QAClC,SAAS;QACT,WAAW,EAAE,KAAK,KAAK,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK;KAC/D,EACD,gCAAgC,CACjC,CAAC;IACF,OAAO,KAAK,CAAC,GAAG,CAAC;AACnB,CAAC;AAED,SAAS,UAAU,CAAC,MAA2B;IAC7C,OAAO,UAAU,IAAI,MAAM,CAAC;AAC9B,CAAC"}
|
|
1
|
+
{"version":3,"file":"ask.js","sourceRoot":"","sources":["../src/ask.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
export { ENRICHMENT_SYSTEM_PROMPT, buildEnrichmentUserPrompt, } from "./prompt.js";
|
|
2
2
|
export { parseCandidates, suggestEnrichment, type SuggestEnrichmentDeps, } from "./suggest.js";
|
|
3
|
-
export type { EnrichmentCandidate, EnrichmentContext, EnrichmentTarget, } from "./types.js";
|
|
3
|
+
export type { EnrichmentCandidate, EnrichmentContext, EnrichmentPromptOptions, EnrichmentTarget, } from "./types.js";
|
|
4
4
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/enrichment/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,wBAAwB,EACxB,yBAAyB,GAC1B,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,eAAe,EACf,iBAAiB,EACjB,KAAK,qBAAqB,GAC3B,MAAM,cAAc,CAAC;AACtB,YAAY,EACV,mBAAmB,EACnB,iBAAiB,EACjB,gBAAgB,GACjB,MAAM,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/enrichment/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,wBAAwB,EACxB,yBAAyB,GAC1B,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,eAAe,EACf,iBAAiB,EACjB,KAAK,qBAAqB,GAC3B,MAAM,cAAc,CAAC;AACtB,YAAY,EACV,mBAAmB,EACnB,iBAAiB,EACjB,uBAAuB,EACvB,gBAAgB,GACjB,MAAM,YAAY,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { EnrichmentContext, EnrichmentTarget } from "./types.js";
|
|
2
|
-
export declare const ENRICHMENT_SYSTEM_PROMPT = "You enrich AskDB Schema v2 describable metadata.\n\nRules:\n- Be concise. Descriptions: one sentence, no marketing language.\n- Aliases: 2\u20134 lowercase, comma-separated, the way people *say* the thing\n in plain English. No quotes, no synonyms of synonyms.\n- Common query language: 2\u20134 short bullet lines mapping a colloquial term\n to the SQL filter or aggregation it implies.\n- Never invent columns, tables, or relationships not in the schema.\n- Never suggest values for
|
|
3
|
-
export declare function buildEnrichmentUserPrompt(target: EnrichmentTarget, ctx: EnrichmentContext): string;
|
|
1
|
+
import type { EnrichmentContext, EnrichmentPromptOptions, EnrichmentTarget } from "./types.js";
|
|
2
|
+
export declare const ENRICHMENT_SYSTEM_PROMPT = "You enrich AskDB Schema v2 describable metadata.\n\nRules:\n- Be concise. Descriptions: one sentence, no marketing language.\n- Aliases: 2\u20134 lowercase, comma-separated, the way people *say* the thing\n in plain English. No quotes, no synonyms of synonyms.\n- Common query language: 2\u20134 short bullet lines mapping a colloquial term\n to the SQL filter or aggregation it implies.\n- Never invent columns, tables, or relationships not in the schema.\n- Never suggest values for a column tagged (sensitive), and don't name one in\n other text: AskDB keeps text that names a sensitive column out of its index.\n- Reply with 1\u20133 candidate options separated by exactly the line \"---\".\n Do not number, prefix, or label the candidates.";
|
|
3
|
+
export declare function buildEnrichmentUserPrompt(target: EnrichmentTarget, ctx: EnrichmentContext, options?: EnrichmentPromptOptions): string;
|
|
4
4
|
//# sourceMappingURL=prompt.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompt.d.ts","sourceRoot":"","sources":["../../src/enrichment/prompt.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"prompt.d.ts","sourceRoot":"","sources":["../../src/enrichment/prompt.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAE/F,eAAO,MAAM,wBAAwB,ivBAYa,CAAC;AAEnD,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,gBAAgB,EACxB,GAAG,EAAE,iBAAiB,EACtB,OAAO,GAAE,uBAA4B,GACpC,MAAM,CAwBR"}
|