@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.
Files changed (121) hide show
  1. package/README.md +15 -12
  2. package/dist/ask.d.ts +39 -38
  3. package/dist/ask.d.ts.map +1 -1
  4. package/dist/ask.js +135 -309
  5. package/dist/ask.js.map +1 -1
  6. package/dist/enrichment/index.d.ts +1 -1
  7. package/dist/enrichment/index.d.ts.map +1 -1
  8. package/dist/enrichment/prompt.d.ts +3 -3
  9. package/dist/enrichment/prompt.d.ts.map +1 -1
  10. package/dist/enrichment/prompt.js +41 -17
  11. package/dist/enrichment/prompt.js.map +1 -1
  12. package/dist/enrichment/suggest.d.ts +2 -2
  13. package/dist/enrichment/suggest.d.ts.map +1 -1
  14. package/dist/enrichment/suggest.js +6 -2
  15. package/dist/enrichment/suggest.js.map +1 -1
  16. package/dist/enrichment/types.d.ts +20 -1
  17. package/dist/enrichment/types.d.ts.map +1 -1
  18. package/dist/errors.d.ts +68 -1
  19. package/dist/errors.d.ts.map +1 -1
  20. package/dist/errors.js +21 -0
  21. package/dist/errors.js.map +1 -1
  22. package/dist/index.d.ts +8 -5
  23. package/dist/index.d.ts.map +1 -1
  24. package/dist/index.js +6 -3
  25. package/dist/index.js.map +1 -1
  26. package/dist/retrieval/synthesize-ddl.d.ts +11 -1
  27. package/dist/retrieval/synthesize-ddl.d.ts.map +1 -1
  28. package/dist/retrieval/synthesize-ddl.js +39 -34
  29. package/dist/retrieval/synthesize-ddl.js.map +1 -1
  30. package/dist/schema/normalize.d.ts +16 -0
  31. package/dist/schema/normalize.d.ts.map +1 -1
  32. package/dist/schema/normalize.js +1 -0
  33. package/dist/schema/normalize.js.map +1 -1
  34. package/dist/schema/v2/format.d.ts +35 -1
  35. package/dist/schema/v2/format.d.ts.map +1 -1
  36. package/dist/schema/v2/format.js +69 -22
  37. package/dist/schema/v2/format.js.map +1 -1
  38. package/dist/schema/v2/index.d.ts +2 -0
  39. package/dist/schema/v2/index.d.ts.map +1 -1
  40. package/dist/schema/v2/index.js +1 -0
  41. package/dist/schema/v2/index.js.map +1 -1
  42. package/dist/schema/v2/loader.d.ts +30 -4
  43. package/dist/schema/v2/loader.d.ts.map +1 -1
  44. package/dist/schema/v2/loader.js +90 -28
  45. package/dist/schema/v2/loader.js.map +1 -1
  46. package/dist/schema/v2/mentions.d.ts +43 -0
  47. package/dist/schema/v2/mentions.d.ts.map +1 -0
  48. package/dist/schema/v2/mentions.js +101 -0
  49. package/dist/schema/v2/mentions.js.map +1 -0
  50. package/dist/schema/v2/normalized.d.ts +5 -0
  51. package/dist/schema/v2/normalized.d.ts.map +1 -1
  52. package/dist/schema/v2/tenant-policy.d.ts +2 -2
  53. package/dist/sql/bind.d.ts +18 -5
  54. package/dist/sql/bind.d.ts.map +1 -1
  55. package/dist/sql/bind.js +36 -15
  56. package/dist/sql/bind.js.map +1 -1
  57. package/dist/sql/dialect-spec.d.ts +27 -1
  58. package/dist/sql/dialect-spec.d.ts.map +1 -1
  59. package/dist/sql/dialect-spec.js +20 -1
  60. package/dist/sql/dialect-spec.js.map +1 -1
  61. package/dist/sql/generate.d.ts +19 -11
  62. package/dist/sql/generate.d.ts.map +1 -1
  63. package/dist/sql/generate.js +72 -34
  64. package/dist/sql/generate.js.map +1 -1
  65. package/dist/sql/guardrail-decide.d.ts +56 -0
  66. package/dist/sql/guardrail-decide.d.ts.map +1 -0
  67. package/dist/sql/guardrail-decide.js +161 -0
  68. package/dist/sql/guardrail-decide.js.map +1 -0
  69. package/dist/sql/guardrails.d.ts +52 -0
  70. package/dist/sql/guardrails.d.ts.map +1 -0
  71. package/dist/sql/guardrails.js +100 -0
  72. package/dist/sql/guardrails.js.map +1 -0
  73. package/dist/sql/index.d.ts +4 -2
  74. package/dist/sql/index.d.ts.map +1 -1
  75. package/dist/sql/index.js +4 -2
  76. package/dist/sql/index.js.map +1 -1
  77. package/dist/sql/lexer.d.ts +13 -0
  78. package/dist/sql/lexer.d.ts.map +1 -1
  79. package/dist/sql/lexer.js +42 -7
  80. package/dist/sql/lexer.js.map +1 -1
  81. package/dist/sql/prompt-identifiers.d.ts +20 -0
  82. package/dist/sql/prompt-identifiers.d.ts.map +1 -0
  83. package/dist/sql/prompt-identifiers.js +64 -0
  84. package/dist/sql/prompt-identifiers.js.map +1 -0
  85. package/dist/sql/prompt.d.ts +7 -1
  86. package/dist/sql/prompt.d.ts.map +1 -1
  87. package/dist/sql/prompt.js +24 -3
  88. package/dist/sql/prompt.js.map +1 -1
  89. package/dist/sql/rebind.d.ts +89 -0
  90. package/dist/sql/rebind.d.ts.map +1 -0
  91. package/dist/sql/rebind.js +175 -0
  92. package/dist/sql/rebind.js.map +1 -0
  93. package/dist/sql/reserved-words.d.ts +15 -0
  94. package/dist/sql/reserved-words.d.ts.map +1 -0
  95. package/dist/sql/reserved-words.js +102 -0
  96. package/dist/sql/reserved-words.js.map +1 -0
  97. package/dist/sql/sensitive-guardrail.d.ts +7 -2
  98. package/dist/sql/sensitive-guardrail.d.ts.map +1 -1
  99. package/dist/sql/sensitive-guardrail.js +20 -37
  100. package/dist/sql/sensitive-guardrail.js.map +1 -1
  101. package/dist/sql/tenant-guardrail.d.ts +3 -14
  102. package/dist/sql/tenant-guardrail.d.ts.map +1 -1
  103. package/dist/sql/tenant-guardrail.js +16 -65
  104. package/dist/sql/tenant-guardrail.js.map +1 -1
  105. package/dist/sql/tenant-placeholders.d.ts +12 -23
  106. package/dist/sql/tenant-placeholders.d.ts.map +1 -1
  107. package/dist/sql/tenant-placeholders.js +46 -27
  108. package/dist/sql/tenant-placeholders.js.map +1 -1
  109. package/dist/sql/tenant-scope-expand.d.ts +46 -0
  110. package/dist/sql/tenant-scope-expand.d.ts.map +1 -0
  111. package/dist/sql/tenant-scope-expand.js +101 -0
  112. package/dist/sql/tenant-scope-expand.js.map +1 -0
  113. package/dist/sql/tsql-batch.d.ts +56 -0
  114. package/dist/sql/tsql-batch.d.ts.map +1 -0
  115. package/dist/sql/tsql-batch.js +246 -0
  116. package/dist/sql/tsql-batch.js.map +1 -0
  117. package/dist/sql/validate.d.ts +16 -3
  118. package/dist/sql/validate.d.ts.map +1 -1
  119. package/dist/sql/validate.js +43 -8
  120. package/dist/sql/validate.js.map +1 -1
  121. 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
- list.push(p);
62
+ shown(p, asIs, list);
47
63
  cqlPerTable.set(tid, list);
48
64
  }
49
65
  break;
50
66
  }
51
67
  case "question": {
52
- questions.push(p);
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
- concepts.push(p);
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
- relationships.push(p);
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
- tenantPolicyChunks.push(p);
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 qualifiedName = `${t.schema}.${t.name}`;
88
- const aliasNote = !t.sensitive && t.aliases?.length ? ` -- aliases: ${t.aliases.join(", ")}` : "";
89
- lines.push(`TABLE ${qualifiedName}${aliasNote}`);
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 extras = [];
108
- if (c.aliases?.length)
109
- extras.push(`aliases: ${c.aliases.join(", ")}`);
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 cql of cqlList) {
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(`-- ${stripHeaderLine(r.text).replace(/\n+/g, " ")}`);
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(`-- ${stripHeaderLine(c.text).replace(/\n+/g, "; ")}`);
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(`-- ${stripHeaderLine(q.text).replace(/\n+/g, " ")}`);
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(`-- ${stripHeaderLine(tp.text).replace(/\n+/g, "; ")}`);
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":"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"}
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;CAC9C,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;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,CAuDA;AAED,0GAA0G;AAC1G,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,gBAAgB,EAAE,OAAO,CAAC,EAAE,oBAAoB,GAAG,MAAM,CAEtG"}
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"}
@@ -80,6 +80,7 @@ export function formatSchemaForNlToSql(schema, options = {}) {
80
80
  sensitiveTableStubCount,
81
81
  listedSensitiveColumnCount,
82
82
  untrackedTableCount: 0,
83
+ mentionDroppedCount: 0,
83
84
  },
84
85
  };
85
86
  }
@@ -1 +1 @@
1
- {"version":3,"file":"normalize.js","sourceRoot":"","sources":["../../src/schema/normalize.ts"],"names":[],"mappings":"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"}
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;AAEtF;;;;;;;GAOG;AACH,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,kBAAkB,EAC1B,OAAO,GAAE,oBAAyB,GACjC;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,wBAAwB,CAAA;CAAE,CA6ElD"}
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"}
@@ -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 — always qualify with database schema name; add alias annotation when present
22
- const qualifiedName = `${t.schema}.${t.name}`;
23
- const aliasNote = !t.sensitive && t.aliases?.length
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
- function buildColumnLine(c, colSensitive, tableSensitive) {
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 extras = [];
92
- if (c.aliases?.length)
93
- extras.push(`aliases: ${c.aliases.join(", ")}`);
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":"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"}
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"}
@@ -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;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;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"}
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 — loaded exactly like the
16
- * enclosing directory, including sibling `tables/*.md`, `concepts.md`, and
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":"AAKA,OAAO,KAAK,EACV,kBAAkB,EAInB,MAAM,iBAAiB,CAAC;AAwBzB;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,kBAAkB,CAYlE;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,kBAAkB,CA+B3D"}
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"}