🎩 You're Invited:Meet the Socket team at Black Hat in Las Vegas, August 3-6.RSVP
Sign In

@valv/core

Package Overview
Dependencies
Maintainers
2
Versions
16
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@valv/core - npm Package Compare versions

Comparing version
0.8.2
to
0.9.0
+66
dist/grammar.d.ts
import { type FnDef } from "./functions";
import type { Query, Expr, SelectItem, OrderBy, GroupByItem, Insert, Update, Delete } from "./ast";
export type ScalarInput = string | number | boolean | null;
export interface FilterOperators {
equals?: ScalarInput;
not?: ScalarInput;
gt?: ScalarInput;
gte?: ScalarInput;
lt?: ScalarInput;
lte?: ScalarInput;
in?: ScalarInput[];
notIn?: ScalarInput[];
contains?: string;
startsWith?: string;
endsWith?: string;
mode?: "default" | "insensitive";
}
export interface FilterInput {
[field: string]: ScalarInput | FilterOperators | FilterInput | FilterInput[] | undefined;
AND?: FilterInput | FilterInput[];
OR?: FilterInput[];
NOT?: FilterInput | FilterInput[];
}
export type FnArgInput = ScalarInput | {
col: string;
} | FilterInput | Array<ScalarInput | {
col: string;
} | FilterInput>;
export type SelectValue = true | {
col: string;
} | Record<string, FnArgInput | true>;
export type SelectInput = Record<string, SelectValue>;
export type OrderByInput = Record<string, "asc" | "desc"> | Array<Record<string, "asc" | "desc">>;
export interface QueryInput {
from: string;
select: SelectInput;
where?: FilterInput;
groupBy?: string[];
orderBy?: OrderByInput;
take?: number;
/** Alias for `take`. */
limit?: number;
}
export interface InsertInput {
from: string;
data: Record<string, ScalarInput>;
}
export interface UpdateInput {
from: string;
data: Record<string, ScalarInput>;
where: FilterInput;
}
export interface DeleteInput {
from: string;
where: FilterInput;
}
export declare function validateExpr(input: unknown): Expr;
export declare function parseFilter(input: unknown): Expr | undefined;
export declare function parseSelect(input: unknown, functions: Record<string, FnDef>): SelectItem[];
export declare function parseGroupBy(input: unknown): GroupByItem[];
export declare function parseOrderBy(input: unknown): OrderBy[];
export declare function parseQuery(input: unknown, functions: Record<string, FnDef>): Query;
export declare function parseInsert(input: unknown): Insert;
export declare function parseUpdate(input: unknown): Update;
export declare function parseDelete(input: unknown): Delete;
//# sourceMappingURL=grammar.d.ts.map
{"version":3,"file":"grammar.d.ts","sourceRoot":"","sources":["../src/grammar.ts"],"names":[],"mappings":"AACA,OAAO,EAA8B,KAAK,KAAK,EAAE,MAAM,aAAa,CAAA;AACpE,OAAO,KAAK,EACV,KAAK,EACL,IAAI,EACJ,UAAU,EACV,OAAO,EACP,WAAW,EAEX,MAAM,EACN,MAAM,EACN,MAAM,EAGP,MAAM,OAAO,CAAA;AAQd,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAA;AAE1D,MAAM,WAAW,eAAe;IAC9B,MAAM,CAAC,EAAE,WAAW,CAAA;IACpB,GAAG,CAAC,EAAE,WAAW,CAAA;IACjB,EAAE,CAAC,EAAE,WAAW,CAAA;IAChB,GAAG,CAAC,EAAE,WAAW,CAAA;IACjB,EAAE,CAAC,EAAE,WAAW,CAAA;IAChB,GAAG,CAAC,EAAE,WAAW,CAAA;IACjB,EAAE,CAAC,EAAE,WAAW,EAAE,CAAA;IAClB,KAAK,CAAC,EAAE,WAAW,EAAE,CAAA;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,IAAI,CAAC,EAAE,SAAS,GAAG,aAAa,CAAA;CACjC;AAKD,MAAM,WAAW,WAAW;IAC1B,CAAC,KAAK,EAAE,MAAM,GAAG,WAAW,GAAG,eAAe,GAAG,WAAW,GAAG,WAAW,EAAE,GAAG,SAAS,CAAA;IACxF,GAAG,CAAC,EAAE,WAAW,GAAG,WAAW,EAAE,CAAA;IACjC,EAAE,CAAC,EAAE,WAAW,EAAE,CAAA;IAClB,GAAG,CAAC,EAAE,WAAW,GAAG,WAAW,EAAE,CAAA;CAClC;AAID,MAAM,MAAM,UAAU,GAClB,WAAW,GACX;IAAE,GAAG,EAAE,MAAM,CAAA;CAAE,GACf,WAAW,GACX,KAAK,CAAC,WAAW,GAAG;IAAE,GAAG,EAAE,MAAM,CAAA;CAAE,GAAG,WAAW,CAAC,CAAA;AAItD,MAAM,MAAM,WAAW,GAAG,IAAI,GAAG;IAAE,GAAG,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI,CAAC,CAAA;AAEpF,MAAM,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAA;AAErD,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,GAAG,MAAM,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,GAAG,MAAM,CAAC,CAAC,CAAA;AAEjG,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,WAAW,CAAA;IACnB,KAAK,CAAC,EAAE,WAAW,CAAA;IACnB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;IAClB,OAAO,CAAC,EAAE,YAAY,CAAA;IACtB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,wBAAwB;IACxB,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAA;CAClC;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAA;IACjC,KAAK,EAAE,WAAW,CAAA;CACnB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,WAAW,CAAA;CACnB;AAuDD,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CAwCjD;AAoBD,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,GAAG,SAAS,CAK5D;AAqID,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,GAAG,UAAU,EAAE,CAc1F;AAgFD,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,WAAW,EAAE,CAW1D;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,EAAE,CAgBtD;AAID,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,GAAG,KAAK,CAwBlF;AAID,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAGlD;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAMlD;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAMlD"}
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.validateExpr = validateExpr;
exports.parseFilter = parseFilter;
exports.parseSelect = parseSelect;
exports.parseGroupBy = parseGroupBy;
exports.parseOrderBy = parseOrderBy;
exports.parseQuery = parseQuery;
exports.parseInsert = parseInsert;
exports.parseUpdate = parseUpdate;
exports.parseDelete = parseDelete;
const errors_1 = require("./errors");
const functions_1 = require("./functions");
// The Prisma-idiomatic input grammar: the surface the model actually writes,
// parsed into the internal IR (ast.ts). Everything here is desugaring — a
// familiar Prisma/SQL shape in, the tagged tree out — so the model rides shapes
// it has seen a million times while validate/inject/emit keep operating on the
// same provable IR. Rejections are ValidationErrors phrased so a retry can fix
// the call.
const IDENT = /^[A-Za-z0-9_]+$/;
const MAX_SELECT = 32;
const MAX_ORDER_BY = 32;
const MAX_REL_DEPTH = 8; // structural ceiling; the friendly join limit is in joins.ts
// Prisma reserves the capitalized logical keywords; every other key in a filter
// object is a column path. A column literally named AND/OR/NOT is unreachable —
// documented, not defended.
const AND = "AND";
const OR = "OR";
const NOT = "NOT";
const QUERY_KEYS = new Set(["from", "where", "select", "groupBy", "orderBy", "take", "limit"]);
function isObject(v) {
return typeof v === "object" && v !== null && !Array.isArray(v);
}
function isScalar(v) {
return v === null || ["string", "number", "boolean"].includes(typeof v);
}
// A dotted path "customer.region" → the joined column { col: "region",
// rel: ["customer"] }; a bare "status" → a root column. Segments are relation
// names then the column; each must be a plain identifier (so a dot is always a
// separator, never part of a name).
function colRef(path) {
const parts = path.split(".");
if (parts.length > MAX_REL_DEPTH + 1 || parts.some((p) => !IDENT.test(p))) {
throw new errors_1.ValidationError(`Invalid column reference "${path}".`);
}
const name = parts.pop();
return parts.length ? { col: name, rel: parts } : { col: name };
}
function col(ref) {
return ref.rel ? { kind: "col", name: ref.col, rel: ref.rel } : { kind: "col", name: ref.col };
}
const value = (v) => ({ kind: "value", value: v });
const CMP_OPS = new Set(["=", "!=", ">", "<", ">=", "<=", "like", "ilike"]);
// Structural validation of a raw tagged Expr — used only for developer-authored
// policy predicates (the one place a tagged tree is still an input; the model
// never writes this shape). Returns the typed node or throws.
function validateExpr(input) {
if (!isObject(input) || typeof input.kind !== "string") {
throw new errors_1.ValidationError("Expression must be a tagged node.");
}
switch (input.kind) {
case "col": {
if (typeof input.name !== "string")
throw new errors_1.ValidationError("A col node needs a string `name`.");
if (input.rel !== undefined && !isStringArray(input.rel)) {
throw new errors_1.ValidationError("A col node's `rel` must be an array of strings.");
}
return input.rel
? { kind: "col", name: input.name, rel: input.rel }
: { kind: "col", name: input.name };
}
case "value":
return { kind: "value", value: input.value };
case "null":
if (typeof input.negated !== "boolean")
throw new errors_1.ValidationError("A null node needs a boolean `negated`.");
return { kind: "null", expr: validateExpr(input.expr), negated: input.negated };
case "cmp":
if (typeof input.op !== "string" || !CMP_OPS.has(input.op))
throw new errors_1.ValidationError("Invalid comparison operator.");
return {
kind: "cmp",
op: input.op,
left: validateExpr(input.left),
right: validateExpr(input.right),
};
case "and":
case "or":
if (!Array.isArray(input.args) || input.args.length === 0)
throw new errors_1.ValidationError(`An ${input.kind} node needs args.`);
return { kind: input.kind, args: input.args.map(validateExpr) };
case "not":
return { kind: "not", arg: validateExpr(input.arg) };
default:
throw new errors_1.ValidationError(`Unknown expression kind "${input.kind}".`);
}
}
function isStringArray(v) {
return Array.isArray(v) && v.every((s) => typeof s === "string");
}
function cmp(op, ref, v) {
return { kind: "cmp", op, left: col(ref), right: value(v) };
}
// col IS NULL / col IS NOT NULL — a null is not a comparable value in SQL, so it
// gets its own node rather than a `= NULL` that silently matches nothing.
function nullCheck(ref, negated) {
return { kind: "null", expr: col(ref), negated };
}
// ── where: Prisma filter → Expr ──────────────────────────────────────────────
// Top level: an absent or empty `{}` filter means "no constraint" (the policy
// scope still applies). Nested filters must be non-empty.
function parseFilter(input) {
if (input === undefined || input === null)
return undefined;
if (!isObject(input))
throw new errors_1.ValidationError("`where` must be a filter object.");
if (Object.keys(input).length === 0)
return undefined;
return filterToExpr(input);
}
// A filter object is an implicit AND over its entries: field conditions plus the
// AND/OR/NOT logical keys.
function filterToExpr(input) {
const preds = [];
for (const [key, val] of Object.entries(input)) {
if (key === AND)
preds.push(all(parseFilterList(val, key)));
else if (key === OR)
preds.push({ kind: "or", args: parseFilterList(val, key) });
else if (key === NOT)
preds.push({ kind: "not", arg: all(parseFilterList(val, key)) });
else
preds.push(fieldConditionToExpr(colRef(key), val));
}
return all(preds);
}
function all(preds) {
if (preds.length === 0)
throw new errors_1.ValidationError("Empty filter object.");
return preds.length === 1 ? preds[0] : { kind: "and", args: preds };
}
// AND/OR/NOT take a filter or an array of filters.
function parseFilterList(val, key) {
const list = Array.isArray(val) ? val : [val];
if (list.length === 0)
throw new errors_1.ValidationError(`"${key}" needs at least one filter.`);
return list.map((f) => {
if (!isObject(f) || Object.keys(f).length === 0) {
throw new errors_1.ValidationError(`"${key}" entries must be non-empty filter objects.`);
}
return filterToExpr(f);
});
}
// A field's value is either null (IS NULL), a scalar (equality), or an operator
// object.
function fieldConditionToExpr(ref, cond) {
if (cond === null)
return nullCheck(ref, false);
if (isScalar(cond))
return cmp("=", ref, cond);
if (isObject(cond))
return operatorsToExpr(ref, cond);
throw new errors_1.ValidationError(`Filter on "${ref.col}" must be a value or an operator object like { gte: 100 } — use { in: [...] } for a list.`);
}
const RANGE = { gt: ">", gte: ">=", lt: "<", lte: "<=" };
const OPERATORS = "equals, not, gt, gte, lt, lte, in, notIn, contains, startsWith, endsWith, mode";
function operatorsToExpr(ref, ops) {
const insensitive = ops.mode === "insensitive";
const preds = [];
for (const [op, val] of Object.entries(ops)) {
if (op === "mode")
continue;
preds.push(operatorToExpr(ref, op, val, insensitive));
}
if (preds.length === 0)
throw new errors_1.ValidationError(`Empty filter for "${ref.col}".`);
return all(preds);
}
function operatorToExpr(ref, op, val, insensitive) {
if (op in RANGE) {
if (val === null || !isScalar(val))
throw new errors_1.ValidationError(`"${op}" on "${ref.col}" needs a non-null value.`);
return cmp(RANGE[op], ref, val);
}
switch (op) {
case "equals":
// { equals: null } / { not: null } are the explicit IS [NOT] NULL forms.
if (val === null)
return nullCheck(ref, false);
requireScalar(ref, op, val);
return cmp("=", ref, val);
case "not":
if (val === null)
return nullCheck(ref, true);
requireScalar(ref, op, val);
return cmp("!=", ref, val);
case "in":
return anyOf(ref, val, op);
case "notIn":
return { kind: "not", arg: anyOf(ref, val, op) };
case "contains":
return like(ref, val, (s) => `%${s}%`, insensitive);
case "startsWith":
return like(ref, val, (s) => `${s}%`, insensitive);
case "endsWith":
return like(ref, val, (s) => `%${s}`, insensitive);
default:
throw new errors_1.ValidationError(`Unknown operator "${op}" on "${ref.col}". Use one of: ${OPERATORS}.`);
}
}
function requireScalar(ref, op, val) {
if (!isScalar(val))
throw new errors_1.ValidationError(`"${op}" on "${ref.col}" needs a value.`);
}
// in / notIn desugar to an OR of equalities — no dedicated SQL IN node needed.
function anyOf(ref, val, op) {
if (!Array.isArray(val) || val.length === 0) {
throw new errors_1.ValidationError(`"${op}" on "${ref.col}" needs a non-empty array.`);
}
const eqs = val.map((v) => {
if (!isScalar(v))
throw new errors_1.ValidationError(`"${op}" on "${ref.col}" takes a list of values.`);
return cmp("=", ref, v);
});
return eqs.length === 1 ? eqs[0] : { kind: "or", args: eqs };
}
// contains/startsWith/endsWith map to LIKE/ILIKE. The user value is a literal
// substring, so its LIKE metacharacters are escaped (backslash is the default
// escape in Postgres, MySQL, and ClickHouse) — the model never writes raw `%`.
function like(ref, val, wrap, insensitive) {
if (typeof val !== "string")
throw new errors_1.ValidationError(`String filter on "${ref.col}" needs a string.`);
const escaped = val.replace(/[\\%_]/g, (c) => `\\${c}`);
return {
kind: "cmp",
op: insensitive ? "ilike" : "like",
left: col(ref),
right: value(wrap(escaped)),
};
}
// ── select: { alias: true | { col } | { fn: args } } → SelectItem[] ──────────
function parseSelect(input, functions) {
if (!isObject(input)) {
throw new errors_1.ValidationError('`select` is an object of output columns, e.g. { revenue: { sum: "total" } }.');
}
const aliases = Object.keys(input);
if (aliases.length === 0)
throw new errors_1.ValidationError("`select` must select at least one column.");
if (aliases.length > MAX_SELECT)
throw new errors_1.ValidationError(`\`select\` has too many columns (max ${MAX_SELECT}).`);
return aliases.map((alias) => {
if (!IDENT.test(alias))
throw new errors_1.ValidationError(`Invalid output name "${alias}".`);
return parseSelectItem(alias, input[alias], functions);
});
}
function parseSelectItem(alias, spec, functions) {
// `true` → the root column named by the key; its output name is the column
// name, so no explicit alias is needed.
if (spec === true)
return { col: alias };
if (!isObject(spec)) {
throw new errors_1.ValidationError(`\`select.${alias}\` must be true (a column), { col: "path" }, or a function like { sum: "amount" }.`);
}
const keys = Object.keys(spec);
if (keys.length !== 1) {
throw new errors_1.ValidationError(`\`select.${alias}\` takes exactly one column or function.`);
}
const key = keys[0];
if (key === "col") {
if (typeof spec.col !== "string")
throw new errors_1.ValidationError(`\`select.${alias}.col\` must be a column path.`);
const ref = colRef(spec.col);
// Alias only when the output name differs from what emit would name it by
// default (the column name for a root column, "rel_col" for a joined one).
if (ref.rel)
return { col: ref.col, rel: ref.rel, as: alias };
return alias === ref.col ? { col: ref.col } : { col: ref.col, as: alias };
}
// hasOwn, never functions[key] — a prototype key ("constructor") must not
// resolve to an inherited member and be treated as a function.
const def = Object.prototype.hasOwnProperty.call(functions, key) ? functions[key] : undefined;
if (!def) {
throw new errors_1.ValidationError(`Unknown function "${key}" in \`select.${alias}\`. Use { col: "..." } for a plain column.`);
}
return { fn: key, args: parseFnArgs(key, def, spec[key]), as: alias };
}
function parseFnArgs(fn, def, raw) {
// true → no args (count → count(*)); a bare value → the single argument; an
// array → positional arguments.
const provided = raw === true ? [] : Array.isArray(raw) ? raw : [raw];
const min = (0, functions_1.requiredArgs)(def);
const max = def.args.length;
if (provided.length < min || provided.length > max) {
const want = min === max ? `${min}` : `${min}-${max}`;
throw new errors_1.ValidationError(`Function "${fn}" expects ${want} argument(s).`);
}
return provided.map((arg, i) => argToExpr(fn, def.args[i], arg));
}
// Route a positional argument by its signature: a column becomes a col node, a
// number/enum a value node, a predicate reuses the filter grammar. Knowing the
// signature is what lets the model write args bare — sum: "total",
// toStartOfInterval: ["ts", 1, "hour"] — with no per-argument tagging.
function argToExpr(fn, spec, raw) {
switch (spec.kind) {
case "column":
if (typeof raw === "string")
return col(colRef(raw));
if (isObject(raw) && typeof raw.col === "string")
return col(colRef(raw.col));
throw new errors_1.ValidationError(`Function "${fn}" expects a column name for that argument.`);
case "number":
if (typeof raw !== "number")
throw new errors_1.ValidationError(`Function "${fn}" expects a number for that argument.`);
return value(raw);
case "enum":
if (typeof raw !== "string")
throw new errors_1.ValidationError(`Function "${fn}" expects one of: ${spec.values.join(", ")}.`);
return value(raw);
case "predicate":
if (!isObject(raw))
throw new errors_1.ValidationError(`Function "${fn}" expects a filter object for that argument.`);
return filterToExpr(raw);
}
}
// ── groupBy / orderBy ────────────────────────────────────────────────────────
function parseGroupBy(input) {
if (!Array.isArray(input)) {
throw new errors_1.ValidationError("`groupBy` is an array of column names or select aliases.");
}
return input.map((g) => {
if (typeof g !== "string")
throw new errors_1.ValidationError("`groupBy` entries are strings.");
const ref = colRef(g);
// A bare name stays a string so it can resolve to a SELECT alias (a time
// bucket) or a column; a dotted path is unambiguously a joined column.
return ref.rel ? ref : g;
});
}
function parseOrderBy(input) {
const entries = Array.isArray(input) ? input : [input];
const out = [];
for (const entry of entries) {
if (!isObject(entry))
throw new errors_1.ValidationError('`orderBy` entries are { column: "asc" | "desc" }.');
for (const [path, dir] of Object.entries(entry)) {
if (dir !== "asc" && dir !== "desc") {
throw new errors_1.ValidationError(`Sort direction for "${path}" must be "asc" or "desc".`);
}
out.push({ ...colRef(path), dir });
}
}
if (out.length > MAX_ORDER_BY)
throw new errors_1.ValidationError(`\`orderBy\` has too many keys (max ${MAX_ORDER_BY}).`);
return out;
}
// ── top level ────────────────────────────────────────────────────────────────
function parseQuery(input, functions) {
if (!isObject(input))
throw new errors_1.ValidationError("A query must be an object.");
const unknownKey = Object.keys(input).find((k) => !QUERY_KEYS.has(k));
if (unknownKey) {
throw new errors_1.ValidationError(`Unknown query key "${unknownKey}". Use from, select, where, groupBy, orderBy, take.`);
}
const query = {
from: requireResource(input.from),
select: parseSelect(input.select, functions),
};
const where = parseFilter(input.where);
if (where)
query.where = where;
if (input.groupBy !== undefined)
query.groupBy = parseGroupBy(input.groupBy);
if (input.orderBy !== undefined)
query.orderBy = parseOrderBy(input.orderBy);
const take = input.take ?? input.limit;
if (take !== undefined) {
if (typeof take !== "number" || !Number.isInteger(take) || take <= 0) {
throw new errors_1.ValidationError("`take` must be a positive integer.");
}
query.limit = take;
}
return query;
}
// ── writes ───────────────────────────────────────────────────────────────────
function parseInsert(input) {
if (!isObject(input))
throw new errors_1.ValidationError("A create must be an object.");
return { from: requireResource(input.from), values: parseData(input.data) };
}
function parseUpdate(input) {
if (!isObject(input))
throw new errors_1.ValidationError("An update must be an object.");
const where = parseFilter(input.where);
if (!where)
throw new errors_1.ValidationError("`update` requires a `where` filter (no implicit all-rows).");
return { from: requireResource(input.from), set: parseData(input.data), where };
}
function parseDelete(input) {
if (!isObject(input))
throw new errors_1.ValidationError("A delete must be an object.");
const where = parseFilter(input.where);
if (!where)
throw new errors_1.ValidationError("`delete` requires a `where` filter (no implicit all-rows).");
return { from: requireResource(input.from), where };
}
function requireResource(from) {
if (typeof from !== "string" || from.length === 0) {
throw new errors_1.ValidationError("`from` (the resource name) is required.");
}
return from;
}
function parseData(raw) {
if (!isObject(raw))
throw new errors_1.ValidationError("`data` is an object of column values.");
const out = {};
for (const [key, val] of Object.entries(raw)) {
if (!IDENT.test(key))
throw new errors_1.ValidationError(`Invalid column name "${key}".`);
if (!isScalar(val))
throw new errors_1.ValidationError(`Column "${key}" must be a string, number, boolean, or null.`);
out[key] = val;
}
if (Object.keys(out).length === 0)
throw new errors_1.ValidationError("`data` must set at least one column.");
return out;
}
//# sourceMappingURL=grammar.js.map
{"version":3,"file":"grammar.js","sourceRoot":"","sources":["../src/grammar.ts"],"names":[],"mappings":"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"}
import { SchemaMap, PolicyFn } from "../types";
import { ResolvedQuery } from "./types";
import type { PaginationConfig } from "../valv";
export type OperationType = "find" | "findOne" | "create" | "update" | "delete" | "aggregate";
export declare function parseToolName(toolName: string): {
operation: OperationType;
resource: string;
};
export declare function buildResolvedQuery<TContext>(toolName: string, input: unknown, schema: SchemaMap, policies: Record<string, PolicyFn<TContext>>, ctx: TContext, defaultPolicy: "deny-all" | "allow-all", paginationConfig?: PaginationConfig): ResolvedQuery;
//# sourceMappingURL=builder.d.ts.map
{"version":3,"file":"builder.d.ts","sourceRoot":"","sources":["../../src/ir/builder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAe,MAAM,UAAU,CAAA;AAC3D,OAAO,EAAE,aAAa,EAA+B,MAAM,SAAS,CAAA;AAKpE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAA;AAE/C,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,SAAS,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,WAAW,CAAA;AAE7F,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG;IAAE,SAAS,EAAE,aAAa,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAiB9F;AAkBD,wBAAgB,kBAAkB,CAAC,QAAQ,EACzC,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,OAAO,EACd,MAAM,EAAE,SAAS,EACjB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC,EAC5C,GAAG,EAAE,QAAQ,EACb,aAAa,EAAE,UAAU,GAAG,WAAW,EACvC,gBAAgB,GAAE,gBAAsD,GACvE,aAAa,CAkOf"}
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.parseToolName = parseToolName;
exports.buildResolvedQuery = buildResolvedQuery;
const engine_1 = require("../policy/engine");
const filters_1 = require("./filters");
const errors_1 = require("../errors");
const cursor_1 = require("./cursor");
function parseToolName(toolName) {
const prefixes = [
["query_", "find"],
["get_", "findOne"],
["create_", "create"],
["update_", "update"],
["delete_", "delete"],
["aggregate_", "aggregate"],
];
for (const [prefix, operation] of prefixes) {
if (toolName.startsWith(prefix)) {
return { operation, resource: toolName.slice(prefix.length) };
}
}
throw new errors_1.ValidationError(`Unknown tool name format: ${toolName}`);
}
function operationToPolicy(op) {
switch (op) {
case "find":
case "findOne":
return "read";
case "aggregate":
return "aggregate";
case "create":
return "create";
case "update":
return "update";
case "delete":
return "delete";
}
}
function buildResolvedQuery(toolName, input, schema, policies, ctx, defaultPolicy, paginationConfig = { maxLimit: 100, defaultLimit: 50 }) {
const { operation, resource } = parseToolName(toolName);
const resourceSchema = schema.resources[resource];
if (!resourceSchema) {
throw new errors_1.ValidationError(`Unknown resource: ${resource}`);
}
const policyOp = operationToPolicy(operation);
const evaluated = (0, engine_1.evaluatePolicy)(policies[resource], ctx, policyOp, defaultPolicy, resourceSchema);
if (!evaluated.allowed) {
throw new errors_1.PolicyViolationError(`Operation "${operation}" on "${resource}" is not permitted by policy`);
}
const inp = (input ?? {});
// Parse filters from LLM input
let llmFilter;
if (inp.filters && typeof inp.filters === "object") {
llmFilter = parseFilters(inp.filters, evaluated.allowedFields, resource, resourceSchema.fields);
}
// Merge policy row filter + forced write fields (for update guard) + LLM filter
let baseFilter = (0, engine_1.mergeFilters)(evaluated.rowFilter, llmFilter);
// Resolve includes
let include;
if (inp.include && Array.isArray(inp.include)) {
include = {};
for (const relationName of inp.include) {
if (!evaluated.allowedRelations.includes(relationName)) {
throw new errors_1.ValidationError(`Relation "${relationName}" is not allowed`);
}
const relation = resourceSchema.relations[relationName];
if (!relation) {
throw new errors_1.ValidationError(`Unknown relation "${relationName}" on resource "${resource}"`);
}
const relatedSchema = schema.resources[relation.targetResource];
const relatedEvaluated = (0, engine_1.evaluatePolicy)(policies[relation.targetResource], ctx, "read", defaultPolicy, relatedSchema);
const relatedFields = relatedEvaluated.allowed
? relatedEvaluated.allowedFields
: relatedSchema
? Object.values(relatedSchema.fields)
.filter((f) => !f.sensitive)
.map((f) => f.name)
: [];
include[relationName] = {
resource: relation.targetResource,
type: relation.type,
foreignKey: relation.foreignKey,
fields: relatedFields,
filters: relatedEvaluated.rowFilter,
};
}
}
const fields = [...evaluated.allowedFields];
const pkField = Object.values(resourceSchema.fields).find((f) => f.isId)?.name ?? "id";
const query = {
resource,
operation,
filters: baseFilter,
fields,
include,
};
// Sort
if (inp.sort && typeof inp.sort === "object") {
const sort = inp.sort;
const sortField = sort.field;
if (!evaluated.allowedFields.includes(sortField)) {
throw new errors_1.ValidationError(`Sort field "${sortField}" is not allowed`);
}
query.sort = {
field: sortField,
direction: sort.direction ?? "asc",
};
}
// Pagination — applies to every find so the default page size always caps reads.
if (operation === "find") {
const explicitSort = query.sort;
// The cursor is self-describing: decode it first so it can drive the sort.
let keyset;
if (typeof inp.cursor === "string" && inp.cursor.length > 0) {
keyset = (0, cursor_1.decodeCursor)(inp.cursor);
if (keyset.sortField !== pkField && !evaluated.allowedFields.includes(keyset.sortField)) {
throw new errors_1.ValidationError(`Cursor sort field "${keyset.sortField}" is not allowed`);
}
}
if (keyset) {
if (explicitSort) {
// A cursor + an explicit sort must agree — the keyset is meaningless otherwise.
if (explicitSort.field !== keyset.sortField ||
explicitSort.direction !== keyset.direction) {
throw new errors_1.ValidationError("Cursor does not match the requested sort");
}
}
else {
// Continue paging under the sort the cursor was issued with.
query.sort = { field: keyset.sortField, direction: keyset.direction };
}
}
else if (!query.sort) {
// No cursor, no explicit sort → default to the primary key for stable order.
query.sort = { field: pkField, direction: "asc" };
}
const cursorField = query.sort.field;
if (keyset && resourceSchema.fields[cursorField]?.isNullable) {
throw new errors_1.ValidationError(`Cursor pagination is not supported on nullable sort field "${cursorField}"`);
}
const rawLimit = typeof inp.limit === "number" ? inp.limit : paginationConfig.defaultLimit;
const limit = Math.min(Math.max(1, Math.floor(rawLimit)), paginationConfig.maxLimit);
query.pagination = {
limit,
// Cursor wins over offset — only honor offset when paging without a cursor.
offset: keyset
? undefined
: typeof inp.offset === "number"
? Math.max(0, inp.offset)
: undefined,
cursor: typeof inp.cursor === "string" ? inp.cursor : undefined,
keyset,
primaryKey: pkField,
cursorField,
};
// The adapter needs the pk + sort field on each row to build nextCursor,
// even when policy didn't expose them. Track injected ones so they can be
// stripped from returned rows.
const internalFields = [];
for (const f of [pkField, cursorField]) {
if (!fields.includes(f)) {
fields.push(f);
internalFields.push(f);
}
}
if (internalFields.length > 0)
query.internalFields = internalFields;
}
// Aggregations
if (operation === "aggregate") {
if (inp.aggregations && Array.isArray(inp.aggregations)) {
for (const agg of inp.aggregations) {
if (agg.fn !== "count" &&
agg.field !== "*" &&
!evaluated.allowedFields.includes(agg.field)) {
throw new errors_1.ValidationError(`Aggregation field "${agg.field}" is not allowed on resource "${resource}"`);
}
}
query.aggregations = inp.aggregations;
}
if (inp.groupBy && Array.isArray(inp.groupBy)) {
const disallowed = inp.groupBy.filter((f) => !evaluated.allowedFields.includes(f));
if (disallowed.length > 0) {
throw new errors_1.ValidationError(`groupBy fields not allowed: ${disallowed.join(", ")}`);
}
query.groupBy = inp.groupBy;
}
}
// Data for create/update
if (operation === "create" || operation === "update") {
const data = {};
if (operation === "update" && inp.id !== undefined) {
const idFilter = { type: "eq", field: "id", value: inp.id };
query.filters = (0, engine_1.mergeFilters)(baseFilter, idFilter);
}
for (const [key, value] of Object.entries(inp)) {
if (["id", "filters", "include", "sort", "limit", "offset"].includes(key))
continue;
if (!evaluated.allowedFields.includes(key)) {
throw new errors_1.ValidationError(`Field "${key}" is not allowed for write`);
}
data[key] = value;
}
// Forced write fields override LLM input (policy wins). The UPDATE WHERE
// guard is already carried by evaluated.rowFilter (merged into baseFilter
// above and then with the id below), so only the data injection happens here.
if (evaluated.forcedWriteFields) {
Object.assign(data, evaluated.forcedWriteFields);
}
query.data = data;
}
// For findOne, use id as eq filter merged with policy filter
if (operation === "findOne" && inp.id !== undefined) {
const idFilter = { type: "eq", field: "id", value: inp.id };
query.filters = (0, engine_1.mergeFilters)(evaluated.rowFilter, idFilter);
}
return query;
}
function parseFilters(filtersObj, allowedFields, resource, fieldSchemas) {
// LLM-supplied filters share the policy filter language but are confined to
// the policy's allowed fields and don't get boolean combinators.
return (0, filters_1.objectToFilterNode)(filtersObj, {
fieldSchemas,
allowField: (field) => {
if (!allowedFields.includes(field)) {
throw new errors_1.ValidationError(`Field "${field}" is not allowed for filtering on resource "${resource}"`);
}
},
});
}
//# sourceMappingURL=builder.js.map
{"version":3,"file":"builder.js","sourceRoot":"","sources":["../../src/ir/builder.ts"],"names":[],"mappings":"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"}
/**
* Keyset encoded into an opaque pagination cursor. The adapter builds a
* `WHERE (sortField, id) > (sortValue, id)` predicate from this to continue
* paging after the last returned row. `id` is the primary-key tiebreaker so
* paging is stable even when `sortField` has duplicate values.
*/
export interface CursorKeyset {
sortField: string;
direction: "asc" | "desc";
sortValue: unknown;
id: unknown;
}
/** Encode a keyset into an opaque base64url token. */
export declare function encodeCursor(keyset: CursorKeyset): string;
/**
* Decode an opaque pagination cursor back into its keyset. Throws a
* `ValidationError` for any malformed or tampered token rather than letting a
* raw `SyntaxError` escape.
*/
export declare function decodeCursor(token: string): CursorKeyset;
//# sourceMappingURL=cursor.d.ts.map
{"version":3,"file":"cursor.d.ts","sourceRoot":"","sources":["../../src/ir/cursor.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AACH,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,KAAK,GAAG,MAAM,CAAA;IACzB,SAAS,EAAE,OAAO,CAAA;IAClB,EAAE,EAAE,OAAO,CAAA;CACZ;AAED,sDAAsD;AACtD,wBAAgB,YAAY,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,CAEzD;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,YAAY,CA0BxD"}
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.encodeCursor = encodeCursor;
exports.decodeCursor = decodeCursor;
const errors_1 = require("../errors");
/** Encode a keyset into an opaque base64url token. */
function encodeCursor(keyset) {
return Buffer.from(JSON.stringify(keyset), "utf8").toString("base64url");
}
/**
* Decode an opaque pagination cursor back into its keyset. Throws a
* `ValidationError` for any malformed or tampered token rather than letting a
* raw `SyntaxError` escape.
*/
function decodeCursor(token) {
let parsed;
try {
const json = Buffer.from(token, "base64url").toString("utf8");
parsed = JSON.parse(json);
}
catch {
throw new errors_1.ValidationError("Invalid pagination cursor");
}
if (!parsed ||
typeof parsed !== "object" ||
typeof parsed.sortField !== "string" ||
!("sortValue" in parsed) ||
!("id" in parsed)) {
throw new errors_1.ValidationError("Invalid pagination cursor");
}
const obj = parsed;
return {
sortField: obj.sortField,
direction: obj.direction === "desc" ? "desc" : "asc",
sortValue: obj.sortValue,
id: obj.id,
};
}
//# sourceMappingURL=cursor.js.map
{"version":3,"file":"cursor.js","sourceRoot":"","sources":["../../src/ir/cursor.ts"],"names":[],"mappings":";;AAgBA,oCAEC;AAOD,oCA0BC;AAnDD,sCAA2C;AAe3C,sDAAsD;AACtD,SAAgB,YAAY,CAAC,MAAoB;IAC/C,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAA;AAC1E,CAAC;AAED;;;;GAIG;AACH,SAAgB,YAAY,CAAC,KAAa;IACxC,IAAI,MAAe,CAAA;IACnB,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;QAC7D,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;IAC3B,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,wBAAe,CAAC,2BAA2B,CAAC,CAAA;IACxD,CAAC;IAED,IACE,CAAC,MAAM;QACP,OAAO,MAAM,KAAK,QAAQ;QAC1B,OAAQ,MAAkC,CAAC,SAAS,KAAK,QAAQ;QACjE,CAAC,CAAC,WAAW,IAAK,MAAkC,CAAC;QACrD,CAAC,CAAC,IAAI,IAAK,MAAkC,CAAC,EAC9C,CAAC;QACD,MAAM,IAAI,wBAAe,CAAC,2BAA2B,CAAC,CAAA;IACxD,CAAC;IAED,MAAM,GAAG,GAAG,MAAiC,CAAA;IAC7C,OAAO;QACL,SAAS,EAAE,GAAG,CAAC,SAAmB;QAClC,SAAS,EAAE,GAAG,CAAC,SAAS,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK;QACpD,SAAS,EAAE,GAAG,CAAC,SAAS;QACxB,EAAE,EAAE,GAAG,CAAC,EAAE;KACX,CAAA;AACH,CAAC"}
import { FieldSchema } from "../types";
import { FilterNode } from "./types";
export interface FilterBuildOptions {
allowField?: (field: string) => void;
fieldSchemas?: Record<string, FieldSchema>;
allowBoolean?: boolean;
}
/**
* Converts a single `field: value` entry into a FilterNode, using the same
* operator vocabulary the LLM-facing tool schemas expose
* (`{ gte }`, `{ contains }`, `{ in }`, arrays, scalars, null).
*/
export declare function valueToFilterNode(field: string, value: unknown, fieldSchema?: FieldSchema): FilterNode;
/**
* Builds a composite FilterNode from an object of field conditions. Multiple
* keys are AND-ed. With `allowBoolean`, the reserved keys `OR`/`AND`/`NOT`
* compose nested boolean nodes.
*/
export declare function objectToFilterNode(obj: Record<string, unknown>, opts?: FilterBuildOptions): FilterNode | undefined;
//# sourceMappingURL=filters.d.ts.map
{"version":3,"file":"filters.d.ts","sourceRoot":"","sources":["../../src/ir/filters.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAA;AACtC,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAGpC,MAAM,WAAW,kBAAkB;IAGjC,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IAEpC,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAA;IAG1C,YAAY,CAAC,EAAE,OAAO,CAAA;CACvB;AAID;;;;GAIG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,OAAO,EACd,WAAW,CAAC,EAAE,WAAW,GACxB,UAAU,CAuDZ;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC5B,IAAI,GAAE,kBAAuB,GAC5B,UAAU,GAAG,SAAS,CA8BxB"}
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.valueToFilterNode = valueToFilterNode;
exports.objectToFilterNode = objectToFilterNode;
const errors_1 = require("../errors");
const BOOLEAN_KEYS = new Set(["OR", "AND", "NOT"]);
/**
* Converts a single `field: value` entry into a FilterNode, using the same
* operator vocabulary the LLM-facing tool schemas expose
* (`{ gte }`, `{ contains }`, `{ in }`, arrays, scalars, null).
*/
function valueToFilterNode(field, value, fieldSchema) {
if (value === null) {
return { type: "null", field, isNull: true };
}
if (typeof value === "object" && !Array.isArray(value)) {
const obj = value;
// Equality aliases — the canonical form is a bare value, but models commonly
// reach for `{ eq }` / `{ equals }`, so accept them rather than mangling the query.
if ("eq" in obj) {
validateEnum(field, [obj.eq], fieldSchema);
return { type: "eq", field, value: obj.eq };
}
if ("equals" in obj) {
validateEnum(field, [obj.equals], fieldSchema);
return { type: "eq", field, value: obj.equals };
}
if ("ne" in obj) {
return { type: "not", filter: { type: "eq", field, value: obj.ne } };
}
if ("gte" in obj || "lte" in obj || "gt" in obj || "lt" in obj) {
return { type: "range", field, ...obj };
}
if ("contains" in obj) {
return { type: "like", field, value: obj.contains, mode: "contains" };
}
if ("startsWith" in obj) {
return { type: "like", field, value: obj.startsWith, mode: "startsWith" };
}
if ("endsWith" in obj) {
return { type: "like", field, value: obj.endsWith, mode: "endsWith" };
}
if ("in" in obj && Array.isArray(obj.in)) {
validateEnum(field, obj.in, fieldSchema);
return { type: "in", field, values: obj.in };
}
// Unknown operator object — reject with an actionable message instead of
// passing it through as an equality against a literal object (which would
// produce a malformed adapter query).
throw new errors_1.ValidationError(`Unsupported filter for field "${field}": {${Object.keys(obj).join(", ")}}. ` +
`Use a bare value for equality, or an operator object with one of: ` +
`eq, ne, gt, gte, lt, lte, in, contains, startsWith, endsWith.`);
}
if (Array.isArray(value)) {
validateEnum(field, value, fieldSchema);
return { type: "in", field, values: value };
}
validateEnum(field, [value], fieldSchema);
return { type: "eq", field, value };
}
/**
* Builds a composite FilterNode from an object of field conditions. Multiple
* keys are AND-ed. With `allowBoolean`, the reserved keys `OR`/`AND`/`NOT`
* compose nested boolean nodes.
*/
function objectToFilterNode(obj, opts = {}) {
const nodes = [];
for (const [key, value] of Object.entries(obj)) {
if (opts.allowBoolean && BOOLEAN_KEYS.has(key)) {
if (key === "NOT") {
if (value && typeof value === "object" && !Array.isArray(value)) {
const inner = objectToFilterNode(value, opts);
if (inner)
nodes.push({ type: "not", filter: inner });
}
continue;
}
if (Array.isArray(value)) {
const sub = value
.map((v) => objectToFilterNode(v, opts))
.filter((n) => n !== undefined);
if (sub.length > 0) {
nodes.push({ type: key === "OR" ? "or" : "and", filters: sub });
}
}
continue;
}
opts.allowField?.(key);
nodes.push(valueToFilterNode(key, value, opts.fieldSchemas?.[key]));
}
if (nodes.length === 0)
return undefined;
if (nodes.length === 1)
return nodes[0];
return { type: "and", filters: nodes };
}
function validateEnum(field, values, fieldSchema) {
if (fieldSchema?.type === "enum" && fieldSchema.enumValues) {
for (const v of values) {
if (!fieldSchema.enumValues.includes(v)) {
throw new errors_1.ValidationError(`Invalid enum value "${v}" for field "${field}"`);
}
}
}
}
//# sourceMappingURL=filters.js.map
{"version":3,"file":"filters.js","sourceRoot":"","sources":["../../src/ir/filters.ts"],"names":[],"mappings":"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"}
import type { CursorKeyset } from "./cursor";
export interface ResolvedQuery {
resource: string;
operation: "find" | "findOne" | "create" | "update" | "delete" | "aggregate";
filters?: FilterNode;
fields: string[];
internalFields?: string[];
include?: Record<string, ResolvedInclude>;
sort?: SortClause;
pagination?: PaginationClause;
aggregations?: AggregationClause[];
groupBy?: string[];
having?: FilterNode;
data?: Record<string, unknown>;
}
export interface ResolvedInclude {
resource: string;
type: "belongsTo" | "hasMany" | "manyToMany";
foreignKey: string;
fields: string[];
filters?: FilterNode;
}
export type FilterNode = EqFilter | InFilter | RangeFilter | LikeFilter | NullFilter | AndFilter | OrFilter | NotFilter;
export interface EqFilter {
type: "eq";
field: string;
value: unknown;
}
export interface InFilter {
type: "in";
field: string;
values: unknown[];
}
export interface RangeFilter {
type: "range";
field: string;
gte?: unknown;
lte?: unknown;
gt?: unknown;
lt?: unknown;
}
export interface LikeFilter {
type: "like";
field: string;
value: string;
mode?: "contains" | "startsWith" | "endsWith";
}
export interface NullFilter {
type: "null";
field: string;
isNull: boolean;
}
export interface AndFilter {
type: "and";
filters: FilterNode[];
}
export interface OrFilter {
type: "or";
filters: FilterNode[];
}
export interface NotFilter {
type: "not";
filter: FilterNode;
}
export interface SortClause {
field: string;
direction: "asc" | "desc";
}
export interface PaginationClause {
limit?: number;
offset?: number;
cursor?: string;
keyset?: CursorKeyset;
primaryKey: string;
cursorField: string;
}
export interface AggregationClause {
fn: "count" | "sum" | "avg" | "min" | "max";
field: string;
alias: string;
}
//# sourceMappingURL=types.d.ts.map
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/ir/types.ts"],"names":[],"mappings":"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"}
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
//# sourceMappingURL=types.js.map
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/ir/types.ts"],"names":[],"mappings":""}
import { PolicyFn, ResourceSchema } from "../types";
import { FilterNode } from "../ir/types";
export type PolicyOperation = "read" | "write" | "create" | "update" | "delete" | "aggregate";
export interface EvaluatedPolicy {
allowed: boolean;
rowFilter?: FilterNode;
allowedFields: string[];
allowedRelations: string[];
forcedWriteFields?: Record<string, unknown>;
}
export declare function evaluatePolicy<TContext>(policy: PolicyFn<TContext> | undefined, ctx: TContext, operation: PolicyOperation, defaultPolicy: "deny-all" | "allow-all", schema?: ResourceSchema): EvaluatedPolicy;
export declare function rowFilterFromObject(obj: Record<string, unknown>): FilterNode;
export declare function mergeFilters(policyFilter: FilterNode | undefined, llmFilter: FilterNode | undefined): FilterNode | undefined;
//# sourceMappingURL=engine.d.ts.map
{"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../../src/policy/engine.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAA4B,cAAc,EAAE,MAAM,UAAU,CAAA;AAC7E,OAAO,EAAE,UAAU,EAAa,MAAM,aAAa,CAAA;AAInD,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,WAAW,CAAA;AAE7F,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,OAAO,CAAA;IAChB,SAAS,CAAC,EAAE,UAAU,CAAA;IACtB,aAAa,EAAE,MAAM,EAAE,CAAA;IACvB,gBAAgB,EAAE,MAAM,EAAE,CAAA;IAC1B,iBAAiB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAC5C;AAyBD,wBAAgB,cAAc,CAAC,QAAQ,EACrC,MAAM,EAAE,QAAQ,CAAC,QAAQ,CAAC,GAAG,SAAS,EACtC,GAAG,EAAE,QAAQ,EACb,SAAS,EAAE,eAAe,EAC1B,aAAa,EAAE,UAAU,GAAG,WAAW,EACvC,MAAM,CAAC,EAAE,cAAc,GACtB,eAAe,CAmFjB;AAwCD,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,UAAU,CAU5E;AAED,wBAAgB,YAAY,CAC1B,YAAY,EAAE,UAAU,GAAG,SAAS,EACpC,SAAS,EAAE,UAAU,GAAG,SAAS,GAChC,UAAU,GAAG,SAAS,CAMxB"}
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.evaluatePolicy = evaluatePolicy;
exports.rowFilterFromObject = rowFilterFromObject;
exports.mergeFilters = mergeFilters;
const filters_1 = require("../ir/filters");
const errors_1 = require("../errors");
// Resolve the rule for an operation, applying the shorthand fallbacks:
// create/update fall back to `write`, aggregate falls back to `read`.
function resolveRule(result, operation) {
switch (operation) {
case "create":
return result.create ?? result.write;
case "update":
return result.update ?? result.write;
case "write":
return result.write;
case "aggregate":
return result.aggregate ?? result.read;
case "read":
return result.read;
case "delete":
return result.delete;
}
}
function isScalar(v) {
return v === null || ["string", "number", "boolean", "bigint"].includes(typeof v);
}
function evaluatePolicy(policy, ctx, operation, defaultPolicy, schema) {
let result = {};
if (policy) {
result = policy(ctx);
}
const opValue = resolveRule(result, operation);
const isWriteOp = operation === "create" || operation === "update" || operation === "write";
let allowed;
let rowFilter;
let forcedWriteFields;
if (opValue === undefined) {
allowed = defaultPolicy === "allow-all";
}
else if (opValue === true) {
allowed = true;
}
else if (opValue === false) {
allowed = false;
}
else {
// Object value — a predicate.
allowed = true;
const obj = opValue;
if (operation === "create") {
// Inserts have no WHERE clause: only concrete scalar values can be forced
// into the row. Operator/combinator entries are rejected (see helper).
forcedWriteFields = extractForcedFields(obj, schema, true);
}
else if (isWriteOp) {
// update (or the `write` shorthand): force scalar equalities into the row
// AND use the full predicate as a WHERE guard.
forcedWriteFields = extractForcedFields(obj, schema, false);
rowFilter = (0, filters_1.objectToFilterNode)(obj, { allowBoolean: true });
}
else {
// read / delete / aggregate: predicate is a pure row filter.
rowFilter = (0, filters_1.objectToFilterNode)(obj, { allowBoolean: true });
}
}
if (!allowed) {
return { allowed: false, allowedFields: [], allowedRelations: [] };
}
const allFields = schema ? Object.keys(schema.fields) : [];
const sensitiveFields = schema
? Object.values(schema.fields)
.filter((f) => f.sensitive)
.map((f) => f.name)
: [];
let allowedFields;
const fieldPolicy = result.fields;
if (fieldPolicy?.allow) {
allowedFields = fieldPolicy.allow.filter((f) => !sensitiveFields.includes(f));
}
else if (fieldPolicy?.deny) {
const denySet = new Set([...fieldPolicy.deny, ...sensitiveFields]);
allowedFields = allFields.filter((f) => !denySet.has(f));
}
else {
allowedFields = allFields.filter((f) => !sensitiveFields.includes(f));
}
// Operation-specific field visibility: read-only fields are dropped from the
// write set, write-only fields are dropped from the read set.
if (isWriteOp && fieldPolicy?.readOnly) {
const readOnly = new Set(fieldPolicy.readOnly);
allowedFields = allowedFields.filter((f) => !readOnly.has(f));
}
else if (!isWriteOp && fieldPolicy?.writeOnly) {
const writeOnly = new Set(fieldPolicy.writeOnly);
allowedFields = allowedFields.filter((f) => !writeOnly.has(f));
}
const allRelations = schema ? Object.keys(schema.relations) : [];
const relationsPolicy = result.relations;
let allowedRelations;
if (relationsPolicy) {
allowedRelations = allRelations.filter((r) => relationsPolicy[r] !== false);
}
else {
allowedRelations = allRelations;
}
return { allowed, rowFilter, allowedFields, allowedRelations, forcedWriteFields };
}
// Pulls the scalar equality pairs out of a write predicate — these are the only
// values that can be force-written into a row. For inserts (`strict`), an
// operator filter or combinator on a *required* field can never be satisfied,
// so we fail loudly rather than silently produce an unscoped insert.
function extractForcedFields(obj, schema, strict) {
const forced = {};
for (const [field, value] of Object.entries(obj)) {
if (field === "OR" || field === "AND" || field === "NOT") {
if (strict) {
throw new errors_1.ValidationError(`create policy cannot use the "${field}" combinator — inserts only support forced field values`);
}
continue;
}
if (isScalar(value)) {
forced[field] = value;
continue;
}
if (strict && isRequiredField(field, schema)) {
throw new errors_1.ValidationError(`create policy uses an operator filter on required field "${field}", which an insert cannot satisfy`);
}
}
return forced;
}
function isRequiredField(field, schema) {
const f = schema?.fields[field];
if (!f)
return false;
return !f.isId && !f.isNullable && !f.hasDefaultValue;
}
function rowFilterFromObject(obj) {
const filters = Object.entries(obj).map(([field, value]) => ({
type: "eq",
field,
value,
}));
if (filters.length === 1)
return filters[0];
return { type: "and", filters };
}
function mergeFilters(policyFilter, llmFilter) {
if (!policyFilter && !llmFilter)
return undefined;
if (!policyFilter)
return llmFilter;
if (!llmFilter)
return policyFilter;
return { type: "and", filters: [policyFilter, llmFilter] };
}
//# sourceMappingURL=engine.js.map
{"version":3,"file":"engine.js","sourceRoot":"","sources":["../../src/policy/engine.ts"],"names":[],"mappings":"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"}
import { SchemaMap, PolicyFn, FieldSchema } from "../types";
import type { GetToolsOptions, PaginationConfig } from "../valv";
/** Fallback pagination bounds for direct callers; production flows pass config from ValvConfig. */
export declare const DEFAULT_PAGINATION: PaginationConfig;
export declare const CONSOLIDATED_VERBS: readonly ["query", "get", "create", "update", "delete", "aggregate"];
export declare const CONSOLIDATED_META: readonly ["list_resources", "describe_resource"];
export declare const RESERVED_TOOL_NAMES: string[];
/**
* Provider-neutral tool definition. This is the single source of truth from
* which every provider-specific shape (Anthropic, OpenAI, Gemini, …) is derived
* by a formatter. `parameters` is a JSON Schema object describing the input.
*/
export interface NeutralTool {
name: string;
description: string;
parameters: object;
}
export declare function generateTools<TContext>(schema: SchemaMap, policies: Record<string, PolicyFn<TContext>>, ctx: TContext, defaultPolicy: "deny-all" | "allow-all", paginationConfig?: PaginationConfig, options?: GetToolsOptions): NeutralTool[];
export declare function generateConsolidatedTools<TContext>(schema: SchemaMap, policies: Record<string, PolicyFn<TContext>>, ctx: TContext, defaultPolicy: "deny-all" | "allow-all", paginationConfig?: PaginationConfig, options?: GetToolsOptions): NeutralTool[];
export declare function buildFieldSchema(field: FieldSchema): Record<string, unknown>;
//# sourceMappingURL=generator.d.ts.map
{"version":3,"file":"generator.d.ts","sourceRoot":"","sources":["../../src/tools/generator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAkB,WAAW,EAAE,MAAM,UAAU,CAAA;AAE3E,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAA;AAEhE,mGAAmG;AACnG,eAAO,MAAM,kBAAkB,EAAE,gBAAsD,CAAA;AAEvF,eAAO,MAAM,kBAAkB,sEAOrB,CAAA;AACV,eAAO,MAAM,iBAAiB,kDAAmD,CAAA;AACjF,eAAO,MAAM,mBAAmB,EAAoD,MAAM,EAAE,CAAA;AAE5F;;;;GAIG;AACH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,CAAA;IACnB,UAAU,EAAE,MAAM,CAAA;CACnB;AAaD,wBAAgB,aAAa,CAAC,QAAQ,EACpC,MAAM,EAAE,SAAS,EACjB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC,EAC5C,GAAG,EAAE,QAAQ,EACb,aAAa,EAAE,UAAU,GAAG,WAAW,EACvC,gBAAgB,GAAE,gBAAqC,EACvD,OAAO,CAAC,EAAE,eAAe,GACxB,WAAW,EAAE,CAqEf;AAgTD,wBAAgB,yBAAyB,CAAC,QAAQ,EAChD,MAAM,EAAE,SAAS,EACjB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC,EAC5C,GAAG,EAAE,QAAQ,EACb,aAAa,EAAE,UAAU,GAAG,WAAW,EACvC,gBAAgB,GAAE,gBAAqC,EACvD,OAAO,CAAC,EAAE,eAAe,GACxB,WAAW,EAAE,CA4Pf;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAqB5E"}
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.RESERVED_TOOL_NAMES = exports.CONSOLIDATED_META = exports.CONSOLIDATED_VERBS = exports.DEFAULT_PAGINATION = void 0;
exports.generateTools = generateTools;
exports.generateConsolidatedTools = generateConsolidatedTools;
exports.buildFieldSchema = buildFieldSchema;
const engine_1 = require("../policy/engine");
/** Fallback pagination bounds for direct callers; production flows pass config from ValvConfig. */
exports.DEFAULT_PAGINATION = { maxLimit: 100, defaultLimit: 50 };
exports.CONSOLIDATED_VERBS = [
"query",
"get",
"create",
"update",
"delete",
"aggregate",
];
exports.CONSOLIDATED_META = ["list_resources", "describe_resource"];
exports.RESERVED_TOOL_NAMES = [...exports.CONSOLIDATED_VERBS, ...exports.CONSOLIDATED_META];
// A create tool is only generated if every required field (non-id, non-nullable,
// no default) is either writable by the caller or force-injected by policy —
// otherwise the LLM could never produce a valid insert.
function createIsSatisfiable(resource, createPolicy) {
const forcedFields = createPolicy.forcedWriteFields ?? {};
return Object.entries(resource.fields).every(([name, field]) => {
if (field.isId || field.isNullable || field.hasDefaultValue)
return true;
return createPolicy.allowedFields.includes(name) || name in forcedFields;
});
}
function generateTools(schema, policies, ctx, defaultPolicy, paginationConfig = exports.DEFAULT_PAGINATION, options) {
const tools = [];
const resourceNames = options?.resources ?? Object.keys(schema.resources);
for (const resourceName of resourceNames) {
const resource = schema.resources[resourceName];
if (!resource)
continue;
const readPolicy = (0, engine_1.evaluatePolicy)(policies[resourceName], ctx, "read", defaultPolicy, resource);
const createPolicy = (0, engine_1.evaluatePolicy)(policies[resourceName], ctx, "create", defaultPolicy, resource);
const updatePolicy = (0, engine_1.evaluatePolicy)(policies[resourceName], ctx, "update", defaultPolicy, resource);
const deletePolicy = (0, engine_1.evaluatePolicy)(policies[resourceName], ctx, "delete", defaultPolicy, resource);
const aggregatePolicy = (0, engine_1.evaluatePolicy)(policies[resourceName], ctx, "aggregate", defaultPolicy, resource);
if (readPolicy.allowed) {
tools.push(buildQueryTool(resourceName, resource, readPolicy, paginationConfig));
tools.push(buildGetTool(resourceName, resource, readPolicy));
}
if (createPolicy.allowed && createIsSatisfiable(resource, createPolicy)) {
tools.push(buildCreateTool(resourceName, resource, createPolicy));
}
if (updatePolicy.allowed) {
tools.push(buildUpdateTool(resourceName, resource, updatePolicy));
}
if (deletePolicy.allowed) {
tools.push(buildDeleteTool(resourceName, resource));
}
// Aggregate tool if there are numeric fields the caller may read.
if (aggregatePolicy.allowed) {
const numericFields = aggregatePolicy.allowedFields.filter((f) => resource.fields[f]?.type === "number");
if (numericFields.length > 0) {
tools.push(buildAggregateTool(resourceName, resource, aggregatePolicy, numericFields));
}
}
if (options?.maxTools && tools.length >= options.maxTools)
break;
}
return tools;
}
function buildQueryTool(resourceName, resource, policy, paginationConfig) {
const description = resource.description
? `Query multiple ${resourceName} records. ${resource.description}`
: `Query multiple ${resourceName} records with filters, sorting, and pagination.`;
return {
name: `query_${resourceName}`,
description,
parameters: {
type: "object",
properties: {
filters: buildFiltersSchema(resource, policy.allowedFields),
include: buildIncludeSchema(policy.allowedRelations),
sort: buildSortSchema(policy.allowedFields),
...buildPaginationSchema(paginationConfig),
},
additionalProperties: false,
},
};
}
// Shared pagination params for query tools (per-resource and consolidated).
function buildPaginationSchema(cfg) {
return {
limit: {
type: "number",
description: `Maximum number of records to return (default ${cfg.defaultLimit}, max ${cfg.maxLimit})`,
minimum: 1,
maximum: cfg.maxLimit,
},
offset: {
type: "number",
description: "Number of records to skip (ignored if cursor is supplied; prefer cursor for pagination)",
},
cursor: {
type: "string",
description: "Opaque pagination cursor from a previous result's nextCursor. Pass it alone to fetch the next page — it already carries the sort, so do not resend `sort` (or resend the identical one).",
},
};
}
function buildGetTool(resourceName, resource, policy) {
const idField = Object.values(resource.fields).find((f) => f.isId);
const idSchema = idField ? buildFieldSchema(idField) : { type: "string" };
const description = resource.description
? `Get a single ${resourceName} by ID. ${resource.description}`
: `Get a single ${resourceName} by ID.`;
return {
name: `get_${resourceName}`,
description,
parameters: {
type: "object",
properties: {
id: { ...idSchema, description: `ID of the ${resourceName} to retrieve` },
include: buildIncludeSchema(policy.allowedRelations),
},
required: ["id"],
additionalProperties: false,
},
};
}
function buildCreateTool(resourceName, resource, policy) {
const forcedKeys = new Set(Object.keys(policy.forcedWriteFields ?? {}));
const writableFields = policy.allowedFields.filter((f) => {
const field = resource.fields[f];
return field && !field.isId && !forcedKeys.has(f);
});
const properties = {};
const required = [];
for (const fieldName of writableFields) {
const field = resource.fields[fieldName];
if (!field)
continue;
properties[fieldName] = buildFieldSchema(field);
// Only required if not nullable and has no DB default
if (!field.isNullable && !field.hasDefaultValue)
required.push(fieldName);
}
return {
name: `create_${resourceName}`,
description: `Create a new ${resourceName} record.`,
parameters: {
type: "object",
properties,
required: required.length > 0 ? required : undefined,
additionalProperties: false,
},
};
}
function buildUpdateTool(resourceName, resource, policy) {
const idField = Object.values(resource.fields).find((f) => f.isId);
const idSchema = idField ? buildFieldSchema(idField) : { type: "string" };
const forcedKeys = new Set(Object.keys(policy.forcedWriteFields ?? {}));
const writableFields = policy.allowedFields.filter((f) => {
const field = resource.fields[f];
return field && !field.isId && !forcedKeys.has(f);
});
const properties = {
id: { ...idSchema, description: `ID of the ${resourceName} to update` },
};
for (const fieldName of writableFields) {
const field = resource.fields[fieldName];
if (!field)
continue;
properties[fieldName] = buildFieldSchema(field);
}
return {
name: `update_${resourceName}`,
description: `Update an existing ${resourceName} record by ID.`,
parameters: {
type: "object",
properties,
required: ["id"],
additionalProperties: false,
},
};
}
function buildDeleteTool(resourceName, resource) {
const idField = Object.values(resource.fields).find((f) => f.isId);
const idSchema = idField ? buildFieldSchema(idField) : { type: "string" };
return {
name: `delete_${resourceName}`,
description: `Delete a ${resourceName} record by ID.`,
parameters: {
type: "object",
properties: {
id: { ...idSchema, description: `ID of the ${resourceName} to delete` },
},
required: ["id"],
additionalProperties: false,
},
};
}
function buildAggregateTool(resourceName, resource, policy, numericFields) {
return {
name: `aggregate_${resourceName}`,
description: `Aggregate ${resourceName} records (count, sum, avg, min, max with optional groupBy).`,
parameters: {
type: "object",
properties: {
aggregations: {
type: "array",
description: "List of aggregation operations to perform",
items: {
type: "object",
properties: {
fn: { type: "string", enum: ["count", "sum", "avg", "min", "max"] },
field: { type: "string", enum: numericFields },
alias: { type: "string" },
},
required: ["fn", "field", "alias"],
additionalProperties: false,
},
},
filters: buildFiltersSchema(resource, policy.allowedFields),
groupBy: {
type: "array",
items: { type: "string", enum: policy.allowedFields },
description: "Fields to group by",
},
},
required: ["aggregations"],
additionalProperties: false,
},
};
}
function buildFiltersSchema(resource, allowedFields) {
const properties = {};
for (const fieldName of allowedFields) {
const field = resource.fields[fieldName];
if (!field)
continue;
const description = field.description ?? `Filter by ${fieldName}`;
if (field.type === "enum" && field.enumValues) {
properties[fieldName] = {
oneOf: [
{ type: "string", enum: field.enumValues, description },
{
type: "object",
properties: {
in: { type: "array", items: { type: "string", enum: field.enumValues } },
},
additionalProperties: false,
description: `Filter by multiple ${fieldName} values`,
},
],
};
}
else if (field.type === "number" || field.type === "date") {
properties[fieldName] = {
oneOf: [
buildFieldSchema(field),
{
type: "object",
properties: {
gte: buildFieldSchema(field),
lte: buildFieldSchema(field),
gt: buildFieldSchema(field),
lt: buildFieldSchema(field),
},
additionalProperties: false,
description: `Range filter for ${fieldName}`,
},
],
};
}
else if (field.type === "string") {
properties[fieldName] = {
oneOf: [
{ type: "string", description },
{
type: "object",
properties: {
contains: { type: "string" },
startsWith: { type: "string" },
endsWith: { type: "string" },
in: { type: "array", items: { type: "string" } },
},
additionalProperties: false,
description: `String filter for ${fieldName}`,
},
],
};
}
else {
properties[fieldName] = { ...buildFieldSchema(field), description };
}
}
return {
type: "object",
properties,
additionalProperties: false,
description: "Filter conditions",
};
}
function buildIncludeSchema(allowedRelations) {
if (allowedRelations.length === 0) {
return {
type: "array",
items: { type: "string", enum: [] },
description: "Relations to include",
};
}
return {
type: "array",
items: { type: "string", enum: allowedRelations },
description: "Relations to include",
};
}
function buildSortSchema(allowedFields) {
return {
type: "object",
properties: {
field: { type: "string", enum: allowedFields },
direction: { type: "string", enum: ["asc", "desc"] },
},
required: ["field", "direction"],
additionalProperties: false,
description: "Sort order",
};
}
function generateConsolidatedTools(schema, policies, ctx, defaultPolicy, paginationConfig = exports.DEFAULT_PAGINATION, options) {
const tools = [];
const candidateNames = options?.resources ?? Object.keys(schema.resources);
const queryResources = [];
const createResources = [];
const updateResources = [];
const deleteResources = [];
const aggregateResources = [];
for (const resourceName of candidateNames) {
const resource = schema.resources[resourceName];
if (!resource)
continue;
const readPolicy = (0, engine_1.evaluatePolicy)(policies[resourceName], ctx, "read", defaultPolicy, resource);
if (readPolicy.allowed)
queryResources.push(resourceName);
const aggregatePolicy = (0, engine_1.evaluatePolicy)(policies[resourceName], ctx, "aggregate", defaultPolicy, resource);
if (aggregatePolicy.allowed) {
const numericFields = aggregatePolicy.allowedFields.filter((f) => resource.fields[f]?.type === "number");
if (numericFields.length > 0)
aggregateResources.push(resourceName);
}
const createPolicy = (0, engine_1.evaluatePolicy)(policies[resourceName], ctx, "create", defaultPolicy, resource);
if (createPolicy.allowed && createIsSatisfiable(resource, createPolicy)) {
createResources.push(resourceName);
}
const updatePolicy = (0, engine_1.evaluatePolicy)(policies[resourceName], ctx, "update", defaultPolicy, resource);
if (updatePolicy.allowed)
updateResources.push(resourceName);
const deletePolicy = (0, engine_1.evaluatePolicy)(policies[resourceName], ctx, "delete", defaultPolicy, resource);
if (deletePolicy.allowed)
deleteResources.push(resourceName);
}
const allAccessible = [
...new Set([...queryResources, ...createResources, ...updateResources, ...deleteResources]),
];
if (allAccessible.length === 0)
return tools;
tools.push({
name: "list_resources",
description: "List all accessible resources and which operations are available for each.",
parameters: { type: "object", properties: {}, additionalProperties: false },
});
tools.push({
name: "describe_resource",
description: "Return the field schema and allowed operations for a specific resource. Call this before query/create/update to learn valid field names.",
parameters: {
type: "object",
properties: {
resource: {
type: "string",
enum: allAccessible,
description: "The resource to describe",
},
},
required: ["resource"],
additionalProperties: false,
},
});
if (queryResources.length > 0) {
tools.push({
name: "query",
description: "Query multiple records of a resource. Call describe_resource first to learn valid filter/sort field names.",
parameters: {
type: "object",
properties: {
resource: { type: "string", enum: queryResources, description: "The resource to query" },
filters: {
type: "object",
additionalProperties: true,
description: "Filter conditions (use field names from describe_resource)",
},
sort: {
type: "object",
properties: {
field: { type: "string", description: "Field to sort by" },
direction: { type: "string", enum: ["asc", "desc"] },
},
required: ["field", "direction"],
additionalProperties: false,
},
include: {
type: "array",
items: { type: "string" },
description: "Relation names to include",
},
...buildPaginationSchema(paginationConfig),
},
required: ["resource"],
additionalProperties: false,
},
});
tools.push({
name: "get",
description: "Get a single record of a resource by ID.",
parameters: {
type: "object",
properties: {
resource: { type: "string", enum: queryResources, description: "The resource to fetch" },
id: { description: "ID of the record to retrieve" },
include: {
type: "array",
items: { type: "string" },
description: "Relation names to include",
},
},
required: ["resource", "id"],
additionalProperties: false,
},
});
}
if (createResources.length > 0) {
tools.push({
name: "create",
description: "Create a new record. Call describe_resource first to learn required and optional field names.",
parameters: {
type: "object",
properties: {
resource: {
type: "string",
enum: createResources,
description: "The resource to create",
},
data: {
type: "object",
additionalProperties: true,
description: "Field values for the new record",
},
},
required: ["resource", "data"],
additionalProperties: false,
},
});
}
if (updateResources.length > 0) {
tools.push({
name: "update",
description: "Update an existing record by ID. Call describe_resource first to learn valid field names.",
parameters: {
type: "object",
properties: {
resource: {
type: "string",
enum: updateResources,
description: "The resource to update",
},
id: { description: "ID of the record to update" },
data: { type: "object", additionalProperties: true, description: "Fields to update" },
},
required: ["resource", "id", "data"],
additionalProperties: false,
},
});
}
if (deleteResources.length > 0) {
tools.push({
name: "delete",
description: "Delete a record by ID.",
parameters: {
type: "object",
properties: {
resource: {
type: "string",
enum: deleteResources,
description: "The resource to delete from",
},
id: { description: "ID of the record to delete" },
},
required: ["resource", "id"],
additionalProperties: false,
},
});
}
if (aggregateResources.length > 0) {
tools.push({
name: "aggregate",
description: "Aggregate records (count, sum, avg, min, max with optional groupBy). Call describe_resource first to learn valid field names.",
parameters: {
type: "object",
properties: {
resource: {
type: "string",
enum: aggregateResources,
description: "The resource to aggregate",
},
aggregations: {
type: "array",
description: "List of aggregation operations to perform",
items: {
type: "object",
properties: {
fn: { type: "string", enum: ["count", "sum", "avg", "min", "max"] },
field: {
type: "string",
description: "Field to aggregate (use numeric fields from describe_resource)",
},
alias: { type: "string" },
},
required: ["fn", "field", "alias"],
additionalProperties: false,
},
},
filters: { type: "object", additionalProperties: true, description: "Filter conditions" },
groupBy: { type: "array", items: { type: "string" }, description: "Fields to group by" },
},
required: ["resource", "aggregations"],
additionalProperties: false,
},
});
}
return tools;
}
function buildFieldSchema(field) {
const base = {};
if (field.description)
base.description = field.description;
switch (field.type) {
case "string":
case "uuid":
return { ...base, type: "string" };
case "number":
return { ...base, type: "number" };
case "boolean":
return { ...base, type: "boolean" };
case "date":
return { ...base, type: "string", format: "date-time" };
case "json":
return { ...base, type: "object" };
case "enum":
return { ...base, type: "string", enum: field.enumValues ?? [] };
default:
return { ...base, type: "string" };
}
}
//# sourceMappingURL=generator.js.map
{"version":3,"file":"generator.js","sourceRoot":"","sources":["../../src/tools/generator.ts"],"names":[],"mappings":"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"}
export interface SchemaMap {
resources: Record<string, ResourceSchema>;
}
export interface ResourceSchema {
name: string;
tableName: string;
fields: Record<string, FieldSchema>;
relations: Record<string, RelationSchema>;
description?: string;
}
export interface FieldSchema {
name: string;
type: FieldType;
isNullable: boolean;
isId: boolean;
hasDefaultValue?: boolean;
enumValues?: string[];
description?: string;
sensitive?: boolean;
}
export type FieldType = "string" | "number" | "boolean" | "date" | "enum" | "uuid" | "json";
export interface RelationSchema {
name: string;
targetResource: string;
type: "belongsTo" | "hasMany" | "manyToMany";
foreignKey: string;
junctionTable?: string;
}
export type PolicyFn<TContext = DefaultContext> = (ctx: TContext) => PolicyResult;
export type PolicyRule = boolean | Record<string, unknown>;
export interface PolicyResult {
read?: PolicyRule;
write?: PolicyRule;
create?: PolicyRule;
update?: PolicyRule;
delete?: PolicyRule;
aggregate?: PolicyRule;
fields?: FieldPolicy;
relations?: Record<string, boolean>;
}
export interface FieldPolicy {
allow?: string[];
deny?: string[];
readOnly?: string[];
writeOnly?: string[];
}
export interface DefaultContext {
user: {
id: string;
role: string;
[key: string]: unknown;
};
tenant?: {
id: string;
[key: string]: unknown;
};
[key: string]: unknown;
}
type _CamelToSnake<S extends string> = S extends `${infer Head}${infer Tail}` ? Head extends Uppercase<Head> ? Head extends Lowercase<Head> ? `${Head}${_CamelToSnake<Tail>}` : `_${Lowercase<Head>}${_CamelToSnake<Tail>}` : `${Head}${_CamelToSnake<Tail>}` : S;
/**
* Derives valv resource names (snake_case) from a Prisma client type.
*
* @example
* const valv = new Valv<DefaultContext, InferResources<typeof prisma>>({ ... })
* // policy() and getTools() are now type-safe with autocomplete for resource names
*/
export type InferResources<TClient> = _CamelToSnake<Exclude<keyof TClient, `$${string}` | symbol | number> & string>;
export {};
//# sourceMappingURL=types.d.ts.map
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
//# sourceMappingURL=types.js.map
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
/**
* Generate TypeScript source from a view's resultSchema, so the static types
* and the runtime schema can't disagree:
*
* ```ts
* const view = await valv.view("query_order", args, ctx)
* fs.writeFileSync("order-view.ts", generateViewTypes(view.resultSchema, "Order"))
* // → export interface OrderRow { id: string; status: "pending" | ...; ... }
* // export interface OrderResult { data: OrderRow[]; hasMore: boolean; nextCursor?: string }
* ```
*
* Handles exactly the vocabulary buildResultSchema emits: objects, arrays,
* anyOf-null unions, enums, and the JSON primitives.
*/
export declare function generateViewTypes(resultSchema: object, typeName: string): string;
//# sourceMappingURL=codegen.d.ts.map
{"version":3,"file":"codegen.d.ts","sourceRoot":"","sources":["../../src/view/codegen.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,wBAAgB,iBAAiB,CAAC,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAoBhF"}
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.generateViewTypes = generateViewTypes;
/**
* Generate TypeScript source from a view's resultSchema, so the static types
* and the runtime schema can't disagree:
*
* ```ts
* const view = await valv.view("query_order", args, ctx)
* fs.writeFileSync("order-view.ts", generateViewTypes(view.resultSchema, "Order"))
* // → export interface OrderRow { id: string; status: "pending" | ...; ... }
* // export interface OrderResult { data: OrderRow[]; hasMore: boolean; nextCursor?: string }
* ```
*
* Handles exactly the vocabulary buildResultSchema emits: objects, arrays,
* anyOf-null unions, enums, and the JSON primitives.
*/
function generateViewTypes(resultSchema, typeName) {
const envelope = resultSchema;
const rowSchema = envelope.properties?.data?.items;
if (!rowSchema) {
throw new Error("generateViewTypes() expects a schema produced by view.resultSchema");
}
const rowName = `${typeName}Row`;
const lines = [];
lines.push(`export interface ${rowName} ${schemaToType(rowSchema, 0)}`);
lines.push("");
lines.push(`export interface ${typeName}Result {`);
lines.push(` data: ${rowName}[]`);
lines.push(` hasMore: boolean`);
if (envelope.properties?.nextCursor)
lines.push(` nextCursor?: string`);
lines.push(`}`);
lines.push("");
return lines.join("\n");
}
function schemaToType(schema, depth) {
const s = schema;
if (Array.isArray(s.anyOf)) {
return s.anyOf.map((variant) => schemaToType(variant, depth)).join(" | ");
}
switch (s.type) {
case "null":
return "null";
case "boolean":
return "boolean";
case "number":
case "integer":
return "number";
case "string":
if (Array.isArray(s.enum)) {
return s.enum.map((v) => JSON.stringify(v)).join(" | ");
}
return "string";
case "array":
return `${wrapUnion(schemaToType(s.items ?? {}, depth))}[]`;
case "object": {
const properties = s.properties;
if (!properties)
return "Record<string, unknown>";
const required = new Set(s.required ?? []);
const indent = " ".repeat(depth + 1);
const fields = Object.entries(properties).map(([key, value]) => {
const opt = required.has(key) ? "" : "?";
return `${indent}${safePropertyKey(key)}${opt}: ${schemaToType(value, depth + 1)}`;
});
return `{\n${fields.join("\n")}\n${" ".repeat(depth)}}`;
}
default:
return "unknown";
}
}
// Union types need parens before [] — (A | null)[] not A | null[].
function wrapUnion(type) {
return type.includes(" | ") ? `(${type})` : type;
}
function safePropertyKey(key) {
return /^[A-Za-z_$][A-Za-z0-9_$]*$/.test(key) ? key : JSON.stringify(key);
}
//# sourceMappingURL=codegen.js.map
{"version":3,"file":"codegen.js","sourceRoot":"","sources":["../../src/view/codegen.ts"],"names":[],"mappings":"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"}
import type { View, ViewResult, ViewSubscription } from "./types";
export interface ComposeSubscribeOptions {
/** Poll interval passed to each input view. */
intervalMs?: number;
/** Called on input execution errors and transform errors. */
onError?: (error: Error) => void;
}
export interface ComposedView<R> {
execute(): Promise<R>;
subscribe(onData: (result: R) => void, options?: ComposeSubscribeOptions): ViewSubscription;
}
type ViewResults<Vs extends readonly View<unknown>[]> = {
[K in keyof Vs]: Vs[K] extends View<infer T> ? ViewResult<T> : never;
};
/**
* Combine multiple views with a pure transform — the live answer to multi-step
* agent queries. Whatever the LLM computed across several tool calls gets
* reified as app code over policy-enforced inputs:
*
* ```ts
* const topSpenders = compose([ordersView, usersView], (orders, users) =>
* rankBySpend(orders.data, users.data),
* )
* topSpenders.subscribe((ranking) => leaderboard.update(ranking))
* ```
*
* subscribe() subscribes to every input and recomputes when any of them
* changes, emitting only when the transformed output actually changed. The
* inputs stay policy-enforced; the transform is application code, so nothing
* agent-generated ever executes.
*/
export declare function compose<Vs extends readonly View<any>[], R>(views: readonly [...Vs], transform: (...results: ViewResults<Vs>) => R): ComposedView<R>;
export {};
//# sourceMappingURL=compose.d.ts.map
{"version":3,"file":"compose.d.ts","sourceRoot":"","sources":["../../src/view/compose.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAA;AAEjE,MAAM,WAAW,uBAAuB;IACtC,+CAA+C;IAC/C,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,6DAA6D;IAC7D,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAA;CACjC;AAED,MAAM,WAAW,YAAY,CAAC,CAAC;IAC7B,OAAO,IAAI,OAAO,CAAC,CAAC,CAAC,CAAA;IACrB,SAAS,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,IAAI,EAAE,OAAO,CAAC,EAAE,uBAAuB,GAAG,gBAAgB,CAAA;CAC5F;AAED,KAAK,WAAW,CAAC,EAAE,SAAS,SAAS,IAAI,CAAC,OAAO,CAAC,EAAE,IAAI;KACrD,CAAC,IAAI,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,SAAS,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,KAAK;CACrE,CAAA;AAED;;;;;;;;;;;;;;;;GAgBG;AAEH,wBAAgB,OAAO,CAAC,EAAE,SAAS,SAAS,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,EACxD,KAAK,EAAE,SAAS,CAAC,GAAG,EAAE,CAAC,EACvB,SAAS,EAAE,CAAC,GAAG,OAAO,EAAE,WAAW,CAAC,EAAE,CAAC,KAAK,CAAC,GAC5C,YAAY,CAAC,CAAC,CAAC,CA8CjB"}
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.compose = compose;
/**
* Combine multiple views with a pure transform — the live answer to multi-step
* agent queries. Whatever the LLM computed across several tool calls gets
* reified as app code over policy-enforced inputs:
*
* ```ts
* const topSpenders = compose([ordersView, usersView], (orders, users) =>
* rankBySpend(orders.data, users.data),
* )
* topSpenders.subscribe((ranking) => leaderboard.update(ranking))
* ```
*
* subscribe() subscribes to every input and recomputes when any of them
* changes, emitting only when the transformed output actually changed. The
* inputs stay policy-enforced; the transform is application code, so nothing
* agent-generated ever executes.
*/
// eslint-disable-next-line @typescript-eslint/no-explicit-any
function compose(views, transform) {
const execute = async () => {
const results = await Promise.all(views.map((v) => v.execute()));
return transform(...results);
};
return {
execute,
subscribe(onData, options) {
const latest = views.map(() => undefined);
let lastSnapshot;
let stopped = false;
const recompute = () => {
// Wait until every input has produced at least one result.
if (stopped || latest.some((r) => r === undefined))
return;
try {
const out = transform(...latest);
const snapshot = JSON.stringify(out);
if (snapshot === lastSnapshot)
return;
lastSnapshot = snapshot;
onData(out);
}
catch (err) {
options?.onError?.(err);
}
};
const subs = views.map((view, i) => view.subscribe((result) => {
latest[i] = result;
recompute();
}, { intervalMs: options?.intervalMs, onError: options?.onError }));
return {
stop() {
if (stopped)
return;
stopped = true;
for (const s of subs)
s.stop();
},
};
},
};
}
//# sourceMappingURL=compose.js.map
{"version":3,"file":"compose.js","sourceRoot":"","sources":["../../src/view/compose.ts"],"names":[],"mappings":";;AAoCA,0BAiDC;AAnED;;;;;;;;;;;;;;;;GAgBG;AACH,8DAA8D;AAC9D,SAAgB,OAAO,CACrB,KAAuB,EACvB,SAA6C;IAE7C,MAAM,OAAO,GAAG,KAAK,IAAgB,EAAE;QACrC,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAA;QAChE,OAAO,SAAS,CAAC,GAAI,OAA2B,CAAC,CAAA;IACnD,CAAC,CAAA;IAED,OAAO;QACL,OAAO;QACP,SAAS,CAAC,MAAM,EAAE,OAAO;YACvB,MAAM,MAAM,GAA2C,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAA;YACjF,IAAI,YAAgC,CAAA;YACpC,IAAI,OAAO,GAAG,KAAK,CAAA;YAEnB,MAAM,SAAS,GAAG,GAAS,EAAE;gBAC3B,2DAA2D;gBAC3D,IAAI,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,SAAS,CAAC;oBAAE,OAAM;gBAC1D,IAAI,CAAC;oBACH,MAAM,GAAG,GAAG,SAAS,CAAC,GAAI,MAA0B,CAAC,CAAA;oBACrD,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAA;oBACpC,IAAI,QAAQ,KAAK,YAAY;wBAAE,OAAM;oBACrC,YAAY,GAAG,QAAQ,CAAA;oBACvB,MAAM,CAAC,GAAG,CAAC,CAAA;gBACb,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,OAAO,EAAE,OAAO,EAAE,CAAC,GAAY,CAAC,CAAA;gBAClC,CAAC;YACH,CAAC,CAAA;YAED,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CACjC,IAAI,CAAC,SAAS,CACZ,CAAC,MAAM,EAAE,EAAE;gBACT,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAA;gBAClB,SAAS,EAAE,CAAA;YACb,CAAC,EACD,EAAE,UAAU,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,CAC/D,CACF,CAAA;YAED,OAAO;gBACL,IAAI;oBACF,IAAI,OAAO;wBAAE,OAAM;oBACnB,OAAO,GAAG,IAAI,CAAA;oBACd,KAAK,MAAM,CAAC,IAAI,IAAI;wBAAE,CAAC,CAAC,IAAI,EAAE,CAAA;gBAChC,CAAC;aACF,CAAA;QACH,CAAC;KACF,CAAA;AACH,CAAC"}
import type { View, ViewResult, ViewSubscription } from "./types";
/**
* A declarative reshape of a view's rows: group, aggregate, sort, limit.
* Deliberately data-only — safe to accept from an agent (e.g. the model emits
* the spec for the chart it wants) because it is validated against the source
* view's result schema and can only reshape rows, never execute code.
*/
export interface DeriveSpec {
groupBy?: string[];
aggregations: Array<{
alias: string;
fn: "count" | "sum" | "avg" | "min" | "max";
/** Source row field. Optional for `count` (counts rows). */
field?: string;
}>;
sort?: {
field: string;
direction?: "asc" | "desc";
};
limit?: number;
}
export interface DerivedView<R = Record<string, unknown>> {
readonly spec: DeriveSpec;
/** JSON Schema of the derived envelope. */
readonly resultSchema: object;
execute(): Promise<ViewResult<R>>;
subscribe(onData: (result: ViewResult<R>) => void, options?: {
intervalMs?: number;
emitInitial?: boolean;
onError?: (error: Error) => void;
}): ViewSubscription;
}
/**
* Derive a live, reshaped view from a source view — e.g. turn the agent's
* `query_order` into a revenue-by-status series:
*
* ```ts
* const revenue = deriveView(ordersView, {
* groupBy: ["status"],
* aggregations: [{ alias: "revenue", fn: "sum", field: "total" }],
* sort: { field: "revenue", direction: "desc" },
* })
* revenue.subscribe(({ data }) => chart.update(data))
* ```
*
* The computation happens client-side over the source rows; for large tables
* prefer an `aggregate_*` view so the database does the work.
*
* The second type parameter asserts the derived row shape (the runtime source
* of truth is `resultSchema`): `deriveView<OrderRow, SeriesRow>(view, spec)`.
*/
export declare function deriveView<T, R = Record<string, unknown>>(source: View<T>, spec: DeriveSpec): DerivedView<R>;
//# sourceMappingURL=derive.d.ts.map
{"version":3,"file":"derive.d.ts","sourceRoot":"","sources":["../../src/view/derive.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAA;AAGjE;;;;;GAKG;AACH,MAAM,WAAW,UAAU;IACzB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;IAClB,YAAY,EAAE,KAAK,CAAC;QAClB,KAAK,EAAE,MAAM,CAAA;QACb,EAAE,EAAE,OAAO,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,CAAA;QAC3C,4DAA4D;QAC5D,KAAK,CAAC,EAAE,MAAM,CAAA;KACf,CAAC,CAAA;IACF,IAAI,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,KAAK,GAAG,MAAM,CAAA;KAAE,CAAA;IACpD,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED,MAAM,WAAW,WAAW,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IACtD,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAA;IACzB,2CAA2C;IAC3C,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAA;IAC7B,OAAO,IAAI,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAA;IACjC,SAAS,CACP,MAAM,EAAE,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC,KAAK,IAAI,EACvC,OAAO,CAAC,EAAE;QAAE,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,OAAO,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAA;KAAE,GACzF,gBAAgB,CAAA;CACpB;AAOD;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,UAAU,CAAC,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACvD,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,EACf,IAAI,EAAE,UAAU,GACf,WAAW,CAAC,CAAC,CAAC,CAwEhB"}
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.deriveView = deriveView;
const errors_1 = require("../errors");
const SAFE_KEY = /^[A-Za-z_][A-Za-z0-9_]*$/;
// Specs may come from an agent — never let an alias write to the prototype chain.
const FORBIDDEN_KEYS = new Set(["__proto__", "constructor", "prototype"]);
const AGG_FNS = new Set(["count", "sum", "avg", "min", "max"]);
/**
* Derive a live, reshaped view from a source view — e.g. turn the agent's
* `query_order` into a revenue-by-status series:
*
* ```ts
* const revenue = deriveView(ordersView, {
* groupBy: ["status"],
* aggregations: [{ alias: "revenue", fn: "sum", field: "total" }],
* sort: { field: "revenue", direction: "desc" },
* })
* revenue.subscribe(({ data }) => chart.update(data))
* ```
*
* The computation happens client-side over the source rows; for large tables
* prefer an `aggregate_*` view so the database does the work.
*
* The second type parameter asserts the derived row shape (the runtime source
* of truth is `resultSchema`): `deriveView<OrderRow, SeriesRow>(view, spec)`.
*/
function deriveView(source, spec) {
const rowProperties = sourceRowProperties(source);
validateSpec(spec, rowProperties);
const apply = (rows) => {
const groupBy = spec.groupBy ?? [];
const groups = new Map();
for (const row of rows) {
const key = JSON.stringify(groupBy.map((g) => row[g]));
const bucket = groups.get(key);
if (bucket)
bucket.push(row);
else
groups.set(key, [row]);
}
let out = [];
for (const bucket of groups.values()) {
const row = {};
for (const g of groupBy)
row[g] = bucket[0][g];
for (const agg of spec.aggregations) {
row[agg.alias] = aggregate(bucket, agg.fn, agg.field);
}
out.push(row);
}
if (spec.sort) {
const { field } = spec.sort;
const mul = spec.sort.direction === "desc" ? -1 : 1;
out.sort((a, b) => {
const av = a[field];
const bv = b[field];
if (av === bv)
return 0;
if (av === null || av === undefined)
return mul;
if (bv === null || bv === undefined)
return -mul;
return av < bv ? -mul : mul;
});
}
if (spec.limit !== undefined)
out = out.slice(0, spec.limit);
return out;
};
const wrap = (result) => ({
data: apply(result.data),
hasMore: false,
});
const resultSchema = buildDerivedSchema(spec, rowProperties);
return {
spec,
resultSchema,
execute: async () => wrap(await source.execute()),
subscribe(onData, options) {
// Diff on the derived output: a source change that doesn't move the
// derived numbers (e.g. an untouched column changed) must not emit.
let lastSnapshot;
let emittedOnce = false;
const emitInitial = options?.emitInitial !== false;
return source.subscribe((result) => {
const derived = wrap(result);
const snapshot = JSON.stringify(derived);
const first = !emittedOnce;
emittedOnce = true;
if (snapshot === lastSnapshot)
return;
lastSnapshot = snapshot;
if (first && !emitInitial)
return;
onData(derived);
}, { intervalMs: options?.intervalMs, onError: options?.onError });
},
};
}
function aggregate(rows, fn, field) {
if (fn === "count") {
return field
? rows.filter((r) => r[field] !== null && r[field] !== undefined).length
: rows.length;
}
const values = rows.map((r) => r[field]).filter((v) => typeof v === "number");
if (values.length === 0)
return null;
switch (fn) {
case "sum":
return values.reduce((a, b) => a + b, 0);
case "avg":
return values.reduce((a, b) => a + b, 0) / values.length;
case "min":
return values.reduce((a, b) => Math.min(a, b));
case "max":
return values.reduce((a, b) => Math.max(a, b));
}
}
function sourceRowProperties(source) {
const envelope = source.resultSchema;
return envelope.properties?.data?.items?.properties ?? {};
}
function validateSpec(spec, rowProperties) {
if (!Array.isArray(spec.aggregations) || spec.aggregations.length === 0) {
throw new errors_1.ValidationError("deriveView() requires at least one aggregation");
}
const aliases = new Set();
for (const agg of spec.aggregations) {
if (!AGG_FNS.has(agg.fn)) {
throw new errors_1.ValidationError(`Unknown aggregation fn "${agg.fn}"`);
}
if (!SAFE_KEY.test(agg.alias) || FORBIDDEN_KEYS.has(agg.alias)) {
throw new errors_1.ValidationError(`Invalid aggregation alias "${agg.alias}"`);
}
if (agg.fn !== "count" && !agg.field) {
throw new errors_1.ValidationError(`Aggregation "${agg.alias}" (${agg.fn}) requires a field`);
}
if (agg.field && !(agg.field in rowProperties)) {
throw new errors_1.ValidationError(`Aggregation field "${agg.field}" is not in the source view`);
}
aliases.add(agg.alias);
}
for (const g of spec.groupBy ?? []) {
if (!(g in rowProperties)) {
throw new errors_1.ValidationError(`groupBy field "${g}" is not in the source view`);
}
}
if (spec.sort) {
const sortable = new Set([...(spec.groupBy ?? []), ...aliases]);
if (!sortable.has(spec.sort.field)) {
throw new errors_1.ValidationError(`Sort field "${spec.sort.field}" must be a groupBy field or an aggregation alias`);
}
}
if (spec.limit !== undefined && (!Number.isInteger(spec.limit) || spec.limit < 1)) {
throw new errors_1.ValidationError("limit must be a positive integer");
}
}
function buildDerivedSchema(spec, rowProperties) {
const properties = {};
for (const g of spec.groupBy ?? [])
properties[g] = rowProperties[g];
for (const agg of spec.aggregations) {
properties[agg.alias] = { type: agg.fn === "count" ? "integer" : "number" };
}
return {
type: "object",
properties: {
data: {
type: "array",
items: {
type: "object",
properties,
required: Object.keys(properties),
additionalProperties: false,
},
},
hasMore: { type: "boolean" },
},
required: ["data", "hasMore"],
};
}
//# sourceMappingURL=derive.js.map
{"version":3,"file":"derive.js","sourceRoot":"","sources":["../../src/view/derive.ts"],"names":[],"mappings":"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"}
import type { ViewResult, SubscribeOptions, ViewSubscription } from "./types";
export declare const DEFAULT_VIEW_INTERVAL_MS = 5000;
export declare const DEFAULT_MAX_BACKOFF_MS = 60000;
/** Caps concurrent view executions across a Valv instance so a fleet of
* dashboards cannot stampede the database. */
export declare class Semaphore {
private max;
private active;
private queue;
constructor(max: number);
run<R>(fn: () => Promise<R>): Promise<R>;
}
/**
* One execution loop per View, fanned out to any number of subscribers.
*
* - Polling: a single recursive setTimeout — overlap-free, with exponential
* backoff on consecutive errors and optional jitter. The effective interval
* is the minimum across active subscribers.
* - Native: when the adapter provides change notifications, they replace the
* timer; bursts are coalesced by the in-flight guard.
* - Each subscriber tracks the last snapshot it saw, so late subscribers get
* the cached result immediately and only genuinely new data afterwards.
*/
export declare class ViewEngine<T> {
private executeFn;
private nativeSubscribe?;
private limiter?;
private subscribers;
private running;
private timer;
private inFlight;
private pendingNotify;
private consecutiveErrors;
private lastResult;
private lastSnapshot;
private unsubscribeNative;
constructor(executeFn: () => Promise<ViewResult<T>>, nativeSubscribe?: ((onChange: () => void) => () => void) | undefined, limiter?: Semaphore | undefined);
subscribe(onData: (result: ViewResult<T>) => void, options?: SubscribeOptions): ViewSubscription;
private start;
private stop;
private nextDelay;
private tick;
private emitTo;
}
//# sourceMappingURL=engine.d.ts.map
{"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../../src/view/engine.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAc,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAA;AAEzF,eAAO,MAAM,wBAAwB,OAAO,CAAA;AAC5C,eAAO,MAAM,sBAAsB,QAAS,CAAA;AAE5C;+CAC+C;AAC/C,qBAAa,SAAS;IAIR,OAAO,CAAC,GAAG;IAHvB,OAAO,CAAC,MAAM,CAAI;IAClB,OAAO,CAAC,KAAK,CAAwB;gBAEjB,GAAG,EAAE,MAAM;IAEzB,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;CAY/C;AAeD;;;;;;;;;;GAUG;AACH,qBAAa,UAAU,CAAC,CAAC;IAYrB,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,eAAe,CAAC;IACxB,OAAO,CAAC,OAAO,CAAC;IAblB,OAAO,CAAC,WAAW,CAA2B;IAC9C,OAAO,CAAC,OAAO,CAAQ;IACvB,OAAO,CAAC,KAAK,CAA2C;IACxD,OAAO,CAAC,QAAQ,CAAQ;IACxB,OAAO,CAAC,aAAa,CAAQ;IAC7B,OAAO,CAAC,iBAAiB,CAAI;IAC7B,OAAO,CAAC,UAAU,CAA2B;IAC7C,OAAO,CAAC,YAAY,CAAoB;IACxC,OAAO,CAAC,iBAAiB,CAA0B;gBAGzC,SAAS,EAAE,MAAM,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EACvC,eAAe,CAAC,GAAE,CAAC,QAAQ,EAAE,MAAM,IAAI,KAAK,MAAM,IAAI,aAAA,EACtD,OAAO,CAAC,EAAE,SAAS,YAAA;IAG7B,SAAS,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,OAAO,CAAC,EAAE,gBAAgB,GAAG,gBAAgB;IAkChG,OAAO,CAAC,KAAK;IAqBb,OAAO,CAAC,IAAI;IASZ,OAAO,CAAC,SAAS;YAaH,IAAI;IAyClB,OAAO,CAAC,MAAM;CAOf"}
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.ViewEngine = exports.Semaphore = exports.DEFAULT_MAX_BACKOFF_MS = exports.DEFAULT_VIEW_INTERVAL_MS = void 0;
exports.DEFAULT_VIEW_INTERVAL_MS = 5000;
exports.DEFAULT_MAX_BACKOFF_MS = 60000;
/** Caps concurrent view executions across a Valv instance so a fleet of
* dashboards cannot stampede the database. */
class Semaphore {
constructor(max) {
this.max = max;
this.active = 0;
this.queue = [];
}
async run(fn) {
if (this.active >= this.max) {
await new Promise((resolve) => this.queue.push(resolve));
}
this.active++;
try {
return await fn();
}
finally {
this.active--;
this.queue.shift()?.();
}
}
}
exports.Semaphore = Semaphore;
/**
* One execution loop per View, fanned out to any number of subscribers.
*
* - Polling: a single recursive setTimeout — overlap-free, with exponential
* backoff on consecutive errors and optional jitter. The effective interval
* is the minimum across active subscribers.
* - Native: when the adapter provides change notifications, they replace the
* timer; bursts are coalesced by the in-flight guard.
* - Each subscriber tracks the last snapshot it saw, so late subscribers get
* the cached result immediately and only genuinely new data afterwards.
*/
class ViewEngine {
constructor(executeFn, nativeSubscribe, limiter) {
this.executeFn = executeFn;
this.nativeSubscribe = nativeSubscribe;
this.limiter = limiter;
this.subscribers = new Set();
this.running = false;
this.inFlight = false;
this.pendingNotify = false;
this.consecutiveErrors = 0;
}
subscribe(onData, options) {
const sub = {
onData,
onError: options?.onError,
emitInitial: options?.emitInitial !== false,
intervalMs: options?.intervalMs ?? exports.DEFAULT_VIEW_INTERVAL_MS,
jitter: options?.jitter ?? 0,
diffKey: options?.diffKey,
baselined: false,
};
this.subscribers.add(sub);
// The engine already has data (another subscriber's poll): serve it from
// cache instead of waiting for the next tick.
if (this.lastResult !== undefined && this.lastSnapshot !== undefined) {
if (sub.emitInitial)
this.emitTo(sub, this.lastResult);
sub.baselined = true;
sub.seenSnapshot = this.lastSnapshot;
sub.seenData = this.lastResult.data;
}
this.start();
let stopped = false;
return {
stop: () => {
if (stopped)
return;
stopped = true;
this.subscribers.delete(sub);
if (this.subscribers.size === 0)
this.stop();
},
};
}
start() {
if (this.running)
return;
this.running = true;
if (this.nativeSubscribe) {
void this.tick().then(() => {
if (this.running && !this.unsubscribeNative) {
this.unsubscribeNative = this.nativeSubscribe(() => void this.tick());
}
});
return;
}
const loop = async () => {
await this.tick();
if (!this.running)
return;
this.timer = setTimeout(() => void loop(), this.nextDelay());
};
void loop();
}
stop() {
this.running = false;
if (this.timer !== undefined)
clearTimeout(this.timer);
this.timer = undefined;
this.unsubscribeNative?.();
this.unsubscribeNative = undefined;
this.consecutiveErrors = 0;
}
nextDelay() {
let interval = exports.DEFAULT_VIEW_INTERVAL_MS;
let jitter = 0;
for (const sub of this.subscribers) {
interval = Math.min(interval, sub.intervalMs);
jitter = Math.max(jitter, sub.jitter);
}
// Exponential backoff while the query keeps failing, capped at 60s.
const backoff = Math.min(interval * 2 ** this.consecutiveErrors, exports.DEFAULT_MAX_BACKOFF_MS);
const jitterFactor = jitter > 0 ? 1 + (Math.random() * 2 - 1) * jitter : 1;
return Math.max(interval, backoff) * jitterFactor;
}
async tick() {
// Coalesce notifications that arrive while a query is in flight.
if (this.inFlight) {
this.pendingNotify = true;
return;
}
this.inFlight = true;
try {
const result = this.limiter ? await this.limiter.run(this.executeFn) : await this.executeFn();
this.consecutiveErrors = 0;
if (!this.running)
return;
const snapshot = JSON.stringify(result);
this.lastSnapshot = snapshot;
this.lastResult = result;
for (const sub of [...this.subscribers]) {
if (!sub.baselined) {
if (sub.emitInitial)
this.emitTo(sub, result);
sub.baselined = true;
}
else if (sub.seenSnapshot !== snapshot) {
this.emitTo(sub, result);
}
else {
continue;
}
sub.seenSnapshot = snapshot;
sub.seenData = result.data;
}
}
catch (err) {
this.consecutiveErrors++;
if (!this.running)
return;
for (const sub of [...this.subscribers])
sub.onError?.(err);
}
finally {
this.inFlight = false;
if (this.pendingNotify) {
this.pendingNotify = false;
void this.tick();
}
}
}
emitTo(sub, result) {
if (!sub.diffKey) {
sub.onData(result);
return;
}
sub.onData({ ...result, changes: computeChanges(sub.seenData, result.data, sub.diffKey) });
}
}
exports.ViewEngine = ViewEngine;
function computeChanges(prev, next, key) {
const prevByKey = new Map();
for (const row of prev ?? []) {
prevByKey.set(row[key], row);
}
const added = [];
const updated = [];
const seen = new Set();
for (const row of next) {
const k = row[key];
seen.add(k);
if (!prevByKey.has(k)) {
added.push(row);
}
else if (JSON.stringify(prevByKey.get(k)) !== JSON.stringify(row)) {
updated.push(row);
}
}
const removed = (prev ?? []).filter((row) => !seen.has(row[key]));
return { added, removed, updated };
}
//# sourceMappingURL=engine.js.map
{"version":3,"file":"engine.js","sourceRoot":"","sources":["../../src/view/engine.ts"],"names":[],"mappings":"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"}
import type { ResolvedQuery } from "../ir/types";
import type { SchemaMap } from "../types";
/**
* Build a JSON Schema describing the envelope a View's execute() returns,
* derived from the resolved (policy-filtered) query and the introspected
* schema. Property types match the serialized form (Date → date-time string,
* Decimal → number, BigInt → string).
*/
export declare function buildResultSchema(query: ResolvedQuery, schema: SchemaMap): object;
//# sourceMappingURL=result-schema.d.ts.map
{"version":3,"file":"result-schema.d.ts","sourceRoot":"","sources":["../../src/view/result-schema.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAChD,OAAO,KAAK,EAAE,SAAS,EAAe,MAAM,UAAU,CAAA;AAGtD;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,SAAS,GAAG,MAAM,CAejF"}
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.buildResultSchema = buildResultSchema;
const generator_1 = require("../tools/generator");
/**
* Build a JSON Schema describing the envelope a View's execute() returns,
* derived from the resolved (policy-filtered) query and the introspected
* schema. Property types match the serialized form (Date → date-time string,
* Decimal → number, BigInt → string).
*/
function buildResultSchema(query, schema) {
const rowSchema = query.operation === "aggregate"
? buildAggregateRowSchema(query, schema)
: buildRowSchema(query, schema);
return {
type: "object",
properties: {
data: { type: "array", items: rowSchema },
hasMore: { type: "boolean" },
nextCursor: { type: "string" },
},
required: ["data", "hasMore"],
};
}
function resultFieldSchema(field) {
const base = (0, generator_1.buildFieldSchema)(field);
// anyOf rather than a type array so schemas carrying `format`/`enum` stay valid
return field.isNullable ? { anyOf: [base, { type: "null" }] } : base;
}
function buildRowSchema(query, schema) {
const resource = schema.resources[query.resource];
const internal = new Set(query.internalFields ?? []);
const properties = {};
for (const fieldName of query.fields) {
if (internal.has(fieldName))
continue;
const field = resource?.fields[fieldName];
if (field)
properties[fieldName] = resultFieldSchema(field);
}
for (const [relName, inc] of Object.entries(query.include ?? {})) {
const related = schema.resources[inc.resource];
const relProperties = {};
for (const fieldName of inc.fields) {
const field = related?.fields[fieldName];
if (field)
relProperties[fieldName] = resultFieldSchema(field);
}
const relRow = {
type: "object",
properties: relProperties,
required: Object.keys(relProperties),
additionalProperties: false,
};
properties[relName] =
inc.type === "belongsTo"
? { anyOf: [relRow, { type: "null" }] }
: { type: "array", items: relRow };
}
return {
type: "object",
properties,
required: Object.keys(properties),
additionalProperties: false,
};
}
// Describes the flat-alias row shape the IR promises ({ groupByField, alias }),
// returned by both the ClickHouse and Prisma adapters.
function buildAggregateRowSchema(query, schema) {
const resource = schema.resources[query.resource];
const properties = {};
for (const fieldName of query.groupBy ?? []) {
const field = resource?.fields[fieldName];
if (field)
properties[fieldName] = resultFieldSchema(field);
}
for (const agg of query.aggregations ?? []) {
properties[agg.alias] = { type: agg.fn === "count" ? "integer" : "number" };
}
return {
type: "object",
properties,
required: Object.keys(properties),
additionalProperties: false,
};
}
//# sourceMappingURL=result-schema.js.map
{"version":3,"file":"result-schema.js","sourceRoot":"","sources":["../../src/view/result-schema.ts"],"names":[],"mappings":"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"}
import type { ViewResult, SubscribeOptions, ViewSubscription } from "./types";
export declare const DEFAULT_VIEW_INTERVAL_MS = 5000;
/**
* Drive a view subscription: re-execute, diff against the previous snapshot,
* and emit only on change. When `nativeSubscribe` is provided (adapter change
* notifications), it replaces the polling timer — each notification triggers a
* re-execute + diff, so native streams never bypass the policy pipeline.
*/
export declare function startSubscription<T>(executeFn: () => Promise<ViewResult<T>>, onData: (result: ViewResult<T>) => void, options: SubscribeOptions | undefined, nativeSubscribe?: (onChange: () => void) => () => void): ViewSubscription;
//# sourceMappingURL=subscription.d.ts.map
{"version":3,"file":"subscription.d.ts","sourceRoot":"","sources":["../../src/view/subscription.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAA;AAE7E,eAAO,MAAM,wBAAwB,OAAO,CAAA;AAE5C;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,EACjC,SAAS,EAAE,MAAM,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EACvC,MAAM,EAAE,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC,KAAK,IAAI,EACvC,OAAO,EAAE,gBAAgB,GAAG,SAAS,EACrC,eAAe,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,IAAI,KAAK,MAAM,IAAI,GACrD,gBAAgB,CAiDlB"}
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.DEFAULT_VIEW_INTERVAL_MS = void 0;
exports.startSubscription = startSubscription;
exports.DEFAULT_VIEW_INTERVAL_MS = 5000;
/**
* Drive a view subscription: re-execute, diff against the previous snapshot,
* and emit only on change. When `nativeSubscribe` is provided (adapter change
* notifications), it replaces the polling timer — each notification triggers a
* re-execute + diff, so native streams never bypass the policy pipeline.
*/
function startSubscription(executeFn, onData, options, nativeSubscribe) {
const intervalMs = options?.intervalMs ?? exports.DEFAULT_VIEW_INTERVAL_MS;
const emitInitial = options?.emitInitial !== false;
let stopped = false;
let firstTick = true;
let lastSnapshot;
let timer;
let unsubscribe;
async function tick() {
try {
const result = await executeFn();
if (stopped)
return;
const snapshot = JSON.stringify(result);
const changed = snapshot !== lastSnapshot;
const shouldEmit = firstTick ? emitInitial : changed;
lastSnapshot = snapshot;
firstTick = false;
if (shouldEmit)
onData(result);
}
catch (err) {
if (stopped)
return;
firstTick = false;
options?.onError?.(err);
}
}
if (nativeSubscribe) {
void tick().then(() => {
if (!stopped)
unsubscribe = nativeSubscribe(() => void tick());
});
}
else {
// setTimeout rescheduled after each execution completes — overlap-free by
// construction even when a query runs longer than the interval.
const loop = async () => {
await tick();
if (!stopped)
timer = setTimeout(() => void loop(), intervalMs);
};
void loop();
}
return {
stop() {
if (stopped)
return;
stopped = true;
if (timer !== undefined)
clearTimeout(timer);
unsubscribe?.();
},
};
}
//# sourceMappingURL=subscription.js.map
{"version":3,"file":"subscription.js","sourceRoot":"","sources":["../../src/view/subscription.ts"],"names":[],"mappings":";;;AAUA,8CAsDC;AA9DY,QAAA,wBAAwB,GAAG,IAAI,CAAA;AAE5C;;;;;GAKG;AACH,SAAgB,iBAAiB,CAC/B,SAAuC,EACvC,MAAuC,EACvC,OAAqC,EACrC,eAAsD;IAEtD,MAAM,UAAU,GAAG,OAAO,EAAE,UAAU,IAAI,gCAAwB,CAAA;IAClE,MAAM,WAAW,GAAG,OAAO,EAAE,WAAW,KAAK,KAAK,CAAA;IAElD,IAAI,OAAO,GAAG,KAAK,CAAA;IACnB,IAAI,SAAS,GAAG,IAAI,CAAA;IACpB,IAAI,YAAgC,CAAA;IACpC,IAAI,KAAgD,CAAA;IACpD,IAAI,WAAqC,CAAA;IAEzC,KAAK,UAAU,IAAI;QACjB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,SAAS,EAAE,CAAA;YAChC,IAAI,OAAO;gBAAE,OAAM;YACnB,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAA;YACvC,MAAM,OAAO,GAAG,QAAQ,KAAK,YAAY,CAAA;YACzC,MAAM,UAAU,GAAG,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,CAAA;YACpD,YAAY,GAAG,QAAQ,CAAA;YACvB,SAAS,GAAG,KAAK,CAAA;YACjB,IAAI,UAAU;gBAAE,MAAM,CAAC,MAAM,CAAC,CAAA;QAChC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,OAAO;gBAAE,OAAM;YACnB,SAAS,GAAG,KAAK,CAAA;YACjB,OAAO,EAAE,OAAO,EAAE,CAAC,GAAY,CAAC,CAAA;QAClC,CAAC;IACH,CAAC;IAED,IAAI,eAAe,EAAE,CAAC;QACpB,KAAK,IAAI,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE;YACpB,IAAI,CAAC,OAAO;gBAAE,WAAW,GAAG,eAAe,CAAC,GAAG,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,CAAA;QAChE,CAAC,CAAC,CAAA;IACJ,CAAC;SAAM,CAAC;QACN,0EAA0E;QAC1E,gEAAgE;QAChE,MAAM,IAAI,GAAG,KAAK,IAAmB,EAAE;YACrC,MAAM,IAAI,EAAE,CAAA;YACZ,IAAI,CAAC,OAAO;gBAAE,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,KAAK,IAAI,EAAE,EAAE,UAAU,CAAC,CAAA;QACjE,CAAC,CAAA;QACD,KAAK,IAAI,EAAE,CAAA;IACb,CAAC;IAED,OAAO;QACL,IAAI;YACF,IAAI,OAAO;gBAAE,OAAM;YACnB,OAAO,GAAG,IAAI,CAAA;YACd,IAAI,KAAK,KAAK,SAAS;gBAAE,YAAY,CAAC,KAAK,CAAC,CAAA;YAC5C,WAAW,EAAE,EAAE,CAAA;QACjB,CAAC;KACF,CAAA;AACH,CAAC"}
/** Row-level deltas between two emissions, computed when `diffKey` is set. */
export interface RowChanges<T = Record<string, unknown>> {
added: T[];
removed: T[];
updated: T[];
}
/** The uniform envelope returned by View.execute(), regardless of operation.
* find passes the adapter envelope through; findOne wraps the single row
* (or none); aggregate wraps the grouped rows. */
export interface ViewResult<T = Record<string, unknown>> {
data: T[];
hasMore: boolean;
nextCursor?: string;
/** Present on subscription emissions when `diffKey` is set. */
changes?: RowChanges<T>;
}
export interface SubscribeOptions {
/** Poll interval in ms. Ignored when the adapter provides native subscribe. Default 5000. */
intervalMs?: number;
/** Emit the first result immediately instead of waiting for a change. Default true. */
emitInitial?: boolean;
/** Called on execution errors; polling continues (with backoff). Errors are swallowed if omitted. */
onError?: (error: Error) => void;
/** Random jitter applied to each poll delay, as a fraction of the interval
* (0–1). Spreads load when many dashboards poll the same database. Default 0. */
jitter?: number;
/** Row identity field (e.g. "id"). When set, emissions include `changes` —
* row-level added/removed/updated deltas for smooth chart updates. */
diffKey?: string;
}
export interface ViewSubscription {
/** Stop polling / unsubscribe. Idempotent. */
stop(): void;
}
/**
* The persistable form of a view: plain JSON, safe to store in a database or
* config. Deliberately excludes the context — ctx is the security boundary and
* must be re-resolved when the view is rehydrated with `valv.viewFromJSON`.
*/
export interface SerializedView {
valv: "view";
v: 1;
toolName: string;
args: unknown;
}
/** A named view definition for the registry (`valv.registerView`). */
export interface ViewDefinition {
toolName: string;
args?: unknown;
description?: string;
}
/**
* A captured agent query: re-executable through the full policy pipeline
* without the LLM in the loop, with a runtime JSON Schema of its result shape.
* Created via `valv.view(toolName, args, ctx)`.
*/
export interface View<T = Record<string, unknown>> {
readonly toolName: string;
readonly args: unknown;
readonly resource: string;
readonly operation: "find" | "findOne" | "aggregate";
/** Registry name when opened via `valv.openView()`. */
readonly name?: string;
/** JSON Schema of the envelope execute() returns. Snapshot taken at view
* creation — if policies later narrow the allowed fields, rows simply omit
* the removed properties. */
readonly resultSchema: object;
/** Re-run the query. Policies are re-evaluated on every call. */
execute(): Promise<ViewResult<T>>;
/** Watch the query for changes: polls + diffs (or uses the adapter's native
* change notifications when available) and calls onData only when the
* result actually changed. All subscribers on the same View share one
* polling loop. */
subscribe(onData: (result: ViewResult<T>) => void, options?: SubscribeOptions): ViewSubscription;
/** Persistable form (no ctx). Rehydrate with `valv.viewFromJSON(json, ctx)`. */
toJSON(): SerializedView;
}
//# sourceMappingURL=types.d.ts.map
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/view/types.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,MAAM,WAAW,UAAU,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IACrD,KAAK,EAAE,CAAC,EAAE,CAAA;IACV,OAAO,EAAE,CAAC,EAAE,CAAA;IACZ,OAAO,EAAE,CAAC,EAAE,CAAA;CACb;AAED;;mDAEmD;AACnD,MAAM,WAAW,UAAU,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IACrD,IAAI,EAAE,CAAC,EAAE,CAAA;IACT,OAAO,EAAE,OAAO,CAAA;IAChB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,+DAA+D;IAC/D,OAAO,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,CAAA;CACxB;AAED,MAAM,WAAW,gBAAgB;IAC/B,6FAA6F;IAC7F,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,uFAAuF;IACvF,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,qGAAqG;IACrG,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAA;IAChC;sFACkF;IAClF,MAAM,CAAC,EAAE,MAAM,CAAA;IACf;2EACuE;IACvE,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED,MAAM,WAAW,gBAAgB;IAC/B,8CAA8C;IAC9C,IAAI,IAAI,IAAI,CAAA;CACb;AAED;;;;GAIG;AACH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAA;IACZ,CAAC,EAAE,CAAC,CAAA;IACJ,QAAQ,EAAE,MAAM,CAAA;IAChB,IAAI,EAAE,OAAO,CAAA;CACd;AAED,sEAAsE;AACtE,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAA;IAChB,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB;AAED;;;;GAIG;AACH,MAAM,WAAW,IAAI,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAC/C,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAA;IACtB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,GAAG,WAAW,CAAA;IACpD,uDAAuD;IACvD,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;IACtB;;kCAE8B;IAC9B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAA;IAC7B,iEAAiE;IACjE,OAAO,IAAI,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAA;IACjC;;;wBAGoB;IACpB,SAAS,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,OAAO,CAAC,EAAE,gBAAgB,GAAG,gBAAgB,CAAA;IAChG,gFAAgF;IAChF,MAAM,IAAI,cAAc,CAAA;CACzB"}
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
//# sourceMappingURL=types.js.map
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/view/types.ts"],"names":[],"mappings":""}
import { SchemaMap, PolicyFn, PolicyResult, DefaultContext } from "./types";
import { ResolvedQuery } from "./ir/types";
import type { View, ViewDefinition } from "./view/types";
import * as formats from "./formatters";
import { ToolFormatter } from "./formatters";
export interface VistalConfig<TContext = DefaultContext, TResources extends string = string> {
adapter: VistalAdapter;
defaultPolicy?: "deny-all" | "allow-all";
/** Warn (false, default) or throw (true) when policy() is called with an unknown resource name */
strictPolicyKeys?: boolean;
/** Fallback policy resolver for resources without an explicit policy() call */
resolvePolicy?: (resource: TResources, ctx: TContext) => PolicyResult;
/** Called after every executeTool invocation, successful or not */
onQuery?: (event: QueryEvent<TContext, TResources>) => void;
/** Hard cap on `limit` for query tools. Default 100. */
maxLimit?: number;
/** Default `limit` applied when the model omits one. Default 50. */
defaultLimit?: number;
/** Cap on concurrent view executions (polling + native re-runs) across this
* instance, so many live dashboards can't stampede the database. Default 16. */
maxConcurrentViewQueries?: number;
}
/** Resolved pagination bounds threaded into the builder and tool generators. */
export interface PaginationConfig {
maxLimit: number;
defaultLimit: number;
}
export interface QueryEvent<TContext, TResources extends string = string> {
toolName: string;
resource: TResources;
operation: string;
ctx: TContext;
durationMs: number;
error?: Error;
/** "tool" for agent tool calls, "view" for View.execute()/subscribe() re-runs. */
source?: "tool" | "view";
}
export interface GetToolsOptions<TResources extends string = string> {
resources?: TResources[];
maxTools?: number;
mode?: "per-resource" | "consolidated";
}
export interface LLMTool {
name: string;
description: string;
input_schema: object;
}
export interface ExecutableTool extends LLMTool {
execute: (args: unknown) => Promise<unknown>;
}
/**
* A provider-formatted tool. `definition` is the clean provider-specific shape
* to hand to the model API; `name` and `execute` are kept alongside it for
* dispatching tool calls regardless of where the provider nests the name.
*/
export interface FormattedTool<T = unknown> {
definition: T;
name: string;
execute: (args: unknown) => Promise<unknown>;
}
export interface ResourceField {
name: string;
type: string;
isId: boolean;
isNullable: boolean;
hasDefaultValue: boolean;
sensitive: boolean;
}
export interface ResourceRelation {
name: string;
target: string;
type: "belongsTo" | "hasMany" | "manyToMany";
}
export interface ResourceDescriptor {
name: string;
fields: ResourceField[];
relations: ResourceRelation[];
policyStub: string;
}
export interface VistalAdapter {
introspect(): Promise<SchemaMap>;
execute(query: ResolvedQuery): Promise<unknown>;
/**
* Optional native change notifications for live views. Called with the
* policy-resolved query to watch; invoke `onChange` whenever the underlying
* data may have changed — the view then re-executes through the policy
* pipeline and diffs, so notifications never carry data past the policy.
* Returns an unsubscribe function. When absent, views fall back to polling.
*/
subscribe?(query: ResolvedQuery, onChange: () => void): () => void;
}
export declare class Vistal<TContext = DefaultContext, TResources extends string = string> {
private adapter;
private defaultPolicy;
private policies;
private schemaCache;
private strictPolicyKeys;
private resolvePolicyFn?;
private onQueryFn?;
private pagination;
private viewDefs;
private viewLimiter;
constructor(config: VistalConfig<TContext, TResources>);
/** Register an access policy for a resource. Use "*" as a wildcard fallback. */
policy(resource: TResources | "*", fn: PolicyFn<TContext>): this;
/**
* Provider-formatted tools.
*
* `anthropic` / `openai` / `gemini` / `format` return `{ definition, name,
* execute }[]` — `definition` is the provider's tool shape, `name`/`execute`
* are kept alongside for dispatching tool calls.
*
* `vercel` is different: it returns a ready-to-use Vercel AI SDK `ToolSet`
* (a record keyed by tool name, each value built with `tool()` + `jsonSchema()`
* and `execute` already wired) so it drops straight into `generateText`.
*
* ```ts
* const tools = await vistal.tools.openai(ctx)
* // tools.map(t => t.definition) → pass to the API
* // on a tool call: tools.find(t => t.name === call.name)!.execute(args)
*
* const tools = await vistal.tools.vercel(ctx)
* await generateText({ model, tools, prompt }) // no wrapping needed
* ```
*/
get tools(): {
anthropic: (ctx: TContext, options?: GetToolsOptions<TResources>) => Promise<FormattedTool<formats.AnthropicTool>[]>;
openai: (ctx: TContext, options?: GetToolsOptions<TResources>) => Promise<FormattedTool<formats.OpenAITool>[]>;
gemini: (ctx: TContext, options?: GetToolsOptions<TResources>) => Promise<FormattedTool<formats.GeminiTool>[]>;
vercel: (ctx: TContext, options?: GetToolsOptions<TResources>) => Promise<Record<string, any>>;
format: <T>(ctx: TContext, formatter: ToolFormatter<T>, options?: GetToolsOptions<TResources>) => Promise<FormattedTool<T>[]>;
};
/**
* Build a Vercel AI SDK `ToolSet` — `{ [name]: tool({ description, parameters,
* execute }) }` — ready to pass as `tools` to `generateText`/`streamText`.
* Requires the optional peer dependency `ai`. Tool errors are caught and
* returned as `{ error }` so the agent can recover instead of aborting.
*/
private vercelTools;
/** Generate provider-neutral tool definitions shaped by the evaluated policy. */
private neutralTools;
private formatTools;
/**
* Generate Anthropic-shaped tool definitions (`{ name, description,
* input_schema }`). For other providers use the `tools` namespace.
*/
getTools(ctx: TContext, options?: GetToolsOptions<TResources>): Promise<LLMTool[]>;
/** Returns tools with execute() attached and result serialization (Decimal/Date/BigInt) built in. */
executableTools(ctx: TContext, options?: GetToolsOptions<TResources>): Promise<ExecutableTool[]>;
executeTool(toolName: string, input: unknown, ctx: TContext): Promise<unknown>;
private executeToolInternal;
/**
* Capture an agent query (a read tool call) as a reusable, policy-enforced
* view the application can re-execute and subscribe to without the LLM in
* the loop — e.g. to drive a live chart from a query the agent built.
*
* Accepts per-resource tool names (`query_order`) and consolidated calls
* (`query` + `{ resource: "order", ... }`). Only read operations are
* allowed; writes and meta tools throw a ValidationError. Invalid args or a
* denied policy throw immediately at creation. Policies are re-evaluated on
* every execute()/poll, and results are serialized (Decimal/Date/BigInt) to
* JSON-safe values.
*
* ```ts
* const view = await vistal.view<Order>("query_order", call.args, ctx)
* view.resultSchema // JSON Schema of { data, hasMore, nextCursor? }
* const { data } = await view.execute()
* const sub = view.subscribe((r) => chart.update(r.data), { intervalMs: 5000 })
* sub.stop()
* ```
*/
view<T = Record<string, unknown>>(toolName: string, args: unknown, ctx: TContext): Promise<View<T>>;
/**
* Rehydrate a persisted view (`view.toJSON()`). The context is deliberately
* not part of the serialized form — resolve it fresh for the caller opening
* the view, exactly as you would for a tool call.
*/
viewFromJSON<T = Record<string, unknown>>(json: unknown, ctx: TContext): Promise<View<T>>;
/**
* Register a named view definition — a governed catalog of queries that may
* be opened as live views. Useful to allow-list what dashboards can run and
* to share definitions across processes.
*/
registerView(name: string, def: ViewDefinition): this;
/** Open a registered view under a context. Throws on unknown names. */
openView<T = Record<string, unknown>>(name: string, ctx: TContext): Promise<View<T>>;
/** List registered view definitions. */
listViews(): Array<{
name: string;
} & ViewDefinition>;
private resourceOperations;
private listResourcesResult;
private describeResourceResult;
loadSchema(): Promise<SchemaMap>;
/** Returns the list of resource names discovered from the schema. */
resources(): Promise<TResources[]>;
/** Returns schema info + policy stubs for all resources — useful for discovering resource names. */
describe(): Promise<ResourceDescriptor[]>;
private buildEffectivePolicies;
private validatePolicyKeys;
}
//# sourceMappingURL=vistal.d.ts.map
{"version":3,"file":"vistal.d.ts","sourceRoot":"","sources":["../src/vistal.ts"],"names":[],"mappings":"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"}
"use strict";
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || (function () {
var ownKeys = function(o) {
ownKeys = Object.getOwnPropertyNames || function (o) {
var ar = [];
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
return ar;
};
return ownKeys(o);
};
return function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
__setModuleDefault(result, mod);
return result;
};
})();
Object.defineProperty(exports, "__esModule", { value: true });
exports.Vistal = void 0;
const builder_1 = require("./ir/builder");
const result_schema_1 = require("./view/result-schema");
const engine_1 = require("./view/engine");
const generator_1 = require("./tools/generator");
const engine_2 = require("./policy/engine");
const serializer_1 = require("./serializer");
const formats = __importStar(require("./formatters"));
const errors_1 = require("./errors");
class Vistal {
constructor(config) {
this.policies = {};
this.schemaCache = null;
this.viewDefs = {};
this.adapter = config.adapter;
this.defaultPolicy = config.defaultPolicy ?? "deny-all";
this.strictPolicyKeys = config.strictPolicyKeys ?? false;
this.resolvePolicyFn = config.resolvePolicy;
this.onQueryFn = config.onQuery;
this.pagination = {
maxLimit: config.maxLimit ?? generator_1.DEFAULT_PAGINATION.maxLimit,
defaultLimit: config.defaultLimit ?? generator_1.DEFAULT_PAGINATION.defaultLimit,
};
this.viewLimiter = new engine_1.Semaphore(config.maxConcurrentViewQueries ?? 16);
}
/** Register an access policy for a resource. Use "*" as a wildcard fallback. */
policy(resource, fn) {
this.policies[resource] = fn;
return this;
}
/**
* Provider-formatted tools.
*
* `anthropic` / `openai` / `gemini` / `format` return `{ definition, name,
* execute }[]` — `definition` is the provider's tool shape, `name`/`execute`
* are kept alongside for dispatching tool calls.
*
* `vercel` is different: it returns a ready-to-use Vercel AI SDK `ToolSet`
* (a record keyed by tool name, each value built with `tool()` + `jsonSchema()`
* and `execute` already wired) so it drops straight into `generateText`.
*
* ```ts
* const tools = await vistal.tools.openai(ctx)
* // tools.map(t => t.definition) → pass to the API
* // on a tool call: tools.find(t => t.name === call.name)!.execute(args)
*
* const tools = await vistal.tools.vercel(ctx)
* await generateText({ model, tools, prompt }) // no wrapping needed
* ```
*/
get tools() {
return {
anthropic: (ctx, options) => this.formatTools(ctx, formats.anthropic, options),
openai: (ctx, options) => this.formatTools(ctx, formats.openai, options),
gemini: (ctx, options) => this.formatTools(ctx, formats.gemini, options),
vercel: (ctx, options) => this.vercelTools(ctx, options),
format: (ctx, formatter, options) => this.formatTools(ctx, formatter, options),
};
}
/**
* Build a Vercel AI SDK `ToolSet` — `{ [name]: tool({ description, parameters,
* execute }) }` — ready to pass as `tools` to `generateText`/`streamText`.
* Requires the optional peer dependency `ai`. Tool errors are caught and
* returned as `{ error }` so the agent can recover instead of aborting.
*/
async vercelTools(ctx, options) {
let ai;
try {
const specifier = "ai";
ai = await Promise.resolve(`${specifier}`).then(s => __importStar(require(s)));
}
catch {
throw new Error('[vistal] tools.vercel() requires the "ai" package (Vercel AI SDK). Install it with: npm install ai');
}
const neutral = await this.neutralTools(ctx, options);
// eslint-disable-next-line @typescript-eslint/no-explicit-any
const tools = {};
for (const t of neutral) {
tools[t.name] = ai.tool({
description: t.description,
parameters: ai.jsonSchema(t.parameters),
execute: async (args) => {
try {
return (0, serializer_1.serializeResult)(await this.executeTool(t.name, args, ctx));
}
catch (err) {
return { error: safeErrorMessage(err) };
}
},
});
}
return tools;
}
/** Generate provider-neutral tool definitions shaped by the evaluated policy. */
async neutralTools(ctx, options) {
const schema = await this.loadSchema();
this.validatePolicyKeys(schema);
const policies = this.buildEffectivePolicies(schema);
if (options?.mode === "consolidated") {
return (0, generator_1.generateConsolidatedTools)(schema, policies, ctx, this.defaultPolicy, this.pagination, options);
}
return (0, generator_1.generateTools)(schema, policies, ctx, this.defaultPolicy, this.pagination, options);
}
async formatTools(ctx, formatter, options) {
const neutral = await this.neutralTools(ctx, options);
return neutral.map((t) => ({
definition: formatter(t),
name: t.name,
execute: async (args) => (0, serializer_1.serializeResult)(await this.executeTool(t.name, args, ctx)),
}));
}
/**
* Generate Anthropic-shaped tool definitions (`{ name, description,
* input_schema }`). For other providers use the `tools` namespace.
*/
async getTools(ctx, options) {
const neutral = await this.neutralTools(ctx, options);
return neutral.map((t) => formats.anthropic(t));
}
/** Returns tools with execute() attached and result serialization (Decimal/Date/BigInt) built in. */
async executableTools(ctx, options) {
const llmTools = await this.getTools(ctx, options);
return llmTools.map((t) => ({
...t,
execute: async (args) => {
const result = await this.executeTool(t.name, args, ctx);
return (0, serializer_1.serializeResult)(result);
},
}));
}
async executeTool(toolName, input, ctx) {
return this.executeToolInternal(toolName, input, ctx, "tool");
}
async executeToolInternal(toolName, input, ctx, source) {
const start = Date.now();
let caughtError;
let resolvedResource = toolName.includes("_")
? toolName.slice(toolName.indexOf("_") + 1)
: toolName;
try {
const schema = await this.loadSchema();
const policies = this.buildEffectivePolicies(schema);
const inp = (input ?? {});
if (toolName === "list_resources") {
return await this.listResourcesResult(schema, policies, ctx);
}
if (toolName === "describe_resource") {
const resource = inp.resource;
if (!resource)
throw new errors_1.ValidationError('describe_resource requires a "resource" argument');
resolvedResource = resource;
return await this.describeResourceResult(resource, schema, policies, ctx);
}
if (generator_1.CONSOLIDATED_VERBS.includes(toolName)) {
const { internalName, normalizedInput, resource } = normalizeConsolidatedCall(toolName, inp);
resolvedResource = resource;
const query = (0, builder_1.buildResolvedQuery)(internalName, normalizedInput, schema, policies, ctx, this.defaultPolicy, this.pagination);
return await this.adapter.execute(query);
}
const query = (0, builder_1.buildResolvedQuery)(toolName, input, schema, policies, ctx, this.defaultPolicy, this.pagination);
return await this.adapter.execute(query);
}
catch (e) {
caughtError = e;
throw e;
}
finally {
if (this.onQueryFn) {
const underscoreIdx = toolName.indexOf("_");
const operation = underscoreIdx === -1 ? toolName : toolName.slice(0, underscoreIdx);
this.onQueryFn({
toolName,
resource: resolvedResource,
operation,
ctx,
durationMs: Date.now() - start,
error: caughtError,
source,
});
}
}
}
/**
* Capture an agent query (a read tool call) as a reusable, policy-enforced
* view the application can re-execute and subscribe to without the LLM in
* the loop — e.g. to drive a live chart from a query the agent built.
*
* Accepts per-resource tool names (`query_order`) and consolidated calls
* (`query` + `{ resource: "order", ... }`). Only read operations are
* allowed; writes and meta tools throw a ValidationError. Invalid args or a
* denied policy throw immediately at creation. Policies are re-evaluated on
* every execute()/poll, and results are serialized (Decimal/Date/BigInt) to
* JSON-safe values.
*
* ```ts
* const view = await vistal.view<Order>("query_order", call.args, ctx)
* view.resultSchema // JSON Schema of { data, hasMore, nextCursor? }
* const { data } = await view.execute()
* const sub = view.subscribe((r) => chart.update(r.data), { intervalMs: 5000 })
* sub.stop()
* ```
*/
async view(toolName, args, ctx) {
const schema = await this.loadSchema();
const policies = this.buildEffectivePolicies(schema);
if (toolName === "list_resources" || toolName === "describe_resource") {
throw new errors_1.ValidationError(`view() does not support the meta tool "${toolName}"`);
}
// Clone so caller mutations after creation don't change what re-executes.
const frozenArgs = typeof args === "object" && args !== null && !Array.isArray(args)
? { ...args }
: args;
let internalName = toolName;
let normalizedInput = frozenArgs;
if (generator_1.CONSOLIDATED_VERBS.includes(toolName)) {
const normalized = normalizeConsolidatedCall(toolName, (frozenArgs ?? {}));
internalName = normalized.internalName;
normalizedInput = normalized.normalizedInput;
}
const { operation } = (0, builder_1.parseToolName)(internalName);
if (operation !== "find" && operation !== "findOne" && operation !== "aggregate") {
throw new errors_1.ValidationError(`view() only supports read operations (query/get/aggregate); got "${toolName}"`);
}
// Built eagerly so bad args or a denied policy fail at creation, and to
// derive the result schema. execute() rebuilds it per call to stay current
// with policies that read mutable ctx.
const initialQuery = (0, builder_1.buildResolvedQuery)(internalName, normalizedInput, schema, policies, ctx, this.defaultPolicy, this.pagination);
const resultSchema = (0, result_schema_1.buildResultSchema)(initialQuery, schema);
const execute = async () => {
const raw = (0, serializer_1.serializeResult)(await this.executeToolInternal(toolName, frozenArgs, ctx, "view"));
return normalizeEnvelope(raw, operation);
};
// One engine per View: all subscribers share a single polling loop (or a
// single native subscription), created lazily on the first subscribe.
const adapter = this.adapter;
let engine;
return {
toolName,
args: frozenArgs,
resource: initialQuery.resource,
operation,
resultSchema,
execute,
subscribe: (onData, options) => {
engine ?? (engine = new engine_1.ViewEngine(execute, adapter.subscribe ? (onChange) => adapter.subscribe(initialQuery, onChange) : undefined, this.viewLimiter));
return engine.subscribe(onData, options);
},
toJSON: () => ({ vistal: "view", v: 1, toolName, args: frozenArgs }),
};
}
/**
* Rehydrate a persisted view (`view.toJSON()`). The context is deliberately
* not part of the serialized form — resolve it fresh for the caller opening
* the view, exactly as you would for a tool call.
*/
async viewFromJSON(json, ctx) {
const v = json;
if (!v || v.vistal !== "view" || v.v !== 1 || typeof v.toolName !== "string") {
throw new errors_1.ValidationError('viewFromJSON() expects the shape produced by view.toJSON(): { vistal: "view", v: 1, toolName, args }');
}
return this.view(v.toolName, v.args, ctx);
}
/**
* Register a named view definition — a governed catalog of queries that may
* be opened as live views. Useful to allow-list what dashboards can run and
* to share definitions across processes.
*/
registerView(name, def) {
this.viewDefs[name] = def;
return this;
}
/** Open a registered view under a context. Throws on unknown names. */
async openView(name, ctx) {
const def = this.viewDefs[name];
if (!def) {
const known = Object.keys(this.viewDefs);
throw new errors_1.ValidationError(`Unknown view "${name}". Registered views: ${known.length ? known.join(", ") : "(none)"}`);
}
const view = await this.view(def.toolName, def.args, ctx);
return { ...view, name };
}
/** List registered view definitions. */
listViews() {
return Object.entries(this.viewDefs).map(([name, def]) => ({ name, ...def }));
}
// Resolves the operations a context may perform on a resource, using the
// granular policy buckets (create/update/aggregate), so it matches exactly the
// tools generated by generateConsolidatedTools.
resourceOperations(resourceName, resource, policies, ctx) {
const ev = (op) => (0, engine_2.evaluatePolicy)(policies[resourceName], ctx, op, this.defaultPolicy, resource);
const readPolicy = ev("read");
const aggregatePolicy = ev("aggregate");
const createPolicy = ev("create");
const updatePolicy = ev("update");
const deletePolicy = ev("delete");
const ops = [];
if (readPolicy.allowed)
ops.push("query", "get");
if (aggregatePolicy.allowed &&
aggregatePolicy.allowedFields.some((f) => resource.fields[f]?.type === "number")) {
ops.push("aggregate");
}
if (createPolicy.allowed) {
const forcedFields = createPolicy.forcedWriteFields ?? {};
const allCovered = Object.entries(resource.fields).every(([name, field]) => {
if (field.isId || field.isNullable || field.hasDefaultValue)
return true;
return createPolicy.allowedFields.includes(name) || name in forcedFields;
});
if (allCovered)
ops.push("create");
}
if (updatePolicy.allowed)
ops.push("update");
if (deletePolicy.allowed)
ops.push("delete");
return { ops, readPolicy, aggregatePolicy, createPolicy, updatePolicy };
}
async listResourcesResult(schema, policies, ctx) {
const result = [];
for (const [resourceName, resource] of Object.entries(schema.resources)) {
const { ops } = this.resourceOperations(resourceName, resource, policies, ctx);
if (ops.length > 0)
result.push({ name: resourceName, description: resource.description, operations: ops });
}
return result;
}
async describeResourceResult(resourceName, schema, policies, ctx) {
const resource = schema.resources[resourceName];
if (!resource)
throw new errors_1.ValidationError(`Unknown resource: "${resourceName}"`);
const { ops, readPolicy, createPolicy, updatePolicy } = this.resourceOperations(resourceName, resource, policies, ctx);
// Writable fields come from whichever write op is permitted; create/update
// share the same field policy, so prefer update when both exist.
const writeEval = updatePolicy.allowed
? updatePolicy
: createPolicy.allowed
? createPolicy
: undefined;
const readableFields = new Set(readPolicy.allowed ? readPolicy.allowedFields : []);
const writableFields = new Set(writeEval ? writeEval.allowedFields.filter((f) => !resource.fields[f]?.isId) : []);
const fields = Object.values(resource.fields)
.filter((f) => readableFields.has(f.name) || writableFields.has(f.name))
.map((f) => ({
name: f.name,
type: f.type,
...(f.enumValues ? { enumValues: f.enumValues } : {}),
nullable: f.isNullable,
isId: f.isId,
readable: readableFields.has(f.name),
writable: writableFields.has(f.name),
}));
const allowedRelations = readPolicy.allowed ? readPolicy.allowedRelations : [];
const relations = allowedRelations
.map((relName) => {
const rel = resource.relations[relName];
return rel ? { name: rel.name, target: rel.targetResource, type: rel.type } : null;
})
.filter(Boolean);
return {
name: resourceName,
description: resource.description,
operations: ops,
fields,
relations,
};
}
async loadSchema() {
if (!this.schemaCache) {
this.schemaCache = await this.adapter.introspect();
}
return this.schemaCache;
}
/** Returns the list of resource names discovered from the schema. */
async resources() {
const schema = await this.loadSchema();
return Object.keys(schema.resources);
}
/** Returns schema info + policy stubs for all resources — useful for discovering resource names. */
async describe() {
const schema = await this.loadSchema();
return Object.values(schema.resources).map((r) => ({
name: r.name,
fields: Object.values(r.fields).map((f) => ({
name: f.name,
type: f.type,
isId: f.isId,
isNullable: f.isNullable,
hasDefaultValue: f.hasDefaultValue ?? false,
sensitive: f.sensitive ?? false,
})),
relations: Object.values(r.relations).map((rel) => ({
name: rel.name,
target: rel.targetResource,
type: rel.type,
})),
policyStub: buildPolicyStub(r.name),
}));
}
buildEffectivePolicies(schema) {
const wildcard = this.policies["*"];
const resolver = this.resolvePolicyFn;
if (!wildcard && !resolver)
return this.policies;
const effective = { ...this.policies };
for (const resourceName of Object.keys(schema.resources)) {
if (!effective[resourceName]) {
if (wildcard) {
effective[resourceName] = wildcard;
}
else if (resolver) {
const captured = resourceName;
effective[resourceName] = (ctx) => resolver(captured, ctx);
}
}
}
delete effective["*"];
return effective;
}
validatePolicyKeys(schema) {
const resourceNames = new Set(Object.keys(schema.resources));
for (const key of Object.keys(this.policies)) {
if (key === "*")
continue;
if (!resourceNames.has(key)) {
const msg = `[vistal] policy() called with unknown resource "${key}". Known resources: ${[...resourceNames].join(", ")}. Use await vistal.describe() to list them.`;
if (this.strictPolicyKeys)
throw new Error(msg);
else
console.warn(msg);
}
}
}
}
exports.Vistal = Vistal;
// Vistal's own errors are author-written, safe, and actionable for the model to
// recover from. Any other error (e.g. a raw DB driver error) may carry internal
// details — file paths, query dumps — so it is replaced with a generic message.
// The full error is still delivered to onQuery for server-side logging.
// Turns a consolidated call ("query" + { resource, ... }) into the internal
// per-resource form ("query_order" + flattened input). For create/update the
// nested `data` object is merged into the input.
function normalizeConsolidatedCall(toolName, inp) {
const resource = inp.resource;
if (!resource)
throw new errors_1.ValidationError(`"${toolName}" requires a "resource" argument`);
let normalizedInput;
if (toolName === "create" || toolName === "update") {
const { resource: _r, data, ...rest } = inp;
normalizedInput = {
...rest,
...(typeof data === "object" && data !== null ? data : {}),
};
}
else {
const { resource: _r, ...rest } = inp;
normalizedInput = rest;
}
return { internalName: `${toolName}_${resource}`, normalizedInput, resource };
}
// Adapters return different shapes per operation; views expose one envelope.
function normalizeEnvelope(raw, operation) {
if (operation === "findOne") {
return { data: raw == null ? [] : [raw], hasMore: false };
}
if (Array.isArray(raw)) {
return { data: raw, hasMore: false };
}
if (raw !== null && typeof raw === "object" && Array.isArray(raw.data)) {
const env = raw;
return {
data: env.data,
hasMore: env.hasMore ?? false,
...(env.nextCursor !== undefined ? { nextCursor: env.nextCursor } : {}),
};
}
// Aggregate without groupBy may come back as a single object of aliases.
return { data: raw == null ? [] : [raw], hasMore: false };
}
function safeErrorMessage(err) {
if (err instanceof errors_1.ValidationError || err instanceof errors_1.PolicyViolationError) {
return err.message;
}
return "The query could not be completed due to an internal error.";
}
function buildPolicyStub(resourceName) {
return [
`vistal.policy("${resourceName}", (ctx) => ({`,
` read: true, // or false, or { field: ctx.value } for row-level filter`,
` write: false, // or true, or { field: ctx.value } to auto-inject forced fields`,
` delete: false,`,
` // fields: { deny: ["sensitive_field"] },`,
` // relations: { relName: false },`,
`}))`,
].join("\n");
}
//# sourceMappingURL=vistal.js.map
{"version":3,"file":"vistal.js","sourceRoot":"","sources":["../src/vistal.ts"],"names":[],"mappings":"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"}
+12
-42

@@ -1,2 +0,1 @@

import { z } from "zod";
export type CmpOp = "=" | "!=" | ">" | "<" | ">=" | "<=" | "like" | "ilike";

@@ -37,2 +36,6 @@ export type RelPath = string[];

} | {
kind: "null";
expr: Expr;
negated: boolean;
} | {
kind: "and";

@@ -47,30 +50,10 @@ args: Expr[];

};
export declare const ExprSchema: z.ZodType<Expr>;
export declare const QuerySchema: z.ZodObject<{
from: z.ZodString;
select: z.ZodArray<z.ZodUnion<readonly [z.ZodObject<{
fn: z.ZodString;
args: z.ZodArray<z.ZodType<Expr, unknown, z.core.$ZodTypeInternals<Expr, unknown>>>;
as: z.ZodOptional<z.ZodString>;
}, z.core.$strip>, z.ZodObject<{
col: z.ZodString;
rel: z.ZodOptional<z.ZodArray<z.ZodString>>;
as: z.ZodOptional<z.ZodString>;
}, z.core.$strip>]>>;
where: z.ZodOptional<z.ZodType<Expr, unknown, z.core.$ZodTypeInternals<Expr, unknown>>>;
groupBy: z.ZodOptional<z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodObject<{
col: z.ZodString;
rel: z.ZodOptional<z.ZodArray<z.ZodString>>;
}, z.core.$strip>]>>>;
orderBy: z.ZodOptional<z.ZodArray<z.ZodObject<{
col: z.ZodString;
rel: z.ZodOptional<z.ZodArray<z.ZodString>>;
dir: z.ZodEnum<{
asc: "asc";
desc: "desc";
}>;
}, z.core.$strip>>>;
limit: z.ZodOptional<z.ZodNumber>;
}, z.core.$strip>;
export type Query = z.infer<typeof QuerySchema>;
export interface Query {
from: string;
select: SelectItem[];
where?: Expr;
groupBy?: GroupByItem[];
orderBy?: OrderBy[];
limit?: number;
}
export type Scalar = string | number | boolean | null;

@@ -90,15 +73,2 @@ export type Insert = {

};
export declare const InsertSchema: z.ZodObject<{
from: z.ZodString;
values: z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodBoolean, z.ZodNull]>>;
}, z.core.$strip>;
export declare const UpdateSchema: z.ZodObject<{
from: z.ZodString;
set: z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodBoolean, z.ZodNull]>>;
where: z.ZodType<Expr, unknown, z.core.$ZodTypeInternals<Expr, unknown>>;
}, z.core.$strip>;
export declare const DeleteSchema: z.ZodObject<{
from: z.ZodString;
where: z.ZodType<Expr, unknown, z.core.$ZodTypeInternals<Expr, unknown>>;
}, z.core.$strip>;
export type InjectedMutation = {

@@ -105,0 +75,0 @@ op: "insert";

@@ -1,1 +0,1 @@

{"version":3,"file":"ast.d.ts","sourceRoot":"","sources":["../src/ast.ts"],"names":[],"mappings":"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"}
{"version":3,"file":"ast.d.ts","sourceRoot":"","sources":["../src/ast.ts"],"names":[],"mappings":"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"}
"use strict";
// The internal query IR. The model never emits this shape — it writes the
// Prisma-idiomatic grammar in grammar.ts, which parses to the tree below. One
// tree then flows through every stage — validate, inject, emit — with no further
// conversions. Keeping the IR tagged and explicit is what makes policy injection
// and column allowlisting provable; the friendly surface stays at the edge.
Object.defineProperty(exports, "__esModule", { value: true });
exports.DeleteSchema = exports.UpdateSchema = exports.InsertSchema = exports.QuerySchema = exports.ExprSchema = void 0;
const zod_1 = require("zod");
const cmpOp = zod_1.z.enum(["=", "!=", ">", "<", ">=", "<=", "like", "ilike"]);
// Structural bound on a relation path — a sane ceiling so a pathological array
// can't reach the resolver. The real, friendly join-depth limit is enforced in
// joins.ts against MAX_JOIN_DEPTH.
const relPath = zod_1.z
.array(zod_1.z.string().regex(/^[A-Za-z0-9_]+$/))
.min(1)
.max(8)
.describe('Relation path from the root resource to a joined table, e.g. ["order","customer"]. Only declared relations are joinable.');
// The bare `{ col, rel? }` column shorthand — the same shape used in `select` —
// normalized to a tagged col Expr so downstream stages (validate, inject, emit)
// only ever see the tagged form. It's a member of ExprSchema below, so a column
// can be written ONE way *everywhere* it appears: `select`, function args, and
// comparison operands in a `where`. Without this a column is `{ col: "x" }` in a
// select but `{ kind: "col", name: "x" }` in a filter, and models — smaller ones
// especially — trip on switching forms mid-query.
const colShorthand = zod_1.z
.object({ col: zod_1.z.string(), rel: relPath.optional() })
.transform((c) => (c.rel ? { kind: "col", name: c.col, rel: c.rel } : { kind: "col", name: c.col }));
// The bare scalar shorthand — a literal written directly as `"month"` / `42` /
// `true` / `null` instead of the tagged `{ kind: "value", value }`. Mirrors
// `colShorthand`: it lets a literal be written ONE way *everywhere* an Expr
// appears — a comparison operand (`status = "active"`), a numeric function arg
// (`quantileTiming(col, 0.95)`), and — the case that motivated this — a
// function's fixed-value argument (`dateTrunc(col, "month")`). Columns are always
// objects (`{ col }` / `{ kind: "col" }`), so a bare scalar is unambiguously a
// value. Without this the query tool advertises `dateTrunc(column, ...|month|...)`
// yet only the verbose `{ kind: "value", value: "month" }` actually parses.
const scalarShorthand = zod_1.z
.union([zod_1.z.string(), zod_1.z.number(), zod_1.z.boolean(), zod_1.z.null()])
.transform((value) => ({ kind: "value", value }));
// Recursive schema: annotate via cast, the idiomatic Zod pattern (the inferred
// output differs only in that z.unknown() makes `value` optional). `col`/`value`
// and their shorthands are distinct union members (objects vs bare scalars), so
// every form parses to the same tagged node.
exports.ExprSchema = zod_1.z.lazy(() => zod_1.z
.union([
zod_1.z
.object({ kind: zod_1.z.literal("col"), name: zod_1.z.string(), rel: relPath.optional() })
.describe('A column reference: { "kind": "col", "name": "amount" } — or the shorthand { "col": "amount" }.'),
colShorthand,
zod_1.z
.object({
kind: zod_1.z.literal("value"),
value: zod_1.z.union([zod_1.z.string(), zod_1.z.number(), zod_1.z.boolean(), zod_1.z.null()]),
})
.describe('A literal value: { "kind": "value", "value": 100 } — or written bare as 100 / "active".'),
zod_1.z
.object({ kind: zod_1.z.literal("cmp"), op: cmpOp, left: exports.ExprSchema, right: exports.ExprSchema })
.describe('Comparison: { "kind": "cmp", "op": ">=", "left": <Expr>, "right": <Expr> }. Both sides are Exprs, typically a col and a value. `op` "like"/"ilike" do string pattern matching against a literal pattern on the right, where % matches any run of characters and _ matches one ("ilike" is case-insensitive); negate with a "not" node.'),
zod_1.z
.object({ kind: zod_1.z.literal("and"), args: zod_1.z.array(exports.ExprSchema).min(1).max(100) })
.describe('All sub-expressions must hold: { "kind": "and", "args": [<Expr>, ...] }.'),
zod_1.z
.object({ kind: zod_1.z.literal("or"), args: zod_1.z.array(exports.ExprSchema).min(1).max(100) })
.describe('Any sub-expression holds: { "kind": "or", "args": [<Expr>, ...] }.'),
zod_1.z
.object({ kind: zod_1.z.literal("not"), arg: exports.ExprSchema })
.describe('Negates one sub-expression: { "kind": "not", "arg": <Expr> }.'),
scalarShorthand,
])
.describe("A boolean filter expression tree of cmp/and/or/not nodes over col and value leaves, not a raw string."));
// `as`/`fn` are output/function names, constrained to safe characters here.
// Column references (`col`, and columns inside function args) are instead
// allowlist-checked against the catalog downstream, in validate.ts.
const identifier = zod_1.z.string().regex(/^[A-Za-z0-9_]+$/);
const columnSelect = zod_1.z
.object({
col: zod_1.z.string().describe("Column name. In `select` a column is always this wrapper, never a bare string."),
rel: relPath.optional(),
as: identifier.optional(),
})
.describe('Select a column: { "col": "amount" }. `as` renames the output; `rel` reads a joined table.');
// Function args are just Exprs now — the `{ col }` shorthand is part of ExprSchema.
const fnSelect = zod_1.z
.object({
fn: identifier,
args: zod_1.z
.array(exports.ExprSchema)
.max(8)
.describe('Positional arguments, each an Expr — a column as { "col": "name" }, a literal as a bare scalar (e.g. "day", 0.95) or { "kind": "value", "value": ... }.'),
as: identifier.optional(),
})
.describe('A function call over columns: { "fn": "sum", "args": [{ "col": "amount" }], "as": "total" }.');
// A group key: a bare SELECT alias, or a (possibly joined) column.
const groupByItem = zod_1.z
.union([zod_1.z.string(), zod_1.z.object({ col: zod_1.z.string(), rel: relPath.optional() })])
.describe('Group key: a bare SELECT alias string (e.g. "day") to bucket by a computed column, or { "col": "name" } for a raw column.');
exports.QuerySchema = zod_1.z.object({
from: zod_1.z.string(),
select: zod_1.z
.array(zod_1.z.union([fnSelect, columnSelect]))
.min(1)
.max(32),
where: exports.ExprSchema.optional(),
groupBy: zod_1.z.array(groupByItem).max(32).optional(),
orderBy: zod_1.z
.array(zod_1.z
.object({ col: zod_1.z.string(), rel: relPath.optional(), dir: zod_1.z.enum(["asc", "desc"]) })
.describe('Sort key: `col` is a SELECT alias (e.g. an aggregate like "revenue") or a raw column name; `dir` is "asc" or "desc".'))
.max(32)
.optional(),
limit: zod_1.z.number().int().positive().optional(),
});
const scalar = zod_1.z.union([zod_1.z.string(), zod_1.z.number(), zod_1.z.boolean(), zod_1.z.null()]);
const columnValues = zod_1.z
.record(zod_1.z.string(), scalar)
.refine((o) => Object.keys(o).length > 0, "must set at least one column");
exports.InsertSchema = zod_1.z.object({ from: zod_1.z.string(), values: columnValues });
exports.UpdateSchema = zod_1.z.object({ from: zod_1.z.string(), set: columnValues, where: exports.ExprSchema });
exports.DeleteSchema = zod_1.z.object({ from: zod_1.z.string(), where: exports.ExprSchema });
//# sourceMappingURL=ast.js.map

@@ -1,1 +0,1 @@

{"version":3,"file":"ast.js","sourceRoot":"","sources":["../src/ast.ts"],"names":[],"mappings":"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"}
{"version":3,"file":"ast.js","sourceRoot":"","sources":["../src/ast.ts"],"names":[],"mappings":";AAAA,0EAA0E;AAC1E,8EAA8E;AAC9E,iFAAiF;AACjF,iFAAiF;AACjF,4EAA4E"}

@@ -230,2 +230,4 @@ "use strict";

}
case "null":
return `(${emitExpr(expr.expr, ctx)} IS ${expr.negated ? "NOT " : ""}NULL)`;
case "and":

@@ -232,0 +234,0 @@ return `(${expr.args.map((a) => emitExpr(a, ctx)).join(" AND ")})`;

@@ -1,1 +0,1 @@

{"version":3,"file":"emit.js","sourceRoot":"","sources":["../src/emit.ts"],"names":[],"mappings":"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"}
{"version":3,"file":"emit.js","sourceRoot":"","sources":["../src/emit.ts"],"names":[],"mappings":"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"}
import type { PolicyFn } from "./policy";
import type { ResourceSchema } from "./catalog";
import { type Expr, type Scalar } from "./ast";
import type { Expr, Scalar } from "./ast";
export type WriteOp = "create" | "update" | "delete";

@@ -5,0 +5,0 @@ export interface EvaluatedPolicy {

@@ -1,1 +0,1 @@

{"version":3,"file":"evaluate.d.ts","sourceRoot":"","sources":["../src/evaluate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAA6B,MAAM,UAAU,CAAA;AACnE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,WAAW,CAAA;AAC/C,OAAO,EAAc,KAAK,IAAI,EAAE,KAAK,MAAM,EAAE,MAAM,OAAO,CAAA;AAQ1D,MAAM,MAAM,OAAO,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAA;AAKpD,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,OAAO,CAAA;IAChB,SAAS,CAAC,EAAE,IAAI,CAAA;IAChB,aAAa,EAAE,MAAM,EAAE,CAAA;IAGvB,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CACpC;AAED,wBAAgB,YAAY,CAAC,QAAQ,EACnC,MAAM,EAAE,QAAQ,CAAC,QAAQ,CAAC,GAAG,SAAS,EACtC,GAAG,EAAE,QAAQ,EACb,QAAQ,EAAE,cAAc,EACxB,aAAa,EAAE,UAAU,GAAG,WAAW,GACtC,eAAe,CAiCjB;AA+CD,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,OAAO,CAAA;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC/B,SAAS,CAAC,EAAE,IAAI,CAAA;IAChB,cAAc,EAAE,MAAM,EAAE,CAAA;CACzB;AAED,wBAAgB,aAAa,CAAC,QAAQ,EACpC,MAAM,EAAE,QAAQ,CAAC,QAAQ,CAAC,GAAG,SAAS,EACtC,GAAG,EAAE,QAAQ,EACb,QAAQ,EAAE,cAAc,EACxB,EAAE,EAAE,OAAO,EACX,aAAa,EAAE,UAAU,GAAG,WAAW,GACtC,cAAc,CAsChB"}
{"version":3,"file":"evaluate.d.ts","sourceRoot":"","sources":["../src/evaluate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAA6B,MAAM,UAAU,CAAA;AACnE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,WAAW,CAAA;AAC/C,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,OAAO,CAAA;AASzC,MAAM,MAAM,OAAO,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAA;AAKpD,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,OAAO,CAAA;IAChB,SAAS,CAAC,EAAE,IAAI,CAAA;IAChB,aAAa,EAAE,MAAM,EAAE,CAAA;IAGvB,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CACpC;AAED,wBAAgB,YAAY,CAAC,QAAQ,EACnC,MAAM,EAAE,QAAQ,CAAC,QAAQ,CAAC,GAAG,SAAS,EACtC,GAAG,EAAE,QAAQ,EACb,QAAQ,EAAE,cAAc,EACxB,aAAa,EAAE,UAAU,GAAG,WAAW,GACtC,eAAe,CAiCjB;AAkDD,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,OAAO,CAAA;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC/B,SAAS,CAAC,EAAE,IAAI,CAAA;IAChB,cAAc,EAAE,MAAM,EAAE,CAAA;CACzB;AAED,wBAAgB,aAAa,CAAC,QAAQ,EACpC,MAAM,EAAE,QAAQ,CAAC,QAAQ,CAAC,GAAG,SAAS,EACtC,GAAG,EAAE,QAAQ,EACb,QAAQ,EAAE,cAAc,EACxB,EAAE,EAAE,OAAO,EACX,aAAa,EAAE,UAAU,GAAG,WAAW,GACtC,cAAc,CAsChB"}

@@ -5,3 +5,3 @@ "use strict";

exports.evaluateWrite = evaluateWrite;
const ast_1 = require("./ast");
const grammar_1 = require("./grammar");
const errors_1 = require("./errors");

@@ -59,7 +59,9 @@ // A predicate rule is either an Expr node (has `kind`) or the scalar-equality

if (isExpr(rule)) {
const parsed = ast_1.ExprSchema.safeParse(rule);
if (!parsed.success) {
throw new errors_1.PolicyViolationError(`Policy predicate is not a valid expression: ${parsed.error.message}`);
let expr;
try {
expr = (0, grammar_1.validateExpr)(rule);
}
const expr = parsed.data;
catch (error) {
throw new errors_1.PolicyViolationError(`Policy predicate is not a valid expression: ${error.message}`);
}
if (expr.kind === "col" || expr.kind === "value") {

@@ -149,2 +151,4 @@ throw new errors_1.PolicyViolationError(`Policy predicate must be a boolean expression (cmp/and/or/not), got a bare "${expr.kind}".`);

return [...columnsInExpr(expr.left), ...columnsInExpr(expr.right)];
case "null":
return columnsInExpr(expr.expr);
case "and":

@@ -151,0 +155,0 @@ case "or":

@@ -1,1 +0,1 @@

{"version":3,"file":"evaluate.js","sourceRoot":"","sources":["../src/evaluate.ts"],"names":[],"mappings":"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"}
{"version":3,"file":"evaluate.js","sourceRoot":"","sources":["../src/evaluate.ts"],"names":[],"mappings":";;AAyBA,oCAsCC;AAyDD,sCA4CC;AAjKD,uCAAwC;AACxC,qCAA+C;AAE/C,8EAA8E;AAC9E,8EAA8E;AAC9E,iDAAiD;AACjD,MAAM,MAAM,GAAG,CAAC,IAA6B,EAAW,EAAE,CAAC,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAA;AAgBxF,SAAgB,YAAY,CAC1B,MAAsC,EACtC,GAAa,EACb,QAAwB,EACxB,aAAuC;IAEvC,MAAM,MAAM,GAAiB,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;IACtD,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAA;IAExB,IAAI,OAAgB,CAAA;IACpB,IAAI,SAA2B,CAAA;IAC/B,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO,GAAG,aAAa,KAAK,WAAW,CAAA;SAC1D,IAAI,OAAO,IAAI,KAAK,SAAS;QAAE,OAAO,GAAG,IAAI,CAAA;SAC7C,CAAC;QACJ,OAAO,GAAG,IAAI,CAAA;QACd,SAAS,GAAG,UAAU,CAAC,IAAI,CAAC,CAAA;IAC9B,CAAC;IACD,IAAI,CAAC,OAAO;QAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,EAAE,EAAE,CAAA;IAE1D,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,CAAA;IAElC,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;IACxC,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;SAC7C,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;SAC1B,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;IACrB,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAA;IAE5B,IAAI,aAAuB,CAAA;IAC3B,IAAI,MAAM,EAAE,KAAK,EAAE,CAAC;QAClB,aAAa,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAA;IACpE,CAAC;SAAM,IAAI,MAAM,EAAE,IAAI,EAAE,CAAC;QACxB,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,IAAI,EAAE,GAAG,SAAS,CAAC,CAAC,CAAA;QACtD,aAAa,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;IACnD,CAAC;SAAM,CAAC;QACN,aAAa,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAA;IAC3D,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,SAAS,EAAE,CAAA;AACzD,CAAC;AAED,8EAA8E;AAC9E,SAAS;AACT,gFAAgF;AAChF,iFAAiF;AACjF,4EAA4E;AAC5E,4EAA4E;AAC5E,uEAAuE;AACvE,EAAE;AACF,8EAA8E;AAC9E,+EAA+E;AAC/E,iFAAiF;AACjF,SAAS,UAAU,CAAC,IAA6B;IAC/C,IAAI,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;QACjB,IAAI,IAAU,CAAA;QACd,IAAI,CAAC;YACH,IAAI,GAAG,IAAA,sBAAY,EAAC,IAAI,CAAC,CAAA;QAC3B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,6BAAoB,CAC5B,+CAAgD,KAAe,CAAC,OAAO,EAAE,CAC1E,CAAA;QACH,CAAC;QACD,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;YACjD,MAAM,IAAI,6BAAoB,CAC5B,+EAA+E,IAAI,CAAC,IAAI,IAAI,CAC7F,CAAA;QACH,CAAC;QACD,OAAO,IAAI,CAAA;IACb,CAAC;IAED,MAAM,IAAI,GAAW,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,EAAQ,EAAE;QACrE,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YAC1C,MAAM,IAAI,6BAAoB,CAC5B,sBAAsB,KAAK,iBAAiB,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,sCAAsC,CAC7H,CAAA;QACH,CAAC;QACD,OAAO;YACL,IAAI,EAAE,KAAK;YACX,EAAE,EAAE,GAAG;YACP,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE;YAClC,KAAK,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE;SAChC,CAAA;IACH,CAAC,CAAC,CAAA;IACF,OAAO,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,CAAA;AAClE,CAAC;AAYD,SAAgB,aAAa,CAC3B,MAAsC,EACtC,GAAa,EACb,QAAwB,EACxB,EAAW,EACX,aAAuC;IAEvC,MAAM,MAAM,GAAiB,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;IACtD,MAAM,IAAI,GACR,EAAE,KAAK,QAAQ;QACb,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,KAAK,CAAC;QACjC,CAAC,CAAC,EAAE,KAAK,QAAQ;YACf,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,KAAK,CAAC;YACjC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAA;IAErB,IAAI,OAAgB,CAAA;IACpB,IAAI,MAA0C,CAAA;IAC9C,IAAI,SAA2B,CAAA;IAC/B,MAAM,YAAY,GAAa,EAAE,CAAA;IAEjC,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO,GAAG,aAAa,KAAK,WAAW,CAAA;SAC1D,IAAI,OAAO,IAAI,KAAK,SAAS;QAAE,OAAO,GAAG,IAAI,CAAA;SAC7C,CAAC;QACJ,OAAO,GAAG,IAAI,CAAA;QACd,6EAA6E;QAC7E,8EAA8E;QAC9E,4EAA4E;QAC5E,qDAAqD;QACrD,IAAI,EAAE,KAAK,QAAQ,EAAE,CAAC;YACpB,MAAM,GAAG,aAAa,CAAC,IAAI,CAAC,CAAA;YAC5B,YAAY,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAA;QAC3C,CAAC;aAAM,CAAC;YACN,SAAS,GAAG,UAAU,CAAC,IAAI,CAAC,CAAA;YAC5B,YAAY,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC,SAAS,CAAC,CAAC,CAAA;QAChD,CAAC;IACH,CAAC;IACD,IAAI,CAAC,OAAO;QAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,cAAc,EAAE,EAAE,EAAE,CAAA;IAE3D,OAAO;QACL,OAAO;QACP,MAAM;QACN,SAAS;QACT,cAAc,EAAE,cAAc,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC;KACtE,CAAA;AACH,CAAC;AAED,8EAA8E;AAC9E,mFAAmF;AACnF,SAAS,aAAa,CAAC,IAA6B;IAClD,8EAA8E;IAC9E,8EAA8E;IAC9E,IAAI,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;QACjB,MAAM,IAAI,6BAAoB,CAC5B,wFAAwF,CACzF,CAAA;IACH,CAAC;IACD,MAAM,GAAG,GAA2B,EAAE,CAAA;IACtC,KAAK,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QAClD,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YAC1C,MAAM,IAAI,6BAAoB,CAC5B,4BAA4B,KAAK,iBAAiB,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,sCAAsC,CACnI,CAAA;QACH,CAAC;QACD,GAAG,CAAC,KAAK,CAAC,GAAG,KAAe,CAAA;IAC9B,CAAC;IACD,OAAO,GAAG,CAAA;AACZ,CAAC;AAED,uEAAuE;AACvE,oEAAoE;AACpE,SAAS,aAAa,CAAC,IAAU;IAC/B,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;QAClB,KAAK,KAAK;YACR,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACpB,KAAK,OAAO;YACV,OAAO,EAAE,CAAA;QACX,KAAK,KAAK;YACR,OAAO,CAAC,GAAG,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAA;QACpE,KAAK,MAAM;YACT,OAAO,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACjC,KAAK,KAAK,CAAC;QACX,KAAK,IAAI;YACP,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAA;QACzC,KAAK,KAAK;YACR,OAAO,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAClC,CAAC;AACH,CAAC;AAED,iFAAiF;AACjF,6EAA6E;AAC7E,kCAAkC;AAClC,SAAS,cAAc,CACrB,QAAwB,EACxB,WAAoC,EACpC,YAAsB;IAEtB,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;IACxC,MAAM,SAAS,GAAG,IAAI,GAAG,CACvB,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;SAC3B,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;SAC1B,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CACtB,CAAA;IACD,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,YAAY,CAAC,CAAA;IACnC,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,WAAW,EAAE,QAAQ,IAAI,EAAE,CAAC,CAAA;IAErD,IAAI,IAAc,CAAA;IAClB,IAAI,WAAW,EAAE,KAAK;QAAE,IAAI,GAAG,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;SAC5E,IAAI,WAAW,EAAE,IAAI,EAAE,CAAC;QAC3B,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,WAAW,CAAC,IAAI,EAAE,GAAG,SAAS,CAAC,CAAC,CAAA;QAC3D,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;IAC1C,CAAC;;QAAM,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;IAElD,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;AAC9D,CAAC"}
export { Valv } from "./valv";
export type { QueryEvent, ResourceDescriptor, ResourceField, ResourceRelation, ValvConfig, } from "./valv";
export type { ValvAdapter, CompiledQuery, BoundParam, MutationResult } from "./adapter";
export { QuerySchema, ExprSchema, InsertSchema, UpdateSchema, DeleteSchema } from "./ast";
export { parseQuery, parseInsert, parseUpdate, parseDelete } from "./grammar";
export type { QueryInput, FilterInput, FilterOperators, SelectInput, SelectValue, FnArgInput, OrderByInput, ScalarInput, InsertInput, UpdateInput, DeleteInput, } from "./grammar";
export type { Query, Expr, SelectItem, ColumnSelect, FnSelect, OrderBy, CmpOp, Scalar, Insert, Update, Delete, InjectedMutation, } from "./ast";

@@ -6,0 +7,0 @@ export { emit, emitInsert, emitUpdate, emitDelete } from "./emit";

@@ -1,1 +0,1 @@

{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AAC7B,YAAY,EACV,UAAU,EACV,kBAAkB,EAClB,aAAa,EACb,gBAAgB,EAChB,UAAU,GACX,MAAM,QAAQ,CAAA;AACf,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,WAAW,CAAA;AACvF,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,OAAO,CAAA;AACzF,YAAY,EACV,KAAK,EACL,IAAI,EACJ,UAAU,EACV,YAAY,EACZ,QAAQ,EACR,OAAO,EACP,KAAK,EACL,MAAM,EACN,MAAM,EACN,MAAM,EACN,MAAM,EACN,gBAAgB,GACjB,MAAM,OAAO,CAAA;AACd,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAA;AACjE,YAAY,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACxC,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAC5C,YAAY,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAC9C,YAAY,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AACnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAA;AAC5C,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAEzC,YAAY,EACV,SAAS,EACT,cAAc,EACd,WAAW,EACX,SAAS,EACT,cAAc,EACd,cAAc,GACf,MAAM,WAAW,CAAA;AAClB,YAAY,EAAE,QAAQ,EAAE,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,UAAU,CAAA;AAE/F,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAC9C,OAAO,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA;AAGhE,OAAO,KAAK,OAAO,MAAM,cAAc,CAAA;AACvC,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AACxD,YAAY,EACV,aAAa,EACb,WAAW,EACX,aAAa,EACb,UAAU,EACV,UAAU,GACX,MAAM,cAAc,CAAA"}
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AAC7B,YAAY,EACV,UAAU,EACV,kBAAkB,EAClB,aAAa,EACb,gBAAgB,EAChB,UAAU,GACX,MAAM,QAAQ,CAAA;AACf,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,WAAW,CAAA;AACvF,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AAC7E,YAAY,EACV,UAAU,EACV,WAAW,EACX,eAAe,EACf,WAAW,EACX,WAAW,EACX,UAAU,EACV,YAAY,EACZ,WAAW,EACX,WAAW,EACX,WAAW,EACX,WAAW,GACZ,MAAM,WAAW,CAAA;AAClB,YAAY,EACV,KAAK,EACL,IAAI,EACJ,UAAU,EACV,YAAY,EACZ,QAAQ,EACR,OAAO,EACP,KAAK,EACL,MAAM,EACN,MAAM,EACN,MAAM,EACN,MAAM,EACN,gBAAgB,GACjB,MAAM,OAAO,CAAA;AACd,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAA;AACjE,YAAY,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACxC,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAC5C,YAAY,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAC9C,YAAY,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AACnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAA;AAC5C,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAEzC,YAAY,EACV,SAAS,EACT,cAAc,EACd,WAAW,EACX,SAAS,EACT,cAAc,EACd,cAAc,GACf,MAAM,WAAW,CAAA;AAClB,YAAY,EAAE,QAAQ,EAAE,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,UAAU,CAAA;AAE/F,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAC9C,OAAO,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA;AAGhE,OAAO,KAAK,OAAO,MAAM,cAAc,CAAA;AACvC,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AACxD,YAAY,EACV,aAAa,EACb,WAAW,EACX,aAAa,EACb,UAAU,EACV,UAAU,GACX,MAAM,cAAc,CAAA"}

@@ -36,11 +36,10 @@ "use strict";

Object.defineProperty(exports, "__esModule", { value: true });
exports.gemini = exports.openai = exports.anthropic = exports.formats = exports.ValidationError = exports.PolicyViolationError = exports.serializeResult = exports.AGENT_INSTRUCTIONS = exports.resultSchema = exports.BASE_FUNCTIONS = exports.mysqlDialect = exports.postgresDialect = exports.emitDelete = exports.emitUpdate = exports.emitInsert = exports.emit = exports.DeleteSchema = exports.UpdateSchema = exports.InsertSchema = exports.ExprSchema = exports.QuerySchema = exports.Valv = void 0;
exports.gemini = exports.openai = exports.anthropic = exports.formats = exports.ValidationError = exports.PolicyViolationError = exports.serializeResult = exports.AGENT_INSTRUCTIONS = exports.resultSchema = exports.BASE_FUNCTIONS = exports.mysqlDialect = exports.postgresDialect = exports.emitDelete = exports.emitUpdate = exports.emitInsert = exports.emit = exports.parseDelete = exports.parseUpdate = exports.parseInsert = exports.parseQuery = exports.Valv = void 0;
var valv_1 = require("./valv");
Object.defineProperty(exports, "Valv", { enumerable: true, get: function () { return valv_1.Valv; } });
var ast_1 = require("./ast");
Object.defineProperty(exports, "QuerySchema", { enumerable: true, get: function () { return ast_1.QuerySchema; } });
Object.defineProperty(exports, "ExprSchema", { enumerable: true, get: function () { return ast_1.ExprSchema; } });
Object.defineProperty(exports, "InsertSchema", { enumerable: true, get: function () { return ast_1.InsertSchema; } });
Object.defineProperty(exports, "UpdateSchema", { enumerable: true, get: function () { return ast_1.UpdateSchema; } });
Object.defineProperty(exports, "DeleteSchema", { enumerable: true, get: function () { return ast_1.DeleteSchema; } });
var grammar_1 = require("./grammar");
Object.defineProperty(exports, "parseQuery", { enumerable: true, get: function () { return grammar_1.parseQuery; } });
Object.defineProperty(exports, "parseInsert", { enumerable: true, get: function () { return grammar_1.parseInsert; } });
Object.defineProperty(exports, "parseUpdate", { enumerable: true, get: function () { return grammar_1.parseUpdate; } });
Object.defineProperty(exports, "parseDelete", { enumerable: true, get: function () { return grammar_1.parseDelete; } });
var emit_1 = require("./emit");

@@ -47,0 +46,0 @@ Object.defineProperty(exports, "emit", { enumerable: true, get: function () { return emit_1.emit; } });

@@ -1,1 +0,1 @@

{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,+BAA6B;AAApB,4FAAA,IAAI,OAAA;AASb,6BAAyF;AAAhF,kGAAA,WAAW,OAAA;AAAE,iGAAA,UAAU,OAAA;AAAE,mGAAA,YAAY,OAAA;AAAE,mGAAA,YAAY,OAAA;AAAE,mGAAA,YAAY,OAAA;AAe1E,+BAAiE;AAAxD,4FAAA,IAAI,OAAA;AAAE,kGAAA,UAAU,OAAA;AAAE,kGAAA,UAAU,OAAA;AAAE,kGAAA,UAAU,OAAA;AAEjD,uCAA0D;AAAjD,2GAAA,eAAe,OAAA;AAAE,wGAAA,YAAY,OAAA;AACtC,yCAA4C;AAAnC,2GAAA,cAAc,OAAA;AAEvB,iDAA8C;AAArC,6GAAA,YAAY,OAAA;AAErB,iCAA4C;AAAnC,2GAAA,kBAAkB,OAAA;AAa3B,2CAA8C;AAArC,6GAAA,eAAe,OAAA;AACxB,mCAAgE;AAAvD,8GAAA,oBAAoB,OAAA;AAAE,yGAAA,eAAe,OAAA;AAE9C,iFAAiF;AACjF,wDAAuC;AACvC,2CAAwD;AAA/C,uGAAA,SAAS,OAAA;AAAE,oGAAA,MAAM,OAAA;AAAE,oGAAA,MAAM,OAAA"}
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,+BAA6B;AAApB,4FAAA,IAAI,OAAA;AASb,qCAA6E;AAApE,qGAAA,UAAU,OAAA;AAAE,sGAAA,WAAW,OAAA;AAAE,sGAAA,WAAW,OAAA;AAAE,sGAAA,WAAW,OAAA;AA4B1D,+BAAiE;AAAxD,4FAAA,IAAI,OAAA;AAAE,kGAAA,UAAU,OAAA;AAAE,kGAAA,UAAU,OAAA;AAAE,kGAAA,UAAU,OAAA;AAEjD,uCAA0D;AAAjD,2GAAA,eAAe,OAAA;AAAE,wGAAA,YAAY,OAAA;AACtC,yCAA4C;AAAnC,2GAAA,cAAc,OAAA;AAEvB,iDAA8C;AAArC,6GAAA,YAAY,OAAA;AAErB,iCAA4C;AAAnC,2GAAA,kBAAkB,OAAA;AAa3B,2CAA8C;AAArC,6GAAA,eAAe,OAAA;AACxB,mCAAgE;AAAvD,8GAAA,oBAAoB,OAAA;AAAE,yGAAA,eAAe,OAAA;AAE9C,iFAAiF;AACjF,wDAAuC;AACvC,2CAAwD;AAA/C,uGAAA,SAAS,OAAA;AAAE,oGAAA,MAAM,OAAA;AAAE,oGAAA,MAAM,OAAA"}

@@ -1,1 +0,1 @@

{"version":3,"file":"inject.d.ts","sourceRoot":"","sources":["../src/inject.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,OAAO,CAAA;AAClF,OAAO,KAAK,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AAKzD,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,EAAE,CAAA;IACb,SAAS,CAAC,EAAE,IAAI,CAAA;CACjB;AAMD,wBAAgB,YAAY,CAC1B,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,WAAW,EAAE,EACrB,YAAY,EAAE,MAAM,EACpB,QAAQ,EAAE,MAAM,GACf,KAAK,CAUP;AA0BD,wBAAgB,cAAc,CAC5B,EAAE,EAAE,OAAO,EACX,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,EAClC,KAAK,EAAE,cAAc,GACpB,gBAAgB,CAgBlB"}
{"version":3,"file":"inject.d.ts","sourceRoot":"","sources":["../src/inject.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,OAAO,CAAA;AAClF,OAAO,KAAK,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AAKzD,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,EAAE,CAAA;IACb,SAAS,CAAC,EAAE,IAAI,CAAA;CACjB;AAMD,wBAAgB,YAAY,CAC1B,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,WAAW,EAAE,EACrB,YAAY,EAAE,MAAM,EACpB,QAAQ,EAAE,MAAM,GACf,KAAK,CAUP;AA4BD,wBAAgB,cAAc,CAC5B,EAAE,EAAE,OAAO,EACX,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,EAClC,KAAK,EAAE,cAAc,GACpB,gBAAgB,CAgBlB"}

@@ -34,2 +34,4 @@ "use strict";

return { ...expr, left: qualify(expr.left, rel), right: qualify(expr.right, rel) };
case "null":
return { ...expr, expr: qualify(expr.expr, rel) };
case "and":

@@ -36,0 +38,0 @@ return { kind: "and", args: expr.args.map((a) => qualify(a, rel)) };

@@ -1,1 +0,1 @@

{"version":3,"file":"inject.js","sourceRoot":"","sources":["../src/inject.ts"],"names":[],"mappings":"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"}
{"version":3,"file":"inject.js","sourceRoot":"","sources":["../src/inject.ts"],"names":[],"mappings":"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"}

@@ -1,1 +0,1 @@

{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAChD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,cAAc,CAAA;AAGzC,OAAO,EAAoD,KAAK,eAAe,EAAE,MAAM,aAAa,CAAA;AAKpG,MAAM,WAAW,UAAU;IACzB,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,MAAM,CAAC,EAAE,OAAO,CAAA;CACjB;AAED,MAAM,WAAW,cAAc,CAAC,QAAQ;IACtC,GAAG,EAAE,QAAQ,CAAA;IACb,OAAO,EAAE,eAAe,EAAE,CAAA;IAC1B,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA;IAChC,GAAG,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;IACxD,KAAK,CAAC,EAAE;QACN,MAAM,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;QAC5C,MAAM,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;QAC5C,MAAM,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;KAC7C,CAAA;IACD,MAAM,CAAC,EAAE,UAAU,CAAA;CACpB;AA0DD,eAAO,MAAM,kBAAkB,QAuB0D,CAAA;AAIzF,wBAAgB,UAAU,CAAC,QAAQ,EAAE,IAAI,EAAE,cAAc,CAAC,QAAQ,CAAC,GAAG,WAAW,EAAE,CAiFlF"}
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAChD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,cAAc,CAAA;AAGzC,OAAO,EAAoD,KAAK,eAAe,EAAE,MAAM,aAAa,CAAA;AAKpG,MAAM,WAAW,UAAU;IACzB,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,MAAM,CAAC,EAAE,OAAO,CAAA;CACjB;AAED,MAAM,WAAW,cAAc,CAAC,QAAQ;IACtC,GAAG,EAAE,QAAQ,CAAA;IACb,OAAO,EAAE,eAAe,EAAE,CAAA;IAC1B,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA;IAChC,GAAG,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;IACxD,KAAK,CAAC,EAAE;QACN,MAAM,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;QAC5C,MAAM,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;QAC5C,MAAM,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;KAC7C,CAAA;IACD,MAAM,CAAC,EAAE,UAAU,CAAA;CACpB;AA6CD,eAAO,MAAM,kBAAkB,QAmB0D,CAAA;AAIzF,wBAAgB,UAAU,CAAC,QAAQ,EAAE,IAAI,EAAE,cAAc,CAAC,QAAQ,CAAC,GAAG,WAAW,EAAE,CAiFlF"}

@@ -8,29 +8,17 @@ "use strict";

const discovery_1 = require("./discovery");
const QUERY_DESCRIPTION = "Run a structured analytics query rooted at one resource (`from`). Provide `select` (columns " +
"and/or aggregate functions) and optionally `where`, `groupBy`, `orderBy`, and `limit`. A column " +
'is written `{ "col": "name" }`, both as a select item and inside a function\'s `args` — e.g. ' +
'`{ "fn": "sum", "args": [{ "col": "amount" }], "as": "total" }`. `count` over all rows takes no ' +
'args: `{ "fn": "count", "args": [], "as": "n" }`. Group or order by a select alias to bucket ' +
"over time or rank by an aggregate. A column that lives on the `from` (root) resource takes NO " +
'`rel` — write it plainly as `{ "col": "name" }`. Set `rel` only to read a *different* ' +
'resource\'s columns, passing the relation path from the root, e.g. `{ "col": "name", "rel": ' +
'["customer"] }` or, multiple hops, `{ "col": "name", "rel": ["order", "customer"] }`; the path ' +
"segments are relation names, never the root resource itself. The join is built automatically " +
"from the schema's relations — only declared relations are joinable. If a column is reported " +
'"not accessible", first try it with no `rel` (it is likely a root column) rather than resending ' +
"the same shape or guessing `rel` paths. Use describe_resource to learn a resource's exact " +
"columns and relations before querying.\n\n" +
'`where` is an Expr tree, not a raw string: a comparison is `{ "kind": "cmp", "op": ">=", ' +
'"left": { "col": "amount" }, "right": 100 }` — operands are Exprs, a column as `{ "col": ' +
'"name" }` and a literal as a bare scalar — composable with `{ "kind": "and"/"or", "args": ' +
'[...] }` and `{ "kind": "not", "arg": ... }`. For pattern matching use `op` "like" ' +
'(case-sensitive) or "ilike" (case-insensitive) with a string pattern, where % matches any ' +
'run of characters and _ matches one — e.g. `{ "kind": "cmp", "op": "ilike", "left": { "col": ' +
'"name" }, "right": "%acme%" }`; wrap in a "not" node to exclude.\n' +
const QUERY_DESCRIPTION = "Run a structured analytics query rooted at one resource (`from`), in a Prisma-like shape. " +
"`select` is an object keyed by result name: `true` selects the column of that name, " +
'{ "col": "path" } renames or reads a joined column, and { fn: args } aggregates or computes ' +
"(the key names the output). Filter with `where`, and use `groupBy`, `orderBy`, and `take` — do " +
"the work in the query rather than pulling raw rows and reducing yourself. Use describe_resource " +
"to learn a resource's exact columns and relations before querying.\n\n" +
"`where` is a Prisma filter: { field: value } is equality, { field: { gte: x, lt: y } } applies " +
"operators (gt/gte/lt/lte, in, notIn, not, and contains/startsWith/endsWith for text, with " +
'`mode: "insensitive"` for case-insensitive), and AND/OR/NOT combine sub-filters. Reach a joined ' +
'column with a dotted key ("customer.region"); only declared relations join. Scope filters are ' +
"enforced server-side — never add tenant/owner filters yourself.\n\n" +
"Example — total revenue per paid day, busiest first:\n" +
'`{ "from": "order", "select": [' +
'{ "fn": "dateTrunc", "args": [{ "col": "created_at" }, "day"], "as": "day" }, ' +
'{ "fn": "sum", "args": [{ "col": "amount" }], "as": "revenue" }], ' +
'"where": { "kind": "cmp", "op": "=", "left": { "col": "status" }, "right": "paid" }, ' +
'"groupBy": ["day"], "orderBy": [{ "col": "revenue", "dir": "desc" }] }`';
'{ "from": "order", ' +
'"select": { "day": { "dateTrunc": ["created_at", "day"] }, "revenue": { "sum": "amount" } }, ' +
'"where": { "status": "paid" }, "groupBy": ["day"], "orderBy": { "revenue": "desc" } }';
const LIST_DESCRIPTION = "List the resources you can query, each with a short description.";

@@ -40,11 +28,10 @@ const SEARCH_DESCRIPTION = "Search resources by keyword across their names, columns, and descriptions. Use this to find " +

const DESCRIBE_DESCRIPTION = "Describe a resource: its columns and types, and its relations to other resources. Call this " +
'before querying to learn the exact column names — each is referenced as `{ "col": "name" }`.';
const CREATE_DESCRIPTION = "Insert a row into a resource. Provide `from` and `values` (column → value). Server-owned " +
"before querying to learn the exact column names to use in `select` and `where`.";
const CREATE_DESCRIPTION = "Insert a row into a resource. Provide `from` and `data` (column → value). Server-owned " +
"fields are set automatically; you can't set columns you aren't allowed to write.";
const UPDATE_DESCRIPTION = "Update rows. Provide `from`, `set` (column → value), and a `where` filter (required). `where` " +
"is the same Expr tree the query tool uses, e.g. " +
'`{ "kind": "cmp", "op": "=", "left": { "col": "id" }, "right": 42 }`. Only rows within your ' +
"access are affected, regardless of the filter.";
const DELETE_DESCRIPTION = "Delete rows matching a required `where` filter (the same Expr tree the query tool uses). Only " +
"rows within your access are affected.";
const UPDATE_DESCRIPTION = "Update rows. Provide `from`, `data` (column → value), and a `where` filter (required) — the " +
'same Prisma filter the query tool uses, e.g. { "id": 42 }. Only rows within your access are ' +
"affected, regardless of the filter.";
const DELETE_DESCRIPTION = "Delete rows matching a required `where` filter (the same Prisma filter the query tool uses). " +
"Only rows within your access are affected.";
// A drop-in system-prompt block explaining how to drive the valv tools. The

@@ -62,15 +49,11 @@ // tool schemas already carry the query grammar; this is the workflow around

"3. Query with the `query` tool. Do the work in the query — filter with `where`, aggregate with " +
"functions, `groupBy`, `orderBy`, `limit` — rather than pulling raw rows and reducing yourself.\n" +
"4. A column on the `from` (root) resource takes NO `rel` — write it as just `{ \"col\": " +
'"name" }`. `rel` is only the join path to reach a *different* resource\'s columns (e.g. ' +
'`{ "col": "name", "rel": ["customer"] }`), and its segments are relation names, never the ' +
"root resource itself. Only declared relations join.\n" +
'5. If a column comes back "not accessible", first retry it with no `rel` (it is probably a ' +
"root column) — do NOT resubmit the same shape or guess other `rel` paths; if it still fails, " +
"call describe_resource to confirm the column exists and where it lives.\n\n" +
"Grammar reminders (the tool schemas have the full shapes): a column is always `{ \"col\": " +
'"name" }` — never a bare string — everywhere it appears (select, function `args`, `where`). ' +
"`where` is an Expr tree of `cmp`/`and`/`or`/`not` nodes over columns and literal values, not a " +
"raw string. A `cmp` op is one of =, !=, >, <, >=, <=, or \"like\"/\"ilike\" for pattern matching " +
"(% = any run, _ = one char; \"ilike\" is case-insensitive).\n\n" +
"functions, `groupBy`, `orderBy`, `take` — rather than pulling raw rows and reducing yourself.\n" +
"4. The grammar is Prisma-like. `select` is an object keyed by output name: `true` for a plain " +
'column, { "col": "path" } to rename or reach a joined column, { fn: args } to aggregate (e.g. ' +
'{ "revenue": { "sum": "amount" } }). `where` uses { field: value } for equality and ' +
"{ field: { gte, lt, in, contains } } for operators, combined with AND/OR/NOT.\n" +
'5. Read a joined resource\'s column with a dotted path from the root — "customer.name" — in a ' +
"select `col` or a where key. A root column takes no dot; only declared relations join. If a " +
'column comes back "not accessible", drop the relation prefix (it may be a root column) or call ' +
"describe_resource to confirm where it lives — don't resubmit the same shape.\n\n" +
"If a call is rejected, read the error and fix the query — don't retry the same shape.";

@@ -77,0 +60,0 @@ const NO_INPUT = { type: "object", properties: {}, additionalProperties: false };

@@ -1,1 +0,1 @@

{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"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"}
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"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"}
import type { FnDef } from "../functions";
export declare function buildQuerySchema(functions: Record<string, FnDef>): object;
export declare function mutationSchema(op: "create" | "update" | "delete"): object;
export declare function buildQuerySchema(functions: Record<string, FnDef>): object;
//# sourceMappingURL=query-schema.d.ts.map

@@ -1,1 +0,1 @@

{"version":3,"file":"query-schema.d.ts","sourceRoot":"","sources":["../../src/tools/query-schema.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAW,KAAK,EAAE,MAAM,cAAc,CAAA;AASlD,wBAAgB,cAAc,CAAC,EAAE,EAAE,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,MAAM,CAOzE;AASD,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,GAAG,MAAM,CAezE"}
{"version":3,"file":"query-schema.d.ts","sourceRoot":"","sources":["../../src/tools/query-schema.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAW,KAAK,EAAE,MAAM,cAAc,CAAA;AAgClD,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,GAAG,MAAM,CAoCzE;AAED,wBAAgB,cAAc,CAAC,EAAE,EAAE,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,MAAM,CAwBzE"}
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.buildQuerySchema = buildQuerySchema;
exports.mutationSchema = mutationSchema;
exports.buildQuerySchema = buildQuerySchema;
const zod_1 = require("zod");
const ast_1 = require("../ast");
let base = null;
let mutationSchemas = null;
// JSON Schema for a write tool's input. No catalog specialization — the columns
// are free strings (validated downstream), the `where` reuses the shared Expr.
// io: "input" like the query schema — the Expr `where` accepts the bare column
// shorthand, so the model-facing schema must show the pre-transform shape.
function mutationSchema(op) {
mutationSchemas ?? (mutationSchemas = {
create: zod_1.z.toJSONSchema(ast_1.InsertSchema, { io: "input" }),
update: zod_1.z.toJSONSchema(ast_1.UpdateSchema, { io: "input" }),
delete: zod_1.z.toJSONSchema(ast_1.DeleteSchema, { io: "input" }),
});
return mutationSchemas[op];
}
// JSON Schema for the query tool's input, derived from QuerySchema with `fn`
// constrained to the available function names. Resources and columns stay
// generic strings — they're resource-dependent and discovered via the tools,
// and the validator is the real backstop (a bad name is rejected at run time).
// `fn` is enumerated (a small fixed set), and any fixed-value (enum) arguments a
// function takes are spelled out in its description — otherwise a model would
// only discover valid units by trying one and reading the error.
// The model-facing JSON Schema for the query and write tools — the Prisma-
// idiomatic surface parsed by grammar.ts. Columns and resources stay generic
// strings (they're resource-dependent and discovered via describe_resource; the
// grammar + validator are the real backstop). Function names and their argument
// order are spelled out in the `select` description so the model doesn't have to
// probe for a signature by trial and error.
const scalar = { type: ["string", "number", "boolean", "null"] };
// A Prisma-style filter. Field keys are dynamic (any column path), so the object
// stays open; the operator vocabulary and shape live in the description.
const filterSchema = {
type: "object",
additionalProperties: true,
description: "Prisma-style filter. { field: value } is equality; { field: { gte: x, lt: y } } applies " +
"operators (equals, not, gt, gte, lt, lte, in, notIn, contains, startsWith, endsWith, mode: " +
'"insensitive"). { field: null } tests IS NULL; { field: { not: null } } tests IS NOT NULL. ' +
"Combine with AND / OR / NOT (arrays of filters). A dotted key reads a joined column: " +
'{ "customer.region": "EU" }. Scope filters are added server-side — never add your own.',
};
const dataSchema = {
type: "object",
minProperties: 1,
additionalProperties: scalar,
description: "Column → value map.",
};
// Query tool input. `select` carries the function catalog in its description.
function buildQuerySchema(functions) {
// Describe the input the model produces (io: "input"): function args accept a
// bare column shorthand that normalizes to a col Expr, so the schema must show
// the pre-transform shape.
base ?? (base = zod_1.z.toJSONSchema(ast_1.QuerySchema, { io: "input" }));
const schema = structuredClone(base);
const variants = schema.properties?.select?.items?.anyOf;
const fnVariant = Array.isArray(variants) ? variants.find((v) => v?.properties?.fn) : undefined;
if (fnVariant?.properties) {
const fn = { type: "string", enum: Object.keys(functions) };
const hint = enumArgHint(functions);
if (hint)
fn.description = hint;
fnVariant.properties.fn = fn;
}
return schema;
return {
type: "object",
required: ["from", "select"],
additionalProperties: false,
properties: {
from: { type: "string", description: "The resource to query." },
where: filterSchema,
select: {
type: "object",
minProperties: 1,
additionalProperties: true,
description: "Output columns keyed by result name: `true` selects the column of that name; " +
'{ "col": "path" } renames or reads a joined column ({ "col": "customer.name" }); ' +
"{ fn: args } computes/aggregates, where the key is the result name. Call a function " +
"as { name: column } for one column, { name: true } for none (count), or { name: [args] } " +
"positionally. Available functions (with argument order — `column` is a column name, " +
"`predicate` a filter object): " +
renderSignatures(functions) +
".",
},
groupBy: {
type: "array",
items: { type: "string" },
description: "Column names or select aliases (e.g. a time bucket) to group by.",
},
orderBy: {
description: '{ column: "asc" | "desc" } — column is a select alias or a column path. Use an array ' +
"of these for multiple sort keys, in order.",
oneOf: [orderBySchema(), { type: "array", items: orderBySchema() }],
},
take: { type: "integer", minimum: 1, description: "Maximum number of rows to return." },
},
};
}
// Document every function that takes a fixed-value argument, e.g.
// "Functions with fixed-value arguments: dateTrunc(column, minute|hour|day|month|year)."
// The full positional signature is spelled out — not just the enum values — so the
// argument *order* is unambiguous (the model can't otherwise tell the unit comes
// after the column, only by trying one and reading the error). Returns undefined
// when no function has an enum arg.
function enumArgHint(functions) {
const parts = [];
for (const [name, def] of Object.entries(functions)) {
if (!def.args.some((a) => a.kind === "enum"))
continue;
const args = def.args.map(renderArg).join(", ");
parts.push(`${name}(${args})`);
function mutationSchema(op) {
const from = { type: "string", description: "The resource to write to." };
if (op === "create") {
return {
type: "object",
required: ["from", "data"],
additionalProperties: false,
properties: { from, data: dataSchema },
};
}
return parts.length ? `Functions with fixed-value arguments: ${parts.join("; ")}.` : undefined;
if (op === "update") {
return {
type: "object",
required: ["from", "where", "data"],
additionalProperties: false,
properties: { from, where: filterSchema, data: dataSchema },
};
}
return {
type: "object",
required: ["from", "where"],
additionalProperties: false,
properties: { from, where: filterSchema },
};
}
// One positional argument, spelled the way it appears in a call so order reads off
// the signature: the enum's allowed values, or the arg's kind as a placeholder.
function orderBySchema() {
return { type: "object", additionalProperties: { enum: ["asc", "desc"] } };
}
// "sum(column); count(column?); quantileTiming(number, column); toStartOfInterval(column, number,
// second|minute|...); countIf(predicate)" — the full signature so argument order and the fixed
// enum values read straight off the list.
function renderSignatures(functions) {
return Object.entries(functions)
.map(([name, def]) => `${name}(${def.args.map(renderArg).join(", ")})`)
.join("; ");
}
function renderArg(a) {

@@ -64,0 +102,0 @@ switch (a.kind) {

@@ -1,1 +0,1 @@

{"version":3,"file":"query-schema.js","sourceRoot":"","sources":["../../src/tools/query-schema.ts"],"names":[],"mappings":"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"}
{"version":3,"file":"query-schema.js","sourceRoot":"","sources":["../../src/tools/query-schema.ts"],"names":[],"mappings":"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"}

@@ -173,2 +173,5 @@ "use strict";

break;
case "null":
walkColumns(expr.expr, visit);
break;
case "and":

@@ -175,0 +178,0 @@ case "or":

@@ -1,1 +0,1 @@

{"version":3,"file":"validate.js","sourceRoot":"","sources":["../src/validate.ts"],"names":[],"mappings":"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"}
{"version":3,"file":"validate.js","sourceRoot":"","sources":["../src/validate.ts"],"names":[],"mappings":"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"}
import type { SchemaMap } from "./catalog";
import type { PolicyFn, PolicyResult, DefaultContext } from "./policy";
import type { ValvAdapter } from "./adapter";
import type { Query, Insert, Update, Delete } from "./ast";
import type { FnDef } from "./functions";
import { type WriteOp } from "./evaluate";
import type { MutationResult } from "./adapter";

@@ -80,2 +83,42 @@ import { type ResultColumn } from "./result-schema";

/**
* This connection's function catalog — the base functions plus the adapter's
* dialect functions. The same registry that types the query grammar's function
* arguments.
*/
get functions(): Record<string, FnDef>;
/**
* The JSON Schema for the `query` tool's input, with this connection's function
* catalog baked into its description. Use it to embed the exact query grammar in
* your own tool (e.g. a chart tool that takes a `query` field) — it can't drift
* from what the `query` tool accepts.
*/
querySchema(): object;
/** The JSON Schema for a write tool's input (`create` / `update` / `delete`). */
mutationSchema(op: WriteOp): object;
/**
* Parse and structurally validate a query in the grammar the model emits,
* returning the internal query. Throws on a malformed or oversized query — use
* it to validate a hand-built or stored query before {@link run}. Does not check
* columns/policy against a catalog; that happens at run time, scoped to `ctx`.
*/
parseQuery(input: unknown): Query;
/** Parse a `create` payload in the write grammar. See {@link parseQuery}. */
parseInsert(input: unknown): Insert;
/** Parse an `update` payload in the write grammar. See {@link parseQuery}. */
parseUpdate(input: unknown): Update;
/** Parse a `delete` payload in the write grammar. See {@link parseQuery}. */
parseDelete(input: unknown): Delete;
/**
* The real `query` tool as a composable unit: the exact grammar schema and
* description, bound to `ctx`, with an optional post-run `wrap` to transform the
* rows (draw a chart, save a widget, return a count). Override `name`/
* `description` to present it as your own tool. Because it reuses the query
* tool, its schema can't drift from what the model is told elsewhere.
*/
queryTool(ctx: TContext, options?: {
name?: string;
description?: string;
wrap?: (rows: unknown, input: unknown) => unknown | Promise<unknown>;
}): NeutralTool;
/**
* Tools for the model — `query` plus the discovery tools — formatted per

@@ -82,0 +125,0 @@ * provider and bound to `ctx`. Each format takes an optional

@@ -1,1 +0,1 @@

{"version":3,"file":"valv.d.ts","sourceRoot":"","sources":["../src/valv.ts"],"names":[],"mappings":"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"}
{"version":3,"file":"valv.d.ts","sourceRoot":"","sources":["../src/valv.ts"],"names":[],"mappings":"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"}
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.Valv = void 0;
const ast_1 = require("./ast");
const grammar_1 = require("./grammar");
const query_schema_1 = require("./tools/query-schema");
const limits_1 = require("./limits");

@@ -102,8 +103,7 @@ const evaluate_1 = require("./evaluate");

async executeWrite(op, input, ctx) {
(0, limits_1.assertWithinLimits)(input);
const mutation = op === "create"
? ast_1.InsertSchema.parse(input)
? this.parseInsert(input)
: op === "update"
? ast_1.UpdateSchema.parse(input)
: ast_1.DeleteSchema.parse(input);
? this.parseUpdate(input)
: this.parseDelete(input);
const catalog = await this.loadSchema();

@@ -136,6 +136,69 @@ if (!hasOwn(catalog.resources, mutation.from)) {

resultSchema(query) {
const parsed = ast_1.QuerySchema.parse(query);
const parsed = this.parseQuery(query);
return (0, result_schema_1.resultSchema)(parsed, this.requireSchema(), this.adapter.functions());
}
/**
* This connection's function catalog — the base functions plus the adapter's
* dialect functions. The same registry that types the query grammar's function
* arguments.
*/
get functions() {
return this.adapter.functions();
}
/**
* The JSON Schema for the `query` tool's input, with this connection's function
* catalog baked into its description. Use it to embed the exact query grammar in
* your own tool (e.g. a chart tool that takes a `query` field) — it can't drift
* from what the `query` tool accepts.
*/
querySchema() {
return (0, query_schema_1.buildQuerySchema)(this.adapter.functions());
}
/** The JSON Schema for a write tool's input (`create` / `update` / `delete`). */
mutationSchema(op) {
return (0, query_schema_1.mutationSchema)(op);
}
/**
* Parse and structurally validate a query in the grammar the model emits,
* returning the internal query. Throws on a malformed or oversized query — use
* it to validate a hand-built or stored query before {@link run}. Does not check
* columns/policy against a catalog; that happens at run time, scoped to `ctx`.
*/
parseQuery(input) {
(0, limits_1.assertWithinLimits)(input);
return (0, grammar_1.parseQuery)(input, this.adapter.functions());
}
/** Parse a `create` payload in the write grammar. See {@link parseQuery}. */
parseInsert(input) {
(0, limits_1.assertWithinLimits)(input);
return (0, grammar_1.parseInsert)(input);
}
/** Parse an `update` payload in the write grammar. See {@link parseQuery}. */
parseUpdate(input) {
(0, limits_1.assertWithinLimits)(input);
return (0, grammar_1.parseUpdate)(input);
}
/** Parse a `delete` payload in the write grammar. See {@link parseQuery}. */
parseDelete(input) {
(0, limits_1.assertWithinLimits)(input);
return (0, grammar_1.parseDelete)(input);
}
/**
* The real `query` tool as a composable unit: the exact grammar schema and
* description, bound to `ctx`, with an optional post-run `wrap` to transform the
* rows (draw a chart, save a widget, return a count). Override `name`/
* `description` to present it as your own tool. Because it reuses the query
* tool, its schema can't drift from what the model is told elsewhere.
*/
queryTool(ctx, options) {
const base = this.neutralTools(ctx).find((t) => t.name === "query");
const wrap = options?.wrap;
return {
name: options?.name ?? base.name,
description: options?.description ?? base.description,
parameters: base.parameters,
execute: wrap ? async (input) => wrap(await base.execute(input), input) : base.execute,
};
}
/**
* Tools for the model — `query` plus the discovery tools — formatted per

@@ -201,4 +264,3 @@ * provider and bound to `ctx`. Each format takes an optional

async runQuery(input, ctx) {
(0, limits_1.assertWithinLimits)(input);
const query = ast_1.QuerySchema.parse(input);
const query = this.parseQuery(input);
const catalog = await this.loadSchema();

@@ -205,0 +267,0 @@ if (!hasOwn(catalog.resources, query.from)) {

@@ -1,1 +0,1 @@

{"version":3,"file":"valv.js","sourceRoot":"","sources":["../src/valv.ts"],"names":[],"mappings":";;;AAGA,+BAA6E;AAC7E,qCAA6C;AAC7C,yCAA4F;AAC5F,yCAA8E;AAC9E,qCAAyE;AACzE,mCAAoE;AAEpE,6CAA8C;AAC9C,mDAAuF;AACvF,mCAAyE;AACzE,iDAAmE;AACnE,6CAQqB;AACrB,gDAA6C;AAC7C,qCAAgE;AAEhE,2EAA2E;AAC3E,MAAM,SAAS,GAAG,IAAI,CAAA;AACtB,MAAM,aAAa,GAAG,GAAG,CAAA;AA4CzB,MAAa,IAAI;IASf,YAAY,MAAwC;QAN5C,aAAQ,GAAuC,EAAE,CAAA;QACjD,gBAAW,GAAqB,IAAI,CAAA;QAM1C,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAA;QAC7B,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC,aAAa,IAAI,UAAU,CAAA;QACvD,IAAI,CAAC,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,IAAI,KAAK,CAAA;QACxD,IAAI,CAAC,eAAe,GAAG,MAAM,CAAC,aAAa,CAAA;QAC3C,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,OAAO,CAAA;IACjC,CAAC;IAED,gFAAgF;IAChF,MAAM,CAAC,QAA0B,EAAE,EAAsB;QACvD,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAA;QAC5B,OAAO,IAAI,CAAA;IACb,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,GAAG,CAAC,KAAc,EAAE,GAAa;QACrC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;QACxB,MAAM,QAAQ,GAAG,eAAe,CAAC,KAAK,CAAe,CAAA;QACrD,IAAI,KAAwB,CAAA;QAC5B,IAAI,CAAC;YACH,OAAO,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,GAAG,CAAC,CAAA;QACxC,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,wEAAwE;YACxE,0EAA0E;YAC1E,oEAAoE;YACpE,KAAK,GAAG,CAAU,CAAA;YAClB,MAAM,WAAW,CAAC,KAAK,CAAC,CAAA;QAC1B,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,QAAQ,EAAE,OAAO;gBACjB,QAAQ;gBACR,SAAS,EAAE,OAAO;gBAClB,GAAG;gBACH,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK;gBAC9B,KAAK;aACN,CAAC,CAAA;QACJ,CAAC;IACH,CAAC;IAED,wEAAwE;IACxE,MAAM,CAAC,KAAc,EAAE,GAAa;QAClC,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,KAAK,EAAE,GAAG,CAAC,CAAA;IAC5C,CAAC;IAED,2EAA2E;IAC3E,MAAM,CAAC,KAAc,EAAE,GAAa;QAClC,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,KAAK,EAAE,GAAG,CAAC,CAAA;IAC5C,CAAC;IAED,2EAA2E;IAC3E,MAAM,CAAC,KAAc,EAAE,GAAa;QAClC,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,KAAK,EAAE,GAAG,CAAC,CAAA;IAC5C,CAAC;IAEO,KAAK,CAAC,QAAQ,CAAC,EAAW,EAAE,KAAc,EAAE,GAAa;QAC/D,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;QACxB,MAAM,QAAQ,GAAG,eAAe,CAAC,KAAK,CAAe,CAAA;QACrD,IAAI,KAAwB,CAAA;QAC5B,IAAI,CAAC;YACH,OAAO,MAAM,IAAI,CAAC,YAAY,CAAC,EAAE,EAAE,KAAK,EAAE,GAAG,CAAC,CAAA;QAChD,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,KAAK,GAAG,CAAU,CAAA;YAClB,MAAM,WAAW,CAAC,KAAK,CAAC,CAAA;QAC1B,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,QAAQ,EAAE,EAAE;gBACZ,QAAQ;gBACR,SAAS,EAAE,EAAE;gBACb,GAAG;gBACH,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK;gBAC9B,KAAK;aACN,CAAC,CAAA;QACJ,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,YAAY,CAAC,EAAW,EAAE,KAAc,EAAE,GAAa;QACnE,IAAA,2BAAkB,EAAC,KAAK,CAAC,CAAA;QACzB,MAAM,QAAQ,GACZ,EAAE,KAAK,QAAQ;YACb,CAAC,CAAC,kBAAY,CAAC,KAAK,CAAC,KAAK,CAAC;YAC3B,CAAC,CAAC,EAAE,KAAK,QAAQ;gBACf,CAAC,CAAC,kBAAY,CAAC,KAAK,CAAC,KAAK,CAAC;gBAC3B,CAAC,CAAC,kBAAY,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;QAEjC,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,UAAU,EAAE,CAAA;QACvC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YAC9C,MAAM,IAAI,wBAAe,CAAC,qBAAqB,QAAQ,CAAC,IAAI,IAAI,CAAC,CAAA;QACnE,CAAC;QACD,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAA;QACpC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,MAAM,IAAI,wBAAe,CAAC,wCAAwC,CAAC,CAAA;QACrE,CAAC;QACD,MAAM,QAAQ,GAAG,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAA;QACjD,MAAM,QAAQ,GAAG,IAAI,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAA;QACrD,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;QAEpF,MAAM,KAAK,GAAG,IAAA,wBAAa,EAAC,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,CAAC,aAAa,CAAC,CAAA;QAC1E,IAAI,CAAC,KAAK,CAAC,OAAO;YAChB,MAAM,IAAI,6BAAoB,CAAC,GAAG,EAAE,eAAe,QAAQ,CAAC,IAAI,cAAc,CAAC,CAAA;QACjF,+DAA+D;QAC/D,MAAM,IAAI,GAAG,IAAA,uBAAY,EAAC,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,CAAC,aAAa,CAAC,CAAA;QAEpE,IAAA,2BAAgB,EAAC,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,CAAC,CAAA;QACrD,MAAM,QAAQ,GAAG,IAAA,uBAAc,EAAC,EAAE,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAA;QACpD,OAAO,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAA;IACvD,CAAC;IAED;;;;;OAKG;IACH,YAAY,CAAC,KAAc;QACzB,MAAM,MAAM,GAAG,iBAAW,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;QACvC,OAAO,IAAA,4BAAkB,EAAC,MAAM,EAAE,IAAI,CAAC,aAAa,EAAE,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,CAAA;IACnF,CAAC;IAED;;;;;;OAMG;IACH,IAAI,KAAK;QACP,OAAO;YACL,OAAO,EAAE,CAAC,GAAa,EAAE,MAAmB,EAAiB,EAAE,CAC7D,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,MAAM,CAAC;YAChC,SAAS,EAAE,CAAC,GAAa,EAAE,MAAmB,EAAmB,EAAE,CACjE,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,sBAAS,CAAC;YAC/C,MAAM,EAAE,CAAC,GAAa,EAAE,MAAmB,EAAgB,EAAE,CAC3D,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,mBAAM,CAAC;YAC5C,MAAM,EAAE,CAAC,GAAa,EAAE,MAAmB,EAAgB,EAAE,CAC3D,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,mBAAM,CAAC;YAC5C,uEAAuE;YACvE,KAAK,EAAE,CAAC,GAAa,EAAE,MAAmB,EAAE,EAAE,CAAC,IAAA,gBAAO,EAAC,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;SACvF,CAAA;IACH,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,YAAY,CAAC,GAAa;QAC9B,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,UAAU,EAAE,CAAA;QACvC,MAAM,QAAQ,GAAG,IAAI,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAA;QACrD,MAAM,OAAO,GAAG,IAAA,4BAAgB,EAAC,OAAO,EAAE,QAAQ,EAAE,IAAI,CAAC,aAAa,EAAE,GAAG,CAAC,CAAA;QAC5E,MAAM,KAAK,GAAG,IAAA,yBAAa,EAAC,OAAO,CAAC,CAAC,GAAG,CACtC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAClE,CAAA;QACD,OAAO,GAAG,0BAAkB,iCAAiC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAA;IACjF,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,OAAO,CAAC,IAAY,EAAE,KAAc,EAAE,GAAa;QACvD,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAA;QAChE,IAAI,CAAC,IAAI;YAAE,MAAM,IAAI,wBAAe,CAAC,iBAAiB,IAAI,IAAI,CAAC,CAAA;QAC/D,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;IAC5B,CAAC;IAEO,YAAY,CAAC,GAAa,EAAE,MAAmB;QACrD,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,EAAE,CAAA;QACpC,MAAM,QAAQ,GAAG,IAAI,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAA;QACrD,MAAM,OAAO,GAAG,IAAA,4BAAgB,EAAC,OAAO,EAAE,QAAQ,EAAE,IAAI,CAAC,aAAa,EAAE,GAAG,CAAC,CAAA;QAC5E,OAAO,IAAA,kBAAU,EAAC;YAChB,GAAG;YACH,OAAO;YACP,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE;YACnC,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC;YACrC,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM;gBACxB,CAAC,CAAC;oBACE,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC;oBAC1C,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC;oBAC1C,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC;iBAC3C;gBACH,CAAC,CAAC,SAAS;YACb,MAAM;SACP,CAAC,CAAA;IACJ,CAAC;IAEO,KAAK,CAAC,QAAQ,CAAC,KAAc,EAAE,GAAa;QAClD,IAAA,2BAAkB,EAAC,KAAK,CAAC,CAAA;QACzB,MAAM,KAAK,GAAG,iBAAW,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;QACtC,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,UAAU,EAAE,CAAA;QACvC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YAC3C,MAAM,IAAI,wBAAe,CAAC,qBAAqB,KAAK,CAAC,IAAI,IAAI,CAAC,CAAA;QAChE,CAAC;QACD,MAAM,YAAY,GAAG,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;QAElD,MAAM,QAAQ,GAAG,IAAI,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAA;QACrD,MAAM,SAAS,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAA;QAEzF,mEAAmE;QACnE,MAAM,KAAK,GAAG,IAAA,oBAAY,EAAC,KAAK,EAAE,OAAO,CAAC,CAAA;QAC1C,IAAA,wBAAgB,EAAC,KAAK,CAAC,CAAA;QAEvB,4EAA4E;QAC5E,0EAA0E;QAC1E,8EAA8E;QAC9E,MAAM,QAAQ,GAAG,IAAA,uBAAY,EAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,YAAY,EAAE,IAAI,CAAC,aAAa,CAAC,CAAA;QAC3F,IAAI,CAAC,QAAQ,CAAC,OAAO;YACnB,MAAM,IAAI,6BAAoB,CAAC,mBAAmB,KAAK,CAAC,IAAI,cAAc,CAAC,CAAA;QAE7E,MAAM,MAAM,GAAG,IAAI,GAAG,CAAsB;YAC1C,CAAC,kBAAU,EAAE,EAAE,QAAQ,EAAE,YAAY,EAAE,aAAa,EAAE,IAAI,GAAG,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC;SACzF,CAAC,CAAA;QACF,MAAM,WAAW,GAAG,IAAI,GAAG,CAA0B,CAAC,CAAC,kBAAU,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAA;QAC9E,MAAM,MAAM,GAAkB,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,SAAS,EAAE,QAAQ,CAAC,SAAS,EAAE,CAAC,CAAA;QAE1E,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;YAChD,IAAI,MAAM,EAAE,SAAS,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,KAAK,EAAE,CAAC;gBACtD,MAAM,IAAI,6BAAoB,CAAC,aAAa,IAAI,CAAC,QAAQ,CAAC,IAAI,sBAAsB,CAAC,CAAA;YACvF,CAAC;YACD,MAAM,EAAE,GAAG,IAAA,uBAAY,EAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,aAAa,CAAC,CAAA;YAC9F,IAAI,CAAC,EAAE,CAAC,OAAO;gBACb,MAAM,IAAI,6BAAoB,CAAC,mBAAmB,IAAI,CAAC,QAAQ,CAAC,IAAI,cAAc,CAAC,CAAA;YACrF,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA;YAC/B,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,aAAa,EAAE,IAAI,GAAG,CAAC,EAAE,CAAC,aAAa,CAAC,EAAE,CAAC,CAAA;YAC7F,MAAM,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE,CAAC,SAAS,EAAE,CAAC,CAAA;QAC1D,CAAC;QAED,IAAA,wBAAa,EAAC,KAAK,EAAE,MAAM,EAAE,SAAS,CAAC,CAAA;QACvC,MAAM,QAAQ,GAAG,IAAA,qBAAY,EAAC,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,SAAS,CAAC,CAAA;QACtE,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;QACxD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,CACrC,QAAQ,CAAC,GAAG,EACZ,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CACpC,CAAA;QACD,OAAO,IAAA,4BAAe,EAAC,IAAI,CAAC,CAAA;IAC9B,CAAC;IAED,+CAA+C;IAC/C,KAAK,CAAC,UAAU;QACd,IAAI,CAAC,WAAW,KAAhB,IAAI,CAAC,WAAW,GAAK,MAAM,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,EAAA;QACpD,OAAO,IAAI,CAAC,WAAW,CAAA;IACzB,CAAC;IAED,0EAA0E;IAC1E,sEAAsE;IAC9D,aAAa;QACnB,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CACb,qGAAqG,CACtG,CAAA;QACH,CAAC;QACD,OAAO,IAAI,CAAC,WAAW,CAAA;IACzB,CAAC;IAED,iDAAiD;IACjD,KAAK,CAAC,SAAS;QACb,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,UAAU,EAAE,CAAA;QACtC,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAiB,CAAA;IACtD,CAAC;IAED,oFAAoF;IACpF,KAAK,CAAC,QAAQ;QACZ,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,UAAU,EAAE,CAAA;QACtC,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACjD,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBAC1C,IAAI,EAAE,CAAC,CAAC,IAAI;gBACZ,IAAI,EAAE,CAAC,CAAC,IAAI;gBACZ,IAAI,EAAE,CAAC,CAAC,IAAI;gBACZ,UAAU,EAAE,CAAC,CAAC,UAAU;gBACxB,eAAe,EAAE,CAAC,CAAC,eAAe,IAAI,KAAK;gBAC3C,SAAS,EAAE,CAAC,CAAC,SAAS,IAAI,KAAK;aAChC,CAAC,CAAC;YACH,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;gBAClD,IAAI,EAAE,GAAG,CAAC,IAAI;gBACd,MAAM,EAAE,GAAG,CAAC,cAAc;gBAC1B,IAAI,EAAE,GAAG,CAAC,IAAI;aACf,CAAC,CAAC;YACH,UAAU,EAAE,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC;SACpC,CAAC,CAAC,CAAA;IACL,CAAC;IAED,sEAAsE;IACtE,4EAA4E;IACpE,sBAAsB,CAAC,MAAiB;QAC9C,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAA;QACnC,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAA;QACrC,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ;YAAE,OAAO,IAAI,CAAC,QAAQ,CAAA;QAEhD,MAAM,SAAS,GAAuC,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAA;QAC1E,KAAK,MAAM,YAAY,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC;YACzD,IAAI,SAAS,CAAC,YAAY,CAAC;gBAAE,SAAQ;YACrC,IAAI,QAAQ,EAAE,CAAC;gBACb,SAAS,CAAC,YAAY,CAAC,GAAG,QAAQ,CAAA;YACpC,CAAC;iBAAM,IAAI,QAAQ,EAAE,CAAC;gBACpB,MAAM,QAAQ,GAAG,YAA0B,CAAA;gBAC3C,SAAS,CAAC,YAAY,CAAC,GAAG,CAAC,GAAa,EAAE,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAA;YACtE,CAAC;QACH,CAAC;QACD,OAAO,SAAS,CAAC,GAAG,CAAC,CAAA;QACrB,OAAO,SAAS,CAAA;IAClB,CAAC;IAEO,kBAAkB,CAAC,MAAiB;QAC1C,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAA;QAC5D,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC7C,IAAI,GAAG,KAAK,GAAG,IAAI,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC;gBAAE,SAAQ;YACnD,MAAM,GAAG,GAAG,2CAA2C,GAAG,aAAa,CAAC,GAAG,aAAa,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,2CAA2C,CAAA;YAC/I,IAAI,IAAI,CAAC,gBAAgB;gBAAE,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC,CAAA;YAC/C,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QACnB,CAAC;IACH,CAAC;CACF;AAzUD,oBAyUC;AAED,SAAS,MAAM,CAAC,GAAW,EAAE,GAAW;IACtC,OAAO,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;AACvD,CAAC;AAED,6EAA6E;AAC7E,mEAAmE;AACnE,SAAS,eAAe,CAAC,KAAc;IACrC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,MAAM,IAAI,KAAK;QACnE,CAAC,CAAC,MAAM,CAAE,KAA2B,CAAC,IAAI,CAAC;QAC3C,CAAC,CAAC,SAAS,CAAA;AACf,CAAC;AAED,8EAA8E;AAC9E,2EAA2E;AAC3E,mCAAmC;AACnC,SAAS,WAAW,CAAC,GAAU;IAC7B,IAAI,GAAG,YAAY,wBAAe,IAAI,GAAG,YAAY,6BAAoB;QAAE,OAAO,GAAG,CAAA;IACrF,OAAO,IAAI,wBAAe,CAAC,mCAAmC,CAAC,CAAA;AACjE,CAAC;AAED,SAAS,eAAe,CAAC,YAAoB;IAC3C,OAAO;QACL,gBAAgB,YAAY,gBAAgB;QAC5C,wEAAwE;QACxE,sEAAsE;QACtE,kBAAkB;QAClB,6CAA6C;QAC7C,qCAAqC;QACrC,KAAK;KACN,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AACd,CAAC"}
{"version":3,"file":"valv.js","sourceRoot":"","sources":["../src/valv.ts"],"names":[],"mappings":"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"}
{
"name": "@valv/core",
"version": "0.8.2",
"version": "0.9.0",
"description": "ORM + Access Control Layer for AI Agents",

@@ -5,0 +5,0 @@ "keywords": [