@thyn-ai/sqai-ai-sdk 0.1.2 → 0.1.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -52,6 +52,7 @@ __export(index_exports, {
52
52
  shapeComputationValue: () => shapeComputationValue,
53
53
  shapeQueryResult: () => shapeQueryResult,
54
54
  sourceListOutputSchema: () => sourceListOutputSchema,
55
+ sqaiValueSchema: () => sqaiValueSchema,
55
56
  storeWithinCap: () => storeWithinCap
56
57
  });
57
58
  module.exports = __toCommonJS(index_exports);
@@ -88,17 +89,18 @@ var taggedScalarSchema = import_zod.z.object({
88
89
  type: import_zod.z.enum(["decimal", "bigint"]),
89
90
  value: import_zod.z.string()
90
91
  });
91
- var algentaWireValueSchema = import_zod.z.lazy(
92
+ var sqaiValueSchema = import_zod.z.lazy(
92
93
  () => import_zod.z.union([
93
94
  import_zod.z.null(),
94
95
  import_zod.z.boolean(),
95
96
  import_zod.z.number(),
96
97
  import_zod.z.string(),
97
- import_zod.z.array(algentaWireValueSchema),
98
+ import_zod.z.array(sqaiValueSchema),
98
99
  taggedScalarSchema,
99
- import_zod.z.record(import_zod.z.string(), algentaWireValueSchema)
100
+ import_zod.z.record(import_zod.z.string(), sqaiValueSchema)
100
101
  ])
101
102
  );
103
+ var algentaWireValueSchema = sqaiValueSchema;
102
104
  var singleBindingSchema = import_zod.z.object({
103
105
  parameter: import_zod.z.union([import_zod.z.string(), import_zod.z.number()]).describe("Target parameter, by name or positional index."),
104
106
  source: import_zod.z.string().describe("Connected source name to pull the column from."),
@@ -117,8 +119,8 @@ var computationBindingSchema = import_zod.z.union([singleBindingSchema, alignedB
117
119
  var computationSpecSchema = import_zod.z.object({
118
120
  module: import_zod.z.string().describe("Capability module, e.g. 'stats'. Discover via listSources."),
119
121
  function: import_zod.z.string().describe("Function inside the module, e.g. 'median'."),
120
- args: import_zod.z.array(algentaWireValueSchema).default([]).describe("Positional arguments."),
121
- kwargs: import_zod.z.record(import_zod.z.string(), algentaWireValueSchema).optional().describe("Named arguments."),
122
+ args: import_zod.z.array(sqaiValueSchema).default([]).describe("Positional arguments."),
123
+ kwargs: import_zod.z.record(import_zod.z.string(), sqaiValueSchema).optional().describe("Named arguments."),
122
124
  bindings: import_zod.z.array(computationBindingSchema).optional().describe("Pull columns from connected sources instead of pasting data inline."),
123
125
  seed: import_zod.z.union([import_zod.z.number(), import_zod.z.string()]).optional().describe("Required for simulation modules; makes runs replayable")
124
126
  });
@@ -208,9 +210,9 @@ var bindingProvenanceSchema = import_zod.z.object({
208
210
  var computationOkOutputSchema = import_zod.z.object({
209
211
  status: import_zod.z.literal("ok"),
210
212
  kind: import_zod.z.literal("computation"),
211
- value: algentaWireValueSchema,
213
+ value: sqaiValueSchema,
212
214
  value_type: import_zod.z.string(),
213
- preview: algentaWireValueSchema.optional(),
215
+ preview: sqaiValueSchema.optional(),
214
216
  element_count: import_zod.z.number().optional(),
215
217
  truncated: import_zod.z.boolean(),
216
218
  result_id: import_zod.z.string().optional(),
@@ -841,6 +843,7 @@ var import_sqai3 = require("@thyn-ai/sqai");
841
843
  shapeComputationValue,
842
844
  shapeQueryResult,
843
845
  sourceListOutputSchema,
846
+ sqaiValueSchema,
844
847
  storeWithinCap
845
848
  });
846
849
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/toolkit.ts","../src/tools.ts","../src/schemas.ts","../src/truncate.ts"],"sourcesContent":["export { createSQAI, SQAIToolkit, type SqaiSourceInput, type SqaiToolkitConfig } from \"./toolkit.js\";\nexport { createSqaiTools, type SqaiToolSet, type SqaiToolsOptions } from \"./tools.js\";\nexport {\n shapeComputationValue,\n shapeQueryResult,\n storeWithinCap,\n type Cell,\n type ComputationShapingOptions,\n type QueryShapingOptions,\n type ShapedComputationValue,\n type ShapedQueryResult,\n} from \"./truncate.js\";\nexport * from \"./schemas.js\";\n\n// Substrate types agents commonly need alongside the tools.\nexport { SQAI, SqaiError } from \"@thyn-ai/sqai\";\nexport type {\n AlgentaWireValue,\n ComputationBinding,\n ComputationSpec,\n ComputeResult,\n QueryFilterCondition,\n QueryFilterSpec,\n QuerySpec,\n SqaiConfig,\n SqaiPolicy,\n SqaiSource,\n} from \"@thyn-ai/sqai\";\n","/** SQAIToolkit: an SQAI client plus declarative sources and AI-SDK tools.\n *\n * Sources connect lazily — on first `ready` access or first tool call. The\n * connection promise gets a rejection handler the moment it is created, so a\n * failed connect never surfaces as an unhandled rejection: every tool call\n * reports the stored failure as a structured error result instead. */\n\nimport { SQAI, SqaiError, type SqaiConfig, type SqaiSource } from \"@thyn-ai/sqai\";\n\nimport { createSqaiTools, type SqaiToolSet, type SqaiToolsOptions } from \"./tools.js\";\n\nexport type SqaiSourceInput =\n | string\n | Array<Record<string, unknown>>\n | { data: string | Array<Record<string, unknown>>; name?: string };\n\nexport interface SqaiToolkitConfig extends SqaiConfig {\n /** Sources to connect lazily on first tool call / `ready` access. */\n sources?: SqaiSourceInput[];\n}\n\nexport class SQAIToolkit {\n readonly client: SQAI;\n private readonly sourceInputs: SqaiSourceInput[];\n private readyPromise: Promise<SqaiSource[]> | null = null;\n private readyError: SqaiError | null = null;\n\n constructor(config: SqaiToolkitConfig = {}) {\n const { sources, ...clientConfig } = config;\n this.client = new SQAI(clientConfig);\n this.sourceInputs = sources ?? [];\n }\n\n /** Connected sources; connecting starts on first access. */\n get ready(): Promise<SqaiSource[]> {\n return this.ensureReady();\n }\n\n /** The stored connection failure, when `ready` rejected. */\n get connectionError(): SqaiError | null {\n return this.readyError;\n }\n\n ensureReady(): Promise<SqaiSource[]> {\n if (!this.readyPromise) {\n this.readyPromise = this.connectAll();\n this.readyPromise.catch(error => {\n this.readyError =\n error instanceof SqaiError\n ? error\n : new SqaiError(\n \"source_connection_failed\",\n `Connecting the configured sources failed: ${\n error instanceof Error ? error.message : String(error)\n }`,\n );\n });\n }\n return this.readyPromise;\n }\n\n async connect(\n source: string | Array<Record<string, unknown>> | Record<string, unknown>,\n options: { name?: string } = {},\n ): Promise<SqaiSource> {\n return this.client.connect(source, options);\n }\n\n tools(options: SqaiToolsOptions = {}): SqaiToolSet {\n return createSqaiTools(this, options);\n }\n\n private async connectAll(): Promise<SqaiSource[]> {\n for (const input of this.sourceInputs) {\n if (typeof input === \"string\" || Array.isArray(input)) {\n await this.client.connect(input);\n } else {\n await this.client.connect(input.data, input.name ? { name: input.name } : {});\n }\n }\n return this.client.listSources();\n }\n}\n\nexport function createSQAI(config: SqaiToolkitConfig = {}): SQAIToolkit {\n return new SQAIToolkit(config);\n}\n","/** The three SQAI tools for the Vercel AI SDK.\n *\n * listSources — discovery (sources, capability modules, function signatures).\n * queryData — execute one query or computation intent; never throws.\n * explainQuery — dry-run: resolve/verify a query, or validate a computation\n * against the capability contract without executing it.\n */\n\nimport { tool, type Tool } from \"ai\";\nimport {\n ContractIndex,\n SqaiError,\n currentPlatformKey,\n invocationHash,\n isReadOnlyEligible,\n lookupCapability,\n type CapabilityEntry,\n type ComputationSpec,\n type QuerySpec,\n type ResolveResponse,\n type SQAI,\n type SqaiSource,\n} from \"@thyn-ai/sqai\";\n\nimport {\n explainQueryInputSchema,\n explainQueryOutputSchema,\n listSourcesInputSchema,\n listSourcesOutputSchema,\n queryDataInputSchema,\n queryDataOutputSchema,\n type ClarificationOutput,\n type ErrorOutput,\n type ExplainQueryOutput,\n type ListSourcesInput,\n type ListSourcesOutput,\n type QueryDataInput,\n type QueryDataOutput,\n type RejectedOutput,\n} from \"./schemas.js\";\nimport { shapeComputationValue, shapeQueryResult, storeWithinCap } from \"./truncate.js\";\nimport type { SQAIToolkit } from \"./toolkit.js\";\n\nexport interface SqaiToolsOptions {\n /** Pin every query to this source (spec.source still wins when provided). */\n source?: string;\n defaultLimit?: number;\n maxExecutionRows?: number;\n maxRowsToModel?: number;\n maxCellsToModel?: number;\n maxElementsToModel?: number;\n maxBytesToModel?: number;\n maxOutputBytes?: number;\n}\n\nconst DEFAULT_OPTIONS: Required<Omit<SqaiToolsOptions, \"source\">> = {\n defaultLimit: 100,\n maxExecutionRows: 1000,\n maxRowsToModel: 25,\n maxCellsToModel: 250,\n maxElementsToModel: 500,\n maxBytesToModel: 32_000,\n maxOutputBytes: 10_000_000,\n};\n\n// ── Shared helpers ───────────────────────────────────────────────────────────\n\nfunction toErrorOutput(error: unknown): ErrorOutput {\n if (error instanceof SqaiError) {\n const nearest = error.details[\"nearest_matches\"];\n const nearestMatches =\n Array.isArray(nearest) && nearest.every(item => typeof item === \"string\")\n ? (nearest as string[])\n : undefined;\n return {\n status: \"error\",\n code: error.code,\n message: error.message,\n retryable: error.retryable,\n request_id: error.requestId,\n ...(nearestMatches ? { nearest_matches: nearestMatches } : {}),\n };\n }\n return {\n status: \"error\",\n code: \"internal_error\",\n message: error instanceof Error ? error.message : String(error),\n retryable: false,\n request_id: null,\n };\n}\n\nasync function readyError(toolkit: SQAIToolkit): Promise<SqaiError | null> {\n try {\n await toolkit.ensureReady();\n return null;\n } catch (error) {\n return error instanceof SqaiError\n ? error\n : new SqaiError(\n \"source_connection_failed\",\n `Connecting the configured sources failed: ${\n error instanceof Error ? error.message : String(error)\n }`,\n );\n }\n}\n\n/** Candidates pass through loosely typed — upstream owns the exact shape. */\nfunction passthroughCandidates(resolution: ResolveResponse): Array<Record<string, unknown>> {\n return (resolution.candidates ?? []).map(candidate => ({ ...candidate }));\n}\n\nfunction clarificationOutput(resolution: ResolveResponse): ClarificationOutput {\n const candidates = resolution.candidates ?? [];\n const names = candidates\n .slice(0, 5)\n .map(candidate => `${candidate.source}.${candidate.column}`);\n const lead = resolution.explanation?.[0] ?? \"The request is ambiguous.\";\n const question =\n names.length > 0 ? `${lead} Did you mean ${names.join(\" or \")}?` : lead;\n return {\n status: \"needs_clarification\",\n question,\n candidates: passthroughCandidates(resolution),\n explanation: resolution.explanation ?? [],\n };\n}\n\nfunction rejectedOutput(resolution: ResolveResponse): RejectedOutput {\n return {\n status: \"rejected\",\n rejection_reason: resolution.rejection_reason ?? \"rejected\",\n candidates: passthroughCandidates(resolution),\n explanation: resolution.explanation ?? [],\n };\n}\n\nfunction renderSignature(entry: CapabilityEntry): string {\n const params = entry.signature.params as Array<{ name: string; type: string; required?: boolean }>;\n const rendered = params\n .map(param => `${param.name}${param.required === false ? \"?\" : \"\"}: ${param.type}`)\n .join(\", \");\n return `${entry.name}(${rendered}) -> ${entry.signature.returns}`;\n}\n\nfunction splitCapabilityName(name: string): { module: string; functionName: string } {\n const separator = name.lastIndexOf(\".\");\n return { module: name.slice(0, separator), functionName: name.slice(separator + 1) };\n}\n\ntype QueryInputSpec = Extract<QueryDataInput, { kind: \"query\" }>[\"spec\"];\ntype ComputationInputSpec = Extract<QueryDataInput, { kind: \"computation\" }>[\"spec\"];\n\nfunction toQuerySpec(\n spec: QueryInputSpec,\n options: Required<Omit<SqaiToolsOptions, \"source\">> & { source?: string },\n): QuerySpec {\n const sourceName = spec.source ?? options.source;\n return {\n metric: spec.metric,\n ...(spec.aggregation ? { aggregation: spec.aggregation } : {}),\n ...(spec.group_by ? { group_by: spec.group_by } : {}),\n ...(spec.filter ? { filter: spec.filter } : {}),\n limit: Math.min(spec.limit ?? options.defaultLimit, options.maxExecutionRows),\n ...(spec.order ? { order: spec.order } : {}),\n ...(sourceName ? { source_name: sourceName } : {}),\n };\n}\n\nfunction toComputationSpec(spec: ComputationInputSpec): ComputationSpec {\n return {\n module: spec.module,\n function: spec.function,\n args: spec.args ?? [],\n ...(spec.kwargs ? { kwargs: spec.kwargs } : {}),\n ...(spec.bindings ? { bindings: spec.bindings } : {}),\n ...(spec.seed !== undefined ? { seed: spec.seed } : {}),\n };\n}\n\n// ── listSources internals ────────────────────────────────────────────────────\n\nconst NUMBER_OPS = [\n \"sum\",\n \"avg\",\n \"count\",\n \"min\",\n \"max\",\n \"eq\",\n \"in\",\n \"gt\",\n \"gte\",\n \"lt\",\n \"lte\",\n \"is_null\",\n \"is_not_null\",\n];\nconst FILTER_ONLY_OPS = [\"eq\", \"in\", \"is_null\", \"is_not_null\"];\n\nfunction opsForFieldType(type: string): string[] {\n if (type === \"number\") {\n return [...NUMBER_OPS];\n }\n // string / date / boolean — and unknown types get filter ops only.\n return [...FILTER_ONLY_OPS];\n}\n\nfunction describeSources(sources: SqaiSource[]) {\n return sources.map(source => {\n const typedFields =\n source.typed_fields.length > 0\n ? source.typed_fields\n : source.fields.map(name => ({ name, type: \"unknown\" }));\n return {\n name: source.name,\n fields: typedFields.map(field => ({\n name: field.name,\n type: field.type,\n ops: opsForFieldType(field.type),\n })),\n row_count: source.row_count,\n schema_revision: source.schema_revision,\n };\n });\n}\n\nfunction searchModules(client: SQAI, query: string) {\n const matches = client.searchCapabilities(query, 100);\n const byModule = new Map<\n string,\n {\n name: string;\n category: string;\n deterministic: boolean;\n function_count: number;\n sample_functions: string[];\n }\n >();\n for (const match of matches) {\n const { module, functionName } = splitCapabilityName(match.entry.name);\n let aggregate = byModule.get(module);\n if (!aggregate) {\n if (byModule.size >= 10) {\n continue;\n }\n aggregate = {\n name: module,\n category: match.entry.category,\n deterministic: true,\n function_count: 0,\n sample_functions: [],\n };\n byModule.set(module, aggregate);\n }\n aggregate.function_count += 1;\n if (aggregate.sample_functions.length < 5) {\n aggregate.sample_functions.push(functionName);\n }\n }\n return [...byModule.values()];\n}\n\nfunction moduleFunctions(client: SQAI, index: () => ContractIndex, moduleName: string) {\n const prefix = `${moduleName}.`;\n const entries = client\n .capabilities()\n .capabilities.filter(\n entry => entry.ai_sdk && isReadOnlyEligible(entry) && entry.name.startsWith(prefix),\n );\n if (entries.length === 0) {\n throw new SqaiError(\"unsupported_operation\", `Unknown capability module '${moduleName}'.`, {\n details: { module: moduleName, nearest_matches: index().nearest(moduleName) },\n });\n }\n return entries.map(entry => ({\n name: entry.name,\n signature: renderSignature(entry),\n params: (entry.signature.params as Array<{ name: string; type: string; required?: boolean }>).map(\n param => ({ name: param.name, type: param.type, required: param.required ?? true }),\n ),\n returns: entry.signature.returns,\n deterministic: entry.deterministic,\n seed_required: entry.seed_required ?? false,\n }));\n}\n\n// ── Tool factory ─────────────────────────────────────────────────────────────\n\n/** One SQAI tool: an AI-SDK tool whose execute is always present. */\nexport type SqaiTool<INPUT, OUTPUT> = Tool<INPUT, OUTPUT> & {\n execute: NonNullable<Tool<INPUT, OUTPUT>[\"execute\"]>;\n};\n\n/** Index signature keeps this assignable to the AI SDK's ToolSet, so\n * `tools: sqai.tools()` works with no cast. */\nexport interface SqaiToolSet extends Record<string, Tool> {\n listSources: SqaiTool<ListSourcesInput, ListSourcesOutput>;\n queryData: SqaiTool<QueryDataInput, QueryDataOutput>;\n explainQuery: SqaiTool<QueryDataInput, ExplainQueryOutput>;\n}\n\nexport function createSqaiTools(toolkit: SQAIToolkit, options: SqaiToolsOptions = {}): SqaiToolSet {\n const opts = { ...DEFAULT_OPTIONS, ...options };\n const client = toolkit.client;\n\n let cachedIndex: ContractIndex | null = null;\n const contractIndex = (): ContractIndex => {\n if (!cachedIndex) {\n cachedIndex = new ContractIndex(client.capabilities());\n }\n return cachedIndex;\n };\n\n const listSources = tool({\n description:\n \"Discover what SQAI can touch. No arguments: list connected data sources with exact field \" +\n \"names, types, and allowed operations — call this before queryData so specs use exact names. \" +\n \"With capabilitySearch: search the deterministic computation catalog and get matching modules. \" +\n \"With module: list that module's functions with exact signatures.\",\n inputSchema: listSourcesInputSchema,\n outputSchema: listSourcesOutputSchema,\n execute: async (input: ListSourcesInput) => {\n const notReady = await readyError(toolkit);\n if (notReady) {\n return toErrorOutput(notReady);\n }\n try {\n if (input?.capabilitySearch) {\n return { modules: searchModules(client, input.capabilitySearch) };\n }\n if (input?.module) {\n return { functions: moduleFunctions(client, contractIndex, input.module) };\n }\n return { sources: describeSources(client.listSources()) };\n } catch (error) {\n return toErrorOutput(error);\n }\n },\n });\n\n const queryData = tool({\n description:\n \"Execute one deterministic, read-only SQAI request. Use kind 'query' for tabular questions \" +\n \"(aggregations, grouping, filtering) over connected sources — call listSources first for exact \" +\n \"field names. Use kind 'computation' for math (statistics, financial, vector/matrix, simulation) \" +\n \"over arrays: never paste large data into args — use bindings to pull columns from connected \" +\n \"sources. Simulation modules require a seed. Large results are truncated for context; the full \" +\n \"result stays retrievable via result_id.\",\n inputSchema: queryDataInputSchema,\n outputSchema: queryDataOutputSchema,\n execute: async (input: QueryDataInput) => {\n const notReady = await readyError(toolkit);\n if (notReady) {\n return toErrorOutput(notReady);\n }\n try {\n if (input.kind === \"query\") {\n return await runQuery(input.spec);\n }\n return await runComputation(input.spec);\n } catch (error) {\n return toErrorOutput(error);\n }\n },\n });\n\n const explainQuery = tool({\n description:\n \"Dry-run a queryData request without executing it. kind 'query': resolve and verify the plan \" +\n \"(resolved_plan, plan steps, plan_hash, confidence, validated). kind 'computation': check the \" +\n \"capability exists and get its exact signature, a preview invocation_hash, and whether a seed \" +\n \"is required. Use this to debug clarifications and rejections before running queryData.\",\n inputSchema: explainQueryInputSchema,\n outputSchema: explainQueryOutputSchema,\n execute: async (input: QueryDataInput) => {\n const notReady = await readyError(toolkit);\n if (notReady) {\n return toErrorOutput(notReady);\n }\n try {\n if (input.kind === \"query\") {\n return await explainQueryPlan(input.spec);\n }\n return explainComputation(input.spec);\n } catch (error) {\n return toErrorOutput(error);\n }\n },\n });\n\n async function runQuery(spec: QueryInputSpec) {\n const querySpec = toQuerySpec(spec, opts);\n const outcome = await client.ask(querySpec);\n if (outcome.status === \"needs_clarification\") {\n return clarificationOutput(outcome.resolution);\n }\n if (outcome.status === \"rejected\") {\n return rejectedOutput(outcome.resolution);\n }\n const { data, resolution } = outcome;\n const shaped = shapeQueryResult(data.result, opts);\n const sourceName = data.resolved_source || resolution.resolved_source || null;\n const resultId = storeWithinCap(data.result, opts.maxOutputBytes, value =>\n client.storeResult(value, sourceName ? [sourceName] : []),\n );\n return {\n status: \"ok\" as const,\n kind: \"query\" as const,\n data: shaped.data,\n total_rows: shaped.total_rows,\n returned_rows: shaped.returned_rows,\n truncated: shaped.truncated,\n ...(resultId ? { result_id: resultId } : {}),\n plan_hash: data.plan_hash ?? resolution.plan_hash ?? null,\n schema_revision: data.schema_revision ?? resolution.schema_revision ?? null,\n source_name: sourceName,\n intent_signature: resolution.intent_signature ?? null,\n deterministic_scope: data.deterministic_scope ?? resolution.deterministic_scope ?? null,\n decision_path: data.decision_path ?? resolution.decision_path ?? null,\n validated: data.validated ?? resolution.validated ?? null,\n request_id: data.request_id ?? resolution.request_id ?? null,\n explanation: data.explanation ?? resolution.explanation ?? [],\n };\n }\n\n async function runComputation(spec: ComputationInputSpec) {\n const result = await client.compute(toComputationSpec(spec));\n const shaped = shapeComputationValue(result.value, opts);\n const sourceIds = result.provenance?.bindings.map(binding => binding.source_name) ?? [];\n const resultId = storeWithinCap(result.value, opts.maxOutputBytes, value =>\n client.storeResult(value, sourceIds),\n );\n return {\n status: \"ok\" as const,\n kind: \"computation\" as const,\n value: shaped.value,\n value_type: result.value_type,\n ...(shaped.preview !== undefined ? { preview: shaped.preview } : {}),\n ...(shaped.element_count !== undefined ? { element_count: shaped.element_count } : {}),\n truncated: shaped.truncated,\n ...(resultId ? { result_id: resultId } : {}),\n invocation_hash: result.invocation_hash,\n computation_hash: result.computation_hash,\n contract_hash: result.contract_hash,\n determinism: result.determinism,\n ...(result.provenance ? { provenance: result.provenance } : {}),\n latency_ms: result.latency_ms,\n request_id: result.request_id,\n };\n }\n\n async function explainQueryPlan(spec: QueryInputSpec) {\n const resolution = await client.resolve(toQuerySpec(spec, opts));\n if (resolution.clarification_required) {\n return clarificationOutput(resolution);\n }\n if (resolution.rejection_reason || !resolution.resolved_plan) {\n return rejectedOutput(resolution);\n }\n const verification = await client.verify(resolution);\n return {\n status: \"ok\" as const,\n kind: \"query\" as const,\n resolved_plan: resolution.resolved_plan as unknown as Record<string, unknown>,\n plan: resolution.plan ?? [],\n plan_hash: resolution.plan_hash ?? null,\n confidence: resolution.confidence,\n validated: verification.valid === true,\n };\n }\n\n /** Validate a computation without executing it: capability existence and\n * signature from the contract, plus a preview invocation_hash computed over\n * UNRESOLVED binding descriptors (input_hash left empty — the definitive\n * hash requires extraction, which explain never performs). */\n function explainComputation(spec: ComputationInputSpec) {\n const index = contractIndex();\n const entry = lookupCapability(index, spec.module, spec.function);\n const bindings = spec.bindings ?? [];\n const descriptors = bindings.flatMap(binding =>\n \"parameters\" in binding\n ? binding.parameters.map((parameter, position) => ({\n parameter,\n source_name: binding.source,\n fields: [binding.fields[position] ?? \"\"],\n input_hash: \"\",\n }))\n : [\n {\n parameter: binding.parameter,\n source_name: binding.source,\n fields: [binding.field],\n input_hash: \"\",\n },\n ],\n );\n const previewHash = invocationHash({\n module: spec.module,\n function: spec.function,\n args: spec.args ?? [],\n kwargs: spec.kwargs ?? {},\n resolved_bindings: descriptors,\n seed: spec.seed ?? null,\n contract_hash: index.contract.capability_contract_hash,\n execution_scope: `${currentPlatformKey()}:${client.mode}`,\n });\n return {\n status: \"ok\" as const,\n kind: \"computation\" as const,\n matched_signature: renderSignature(entry),\n invocation_hash: previewHash,\n seed_required: entry.seed_required ?? false,\n };\n }\n\n return { listSources, queryData, explainQuery };\n}\n","/** Zod v4 schemas for the SQAI AI-SDK tools.\n *\n * These schemas transport; the @thyn-ai/sqai capability contract and policy layer\n * authorize. Field names mirror @thyn-ai/sqai types verbatim (Algenta vocabulary\n * passes through untranslated). No policy key is reachable from any input\n * schema: application policy is configured in code, never by the model.\n */\n\nimport { z } from \"zod\";\nimport type { AlgentaWireValue } from \"@thyn-ai/sqai\";\n\n// ── Query plane ──────────────────────────────────────────────────────────────\n\nexport const filterConditionSchema = z.object({\n column: z.string().optional().describe(\"Exact column name to filter on.\"),\n op: z.enum([\"eq\", \"in\", \"gt\", \"gte\", \"lt\", \"lte\", \"is_null\", \"is_not_null\"]),\n value: z.union([z.string(), z.number(), z.boolean()]).optional(),\n values: z\n .array(z.union([z.string(), z.number(), z.boolean()]))\n .optional()\n .describe(\"Values for the 'in' operator.\"),\n});\n\nexport const filterSpecSchema = z.object({\n time_filter: z.string().optional().describe(\"Named time window, e.g. 'last_30_days'.\"),\n conditions: z.array(filterConditionSchema).optional(),\n});\n\nexport const querySpecSchema = z.object({\n metric: z\n .string()\n .describe(\"The measure to compute, e.g. 'revenue'. Use exact field names from listSources.\"),\n aggregation: z.enum([\"sum\", \"avg\", \"count\", \"min\", \"max\"]).optional(),\n group_by: z.string().optional().describe(\"Column to group results by.\"),\n filter: filterSpecSchema.optional(),\n limit: z.number().int().positive().optional().describe(\"Maximum rows to return.\"),\n order: z.enum([\"asc\", \"desc\"]).optional(),\n source: z\n .string()\n .optional()\n .describe(\"Source name to query (maps to source_name). Omit to let the planner pick.\"),\n});\n\n// ── Wire values (computation plane transport) ────────────────────────────────\n\n/** Tagged high-precision scalars ride the wire as {type, value}. */\nconst taggedScalarSchema = z.object({\n type: z.enum([\"decimal\", \"bigint\"]),\n value: z.string(),\n});\n\nexport const algentaWireValueSchema: z.ZodType<AlgentaWireValue> = z.lazy(() =>\n z.union([\n z.null(),\n z.boolean(),\n z.number(),\n z.string(),\n z.array(algentaWireValueSchema),\n taggedScalarSchema,\n z.record(z.string(), algentaWireValueSchema),\n ]),\n);\n\n// ── Computation plane ────────────────────────────────────────────────────────\n\nconst singleBindingSchema = z.object({\n parameter: z\n .union([z.string(), z.number()])\n .describe(\"Target parameter, by name or positional index.\"),\n source: z.string().describe(\"Connected source name to pull the column from.\"),\n field: z.string().describe(\"Column to extract.\"),\n filter: filterSpecSchema.optional(),\n});\n\nconst alignedBindingSchema = z.object({\n parameters: z\n .array(z.union([z.string(), z.number()]))\n .describe(\"Target parameters, one per field, row-aligned.\"),\n source: z.string(),\n fields: z.array(z.string()).describe(\"Columns to extract, one per parameter.\"),\n filter: filterSpecSchema.optional(),\n alignment: z.literal(\"rowwise\"),\n nullPolicy: z.enum([\"pairwise\", \"preserve\"]).optional(),\n});\n\nexport const computationBindingSchema = z.union([singleBindingSchema, alignedBindingSchema]);\n\nexport const computationSpecSchema = z.object({\n module: z.string().describe(\"Capability module, e.g. 'stats'. Discover via listSources.\"),\n function: z.string().describe(\"Function inside the module, e.g. 'median'.\"),\n args: z.array(algentaWireValueSchema).default([]).describe(\"Positional arguments.\"),\n kwargs: z.record(z.string(), algentaWireValueSchema).optional().describe(\"Named arguments.\"),\n bindings: z\n .array(computationBindingSchema)\n .optional()\n .describe(\"Pull columns from connected sources instead of pasting data inline.\"),\n seed: z\n .union([z.number(), z.string()])\n .optional()\n .describe(\"Required for simulation modules; makes runs replayable\"),\n});\n\n// ── Tool input ───────────────────────────────────────────────────────────────\n\nexport const queryDataInputSchema = z.discriminatedUnion(\"kind\", [\n z.object({\n version: z.literal(\"1\"),\n kind: z.literal(\"query\"),\n spec: querySpecSchema,\n }),\n z.object({\n version: z.literal(\"1\"),\n kind: z.literal(\"computation\"),\n spec: computationSpecSchema,\n }),\n]);\n\nexport const explainQueryInputSchema = queryDataInputSchema;\n\nexport const listSourcesInputSchema = z.object({\n capabilitySearch: z\n .string()\n .optional()\n .describe(\"Search the computation capability catalog; returns matching modules.\"),\n module: z\n .string()\n .optional()\n .describe(\"List a module's functions with exact signatures.\"),\n});\n\n// ── Tool output ──────────────────────────────────────────────────────────────\n\nconst cellSchema = z.union([z.number(), z.string(), z.boolean(), z.null()]);\n\n/** Resolver candidates pass through loosely typed — upstream owns the shape. */\nexport const candidateSchema = z.looseObject({\n source: z.string().optional(),\n column: z.string().optional(),\n role: z.string().optional(),\n confidence: z.number().optional(),\n});\n\nexport const errorOutputSchema = z.object({\n status: z.literal(\"error\"),\n code: z.string(),\n message: z.string(),\n retryable: z.boolean(),\n request_id: z.string().nullable(),\n nearest_matches: z.array(z.string()).optional(),\n});\n\nexport const clarificationOutputSchema = z.object({\n status: z.literal(\"needs_clarification\"),\n question: z.string(),\n candidates: z.array(candidateSchema),\n explanation: z.array(z.string()),\n});\n\nexport const rejectedOutputSchema = z.object({\n status: z.literal(\"rejected\"),\n rejection_reason: z.string(),\n candidates: z.array(candidateSchema),\n explanation: z.array(z.string()),\n});\n\nexport const queryOkOutputSchema = z.object({\n status: z.literal(\"ok\"),\n kind: z.literal(\"query\"),\n data: z.object({\n columns: z.array(z.string()),\n rows: z.array(z.array(cellSchema)),\n }),\n total_rows: z.number(),\n returned_rows: z.number(),\n truncated: z.boolean(),\n result_id: z.string().optional(),\n plan_hash: z.string().nullable(),\n schema_revision: z.string().nullable(),\n source_name: z.string().nullable(),\n intent_signature: z.string().nullable(),\n deterministic_scope: z.string().nullable(),\n decision_path: z.string().nullable(),\n validated: z.boolean().nullable(),\n request_id: z.string().nullable(),\n explanation: z.array(z.string()),\n});\n\nexport const determinismEnvelopeSchema = z.object({\n runtime_bundle_version: z.string(),\n runtime_bundle_sha256: z.string(),\n platform: z.string(),\n architecture: z.string(),\n kernel_build: z.string(),\n precision_mode: z.string(),\n thread_count: z.number(),\n seed: z.union([z.number(), z.string()]).optional(),\n input_hash: z.string(),\n});\n\nexport const bindingProvenanceSchema = z.object({\n source_name: z.string(),\n fields: z.array(z.string()),\n schema_revision: z.string().nullable(),\n row_count: z.number(),\n input_hash: z.string(),\n});\n\nexport const computationOkOutputSchema = z.object({\n status: z.literal(\"ok\"),\n kind: z.literal(\"computation\"),\n value: algentaWireValueSchema,\n value_type: z.string(),\n preview: algentaWireValueSchema.optional(),\n element_count: z.number().optional(),\n truncated: z.boolean(),\n result_id: z.string().optional(),\n invocation_hash: z.string(),\n computation_hash: z.string(),\n contract_hash: z.string(),\n determinism: determinismEnvelopeSchema,\n provenance: z.object({ bindings: z.array(bindingProvenanceSchema) }).optional(),\n latency_ms: z.number(),\n request_id: z.string(),\n});\n\nexport const queryDataOutputSchema = z.union([\n queryOkOutputSchema,\n computationOkOutputSchema,\n clarificationOutputSchema,\n rejectedOutputSchema,\n errorOutputSchema,\n]);\n\nexport const sourceListOutputSchema = z.object({\n sources: z.array(\n z.object({\n name: z.string(),\n fields: z.array(\n z.object({\n name: z.string(),\n type: z.string(),\n ops: z.array(z.string()),\n }),\n ),\n row_count: z.number().nullable(),\n schema_revision: z.string().nullable(),\n }),\n ),\n});\n\nexport const moduleListOutputSchema = z.object({\n modules: z.array(\n z.object({\n name: z.string(),\n category: z.string(),\n deterministic: z.boolean(),\n function_count: z.number(),\n sample_functions: z.array(z.string()),\n }),\n ),\n});\n\nexport const functionListOutputSchema = z.object({\n functions: z.array(\n z.object({\n name: z.string(),\n signature: z.string(),\n params: z.array(\n z.object({\n name: z.string(),\n type: z.string(),\n required: z.boolean(),\n }),\n ),\n returns: z.string(),\n deterministic: z.boolean(),\n seed_required: z.boolean(),\n }),\n ),\n});\n\nexport const listSourcesOutputSchema = z.union([\n sourceListOutputSchema,\n moduleListOutputSchema,\n functionListOutputSchema,\n errorOutputSchema,\n]);\n\nexport const explainQueryOkQueryOutputSchema = z.object({\n status: z.literal(\"ok\"),\n kind: z.literal(\"query\"),\n resolved_plan: z.record(z.string(), z.unknown()),\n plan: z.array(z.string()),\n plan_hash: z.string().nullable(),\n confidence: z.number(),\n validated: z.boolean(),\n});\n\nexport const explainQueryOkComputationOutputSchema = z.object({\n status: z.literal(\"ok\"),\n kind: z.literal(\"computation\"),\n matched_signature: z.string(),\n invocation_hash: z.string(),\n seed_required: z.boolean(),\n});\n\nexport const explainQueryOutputSchema = z.union([\n explainQueryOkQueryOutputSchema,\n explainQueryOkComputationOutputSchema,\n clarificationOutputSchema,\n rejectedOutputSchema,\n errorOutputSchema,\n]);\n\n// ── Inferred types ───────────────────────────────────────────────────────────\n\nexport type QueryDataInput = z.infer<typeof queryDataInputSchema>;\nexport type QueryDataOutput = z.infer<typeof queryDataOutputSchema>;\nexport type ListSourcesInput = z.infer<typeof listSourcesInputSchema>;\nexport type ListSourcesOutput = z.infer<typeof listSourcesOutputSchema>;\nexport type ExplainQueryInput = z.infer<typeof explainQueryInputSchema>;\nexport type ExplainQueryOutput = z.infer<typeof explainQueryOutputSchema>;\nexport type ErrorOutput = z.infer<typeof errorOutputSchema>;\nexport type ClarificationOutput = z.infer<typeof clarificationOutputSchema>;\nexport type RejectedOutput = z.infer<typeof rejectedOutputSchema>;\n","/** Model-context shaping: what the model sees is a truncated, well-labeled\n * projection; the full result is stored (subject to maxOutputBytes) and\n * retrievable by result_id. Truncation is always declared, never silent. */\n\nimport type { AlgentaWireValue } from \"@thyn-ai/sqai\";\n\nexport type Cell = number | string | boolean | null;\n\nexport interface ShapedQueryResult {\n data: { columns: string[]; rows: Cell[][] };\n total_rows: number;\n returned_rows: number;\n truncated: boolean;\n}\n\nexport interface QueryShapingOptions {\n maxRowsToModel: number;\n maxCellsToModel: number;\n}\n\nfunction toCell(value: unknown): Cell {\n if (value === null || value === undefined) {\n return null;\n }\n if (typeof value === \"number\" || typeof value === \"string\" || typeof value === \"boolean\") {\n return value;\n }\n return JSON.stringify(value);\n}\n\n/** Shape a query-plane result (scalar or array of row records) into a compact\n * columns/rows table. Truncation is rows-first, then whole rows are dropped\n * until the cell budget fits — a partial row is never shown. */\nexport function shapeQueryResult(result: unknown, options: QueryShapingOptions): ShapedQueryResult {\n if (!Array.isArray(result)) {\n return {\n data: { columns: [\"value\"], rows: [[toCell(result)]] },\n total_rows: 1,\n returned_rows: 1,\n truncated: false,\n };\n }\n const totalRows = result.length;\n if (totalRows === 0) {\n return { data: { columns: [], rows: [] }, total_rows: 0, returned_rows: 0, truncated: false };\n }\n\n const first = result[0];\n let columns: string[];\n let toRow: (row: unknown) => Cell[];\n if (first !== null && typeof first === \"object\" && !Array.isArray(first)) {\n columns = Object.keys(first as Record<string, unknown>);\n toRow = row => columns.map(column => toCell((row as Record<string, unknown>)[column]));\n } else {\n columns = [\"value\"];\n toRow = row => [toCell(row)];\n }\n\n // Rows first…\n let keep = Math.min(totalRows, Math.max(0, Math.floor(options.maxRowsToModel)));\n // …then cells: drop whole rows until the cell budget fits.\n const cellsPerRow = Math.max(1, columns.length);\n if (keep * cellsPerRow > options.maxCellsToModel) {\n keep = Math.max(0, Math.floor(options.maxCellsToModel / cellsPerRow));\n }\n\n return {\n data: { columns, rows: result.slice(0, keep).map(toRow) },\n total_rows: totalRows,\n returned_rows: keep,\n truncated: keep < totalRows,\n };\n}\n\nexport interface ShapedComputationValue {\n value: AlgentaWireValue;\n preview?: AlgentaWireValue;\n element_count?: number;\n truncated: boolean;\n}\n\nexport interface ComputationShapingOptions {\n maxElementsToModel: number;\n maxBytesToModel: number;\n}\n\nfunction byteLength(value: unknown): number {\n return Buffer.byteLength(JSON.stringify(value ?? null), \"utf-8\");\n}\n\n/** Shape a computation-plane value for the model context.\n *\n * Scalars pass through. Arrays/matrices surface as a `preview` of leading\n * elements (element_count = full count), halved until the byte budget fits.\n * Objects pass unless they exceed the byte budget — then the model gets only\n * the truncated flag and (from the caller) a result_id. */\nexport function shapeComputationValue(\n value: AlgentaWireValue,\n options: ComputationShapingOptions,\n): ShapedComputationValue {\n if (value === null || typeof value !== \"object\") {\n return { value, truncated: false };\n }\n\n if (Array.isArray(value)) {\n const elementCount = value.length;\n let preview = value.slice(0, Math.min(elementCount, Math.max(0, options.maxElementsToModel)));\n while (preview.length > 0 && byteLength(preview) > options.maxBytesToModel) {\n preview = preview.slice(0, Math.floor(preview.length / 2));\n }\n return {\n value: null,\n preview,\n element_count: elementCount,\n truncated: preview.length < elementCount,\n };\n }\n\n // Records and tagged scalars ({type: \"decimal\"|\"bigint\", value}).\n if (byteLength(value) <= options.maxBytesToModel) {\n return { value, truncated: false };\n }\n return { value: null, truncated: true };\n}\n\n/** Hard cap on what gets STORED: if the full value's JSON exceeds\n * maxOutputBytes, nothing is stored and there is no result_id. */\nexport function storeWithinCap(\n value: unknown,\n maxOutputBytes: number,\n store: (value: unknown) => string,\n): string | undefined {\n if (byteLength(value) > maxOutputBytes) {\n return undefined;\n }\n return store(value);\n}\n"],"mappings":"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","names":["import_sqai","module","import_sqai"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/toolkit.ts","../src/tools.ts","../src/schemas.ts","../src/truncate.ts"],"sourcesContent":["export { createSQAI, SQAIToolkit, type SqaiSourceInput, type SqaiToolkitConfig } from \"./toolkit.js\";\nexport { createSqaiTools, type SqaiToolSet, type SqaiToolsOptions } from \"./tools.js\";\nexport {\n shapeComputationValue,\n shapeQueryResult,\n storeWithinCap,\n type Cell,\n type ComputationShapingOptions,\n type QueryShapingOptions,\n type ShapedComputationValue,\n type ShapedQueryResult,\n} from \"./truncate.js\";\nexport * from \"./schemas.js\";\n\n// Substrate types agents commonly need alongside the tools.\nexport { SQAI, SqaiError } from \"@thyn-ai/sqai\";\nexport type {\n SqaiValue,\n /** @deprecated alias of SqaiValue */\n AlgentaWireValue,\n ComputationBinding,\n ComputationSpec,\n ComputeResult,\n QueryFilterCondition,\n QueryFilterSpec,\n QuerySpec,\n SqaiConfig,\n SqaiPolicy,\n SqaiSource,\n} from \"@thyn-ai/sqai\";\n","/** SQAIToolkit: an SQAI client plus declarative sources and AI-SDK tools.\n *\n * Sources connect lazily — on first `ready` access or first tool call. The\n * connection promise gets a rejection handler the moment it is created, so a\n * failed connect never surfaces as an unhandled rejection: every tool call\n * reports the stored failure as a structured error result instead. */\n\nimport { SQAI, SqaiError, type SqaiConfig, type SqaiSource } from \"@thyn-ai/sqai\";\n\nimport { createSqaiTools, type SqaiToolSet, type SqaiToolsOptions } from \"./tools.js\";\n\nexport type SqaiSourceInput =\n | string\n | Array<Record<string, unknown>>\n | { data: string | Array<Record<string, unknown>>; name?: string };\n\nexport interface SqaiToolkitConfig extends SqaiConfig {\n /** Sources to connect lazily on first tool call / `ready` access. */\n sources?: SqaiSourceInput[];\n}\n\nexport class SQAIToolkit {\n readonly client: SQAI;\n private readonly sourceInputs: SqaiSourceInput[];\n private readyPromise: Promise<SqaiSource[]> | null = null;\n private readyError: SqaiError | null = null;\n\n constructor(config: SqaiToolkitConfig = {}) {\n const { sources, ...clientConfig } = config;\n this.client = new SQAI(clientConfig);\n this.sourceInputs = sources ?? [];\n }\n\n /** Connected sources; connecting starts on first access. */\n get ready(): Promise<SqaiSource[]> {\n return this.ensureReady();\n }\n\n /** The stored connection failure, when `ready` rejected. */\n get connectionError(): SqaiError | null {\n return this.readyError;\n }\n\n ensureReady(): Promise<SqaiSource[]> {\n if (!this.readyPromise) {\n this.readyPromise = this.connectAll();\n this.readyPromise.catch(error => {\n this.readyError =\n error instanceof SqaiError\n ? error\n : new SqaiError(\n \"source_connection_failed\",\n `Connecting the configured sources failed: ${\n error instanceof Error ? error.message : String(error)\n }`,\n );\n });\n }\n return this.readyPromise;\n }\n\n async connect(\n source: string | Array<Record<string, unknown>> | Record<string, unknown>,\n options: { name?: string } = {},\n ): Promise<SqaiSource> {\n return this.client.connect(source, options);\n }\n\n tools(options: SqaiToolsOptions = {}): SqaiToolSet {\n return createSqaiTools(this, options);\n }\n\n private async connectAll(): Promise<SqaiSource[]> {\n for (const input of this.sourceInputs) {\n if (typeof input === \"string\" || Array.isArray(input)) {\n await this.client.connect(input);\n } else {\n await this.client.connect(input.data, input.name ? { name: input.name } : {});\n }\n }\n return this.client.listSources();\n }\n}\n\nexport function createSQAI(config: SqaiToolkitConfig = {}): SQAIToolkit {\n return new SQAIToolkit(config);\n}\n","/** The three SQAI tools for the Vercel AI SDK.\n *\n * listSources — discovery (sources, capability modules, function signatures).\n * queryData — execute one query or computation intent; never throws.\n * explainQuery — dry-run: resolve/verify a query, or validate a computation\n * against the capability contract without executing it.\n */\n\nimport { tool, type Tool } from \"ai\";\nimport {\n ContractIndex,\n SqaiError,\n currentPlatformKey,\n invocationHash,\n isReadOnlyEligible,\n lookupCapability,\n type CapabilityEntry,\n type ComputationSpec,\n type QuerySpec,\n type ResolveResponse,\n type SQAI,\n type SqaiSource,\n} from \"@thyn-ai/sqai\";\n\nimport {\n explainQueryInputSchema,\n explainQueryOutputSchema,\n listSourcesInputSchema,\n listSourcesOutputSchema,\n queryDataInputSchema,\n queryDataOutputSchema,\n type ClarificationOutput,\n type ErrorOutput,\n type ExplainQueryOutput,\n type ListSourcesInput,\n type ListSourcesOutput,\n type QueryDataInput,\n type QueryDataOutput,\n type RejectedOutput,\n} from \"./schemas.js\";\nimport { shapeComputationValue, shapeQueryResult, storeWithinCap } from \"./truncate.js\";\nimport type { SQAIToolkit } from \"./toolkit.js\";\n\nexport interface SqaiToolsOptions {\n /** Pin every query to this source (spec.source still wins when provided). */\n source?: string;\n defaultLimit?: number;\n maxExecutionRows?: number;\n maxRowsToModel?: number;\n maxCellsToModel?: number;\n maxElementsToModel?: number;\n maxBytesToModel?: number;\n maxOutputBytes?: number;\n}\n\nconst DEFAULT_OPTIONS: Required<Omit<SqaiToolsOptions, \"source\">> = {\n defaultLimit: 100,\n maxExecutionRows: 1000,\n maxRowsToModel: 25,\n maxCellsToModel: 250,\n maxElementsToModel: 500,\n maxBytesToModel: 32_000,\n maxOutputBytes: 10_000_000,\n};\n\n// ── Shared helpers ───────────────────────────────────────────────────────────\n\nfunction toErrorOutput(error: unknown): ErrorOutput {\n if (error instanceof SqaiError) {\n const nearest = error.details[\"nearest_matches\"];\n const nearestMatches =\n Array.isArray(nearest) && nearest.every(item => typeof item === \"string\")\n ? (nearest as string[])\n : undefined;\n return {\n status: \"error\",\n code: error.code,\n message: error.message,\n retryable: error.retryable,\n request_id: error.requestId,\n ...(nearestMatches ? { nearest_matches: nearestMatches } : {}),\n };\n }\n return {\n status: \"error\",\n code: \"internal_error\",\n message: error instanceof Error ? error.message : String(error),\n retryable: false,\n request_id: null,\n };\n}\n\nasync function readyError(toolkit: SQAIToolkit): Promise<SqaiError | null> {\n try {\n await toolkit.ensureReady();\n return null;\n } catch (error) {\n return error instanceof SqaiError\n ? error\n : new SqaiError(\n \"source_connection_failed\",\n `Connecting the configured sources failed: ${\n error instanceof Error ? error.message : String(error)\n }`,\n );\n }\n}\n\n/** Candidates pass through loosely typed — upstream owns the exact shape. */\nfunction passthroughCandidates(resolution: ResolveResponse): Array<Record<string, unknown>> {\n return (resolution.candidates ?? []).map(candidate => ({ ...candidate }));\n}\n\nfunction clarificationOutput(resolution: ResolveResponse): ClarificationOutput {\n const candidates = resolution.candidates ?? [];\n const names = candidates\n .slice(0, 5)\n .map(candidate => `${candidate.source}.${candidate.column}`);\n const lead = resolution.explanation?.[0] ?? \"The request is ambiguous.\";\n const question =\n names.length > 0 ? `${lead} Did you mean ${names.join(\" or \")}?` : lead;\n return {\n status: \"needs_clarification\",\n question,\n candidates: passthroughCandidates(resolution),\n explanation: resolution.explanation ?? [],\n };\n}\n\nfunction rejectedOutput(resolution: ResolveResponse): RejectedOutput {\n return {\n status: \"rejected\",\n rejection_reason: resolution.rejection_reason ?? \"rejected\",\n candidates: passthroughCandidates(resolution),\n explanation: resolution.explanation ?? [],\n };\n}\n\nfunction renderSignature(entry: CapabilityEntry): string {\n const params = entry.signature.params as Array<{ name: string; type: string; required?: boolean }>;\n const rendered = params\n .map(param => `${param.name}${param.required === false ? \"?\" : \"\"}: ${param.type}`)\n .join(\", \");\n return `${entry.name}(${rendered}) -> ${entry.signature.returns}`;\n}\n\nfunction splitCapabilityName(name: string): { module: string; functionName: string } {\n const separator = name.lastIndexOf(\".\");\n return { module: name.slice(0, separator), functionName: name.slice(separator + 1) };\n}\n\ntype QueryInputSpec = Extract<QueryDataInput, { kind: \"query\" }>[\"spec\"];\ntype ComputationInputSpec = Extract<QueryDataInput, { kind: \"computation\" }>[\"spec\"];\n\nfunction toQuerySpec(\n spec: QueryInputSpec,\n options: Required<Omit<SqaiToolsOptions, \"source\">> & { source?: string },\n): QuerySpec {\n const sourceName = spec.source ?? options.source;\n return {\n metric: spec.metric,\n ...(spec.aggregation ? { aggregation: spec.aggregation } : {}),\n ...(spec.group_by ? { group_by: spec.group_by } : {}),\n ...(spec.filter ? { filter: spec.filter } : {}),\n limit: Math.min(spec.limit ?? options.defaultLimit, options.maxExecutionRows),\n ...(spec.order ? { order: spec.order } : {}),\n ...(sourceName ? { source_name: sourceName } : {}),\n };\n}\n\nfunction toComputationSpec(spec: ComputationInputSpec): ComputationSpec {\n return {\n module: spec.module,\n function: spec.function,\n args: spec.args ?? [],\n ...(spec.kwargs ? { kwargs: spec.kwargs } : {}),\n ...(spec.bindings ? { bindings: spec.bindings } : {}),\n ...(spec.seed !== undefined ? { seed: spec.seed } : {}),\n };\n}\n\n// ── listSources internals ────────────────────────────────────────────────────\n\nconst NUMBER_OPS = [\n \"sum\",\n \"avg\",\n \"count\",\n \"min\",\n \"max\",\n \"eq\",\n \"in\",\n \"gt\",\n \"gte\",\n \"lt\",\n \"lte\",\n \"is_null\",\n \"is_not_null\",\n];\nconst FILTER_ONLY_OPS = [\"eq\", \"in\", \"is_null\", \"is_not_null\"];\n\nfunction opsForFieldType(type: string): string[] {\n if (type === \"number\") {\n return [...NUMBER_OPS];\n }\n // string / date / boolean — and unknown types get filter ops only.\n return [...FILTER_ONLY_OPS];\n}\n\nfunction describeSources(sources: SqaiSource[]) {\n return sources.map(source => {\n const typedFields =\n source.typed_fields.length > 0\n ? source.typed_fields\n : source.fields.map(name => ({ name, type: \"unknown\" }));\n return {\n name: source.name,\n fields: typedFields.map(field => ({\n name: field.name,\n type: field.type,\n ops: opsForFieldType(field.type),\n })),\n row_count: source.row_count,\n schema_revision: source.schema_revision,\n };\n });\n}\n\nfunction searchModules(client: SQAI, query: string) {\n const matches = client.searchCapabilities(query, 100);\n const byModule = new Map<\n string,\n {\n name: string;\n category: string;\n deterministic: boolean;\n function_count: number;\n sample_functions: string[];\n }\n >();\n for (const match of matches) {\n const { module, functionName } = splitCapabilityName(match.entry.name);\n let aggregate = byModule.get(module);\n if (!aggregate) {\n if (byModule.size >= 10) {\n continue;\n }\n aggregate = {\n name: module,\n category: match.entry.category,\n deterministic: true,\n function_count: 0,\n sample_functions: [],\n };\n byModule.set(module, aggregate);\n }\n aggregate.function_count += 1;\n if (aggregate.sample_functions.length < 5) {\n aggregate.sample_functions.push(functionName);\n }\n }\n return [...byModule.values()];\n}\n\nfunction moduleFunctions(client: SQAI, index: () => ContractIndex, moduleName: string) {\n const prefix = `${moduleName}.`;\n const entries = client\n .capabilities()\n .capabilities.filter(\n entry => entry.ai_sdk && isReadOnlyEligible(entry) && entry.name.startsWith(prefix),\n );\n if (entries.length === 0) {\n throw new SqaiError(\"unsupported_operation\", `Unknown capability module '${moduleName}'.`, {\n details: { module: moduleName, nearest_matches: index().nearest(moduleName) },\n });\n }\n return entries.map(entry => ({\n name: entry.name,\n signature: renderSignature(entry),\n params: (entry.signature.params as Array<{ name: string; type: string; required?: boolean }>).map(\n param => ({ name: param.name, type: param.type, required: param.required ?? true }),\n ),\n returns: entry.signature.returns,\n deterministic: entry.deterministic,\n seed_required: entry.seed_required ?? false,\n }));\n}\n\n// ── Tool factory ─────────────────────────────────────────────────────────────\n\n/** One SQAI tool: an AI-SDK tool whose execute is always present. */\nexport type SqaiTool<INPUT, OUTPUT> = Tool<INPUT, OUTPUT> & {\n execute: NonNullable<Tool<INPUT, OUTPUT>[\"execute\"]>;\n};\n\n/** Index signature keeps this assignable to the AI SDK's ToolSet, so\n * `tools: sqai.tools()` works with no cast. */\nexport interface SqaiToolSet extends Record<string, Tool> {\n listSources: SqaiTool<ListSourcesInput, ListSourcesOutput>;\n queryData: SqaiTool<QueryDataInput, QueryDataOutput>;\n explainQuery: SqaiTool<QueryDataInput, ExplainQueryOutput>;\n}\n\nexport function createSqaiTools(toolkit: SQAIToolkit, options: SqaiToolsOptions = {}): SqaiToolSet {\n const opts = { ...DEFAULT_OPTIONS, ...options };\n const client = toolkit.client;\n\n let cachedIndex: ContractIndex | null = null;\n const contractIndex = (): ContractIndex => {\n if (!cachedIndex) {\n cachedIndex = new ContractIndex(client.capabilities());\n }\n return cachedIndex;\n };\n\n const listSources = tool({\n description:\n \"Discover what SQAI can touch. No arguments: list connected data sources with exact field \" +\n \"names, types, and allowed operations — call this before queryData so specs use exact names. \" +\n \"With capabilitySearch: search the deterministic computation catalog and get matching modules. \" +\n \"With module: list that module's functions with exact signatures.\",\n inputSchema: listSourcesInputSchema,\n outputSchema: listSourcesOutputSchema,\n execute: async (input: ListSourcesInput) => {\n const notReady = await readyError(toolkit);\n if (notReady) {\n return toErrorOutput(notReady);\n }\n try {\n if (input?.capabilitySearch) {\n return { modules: searchModules(client, input.capabilitySearch) };\n }\n if (input?.module) {\n return { functions: moduleFunctions(client, contractIndex, input.module) };\n }\n return { sources: describeSources(client.listSources()) };\n } catch (error) {\n return toErrorOutput(error);\n }\n },\n });\n\n const queryData = tool({\n description:\n \"Execute one deterministic, read-only SQAI request. Use kind 'query' for tabular questions \" +\n \"(aggregations, grouping, filtering) over connected sources — call listSources first for exact \" +\n \"field names. Use kind 'computation' for math (statistics, financial, vector/matrix, simulation) \" +\n \"over arrays: never paste large data into args — use bindings to pull columns from connected \" +\n \"sources. Simulation modules require a seed. Large results are truncated for context; the full \" +\n \"result stays retrievable via result_id.\",\n inputSchema: queryDataInputSchema,\n outputSchema: queryDataOutputSchema,\n execute: async (input: QueryDataInput) => {\n const notReady = await readyError(toolkit);\n if (notReady) {\n return toErrorOutput(notReady);\n }\n try {\n if (input.kind === \"query\") {\n return await runQuery(input.spec);\n }\n return await runComputation(input.spec);\n } catch (error) {\n return toErrorOutput(error);\n }\n },\n });\n\n const explainQuery = tool({\n description:\n \"Dry-run a queryData request without executing it. kind 'query': resolve and verify the plan \" +\n \"(resolved_plan, plan steps, plan_hash, confidence, validated). kind 'computation': check the \" +\n \"capability exists and get its exact signature, a preview invocation_hash, and whether a seed \" +\n \"is required. Use this to debug clarifications and rejections before running queryData.\",\n inputSchema: explainQueryInputSchema,\n outputSchema: explainQueryOutputSchema,\n execute: async (input: QueryDataInput) => {\n const notReady = await readyError(toolkit);\n if (notReady) {\n return toErrorOutput(notReady);\n }\n try {\n if (input.kind === \"query\") {\n return await explainQueryPlan(input.spec);\n }\n return explainComputation(input.spec);\n } catch (error) {\n return toErrorOutput(error);\n }\n },\n });\n\n async function runQuery(spec: QueryInputSpec) {\n const querySpec = toQuerySpec(spec, opts);\n const outcome = await client.ask(querySpec);\n if (outcome.status === \"needs_clarification\") {\n return clarificationOutput(outcome.resolution);\n }\n if (outcome.status === \"rejected\") {\n return rejectedOutput(outcome.resolution);\n }\n const { data, resolution } = outcome;\n const shaped = shapeQueryResult(data.result, opts);\n const sourceName = data.resolved_source || resolution.resolved_source || null;\n const resultId = storeWithinCap(data.result, opts.maxOutputBytes, value =>\n client.storeResult(value, sourceName ? [sourceName] : []),\n );\n return {\n status: \"ok\" as const,\n kind: \"query\" as const,\n data: shaped.data,\n total_rows: shaped.total_rows,\n returned_rows: shaped.returned_rows,\n truncated: shaped.truncated,\n ...(resultId ? { result_id: resultId } : {}),\n plan_hash: data.plan_hash ?? resolution.plan_hash ?? null,\n schema_revision: data.schema_revision ?? resolution.schema_revision ?? null,\n source_name: sourceName,\n intent_signature: resolution.intent_signature ?? null,\n deterministic_scope: data.deterministic_scope ?? resolution.deterministic_scope ?? null,\n decision_path: data.decision_path ?? resolution.decision_path ?? null,\n validated: data.validated ?? resolution.validated ?? null,\n request_id: data.request_id ?? resolution.request_id ?? null,\n explanation: data.explanation ?? resolution.explanation ?? [],\n };\n }\n\n async function runComputation(spec: ComputationInputSpec) {\n const result = await client.compute(toComputationSpec(spec));\n const shaped = shapeComputationValue(result.value, opts);\n const sourceIds = result.provenance?.bindings.map(binding => binding.source_name) ?? [];\n const resultId = storeWithinCap(result.value, opts.maxOutputBytes, value =>\n client.storeResult(value, sourceIds),\n );\n return {\n status: \"ok\" as const,\n kind: \"computation\" as const,\n value: shaped.value,\n value_type: result.value_type,\n ...(shaped.preview !== undefined ? { preview: shaped.preview } : {}),\n ...(shaped.element_count !== undefined ? { element_count: shaped.element_count } : {}),\n truncated: shaped.truncated,\n ...(resultId ? { result_id: resultId } : {}),\n invocation_hash: result.invocation_hash,\n computation_hash: result.computation_hash,\n contract_hash: result.contract_hash,\n determinism: result.determinism,\n ...(result.provenance ? { provenance: result.provenance } : {}),\n latency_ms: result.latency_ms,\n request_id: result.request_id,\n };\n }\n\n async function explainQueryPlan(spec: QueryInputSpec) {\n const resolution = await client.resolve(toQuerySpec(spec, opts));\n if (resolution.clarification_required) {\n return clarificationOutput(resolution);\n }\n if (resolution.rejection_reason || !resolution.resolved_plan) {\n return rejectedOutput(resolution);\n }\n const verification = await client.verify(resolution);\n return {\n status: \"ok\" as const,\n kind: \"query\" as const,\n resolved_plan: resolution.resolved_plan as unknown as Record<string, unknown>,\n plan: resolution.plan ?? [],\n plan_hash: resolution.plan_hash ?? null,\n confidence: resolution.confidence,\n validated: verification.valid === true,\n };\n }\n\n /** Validate a computation without executing it: capability existence and\n * signature from the contract, plus a preview invocation_hash computed over\n * UNRESOLVED binding descriptors (input_hash left empty — the definitive\n * hash requires extraction, which explain never performs). */\n function explainComputation(spec: ComputationInputSpec) {\n const index = contractIndex();\n const entry = lookupCapability(index, spec.module, spec.function);\n const bindings = spec.bindings ?? [];\n const descriptors = bindings.flatMap(binding =>\n \"parameters\" in binding\n ? binding.parameters.map((parameter, position) => ({\n parameter,\n source_name: binding.source,\n fields: [binding.fields[position] ?? \"\"],\n input_hash: \"\",\n }))\n : [\n {\n parameter: binding.parameter,\n source_name: binding.source,\n fields: [binding.field],\n input_hash: \"\",\n },\n ],\n );\n const previewHash = invocationHash({\n module: spec.module,\n function: spec.function,\n args: spec.args ?? [],\n kwargs: spec.kwargs ?? {},\n resolved_bindings: descriptors,\n seed: spec.seed ?? null,\n contract_hash: index.contract.capability_contract_hash,\n execution_scope: `${currentPlatformKey()}:${client.mode}`,\n });\n return {\n status: \"ok\" as const,\n kind: \"computation\" as const,\n matched_signature: renderSignature(entry),\n invocation_hash: previewHash,\n seed_required: entry.seed_required ?? false,\n };\n }\n\n return { listSources, queryData, explainQuery };\n}\n","/** Zod v4 schemas for the SQAI AI-SDK tools.\n *\n * These schemas transport; the @thyn-ai/sqai capability contract and policy layer\n * authorize. Field names mirror @thyn-ai/sqai types verbatim (Algenta vocabulary\n * passes through untranslated). No policy key is reachable from any input\n * schema: application policy is configured in code, never by the model.\n */\n\nimport { z } from \"zod\";\nimport type { SqaiValue } from \"@thyn-ai/sqai\";\n\n// ── Query plane ──────────────────────────────────────────────────────────────\n\nexport const filterConditionSchema = z.object({\n column: z.string().optional().describe(\"Exact column name to filter on.\"),\n op: z.enum([\"eq\", \"in\", \"gt\", \"gte\", \"lt\", \"lte\", \"is_null\", \"is_not_null\"]),\n value: z.union([z.string(), z.number(), z.boolean()]).optional(),\n values: z\n .array(z.union([z.string(), z.number(), z.boolean()]))\n .optional()\n .describe(\"Values for the 'in' operator.\"),\n});\n\nexport const filterSpecSchema = z.object({\n time_filter: z.string().optional().describe(\"Named time window, e.g. 'last_30_days'.\"),\n conditions: z.array(filterConditionSchema).optional(),\n});\n\nexport const querySpecSchema = z.object({\n metric: z\n .string()\n .describe(\"The measure to compute, e.g. 'revenue'. Use exact field names from listSources.\"),\n aggregation: z.enum([\"sum\", \"avg\", \"count\", \"min\", \"max\"]).optional(),\n group_by: z.string().optional().describe(\"Column to group results by.\"),\n filter: filterSpecSchema.optional(),\n limit: z.number().int().positive().optional().describe(\"Maximum rows to return.\"),\n order: z.enum([\"asc\", \"desc\"]).optional(),\n source: z\n .string()\n .optional()\n .describe(\"Source name to query (maps to source_name). Omit to let the planner pick.\"),\n});\n\n// ── Wire values (computation plane transport) ────────────────────────────────\n\n/** Tagged high-precision scalars ride the wire as {type, value}. */\nconst taggedScalarSchema = z.object({\n type: z.enum([\"decimal\", \"bigint\"]),\n value: z.string(),\n});\n\nexport const sqaiValueSchema: z.ZodType<SqaiValue> = z.lazy(() =>\n z.union([\n z.null(),\n z.boolean(),\n z.number(),\n z.string(),\n z.array(sqaiValueSchema),\n taggedScalarSchema,\n z.record(z.string(), sqaiValueSchema),\n ]),\n);\n\n/** @deprecated Renamed to {@link sqaiValueSchema}. Kept as a non-breaking alias. */\nexport const algentaWireValueSchema = sqaiValueSchema;\n\n// ── Computation plane ────────────────────────────────────────────────────────\n\nconst singleBindingSchema = z.object({\n parameter: z\n .union([z.string(), z.number()])\n .describe(\"Target parameter, by name or positional index.\"),\n source: z.string().describe(\"Connected source name to pull the column from.\"),\n field: z.string().describe(\"Column to extract.\"),\n filter: filterSpecSchema.optional(),\n});\n\nconst alignedBindingSchema = z.object({\n parameters: z\n .array(z.union([z.string(), z.number()]))\n .describe(\"Target parameters, one per field, row-aligned.\"),\n source: z.string(),\n fields: z.array(z.string()).describe(\"Columns to extract, one per parameter.\"),\n filter: filterSpecSchema.optional(),\n alignment: z.literal(\"rowwise\"),\n nullPolicy: z.enum([\"pairwise\", \"preserve\"]).optional(),\n});\n\nexport const computationBindingSchema = z.union([singleBindingSchema, alignedBindingSchema]);\n\nexport const computationSpecSchema = z.object({\n module: z.string().describe(\"Capability module, e.g. 'stats'. Discover via listSources.\"),\n function: z.string().describe(\"Function inside the module, e.g. 'median'.\"),\n args: z.array(sqaiValueSchema).default([]).describe(\"Positional arguments.\"),\n kwargs: z.record(z.string(), sqaiValueSchema).optional().describe(\"Named arguments.\"),\n bindings: z\n .array(computationBindingSchema)\n .optional()\n .describe(\"Pull columns from connected sources instead of pasting data inline.\"),\n seed: z\n .union([z.number(), z.string()])\n .optional()\n .describe(\"Required for simulation modules; makes runs replayable\"),\n});\n\n// ── Tool input ───────────────────────────────────────────────────────────────\n\nexport const queryDataInputSchema = z.discriminatedUnion(\"kind\", [\n z.object({\n version: z.literal(\"1\"),\n kind: z.literal(\"query\"),\n spec: querySpecSchema,\n }),\n z.object({\n version: z.literal(\"1\"),\n kind: z.literal(\"computation\"),\n spec: computationSpecSchema,\n }),\n]);\n\nexport const explainQueryInputSchema = queryDataInputSchema;\n\nexport const listSourcesInputSchema = z.object({\n capabilitySearch: z\n .string()\n .optional()\n .describe(\"Search the computation capability catalog; returns matching modules.\"),\n module: z\n .string()\n .optional()\n .describe(\"List a module's functions with exact signatures.\"),\n});\n\n// ── Tool output ──────────────────────────────────────────────────────────────\n\nconst cellSchema = z.union([z.number(), z.string(), z.boolean(), z.null()]);\n\n/** Resolver candidates pass through loosely typed — upstream owns the shape. */\nexport const candidateSchema = z.looseObject({\n source: z.string().optional(),\n column: z.string().optional(),\n role: z.string().optional(),\n confidence: z.number().optional(),\n});\n\nexport const errorOutputSchema = z.object({\n status: z.literal(\"error\"),\n code: z.string(),\n message: z.string(),\n retryable: z.boolean(),\n request_id: z.string().nullable(),\n nearest_matches: z.array(z.string()).optional(),\n});\n\nexport const clarificationOutputSchema = z.object({\n status: z.literal(\"needs_clarification\"),\n question: z.string(),\n candidates: z.array(candidateSchema),\n explanation: z.array(z.string()),\n});\n\nexport const rejectedOutputSchema = z.object({\n status: z.literal(\"rejected\"),\n rejection_reason: z.string(),\n candidates: z.array(candidateSchema),\n explanation: z.array(z.string()),\n});\n\nexport const queryOkOutputSchema = z.object({\n status: z.literal(\"ok\"),\n kind: z.literal(\"query\"),\n data: z.object({\n columns: z.array(z.string()),\n rows: z.array(z.array(cellSchema)),\n }),\n total_rows: z.number(),\n returned_rows: z.number(),\n truncated: z.boolean(),\n result_id: z.string().optional(),\n plan_hash: z.string().nullable(),\n schema_revision: z.string().nullable(),\n source_name: z.string().nullable(),\n intent_signature: z.string().nullable(),\n deterministic_scope: z.string().nullable(),\n decision_path: z.string().nullable(),\n validated: z.boolean().nullable(),\n request_id: z.string().nullable(),\n explanation: z.array(z.string()),\n});\n\nexport const determinismEnvelopeSchema = z.object({\n runtime_bundle_version: z.string(),\n runtime_bundle_sha256: z.string(),\n platform: z.string(),\n architecture: z.string(),\n kernel_build: z.string(),\n precision_mode: z.string(),\n thread_count: z.number(),\n seed: z.union([z.number(), z.string()]).optional(),\n input_hash: z.string(),\n});\n\nexport const bindingProvenanceSchema = z.object({\n source_name: z.string(),\n fields: z.array(z.string()),\n schema_revision: z.string().nullable(),\n row_count: z.number(),\n input_hash: z.string(),\n});\n\nexport const computationOkOutputSchema = z.object({\n status: z.literal(\"ok\"),\n kind: z.literal(\"computation\"),\n value: sqaiValueSchema,\n value_type: z.string(),\n preview: sqaiValueSchema.optional(),\n element_count: z.number().optional(),\n truncated: z.boolean(),\n result_id: z.string().optional(),\n invocation_hash: z.string(),\n computation_hash: z.string(),\n contract_hash: z.string(),\n determinism: determinismEnvelopeSchema,\n provenance: z.object({ bindings: z.array(bindingProvenanceSchema) }).optional(),\n latency_ms: z.number(),\n request_id: z.string(),\n});\n\nexport const queryDataOutputSchema = z.union([\n queryOkOutputSchema,\n computationOkOutputSchema,\n clarificationOutputSchema,\n rejectedOutputSchema,\n errorOutputSchema,\n]);\n\nexport const sourceListOutputSchema = z.object({\n sources: z.array(\n z.object({\n name: z.string(),\n fields: z.array(\n z.object({\n name: z.string(),\n type: z.string(),\n ops: z.array(z.string()),\n }),\n ),\n row_count: z.number().nullable(),\n schema_revision: z.string().nullable(),\n }),\n ),\n});\n\nexport const moduleListOutputSchema = z.object({\n modules: z.array(\n z.object({\n name: z.string(),\n category: z.string(),\n deterministic: z.boolean(),\n function_count: z.number(),\n sample_functions: z.array(z.string()),\n }),\n ),\n});\n\nexport const functionListOutputSchema = z.object({\n functions: z.array(\n z.object({\n name: z.string(),\n signature: z.string(),\n params: z.array(\n z.object({\n name: z.string(),\n type: z.string(),\n required: z.boolean(),\n }),\n ),\n returns: z.string(),\n deterministic: z.boolean(),\n seed_required: z.boolean(),\n }),\n ),\n});\n\nexport const listSourcesOutputSchema = z.union([\n sourceListOutputSchema,\n moduleListOutputSchema,\n functionListOutputSchema,\n errorOutputSchema,\n]);\n\nexport const explainQueryOkQueryOutputSchema = z.object({\n status: z.literal(\"ok\"),\n kind: z.literal(\"query\"),\n resolved_plan: z.record(z.string(), z.unknown()),\n plan: z.array(z.string()),\n plan_hash: z.string().nullable(),\n confidence: z.number(),\n validated: z.boolean(),\n});\n\nexport const explainQueryOkComputationOutputSchema = z.object({\n status: z.literal(\"ok\"),\n kind: z.literal(\"computation\"),\n matched_signature: z.string(),\n invocation_hash: z.string(),\n seed_required: z.boolean(),\n});\n\nexport const explainQueryOutputSchema = z.union([\n explainQueryOkQueryOutputSchema,\n explainQueryOkComputationOutputSchema,\n clarificationOutputSchema,\n rejectedOutputSchema,\n errorOutputSchema,\n]);\n\n// ── Inferred types ───────────────────────────────────────────────────────────\n\nexport type QueryDataInput = z.infer<typeof queryDataInputSchema>;\nexport type QueryDataOutput = z.infer<typeof queryDataOutputSchema>;\nexport type ListSourcesInput = z.infer<typeof listSourcesInputSchema>;\nexport type ListSourcesOutput = z.infer<typeof listSourcesOutputSchema>;\nexport type ExplainQueryInput = z.infer<typeof explainQueryInputSchema>;\nexport type ExplainQueryOutput = z.infer<typeof explainQueryOutputSchema>;\nexport type ErrorOutput = z.infer<typeof errorOutputSchema>;\nexport type ClarificationOutput = z.infer<typeof clarificationOutputSchema>;\nexport type RejectedOutput = z.infer<typeof rejectedOutputSchema>;\n","/** Model-context shaping: what the model sees is a truncated, well-labeled\n * projection; the full result is stored (subject to maxOutputBytes) and\n * retrievable by result_id. Truncation is always declared, never silent. */\n\nimport type { SqaiValue } from \"@thyn-ai/sqai\";\n\nexport type Cell = number | string | boolean | null;\n\nexport interface ShapedQueryResult {\n data: { columns: string[]; rows: Cell[][] };\n total_rows: number;\n returned_rows: number;\n truncated: boolean;\n}\n\nexport interface QueryShapingOptions {\n maxRowsToModel: number;\n maxCellsToModel: number;\n}\n\nfunction toCell(value: unknown): Cell {\n if (value === null || value === undefined) {\n return null;\n }\n if (typeof value === \"number\" || typeof value === \"string\" || typeof value === \"boolean\") {\n return value;\n }\n return JSON.stringify(value);\n}\n\n/** Shape a query-plane result (scalar or array of row records) into a compact\n * columns/rows table. Truncation is rows-first, then whole rows are dropped\n * until the cell budget fits — a partial row is never shown. */\nexport function shapeQueryResult(result: unknown, options: QueryShapingOptions): ShapedQueryResult {\n if (!Array.isArray(result)) {\n return {\n data: { columns: [\"value\"], rows: [[toCell(result)]] },\n total_rows: 1,\n returned_rows: 1,\n truncated: false,\n };\n }\n const totalRows = result.length;\n if (totalRows === 0) {\n return { data: { columns: [], rows: [] }, total_rows: 0, returned_rows: 0, truncated: false };\n }\n\n const first = result[0];\n let columns: string[];\n let toRow: (row: unknown) => Cell[];\n if (first !== null && typeof first === \"object\" && !Array.isArray(first)) {\n columns = Object.keys(first as Record<string, unknown>);\n toRow = row => columns.map(column => toCell((row as Record<string, unknown>)[column]));\n } else {\n columns = [\"value\"];\n toRow = row => [toCell(row)];\n }\n\n // Rows first…\n let keep = Math.min(totalRows, Math.max(0, Math.floor(options.maxRowsToModel)));\n // …then cells: drop whole rows until the cell budget fits.\n const cellsPerRow = Math.max(1, columns.length);\n if (keep * cellsPerRow > options.maxCellsToModel) {\n keep = Math.max(0, Math.floor(options.maxCellsToModel / cellsPerRow));\n }\n\n return {\n data: { columns, rows: result.slice(0, keep).map(toRow) },\n total_rows: totalRows,\n returned_rows: keep,\n truncated: keep < totalRows,\n };\n}\n\nexport interface ShapedComputationValue {\n value: SqaiValue;\n preview?: SqaiValue;\n element_count?: number;\n truncated: boolean;\n}\n\nexport interface ComputationShapingOptions {\n maxElementsToModel: number;\n maxBytesToModel: number;\n}\n\nfunction byteLength(value: unknown): number {\n return Buffer.byteLength(JSON.stringify(value ?? null), \"utf-8\");\n}\n\n/** Shape a computation-plane value for the model context.\n *\n * Scalars pass through. Arrays/matrices surface as a `preview` of leading\n * elements (element_count = full count), halved until the byte budget fits.\n * Objects pass unless they exceed the byte budget — then the model gets only\n * the truncated flag and (from the caller) a result_id. */\nexport function shapeComputationValue(\n value: SqaiValue,\n options: ComputationShapingOptions,\n): ShapedComputationValue {\n if (value === null || typeof value !== \"object\") {\n return { value, truncated: false };\n }\n\n if (Array.isArray(value)) {\n const elementCount = value.length;\n let preview = value.slice(0, Math.min(elementCount, Math.max(0, options.maxElementsToModel)));\n while (preview.length > 0 && byteLength(preview) > options.maxBytesToModel) {\n preview = preview.slice(0, Math.floor(preview.length / 2));\n }\n return {\n value: null,\n preview,\n element_count: elementCount,\n truncated: preview.length < elementCount,\n };\n }\n\n // Records and tagged scalars ({type: \"decimal\"|\"bigint\", value}).\n if (byteLength(value) <= options.maxBytesToModel) {\n return { value, truncated: false };\n }\n return { value: null, truncated: true };\n}\n\n/** Hard cap on what gets STORED: if the full value's JSON exceeds\n * maxOutputBytes, nothing is stored and there is no result_id. */\nexport function storeWithinCap(\n value: unknown,\n maxOutputBytes: number,\n store: (value: unknown) => string,\n): string | undefined {\n if (byteLength(value) > maxOutputBytes) {\n return undefined;\n }\n return store(value);\n}\n"],"mappings":"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","names":["import_sqai","module","import_sqai"]}
package/dist/index.d.cts CHANGED
@@ -1,5 +1,5 @@
1
- import { AlgentaWireValue, SQAI, SqaiConfig, SqaiSource, SqaiError } from '@thyn-ai/sqai';
2
- export { AlgentaWireValue, ComputationBinding, ComputationSpec, ComputeResult, QueryFilterCondition, QueryFilterSpec, QuerySpec, SQAI, SqaiConfig, SqaiError, SqaiPolicy, SqaiSource } from '@thyn-ai/sqai';
1
+ import { SqaiValue, SQAI, SqaiConfig, SqaiSource, SqaiError } from '@thyn-ai/sqai';
2
+ export { AlgentaWireValue, ComputationBinding, ComputationSpec, ComputeResult, QueryFilterCondition, QueryFilterSpec, QuerySpec, SQAI, SqaiConfig, SqaiError, SqaiPolicy, SqaiSource, SqaiValue } from '@thyn-ai/sqai';
3
3
  import { Tool } from 'ai';
4
4
  import { z } from 'zod';
5
5
 
@@ -79,7 +79,9 @@ declare const querySpecSchema: z.ZodObject<{
79
79
  }>>;
80
80
  source: z.ZodOptional<z.ZodString>;
81
81
  }, z.core.$strip>;
82
- declare const algentaWireValueSchema: z.ZodType<AlgentaWireValue>;
82
+ declare const sqaiValueSchema: z.ZodType<SqaiValue>;
83
+ /** @deprecated Renamed to {@link sqaiValueSchema}. Kept as a non-breaking alias. */
84
+ declare const algentaWireValueSchema: z.ZodType<SqaiValue, unknown, z.core.$ZodTypeInternals<SqaiValue, unknown>>;
83
85
  declare const computationBindingSchema: z.ZodUnion<readonly [z.ZodObject<{
84
86
  parameter: z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>;
85
87
  source: z.ZodString;
@@ -133,8 +135,8 @@ declare const computationBindingSchema: z.ZodUnion<readonly [z.ZodObject<{
133
135
  declare const computationSpecSchema: z.ZodObject<{
134
136
  module: z.ZodString;
135
137
  function: z.ZodString;
136
- args: z.ZodDefault<z.ZodArray<z.ZodType<AlgentaWireValue, unknown, z.core.$ZodTypeInternals<AlgentaWireValue, unknown>>>>;
137
- kwargs: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodType<AlgentaWireValue, unknown, z.core.$ZodTypeInternals<AlgentaWireValue, unknown>>>>;
138
+ args: z.ZodDefault<z.ZodArray<z.ZodType<SqaiValue, unknown, z.core.$ZodTypeInternals<SqaiValue, unknown>>>>;
139
+ kwargs: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodType<SqaiValue, unknown, z.core.$ZodTypeInternals<SqaiValue, unknown>>>>;
138
140
  bindings: z.ZodOptional<z.ZodArray<z.ZodUnion<readonly [z.ZodObject<{
139
141
  parameter: z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>;
140
142
  source: z.ZodString;
@@ -231,8 +233,8 @@ declare const queryDataInputSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
231
233
  spec: z.ZodObject<{
232
234
  module: z.ZodString;
233
235
  function: z.ZodString;
234
- args: z.ZodDefault<z.ZodArray<z.ZodType<AlgentaWireValue, unknown, z.core.$ZodTypeInternals<AlgentaWireValue, unknown>>>>;
235
- kwargs: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodType<AlgentaWireValue, unknown, z.core.$ZodTypeInternals<AlgentaWireValue, unknown>>>>;
236
+ args: z.ZodDefault<z.ZodArray<z.ZodType<SqaiValue, unknown, z.core.$ZodTypeInternals<SqaiValue, unknown>>>>;
237
+ kwargs: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodType<SqaiValue, unknown, z.core.$ZodTypeInternals<SqaiValue, unknown>>>>;
236
238
  bindings: z.ZodOptional<z.ZodArray<z.ZodUnion<readonly [z.ZodObject<{
237
239
  parameter: z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>;
238
240
  source: z.ZodString;
@@ -330,8 +332,8 @@ declare const explainQueryInputSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
330
332
  spec: z.ZodObject<{
331
333
  module: z.ZodString;
332
334
  function: z.ZodString;
333
- args: z.ZodDefault<z.ZodArray<z.ZodType<AlgentaWireValue, unknown, z.core.$ZodTypeInternals<AlgentaWireValue, unknown>>>>;
334
- kwargs: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodType<AlgentaWireValue, unknown, z.core.$ZodTypeInternals<AlgentaWireValue, unknown>>>>;
335
+ args: z.ZodDefault<z.ZodArray<z.ZodType<SqaiValue, unknown, z.core.$ZodTypeInternals<SqaiValue, unknown>>>>;
336
+ kwargs: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodType<SqaiValue, unknown, z.core.$ZodTypeInternals<SqaiValue, unknown>>>>;
335
337
  bindings: z.ZodOptional<z.ZodArray<z.ZodUnion<readonly [z.ZodObject<{
336
338
  parameter: z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>;
337
339
  source: z.ZodString;
@@ -468,9 +470,9 @@ declare const bindingProvenanceSchema: z.ZodObject<{
468
470
  declare const computationOkOutputSchema: z.ZodObject<{
469
471
  status: z.ZodLiteral<"ok">;
470
472
  kind: z.ZodLiteral<"computation">;
471
- value: z.ZodType<AlgentaWireValue, unknown, z.core.$ZodTypeInternals<AlgentaWireValue, unknown>>;
473
+ value: z.ZodType<SqaiValue, unknown, z.core.$ZodTypeInternals<SqaiValue, unknown>>;
472
474
  value_type: z.ZodString;
473
- preview: z.ZodOptional<z.ZodType<AlgentaWireValue, unknown, z.core.$ZodTypeInternals<AlgentaWireValue, unknown>>>;
475
+ preview: z.ZodOptional<z.ZodType<SqaiValue, unknown, z.core.$ZodTypeInternals<SqaiValue, unknown>>>;
474
476
  element_count: z.ZodOptional<z.ZodNumber>;
475
477
  truncated: z.ZodBoolean;
476
478
  result_id: z.ZodOptional<z.ZodString>;
@@ -523,9 +525,9 @@ declare const queryDataOutputSchema: z.ZodUnion<readonly [z.ZodObject<{
523
525
  }, z.core.$strip>, z.ZodObject<{
524
526
  status: z.ZodLiteral<"ok">;
525
527
  kind: z.ZodLiteral<"computation">;
526
- value: z.ZodType<AlgentaWireValue, unknown, z.core.$ZodTypeInternals<AlgentaWireValue, unknown>>;
528
+ value: z.ZodType<SqaiValue, unknown, z.core.$ZodTypeInternals<SqaiValue, unknown>>;
527
529
  value_type: z.ZodString;
528
- preview: z.ZodOptional<z.ZodType<AlgentaWireValue, unknown, z.core.$ZodTypeInternals<AlgentaWireValue, unknown>>>;
530
+ preview: z.ZodOptional<z.ZodType<SqaiValue, unknown, z.core.$ZodTypeInternals<SqaiValue, unknown>>>;
529
531
  element_count: z.ZodOptional<z.ZodNumber>;
530
532
  truncated: z.ZodBoolean;
531
533
  result_id: z.ZodOptional<z.ZodString>;
@@ -814,8 +816,8 @@ interface QueryShapingOptions {
814
816
  * until the cell budget fits — a partial row is never shown. */
815
817
  declare function shapeQueryResult(result: unknown, options: QueryShapingOptions): ShapedQueryResult;
816
818
  interface ShapedComputationValue {
817
- value: AlgentaWireValue;
818
- preview?: AlgentaWireValue;
819
+ value: SqaiValue;
820
+ preview?: SqaiValue;
819
821
  element_count?: number;
820
822
  truncated: boolean;
821
823
  }
@@ -829,9 +831,9 @@ interface ComputationShapingOptions {
829
831
  * elements (element_count = full count), halved until the byte budget fits.
830
832
  * Objects pass unless they exceed the byte budget — then the model gets only
831
833
  * the truncated flag and (from the caller) a result_id. */
832
- declare function shapeComputationValue(value: AlgentaWireValue, options: ComputationShapingOptions): ShapedComputationValue;
834
+ declare function shapeComputationValue(value: SqaiValue, options: ComputationShapingOptions): ShapedComputationValue;
833
835
  /** Hard cap on what gets STORED: if the full value's JSON exceeds
834
836
  * maxOutputBytes, nothing is stored and there is no result_id. */
835
837
  declare function storeWithinCap(value: unknown, maxOutputBytes: number, store: (value: unknown) => string): string | undefined;
836
838
 
837
- export { type Cell, type ClarificationOutput, type ComputationShapingOptions, type ErrorOutput, type ExplainQueryInput, type ExplainQueryOutput, type ListSourcesInput, type ListSourcesOutput, type QueryDataInput, type QueryDataOutput, type QueryShapingOptions, type RejectedOutput, SQAIToolkit, type ShapedComputationValue, type ShapedQueryResult, type SqaiSourceInput, type SqaiToolSet, type SqaiToolkitConfig, type SqaiToolsOptions, algentaWireValueSchema, bindingProvenanceSchema, candidateSchema, clarificationOutputSchema, computationBindingSchema, computationOkOutputSchema, computationSpecSchema, createSQAI, createSqaiTools, determinismEnvelopeSchema, errorOutputSchema, explainQueryInputSchema, explainQueryOkComputationOutputSchema, explainQueryOkQueryOutputSchema, explainQueryOutputSchema, filterConditionSchema, filterSpecSchema, functionListOutputSchema, listSourcesInputSchema, listSourcesOutputSchema, moduleListOutputSchema, queryDataInputSchema, queryDataOutputSchema, queryOkOutputSchema, querySpecSchema, rejectedOutputSchema, shapeComputationValue, shapeQueryResult, sourceListOutputSchema, storeWithinCap };
839
+ export { type Cell, type ClarificationOutput, type ComputationShapingOptions, type ErrorOutput, type ExplainQueryInput, type ExplainQueryOutput, type ListSourcesInput, type ListSourcesOutput, type QueryDataInput, type QueryDataOutput, type QueryShapingOptions, type RejectedOutput, SQAIToolkit, type ShapedComputationValue, type ShapedQueryResult, type SqaiSourceInput, type SqaiToolSet, type SqaiToolkitConfig, type SqaiToolsOptions, algentaWireValueSchema, bindingProvenanceSchema, candidateSchema, clarificationOutputSchema, computationBindingSchema, computationOkOutputSchema, computationSpecSchema, createSQAI, createSqaiTools, determinismEnvelopeSchema, errorOutputSchema, explainQueryInputSchema, explainQueryOkComputationOutputSchema, explainQueryOkQueryOutputSchema, explainQueryOutputSchema, filterConditionSchema, filterSpecSchema, functionListOutputSchema, listSourcesInputSchema, listSourcesOutputSchema, moduleListOutputSchema, queryDataInputSchema, queryDataOutputSchema, queryOkOutputSchema, querySpecSchema, rejectedOutputSchema, shapeComputationValue, shapeQueryResult, sourceListOutputSchema, sqaiValueSchema, storeWithinCap };
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
- import { AlgentaWireValue, SQAI, SqaiConfig, SqaiSource, SqaiError } from '@thyn-ai/sqai';
2
- export { AlgentaWireValue, ComputationBinding, ComputationSpec, ComputeResult, QueryFilterCondition, QueryFilterSpec, QuerySpec, SQAI, SqaiConfig, SqaiError, SqaiPolicy, SqaiSource } from '@thyn-ai/sqai';
1
+ import { SqaiValue, SQAI, SqaiConfig, SqaiSource, SqaiError } from '@thyn-ai/sqai';
2
+ export { AlgentaWireValue, ComputationBinding, ComputationSpec, ComputeResult, QueryFilterCondition, QueryFilterSpec, QuerySpec, SQAI, SqaiConfig, SqaiError, SqaiPolicy, SqaiSource, SqaiValue } from '@thyn-ai/sqai';
3
3
  import { Tool } from 'ai';
4
4
  import { z } from 'zod';
5
5
 
@@ -79,7 +79,9 @@ declare const querySpecSchema: z.ZodObject<{
79
79
  }>>;
80
80
  source: z.ZodOptional<z.ZodString>;
81
81
  }, z.core.$strip>;
82
- declare const algentaWireValueSchema: z.ZodType<AlgentaWireValue>;
82
+ declare const sqaiValueSchema: z.ZodType<SqaiValue>;
83
+ /** @deprecated Renamed to {@link sqaiValueSchema}. Kept as a non-breaking alias. */
84
+ declare const algentaWireValueSchema: z.ZodType<SqaiValue, unknown, z.core.$ZodTypeInternals<SqaiValue, unknown>>;
83
85
  declare const computationBindingSchema: z.ZodUnion<readonly [z.ZodObject<{
84
86
  parameter: z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>;
85
87
  source: z.ZodString;
@@ -133,8 +135,8 @@ declare const computationBindingSchema: z.ZodUnion<readonly [z.ZodObject<{
133
135
  declare const computationSpecSchema: z.ZodObject<{
134
136
  module: z.ZodString;
135
137
  function: z.ZodString;
136
- args: z.ZodDefault<z.ZodArray<z.ZodType<AlgentaWireValue, unknown, z.core.$ZodTypeInternals<AlgentaWireValue, unknown>>>>;
137
- kwargs: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodType<AlgentaWireValue, unknown, z.core.$ZodTypeInternals<AlgentaWireValue, unknown>>>>;
138
+ args: z.ZodDefault<z.ZodArray<z.ZodType<SqaiValue, unknown, z.core.$ZodTypeInternals<SqaiValue, unknown>>>>;
139
+ kwargs: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodType<SqaiValue, unknown, z.core.$ZodTypeInternals<SqaiValue, unknown>>>>;
138
140
  bindings: z.ZodOptional<z.ZodArray<z.ZodUnion<readonly [z.ZodObject<{
139
141
  parameter: z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>;
140
142
  source: z.ZodString;
@@ -231,8 +233,8 @@ declare const queryDataInputSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
231
233
  spec: z.ZodObject<{
232
234
  module: z.ZodString;
233
235
  function: z.ZodString;
234
- args: z.ZodDefault<z.ZodArray<z.ZodType<AlgentaWireValue, unknown, z.core.$ZodTypeInternals<AlgentaWireValue, unknown>>>>;
235
- kwargs: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodType<AlgentaWireValue, unknown, z.core.$ZodTypeInternals<AlgentaWireValue, unknown>>>>;
236
+ args: z.ZodDefault<z.ZodArray<z.ZodType<SqaiValue, unknown, z.core.$ZodTypeInternals<SqaiValue, unknown>>>>;
237
+ kwargs: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodType<SqaiValue, unknown, z.core.$ZodTypeInternals<SqaiValue, unknown>>>>;
236
238
  bindings: z.ZodOptional<z.ZodArray<z.ZodUnion<readonly [z.ZodObject<{
237
239
  parameter: z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>;
238
240
  source: z.ZodString;
@@ -330,8 +332,8 @@ declare const explainQueryInputSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
330
332
  spec: z.ZodObject<{
331
333
  module: z.ZodString;
332
334
  function: z.ZodString;
333
- args: z.ZodDefault<z.ZodArray<z.ZodType<AlgentaWireValue, unknown, z.core.$ZodTypeInternals<AlgentaWireValue, unknown>>>>;
334
- kwargs: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodType<AlgentaWireValue, unknown, z.core.$ZodTypeInternals<AlgentaWireValue, unknown>>>>;
335
+ args: z.ZodDefault<z.ZodArray<z.ZodType<SqaiValue, unknown, z.core.$ZodTypeInternals<SqaiValue, unknown>>>>;
336
+ kwargs: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodType<SqaiValue, unknown, z.core.$ZodTypeInternals<SqaiValue, unknown>>>>;
335
337
  bindings: z.ZodOptional<z.ZodArray<z.ZodUnion<readonly [z.ZodObject<{
336
338
  parameter: z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>;
337
339
  source: z.ZodString;
@@ -468,9 +470,9 @@ declare const bindingProvenanceSchema: z.ZodObject<{
468
470
  declare const computationOkOutputSchema: z.ZodObject<{
469
471
  status: z.ZodLiteral<"ok">;
470
472
  kind: z.ZodLiteral<"computation">;
471
- value: z.ZodType<AlgentaWireValue, unknown, z.core.$ZodTypeInternals<AlgentaWireValue, unknown>>;
473
+ value: z.ZodType<SqaiValue, unknown, z.core.$ZodTypeInternals<SqaiValue, unknown>>;
472
474
  value_type: z.ZodString;
473
- preview: z.ZodOptional<z.ZodType<AlgentaWireValue, unknown, z.core.$ZodTypeInternals<AlgentaWireValue, unknown>>>;
475
+ preview: z.ZodOptional<z.ZodType<SqaiValue, unknown, z.core.$ZodTypeInternals<SqaiValue, unknown>>>;
474
476
  element_count: z.ZodOptional<z.ZodNumber>;
475
477
  truncated: z.ZodBoolean;
476
478
  result_id: z.ZodOptional<z.ZodString>;
@@ -523,9 +525,9 @@ declare const queryDataOutputSchema: z.ZodUnion<readonly [z.ZodObject<{
523
525
  }, z.core.$strip>, z.ZodObject<{
524
526
  status: z.ZodLiteral<"ok">;
525
527
  kind: z.ZodLiteral<"computation">;
526
- value: z.ZodType<AlgentaWireValue, unknown, z.core.$ZodTypeInternals<AlgentaWireValue, unknown>>;
528
+ value: z.ZodType<SqaiValue, unknown, z.core.$ZodTypeInternals<SqaiValue, unknown>>;
527
529
  value_type: z.ZodString;
528
- preview: z.ZodOptional<z.ZodType<AlgentaWireValue, unknown, z.core.$ZodTypeInternals<AlgentaWireValue, unknown>>>;
530
+ preview: z.ZodOptional<z.ZodType<SqaiValue, unknown, z.core.$ZodTypeInternals<SqaiValue, unknown>>>;
529
531
  element_count: z.ZodOptional<z.ZodNumber>;
530
532
  truncated: z.ZodBoolean;
531
533
  result_id: z.ZodOptional<z.ZodString>;
@@ -814,8 +816,8 @@ interface QueryShapingOptions {
814
816
  * until the cell budget fits — a partial row is never shown. */
815
817
  declare function shapeQueryResult(result: unknown, options: QueryShapingOptions): ShapedQueryResult;
816
818
  interface ShapedComputationValue {
817
- value: AlgentaWireValue;
818
- preview?: AlgentaWireValue;
819
+ value: SqaiValue;
820
+ preview?: SqaiValue;
819
821
  element_count?: number;
820
822
  truncated: boolean;
821
823
  }
@@ -829,9 +831,9 @@ interface ComputationShapingOptions {
829
831
  * elements (element_count = full count), halved until the byte budget fits.
830
832
  * Objects pass unless they exceed the byte budget — then the model gets only
831
833
  * the truncated flag and (from the caller) a result_id. */
832
- declare function shapeComputationValue(value: AlgentaWireValue, options: ComputationShapingOptions): ShapedComputationValue;
834
+ declare function shapeComputationValue(value: SqaiValue, options: ComputationShapingOptions): ShapedComputationValue;
833
835
  /** Hard cap on what gets STORED: if the full value's JSON exceeds
834
836
  * maxOutputBytes, nothing is stored and there is no result_id. */
835
837
  declare function storeWithinCap(value: unknown, maxOutputBytes: number, store: (value: unknown) => string): string | undefined;
836
838
 
837
- export { type Cell, type ClarificationOutput, type ComputationShapingOptions, type ErrorOutput, type ExplainQueryInput, type ExplainQueryOutput, type ListSourcesInput, type ListSourcesOutput, type QueryDataInput, type QueryDataOutput, type QueryShapingOptions, type RejectedOutput, SQAIToolkit, type ShapedComputationValue, type ShapedQueryResult, type SqaiSourceInput, type SqaiToolSet, type SqaiToolkitConfig, type SqaiToolsOptions, algentaWireValueSchema, bindingProvenanceSchema, candidateSchema, clarificationOutputSchema, computationBindingSchema, computationOkOutputSchema, computationSpecSchema, createSQAI, createSqaiTools, determinismEnvelopeSchema, errorOutputSchema, explainQueryInputSchema, explainQueryOkComputationOutputSchema, explainQueryOkQueryOutputSchema, explainQueryOutputSchema, filterConditionSchema, filterSpecSchema, functionListOutputSchema, listSourcesInputSchema, listSourcesOutputSchema, moduleListOutputSchema, queryDataInputSchema, queryDataOutputSchema, queryOkOutputSchema, querySpecSchema, rejectedOutputSchema, shapeComputationValue, shapeQueryResult, sourceListOutputSchema, storeWithinCap };
839
+ export { type Cell, type ClarificationOutput, type ComputationShapingOptions, type ErrorOutput, type ExplainQueryInput, type ExplainQueryOutput, type ListSourcesInput, type ListSourcesOutput, type QueryDataInput, type QueryDataOutput, type QueryShapingOptions, type RejectedOutput, SQAIToolkit, type ShapedComputationValue, type ShapedQueryResult, type SqaiSourceInput, type SqaiToolSet, type SqaiToolkitConfig, type SqaiToolsOptions, algentaWireValueSchema, bindingProvenanceSchema, candidateSchema, clarificationOutputSchema, computationBindingSchema, computationOkOutputSchema, computationSpecSchema, createSQAI, createSqaiTools, determinismEnvelopeSchema, errorOutputSchema, explainQueryInputSchema, explainQueryOkComputationOutputSchema, explainQueryOkQueryOutputSchema, explainQueryOutputSchema, filterConditionSchema, filterSpecSchema, functionListOutputSchema, listSourcesInputSchema, listSourcesOutputSchema, moduleListOutputSchema, queryDataInputSchema, queryDataOutputSchema, queryOkOutputSchema, querySpecSchema, rejectedOutputSchema, shapeComputationValue, shapeQueryResult, sourceListOutputSchema, sqaiValueSchema, storeWithinCap };
package/dist/index.js CHANGED
@@ -37,17 +37,18 @@ var taggedScalarSchema = z.object({
37
37
  type: z.enum(["decimal", "bigint"]),
38
38
  value: z.string()
39
39
  });
40
- var algentaWireValueSchema = z.lazy(
40
+ var sqaiValueSchema = z.lazy(
41
41
  () => z.union([
42
42
  z.null(),
43
43
  z.boolean(),
44
44
  z.number(),
45
45
  z.string(),
46
- z.array(algentaWireValueSchema),
46
+ z.array(sqaiValueSchema),
47
47
  taggedScalarSchema,
48
- z.record(z.string(), algentaWireValueSchema)
48
+ z.record(z.string(), sqaiValueSchema)
49
49
  ])
50
50
  );
51
+ var algentaWireValueSchema = sqaiValueSchema;
51
52
  var singleBindingSchema = z.object({
52
53
  parameter: z.union([z.string(), z.number()]).describe("Target parameter, by name or positional index."),
53
54
  source: z.string().describe("Connected source name to pull the column from."),
@@ -66,8 +67,8 @@ var computationBindingSchema = z.union([singleBindingSchema, alignedBindingSchem
66
67
  var computationSpecSchema = z.object({
67
68
  module: z.string().describe("Capability module, e.g. 'stats'. Discover via listSources."),
68
69
  function: z.string().describe("Function inside the module, e.g. 'median'."),
69
- args: z.array(algentaWireValueSchema).default([]).describe("Positional arguments."),
70
- kwargs: z.record(z.string(), algentaWireValueSchema).optional().describe("Named arguments."),
70
+ args: z.array(sqaiValueSchema).default([]).describe("Positional arguments."),
71
+ kwargs: z.record(z.string(), sqaiValueSchema).optional().describe("Named arguments."),
71
72
  bindings: z.array(computationBindingSchema).optional().describe("Pull columns from connected sources instead of pasting data inline."),
72
73
  seed: z.union([z.number(), z.string()]).optional().describe("Required for simulation modules; makes runs replayable")
73
74
  });
@@ -157,9 +158,9 @@ var bindingProvenanceSchema = z.object({
157
158
  var computationOkOutputSchema = z.object({
158
159
  status: z.literal("ok"),
159
160
  kind: z.literal("computation"),
160
- value: algentaWireValueSchema,
161
+ value: sqaiValueSchema,
161
162
  value_type: z.string(),
162
- preview: algentaWireValueSchema.optional(),
163
+ preview: sqaiValueSchema.optional(),
163
164
  element_count: z.number().optional(),
164
165
  truncated: z.boolean(),
165
166
  result_id: z.string().optional(),
@@ -789,6 +790,7 @@ export {
789
790
  shapeComputationValue,
790
791
  shapeQueryResult,
791
792
  sourceListOutputSchema,
793
+ sqaiValueSchema,
792
794
  storeWithinCap
793
795
  };
794
796
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/toolkit.ts","../src/tools.ts","../src/schemas.ts","../src/truncate.ts","../src/index.ts"],"sourcesContent":["/** SQAIToolkit: an SQAI client plus declarative sources and AI-SDK tools.\n *\n * Sources connect lazily — on first `ready` access or first tool call. The\n * connection promise gets a rejection handler the moment it is created, so a\n * failed connect never surfaces as an unhandled rejection: every tool call\n * reports the stored failure as a structured error result instead. */\n\nimport { SQAI, SqaiError, type SqaiConfig, type SqaiSource } from \"@thyn-ai/sqai\";\n\nimport { createSqaiTools, type SqaiToolSet, type SqaiToolsOptions } from \"./tools.js\";\n\nexport type SqaiSourceInput =\n | string\n | Array<Record<string, unknown>>\n | { data: string | Array<Record<string, unknown>>; name?: string };\n\nexport interface SqaiToolkitConfig extends SqaiConfig {\n /** Sources to connect lazily on first tool call / `ready` access. */\n sources?: SqaiSourceInput[];\n}\n\nexport class SQAIToolkit {\n readonly client: SQAI;\n private readonly sourceInputs: SqaiSourceInput[];\n private readyPromise: Promise<SqaiSource[]> | null = null;\n private readyError: SqaiError | null = null;\n\n constructor(config: SqaiToolkitConfig = {}) {\n const { sources, ...clientConfig } = config;\n this.client = new SQAI(clientConfig);\n this.sourceInputs = sources ?? [];\n }\n\n /** Connected sources; connecting starts on first access. */\n get ready(): Promise<SqaiSource[]> {\n return this.ensureReady();\n }\n\n /** The stored connection failure, when `ready` rejected. */\n get connectionError(): SqaiError | null {\n return this.readyError;\n }\n\n ensureReady(): Promise<SqaiSource[]> {\n if (!this.readyPromise) {\n this.readyPromise = this.connectAll();\n this.readyPromise.catch(error => {\n this.readyError =\n error instanceof SqaiError\n ? error\n : new SqaiError(\n \"source_connection_failed\",\n `Connecting the configured sources failed: ${\n error instanceof Error ? error.message : String(error)\n }`,\n );\n });\n }\n return this.readyPromise;\n }\n\n async connect(\n source: string | Array<Record<string, unknown>> | Record<string, unknown>,\n options: { name?: string } = {},\n ): Promise<SqaiSource> {\n return this.client.connect(source, options);\n }\n\n tools(options: SqaiToolsOptions = {}): SqaiToolSet {\n return createSqaiTools(this, options);\n }\n\n private async connectAll(): Promise<SqaiSource[]> {\n for (const input of this.sourceInputs) {\n if (typeof input === \"string\" || Array.isArray(input)) {\n await this.client.connect(input);\n } else {\n await this.client.connect(input.data, input.name ? { name: input.name } : {});\n }\n }\n return this.client.listSources();\n }\n}\n\nexport function createSQAI(config: SqaiToolkitConfig = {}): SQAIToolkit {\n return new SQAIToolkit(config);\n}\n","/** The three SQAI tools for the Vercel AI SDK.\n *\n * listSources — discovery (sources, capability modules, function signatures).\n * queryData — execute one query or computation intent; never throws.\n * explainQuery — dry-run: resolve/verify a query, or validate a computation\n * against the capability contract without executing it.\n */\n\nimport { tool, type Tool } from \"ai\";\nimport {\n ContractIndex,\n SqaiError,\n currentPlatformKey,\n invocationHash,\n isReadOnlyEligible,\n lookupCapability,\n type CapabilityEntry,\n type ComputationSpec,\n type QuerySpec,\n type ResolveResponse,\n type SQAI,\n type SqaiSource,\n} from \"@thyn-ai/sqai\";\n\nimport {\n explainQueryInputSchema,\n explainQueryOutputSchema,\n listSourcesInputSchema,\n listSourcesOutputSchema,\n queryDataInputSchema,\n queryDataOutputSchema,\n type ClarificationOutput,\n type ErrorOutput,\n type ExplainQueryOutput,\n type ListSourcesInput,\n type ListSourcesOutput,\n type QueryDataInput,\n type QueryDataOutput,\n type RejectedOutput,\n} from \"./schemas.js\";\nimport { shapeComputationValue, shapeQueryResult, storeWithinCap } from \"./truncate.js\";\nimport type { SQAIToolkit } from \"./toolkit.js\";\n\nexport interface SqaiToolsOptions {\n /** Pin every query to this source (spec.source still wins when provided). */\n source?: string;\n defaultLimit?: number;\n maxExecutionRows?: number;\n maxRowsToModel?: number;\n maxCellsToModel?: number;\n maxElementsToModel?: number;\n maxBytesToModel?: number;\n maxOutputBytes?: number;\n}\n\nconst DEFAULT_OPTIONS: Required<Omit<SqaiToolsOptions, \"source\">> = {\n defaultLimit: 100,\n maxExecutionRows: 1000,\n maxRowsToModel: 25,\n maxCellsToModel: 250,\n maxElementsToModel: 500,\n maxBytesToModel: 32_000,\n maxOutputBytes: 10_000_000,\n};\n\n// ── Shared helpers ───────────────────────────────────────────────────────────\n\nfunction toErrorOutput(error: unknown): ErrorOutput {\n if (error instanceof SqaiError) {\n const nearest = error.details[\"nearest_matches\"];\n const nearestMatches =\n Array.isArray(nearest) && nearest.every(item => typeof item === \"string\")\n ? (nearest as string[])\n : undefined;\n return {\n status: \"error\",\n code: error.code,\n message: error.message,\n retryable: error.retryable,\n request_id: error.requestId,\n ...(nearestMatches ? { nearest_matches: nearestMatches } : {}),\n };\n }\n return {\n status: \"error\",\n code: \"internal_error\",\n message: error instanceof Error ? error.message : String(error),\n retryable: false,\n request_id: null,\n };\n}\n\nasync function readyError(toolkit: SQAIToolkit): Promise<SqaiError | null> {\n try {\n await toolkit.ensureReady();\n return null;\n } catch (error) {\n return error instanceof SqaiError\n ? error\n : new SqaiError(\n \"source_connection_failed\",\n `Connecting the configured sources failed: ${\n error instanceof Error ? error.message : String(error)\n }`,\n );\n }\n}\n\n/** Candidates pass through loosely typed — upstream owns the exact shape. */\nfunction passthroughCandidates(resolution: ResolveResponse): Array<Record<string, unknown>> {\n return (resolution.candidates ?? []).map(candidate => ({ ...candidate }));\n}\n\nfunction clarificationOutput(resolution: ResolveResponse): ClarificationOutput {\n const candidates = resolution.candidates ?? [];\n const names = candidates\n .slice(0, 5)\n .map(candidate => `${candidate.source}.${candidate.column}`);\n const lead = resolution.explanation?.[0] ?? \"The request is ambiguous.\";\n const question =\n names.length > 0 ? `${lead} Did you mean ${names.join(\" or \")}?` : lead;\n return {\n status: \"needs_clarification\",\n question,\n candidates: passthroughCandidates(resolution),\n explanation: resolution.explanation ?? [],\n };\n}\n\nfunction rejectedOutput(resolution: ResolveResponse): RejectedOutput {\n return {\n status: \"rejected\",\n rejection_reason: resolution.rejection_reason ?? \"rejected\",\n candidates: passthroughCandidates(resolution),\n explanation: resolution.explanation ?? [],\n };\n}\n\nfunction renderSignature(entry: CapabilityEntry): string {\n const params = entry.signature.params as Array<{ name: string; type: string; required?: boolean }>;\n const rendered = params\n .map(param => `${param.name}${param.required === false ? \"?\" : \"\"}: ${param.type}`)\n .join(\", \");\n return `${entry.name}(${rendered}) -> ${entry.signature.returns}`;\n}\n\nfunction splitCapabilityName(name: string): { module: string; functionName: string } {\n const separator = name.lastIndexOf(\".\");\n return { module: name.slice(0, separator), functionName: name.slice(separator + 1) };\n}\n\ntype QueryInputSpec = Extract<QueryDataInput, { kind: \"query\" }>[\"spec\"];\ntype ComputationInputSpec = Extract<QueryDataInput, { kind: \"computation\" }>[\"spec\"];\n\nfunction toQuerySpec(\n spec: QueryInputSpec,\n options: Required<Omit<SqaiToolsOptions, \"source\">> & { source?: string },\n): QuerySpec {\n const sourceName = spec.source ?? options.source;\n return {\n metric: spec.metric,\n ...(spec.aggregation ? { aggregation: spec.aggregation } : {}),\n ...(spec.group_by ? { group_by: spec.group_by } : {}),\n ...(spec.filter ? { filter: spec.filter } : {}),\n limit: Math.min(spec.limit ?? options.defaultLimit, options.maxExecutionRows),\n ...(spec.order ? { order: spec.order } : {}),\n ...(sourceName ? { source_name: sourceName } : {}),\n };\n}\n\nfunction toComputationSpec(spec: ComputationInputSpec): ComputationSpec {\n return {\n module: spec.module,\n function: spec.function,\n args: spec.args ?? [],\n ...(spec.kwargs ? { kwargs: spec.kwargs } : {}),\n ...(spec.bindings ? { bindings: spec.bindings } : {}),\n ...(spec.seed !== undefined ? { seed: spec.seed } : {}),\n };\n}\n\n// ── listSources internals ────────────────────────────────────────────────────\n\nconst NUMBER_OPS = [\n \"sum\",\n \"avg\",\n \"count\",\n \"min\",\n \"max\",\n \"eq\",\n \"in\",\n \"gt\",\n \"gte\",\n \"lt\",\n \"lte\",\n \"is_null\",\n \"is_not_null\",\n];\nconst FILTER_ONLY_OPS = [\"eq\", \"in\", \"is_null\", \"is_not_null\"];\n\nfunction opsForFieldType(type: string): string[] {\n if (type === \"number\") {\n return [...NUMBER_OPS];\n }\n // string / date / boolean — and unknown types get filter ops only.\n return [...FILTER_ONLY_OPS];\n}\n\nfunction describeSources(sources: SqaiSource[]) {\n return sources.map(source => {\n const typedFields =\n source.typed_fields.length > 0\n ? source.typed_fields\n : source.fields.map(name => ({ name, type: \"unknown\" }));\n return {\n name: source.name,\n fields: typedFields.map(field => ({\n name: field.name,\n type: field.type,\n ops: opsForFieldType(field.type),\n })),\n row_count: source.row_count,\n schema_revision: source.schema_revision,\n };\n });\n}\n\nfunction searchModules(client: SQAI, query: string) {\n const matches = client.searchCapabilities(query, 100);\n const byModule = new Map<\n string,\n {\n name: string;\n category: string;\n deterministic: boolean;\n function_count: number;\n sample_functions: string[];\n }\n >();\n for (const match of matches) {\n const { module, functionName } = splitCapabilityName(match.entry.name);\n let aggregate = byModule.get(module);\n if (!aggregate) {\n if (byModule.size >= 10) {\n continue;\n }\n aggregate = {\n name: module,\n category: match.entry.category,\n deterministic: true,\n function_count: 0,\n sample_functions: [],\n };\n byModule.set(module, aggregate);\n }\n aggregate.function_count += 1;\n if (aggregate.sample_functions.length < 5) {\n aggregate.sample_functions.push(functionName);\n }\n }\n return [...byModule.values()];\n}\n\nfunction moduleFunctions(client: SQAI, index: () => ContractIndex, moduleName: string) {\n const prefix = `${moduleName}.`;\n const entries = client\n .capabilities()\n .capabilities.filter(\n entry => entry.ai_sdk && isReadOnlyEligible(entry) && entry.name.startsWith(prefix),\n );\n if (entries.length === 0) {\n throw new SqaiError(\"unsupported_operation\", `Unknown capability module '${moduleName}'.`, {\n details: { module: moduleName, nearest_matches: index().nearest(moduleName) },\n });\n }\n return entries.map(entry => ({\n name: entry.name,\n signature: renderSignature(entry),\n params: (entry.signature.params as Array<{ name: string; type: string; required?: boolean }>).map(\n param => ({ name: param.name, type: param.type, required: param.required ?? true }),\n ),\n returns: entry.signature.returns,\n deterministic: entry.deterministic,\n seed_required: entry.seed_required ?? false,\n }));\n}\n\n// ── Tool factory ─────────────────────────────────────────────────────────────\n\n/** One SQAI tool: an AI-SDK tool whose execute is always present. */\nexport type SqaiTool<INPUT, OUTPUT> = Tool<INPUT, OUTPUT> & {\n execute: NonNullable<Tool<INPUT, OUTPUT>[\"execute\"]>;\n};\n\n/** Index signature keeps this assignable to the AI SDK's ToolSet, so\n * `tools: sqai.tools()` works with no cast. */\nexport interface SqaiToolSet extends Record<string, Tool> {\n listSources: SqaiTool<ListSourcesInput, ListSourcesOutput>;\n queryData: SqaiTool<QueryDataInput, QueryDataOutput>;\n explainQuery: SqaiTool<QueryDataInput, ExplainQueryOutput>;\n}\n\nexport function createSqaiTools(toolkit: SQAIToolkit, options: SqaiToolsOptions = {}): SqaiToolSet {\n const opts = { ...DEFAULT_OPTIONS, ...options };\n const client = toolkit.client;\n\n let cachedIndex: ContractIndex | null = null;\n const contractIndex = (): ContractIndex => {\n if (!cachedIndex) {\n cachedIndex = new ContractIndex(client.capabilities());\n }\n return cachedIndex;\n };\n\n const listSources = tool({\n description:\n \"Discover what SQAI can touch. No arguments: list connected data sources with exact field \" +\n \"names, types, and allowed operations — call this before queryData so specs use exact names. \" +\n \"With capabilitySearch: search the deterministic computation catalog and get matching modules. \" +\n \"With module: list that module's functions with exact signatures.\",\n inputSchema: listSourcesInputSchema,\n outputSchema: listSourcesOutputSchema,\n execute: async (input: ListSourcesInput) => {\n const notReady = await readyError(toolkit);\n if (notReady) {\n return toErrorOutput(notReady);\n }\n try {\n if (input?.capabilitySearch) {\n return { modules: searchModules(client, input.capabilitySearch) };\n }\n if (input?.module) {\n return { functions: moduleFunctions(client, contractIndex, input.module) };\n }\n return { sources: describeSources(client.listSources()) };\n } catch (error) {\n return toErrorOutput(error);\n }\n },\n });\n\n const queryData = tool({\n description:\n \"Execute one deterministic, read-only SQAI request. Use kind 'query' for tabular questions \" +\n \"(aggregations, grouping, filtering) over connected sources — call listSources first for exact \" +\n \"field names. Use kind 'computation' for math (statistics, financial, vector/matrix, simulation) \" +\n \"over arrays: never paste large data into args — use bindings to pull columns from connected \" +\n \"sources. Simulation modules require a seed. Large results are truncated for context; the full \" +\n \"result stays retrievable via result_id.\",\n inputSchema: queryDataInputSchema,\n outputSchema: queryDataOutputSchema,\n execute: async (input: QueryDataInput) => {\n const notReady = await readyError(toolkit);\n if (notReady) {\n return toErrorOutput(notReady);\n }\n try {\n if (input.kind === \"query\") {\n return await runQuery(input.spec);\n }\n return await runComputation(input.spec);\n } catch (error) {\n return toErrorOutput(error);\n }\n },\n });\n\n const explainQuery = tool({\n description:\n \"Dry-run a queryData request without executing it. kind 'query': resolve and verify the plan \" +\n \"(resolved_plan, plan steps, plan_hash, confidence, validated). kind 'computation': check the \" +\n \"capability exists and get its exact signature, a preview invocation_hash, and whether a seed \" +\n \"is required. Use this to debug clarifications and rejections before running queryData.\",\n inputSchema: explainQueryInputSchema,\n outputSchema: explainQueryOutputSchema,\n execute: async (input: QueryDataInput) => {\n const notReady = await readyError(toolkit);\n if (notReady) {\n return toErrorOutput(notReady);\n }\n try {\n if (input.kind === \"query\") {\n return await explainQueryPlan(input.spec);\n }\n return explainComputation(input.spec);\n } catch (error) {\n return toErrorOutput(error);\n }\n },\n });\n\n async function runQuery(spec: QueryInputSpec) {\n const querySpec = toQuerySpec(spec, opts);\n const outcome = await client.ask(querySpec);\n if (outcome.status === \"needs_clarification\") {\n return clarificationOutput(outcome.resolution);\n }\n if (outcome.status === \"rejected\") {\n return rejectedOutput(outcome.resolution);\n }\n const { data, resolution } = outcome;\n const shaped = shapeQueryResult(data.result, opts);\n const sourceName = data.resolved_source || resolution.resolved_source || null;\n const resultId = storeWithinCap(data.result, opts.maxOutputBytes, value =>\n client.storeResult(value, sourceName ? [sourceName] : []),\n );\n return {\n status: \"ok\" as const,\n kind: \"query\" as const,\n data: shaped.data,\n total_rows: shaped.total_rows,\n returned_rows: shaped.returned_rows,\n truncated: shaped.truncated,\n ...(resultId ? { result_id: resultId } : {}),\n plan_hash: data.plan_hash ?? resolution.plan_hash ?? null,\n schema_revision: data.schema_revision ?? resolution.schema_revision ?? null,\n source_name: sourceName,\n intent_signature: resolution.intent_signature ?? null,\n deterministic_scope: data.deterministic_scope ?? resolution.deterministic_scope ?? null,\n decision_path: data.decision_path ?? resolution.decision_path ?? null,\n validated: data.validated ?? resolution.validated ?? null,\n request_id: data.request_id ?? resolution.request_id ?? null,\n explanation: data.explanation ?? resolution.explanation ?? [],\n };\n }\n\n async function runComputation(spec: ComputationInputSpec) {\n const result = await client.compute(toComputationSpec(spec));\n const shaped = shapeComputationValue(result.value, opts);\n const sourceIds = result.provenance?.bindings.map(binding => binding.source_name) ?? [];\n const resultId = storeWithinCap(result.value, opts.maxOutputBytes, value =>\n client.storeResult(value, sourceIds),\n );\n return {\n status: \"ok\" as const,\n kind: \"computation\" as const,\n value: shaped.value,\n value_type: result.value_type,\n ...(shaped.preview !== undefined ? { preview: shaped.preview } : {}),\n ...(shaped.element_count !== undefined ? { element_count: shaped.element_count } : {}),\n truncated: shaped.truncated,\n ...(resultId ? { result_id: resultId } : {}),\n invocation_hash: result.invocation_hash,\n computation_hash: result.computation_hash,\n contract_hash: result.contract_hash,\n determinism: result.determinism,\n ...(result.provenance ? { provenance: result.provenance } : {}),\n latency_ms: result.latency_ms,\n request_id: result.request_id,\n };\n }\n\n async function explainQueryPlan(spec: QueryInputSpec) {\n const resolution = await client.resolve(toQuerySpec(spec, opts));\n if (resolution.clarification_required) {\n return clarificationOutput(resolution);\n }\n if (resolution.rejection_reason || !resolution.resolved_plan) {\n return rejectedOutput(resolution);\n }\n const verification = await client.verify(resolution);\n return {\n status: \"ok\" as const,\n kind: \"query\" as const,\n resolved_plan: resolution.resolved_plan as unknown as Record<string, unknown>,\n plan: resolution.plan ?? [],\n plan_hash: resolution.plan_hash ?? null,\n confidence: resolution.confidence,\n validated: verification.valid === true,\n };\n }\n\n /** Validate a computation without executing it: capability existence and\n * signature from the contract, plus a preview invocation_hash computed over\n * UNRESOLVED binding descriptors (input_hash left empty — the definitive\n * hash requires extraction, which explain never performs). */\n function explainComputation(spec: ComputationInputSpec) {\n const index = contractIndex();\n const entry = lookupCapability(index, spec.module, spec.function);\n const bindings = spec.bindings ?? [];\n const descriptors = bindings.flatMap(binding =>\n \"parameters\" in binding\n ? binding.parameters.map((parameter, position) => ({\n parameter,\n source_name: binding.source,\n fields: [binding.fields[position] ?? \"\"],\n input_hash: \"\",\n }))\n : [\n {\n parameter: binding.parameter,\n source_name: binding.source,\n fields: [binding.field],\n input_hash: \"\",\n },\n ],\n );\n const previewHash = invocationHash({\n module: spec.module,\n function: spec.function,\n args: spec.args ?? [],\n kwargs: spec.kwargs ?? {},\n resolved_bindings: descriptors,\n seed: spec.seed ?? null,\n contract_hash: index.contract.capability_contract_hash,\n execution_scope: `${currentPlatformKey()}:${client.mode}`,\n });\n return {\n status: \"ok\" as const,\n kind: \"computation\" as const,\n matched_signature: renderSignature(entry),\n invocation_hash: previewHash,\n seed_required: entry.seed_required ?? false,\n };\n }\n\n return { listSources, queryData, explainQuery };\n}\n","/** Zod v4 schemas for the SQAI AI-SDK tools.\n *\n * These schemas transport; the @thyn-ai/sqai capability contract and policy layer\n * authorize. Field names mirror @thyn-ai/sqai types verbatim (Algenta vocabulary\n * passes through untranslated). No policy key is reachable from any input\n * schema: application policy is configured in code, never by the model.\n */\n\nimport { z } from \"zod\";\nimport type { AlgentaWireValue } from \"@thyn-ai/sqai\";\n\n// ── Query plane ──────────────────────────────────────────────────────────────\n\nexport const filterConditionSchema = z.object({\n column: z.string().optional().describe(\"Exact column name to filter on.\"),\n op: z.enum([\"eq\", \"in\", \"gt\", \"gte\", \"lt\", \"lte\", \"is_null\", \"is_not_null\"]),\n value: z.union([z.string(), z.number(), z.boolean()]).optional(),\n values: z\n .array(z.union([z.string(), z.number(), z.boolean()]))\n .optional()\n .describe(\"Values for the 'in' operator.\"),\n});\n\nexport const filterSpecSchema = z.object({\n time_filter: z.string().optional().describe(\"Named time window, e.g. 'last_30_days'.\"),\n conditions: z.array(filterConditionSchema).optional(),\n});\n\nexport const querySpecSchema = z.object({\n metric: z\n .string()\n .describe(\"The measure to compute, e.g. 'revenue'. Use exact field names from listSources.\"),\n aggregation: z.enum([\"sum\", \"avg\", \"count\", \"min\", \"max\"]).optional(),\n group_by: z.string().optional().describe(\"Column to group results by.\"),\n filter: filterSpecSchema.optional(),\n limit: z.number().int().positive().optional().describe(\"Maximum rows to return.\"),\n order: z.enum([\"asc\", \"desc\"]).optional(),\n source: z\n .string()\n .optional()\n .describe(\"Source name to query (maps to source_name). Omit to let the planner pick.\"),\n});\n\n// ── Wire values (computation plane transport) ────────────────────────────────\n\n/** Tagged high-precision scalars ride the wire as {type, value}. */\nconst taggedScalarSchema = z.object({\n type: z.enum([\"decimal\", \"bigint\"]),\n value: z.string(),\n});\n\nexport const algentaWireValueSchema: z.ZodType<AlgentaWireValue> = z.lazy(() =>\n z.union([\n z.null(),\n z.boolean(),\n z.number(),\n z.string(),\n z.array(algentaWireValueSchema),\n taggedScalarSchema,\n z.record(z.string(), algentaWireValueSchema),\n ]),\n);\n\n// ── Computation plane ────────────────────────────────────────────────────────\n\nconst singleBindingSchema = z.object({\n parameter: z\n .union([z.string(), z.number()])\n .describe(\"Target parameter, by name or positional index.\"),\n source: z.string().describe(\"Connected source name to pull the column from.\"),\n field: z.string().describe(\"Column to extract.\"),\n filter: filterSpecSchema.optional(),\n});\n\nconst alignedBindingSchema = z.object({\n parameters: z\n .array(z.union([z.string(), z.number()]))\n .describe(\"Target parameters, one per field, row-aligned.\"),\n source: z.string(),\n fields: z.array(z.string()).describe(\"Columns to extract, one per parameter.\"),\n filter: filterSpecSchema.optional(),\n alignment: z.literal(\"rowwise\"),\n nullPolicy: z.enum([\"pairwise\", \"preserve\"]).optional(),\n});\n\nexport const computationBindingSchema = z.union([singleBindingSchema, alignedBindingSchema]);\n\nexport const computationSpecSchema = z.object({\n module: z.string().describe(\"Capability module, e.g. 'stats'. Discover via listSources.\"),\n function: z.string().describe(\"Function inside the module, e.g. 'median'.\"),\n args: z.array(algentaWireValueSchema).default([]).describe(\"Positional arguments.\"),\n kwargs: z.record(z.string(), algentaWireValueSchema).optional().describe(\"Named arguments.\"),\n bindings: z\n .array(computationBindingSchema)\n .optional()\n .describe(\"Pull columns from connected sources instead of pasting data inline.\"),\n seed: z\n .union([z.number(), z.string()])\n .optional()\n .describe(\"Required for simulation modules; makes runs replayable\"),\n});\n\n// ── Tool input ───────────────────────────────────────────────────────────────\n\nexport const queryDataInputSchema = z.discriminatedUnion(\"kind\", [\n z.object({\n version: z.literal(\"1\"),\n kind: z.literal(\"query\"),\n spec: querySpecSchema,\n }),\n z.object({\n version: z.literal(\"1\"),\n kind: z.literal(\"computation\"),\n spec: computationSpecSchema,\n }),\n]);\n\nexport const explainQueryInputSchema = queryDataInputSchema;\n\nexport const listSourcesInputSchema = z.object({\n capabilitySearch: z\n .string()\n .optional()\n .describe(\"Search the computation capability catalog; returns matching modules.\"),\n module: z\n .string()\n .optional()\n .describe(\"List a module's functions with exact signatures.\"),\n});\n\n// ── Tool output ──────────────────────────────────────────────────────────────\n\nconst cellSchema = z.union([z.number(), z.string(), z.boolean(), z.null()]);\n\n/** Resolver candidates pass through loosely typed — upstream owns the shape. */\nexport const candidateSchema = z.looseObject({\n source: z.string().optional(),\n column: z.string().optional(),\n role: z.string().optional(),\n confidence: z.number().optional(),\n});\n\nexport const errorOutputSchema = z.object({\n status: z.literal(\"error\"),\n code: z.string(),\n message: z.string(),\n retryable: z.boolean(),\n request_id: z.string().nullable(),\n nearest_matches: z.array(z.string()).optional(),\n});\n\nexport const clarificationOutputSchema = z.object({\n status: z.literal(\"needs_clarification\"),\n question: z.string(),\n candidates: z.array(candidateSchema),\n explanation: z.array(z.string()),\n});\n\nexport const rejectedOutputSchema = z.object({\n status: z.literal(\"rejected\"),\n rejection_reason: z.string(),\n candidates: z.array(candidateSchema),\n explanation: z.array(z.string()),\n});\n\nexport const queryOkOutputSchema = z.object({\n status: z.literal(\"ok\"),\n kind: z.literal(\"query\"),\n data: z.object({\n columns: z.array(z.string()),\n rows: z.array(z.array(cellSchema)),\n }),\n total_rows: z.number(),\n returned_rows: z.number(),\n truncated: z.boolean(),\n result_id: z.string().optional(),\n plan_hash: z.string().nullable(),\n schema_revision: z.string().nullable(),\n source_name: z.string().nullable(),\n intent_signature: z.string().nullable(),\n deterministic_scope: z.string().nullable(),\n decision_path: z.string().nullable(),\n validated: z.boolean().nullable(),\n request_id: z.string().nullable(),\n explanation: z.array(z.string()),\n});\n\nexport const determinismEnvelopeSchema = z.object({\n runtime_bundle_version: z.string(),\n runtime_bundle_sha256: z.string(),\n platform: z.string(),\n architecture: z.string(),\n kernel_build: z.string(),\n precision_mode: z.string(),\n thread_count: z.number(),\n seed: z.union([z.number(), z.string()]).optional(),\n input_hash: z.string(),\n});\n\nexport const bindingProvenanceSchema = z.object({\n source_name: z.string(),\n fields: z.array(z.string()),\n schema_revision: z.string().nullable(),\n row_count: z.number(),\n input_hash: z.string(),\n});\n\nexport const computationOkOutputSchema = z.object({\n status: z.literal(\"ok\"),\n kind: z.literal(\"computation\"),\n value: algentaWireValueSchema,\n value_type: z.string(),\n preview: algentaWireValueSchema.optional(),\n element_count: z.number().optional(),\n truncated: z.boolean(),\n result_id: z.string().optional(),\n invocation_hash: z.string(),\n computation_hash: z.string(),\n contract_hash: z.string(),\n determinism: determinismEnvelopeSchema,\n provenance: z.object({ bindings: z.array(bindingProvenanceSchema) }).optional(),\n latency_ms: z.number(),\n request_id: z.string(),\n});\n\nexport const queryDataOutputSchema = z.union([\n queryOkOutputSchema,\n computationOkOutputSchema,\n clarificationOutputSchema,\n rejectedOutputSchema,\n errorOutputSchema,\n]);\n\nexport const sourceListOutputSchema = z.object({\n sources: z.array(\n z.object({\n name: z.string(),\n fields: z.array(\n z.object({\n name: z.string(),\n type: z.string(),\n ops: z.array(z.string()),\n }),\n ),\n row_count: z.number().nullable(),\n schema_revision: z.string().nullable(),\n }),\n ),\n});\n\nexport const moduleListOutputSchema = z.object({\n modules: z.array(\n z.object({\n name: z.string(),\n category: z.string(),\n deterministic: z.boolean(),\n function_count: z.number(),\n sample_functions: z.array(z.string()),\n }),\n ),\n});\n\nexport const functionListOutputSchema = z.object({\n functions: z.array(\n z.object({\n name: z.string(),\n signature: z.string(),\n params: z.array(\n z.object({\n name: z.string(),\n type: z.string(),\n required: z.boolean(),\n }),\n ),\n returns: z.string(),\n deterministic: z.boolean(),\n seed_required: z.boolean(),\n }),\n ),\n});\n\nexport const listSourcesOutputSchema = z.union([\n sourceListOutputSchema,\n moduleListOutputSchema,\n functionListOutputSchema,\n errorOutputSchema,\n]);\n\nexport const explainQueryOkQueryOutputSchema = z.object({\n status: z.literal(\"ok\"),\n kind: z.literal(\"query\"),\n resolved_plan: z.record(z.string(), z.unknown()),\n plan: z.array(z.string()),\n plan_hash: z.string().nullable(),\n confidence: z.number(),\n validated: z.boolean(),\n});\n\nexport const explainQueryOkComputationOutputSchema = z.object({\n status: z.literal(\"ok\"),\n kind: z.literal(\"computation\"),\n matched_signature: z.string(),\n invocation_hash: z.string(),\n seed_required: z.boolean(),\n});\n\nexport const explainQueryOutputSchema = z.union([\n explainQueryOkQueryOutputSchema,\n explainQueryOkComputationOutputSchema,\n clarificationOutputSchema,\n rejectedOutputSchema,\n errorOutputSchema,\n]);\n\n// ── Inferred types ───────────────────────────────────────────────────────────\n\nexport type QueryDataInput = z.infer<typeof queryDataInputSchema>;\nexport type QueryDataOutput = z.infer<typeof queryDataOutputSchema>;\nexport type ListSourcesInput = z.infer<typeof listSourcesInputSchema>;\nexport type ListSourcesOutput = z.infer<typeof listSourcesOutputSchema>;\nexport type ExplainQueryInput = z.infer<typeof explainQueryInputSchema>;\nexport type ExplainQueryOutput = z.infer<typeof explainQueryOutputSchema>;\nexport type ErrorOutput = z.infer<typeof errorOutputSchema>;\nexport type ClarificationOutput = z.infer<typeof clarificationOutputSchema>;\nexport type RejectedOutput = z.infer<typeof rejectedOutputSchema>;\n","/** Model-context shaping: what the model sees is a truncated, well-labeled\n * projection; the full result is stored (subject to maxOutputBytes) and\n * retrievable by result_id. Truncation is always declared, never silent. */\n\nimport type { AlgentaWireValue } from \"@thyn-ai/sqai\";\n\nexport type Cell = number | string | boolean | null;\n\nexport interface ShapedQueryResult {\n data: { columns: string[]; rows: Cell[][] };\n total_rows: number;\n returned_rows: number;\n truncated: boolean;\n}\n\nexport interface QueryShapingOptions {\n maxRowsToModel: number;\n maxCellsToModel: number;\n}\n\nfunction toCell(value: unknown): Cell {\n if (value === null || value === undefined) {\n return null;\n }\n if (typeof value === \"number\" || typeof value === \"string\" || typeof value === \"boolean\") {\n return value;\n }\n return JSON.stringify(value);\n}\n\n/** Shape a query-plane result (scalar or array of row records) into a compact\n * columns/rows table. Truncation is rows-first, then whole rows are dropped\n * until the cell budget fits — a partial row is never shown. */\nexport function shapeQueryResult(result: unknown, options: QueryShapingOptions): ShapedQueryResult {\n if (!Array.isArray(result)) {\n return {\n data: { columns: [\"value\"], rows: [[toCell(result)]] },\n total_rows: 1,\n returned_rows: 1,\n truncated: false,\n };\n }\n const totalRows = result.length;\n if (totalRows === 0) {\n return { data: { columns: [], rows: [] }, total_rows: 0, returned_rows: 0, truncated: false };\n }\n\n const first = result[0];\n let columns: string[];\n let toRow: (row: unknown) => Cell[];\n if (first !== null && typeof first === \"object\" && !Array.isArray(first)) {\n columns = Object.keys(first as Record<string, unknown>);\n toRow = row => columns.map(column => toCell((row as Record<string, unknown>)[column]));\n } else {\n columns = [\"value\"];\n toRow = row => [toCell(row)];\n }\n\n // Rows first…\n let keep = Math.min(totalRows, Math.max(0, Math.floor(options.maxRowsToModel)));\n // …then cells: drop whole rows until the cell budget fits.\n const cellsPerRow = Math.max(1, columns.length);\n if (keep * cellsPerRow > options.maxCellsToModel) {\n keep = Math.max(0, Math.floor(options.maxCellsToModel / cellsPerRow));\n }\n\n return {\n data: { columns, rows: result.slice(0, keep).map(toRow) },\n total_rows: totalRows,\n returned_rows: keep,\n truncated: keep < totalRows,\n };\n}\n\nexport interface ShapedComputationValue {\n value: AlgentaWireValue;\n preview?: AlgentaWireValue;\n element_count?: number;\n truncated: boolean;\n}\n\nexport interface ComputationShapingOptions {\n maxElementsToModel: number;\n maxBytesToModel: number;\n}\n\nfunction byteLength(value: unknown): number {\n return Buffer.byteLength(JSON.stringify(value ?? null), \"utf-8\");\n}\n\n/** Shape a computation-plane value for the model context.\n *\n * Scalars pass through. Arrays/matrices surface as a `preview` of leading\n * elements (element_count = full count), halved until the byte budget fits.\n * Objects pass unless they exceed the byte budget — then the model gets only\n * the truncated flag and (from the caller) a result_id. */\nexport function shapeComputationValue(\n value: AlgentaWireValue,\n options: ComputationShapingOptions,\n): ShapedComputationValue {\n if (value === null || typeof value !== \"object\") {\n return { value, truncated: false };\n }\n\n if (Array.isArray(value)) {\n const elementCount = value.length;\n let preview = value.slice(0, Math.min(elementCount, Math.max(0, options.maxElementsToModel)));\n while (preview.length > 0 && byteLength(preview) > options.maxBytesToModel) {\n preview = preview.slice(0, Math.floor(preview.length / 2));\n }\n return {\n value: null,\n preview,\n element_count: elementCount,\n truncated: preview.length < elementCount,\n };\n }\n\n // Records and tagged scalars ({type: \"decimal\"|\"bigint\", value}).\n if (byteLength(value) <= options.maxBytesToModel) {\n return { value, truncated: false };\n }\n return { value: null, truncated: true };\n}\n\n/** Hard cap on what gets STORED: if the full value's JSON exceeds\n * maxOutputBytes, nothing is stored and there is no result_id. */\nexport function storeWithinCap(\n value: unknown,\n maxOutputBytes: number,\n store: (value: unknown) => string,\n): string | undefined {\n if (byteLength(value) > maxOutputBytes) {\n return undefined;\n }\n return store(value);\n}\n","export { createSQAI, SQAIToolkit, type SqaiSourceInput, type SqaiToolkitConfig } from \"./toolkit.js\";\nexport { createSqaiTools, type SqaiToolSet, type SqaiToolsOptions } from \"./tools.js\";\nexport {\n shapeComputationValue,\n shapeQueryResult,\n storeWithinCap,\n type Cell,\n type ComputationShapingOptions,\n type QueryShapingOptions,\n type ShapedComputationValue,\n type ShapedQueryResult,\n} from \"./truncate.js\";\nexport * from \"./schemas.js\";\n\n// Substrate types agents commonly need alongside the tools.\nexport { SQAI, SqaiError } from \"@thyn-ai/sqai\";\nexport type {\n AlgentaWireValue,\n ComputationBinding,\n ComputationSpec,\n ComputeResult,\n QueryFilterCondition,\n QueryFilterSpec,\n QuerySpec,\n SqaiConfig,\n SqaiPolicy,\n SqaiSource,\n} from \"@thyn-ai/sqai\";\n"],"mappings":"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","names":["SqaiError","SqaiError","SQAI","SqaiError"]}
1
+ {"version":3,"sources":["../src/toolkit.ts","../src/tools.ts","../src/schemas.ts","../src/truncate.ts","../src/index.ts"],"sourcesContent":["/** SQAIToolkit: an SQAI client plus declarative sources and AI-SDK tools.\n *\n * Sources connect lazily — on first `ready` access or first tool call. The\n * connection promise gets a rejection handler the moment it is created, so a\n * failed connect never surfaces as an unhandled rejection: every tool call\n * reports the stored failure as a structured error result instead. */\n\nimport { SQAI, SqaiError, type SqaiConfig, type SqaiSource } from \"@thyn-ai/sqai\";\n\nimport { createSqaiTools, type SqaiToolSet, type SqaiToolsOptions } from \"./tools.js\";\n\nexport type SqaiSourceInput =\n | string\n | Array<Record<string, unknown>>\n | { data: string | Array<Record<string, unknown>>; name?: string };\n\nexport interface SqaiToolkitConfig extends SqaiConfig {\n /** Sources to connect lazily on first tool call / `ready` access. */\n sources?: SqaiSourceInput[];\n}\n\nexport class SQAIToolkit {\n readonly client: SQAI;\n private readonly sourceInputs: SqaiSourceInput[];\n private readyPromise: Promise<SqaiSource[]> | null = null;\n private readyError: SqaiError | null = null;\n\n constructor(config: SqaiToolkitConfig = {}) {\n const { sources, ...clientConfig } = config;\n this.client = new SQAI(clientConfig);\n this.sourceInputs = sources ?? [];\n }\n\n /** Connected sources; connecting starts on first access. */\n get ready(): Promise<SqaiSource[]> {\n return this.ensureReady();\n }\n\n /** The stored connection failure, when `ready` rejected. */\n get connectionError(): SqaiError | null {\n return this.readyError;\n }\n\n ensureReady(): Promise<SqaiSource[]> {\n if (!this.readyPromise) {\n this.readyPromise = this.connectAll();\n this.readyPromise.catch(error => {\n this.readyError =\n error instanceof SqaiError\n ? error\n : new SqaiError(\n \"source_connection_failed\",\n `Connecting the configured sources failed: ${\n error instanceof Error ? error.message : String(error)\n }`,\n );\n });\n }\n return this.readyPromise;\n }\n\n async connect(\n source: string | Array<Record<string, unknown>> | Record<string, unknown>,\n options: { name?: string } = {},\n ): Promise<SqaiSource> {\n return this.client.connect(source, options);\n }\n\n tools(options: SqaiToolsOptions = {}): SqaiToolSet {\n return createSqaiTools(this, options);\n }\n\n private async connectAll(): Promise<SqaiSource[]> {\n for (const input of this.sourceInputs) {\n if (typeof input === \"string\" || Array.isArray(input)) {\n await this.client.connect(input);\n } else {\n await this.client.connect(input.data, input.name ? { name: input.name } : {});\n }\n }\n return this.client.listSources();\n }\n}\n\nexport function createSQAI(config: SqaiToolkitConfig = {}): SQAIToolkit {\n return new SQAIToolkit(config);\n}\n","/** The three SQAI tools for the Vercel AI SDK.\n *\n * listSources — discovery (sources, capability modules, function signatures).\n * queryData — execute one query or computation intent; never throws.\n * explainQuery — dry-run: resolve/verify a query, or validate a computation\n * against the capability contract without executing it.\n */\n\nimport { tool, type Tool } from \"ai\";\nimport {\n ContractIndex,\n SqaiError,\n currentPlatformKey,\n invocationHash,\n isReadOnlyEligible,\n lookupCapability,\n type CapabilityEntry,\n type ComputationSpec,\n type QuerySpec,\n type ResolveResponse,\n type SQAI,\n type SqaiSource,\n} from \"@thyn-ai/sqai\";\n\nimport {\n explainQueryInputSchema,\n explainQueryOutputSchema,\n listSourcesInputSchema,\n listSourcesOutputSchema,\n queryDataInputSchema,\n queryDataOutputSchema,\n type ClarificationOutput,\n type ErrorOutput,\n type ExplainQueryOutput,\n type ListSourcesInput,\n type ListSourcesOutput,\n type QueryDataInput,\n type QueryDataOutput,\n type RejectedOutput,\n} from \"./schemas.js\";\nimport { shapeComputationValue, shapeQueryResult, storeWithinCap } from \"./truncate.js\";\nimport type { SQAIToolkit } from \"./toolkit.js\";\n\nexport interface SqaiToolsOptions {\n /** Pin every query to this source (spec.source still wins when provided). */\n source?: string;\n defaultLimit?: number;\n maxExecutionRows?: number;\n maxRowsToModel?: number;\n maxCellsToModel?: number;\n maxElementsToModel?: number;\n maxBytesToModel?: number;\n maxOutputBytes?: number;\n}\n\nconst DEFAULT_OPTIONS: Required<Omit<SqaiToolsOptions, \"source\">> = {\n defaultLimit: 100,\n maxExecutionRows: 1000,\n maxRowsToModel: 25,\n maxCellsToModel: 250,\n maxElementsToModel: 500,\n maxBytesToModel: 32_000,\n maxOutputBytes: 10_000_000,\n};\n\n// ── Shared helpers ───────────────────────────────────────────────────────────\n\nfunction toErrorOutput(error: unknown): ErrorOutput {\n if (error instanceof SqaiError) {\n const nearest = error.details[\"nearest_matches\"];\n const nearestMatches =\n Array.isArray(nearest) && nearest.every(item => typeof item === \"string\")\n ? (nearest as string[])\n : undefined;\n return {\n status: \"error\",\n code: error.code,\n message: error.message,\n retryable: error.retryable,\n request_id: error.requestId,\n ...(nearestMatches ? { nearest_matches: nearestMatches } : {}),\n };\n }\n return {\n status: \"error\",\n code: \"internal_error\",\n message: error instanceof Error ? error.message : String(error),\n retryable: false,\n request_id: null,\n };\n}\n\nasync function readyError(toolkit: SQAIToolkit): Promise<SqaiError | null> {\n try {\n await toolkit.ensureReady();\n return null;\n } catch (error) {\n return error instanceof SqaiError\n ? error\n : new SqaiError(\n \"source_connection_failed\",\n `Connecting the configured sources failed: ${\n error instanceof Error ? error.message : String(error)\n }`,\n );\n }\n}\n\n/** Candidates pass through loosely typed — upstream owns the exact shape. */\nfunction passthroughCandidates(resolution: ResolveResponse): Array<Record<string, unknown>> {\n return (resolution.candidates ?? []).map(candidate => ({ ...candidate }));\n}\n\nfunction clarificationOutput(resolution: ResolveResponse): ClarificationOutput {\n const candidates = resolution.candidates ?? [];\n const names = candidates\n .slice(0, 5)\n .map(candidate => `${candidate.source}.${candidate.column}`);\n const lead = resolution.explanation?.[0] ?? \"The request is ambiguous.\";\n const question =\n names.length > 0 ? `${lead} Did you mean ${names.join(\" or \")}?` : lead;\n return {\n status: \"needs_clarification\",\n question,\n candidates: passthroughCandidates(resolution),\n explanation: resolution.explanation ?? [],\n };\n}\n\nfunction rejectedOutput(resolution: ResolveResponse): RejectedOutput {\n return {\n status: \"rejected\",\n rejection_reason: resolution.rejection_reason ?? \"rejected\",\n candidates: passthroughCandidates(resolution),\n explanation: resolution.explanation ?? [],\n };\n}\n\nfunction renderSignature(entry: CapabilityEntry): string {\n const params = entry.signature.params as Array<{ name: string; type: string; required?: boolean }>;\n const rendered = params\n .map(param => `${param.name}${param.required === false ? \"?\" : \"\"}: ${param.type}`)\n .join(\", \");\n return `${entry.name}(${rendered}) -> ${entry.signature.returns}`;\n}\n\nfunction splitCapabilityName(name: string): { module: string; functionName: string } {\n const separator = name.lastIndexOf(\".\");\n return { module: name.slice(0, separator), functionName: name.slice(separator + 1) };\n}\n\ntype QueryInputSpec = Extract<QueryDataInput, { kind: \"query\" }>[\"spec\"];\ntype ComputationInputSpec = Extract<QueryDataInput, { kind: \"computation\" }>[\"spec\"];\n\nfunction toQuerySpec(\n spec: QueryInputSpec,\n options: Required<Omit<SqaiToolsOptions, \"source\">> & { source?: string },\n): QuerySpec {\n const sourceName = spec.source ?? options.source;\n return {\n metric: spec.metric,\n ...(spec.aggregation ? { aggregation: spec.aggregation } : {}),\n ...(spec.group_by ? { group_by: spec.group_by } : {}),\n ...(spec.filter ? { filter: spec.filter } : {}),\n limit: Math.min(spec.limit ?? options.defaultLimit, options.maxExecutionRows),\n ...(spec.order ? { order: spec.order } : {}),\n ...(sourceName ? { source_name: sourceName } : {}),\n };\n}\n\nfunction toComputationSpec(spec: ComputationInputSpec): ComputationSpec {\n return {\n module: spec.module,\n function: spec.function,\n args: spec.args ?? [],\n ...(spec.kwargs ? { kwargs: spec.kwargs } : {}),\n ...(spec.bindings ? { bindings: spec.bindings } : {}),\n ...(spec.seed !== undefined ? { seed: spec.seed } : {}),\n };\n}\n\n// ── listSources internals ────────────────────────────────────────────────────\n\nconst NUMBER_OPS = [\n \"sum\",\n \"avg\",\n \"count\",\n \"min\",\n \"max\",\n \"eq\",\n \"in\",\n \"gt\",\n \"gte\",\n \"lt\",\n \"lte\",\n \"is_null\",\n \"is_not_null\",\n];\nconst FILTER_ONLY_OPS = [\"eq\", \"in\", \"is_null\", \"is_not_null\"];\n\nfunction opsForFieldType(type: string): string[] {\n if (type === \"number\") {\n return [...NUMBER_OPS];\n }\n // string / date / boolean — and unknown types get filter ops only.\n return [...FILTER_ONLY_OPS];\n}\n\nfunction describeSources(sources: SqaiSource[]) {\n return sources.map(source => {\n const typedFields =\n source.typed_fields.length > 0\n ? source.typed_fields\n : source.fields.map(name => ({ name, type: \"unknown\" }));\n return {\n name: source.name,\n fields: typedFields.map(field => ({\n name: field.name,\n type: field.type,\n ops: opsForFieldType(field.type),\n })),\n row_count: source.row_count,\n schema_revision: source.schema_revision,\n };\n });\n}\n\nfunction searchModules(client: SQAI, query: string) {\n const matches = client.searchCapabilities(query, 100);\n const byModule = new Map<\n string,\n {\n name: string;\n category: string;\n deterministic: boolean;\n function_count: number;\n sample_functions: string[];\n }\n >();\n for (const match of matches) {\n const { module, functionName } = splitCapabilityName(match.entry.name);\n let aggregate = byModule.get(module);\n if (!aggregate) {\n if (byModule.size >= 10) {\n continue;\n }\n aggregate = {\n name: module,\n category: match.entry.category,\n deterministic: true,\n function_count: 0,\n sample_functions: [],\n };\n byModule.set(module, aggregate);\n }\n aggregate.function_count += 1;\n if (aggregate.sample_functions.length < 5) {\n aggregate.sample_functions.push(functionName);\n }\n }\n return [...byModule.values()];\n}\n\nfunction moduleFunctions(client: SQAI, index: () => ContractIndex, moduleName: string) {\n const prefix = `${moduleName}.`;\n const entries = client\n .capabilities()\n .capabilities.filter(\n entry => entry.ai_sdk && isReadOnlyEligible(entry) && entry.name.startsWith(prefix),\n );\n if (entries.length === 0) {\n throw new SqaiError(\"unsupported_operation\", `Unknown capability module '${moduleName}'.`, {\n details: { module: moduleName, nearest_matches: index().nearest(moduleName) },\n });\n }\n return entries.map(entry => ({\n name: entry.name,\n signature: renderSignature(entry),\n params: (entry.signature.params as Array<{ name: string; type: string; required?: boolean }>).map(\n param => ({ name: param.name, type: param.type, required: param.required ?? true }),\n ),\n returns: entry.signature.returns,\n deterministic: entry.deterministic,\n seed_required: entry.seed_required ?? false,\n }));\n}\n\n// ── Tool factory ─────────────────────────────────────────────────────────────\n\n/** One SQAI tool: an AI-SDK tool whose execute is always present. */\nexport type SqaiTool<INPUT, OUTPUT> = Tool<INPUT, OUTPUT> & {\n execute: NonNullable<Tool<INPUT, OUTPUT>[\"execute\"]>;\n};\n\n/** Index signature keeps this assignable to the AI SDK's ToolSet, so\n * `tools: sqai.tools()` works with no cast. */\nexport interface SqaiToolSet extends Record<string, Tool> {\n listSources: SqaiTool<ListSourcesInput, ListSourcesOutput>;\n queryData: SqaiTool<QueryDataInput, QueryDataOutput>;\n explainQuery: SqaiTool<QueryDataInput, ExplainQueryOutput>;\n}\n\nexport function createSqaiTools(toolkit: SQAIToolkit, options: SqaiToolsOptions = {}): SqaiToolSet {\n const opts = { ...DEFAULT_OPTIONS, ...options };\n const client = toolkit.client;\n\n let cachedIndex: ContractIndex | null = null;\n const contractIndex = (): ContractIndex => {\n if (!cachedIndex) {\n cachedIndex = new ContractIndex(client.capabilities());\n }\n return cachedIndex;\n };\n\n const listSources = tool({\n description:\n \"Discover what SQAI can touch. No arguments: list connected data sources with exact field \" +\n \"names, types, and allowed operations — call this before queryData so specs use exact names. \" +\n \"With capabilitySearch: search the deterministic computation catalog and get matching modules. \" +\n \"With module: list that module's functions with exact signatures.\",\n inputSchema: listSourcesInputSchema,\n outputSchema: listSourcesOutputSchema,\n execute: async (input: ListSourcesInput) => {\n const notReady = await readyError(toolkit);\n if (notReady) {\n return toErrorOutput(notReady);\n }\n try {\n if (input?.capabilitySearch) {\n return { modules: searchModules(client, input.capabilitySearch) };\n }\n if (input?.module) {\n return { functions: moduleFunctions(client, contractIndex, input.module) };\n }\n return { sources: describeSources(client.listSources()) };\n } catch (error) {\n return toErrorOutput(error);\n }\n },\n });\n\n const queryData = tool({\n description:\n \"Execute one deterministic, read-only SQAI request. Use kind 'query' for tabular questions \" +\n \"(aggregations, grouping, filtering) over connected sources — call listSources first for exact \" +\n \"field names. Use kind 'computation' for math (statistics, financial, vector/matrix, simulation) \" +\n \"over arrays: never paste large data into args — use bindings to pull columns from connected \" +\n \"sources. Simulation modules require a seed. Large results are truncated for context; the full \" +\n \"result stays retrievable via result_id.\",\n inputSchema: queryDataInputSchema,\n outputSchema: queryDataOutputSchema,\n execute: async (input: QueryDataInput) => {\n const notReady = await readyError(toolkit);\n if (notReady) {\n return toErrorOutput(notReady);\n }\n try {\n if (input.kind === \"query\") {\n return await runQuery(input.spec);\n }\n return await runComputation(input.spec);\n } catch (error) {\n return toErrorOutput(error);\n }\n },\n });\n\n const explainQuery = tool({\n description:\n \"Dry-run a queryData request without executing it. kind 'query': resolve and verify the plan \" +\n \"(resolved_plan, plan steps, plan_hash, confidence, validated). kind 'computation': check the \" +\n \"capability exists and get its exact signature, a preview invocation_hash, and whether a seed \" +\n \"is required. Use this to debug clarifications and rejections before running queryData.\",\n inputSchema: explainQueryInputSchema,\n outputSchema: explainQueryOutputSchema,\n execute: async (input: QueryDataInput) => {\n const notReady = await readyError(toolkit);\n if (notReady) {\n return toErrorOutput(notReady);\n }\n try {\n if (input.kind === \"query\") {\n return await explainQueryPlan(input.spec);\n }\n return explainComputation(input.spec);\n } catch (error) {\n return toErrorOutput(error);\n }\n },\n });\n\n async function runQuery(spec: QueryInputSpec) {\n const querySpec = toQuerySpec(spec, opts);\n const outcome = await client.ask(querySpec);\n if (outcome.status === \"needs_clarification\") {\n return clarificationOutput(outcome.resolution);\n }\n if (outcome.status === \"rejected\") {\n return rejectedOutput(outcome.resolution);\n }\n const { data, resolution } = outcome;\n const shaped = shapeQueryResult(data.result, opts);\n const sourceName = data.resolved_source || resolution.resolved_source || null;\n const resultId = storeWithinCap(data.result, opts.maxOutputBytes, value =>\n client.storeResult(value, sourceName ? [sourceName] : []),\n );\n return {\n status: \"ok\" as const,\n kind: \"query\" as const,\n data: shaped.data,\n total_rows: shaped.total_rows,\n returned_rows: shaped.returned_rows,\n truncated: shaped.truncated,\n ...(resultId ? { result_id: resultId } : {}),\n plan_hash: data.plan_hash ?? resolution.plan_hash ?? null,\n schema_revision: data.schema_revision ?? resolution.schema_revision ?? null,\n source_name: sourceName,\n intent_signature: resolution.intent_signature ?? null,\n deterministic_scope: data.deterministic_scope ?? resolution.deterministic_scope ?? null,\n decision_path: data.decision_path ?? resolution.decision_path ?? null,\n validated: data.validated ?? resolution.validated ?? null,\n request_id: data.request_id ?? resolution.request_id ?? null,\n explanation: data.explanation ?? resolution.explanation ?? [],\n };\n }\n\n async function runComputation(spec: ComputationInputSpec) {\n const result = await client.compute(toComputationSpec(spec));\n const shaped = shapeComputationValue(result.value, opts);\n const sourceIds = result.provenance?.bindings.map(binding => binding.source_name) ?? [];\n const resultId = storeWithinCap(result.value, opts.maxOutputBytes, value =>\n client.storeResult(value, sourceIds),\n );\n return {\n status: \"ok\" as const,\n kind: \"computation\" as const,\n value: shaped.value,\n value_type: result.value_type,\n ...(shaped.preview !== undefined ? { preview: shaped.preview } : {}),\n ...(shaped.element_count !== undefined ? { element_count: shaped.element_count } : {}),\n truncated: shaped.truncated,\n ...(resultId ? { result_id: resultId } : {}),\n invocation_hash: result.invocation_hash,\n computation_hash: result.computation_hash,\n contract_hash: result.contract_hash,\n determinism: result.determinism,\n ...(result.provenance ? { provenance: result.provenance } : {}),\n latency_ms: result.latency_ms,\n request_id: result.request_id,\n };\n }\n\n async function explainQueryPlan(spec: QueryInputSpec) {\n const resolution = await client.resolve(toQuerySpec(spec, opts));\n if (resolution.clarification_required) {\n return clarificationOutput(resolution);\n }\n if (resolution.rejection_reason || !resolution.resolved_plan) {\n return rejectedOutput(resolution);\n }\n const verification = await client.verify(resolution);\n return {\n status: \"ok\" as const,\n kind: \"query\" as const,\n resolved_plan: resolution.resolved_plan as unknown as Record<string, unknown>,\n plan: resolution.plan ?? [],\n plan_hash: resolution.plan_hash ?? null,\n confidence: resolution.confidence,\n validated: verification.valid === true,\n };\n }\n\n /** Validate a computation without executing it: capability existence and\n * signature from the contract, plus a preview invocation_hash computed over\n * UNRESOLVED binding descriptors (input_hash left empty — the definitive\n * hash requires extraction, which explain never performs). */\n function explainComputation(spec: ComputationInputSpec) {\n const index = contractIndex();\n const entry = lookupCapability(index, spec.module, spec.function);\n const bindings = spec.bindings ?? [];\n const descriptors = bindings.flatMap(binding =>\n \"parameters\" in binding\n ? binding.parameters.map((parameter, position) => ({\n parameter,\n source_name: binding.source,\n fields: [binding.fields[position] ?? \"\"],\n input_hash: \"\",\n }))\n : [\n {\n parameter: binding.parameter,\n source_name: binding.source,\n fields: [binding.field],\n input_hash: \"\",\n },\n ],\n );\n const previewHash = invocationHash({\n module: spec.module,\n function: spec.function,\n args: spec.args ?? [],\n kwargs: spec.kwargs ?? {},\n resolved_bindings: descriptors,\n seed: spec.seed ?? null,\n contract_hash: index.contract.capability_contract_hash,\n execution_scope: `${currentPlatformKey()}:${client.mode}`,\n });\n return {\n status: \"ok\" as const,\n kind: \"computation\" as const,\n matched_signature: renderSignature(entry),\n invocation_hash: previewHash,\n seed_required: entry.seed_required ?? false,\n };\n }\n\n return { listSources, queryData, explainQuery };\n}\n","/** Zod v4 schemas for the SQAI AI-SDK tools.\n *\n * These schemas transport; the @thyn-ai/sqai capability contract and policy layer\n * authorize. Field names mirror @thyn-ai/sqai types verbatim (Algenta vocabulary\n * passes through untranslated). No policy key is reachable from any input\n * schema: application policy is configured in code, never by the model.\n */\n\nimport { z } from \"zod\";\nimport type { SqaiValue } from \"@thyn-ai/sqai\";\n\n// ── Query plane ──────────────────────────────────────────────────────────────\n\nexport const filterConditionSchema = z.object({\n column: z.string().optional().describe(\"Exact column name to filter on.\"),\n op: z.enum([\"eq\", \"in\", \"gt\", \"gte\", \"lt\", \"lte\", \"is_null\", \"is_not_null\"]),\n value: z.union([z.string(), z.number(), z.boolean()]).optional(),\n values: z\n .array(z.union([z.string(), z.number(), z.boolean()]))\n .optional()\n .describe(\"Values for the 'in' operator.\"),\n});\n\nexport const filterSpecSchema = z.object({\n time_filter: z.string().optional().describe(\"Named time window, e.g. 'last_30_days'.\"),\n conditions: z.array(filterConditionSchema).optional(),\n});\n\nexport const querySpecSchema = z.object({\n metric: z\n .string()\n .describe(\"The measure to compute, e.g. 'revenue'. Use exact field names from listSources.\"),\n aggregation: z.enum([\"sum\", \"avg\", \"count\", \"min\", \"max\"]).optional(),\n group_by: z.string().optional().describe(\"Column to group results by.\"),\n filter: filterSpecSchema.optional(),\n limit: z.number().int().positive().optional().describe(\"Maximum rows to return.\"),\n order: z.enum([\"asc\", \"desc\"]).optional(),\n source: z\n .string()\n .optional()\n .describe(\"Source name to query (maps to source_name). Omit to let the planner pick.\"),\n});\n\n// ── Wire values (computation plane transport) ────────────────────────────────\n\n/** Tagged high-precision scalars ride the wire as {type, value}. */\nconst taggedScalarSchema = z.object({\n type: z.enum([\"decimal\", \"bigint\"]),\n value: z.string(),\n});\n\nexport const sqaiValueSchema: z.ZodType<SqaiValue> = z.lazy(() =>\n z.union([\n z.null(),\n z.boolean(),\n z.number(),\n z.string(),\n z.array(sqaiValueSchema),\n taggedScalarSchema,\n z.record(z.string(), sqaiValueSchema),\n ]),\n);\n\n/** @deprecated Renamed to {@link sqaiValueSchema}. Kept as a non-breaking alias. */\nexport const algentaWireValueSchema = sqaiValueSchema;\n\n// ── Computation plane ────────────────────────────────────────────────────────\n\nconst singleBindingSchema = z.object({\n parameter: z\n .union([z.string(), z.number()])\n .describe(\"Target parameter, by name or positional index.\"),\n source: z.string().describe(\"Connected source name to pull the column from.\"),\n field: z.string().describe(\"Column to extract.\"),\n filter: filterSpecSchema.optional(),\n});\n\nconst alignedBindingSchema = z.object({\n parameters: z\n .array(z.union([z.string(), z.number()]))\n .describe(\"Target parameters, one per field, row-aligned.\"),\n source: z.string(),\n fields: z.array(z.string()).describe(\"Columns to extract, one per parameter.\"),\n filter: filterSpecSchema.optional(),\n alignment: z.literal(\"rowwise\"),\n nullPolicy: z.enum([\"pairwise\", \"preserve\"]).optional(),\n});\n\nexport const computationBindingSchema = z.union([singleBindingSchema, alignedBindingSchema]);\n\nexport const computationSpecSchema = z.object({\n module: z.string().describe(\"Capability module, e.g. 'stats'. Discover via listSources.\"),\n function: z.string().describe(\"Function inside the module, e.g. 'median'.\"),\n args: z.array(sqaiValueSchema).default([]).describe(\"Positional arguments.\"),\n kwargs: z.record(z.string(), sqaiValueSchema).optional().describe(\"Named arguments.\"),\n bindings: z\n .array(computationBindingSchema)\n .optional()\n .describe(\"Pull columns from connected sources instead of pasting data inline.\"),\n seed: z\n .union([z.number(), z.string()])\n .optional()\n .describe(\"Required for simulation modules; makes runs replayable\"),\n});\n\n// ── Tool input ───────────────────────────────────────────────────────────────\n\nexport const queryDataInputSchema = z.discriminatedUnion(\"kind\", [\n z.object({\n version: z.literal(\"1\"),\n kind: z.literal(\"query\"),\n spec: querySpecSchema,\n }),\n z.object({\n version: z.literal(\"1\"),\n kind: z.literal(\"computation\"),\n spec: computationSpecSchema,\n }),\n]);\n\nexport const explainQueryInputSchema = queryDataInputSchema;\n\nexport const listSourcesInputSchema = z.object({\n capabilitySearch: z\n .string()\n .optional()\n .describe(\"Search the computation capability catalog; returns matching modules.\"),\n module: z\n .string()\n .optional()\n .describe(\"List a module's functions with exact signatures.\"),\n});\n\n// ── Tool output ──────────────────────────────────────────────────────────────\n\nconst cellSchema = z.union([z.number(), z.string(), z.boolean(), z.null()]);\n\n/** Resolver candidates pass through loosely typed — upstream owns the shape. */\nexport const candidateSchema = z.looseObject({\n source: z.string().optional(),\n column: z.string().optional(),\n role: z.string().optional(),\n confidence: z.number().optional(),\n});\n\nexport const errorOutputSchema = z.object({\n status: z.literal(\"error\"),\n code: z.string(),\n message: z.string(),\n retryable: z.boolean(),\n request_id: z.string().nullable(),\n nearest_matches: z.array(z.string()).optional(),\n});\n\nexport const clarificationOutputSchema = z.object({\n status: z.literal(\"needs_clarification\"),\n question: z.string(),\n candidates: z.array(candidateSchema),\n explanation: z.array(z.string()),\n});\n\nexport const rejectedOutputSchema = z.object({\n status: z.literal(\"rejected\"),\n rejection_reason: z.string(),\n candidates: z.array(candidateSchema),\n explanation: z.array(z.string()),\n});\n\nexport const queryOkOutputSchema = z.object({\n status: z.literal(\"ok\"),\n kind: z.literal(\"query\"),\n data: z.object({\n columns: z.array(z.string()),\n rows: z.array(z.array(cellSchema)),\n }),\n total_rows: z.number(),\n returned_rows: z.number(),\n truncated: z.boolean(),\n result_id: z.string().optional(),\n plan_hash: z.string().nullable(),\n schema_revision: z.string().nullable(),\n source_name: z.string().nullable(),\n intent_signature: z.string().nullable(),\n deterministic_scope: z.string().nullable(),\n decision_path: z.string().nullable(),\n validated: z.boolean().nullable(),\n request_id: z.string().nullable(),\n explanation: z.array(z.string()),\n});\n\nexport const determinismEnvelopeSchema = z.object({\n runtime_bundle_version: z.string(),\n runtime_bundle_sha256: z.string(),\n platform: z.string(),\n architecture: z.string(),\n kernel_build: z.string(),\n precision_mode: z.string(),\n thread_count: z.number(),\n seed: z.union([z.number(), z.string()]).optional(),\n input_hash: z.string(),\n});\n\nexport const bindingProvenanceSchema = z.object({\n source_name: z.string(),\n fields: z.array(z.string()),\n schema_revision: z.string().nullable(),\n row_count: z.number(),\n input_hash: z.string(),\n});\n\nexport const computationOkOutputSchema = z.object({\n status: z.literal(\"ok\"),\n kind: z.literal(\"computation\"),\n value: sqaiValueSchema,\n value_type: z.string(),\n preview: sqaiValueSchema.optional(),\n element_count: z.number().optional(),\n truncated: z.boolean(),\n result_id: z.string().optional(),\n invocation_hash: z.string(),\n computation_hash: z.string(),\n contract_hash: z.string(),\n determinism: determinismEnvelopeSchema,\n provenance: z.object({ bindings: z.array(bindingProvenanceSchema) }).optional(),\n latency_ms: z.number(),\n request_id: z.string(),\n});\n\nexport const queryDataOutputSchema = z.union([\n queryOkOutputSchema,\n computationOkOutputSchema,\n clarificationOutputSchema,\n rejectedOutputSchema,\n errorOutputSchema,\n]);\n\nexport const sourceListOutputSchema = z.object({\n sources: z.array(\n z.object({\n name: z.string(),\n fields: z.array(\n z.object({\n name: z.string(),\n type: z.string(),\n ops: z.array(z.string()),\n }),\n ),\n row_count: z.number().nullable(),\n schema_revision: z.string().nullable(),\n }),\n ),\n});\n\nexport const moduleListOutputSchema = z.object({\n modules: z.array(\n z.object({\n name: z.string(),\n category: z.string(),\n deterministic: z.boolean(),\n function_count: z.number(),\n sample_functions: z.array(z.string()),\n }),\n ),\n});\n\nexport const functionListOutputSchema = z.object({\n functions: z.array(\n z.object({\n name: z.string(),\n signature: z.string(),\n params: z.array(\n z.object({\n name: z.string(),\n type: z.string(),\n required: z.boolean(),\n }),\n ),\n returns: z.string(),\n deterministic: z.boolean(),\n seed_required: z.boolean(),\n }),\n ),\n});\n\nexport const listSourcesOutputSchema = z.union([\n sourceListOutputSchema,\n moduleListOutputSchema,\n functionListOutputSchema,\n errorOutputSchema,\n]);\n\nexport const explainQueryOkQueryOutputSchema = z.object({\n status: z.literal(\"ok\"),\n kind: z.literal(\"query\"),\n resolved_plan: z.record(z.string(), z.unknown()),\n plan: z.array(z.string()),\n plan_hash: z.string().nullable(),\n confidence: z.number(),\n validated: z.boolean(),\n});\n\nexport const explainQueryOkComputationOutputSchema = z.object({\n status: z.literal(\"ok\"),\n kind: z.literal(\"computation\"),\n matched_signature: z.string(),\n invocation_hash: z.string(),\n seed_required: z.boolean(),\n});\n\nexport const explainQueryOutputSchema = z.union([\n explainQueryOkQueryOutputSchema,\n explainQueryOkComputationOutputSchema,\n clarificationOutputSchema,\n rejectedOutputSchema,\n errorOutputSchema,\n]);\n\n// ── Inferred types ───────────────────────────────────────────────────────────\n\nexport type QueryDataInput = z.infer<typeof queryDataInputSchema>;\nexport type QueryDataOutput = z.infer<typeof queryDataOutputSchema>;\nexport type ListSourcesInput = z.infer<typeof listSourcesInputSchema>;\nexport type ListSourcesOutput = z.infer<typeof listSourcesOutputSchema>;\nexport type ExplainQueryInput = z.infer<typeof explainQueryInputSchema>;\nexport type ExplainQueryOutput = z.infer<typeof explainQueryOutputSchema>;\nexport type ErrorOutput = z.infer<typeof errorOutputSchema>;\nexport type ClarificationOutput = z.infer<typeof clarificationOutputSchema>;\nexport type RejectedOutput = z.infer<typeof rejectedOutputSchema>;\n","/** Model-context shaping: what the model sees is a truncated, well-labeled\n * projection; the full result is stored (subject to maxOutputBytes) and\n * retrievable by result_id. Truncation is always declared, never silent. */\n\nimport type { SqaiValue } from \"@thyn-ai/sqai\";\n\nexport type Cell = number | string | boolean | null;\n\nexport interface ShapedQueryResult {\n data: { columns: string[]; rows: Cell[][] };\n total_rows: number;\n returned_rows: number;\n truncated: boolean;\n}\n\nexport interface QueryShapingOptions {\n maxRowsToModel: number;\n maxCellsToModel: number;\n}\n\nfunction toCell(value: unknown): Cell {\n if (value === null || value === undefined) {\n return null;\n }\n if (typeof value === \"number\" || typeof value === \"string\" || typeof value === \"boolean\") {\n return value;\n }\n return JSON.stringify(value);\n}\n\n/** Shape a query-plane result (scalar or array of row records) into a compact\n * columns/rows table. Truncation is rows-first, then whole rows are dropped\n * until the cell budget fits — a partial row is never shown. */\nexport function shapeQueryResult(result: unknown, options: QueryShapingOptions): ShapedQueryResult {\n if (!Array.isArray(result)) {\n return {\n data: { columns: [\"value\"], rows: [[toCell(result)]] },\n total_rows: 1,\n returned_rows: 1,\n truncated: false,\n };\n }\n const totalRows = result.length;\n if (totalRows === 0) {\n return { data: { columns: [], rows: [] }, total_rows: 0, returned_rows: 0, truncated: false };\n }\n\n const first = result[0];\n let columns: string[];\n let toRow: (row: unknown) => Cell[];\n if (first !== null && typeof first === \"object\" && !Array.isArray(first)) {\n columns = Object.keys(first as Record<string, unknown>);\n toRow = row => columns.map(column => toCell((row as Record<string, unknown>)[column]));\n } else {\n columns = [\"value\"];\n toRow = row => [toCell(row)];\n }\n\n // Rows first…\n let keep = Math.min(totalRows, Math.max(0, Math.floor(options.maxRowsToModel)));\n // …then cells: drop whole rows until the cell budget fits.\n const cellsPerRow = Math.max(1, columns.length);\n if (keep * cellsPerRow > options.maxCellsToModel) {\n keep = Math.max(0, Math.floor(options.maxCellsToModel / cellsPerRow));\n }\n\n return {\n data: { columns, rows: result.slice(0, keep).map(toRow) },\n total_rows: totalRows,\n returned_rows: keep,\n truncated: keep < totalRows,\n };\n}\n\nexport interface ShapedComputationValue {\n value: SqaiValue;\n preview?: SqaiValue;\n element_count?: number;\n truncated: boolean;\n}\n\nexport interface ComputationShapingOptions {\n maxElementsToModel: number;\n maxBytesToModel: number;\n}\n\nfunction byteLength(value: unknown): number {\n return Buffer.byteLength(JSON.stringify(value ?? null), \"utf-8\");\n}\n\n/** Shape a computation-plane value for the model context.\n *\n * Scalars pass through. Arrays/matrices surface as a `preview` of leading\n * elements (element_count = full count), halved until the byte budget fits.\n * Objects pass unless they exceed the byte budget — then the model gets only\n * the truncated flag and (from the caller) a result_id. */\nexport function shapeComputationValue(\n value: SqaiValue,\n options: ComputationShapingOptions,\n): ShapedComputationValue {\n if (value === null || typeof value !== \"object\") {\n return { value, truncated: false };\n }\n\n if (Array.isArray(value)) {\n const elementCount = value.length;\n let preview = value.slice(0, Math.min(elementCount, Math.max(0, options.maxElementsToModel)));\n while (preview.length > 0 && byteLength(preview) > options.maxBytesToModel) {\n preview = preview.slice(0, Math.floor(preview.length / 2));\n }\n return {\n value: null,\n preview,\n element_count: elementCount,\n truncated: preview.length < elementCount,\n };\n }\n\n // Records and tagged scalars ({type: \"decimal\"|\"bigint\", value}).\n if (byteLength(value) <= options.maxBytesToModel) {\n return { value, truncated: false };\n }\n return { value: null, truncated: true };\n}\n\n/** Hard cap on what gets STORED: if the full value's JSON exceeds\n * maxOutputBytes, nothing is stored and there is no result_id. */\nexport function storeWithinCap(\n value: unknown,\n maxOutputBytes: number,\n store: (value: unknown) => string,\n): string | undefined {\n if (byteLength(value) > maxOutputBytes) {\n return undefined;\n }\n return store(value);\n}\n","export { createSQAI, SQAIToolkit, type SqaiSourceInput, type SqaiToolkitConfig } from \"./toolkit.js\";\nexport { createSqaiTools, type SqaiToolSet, type SqaiToolsOptions } from \"./tools.js\";\nexport {\n shapeComputationValue,\n shapeQueryResult,\n storeWithinCap,\n type Cell,\n type ComputationShapingOptions,\n type QueryShapingOptions,\n type ShapedComputationValue,\n type ShapedQueryResult,\n} from \"./truncate.js\";\nexport * from \"./schemas.js\";\n\n// Substrate types agents commonly need alongside the tools.\nexport { SQAI, SqaiError } from \"@thyn-ai/sqai\";\nexport type {\n SqaiValue,\n /** @deprecated alias of SqaiValue */\n AlgentaWireValue,\n ComputationBinding,\n ComputationSpec,\n ComputeResult,\n QueryFilterCondition,\n QueryFilterSpec,\n QuerySpec,\n SqaiConfig,\n SqaiPolicy,\n SqaiSource,\n} from \"@thyn-ai/sqai\";\n"],"mappings":"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","names":["SqaiError","SqaiError","SQAI","SqaiError"]}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@thyn-ai/sqai-ai-sdk",
3
- "version": "0.1.2",
4
- "description": "Vercel AI SDK tools for SQAI — deterministic, read-only structured-data tools for AI agents.",
3
+ "version": "0.1.4",
4
+ "description": "Vercel AI SDK tools for SQAI (Structured Query AI) — deterministic, read-only structured-data tools for AI agents.",
5
5
  "license": "Apache-2.0",
6
6
  "type": "module",
7
7
  "engines": {
@@ -24,7 +24,7 @@
24
24
  "NOTICE"
25
25
  ],
26
26
  "dependencies": {
27
- "@thyn-ai/sqai": "^0.1.2"
27
+ "@thyn-ai/sqai": "^0.1.4"
28
28
  },
29
29
  "peerDependencies": {
30
30
  "ai": "^7.0.0",