@askdb/core 1.0.0-beta.43 → 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 +15 -12
- package/dist/ask.d.ts +39 -38
- package/dist/ask.d.ts.map +1 -1
- package/dist/ask.js +135 -309
- 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 +6 -2
- 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 +8 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -3
- package/dist/index.js.map +1 -1
- package/dist/retrieval/synthesize-ddl.d.ts +11 -1
- package/dist/retrieval/synthesize-ddl.d.ts.map +1 -1
- package/dist/retrieval/synthesize-ddl.js +39 -34
- package/dist/retrieval/synthesize-ddl.js.map +1 -1
- package/dist/schema/normalize.d.ts +16 -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 +35 -1
- package/dist/schema/v2/format.d.ts.map +1 -1
- package/dist/schema/v2/format.js +69 -22
- package/dist/schema/v2/format.js.map +1 -1
- package/dist/schema/v2/index.d.ts +2 -0
- package/dist/schema/v2/index.d.ts.map +1 -1
- package/dist/schema/v2/index.js +1 -0
- package/dist/schema/v2/index.js.map +1 -1
- package/dist/schema/v2/loader.d.ts +30 -4
- package/dist/schema/v2/loader.d.ts.map +1 -1
- package/dist/schema/v2/loader.js +90 -28
- package/dist/schema/v2/loader.js.map +1 -1
- package/dist/schema/v2/mentions.d.ts +43 -0
- package/dist/schema/v2/mentions.d.ts.map +1 -0
- package/dist/schema/v2/mentions.js +101 -0
- package/dist/schema/v2/mentions.js.map +1 -0
- package/dist/schema/v2/normalized.d.ts +5 -0
- package/dist/schema/v2/normalized.d.ts.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 +36 -15
- package/dist/sql/bind.js.map +1 -1
- package/dist/sql/dialect-spec.d.ts +27 -1
- package/dist/sql/dialect-spec.d.ts.map +1 -1
- package/dist/sql/dialect-spec.js +20 -1
- package/dist/sql/dialect-spec.js.map +1 -1
- package/dist/sql/generate.d.ts +19 -11
- package/dist/sql/generate.d.ts.map +1 -1
- package/dist/sql/generate.js +72 -34
- 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 +4 -2
- package/dist/sql/index.d.ts.map +1 -1
- package/dist/sql/index.js +4 -2
- 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-identifiers.d.ts +20 -0
- package/dist/sql/prompt-identifiers.d.ts.map +1 -0
- package/dist/sql/prompt-identifiers.js +64 -0
- package/dist/sql/prompt-identifiers.js.map +1 -0
- package/dist/sql/prompt.d.ts +7 -1
- package/dist/sql/prompt.d.ts.map +1 -1
- package/dist/sql/prompt.js +24 -3
- 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/reserved-words.d.ts +15 -0
- package/dist/sql/reserved-words.d.ts.map +1 -0
- package/dist/sql/reserved-words.js +102 -0
- package/dist/sql/reserved-words.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 +20 -37
- 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 +12 -23
- package/dist/sql/tenant-placeholders.d.ts.map +1 -1
- package/dist/sql/tenant-placeholders.js +46 -27
- 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 +16 -3
- package/dist/sql/validate.d.ts.map +1 -1
- package/dist/sql/validate.js +43 -8
- package/dist/sql/validate.js.map +1 -1
- package/package.json +9 -6
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { columnAnnotation, listAsStored, promptTableName, promptTextGate, tableAliasNote, } from "../schema/v2/format.js";
|
|
1
2
|
/**
|
|
2
3
|
* Build a focused DDL block for NL→SQL prompts from retrieved chunks.
|
|
3
4
|
*
|
|
@@ -12,11 +13,26 @@
|
|
|
12
13
|
* the bottom (before the question).
|
|
13
14
|
*
|
|
14
15
|
* Sensitive identifiers retain their `(sensitive)` tagging exactly as
|
|
15
|
-
* `formatSchemaV2ForNlToSql` does.
|
|
16
|
+
* `formatSchemaV2ForNlToSql` does. With `omitSensitiveIdentifiersFromPrompt`,
|
|
17
|
+
* schema text is withheld by the same rule, and so is the text of every
|
|
18
|
+
* retrieved chunk that names a sensitive column or is flagged `sensitive`
|
|
19
|
+
* (ADR 0022): core can't vouch for the retriever. A withheld chunk still
|
|
20
|
+
* picks its tables.
|
|
16
21
|
*/
|
|
17
22
|
export function synthesizeRetrievedDdl(args) {
|
|
18
23
|
const { schema, results } = args;
|
|
19
24
|
const omit = args.omitSensitiveIdentifiersFromPrompt === true;
|
|
25
|
+
const quoteIdentifier = args.quoteIdentifier ?? listAsStored;
|
|
26
|
+
const gate = promptTextGate(schema, omit);
|
|
27
|
+
/** Renders a retrieved chunk's text as the prompt shows it, then lets the gate check exactly that. */
|
|
28
|
+
const shown = (p, render, into) => {
|
|
29
|
+
const text = render(stripHeaderLine(p.text));
|
|
30
|
+
if (gate.allows(text, p.sensitive))
|
|
31
|
+
into.push(text);
|
|
32
|
+
};
|
|
33
|
+
const asIs = (body) => body;
|
|
34
|
+
const oneLine = (body) => body.replace(/\n+/g, " ");
|
|
35
|
+
const joinedLines = (body) => body.replace(/\n+/g, "; ");
|
|
20
36
|
const tableIds = new Set();
|
|
21
37
|
const cqlPerTable = new Map();
|
|
22
38
|
const concepts = [];
|
|
@@ -43,19 +59,19 @@ export function synthesizeRetrievedDdl(args) {
|
|
|
43
59
|
if (tid) {
|
|
44
60
|
tableIds.add(tid);
|
|
45
61
|
const list = cqlPerTable.get(tid) ?? [];
|
|
46
|
-
|
|
62
|
+
shown(p, asIs, list);
|
|
47
63
|
cqlPerTable.set(tid, list);
|
|
48
64
|
}
|
|
49
65
|
break;
|
|
50
66
|
}
|
|
51
67
|
case "question": {
|
|
52
|
-
|
|
68
|
+
shown(p, oneLine, questions);
|
|
53
69
|
if (p.refs[0])
|
|
54
70
|
tableIds.add(p.refs[0]);
|
|
55
71
|
break;
|
|
56
72
|
}
|
|
57
73
|
case "concept": {
|
|
58
|
-
|
|
74
|
+
shown(p, joinedLines, concepts);
|
|
59
75
|
for (const ref of p.refs) {
|
|
60
76
|
if (ref.startsWith("table:")) {
|
|
61
77
|
const hash = ref.indexOf("#");
|
|
@@ -65,7 +81,7 @@ export function synthesizeRetrievedDdl(args) {
|
|
|
65
81
|
break;
|
|
66
82
|
}
|
|
67
83
|
case "relationship": {
|
|
68
|
-
|
|
84
|
+
shown(p, oneLine, relationships);
|
|
69
85
|
for (const ref of p.refs) {
|
|
70
86
|
if (ref.startsWith("table:") && !ref.includes("#"))
|
|
71
87
|
tableIds.add(ref);
|
|
@@ -73,7 +89,7 @@ export function synthesizeRetrievedDdl(args) {
|
|
|
73
89
|
break;
|
|
74
90
|
}
|
|
75
91
|
case "tenant-policy": {
|
|
76
|
-
|
|
92
|
+
shown(p, joinedLines, tenantPolicyChunks);
|
|
77
93
|
break;
|
|
78
94
|
}
|
|
79
95
|
}
|
|
@@ -84,10 +100,9 @@ export function synthesizeRetrievedDdl(args) {
|
|
|
84
100
|
if (!tableIds.has(t.id))
|
|
85
101
|
continue;
|
|
86
102
|
tablesEmitted++;
|
|
87
|
-
const
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
if (!t.sensitive && t.description)
|
|
103
|
+
const listedName = promptTableName(t, args.unqualifiedNamespace, quoteIdentifier);
|
|
104
|
+
lines.push(`TABLE ${listedName}${tableAliasNote(t, gate)}`);
|
|
105
|
+
if (!t.sensitive && t.description && gate.allows(t.description))
|
|
91
106
|
lines.push(`-- ${t.description}`);
|
|
92
107
|
if (omit && t.sensitive) {
|
|
93
108
|
lines.push(` (sensitive table — column definitions withheld from model context)`);
|
|
@@ -102,25 +117,18 @@ export function synthesizeRetrievedDdl(args) {
|
|
|
102
117
|
flags.push("PK");
|
|
103
118
|
flags.push(c.nullable ? "NULL" : "NOT NULL");
|
|
104
119
|
const sensitiveTag = c.sensitive || t.sensitive ? " (sensitive)" : "";
|
|
105
|
-
let line = ` - ${c.name} ${c.type} (${flags.join(" ")})${sensitiveTag}`;
|
|
120
|
+
let line = ` - ${quoteIdentifier(c.name)} ${c.type} (${flags.join(" ")})${sensitiveTag}`;
|
|
106
121
|
if (!c.sensitive && !t.sensitive) {
|
|
107
|
-
const
|
|
108
|
-
if (
|
|
109
|
-
|
|
110
|
-
if (c.enum?.length)
|
|
111
|
-
extras.push(`values: ${c.enum.join("|")}`);
|
|
112
|
-
if (c.description)
|
|
113
|
-
extras.push(c.description);
|
|
114
|
-
if (extras.length)
|
|
115
|
-
line += ` -- ${extras.join("; ")}`;
|
|
122
|
+
const annotation = columnAnnotation(c, gate);
|
|
123
|
+
if (annotation)
|
|
124
|
+
line += ` -- ${annotation}`;
|
|
116
125
|
}
|
|
117
126
|
lines.push(line);
|
|
118
127
|
}
|
|
119
128
|
const cqlList = cqlPerTable.get(t.id);
|
|
120
129
|
if (cqlList && cqlList.length > 0 && !t.sensitive) {
|
|
121
130
|
lines.push(`-- common query language --`);
|
|
122
|
-
for (const
|
|
123
|
-
const body = stripHeaderLine(cql.text);
|
|
131
|
+
for (const body of cqlList) {
|
|
124
132
|
for (const cqlLine of body.split("\n")) {
|
|
125
133
|
lines.push(`-- ${cqlLine}`);
|
|
126
134
|
}
|
|
@@ -130,36 +138,33 @@ export function synthesizeRetrievedDdl(args) {
|
|
|
130
138
|
}
|
|
131
139
|
if (relationships.length > 0) {
|
|
132
140
|
lines.push("-- relationships --");
|
|
133
|
-
for (const r of relationships)
|
|
134
|
-
lines.push(`-- ${
|
|
135
|
-
}
|
|
141
|
+
for (const r of relationships)
|
|
142
|
+
lines.push(`-- ${r}`);
|
|
136
143
|
lines.push("");
|
|
137
144
|
}
|
|
138
145
|
if (concepts.length > 0) {
|
|
139
146
|
lines.push("-- concepts --");
|
|
140
|
-
for (const c of concepts)
|
|
141
|
-
lines.push(`-- ${
|
|
142
|
-
}
|
|
147
|
+
for (const c of concepts)
|
|
148
|
+
lines.push(`-- ${c}`);
|
|
143
149
|
lines.push("");
|
|
144
150
|
}
|
|
145
151
|
if (questions.length > 0) {
|
|
146
152
|
lines.push("-- example questions for context --");
|
|
147
|
-
for (const q of questions)
|
|
148
|
-
lines.push(`-- ${
|
|
149
|
-
}
|
|
153
|
+
for (const q of questions)
|
|
154
|
+
lines.push(`-- ${q}`);
|
|
150
155
|
lines.push("");
|
|
151
156
|
}
|
|
152
157
|
if (tenantPolicyChunks.length > 0) {
|
|
153
158
|
lines.push("-- tenant policy context --");
|
|
154
|
-
for (const tp of tenantPolicyChunks)
|
|
155
|
-
lines.push(`-- ${
|
|
156
|
-
}
|
|
159
|
+
for (const tp of tenantPolicyChunks)
|
|
160
|
+
lines.push(`-- ${tp}`);
|
|
157
161
|
lines.push("");
|
|
158
162
|
}
|
|
159
163
|
return {
|
|
160
164
|
ddl: lines.join("\n").trimEnd(),
|
|
161
165
|
tablesEmitted,
|
|
162
166
|
chunksUsed: results.length,
|
|
167
|
+
mentionDroppedCount: gate.withheld,
|
|
163
168
|
};
|
|
164
169
|
}
|
|
165
170
|
function stripHeaderLine(text) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"synthesize-ddl.js","sourceRoot":"","sources":["../../src/retrieval/synthesize-ddl.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"synthesize-ddl.js","sourceRoot":"","sources":["../../src/retrieval/synthesize-ddl.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,6 +7,16 @@ export type FormatNlToSqlOptions = {
|
|
|
7
7
|
* Default **false** — names are **included** and tagged `(sensitive)` so the model can ground SQL without hallucinating missing columns.
|
|
8
8
|
*/
|
|
9
9
|
omitSensitiveIdentifiersFromPrompt?: boolean;
|
|
10
|
+
/**
|
|
11
|
+
* Schema v2 only: tables in this namespace are listed without it (`TABLE agency`, not
|
|
12
|
+
* `TABLE public.agency`). Set from the dialect's `DialectSpec.unqualifiedNamespace`.
|
|
13
|
+
*/
|
|
14
|
+
unqualifiedNamespace?: string;
|
|
15
|
+
/**
|
|
16
|
+
* Schema v2 only: how each schema, table and column name is listed. Set from the dialect
|
|
17
|
+
* with `promptIdentifierQuoter(dialect)`, which quotes reserved words. Unset: names are listed as stored.
|
|
18
|
+
*/
|
|
19
|
+
quoteIdentifier?: (name: string) => string;
|
|
10
20
|
};
|
|
11
21
|
/** Stats when building DDL for NL→SQL (meaning depends on {@link FormatNlToSqlOptions.omitSensitiveIdentifiersFromPrompt}). */
|
|
12
22
|
export type NlToSqlSchemaFormatStats = {
|
|
@@ -19,6 +29,12 @@ export type NlToSqlSchemaFormatStats = {
|
|
|
19
29
|
listedSensitiveColumnCount: number;
|
|
20
30
|
/** Tables excluded from the DDL because they are marked as untracked. */
|
|
21
31
|
untrackedTableCount: number;
|
|
32
|
+
/**
|
|
33
|
+
* When omitting (schema v2): describable texts withheld because they name a sensitive column (a
|
|
34
|
+
* description, an alias, a column's annotation, a common query language block). When including,
|
|
35
|
+
* and for a v1 schema: always 0.
|
|
36
|
+
*/
|
|
37
|
+
mentionDroppedCount: number;
|
|
22
38
|
};
|
|
23
39
|
/**
|
|
24
40
|
* Format schema for LLM prompts. By default, **includes** sensitive column/table names (tagged) so NL→SQL can
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"normalize.d.ts","sourceRoot":"","sources":["../../src/schema/normalize.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEpE,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,eAAe,GAAG,gBAAgB,CAc9E;AAED,kDAAkD;AAClD,MAAM,MAAM,oBAAoB,GAAG;IACjC;;;OAGG;IACH,kCAAkC,CAAC,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"normalize.d.ts","sourceRoot":"","sources":["../../src/schema/normalize.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEpE,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,eAAe,GAAG,gBAAgB,CAc9E;AAED,kDAAkD;AAClD,MAAM,MAAM,oBAAoB,GAAG;IACjC;;;OAGG;IACH,kCAAkC,CAAC,EAAE,OAAO,CAAC;IAC7C;;;OAGG;IACH,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B;;;OAGG;IACH,eAAe,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;CAC5C,CAAC;AAEF,+HAA+H;AAC/H,MAAM,MAAM,wBAAwB,GAAG;IACrC,kCAAkC,EAAE,OAAO,CAAC;IAC5C,0EAA0E;IAC1E,mBAAmB,EAAE,MAAM,CAAC;IAC5B,qEAAqE;IACrE,uBAAuB,EAAE,MAAM,CAAC;IAChC,4GAA4G;IAC5G,0BAA0B,EAAE,MAAM,CAAC;IACnC,yEAAyE;IACzE,mBAAmB,EAAE,MAAM,CAAC;IAC5B;;;;OAIG;IACH,mBAAmB,EAAE,MAAM,CAAC;CAC7B,CAAC;AAmBF;;;GAGG;AACH,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,gBAAgB,EACxB,OAAO,GAAE,oBAAyB,GACjC;IACD,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,wBAAwB,CAAC;CACjC,CAwDA;AAED,0GAA0G;AAC1G,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,gBAAgB,EAAE,OAAO,CAAC,EAAE,oBAAoB,GAAG,MAAM,CAEtG"}
|
package/dist/schema/normalize.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"normalize.js","sourceRoot":"","sources":["../../src/schema/normalize.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,oBAAoB,CAAC,MAAuB;IAC1D,OAAO;QACL,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAChC,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,GAAG,CAAC,CAAC,CAAC,SAAS,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,IAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC7D,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBAC7B,IAAI,EAAE,CAAC,CAAC,IAAI;gBACZ,IAAI,EAAE,CAAC,CAAC,IAAI;gBACZ,QAAQ,EAAE,CAAC,CAAC,QAAQ,IAAI,IAAI;gBAC5B,UAAU,EAAE,CAAC,CAAC,UAAU,IAAI,KAAK;gBACjC,GAAG,CAAC,CAAC,CAAC,SAAS,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,IAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAC9D,CAAC,CAAC;SACJ,CAAC,CAAC;KACJ,CAAC;AACJ,CAAC;
|
|
1
|
+
{"version":3,"file":"normalize.js","sourceRoot":"","sources":["../../src/schema/normalize.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,10 +6,44 @@ import type { FormatNlToSqlOptions, NlToSqlSchemaFormatStats } from "../normaliz
|
|
|
6
6
|
* Interleaves table descriptions, aliases, column descriptions, and
|
|
7
7
|
* `Common query language` blocks when present in the describable layer.
|
|
8
8
|
* Sensitive describable-layer fields (descriptions/aliases/enum) are
|
|
9
|
-
* excluded per the schema-v2 contract.
|
|
9
|
+
* excluded per the schema-v2 contract. With `omitSensitiveIdentifiersFromPrompt`,
|
|
10
|
+
* describable text that names a sensitive column is withheld too
|
|
11
|
+
* ({@link promptTextGate}).
|
|
10
12
|
*/
|
|
11
13
|
export declare function formatSchemaV2ForNlToSql(schema: NormalizedSchemaV2, options?: FormatNlToSqlOptions): {
|
|
12
14
|
ddl: string;
|
|
13
15
|
stats: NlToSqlSchemaFormatStats;
|
|
14
16
|
};
|
|
17
|
+
/**
|
|
18
|
+
* Decides which describable text an NL→SQL prompt may show. With sensitive identifiers
|
|
19
|
+
* omitted, text that names a sensitive column (ADR 0017's names, the schema v2 contract's
|
|
20
|
+
* mention rule) is withheld and counted; otherwise every text is shown.
|
|
21
|
+
*/
|
|
22
|
+
export type PromptTextGate = {
|
|
23
|
+
/**
|
|
24
|
+
* Whether `text`, as the prompt renders it, may go in. With omission on, a text that names a
|
|
25
|
+
* sensitive column is withheld, and so is one whose source is `flagged` sensitive (a retrieved
|
|
26
|
+
* chunk's `sensitive`). Each withheld text counts once.
|
|
27
|
+
*/
|
|
28
|
+
allows(text: string, flagged?: boolean): boolean;
|
|
29
|
+
/** How many texts were withheld so far. */
|
|
30
|
+
readonly withheld: number;
|
|
31
|
+
};
|
|
32
|
+
/** The {@link PromptTextGate} both NL→SQL prompt builders use for `schema`. */
|
|
33
|
+
export declare function promptTextGate(schema: NormalizedSchemaV2, omit: boolean): PromptTextGate;
|
|
34
|
+
/** A non-sensitive table's ` -- aliases: …` header note, each alias shown only when the gate allows it. */
|
|
35
|
+
export declare function tableAliasNote(t: NormalizedSchemaV2["tables"][0], gate: PromptTextGate): string;
|
|
36
|
+
/**
|
|
37
|
+
* A non-sensitive column's annotation (`aliases: …; values: …; description`), or `""`.
|
|
38
|
+
* The three are one unit, checked as rendered: when they name a sensitive column, the gate
|
|
39
|
+
* withholds all of them.
|
|
40
|
+
*/
|
|
41
|
+
export declare function columnAnnotation(c: NormalizedSchemaV2["tables"][0]["columns"][0], gate: PromptTextGate): string;
|
|
42
|
+
/**
|
|
43
|
+
* A table's name as the NL→SQL prompt lists it: `schema.name`, or `name` in the unqualified
|
|
44
|
+
* namespace, each part passed through `quoteIdentifier`.
|
|
45
|
+
*/
|
|
46
|
+
export declare function promptTableName(table: Pick<NormalizedSchemaV2["tables"][0], "schema" | "name">, unqualifiedNamespace: string | undefined, quoteIdentifier?: (name: string) => string): string;
|
|
47
|
+
/** The default `quoteIdentifier`: a name listed exactly as stored. */
|
|
48
|
+
export declare function listAsStored(name: string): string;
|
|
15
49
|
//# sourceMappingURL=format.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../../../src/schema/v2/format.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAC1D,OAAO,KAAK,EAAE,oBAAoB,EAAE,wBAAwB,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../../../src/schema/v2/format.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAC1D,OAAO,KAAK,EAAE,oBAAoB,EAAE,wBAAwB,EAAE,MAAM,iBAAiB,CAAC;AAGtF;;;;;;;;;GASG;AACH,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,kBAAkB,EAC1B,OAAO,GAAE,oBAAyB,GACjC;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,wBAAwB,CAAA;CAAE,CA4ElD;AAED;;;;GAIG;AACH,MAAM,MAAM,cAAc,GAAG;IAC3B;;;;OAIG;IACH,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC;IACjD,2CAA2C;IAC3C,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B,CAAC;AAEF,+EAA+E;AAC/E,wBAAgB,cAAc,CAAC,MAAM,EAAE,kBAAkB,EAAE,IAAI,EAAE,OAAO,GAAG,cAAc,CAaxF;AAED,2GAA2G;AAC3G,wBAAgB,cAAc,CAAC,CAAC,EAAE,kBAAkB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,cAAc,GAAG,MAAM,CAI/F;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,kBAAkB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,cAAc,GAAG,MAAM,CAQ/G;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAC7B,KAAK,EAAE,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQ,GAAG,MAAM,CAAC,EAC/D,oBAAoB,EAAE,MAAM,GAAG,SAAS,EACxC,eAAe,GAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAqB,GACvD,MAAM,CAGR;AAED,sEAAsE;AACtE,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEjD"}
|
package/dist/schema/v2/format.js
CHANGED
|
@@ -1,13 +1,18 @@
|
|
|
1
|
+
import { createMentionMatcher, sensitiveMentionNames } from "./mentions.js";
|
|
1
2
|
/**
|
|
2
3
|
* Format a NormalizedSchemaV2 for NL→SQL prompts.
|
|
3
4
|
*
|
|
4
5
|
* Interleaves table descriptions, aliases, column descriptions, and
|
|
5
6
|
* `Common query language` blocks when present in the describable layer.
|
|
6
7
|
* Sensitive describable-layer fields (descriptions/aliases/enum) are
|
|
7
|
-
* excluded per the schema-v2 contract.
|
|
8
|
+
* excluded per the schema-v2 contract. With `omitSensitiveIdentifiersFromPrompt`,
|
|
9
|
+
* describable text that names a sensitive column is withheld too
|
|
10
|
+
* ({@link promptTextGate}).
|
|
8
11
|
*/
|
|
9
12
|
export function formatSchemaV2ForNlToSql(schema, options = {}) {
|
|
10
13
|
const omit = options.omitSensitiveIdentifiersFromPrompt === true;
|
|
14
|
+
const quoteIdentifier = options.quoteIdentifier ?? listAsStored;
|
|
15
|
+
const gate = promptTextGate(schema, omit);
|
|
11
16
|
let redactedColumnCount = 0;
|
|
12
17
|
let sensitiveTableStubCount = 0;
|
|
13
18
|
let listedSensitiveColumnCount = 0;
|
|
@@ -18,14 +23,11 @@ export function formatSchemaV2ForNlToSql(schema, options = {}) {
|
|
|
18
23
|
untrackedTableCount++;
|
|
19
24
|
continue;
|
|
20
25
|
}
|
|
21
|
-
// Table header —
|
|
22
|
-
const
|
|
23
|
-
|
|
24
|
-
? ` -- aliases: ${t.aliases.join(", ")}`
|
|
25
|
-
: "";
|
|
26
|
-
lines.push(`TABLE ${qualifiedName}${aliasNote}`);
|
|
26
|
+
// Table header — qualified with its schema unless that namespace isn't one; alias annotation when present
|
|
27
|
+
const listedName = promptTableName(t, options.unqualifiedNamespace, quoteIdentifier);
|
|
28
|
+
lines.push(`TABLE ${listedName}${tableAliasNote(t, gate)}`);
|
|
27
29
|
// Table description as a comment line
|
|
28
|
-
if (!t.sensitive && t.description) {
|
|
30
|
+
if (!t.sensitive && t.description && gate.allows(t.description)) {
|
|
29
31
|
lines.push(`-- ${t.description}`);
|
|
30
32
|
}
|
|
31
33
|
if (omit && t.sensitive) {
|
|
@@ -43,7 +45,7 @@ export function formatSchemaV2ForNlToSql(schema, options = {}) {
|
|
|
43
45
|
continue;
|
|
44
46
|
}
|
|
45
47
|
visibleColumns++;
|
|
46
|
-
lines.push(buildColumnLine(c, false, false));
|
|
48
|
+
lines.push(buildColumnLine(c, false, false, quoteIdentifier, gate));
|
|
47
49
|
}
|
|
48
50
|
if (visibleColumns === 0 && t.columns.length > 0) {
|
|
49
51
|
lines.push(` (all columns marked sensitive — definitions withheld from model context)`);
|
|
@@ -53,11 +55,11 @@ export function formatSchemaV2ForNlToSql(schema, options = {}) {
|
|
|
53
55
|
for (const c of t.columns) {
|
|
54
56
|
if (c.sensitive)
|
|
55
57
|
listedSensitiveColumnCount++;
|
|
56
|
-
lines.push(buildColumnLine(c, c.sensitive, t.sensitive));
|
|
58
|
+
lines.push(buildColumnLine(c, c.sensitive, t.sensitive, quoteIdentifier, gate));
|
|
57
59
|
}
|
|
58
60
|
}
|
|
59
61
|
// Common query language block
|
|
60
|
-
if (!t.sensitive && t.commonQueryLanguage) {
|
|
62
|
+
if (!t.sensitive && t.commonQueryLanguage && gate.allows(t.commonQueryLanguage)) {
|
|
61
63
|
lines.push(`-- common query language --`);
|
|
62
64
|
for (const cqlLine of t.commonQueryLanguage.split("\n")) {
|
|
63
65
|
lines.push(`-- ${cqlLine}`);
|
|
@@ -74,29 +76,74 @@ export function formatSchemaV2ForNlToSql(schema, options = {}) {
|
|
|
74
76
|
sensitiveTableStubCount,
|
|
75
77
|
listedSensitiveColumnCount,
|
|
76
78
|
untrackedTableCount,
|
|
79
|
+
mentionDroppedCount: gate.withheld,
|
|
77
80
|
},
|
|
78
81
|
};
|
|
79
82
|
}
|
|
80
|
-
|
|
83
|
+
/** The {@link PromptTextGate} both NL→SQL prompt builders use for `schema`. */
|
|
84
|
+
export function promptTextGate(schema, omit) {
|
|
85
|
+
const matcher = omit ? createMentionMatcher(sensitiveMentionNames(schema)) : undefined;
|
|
86
|
+
let withheld = 0;
|
|
87
|
+
return {
|
|
88
|
+
allows(text, flagged = false) {
|
|
89
|
+
if (!matcher || (!flagged && !matcher.mentionsAny(text)))
|
|
90
|
+
return true;
|
|
91
|
+
withheld++;
|
|
92
|
+
return false;
|
|
93
|
+
},
|
|
94
|
+
get withheld() {
|
|
95
|
+
return withheld;
|
|
96
|
+
},
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
/** A non-sensitive table's ` -- aliases: …` header note, each alias shown only when the gate allows it. */
|
|
100
|
+
export function tableAliasNote(t, gate) {
|
|
101
|
+
if (t.sensitive || !t.aliases?.length)
|
|
102
|
+
return "";
|
|
103
|
+
const aliases = t.aliases.filter((alias) => gate.allows(alias));
|
|
104
|
+
return aliases.length ? ` -- aliases: ${aliases.join(", ")}` : "";
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* A non-sensitive column's annotation (`aliases: …; values: …; description`), or `""`.
|
|
108
|
+
* The three are one unit, checked as rendered: when they name a sensitive column, the gate
|
|
109
|
+
* withholds all of them.
|
|
110
|
+
*/
|
|
111
|
+
export function columnAnnotation(c, gate) {
|
|
112
|
+
const aliases = c.aliases?.length ? c.aliases.join(", ") : "";
|
|
113
|
+
const values = c.enum?.length ? c.enum.join("|") : "";
|
|
114
|
+
const description = c.description ?? "";
|
|
115
|
+
const shown = [aliases, values, description].filter(Boolean);
|
|
116
|
+
// The fixed labels stay out of the check: a sensitive column named `values` names no annotation.
|
|
117
|
+
if (shown.length === 0 || !gate.allows(shown.join("; ")))
|
|
118
|
+
return "";
|
|
119
|
+
return [aliases && `aliases: ${aliases}`, values && `values: ${values}`, description].filter(Boolean).join("; ");
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* A table's name as the NL→SQL prompt lists it: `schema.name`, or `name` in the unqualified
|
|
123
|
+
* namespace, each part passed through `quoteIdentifier`.
|
|
124
|
+
*/
|
|
125
|
+
export function promptTableName(table, unqualifiedNamespace, quoteIdentifier = listAsStored) {
|
|
126
|
+
const name = quoteIdentifier(table.name);
|
|
127
|
+
return table.schema === unqualifiedNamespace ? name : `${quoteIdentifier(table.schema)}.${name}`;
|
|
128
|
+
}
|
|
129
|
+
/** The default `quoteIdentifier`: a name listed exactly as stored. */
|
|
130
|
+
export function listAsStored(name) {
|
|
131
|
+
return name;
|
|
132
|
+
}
|
|
133
|
+
function buildColumnLine(c, colSensitive, tableSensitive, quoteIdentifier, gate) {
|
|
81
134
|
const effective = colSensitive || tableSensitive;
|
|
82
135
|
const flags = [c.primaryKey ? "PK" : "", c.nullable ? "NULL" : "NOT NULL"]
|
|
83
136
|
.filter(Boolean)
|
|
84
137
|
.join(" ");
|
|
85
|
-
let line = ` - ${c.name} ${c.type}${flags ? ` (${flags})` : ""}`;
|
|
138
|
+
let line = ` - ${quoteIdentifier(c.name)} ${c.type}${flags ? ` (${flags})` : ""}`;
|
|
86
139
|
if (effective) {
|
|
87
140
|
line += " (sensitive)";
|
|
88
141
|
}
|
|
89
142
|
else {
|
|
90
143
|
// Append column description when present (describable-layer enrichment)
|
|
91
|
-
const
|
|
92
|
-
if (
|
|
93
|
-
|
|
94
|
-
if (c.enum?.length)
|
|
95
|
-
extras.push(`values: ${c.enum.join("|")}`);
|
|
96
|
-
if (c.description)
|
|
97
|
-
extras.push(c.description);
|
|
98
|
-
if (extras.length)
|
|
99
|
-
line += ` -- ${extras.join("; ")}`;
|
|
144
|
+
const annotation = columnAnnotation(c, gate);
|
|
145
|
+
if (annotation)
|
|
146
|
+
line += ` -- ${annotation}`;
|
|
100
147
|
}
|
|
101
148
|
return line;
|
|
102
149
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"format.js","sourceRoot":"","sources":["../../../src/schema/v2/format.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"format.js","sourceRoot":"","sources":["../../../src/schema/v2/format.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
export { loadSchema, loadSchemaFromJson } from "./loader.js";
|
|
2
|
+
export type { BundledSchemaV2 } from "./loader.js";
|
|
2
3
|
export { parseTableMarkdown, parseConceptsMarkdown } from "./parser.js";
|
|
3
4
|
export { writeTableMarkdown, writeConceptsMarkdown, writeTenantPolicyMarkdown } from "./writer.js";
|
|
4
5
|
export { formatSchemaV2ForNlToSql } from "./format.js";
|
|
@@ -10,4 +11,5 @@ export type { NormalizedSchemaV2, NormalizedV2Table, NormalizedV2Column, SchemaV
|
|
|
10
11
|
export { parseTenantPolicyMarkdown, normalizeTenantPolicy } from "./tenant-policy-loader.js";
|
|
11
12
|
export { tenantPolicyFrontmatterSchema, tenantRootSchema, hierarchyEdgeSchema, scopedTableSchema, polymorphicTableSchema, enforcementModeSchema, tenantScopeSchema, tenantAccessSchema, TENANT_POLICY_H2_SECTIONS, } from "./tenant-policy.js";
|
|
12
13
|
export type { TenantPolicyFrontmatter, TenantRoot, HierarchyEdge, ScopedTable, ScopeThrough, PolymorphicTable, EnforcementMode, TenantScope, TenantAccess, TenantAccessIds, TenantAccessSubtree, TenantAccessMultiRoot, TenantAccessGlobal, TenantScopeContext, ParsedTenantPolicyMarkdown, NormalizedTenantPolicy, TenantPolicyWarning, TableCoverageEntry, TableTenantClassification, TenantPolicyH2Section, } from "./tenant-policy.js";
|
|
14
|
+
export { createMentionMatcher, findMentionedNames, sensitiveMentionNames, type MentionMatcher, type MentionName, } from "./mentions.js";
|
|
13
15
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/schema/v2/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACxE,OAAO,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AACnG,OAAO,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAClF,YAAY,EAAE,YAAY,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACrE,OAAO,EACL,wBAAwB,EACxB,yBAAyB,EACzB,2BAA2B,EAC3B,eAAe,EACf,sBAAsB,GACvB,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EACV,kBAAkB,EAClB,mBAAmB,EACnB,qBAAqB,EACrB,SAAS,EACT,mBAAmB,EACnB,sBAAsB,EACtB,mBAAmB,GACpB,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EACV,kBAAkB,EAClB,iBAAiB,EACjB,kBAAkB,EAClB,eAAe,GAChB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,yBAAyB,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAC7F,OAAO,EACL,6BAA6B,EAC7B,gBAAgB,EAChB,mBAAmB,EACnB,iBAAiB,EACjB,sBAAsB,EACtB,qBAAqB,EACrB,iBAAiB,EACjB,kBAAkB,EAClB,yBAAyB,GAC1B,MAAM,oBAAoB,CAAC;AAC5B,YAAY,EACV,uBAAuB,EACvB,UAAU,EACV,aAAa,EACb,WAAW,EACX,YAAY,EACZ,gBAAgB,EAChB,eAAe,EACf,WAAW,EACX,YAAY,EACZ,eAAe,EACf,mBAAmB,EACnB,qBAAqB,EACrB,kBAAkB,EAClB,kBAAkB,EAClB,0BAA0B,EAC1B,sBAAsB,EACtB,mBAAmB,EACnB,kBAAkB,EAClB,yBAAyB,EACzB,qBAAqB,GACtB,MAAM,oBAAoB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/schema/v2/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAC7D,YAAY,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACxE,OAAO,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AACnG,OAAO,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAClF,YAAY,EAAE,YAAY,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACrE,OAAO,EACL,wBAAwB,EACxB,yBAAyB,EACzB,2BAA2B,EAC3B,eAAe,EACf,sBAAsB,GACvB,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EACV,kBAAkB,EAClB,mBAAmB,EACnB,qBAAqB,EACrB,SAAS,EACT,mBAAmB,EACnB,sBAAsB,EACtB,mBAAmB,GACpB,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EACV,kBAAkB,EAClB,iBAAiB,EACjB,kBAAkB,EAClB,eAAe,GAChB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,yBAAyB,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAC7F,OAAO,EACL,6BAA6B,EAC7B,gBAAgB,EAChB,mBAAmB,EACnB,iBAAiB,EACjB,sBAAsB,EACtB,qBAAqB,EACrB,iBAAiB,EACjB,kBAAkB,EAClB,yBAAyB,GAC1B,MAAM,oBAAoB,CAAC;AAC5B,YAAY,EACV,uBAAuB,EACvB,UAAU,EACV,aAAa,EACb,WAAW,EACX,YAAY,EACZ,gBAAgB,EAChB,eAAe,EACf,WAAW,EACX,YAAY,EACZ,eAAe,EACf,mBAAmB,EACnB,qBAAqB,EACrB,kBAAkB,EAClB,kBAAkB,EAClB,0BAA0B,EAC1B,sBAAsB,EACtB,mBAAmB,EACnB,kBAAkB,EAClB,yBAAyB,EACzB,qBAAqB,GACtB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,oBAAoB,EACpB,kBAAkB,EAClB,qBAAqB,EACrB,KAAK,cAAc,EACnB,KAAK,WAAW,GACjB,MAAM,eAAe,CAAC"}
|
package/dist/schema/v2/index.js
CHANGED
|
@@ -6,4 +6,5 @@ export { v2SchemaJsonSchema, v2TableSchema, v2ColumnSchema } from "./physical.js
|
|
|
6
6
|
export { v2TableFrontmatterSchema, v2ColumnFrontmatterSchema, v2ConceptsFrontmatterSchema, v2ConceptSchema, RECOGNIZED_H2_SECTIONS, } from "./describable.js";
|
|
7
7
|
export { parseTenantPolicyMarkdown, normalizeTenantPolicy } from "./tenant-policy-loader.js";
|
|
8
8
|
export { tenantPolicyFrontmatterSchema, tenantRootSchema, hierarchyEdgeSchema, scopedTableSchema, polymorphicTableSchema, enforcementModeSchema, tenantScopeSchema, tenantAccessSchema, TENANT_POLICY_H2_SECTIONS, } from "./tenant-policy.js";
|
|
9
|
+
export { createMentionMatcher, findMentionedNames, sensitiveMentionNames, } from "./mentions.js";
|
|
9
10
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/schema/v2/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/schema/v2/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAE7D,OAAO,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACxE,OAAO,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AACnG,OAAO,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAElF,OAAO,EACL,wBAAwB,EACxB,yBAAyB,EACzB,2BAA2B,EAC3B,eAAe,EACf,sBAAsB,GACvB,MAAM,kBAAkB,CAAC;AAgB1B,OAAO,EAAE,yBAAyB,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAC7F,OAAO,EACL,6BAA6B,EAC7B,gBAAgB,EAChB,mBAAmB,EACnB,iBAAiB,EACjB,sBAAsB,EACtB,qBAAqB,EACrB,iBAAiB,EACjB,kBAAkB,EAClB,yBAAyB,GAC1B,MAAM,oBAAoB,CAAC;AAwB5B,OAAO,EACL,oBAAoB,EACpB,kBAAkB,EAClB,qBAAqB,GAGtB,MAAM,eAAe,CAAC"}
|
|
@@ -1,4 +1,27 @@
|
|
|
1
|
+
import { type V2SchemaJson } from "./physical.js";
|
|
1
2
|
import type { NormalizedSchemaV2 } from "./normalized.js";
|
|
3
|
+
/**
|
|
4
|
+
* Single-file form of a Schema v2 directory: what `askdb bundle` writes and what
|
|
5
|
+
* `loadSchema()` / `loadSchemaFromJson()` read back. It carries every file the
|
|
6
|
+
* directory loader reads, so loading a bundle gives the same result as loading the
|
|
7
|
+
* directory. This loader defines the format; writers such as `@askdb/enrich`'s
|
|
8
|
+
* `bundleSchemaDirectory()` produce this type so they can't drop a file it reads.
|
|
9
|
+
*/
|
|
10
|
+
export type BundledSchemaV2 = {
|
|
11
|
+
bundled: true;
|
|
12
|
+
/** `schema.json`. */
|
|
13
|
+
physical: V2SchemaJson;
|
|
14
|
+
/** `tables/` filename → raw markdown content, for every `tables/*.md`. */
|
|
15
|
+
tables: Record<string, string>;
|
|
16
|
+
/** Raw `concepts.md` content; present when the file exists. */
|
|
17
|
+
concepts?: string;
|
|
18
|
+
/**
|
|
19
|
+
* Raw `tenant-policy.md` content; present when the file exists. Without it a
|
|
20
|
+
* multi-tenant schema loads with no tenant policy, and `ask()` neither requires a
|
|
21
|
+
* `tenantScope` nor injects tenant predicates.
|
|
22
|
+
*/
|
|
23
|
+
tenantPolicy?: string;
|
|
24
|
+
};
|
|
2
25
|
/**
|
|
3
26
|
* Load a Schema v2 artifact from a raw JSON string.
|
|
4
27
|
*
|
|
@@ -12,11 +35,14 @@ export declare function loadSchemaFromJson(raw: string): NormalizedSchemaV2;
|
|
|
12
35
|
* Autodetects between:
|
|
13
36
|
* - A v2 directory (`<schemaId>.schema/`) containing `schema.json`
|
|
14
37
|
* - A bundled JSON file (`*.bundle.json` or any JSON with `bundled: true`)
|
|
15
|
-
* - A direct path to a `schema.json` inside a directory
|
|
16
|
-
* enclosing directory, including
|
|
17
|
-
* `tenant-policy.md`
|
|
38
|
+
* - A direct path to a `schema.json` inside a directory, matched in any case
|
|
39
|
+
* (`Schema.json` too) — loaded exactly like the enclosing directory, including
|
|
40
|
+
* sibling `tables/*.md`, `concepts.md`, and `tenant-policy.md`
|
|
18
41
|
*
|
|
19
|
-
* Any other JSON file is treated as a standalone physical layer
|
|
42
|
+
* Any other JSON file is treated as a standalone physical layer, unless its
|
|
43
|
+
* directory also holds `tenant-policy.md`, `tables/` or `concepts.md`: loading it
|
|
44
|
+
* alone would ignore them, so that throws `SchemaParseError`. To load only the
|
|
45
|
+
* physical layer of such a file, pass its content to `loadSchemaFromJson()`.
|
|
20
46
|
*
|
|
21
47
|
* Optional sibling files may be absent, but a present file that cannot be read
|
|
22
48
|
* or parsed (e.g. malformed YAML front-matter in `tenant-policy.md`) throws
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../../src/schema/v2/loader.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../../src/schema/v2/loader.ts"],"names":[],"mappings":"AAIA,OAAO,EAAsB,KAAK,YAAY,EAAE,MAAM,eAAe,CAAC;AACtE,OAAO,KAAK,EACV,kBAAkB,EAInB,MAAM,iBAAiB,CAAC;AAezB;;;;;;GAMG;AACH,MAAM,MAAM,eAAe,GAAG;IAC5B,OAAO,EAAE,IAAI,CAAC;IACd,qBAAqB;IACrB,QAAQ,EAAE,YAAY,CAAC;IACvB,0EAA0E;IAC1E,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,+DAA+D;IAC/D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;;OAIG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,kBAAkB,CAYlE;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,kBAAkB,CAqC3D"}
|