@thyn-ai/sqai-ai-sdk 0.1.5 → 0.1.6
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/NOTICE +8 -0
- package/README.md +13 -0
- package/dist/index.cjs +0 -4
- package/dist/index.d.cts +4 -7
- package/dist/index.d.ts +4 -7
- package/dist/index.js +0 -3
- package/package.json +2 -2
- package/dist/index.cjs.map +0 -1
- package/dist/index.js.map +0 -1
package/NOTICE
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
SQAI — Structured Query AI
|
|
2
|
+
Copyright 2026 Thyn (thyn.ai)
|
|
3
|
+
|
|
4
|
+
This product includes software developed by Thyn (https://thyn.ai).
|
|
5
|
+
|
|
6
|
+
SQAI is built on the Algenta deterministic execution engine
|
|
7
|
+
(https://algenta.ai) and consumes the published algenta-sdk (npm) and
|
|
8
|
+
algenta-core (PyPI) packages.
|
package/README.md
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# @thyn-ai/sqai-ai-sdk
|
|
2
|
+
|
|
3
|
+
Vercel AI SDK tools for SQAI. It exposes the governed `listSources`, `queryData`, and `explainQuery` tools over an SQAI client.
|
|
4
|
+
|
|
5
|
+
Install:
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install ai zod @thyn-ai/sqai-ai-sdk
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
Keep this package server-side. Policies are configured in application code and are never exposed through model tool input.
|
|
12
|
+
|
|
13
|
+
Docs: https://docs.sqai.com/guides/ai-sdk-tools
|
package/dist/index.cjs
CHANGED
|
@@ -23,7 +23,6 @@ __export(index_exports, {
|
|
|
23
23
|
SQAI: () => import_sqai3.SQAI,
|
|
24
24
|
SQAIToolkit: () => SQAIToolkit,
|
|
25
25
|
SqaiError: () => import_sqai3.SqaiError,
|
|
26
|
-
algentaWireValueSchema: () => algentaWireValueSchema,
|
|
27
26
|
bindingProvenanceSchema: () => bindingProvenanceSchema,
|
|
28
27
|
candidateSchema: () => candidateSchema,
|
|
29
28
|
clarificationOutputSchema: () => clarificationOutputSchema,
|
|
@@ -100,7 +99,6 @@ var sqaiValueSchema = import_zod.z.lazy(
|
|
|
100
99
|
import_zod.z.record(import_zod.z.string(), sqaiValueSchema)
|
|
101
100
|
])
|
|
102
101
|
);
|
|
103
|
-
var algentaWireValueSchema = sqaiValueSchema;
|
|
104
102
|
var singleBindingSchema = import_zod.z.object({
|
|
105
103
|
parameter: import_zod.z.union([import_zod.z.string(), import_zod.z.number()]).describe("Target parameter, by name or positional index."),
|
|
106
104
|
source: import_zod.z.string().describe("Connected source name to pull the column from."),
|
|
@@ -814,7 +812,6 @@ var import_sqai3 = require("@thyn-ai/sqai");
|
|
|
814
812
|
SQAI,
|
|
815
813
|
SQAIToolkit,
|
|
816
814
|
SqaiError,
|
|
817
|
-
algentaWireValueSchema,
|
|
818
815
|
bindingProvenanceSchema,
|
|
819
816
|
candidateSchema,
|
|
820
817
|
clarificationOutputSchema,
|
|
@@ -846,4 +843,3 @@ var import_sqai3 = require("@thyn-ai/sqai");
|
|
|
846
843
|
sqaiValueSchema,
|
|
847
844
|
storeWithinCap
|
|
848
845
|
});
|
|
849
|
-
//# sourceMappingURL=index.cjs.map
|
package/dist/index.d.cts
CHANGED
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
import { SqaiValue, SQAI, SqaiConfig, SqaiSource, SqaiError } from '@thyn-ai/sqai';
|
|
2
|
-
export {
|
|
2
|
+
export { 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
|
|
|
6
6
|
/** Zod v4 schemas for the SQAI AI-SDK tools.
|
|
7
7
|
*
|
|
8
8
|
* These schemas transport; the @thyn-ai/sqai capability contract and policy layer
|
|
9
|
-
* authorize.
|
|
10
|
-
*
|
|
11
|
-
* schema: application policy is configured in code, never by the model.
|
|
9
|
+
* authorize. No policy key is reachable from any input schema: application
|
|
10
|
+
* policy is configured in code, never by the model.
|
|
12
11
|
*/
|
|
13
12
|
|
|
14
13
|
declare const filterConditionSchema: z.ZodObject<{
|
|
@@ -80,8 +79,6 @@ declare const querySpecSchema: z.ZodObject<{
|
|
|
80
79
|
source: z.ZodOptional<z.ZodString>;
|
|
81
80
|
}, z.core.$strip>;
|
|
82
81
|
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>>;
|
|
85
82
|
declare const computationBindingSchema: z.ZodUnion<readonly [z.ZodObject<{
|
|
86
83
|
parameter: z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>;
|
|
87
84
|
source: z.ZodString;
|
|
@@ -836,4 +833,4 @@ declare function shapeComputationValue(value: SqaiValue, options: ComputationSha
|
|
|
836
833
|
* maxOutputBytes, nothing is stored and there is no result_id. */
|
|
837
834
|
declare function storeWithinCap(value: unknown, maxOutputBytes: number, store: (value: unknown) => string): string | undefined;
|
|
838
835
|
|
|
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,
|
|
836
|
+
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, 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,14 +1,13 @@
|
|
|
1
1
|
import { SqaiValue, SQAI, SqaiConfig, SqaiSource, SqaiError } from '@thyn-ai/sqai';
|
|
2
|
-
export {
|
|
2
|
+
export { 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
|
|
|
6
6
|
/** Zod v4 schemas for the SQAI AI-SDK tools.
|
|
7
7
|
*
|
|
8
8
|
* These schemas transport; the @thyn-ai/sqai capability contract and policy layer
|
|
9
|
-
* authorize.
|
|
10
|
-
*
|
|
11
|
-
* schema: application policy is configured in code, never by the model.
|
|
9
|
+
* authorize. No policy key is reachable from any input schema: application
|
|
10
|
+
* policy is configured in code, never by the model.
|
|
12
11
|
*/
|
|
13
12
|
|
|
14
13
|
declare const filterConditionSchema: z.ZodObject<{
|
|
@@ -80,8 +79,6 @@ declare const querySpecSchema: z.ZodObject<{
|
|
|
80
79
|
source: z.ZodOptional<z.ZodString>;
|
|
81
80
|
}, z.core.$strip>;
|
|
82
81
|
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>>;
|
|
85
82
|
declare const computationBindingSchema: z.ZodUnion<readonly [z.ZodObject<{
|
|
86
83
|
parameter: z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>;
|
|
87
84
|
source: z.ZodString;
|
|
@@ -836,4 +833,4 @@ declare function shapeComputationValue(value: SqaiValue, options: ComputationSha
|
|
|
836
833
|
* maxOutputBytes, nothing is stored and there is no result_id. */
|
|
837
834
|
declare function storeWithinCap(value: unknown, maxOutputBytes: number, store: (value: unknown) => string): string | undefined;
|
|
838
835
|
|
|
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,
|
|
836
|
+
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, 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
|
@@ -48,7 +48,6 @@ var sqaiValueSchema = z.lazy(
|
|
|
48
48
|
z.record(z.string(), sqaiValueSchema)
|
|
49
49
|
])
|
|
50
50
|
);
|
|
51
|
-
var algentaWireValueSchema = sqaiValueSchema;
|
|
52
51
|
var singleBindingSchema = z.object({
|
|
53
52
|
parameter: z.union([z.string(), z.number()]).describe("Target parameter, by name or positional index."),
|
|
54
53
|
source: z.string().describe("Connected source name to pull the column from."),
|
|
@@ -761,7 +760,6 @@ export {
|
|
|
761
760
|
SQAI2 as SQAI,
|
|
762
761
|
SQAIToolkit,
|
|
763
762
|
SqaiError3 as SqaiError,
|
|
764
|
-
algentaWireValueSchema,
|
|
765
763
|
bindingProvenanceSchema,
|
|
766
764
|
candidateSchema,
|
|
767
765
|
clarificationOutputSchema,
|
|
@@ -793,4 +791,3 @@ export {
|
|
|
793
791
|
sqaiValueSchema,
|
|
794
792
|
storeWithinCap
|
|
795
793
|
};
|
|
796
|
-
//# sourceMappingURL=index.js.map
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@thyn-ai/sqai-ai-sdk",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.6",
|
|
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",
|
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
"NOTICE"
|
|
25
25
|
],
|
|
26
26
|
"dependencies": {
|
|
27
|
-
"@thyn-ai/sqai": "^0.1.
|
|
27
|
+
"@thyn-ai/sqai": "^0.1.6"
|
|
28
28
|
},
|
|
29
29
|
"peerDependencies": {
|
|
30
30
|
"ai": "^7.0.0",
|
package/dist/index.cjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
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.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
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"]}
|