@deepagents/text2sql 4.1.0 → 4.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +11 -1
- package/dist/bin/sql.js +43 -18
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +121 -54
- package/dist/index.js.map +4 -4
- package/dist/lib/sql-command.d.ts.map +1 -1
- package/dist/lib/sql-invocation.d.ts +15 -0
- package/dist/lib/sql-invocation.d.ts.map +1 -0
- package/dist/lib/sql-meta-hook.d.ts.map +1 -1
- package/dist/lib/sql-validate-reminder.d.ts +22 -0
- package/dist/lib/sql-validate-reminder.d.ts.map +1 -0
- package/dist/lib/sql.d.ts +25 -0
- package/dist/lib/sql.d.ts.map +1 -1
- package/package.json +11 -13
- package/dist/lib/resolve-adapter.d.ts +0 -14
- package/dist/lib/resolve-adapter.d.ts.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sql-command.d.ts","sourceRoot":"","sources":["../../src/lib/sql-command.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAA8B,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"sql-command.d.ts","sourceRoot":"","sources":["../../src/lib/sql-command.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAA8B,MAAM,WAAW,CAAC;AAYrE,OAAO,EAAE,QAAQ,EAA2B,MAAM,UAAU,CAAC;AAsB7D,MAAM,WAAW,uBAAuB;IACtC;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,CAAC;CACjC;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,QAAQ,EAClB,OAAO,GAAE,uBAA4B,GACpC,sBAAsB,CAuBxB"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export type SqlQuerySubcommand = 'run' | 'validate';
|
|
2
|
+
export interface SqlQueryInvocation {
|
|
3
|
+
subcommand: SqlQuerySubcommand;
|
|
4
|
+
dbName: string;
|
|
5
|
+
sql: string;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Parse a single `sql run|validate <db> "<sql>"` command into its parts, or
|
|
9
|
+
* `null` for anything that is not exactly one such invocation (pipelines,
|
|
10
|
+
* redirections, other commands, unparseable input). Shared by the meta hook
|
|
11
|
+
* (which tracks invocations to attach formatted-SQL metadata) and the
|
|
12
|
+
* validate-before-run reminder predicate.
|
|
13
|
+
*/
|
|
14
|
+
export declare function parseSqlQueryInvocation(command: string): SqlQueryInvocation | null;
|
|
15
|
+
//# sourceMappingURL=sql-invocation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sql-invocation.d.ts","sourceRoot":"","sources":["../../src/lib/sql-invocation.ts"],"names":[],"mappings":"AAKA,MAAM,MAAM,kBAAkB,GAAG,KAAK,GAAG,UAAU,CAAC;AAEpD,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,kBAAkB,CAAC;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;CACb;AAED;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,MAAM,GACd,kBAAkB,GAAG,IAAI,CAgB3B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sql-meta-hook.d.ts","sourceRoot":"","sources":["../../src/lib/sql-meta-hook.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAS/C,MAAM,WAAW,mBAAmB;IAClC,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,wBAAwB;IACvC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;CAC/C;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,aAAa,CAAC;CACvB;
|
|
1
|
+
{"version":3,"file":"sql-meta-hook.d.ts","sourceRoot":"","sources":["../../src/lib/sql-meta-hook.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAS/C,MAAM,WAAW,mBAAmB;IAClC,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,wBAAwB;IACvC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;CAC/C;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,aAAa,CAAC;CACvB;AAED,wBAAgB,iBAAiB,CAAC,EAAE,QAAQ,EAAE,EAAE,wBAAwB;qCAInC,iBAAiB,GAAG,IAAI;iCAQ5B,qBAAqB;EAoBrD"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { type WhenPredicate } from '@deepagents/context';
|
|
2
|
+
export declare const SQL_VALIDATE_REMINDER = "Always run `sql validate <db> \"...\"` before `sql run <db> \"...\"` to catch syntax errors early.";
|
|
3
|
+
/**
|
|
4
|
+
* Fires when the tool call being wrapped is a `sql run` that was NOT preceded
|
|
5
|
+
* by a `sql validate` of the same query. Reads the live call from
|
|
6
|
+
* `ctx.executingTool` (only populated at `target: 'tool-output'` time) and scans
|
|
7
|
+
* `ctx.lastAssistantMessages` for a matching prior validate.
|
|
8
|
+
*/
|
|
9
|
+
export declare function sqlRunMissingValidate(): WhenPredicate;
|
|
10
|
+
/**
|
|
11
|
+
* A context fragment nudging the model to `sql validate` before `sql run`.
|
|
12
|
+
* Register it on the engine alongside schema fragments:
|
|
13
|
+
*
|
|
14
|
+
* ```ts
|
|
15
|
+
* context.set(...schemaFragments, sqlValidateReminder());
|
|
16
|
+
* ```
|
|
17
|
+
*
|
|
18
|
+
* Delivered as a tool-output `<system-reminder>` on the `sql run` result, and
|
|
19
|
+
* suppressed when the model already validated that exact query.
|
|
20
|
+
*/
|
|
21
|
+
export declare function sqlValidateReminder(): import("@deepagents/context").ContextFragment<import("@deepagents/context").FragmentData>;
|
|
22
|
+
//# sourceMappingURL=sql-validate-reminder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sql-validate-reminder.d.ts","sourceRoot":"","sources":["../../src/lib/sql-validate-reminder.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,aAAa,EAAY,MAAM,qBAAqB,CAAC;AAQnE,eAAO,MAAM,qBAAqB,uGACgE,CAAC;AAuCnG;;;;;GAKG;AACH,wBAAgB,qBAAqB,IAAI,aAAa,CAQrD;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,mBAAmB,8FAKlC"}
|
package/dist/lib/sql.d.ts
CHANGED
|
@@ -33,11 +33,36 @@ export declare class Text2SqlUnknownAdapterError extends Error {
|
|
|
33
33
|
constructor(adapter: string, available: readonly string[]);
|
|
34
34
|
static isInstance(error: unknown): error is Text2SqlUnknownAdapterError;
|
|
35
35
|
}
|
|
36
|
+
declare const text2SqlUnknownDatabaseMarker: unique symbol;
|
|
37
|
+
/**
|
|
38
|
+
* Thrown by {@link Text2Sql.resolveAdapterName} when a user-supplied `<db>`
|
|
39
|
+
* token cannot be routed to an adapter (unknown name, or none given when more
|
|
40
|
+
* than one is configured). Carries the requested token and the available names
|
|
41
|
+
* so each port (CLI, sandbox command, JSON-RPC, MCP) can render it its own way.
|
|
42
|
+
*/
|
|
43
|
+
export declare class Text2SqlUnknownDatabaseError extends Error {
|
|
44
|
+
[text2SqlUnknownDatabaseMarker]: true;
|
|
45
|
+
readonly requested: string | undefined;
|
|
46
|
+
readonly available: readonly string[];
|
|
47
|
+
constructor(requested: string | undefined, available: readonly string[]);
|
|
48
|
+
static isInstance(error: unknown): error is Text2SqlUnknownDatabaseError;
|
|
49
|
+
}
|
|
36
50
|
export declare class Text2Sql {
|
|
37
51
|
#private;
|
|
38
52
|
constructor(config: Text2SqlConfig);
|
|
39
53
|
adapterNames(): string[];
|
|
40
54
|
hasAdapter(name: string): boolean;
|
|
55
|
+
/**
|
|
56
|
+
* Resolve a user-supplied `<db>` token to a configured adapter name for the
|
|
57
|
+
* surfaces that accept one (CLI, sandbox `sql` command, JSON-RPC daemon, MCP):
|
|
58
|
+
* - exact match → that name
|
|
59
|
+
* - no match (or omitted) but exactly one adapter configured → route to it
|
|
60
|
+
* - otherwise → throw with the user-facing "unknown database" message
|
|
61
|
+
*
|
|
62
|
+
* Internal execution paths keep using the strict {@link Text2Sql.run}/
|
|
63
|
+
* {@link Text2Sql.validate}, which reject an unknown name outright.
|
|
64
|
+
*/
|
|
65
|
+
resolveAdapterName(db: string): string;
|
|
41
66
|
validate(name: string, sql: string): Promise<string>;
|
|
42
67
|
run(name: string, sql: string): Promise<Text2SqlRunResult>;
|
|
43
68
|
index(options?: Text2SqlIndexOptions): Promise<ContextFragment[]>;
|
package/dist/lib/sql.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sql.d.ts","sourceRoot":"","sources":["../../src/lib/sql.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAE3D,OAAO,EAEL,KAAK,4BAA4B,EAClC,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAErD,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,KAAK,aAAa,EAAE,KAAK,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAE7E,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,IAAI,EAAE,SAAS,CAAC;CACjB;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,OAAO,EAAE,CAAC;IAChB,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,oBAAoB;IACnC,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC1B,UAAU,CAAC,EAAE,4BAA4B,CAAC;CAC3C;AAED,QAAA,MAAM,wBAAwB,eAAoC,CAAC;AACnE,QAAA,MAAM,4BAA4B,eAAwC,CAAC;AAE3E,qBAAa,uBAAwB,SAAQ,KAAK;IAChD,CAAC,wBAAwB,CAAC,EAAE,IAAI,CAAC;gBAErB,OAAO,EAAE,MAAM;IAM3B,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,uBAAuB;CAMpE;AAED,qBAAa,2BAA4B,SAAQ,KAAK;IACpD,CAAC,4BAA4B,CAAC,EAAE,IAAI,CAAC;IACrC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,SAAS,EAAE,SAAS,MAAM,EAAE,CAAC;gBAE1B,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,MAAM,EAAE;IASzD,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,2BAA2B;CAMxE;AAED,qBAAa,QAAQ;;gBAIP,MAAM,EAAE,cAAc;IA8BlC,YAAY,IAAI,MAAM,EAAE;IAIxB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;
|
|
1
|
+
{"version":3,"file":"sql.d.ts","sourceRoot":"","sources":["../../src/lib/sql.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@deepagents/text2sql",
|
|
3
|
-
"version": "4.1
|
|
3
|
+
"version": "4.2.1",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -84,35 +84,33 @@
|
|
|
84
84
|
"access": "public"
|
|
85
85
|
},
|
|
86
86
|
"dependencies": {
|
|
87
|
-
"@ai-sdk/groq": "^3.0.
|
|
88
|
-
"@
|
|
89
|
-
"@deepagents/
|
|
90
|
-
"@deepagents/context": "4.1.0",
|
|
91
|
-
"@deepagents/evals": "4.1.0",
|
|
87
|
+
"@ai-sdk/groq": "^3.0.47",
|
|
88
|
+
"@deepagents/agent": "4.2.1",
|
|
89
|
+
"@deepagents/context": "4.2.1",
|
|
92
90
|
"@google-cloud/bigquery": "8.3.0",
|
|
93
|
-
"ai": "^6.0.
|
|
94
|
-
"autoevals": "0.0.132",
|
|
91
|
+
"ai": "^6.0.218",
|
|
95
92
|
"bash-tool": "^1.3.16",
|
|
96
93
|
"cac": "7.0.0",
|
|
97
94
|
"dedent": "1.7.0",
|
|
98
95
|
"just-bash": "^3.0.1",
|
|
99
96
|
"nano-spawn": "^1.0.3",
|
|
100
97
|
"node-sql-parser": "^5.4.0",
|
|
101
|
-
"openai": "5.12.2",
|
|
102
98
|
"p-limit": "^6.2.0",
|
|
103
99
|
"p-retry": "^7.1.1",
|
|
104
100
|
"proper-lockfile": "^4.1.2",
|
|
105
101
|
"sql-formatter": "^15.7.3",
|
|
106
102
|
"uuid": "^13.0.0",
|
|
107
103
|
"xlsx": "^0.18.5",
|
|
108
|
-
"zod": "^3.25.76 || ^4.0.0"
|
|
109
|
-
"@ai-sdk/react": "3.0.176"
|
|
104
|
+
"zod": "^3.25.76 || ^4.0.0"
|
|
110
105
|
},
|
|
111
106
|
"devDependencies": {
|
|
112
|
-
"@ai-sdk/
|
|
107
|
+
"@ai-sdk/openai": "^3.0.80",
|
|
108
|
+
"@ai-sdk/react": "^3.0.220",
|
|
109
|
+
"@deepagents/evals": "4.2.1",
|
|
113
110
|
"@google-cloud/bigquery": "^8.3.0",
|
|
114
111
|
"@types/proper-lockfile": "^4.1.4",
|
|
115
|
-
"autoevals": "^0.0.132"
|
|
112
|
+
"autoevals": "^0.0.132",
|
|
113
|
+
"openai": "5.12.2"
|
|
116
114
|
},
|
|
117
115
|
"peerDependencies": {
|
|
118
116
|
"mssql": "^12.5.2",
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import { type Text2Sql } from './sql.ts';
|
|
2
|
-
/**
|
|
3
|
-
* Resolve a requested `<db>` token to a configured adapter name. Shared by the
|
|
4
|
-
* virtual-sandbox `sql` command and the `sql` CLI so both surfaces behave
|
|
5
|
-
* identically:
|
|
6
|
-
* - exact match → that name
|
|
7
|
-
* - no match but exactly one adapter configured → route to it (silently)
|
|
8
|
-
* - otherwise → throw with the user-facing "unknown database" message
|
|
9
|
-
*
|
|
10
|
-
* `db` is assumed non-empty; callers handle the missing-argument case (their
|
|
11
|
-
* usage strings differ).
|
|
12
|
-
*/
|
|
13
|
-
export declare function resolveAdapter(text2Sql: Text2Sql, db: string): string;
|
|
14
|
-
//# sourceMappingURL=resolve-adapter.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"resolve-adapter.d.ts","sourceRoot":"","sources":["../../src/lib/resolve-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,UAAU,CAAC;AAEzC;;;;;;;;;;GAUG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM,CAMrE"}
|