@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/README.md
CHANGED
|
@@ -21,7 +21,7 @@ pnpm add @askdb/ai
|
|
|
21
21
|
|
|
22
22
|
`ai` is a **peer dependency** (`^6.0.0 || ^7.0.51`: AI SDK 6, or 7.0.51 and later), not a bundled dependency: `ask()` receives a `LanguageModel` your app constructs, so core must use the same `ai` instance your app does. Hosts on AI SDK 6 (e.g. `@ai-sdk/openai@3`) and AI SDK 7 (`@ai-sdk/openai@4`) are both supported. The config-driven path (`@askdb/ai` and `@askdb/client`) currently requires AI SDK 7.
|
|
23
23
|
|
|
24
|
-
`ai` is a required peer, not an optional one, and core loads it at import time. So any package that depends on `@askdb/core` needs `ai` installed, even for introspection only. That covers `@askdb/client`, `@askdb/
|
|
24
|
+
`ai` is a required peer, not an optional one, and core loads it at import time. So any package that depends on `@askdb/core` needs `ai` installed, even for introspection only. That covers `@askdb/client`, `@askdb/introspect`, the engine packages, `@askdb/prisma`, `@askdb/enrich` and `@askdb/rag`. npm 7+ and pnpm install the missing peer for you. Yarn doesn't, so add `ai` yourself. ADR 0006 records why (2026-09 amendment).
|
|
25
25
|
|
|
26
26
|
`@askdb/core` itself does not depend on `pg`. The optional `pg` peer lives on `@askdb/postgres` for live Postgres introspection.
|
|
27
27
|
|
|
@@ -87,10 +87,8 @@ await pool.query(result.sql); // ready to run
|
|
|
87
87
|
await pool.query(result.unboundSql!, result.params); // driver binding
|
|
88
88
|
|
|
89
89
|
// Render a form from result.parameters, then rebind locally — no model call.
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
":tenant_agency_ids": authorizedAgencyIds,
|
|
93
|
-
});
|
|
90
|
+
// The guardrails run again on the template under this schema and scope.
|
|
91
|
+
const rebound = bindPreparedQuery(result.preparedQuery!, { state_name: "Utah" }, { schema, tenantScope });
|
|
94
92
|
await pool.query(rebound.sql);
|
|
95
93
|
```
|
|
96
94
|
|
|
@@ -99,7 +97,7 @@ Key rules:
|
|
|
99
97
|
- `parameterize` defaults to **true**. Set `parameterize: false` when the extra output tokens are not worth it.
|
|
100
98
|
- If the model's extra blocks are missing or inconsistent, the extras are omitted and `result.sql` is unaffected. No new error reaches a caller who does not call `bindPreparedQuery()`.
|
|
101
99
|
- The model decides what to parameterize, so a mistake changes the *form*, not the query. Constrain form inputs using returned `type` and `description`.
|
|
102
|
-
- `bindPreparedQuery()`
|
|
100
|
+
- `bindPreparedQuery(prepared, values, { schema, tenantScope?, sensitiveGuardrailMode?, acceptWarnings? })` re-runs the read-only, tenant and sensitive checks on the stored template under the schema, scope and modes you pass, then binds. Tenant IDs come from `tenantScope`, never from `values`. Under a policy with `enforcement: warn`, a template that fails the tenant check is refused unless `acceptWarnings` includes `"tenant"`. Authorizing `tenantScope` is the host's job, exactly as for `ask()`. Expand a `subtree` scope with `expandTenantScope()` first.
|
|
103
101
|
- Callers using the new fields must execute with `params`, not `tenantParams`.
|
|
104
102
|
- List parameters are arity-stable in `unboundSql` only on PostgreSQL/CockroachDB (`= ANY($n)`); elsewhere a changed list length changes the marker count — rebind through `bindPreparedQuery()` rather than swapping the array.
|
|
105
103
|
- Markers: `$N` (Postgres/CockroachDB), `?` (MySQL/MariaDB/SQLite), `@pN` (SQL Server, 0-based). Map values via `parameters[].markers` for SQL Server.
|
|
@@ -107,7 +105,8 @@ Key rules:
|
|
|
107
105
|
## What you get
|
|
108
106
|
|
|
109
107
|
- `ask({ question, schema, model, dialect })` — generate checked SQL (plus optional `unboundSql` / `params` / `parameters` / `preparedQuery`).
|
|
110
|
-
- `bindPreparedQuery(prepared, values)` —
|
|
108
|
+
- `bindPreparedQuery(prepared, values, guardrails)` — local rebind of a `PreparedQuery` (no model call), re-checked under the given schema and tenant scope.
|
|
109
|
+
- `expandTenantScope(policy, scope, resolveTenantDescendants)` — the `subtree` expansion `ask()` runs, for a rebind.
|
|
111
110
|
- `AskDbLanguageModel` — AskDB's public name for the AI SDK language model contract.
|
|
112
111
|
- `AskDialect` — the dialect adapter contract. `@askdb/postgres` exports a ready-made one.
|
|
113
112
|
- `loadSchema(path)` — load a Schema v2 directory, bundled JSON, or `schema.json` path.
|
package/dist/ask.d.ts
CHANGED
|
@@ -7,8 +7,11 @@ import type { Retriever } from "./retrieval/types.js";
|
|
|
7
7
|
import type { TenantScope } from "./schema/v2/tenant-policy.js";
|
|
8
8
|
import { type BuiltInDialectId, type DialectSpec } from "./sql/dialect-spec.js";
|
|
9
9
|
import { type TenantSqlOutputMode, type TenantBinding } from "./sql/tenant-placeholders.js";
|
|
10
|
+
import { type ResolveTenantDescendants, type TenantIdsByRoot } from "./sql/tenant-scope-expand.js";
|
|
10
11
|
import { type SensitiveGuardrailMode, type SensitiveGuardrailResult } from "./sql/sensitive-guardrail.js";
|
|
12
|
+
import { type GuardrailVerdict } from "./errors.js";
|
|
11
13
|
import { type PreparedQuery, type QueryParameterBinding, type QueryParamSlot } from "./sql/bind.js";
|
|
14
|
+
export type { ResolveTenantDescendants, TenantIdsByRoot };
|
|
12
15
|
/** Options forwarded to a dialect's generator. Stable across dialects. */
|
|
13
16
|
export type AskDialectGenerateOptions = {
|
|
14
17
|
logger?: AskDbLogger;
|
|
@@ -39,9 +42,11 @@ export type AskDialectGenerateResult = {
|
|
|
39
42
|
explain?: unknown;
|
|
40
43
|
/**
|
|
41
44
|
* Optional tenant guardrail result from a custom generator. When the schema has a
|
|
42
|
-
* tenant policy,
|
|
43
|
-
* `
|
|
44
|
-
*
|
|
45
|
+
* tenant policy, its warnings become tenant findings (`form: "generator"`) next to
|
|
46
|
+
* `ask()`'s own check of `sql` and `unboundNamedSql`, decided under the policy's
|
|
47
|
+
* `enforcement`; `passed: false` with no warnings becomes one `UNPROVABLE_SCOPE`
|
|
48
|
+
* finding. It can add findings but never replace or relax that check. Without a tenant
|
|
49
|
+
* policy it is passed through to `result.tenantGuardrail` unchanged.
|
|
45
50
|
*/
|
|
46
51
|
tenantGuardrail?: import("./sql/tenant-guardrail.js").TenantGuardrailResult;
|
|
47
52
|
usage?: AskUsage;
|
|
@@ -67,8 +72,10 @@ export type AskDialectGenerateResult = {
|
|
|
67
72
|
* policy, `ask()` runs the tenant guardrail on the returned `sql` (and
|
|
68
73
|
* `unboundNamedSql`), with its `:tenant_<root>_ids` placeholders still in place,
|
|
69
74
|
* then substitutes them, regardless of dialect; `strict` policies throw
|
|
70
|
-
* `TenantGuardrailError`. A `tenantGuardrail` your
|
|
71
|
-
*
|
|
75
|
+
* `TenantGuardrailError`. A `tenantGuardrail` your generator returns adds
|
|
76
|
+
* findings to that check (`form: "generator"`), never replaces it.
|
|
77
|
+
* - The sensitive-identifier check runs on your SQL too, unless
|
|
78
|
+
* `sensitiveGuardrailMode` is `"off"`.
|
|
72
79
|
*/
|
|
73
80
|
export type AskDialect = {
|
|
74
81
|
generate(question: string, schema: AnyNormalizedSchema, model: AskDbLanguageModel, options?: AskDialectGenerateOptions): Promise<AskDialectGenerateResult>;
|
|
@@ -92,28 +99,6 @@ export type AskGenerateDeps = {
|
|
|
92
99
|
*/
|
|
93
100
|
providerOptions?: Record<string, unknown>;
|
|
94
101
|
};
|
|
95
|
-
/**
|
|
96
|
-
* A subtree's IDs grouped by tenant root: each key is a root table id from the
|
|
97
|
-
* tenant policy (`"table:public.clients"`), and its value holds IDs of that root's
|
|
98
|
-
* own `tenantIdColumn`, never IDs of another root.
|
|
99
|
-
*
|
|
100
|
-
* Root tables have separate ID spaces, so client `5` and agency `5` are different
|
|
101
|
-
* tenants. Keying the IDs by root lets `ask()` bind each root's IDs to that root's
|
|
102
|
-
* own `:tenant_<label>_ids` placeholder.
|
|
103
|
-
*/
|
|
104
|
-
export type TenantIdsByRoot = Readonly<Record<string, readonly string[]>>;
|
|
105
|
-
/**
|
|
106
|
-
* Host callback that expands a `subtree` tenant scope. Given the tenant root id and
|
|
107
|
-
* the seed IDs, return the subtree's IDs grouped by root ({@link TenantIdsByRoot}):
|
|
108
|
-
*
|
|
109
|
-
* - under `tenantRoot`: the seeds and any same-table descendants (e.g. child
|
|
110
|
-
* agencies through `agencies.parent_agency_id`);
|
|
111
|
-
* - under each descendant root the policy declares (`roots[].parent` or
|
|
112
|
-
* `hierarchy[]`): that root's IDs in the subtree.
|
|
113
|
-
*
|
|
114
|
-
* Pass it to `ask()` as {@link AskPipelineOptions.resolveTenantDescendants}.
|
|
115
|
-
*/
|
|
116
|
-
export type ResolveTenantDescendants = (tenantRoot: string, seedIds: readonly string[]) => Promise<TenantIdsByRoot> | TenantIdsByRoot;
|
|
117
102
|
export type AskPipelineOptions = {
|
|
118
103
|
question: string;
|
|
119
104
|
schema: AnyNormalizedSchema;
|
|
@@ -217,8 +202,9 @@ export type AskPipelineOptions = {
|
|
|
217
202
|
* `askdb.pipeline.sensitive_sql_warning` is logged, but `ask()` still resolves.
|
|
218
203
|
* `"strict"` throws {@link SensitiveReferenceError} instead. `"off"` skips the check.
|
|
219
204
|
*
|
|
220
|
-
*
|
|
221
|
-
*
|
|
205
|
+
* Covers SQL produced by *this* call. A rebind with `bindPreparedQuery()` runs the
|
|
206
|
+
* check again on the stored template; hosts that store and replay `sql` itself should
|
|
207
|
+
* call `validateSensitiveReferences` on that path.
|
|
222
208
|
*/
|
|
223
209
|
sensitiveGuardrailMode?: SensitiveGuardrailMode | "off";
|
|
224
210
|
};
|
|
@@ -247,18 +233,24 @@ export type AskPipelineResult = {
|
|
|
247
233
|
preparedQuery?: PreparedQuery;
|
|
248
234
|
explain?: unknown;
|
|
249
235
|
/**
|
|
250
|
-
*
|
|
251
|
-
*
|
|
236
|
+
* Every guardrail finding for the model's SQL, checked before AskDB renders it (its
|
|
237
|
+
* bound `sql` and `sql-unbound` block, with the `:tenant_<root>_ids` placeholders still
|
|
238
|
+
* in place), and the outcome: `allow`, or `warn` when a `warn`-mode check found
|
|
239
|
+
* something. A `deny` throws the check's typed error instead, with this verdict on it.
|
|
240
|
+
*/
|
|
241
|
+
verdict: GuardrailVerdict;
|
|
242
|
+
/**
|
|
243
|
+
* Sensitive-identifier guardrail result, derived from {@link verdict}. Present when the
|
|
244
|
+
* schema declares at least one `sensitive` table/column and `sensitiveGuardrailMode` is
|
|
245
|
+
* not `"off"`.
|
|
252
246
|
*/
|
|
253
247
|
sensitiveGuardrail?: SensitiveGuardrailResult;
|
|
254
248
|
/**
|
|
255
|
-
* Tenant guardrail result
|
|
256
|
-
*
|
|
257
|
-
*
|
|
258
|
-
*
|
|
259
|
-
*
|
|
260
|
-
* throws `TenantGuardrailError` instead, so a returned result is always `passed`
|
|
261
|
-
* under `strict`.
|
|
249
|
+
* Tenant guardrail result, derived from {@link verdict}: its tenant findings, once each.
|
|
250
|
+
* `sql` and `unboundSql` differ from the checked forms only by the substituted tenant IDs
|
|
251
|
+
* or markers. Present whenever the schema has a tenant policy, for every dialect form.
|
|
252
|
+
* In `strict` mode a failure throws `TenantGuardrailError` instead, so a returned result
|
|
253
|
+
* is always `passed` under `strict`.
|
|
262
254
|
*/
|
|
263
255
|
tenantGuardrail?: import("./sql/tenant-guardrail.js").TenantGuardrailResult;
|
|
264
256
|
/**
|
package/dist/ask.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ask.d.ts","sourceRoot":"","sources":["../src/ask.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,IAAI,mBAAmB,EAAE,MAAM,IAAI,CAAC;AAC9D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACxD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAE7D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAC7D,OAAO,EAAsB,KAAK,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACxE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAKtD,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"ask.d.ts","sourceRoot":"","sources":["../src/ask.ts"],"names":[],"mappings":"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"}
|