@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
|
@@ -770,7 +770,7 @@ function message(content) {
|
|
|
770
770
|
} : content;
|
|
771
771
|
return {
|
|
772
772
|
id: message2.id,
|
|
773
|
-
name:
|
|
773
|
+
name: message2.role,
|
|
774
774
|
data: "content",
|
|
775
775
|
type: "message",
|
|
776
776
|
persist: true,
|
|
@@ -792,6 +792,22 @@ function assistantText(content, options) {
|
|
|
792
792
|
parts: [{ type: "text", text: content }]
|
|
793
793
|
});
|
|
794
794
|
}
|
|
795
|
+
var LAZY_ID = Symbol("lazy-id");
|
|
796
|
+
function isLazyFragment(fragment2) {
|
|
797
|
+
return LAZY_ID in fragment2;
|
|
798
|
+
}
|
|
799
|
+
function lastAssistantMessage(content) {
|
|
800
|
+
return {
|
|
801
|
+
name: "assistant",
|
|
802
|
+
type: "message",
|
|
803
|
+
persist: true,
|
|
804
|
+
data: "content",
|
|
805
|
+
[LAZY_ID]: {
|
|
806
|
+
type: "last-assistant",
|
|
807
|
+
content
|
|
808
|
+
}
|
|
809
|
+
};
|
|
810
|
+
}
|
|
795
811
|
var ContextRenderer = class {
|
|
796
812
|
options;
|
|
797
813
|
constructor(options = {}) {
|
|
@@ -1288,6 +1304,12 @@ var ContextEngine = class {
|
|
|
1288
1304
|
if (this.#pendingMessages.length === 0) {
|
|
1289
1305
|
return;
|
|
1290
1306
|
}
|
|
1307
|
+
for (let i = 0; i < this.#pendingMessages.length; i++) {
|
|
1308
|
+
const fragment2 = this.#pendingMessages[i];
|
|
1309
|
+
if (isLazyFragment(fragment2)) {
|
|
1310
|
+
this.#pendingMessages[i] = await this.#resolveLazyFragment(fragment2);
|
|
1311
|
+
}
|
|
1312
|
+
}
|
|
1291
1313
|
let parentId = this.#branch.headMessageId;
|
|
1292
1314
|
const now = Date.now();
|
|
1293
1315
|
for (const fragment2 of this.#pendingMessages) {
|
|
@@ -1307,6 +1329,39 @@ var ContextEngine = class {
|
|
|
1307
1329
|
this.#branch.headMessageId = parentId;
|
|
1308
1330
|
this.#pendingMessages = [];
|
|
1309
1331
|
}
|
|
1332
|
+
/**
|
|
1333
|
+
* Resolve a lazy fragment by finding the appropriate ID.
|
|
1334
|
+
*/
|
|
1335
|
+
async #resolveLazyFragment(fragment2) {
|
|
1336
|
+
const lazy = fragment2[LAZY_ID];
|
|
1337
|
+
if (lazy.type === "last-assistant") {
|
|
1338
|
+
const lastId = await this.#getLastAssistantId();
|
|
1339
|
+
return assistantText(lazy.content, { id: lastId ?? crypto.randomUUID() });
|
|
1340
|
+
}
|
|
1341
|
+
throw new Error(`Unknown lazy fragment type: ${lazy.type}`);
|
|
1342
|
+
}
|
|
1343
|
+
/**
|
|
1344
|
+
* Find the most recent assistant message ID (pending or persisted).
|
|
1345
|
+
*/
|
|
1346
|
+
async #getLastAssistantId() {
|
|
1347
|
+
for (let i = this.#pendingMessages.length - 1; i >= 0; i--) {
|
|
1348
|
+
const msg = this.#pendingMessages[i];
|
|
1349
|
+
if (msg.name === "assistant" && !isLazyFragment(msg)) {
|
|
1350
|
+
return msg.id;
|
|
1351
|
+
}
|
|
1352
|
+
}
|
|
1353
|
+
if (this.#branch?.headMessageId) {
|
|
1354
|
+
const chain = await this.#store.getMessageChain(
|
|
1355
|
+
this.#branch.headMessageId
|
|
1356
|
+
);
|
|
1357
|
+
for (let i = chain.length - 1; i >= 0; i--) {
|
|
1358
|
+
if (chain[i].name === "assistant") {
|
|
1359
|
+
return chain[i].id;
|
|
1360
|
+
}
|
|
1361
|
+
}
|
|
1362
|
+
}
|
|
1363
|
+
return void 0;
|
|
1364
|
+
}
|
|
1310
1365
|
/**
|
|
1311
1366
|
* Estimate token count and cost for the full context.
|
|
1312
1367
|
*
|
|
@@ -1586,6 +1641,35 @@ var ContextEngine = class {
|
|
|
1586
1641
|
consolidate() {
|
|
1587
1642
|
return void 0;
|
|
1588
1643
|
}
|
|
1644
|
+
/**
|
|
1645
|
+
* Extract skill path mappings from available_skills fragments.
|
|
1646
|
+
* Returns array of { host, sandbox } for mounting in sandbox filesystem.
|
|
1647
|
+
*
|
|
1648
|
+
* Reads the original `paths` configuration stored in fragment metadata
|
|
1649
|
+
* by the skills() fragment helper.
|
|
1650
|
+
*
|
|
1651
|
+
* @example
|
|
1652
|
+
* ```ts
|
|
1653
|
+
* const context = new ContextEngine({ store, chatId, userId })
|
|
1654
|
+
* .set(skills({ paths: [{ host: './skills', sandbox: '/skills' }] }));
|
|
1655
|
+
*
|
|
1656
|
+
* const mounts = context.getSkillMounts();
|
|
1657
|
+
* // [{ host: './skills', sandbox: '/skills' }]
|
|
1658
|
+
* ```
|
|
1659
|
+
*/
|
|
1660
|
+
getSkillMounts() {
|
|
1661
|
+
const mounts = [];
|
|
1662
|
+
for (const fragment2 of this.#fragments) {
|
|
1663
|
+
if (fragment2.name === "available_skills" && fragment2.metadata && Array.isArray(fragment2.metadata.paths)) {
|
|
1664
|
+
for (const mapping of fragment2.metadata.paths) {
|
|
1665
|
+
if (typeof mapping === "object" && mapping !== null && typeof mapping.host === "string" && typeof mapping.sandbox === "string") {
|
|
1666
|
+
mounts.push({ host: mapping.host, sandbox: mapping.sandbox });
|
|
1667
|
+
}
|
|
1668
|
+
}
|
|
1669
|
+
}
|
|
1670
|
+
}
|
|
1671
|
+
return mounts;
|
|
1672
|
+
}
|
|
1589
1673
|
/**
|
|
1590
1674
|
* Inspect the full context state for debugging.
|
|
1591
1675
|
* Returns a JSON-serializable object with context information.
|
|
@@ -1904,18 +1988,19 @@ var SqliteContextStore = class extends ContextStore {
|
|
|
1904
1988
|
// Message Operations (Graph Nodes)
|
|
1905
1989
|
// ==========================================================================
|
|
1906
1990
|
async addMessage(message2) {
|
|
1991
|
+
const existingParent = message2.parentId === message2.id ? this.#db.prepare("SELECT parentId FROM messages WHERE id = ?").get(message2.id) : void 0;
|
|
1992
|
+
const parentId = message2.parentId === message2.id ? existingParent?.parentId ?? null : message2.parentId;
|
|
1907
1993
|
this.#db.prepare(
|
|
1908
1994
|
`INSERT INTO messages (id, chatId, parentId, name, type, data, createdAt)
|
|
1909
1995
|
VALUES (?, ?, ?, ?, ?, ?, ?)
|
|
1910
1996
|
ON CONFLICT(id) DO UPDATE SET
|
|
1911
|
-
parentId = excluded.parentId,
|
|
1912
1997
|
name = excluded.name,
|
|
1913
1998
|
type = excluded.type,
|
|
1914
1999
|
data = excluded.data`
|
|
1915
2000
|
).run(
|
|
1916
2001
|
message2.id,
|
|
1917
2002
|
message2.chatId,
|
|
1918
|
-
|
|
2003
|
+
parentId,
|
|
1919
2004
|
message2.name,
|
|
1920
2005
|
message2.type ?? null,
|
|
1921
2006
|
JSON.stringify(message2.data),
|
|
@@ -2383,13 +2468,9 @@ var Agent = class _Agent {
|
|
|
2383
2468
|
writer.write({ type: "finish" });
|
|
2384
2469
|
return;
|
|
2385
2470
|
}
|
|
2386
|
-
writer
|
|
2387
|
-
type: "text-delta",
|
|
2388
|
-
id: generateId2(),
|
|
2389
|
-
delta: ` ${failureFeedback}`
|
|
2390
|
-
});
|
|
2471
|
+
writeText(writer, failureFeedback);
|
|
2391
2472
|
const selfCorrectionText = accumulatedText + " " + failureFeedback;
|
|
2392
|
-
context.set(
|
|
2473
|
+
context.set(lastAssistantMessage(selfCorrectionText));
|
|
2393
2474
|
await context.save();
|
|
2394
2475
|
currentResult = await this.#createRawStream(
|
|
2395
2476
|
contextVariables,
|
|
@@ -2442,6 +2523,22 @@ var repairToolCall = async ({
|
|
|
2442
2523
|
});
|
|
2443
2524
|
return { ...toolCall, input: JSON.stringify(output) };
|
|
2444
2525
|
};
|
|
2526
|
+
function writeText(writer, text) {
|
|
2527
|
+
const feedbackPartId = generateId2();
|
|
2528
|
+
writer.write({
|
|
2529
|
+
id: feedbackPartId,
|
|
2530
|
+
type: "text-start"
|
|
2531
|
+
});
|
|
2532
|
+
writer.write({
|
|
2533
|
+
id: feedbackPartId,
|
|
2534
|
+
type: "text-delta",
|
|
2535
|
+
delta: ` ${text}`
|
|
2536
|
+
});
|
|
2537
|
+
writer.write({
|
|
2538
|
+
id: feedbackPartId,
|
|
2539
|
+
type: "text-end"
|
|
2540
|
+
});
|
|
2541
|
+
}
|
|
2445
2542
|
|
|
2446
2543
|
// packages/text2sql/src/lib/adapters/groundings/report.grounding.ts
|
|
2447
2544
|
var ReportGrounding = class extends AbstractGrounding {
|