@deepagents/text2sql 0.12.0 → 0.12.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/dist/index.js +146 -23
- package/dist/index.js.map +3 -3
- package/dist/lib/adapters/groundings/index.js +106 -9
- package/dist/lib/adapters/groundings/index.js.map +3 -3
- package/dist/lib/adapters/mysql/index.js +106 -9
- package/dist/lib/adapters/mysql/index.js.map +3 -3
- package/dist/lib/adapters/postgres/index.js +106 -9
- package/dist/lib/adapters/postgres/index.js.map +3 -3
- package/dist/lib/adapters/spreadsheet/index.js +1 -0
- package/dist/lib/adapters/spreadsheet/index.js.map +2 -2
- package/dist/lib/adapters/sqlite/index.js +106 -9
- package/dist/lib/adapters/sqlite/index.js.map +3 -3
- package/dist/lib/adapters/sqlserver/column-stats.sqlserver.grounding.d.ts.map +1 -1
- package/dist/lib/adapters/sqlserver/index.js +107 -12
- package/dist/lib/adapters/sqlserver/index.js.map +3 -3
- package/dist/lib/agents/result-tools.d.ts +3 -0
- package/dist/lib/agents/result-tools.d.ts.map +1 -1
- package/dist/lib/agents/sql.agent.d.ts +1 -1
- package/dist/lib/agents/sql.agent.d.ts.map +1 -1
- package/dist/lib/sql.d.ts.map +1 -1
- package/dist/lib/synthesis/index.js +115 -8
- package/dist/lib/synthesis/index.js.map +3 -3
- package/dist/lib/synthesis/synthesizers/depth-evolver.d.ts +3 -3
- package/dist/lib/synthesis/synthesizers/depth-evolver.d.ts.map +1 -1
- package/dist/lib/synthesis/synthesizers/schema-synthesizer.d.ts +1 -1
- package/dist/lib/synthesis/synthesizers/schema-synthesizer.d.ts.map +1 -1
- package/package.json +4 -4
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { SkillPathMapping } from '@deepagents/context';
|
|
1
2
|
import type { Adapter } from '../adapters/adapter.ts';
|
|
2
3
|
/**
|
|
3
4
|
* Options for creating result tools.
|
|
@@ -9,6 +10,8 @@ export interface ResultToolsOptions {
|
|
|
9
10
|
chatId: string;
|
|
10
11
|
/** Message ID for turn-level artifact isolation */
|
|
11
12
|
messageId: string;
|
|
13
|
+
/** Skill mounts mapping host paths to sandbox paths */
|
|
14
|
+
skillMounts?: SkillPathMapping[];
|
|
12
15
|
}
|
|
13
16
|
/**
|
|
14
17
|
* Creates bash tool with integrated sql command.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"result-tools.d.ts","sourceRoot":"","sources":["../../../src/lib/agents/result-tools.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"result-tools.d.ts","sourceRoot":"","sources":["../../../src/lib/agents/result-tools.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAE5D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAwKtD;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,iDAAiD;IACjD,OAAO,EAAE,OAAO,CAAC;IACjB,wDAAwD;IACxD,MAAM,EAAE,MAAM,CAAC;IACf,mDAAmD;IACnD,SAAS,EAAE,MAAM,CAAC;IAClB,uDAAuD;IACvD,WAAW,CAAC,EAAE,gBAAgB,EAAE,CAAC;CAClC;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,kBAAkB;;;;;GA4DlE"}
|
|
@@ -11,7 +11,7 @@ export interface ToSqlOptions {
|
|
|
11
11
|
/** Instructions/teachings to include */
|
|
12
12
|
instructions: ContextFragment[];
|
|
13
13
|
/** Optional model override */
|
|
14
|
-
model
|
|
14
|
+
model: AgentModel;
|
|
15
15
|
/** Maximum retry attempts on validation failure (default: 3) */
|
|
16
16
|
maxRetries?: number;
|
|
17
17
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sql.agent.d.ts","sourceRoot":"","sources":["../../../src/lib/agents/sql.agent.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"sql.agent.d.ts","sourceRoot":"","sources":["../../../src/lib/agents/sql.agent.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAEL,KAAK,eAAe,EAKrB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAEtD,MAAM,WAAW,YAAY;IAC3B,mDAAmD;IACnD,KAAK,EAAE,MAAM,CAAC;IACd,sCAAsC;IACtC,OAAO,EAAE,OAAO,CAAC;IACjB,kDAAkD;IAClD,eAAe,EAAE,eAAe,EAAE,CAAC;IACnC,wCAAwC;IACxC,YAAY,EAAE,eAAe,EAAE,CAAC;IAChC,8BAA8B;IAC9B,KAAK,EAAE,UAAU,CAAC;IAClB,gEAAgE;IAChE,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,WAAW;IAC1B,8BAA8B;IAC9B,GAAG,EAAE,MAAM,CAAC;IACZ,8BAA8B;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,8DAA8D;IAC9D,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB;AAiBD,QAAA,MAAM,MAAM,eAA+B,CAAC;AAC5C;;GAEG;AACH,qBAAa,kBAAmB,SAAQ,KAAK;IAC3C,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC;gBACH,OAAO,EAAE,MAAM;IAK3B,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,kBAAkB;CAG/D;AAED;;GAEG;AACH,qBAAa,oBAAqB,SAAQ,KAAK;gBACjC,OAAO,EAAE,MAAM;IAI3B,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,oBAAoB;CAGjE;AAED,wBAAsB,KAAK,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC,CAuFvE"}
|
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,EAKL,KAAK,SAAS,EAEf,MAAM,IAAI,CAAC;AAEZ,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAEL,KAAK,eAAe,EACpB,KAAK,YAAY,EASlB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAIrD,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAEjE,OAAO,EAAE,KAAK,gBAAgB,EAAc,MAAM,mBAAmB,CAAC;AACtE,OAAO,EAAE,KAAK,aAAa,EAAE,KAAK,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAE7E,qBAAa,QAAQ;;gBAUP,MAAM,EAAE;QAClB,OAAO,EAAE,OAAO,CAAC;QACjB,KAAK,EAAE,YAAY,CAAC;QACpB,OAAO,EAAE,MAAM,CAAC;QAChB,KAAK,CAAC,EAAE,cAAc,CAAC;QACvB,YAAY,CAAC,EAAE,eAAe,EAAE,CAAC;QACjC,KAAK,EAAE,UAAU,CAAC;QAClB;;;WAGG;QACH,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;KACrC;IAgBY,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAclD;;;OAGG;IACU,KAAK,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC;IAUhD;;;;;;;;;;;;;;;;;;OAkBG;IACU,OAAO,CAAC,CAAC,SAAS,YAAY,EACzC,OAAO,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,CAAC,GAC/B,OAAO,CAAC,aAAa,EAAE,CAAC;IA6Bd,IAAI,CACf,QAAQ,EAAE,SAAS,EAAE,EACrB,MAAM,EAAE;QACN,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,MAAM,CAAC;KAChB;
|
|
1
|
+
{"version":3,"file":"sql.d.ts","sourceRoot":"","sources":["../../src/lib/sql.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,KAAK,SAAS,EAEf,MAAM,IAAI,CAAC;AAEZ,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAEL,KAAK,eAAe,EACpB,KAAK,YAAY,EASlB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAIrD,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAEjE,OAAO,EAAE,KAAK,gBAAgB,EAAc,MAAM,mBAAmB,CAAC;AACtE,OAAO,EAAE,KAAK,aAAa,EAAE,KAAK,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAE7E,qBAAa,QAAQ;;gBAUP,MAAM,EAAE;QAClB,OAAO,EAAE,OAAO,CAAC;QACjB,KAAK,EAAE,YAAY,CAAC;QACpB,OAAO,EAAE,MAAM,CAAC;QAChB,KAAK,CAAC,EAAE,cAAc,CAAC;QACvB,YAAY,CAAC,EAAE,eAAe,EAAE,CAAC;QACjC,KAAK,EAAE,UAAU,CAAC;QAClB;;;WAGG;QACH,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;KACrC;IAgBY,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAclD;;;OAGG;IACU,KAAK,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC;IAUhD;;;;;;;;;;;;;;;;;;OAkBG;IACU,OAAO,CAAC,CAAC,SAAS,YAAY,EACzC,OAAO,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,CAAC,GAC/B,OAAO,CAAC,aAAa,EAAE,CAAC;IA6Bd,IAAI,CACf,QAAQ,EAAE,SAAS,EAAE,EACrB,MAAM,EAAE;QACN,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,MAAM,CAAC;KAChB;IAsFH;;;OAGG;IACU,SAAS,CACpB,QAAQ,EAAE,SAAS,EAAE,EACrB,MAAM,EAAE;QACN,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,MAAM,CAAC;KAChB;CA0DJ"}
|
|
@@ -361,6 +361,23 @@ function user(content) {
|
|
|
361
361
|
}
|
|
362
362
|
};
|
|
363
363
|
}
|
|
364
|
+
function assistant(message2) {
|
|
365
|
+
return {
|
|
366
|
+
id: message2.id,
|
|
367
|
+
name: "assistant",
|
|
368
|
+
data: "content",
|
|
369
|
+
type: "message",
|
|
370
|
+
persist: true,
|
|
371
|
+
codec: {
|
|
372
|
+
decode() {
|
|
373
|
+
return message2;
|
|
374
|
+
},
|
|
375
|
+
encode() {
|
|
376
|
+
return message2;
|
|
377
|
+
}
|
|
378
|
+
}
|
|
379
|
+
};
|
|
380
|
+
}
|
|
364
381
|
function message(content) {
|
|
365
382
|
const message2 = typeof content === "string" ? {
|
|
366
383
|
id: generateId(),
|
|
@@ -369,7 +386,7 @@ function message(content) {
|
|
|
369
386
|
} : content;
|
|
370
387
|
return {
|
|
371
388
|
id: message2.id,
|
|
372
|
-
name:
|
|
389
|
+
name: message2.role,
|
|
373
390
|
data: "content",
|
|
374
391
|
type: "message",
|
|
375
392
|
persist: true,
|
|
@@ -383,6 +400,18 @@ function message(content) {
|
|
|
383
400
|
}
|
|
384
401
|
};
|
|
385
402
|
}
|
|
403
|
+
function assistantText(content, options) {
|
|
404
|
+
const id = options?.id ?? crypto.randomUUID();
|
|
405
|
+
return assistant({
|
|
406
|
+
id,
|
|
407
|
+
role: "assistant",
|
|
408
|
+
parts: [{ type: "text", text: content }]
|
|
409
|
+
});
|
|
410
|
+
}
|
|
411
|
+
var LAZY_ID = Symbol("lazy-id");
|
|
412
|
+
function isLazyFragment(fragment2) {
|
|
413
|
+
return LAZY_ID in fragment2;
|
|
414
|
+
}
|
|
386
415
|
var ContextRenderer = class {
|
|
387
416
|
options;
|
|
388
417
|
constructor(options = {}) {
|
|
@@ -879,6 +908,12 @@ var ContextEngine = class {
|
|
|
879
908
|
if (this.#pendingMessages.length === 0) {
|
|
880
909
|
return;
|
|
881
910
|
}
|
|
911
|
+
for (let i = 0; i < this.#pendingMessages.length; i++) {
|
|
912
|
+
const fragment2 = this.#pendingMessages[i];
|
|
913
|
+
if (isLazyFragment(fragment2)) {
|
|
914
|
+
this.#pendingMessages[i] = await this.#resolveLazyFragment(fragment2);
|
|
915
|
+
}
|
|
916
|
+
}
|
|
882
917
|
let parentId = this.#branch.headMessageId;
|
|
883
918
|
const now = Date.now();
|
|
884
919
|
for (const fragment2 of this.#pendingMessages) {
|
|
@@ -898,6 +933,39 @@ var ContextEngine = class {
|
|
|
898
933
|
this.#branch.headMessageId = parentId;
|
|
899
934
|
this.#pendingMessages = [];
|
|
900
935
|
}
|
|
936
|
+
/**
|
|
937
|
+
* Resolve a lazy fragment by finding the appropriate ID.
|
|
938
|
+
*/
|
|
939
|
+
async #resolveLazyFragment(fragment2) {
|
|
940
|
+
const lazy = fragment2[LAZY_ID];
|
|
941
|
+
if (lazy.type === "last-assistant") {
|
|
942
|
+
const lastId = await this.#getLastAssistantId();
|
|
943
|
+
return assistantText(lazy.content, { id: lastId ?? crypto.randomUUID() });
|
|
944
|
+
}
|
|
945
|
+
throw new Error(`Unknown lazy fragment type: ${lazy.type}`);
|
|
946
|
+
}
|
|
947
|
+
/**
|
|
948
|
+
* Find the most recent assistant message ID (pending or persisted).
|
|
949
|
+
*/
|
|
950
|
+
async #getLastAssistantId() {
|
|
951
|
+
for (let i = this.#pendingMessages.length - 1; i >= 0; i--) {
|
|
952
|
+
const msg = this.#pendingMessages[i];
|
|
953
|
+
if (msg.name === "assistant" && !isLazyFragment(msg)) {
|
|
954
|
+
return msg.id;
|
|
955
|
+
}
|
|
956
|
+
}
|
|
957
|
+
if (this.#branch?.headMessageId) {
|
|
958
|
+
const chain = await this.#store.getMessageChain(
|
|
959
|
+
this.#branch.headMessageId
|
|
960
|
+
);
|
|
961
|
+
for (let i = chain.length - 1; i >= 0; i--) {
|
|
962
|
+
if (chain[i].name === "assistant") {
|
|
963
|
+
return chain[i].id;
|
|
964
|
+
}
|
|
965
|
+
}
|
|
966
|
+
}
|
|
967
|
+
return void 0;
|
|
968
|
+
}
|
|
901
969
|
/**
|
|
902
970
|
* Estimate token count and cost for the full context.
|
|
903
971
|
*
|
|
@@ -1177,6 +1245,35 @@ var ContextEngine = class {
|
|
|
1177
1245
|
consolidate() {
|
|
1178
1246
|
return void 0;
|
|
1179
1247
|
}
|
|
1248
|
+
/**
|
|
1249
|
+
* Extract skill path mappings from available_skills fragments.
|
|
1250
|
+
* Returns array of { host, sandbox } for mounting in sandbox filesystem.
|
|
1251
|
+
*
|
|
1252
|
+
* Reads the original `paths` configuration stored in fragment metadata
|
|
1253
|
+
* by the skills() fragment helper.
|
|
1254
|
+
*
|
|
1255
|
+
* @example
|
|
1256
|
+
* ```ts
|
|
1257
|
+
* const context = new ContextEngine({ store, chatId, userId })
|
|
1258
|
+
* .set(skills({ paths: [{ host: './skills', sandbox: '/skills' }] }));
|
|
1259
|
+
*
|
|
1260
|
+
* const mounts = context.getSkillMounts();
|
|
1261
|
+
* // [{ host: './skills', sandbox: '/skills' }]
|
|
1262
|
+
* ```
|
|
1263
|
+
*/
|
|
1264
|
+
getSkillMounts() {
|
|
1265
|
+
const mounts = [];
|
|
1266
|
+
for (const fragment2 of this.#fragments) {
|
|
1267
|
+
if (fragment2.name === "available_skills" && fragment2.metadata && Array.isArray(fragment2.metadata.paths)) {
|
|
1268
|
+
for (const mapping of fragment2.metadata.paths) {
|
|
1269
|
+
if (typeof mapping === "object" && mapping !== null && typeof mapping.host === "string" && typeof mapping.sandbox === "string") {
|
|
1270
|
+
mounts.push({ host: mapping.host, sandbox: mapping.sandbox });
|
|
1271
|
+
}
|
|
1272
|
+
}
|
|
1273
|
+
}
|
|
1274
|
+
}
|
|
1275
|
+
return mounts;
|
|
1276
|
+
}
|
|
1180
1277
|
/**
|
|
1181
1278
|
* Inspect the full context state for debugging.
|
|
1182
1279
|
* Returns a JSON-serializable object with context information.
|
|
@@ -1575,18 +1672,19 @@ var SqliteContextStore = class extends ContextStore {
|
|
|
1575
1672
|
// Message Operations (Graph Nodes)
|
|
1576
1673
|
// ==========================================================================
|
|
1577
1674
|
async addMessage(message2) {
|
|
1675
|
+
const existingParent = message2.parentId === message2.id ? this.#db.prepare("SELECT parentId FROM messages WHERE id = ?").get(message2.id) : void 0;
|
|
1676
|
+
const parentId = message2.parentId === message2.id ? existingParent?.parentId ?? null : message2.parentId;
|
|
1578
1677
|
this.#db.prepare(
|
|
1579
1678
|
`INSERT INTO messages (id, chatId, parentId, name, type, data, createdAt)
|
|
1580
1679
|
VALUES (?, ?, ?, ?, ?, ?, ?)
|
|
1581
1680
|
ON CONFLICT(id) DO UPDATE SET
|
|
1582
|
-
parentId = excluded.parentId,
|
|
1583
1681
|
name = excluded.name,
|
|
1584
1682
|
type = excluded.type,
|
|
1585
1683
|
data = excluded.data`
|
|
1586
1684
|
).run(
|
|
1587
1685
|
message2.id,
|
|
1588
1686
|
message2.chatId,
|
|
1589
|
-
|
|
1687
|
+
parentId,
|
|
1590
1688
|
message2.name,
|
|
1591
1689
|
message2.type ?? null,
|
|
1592
1690
|
JSON.stringify(message2.data),
|
|
@@ -2106,9 +2204,9 @@ var BaseContextualExtractor = class extends PairProducer {
|
|
|
2106
2204
|
conversationContext: snapshot
|
|
2107
2205
|
});
|
|
2108
2206
|
}
|
|
2109
|
-
const
|
|
2110
|
-
if (
|
|
2111
|
-
this.context.push(`Assistant: ${
|
|
2207
|
+
const assistantText2 = getMessageText(message2);
|
|
2208
|
+
if (assistantText2) {
|
|
2209
|
+
this.context.push(`Assistant: ${assistantText2}`);
|
|
2112
2210
|
}
|
|
2113
2211
|
}
|
|
2114
2212
|
/**
|
|
@@ -2598,7 +2696,9 @@ import {
|
|
|
2598
2696
|
NoContentGeneratedError,
|
|
2599
2697
|
NoObjectGeneratedError,
|
|
2600
2698
|
NoOutputGeneratedError,
|
|
2601
|
-
TypeValidationError
|
|
2699
|
+
TypeValidationError,
|
|
2700
|
+
defaultSettingsMiddleware,
|
|
2701
|
+
wrapLanguageModel
|
|
2602
2702
|
} from "ai";
|
|
2603
2703
|
import { Console } from "node:console";
|
|
2604
2704
|
import { createWriteStream } from "node:fs";
|
|
@@ -2610,6 +2710,7 @@ var logger = new Console({
|
|
|
2610
2710
|
stderr: createWriteStream("./sql-agent-error.log", { flags: "a" }),
|
|
2611
2711
|
inspectOptions: { depth: null }
|
|
2612
2712
|
});
|
|
2713
|
+
var RETRY_TEMPERATURES = [0, 0.2, 0.3];
|
|
2613
2714
|
function extractSql(output) {
|
|
2614
2715
|
const match = output.match(/```sql\n?([\s\S]*?)```/);
|
|
2615
2716
|
return match ? match[1].trim() : output.trim();
|
|
@@ -2663,8 +2764,14 @@ async function toSql(options) {
|
|
|
2663
2764
|
} else {
|
|
2664
2765
|
context.set(user(options.input));
|
|
2665
2766
|
}
|
|
2767
|
+
const temperature = RETRY_TEMPERATURES[attemptNumber - 1] ?? RETRY_TEMPERATURES[RETRY_TEMPERATURES.length - 1];
|
|
2768
|
+
const baseModel = options.model ?? groq6("openai/gpt-oss-20b");
|
|
2769
|
+
const model = wrapLanguageModel({
|
|
2770
|
+
model: baseModel,
|
|
2771
|
+
middleware: defaultSettingsMiddleware({ settings: { temperature } })
|
|
2772
|
+
});
|
|
2666
2773
|
const sqlOutput = structuredOutput({
|
|
2667
|
-
model
|
|
2774
|
+
model,
|
|
2668
2775
|
context,
|
|
2669
2776
|
schema: z5.union([
|
|
2670
2777
|
z5.object({
|