@deepagents/text2sql 6.1.0 → 7.0.0

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.
Files changed (44) hide show
  1. package/README.md +16 -1
  2. package/dist/index.js +5 -2
  3. package/dist/index.js.map +2 -2
  4. package/dist/lib/adapters/adapter.d.ts +1 -0
  5. package/dist/lib/adapters/adapter.d.ts.map +1 -1
  6. package/dist/lib/adapters/bigquery/index.js +91 -8
  7. package/dist/lib/adapters/bigquery/index.js.map +3 -3
  8. package/dist/lib/adapters/clickhouse/index.js +5 -2
  9. package/dist/lib/adapters/clickhouse/index.js.map +2 -2
  10. package/dist/lib/adapters/duckdb/duckdb-identifiers.d.ts +8 -0
  11. package/dist/lib/adapters/duckdb/duckdb-identifiers.d.ts.map +1 -0
  12. package/dist/lib/adapters/duckdb/duckdb.d.ts +40 -0
  13. package/dist/lib/adapters/duckdb/duckdb.d.ts.map +1 -0
  14. package/dist/lib/adapters/duckdb/duckdb.groundings.d.ts +58 -0
  15. package/dist/lib/adapters/duckdb/duckdb.groundings.d.ts.map +1 -0
  16. package/dist/lib/adapters/duckdb/duckdb.sql-policy.d.ts +8 -0
  17. package/dist/lib/adapters/duckdb/duckdb.sql-policy.d.ts.map +1 -0
  18. package/dist/lib/adapters/duckdb/index.d.ts +34 -0
  19. package/dist/lib/adapters/duckdb/index.d.ts.map +1 -0
  20. package/dist/lib/adapters/duckdb/index.js +1933 -0
  21. package/dist/lib/adapters/duckdb/index.js.map +7 -0
  22. package/dist/lib/adapters/mysql/index.js +91 -8
  23. package/dist/lib/adapters/mysql/index.js.map +3 -3
  24. package/dist/lib/adapters/parser-sql-policy.d.ts.map +1 -1
  25. package/dist/lib/adapters/postgres/index.js +91 -8
  26. package/dist/lib/adapters/postgres/index.js.map +3 -3
  27. package/dist/lib/adapters/postgres/postgres-parser-workaround.d.ts +8 -0
  28. package/dist/lib/adapters/postgres/postgres-parser-workaround.d.ts.map +1 -0
  29. package/dist/lib/adapters/posthog/index.js +18 -4
  30. package/dist/lib/adapters/posthog/index.js.map +2 -2
  31. package/dist/lib/adapters/posthog/posthog.d.ts +2 -1
  32. package/dist/lib/adapters/posthog/posthog.d.ts.map +1 -1
  33. package/dist/lib/adapters/posthog/types.d.ts +2 -0
  34. package/dist/lib/adapters/posthog/types.d.ts.map +1 -1
  35. package/dist/lib/adapters/spreadsheet/index.js +91 -8
  36. package/dist/lib/adapters/spreadsheet/index.js.map +3 -3
  37. package/dist/lib/adapters/sqlite/index.js +91 -8
  38. package/dist/lib/adapters/sqlite/index.js.map +3 -3
  39. package/dist/lib/adapters/sqlserver/index.js +91 -8
  40. package/dist/lib/adapters/sqlserver/index.js.map +3 -3
  41. package/dist/lib/agents/question.agent.d.ts.map +1 -1
  42. package/dist/lib/synthesis/extractors/base-contextual-extractor.d.ts.map +1 -1
  43. package/dist/lib/synthesis/index.js.map +2 -2
  44. package/package.json +18 -19
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/lib/adapters/posthog/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/lib/adapters/posthog/types.ts"],"names":[],"mappings":"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"}
@@ -398,7 +398,7 @@ var Adapter = class {
398
398
  }
399
399
  }
400
400
  #decodeShellEscapes(sql) {
401
- return sql.replace(/\\n/g, "\n").replace(/\\t/g, " ").replace(/\\([().*])/g, "$1").replace(/\\(?=$)/gm, "");
401
+ return sql.replace(/\\n/g, "\n").replace(/\\t/g, " ").replace(/\\([().*$])/g, "$1").replace(/\\(?=$)/gm, "");
402
402
  }
403
403
  #cachedAllowedEntities = null;
404
404
  async #resolveScope() {
@@ -419,6 +419,9 @@ var Adapter = class {
419
419
  return this.validateImpl(decoded);
420
420
  }
421
421
  async execute(sql) {
422
+ return this.executeImpl(await this.enforceExecutionPolicy(sql));
423
+ }
424
+ async enforceExecutionPolicy(sql) {
422
425
  const decoded = this.#decodeShellEscapes(sql);
423
426
  const violation = await this.#analyzePolicy(decoded);
424
427
  if (violation?.kind === "read-only") {
@@ -427,7 +430,7 @@ var Adapter = class {
427
430
  if (violation?.kind === "scope") {
428
431
  throw new SQLScopeError(violation.payload);
429
432
  }
430
- return this.executeImpl(decoded);
433
+ return decoded;
431
434
  }
432
435
  /**
433
436
  * Convert unknown database value to number.
@@ -1098,6 +1101,71 @@ function buildScopeParseErrorPayload(sql, parserDialect, error) {
1098
1101
  };
1099
1102
  }
1100
1103
 
1104
+ // packages/text2sql/src/lib/adapters/postgres/postgres-parser-workaround.ts
1105
+ var TYPE_BEFORE_LITERAL = /(?<type>(?:pg_catalog\.)?[A-Za-z_][A-Za-z0-9_$]*(?:\s+(?:varying|precision))?(?:\s*\(\s*\d+(?:\s*,\s*\d+)?\s*\))?(?:\s+(?:with|without)\s+time\s+zone)?)\s*$/i;
1106
+ var TIME_ZONE_SUFFIX = /^\s+time\s+zone\s+/i;
1107
+ var TIME_BEFORE_SUFFIX = /(?<type>time(?:stamp)?(?:\s*\(\s*\d+\s*\))?)\s+(?<qualifier>with|without)$/i;
1108
+ function recoverPostgresTypedLiteralParserGap(sql, error) {
1109
+ const errorOffset = parserErrorOffset(error);
1110
+ if (errorOffset === null) return null;
1111
+ const prefix = sql.slice(0, errorOffset);
1112
+ let literalStart = errorOffset;
1113
+ let literalEnd = findLiteralEnd(sql, literalStart);
1114
+ let typeMatch = TYPE_BEFORE_LITERAL.exec(prefix);
1115
+ let type = typeMatch?.groups?.type;
1116
+ if (literalEnd === null) {
1117
+ const suffixMatch = TIME_ZONE_SUFFIX.exec(sql.slice(errorOffset));
1118
+ typeMatch = TIME_BEFORE_SUFFIX.exec(prefix);
1119
+ type = typeMatch?.groups?.type && typeMatch.groups.qualifier && suffixMatch ? `${typeMatch.groups.type} ${typeMatch.groups.qualifier} TIME ZONE` : void 0;
1120
+ literalStart = errorOffset + (suffixMatch?.[0].length ?? 0);
1121
+ literalEnd = findLiteralEnd(sql, literalStart);
1122
+ }
1123
+ if (!type || typeMatch?.index === void 0 || literalEnd === null)
1124
+ return null;
1125
+ return prefix.slice(0, typeMatch.index) + `CAST(${sql.slice(literalStart, literalEnd)} AS ${parserType(type)})` + sql.slice(literalEnd);
1126
+ }
1127
+ function parserErrorOffset(error) {
1128
+ if (typeof error !== "object" || error === null) return null;
1129
+ const location = Reflect.get(error, "location");
1130
+ if (typeof location !== "object" || location === null) return null;
1131
+ const start = Reflect.get(location, "start");
1132
+ if (typeof start !== "object" || start === null) return null;
1133
+ const offset = Reflect.get(start, "offset");
1134
+ return typeof offset === "number" ? offset : null;
1135
+ }
1136
+ function findLiteralEnd(sql, start) {
1137
+ if (sql[start] !== "'") {
1138
+ const delimiter = /^\$(?:[A-Za-z_][A-Za-z0-9_]*)?\$/.exec(
1139
+ sql.slice(start)
1140
+ )?.[0];
1141
+ if (!delimiter) return null;
1142
+ const end = sql.indexOf(delimiter, start + delimiter.length);
1143
+ return end === -1 ? null : end + delimiter.length;
1144
+ }
1145
+ let offset = start + 1;
1146
+ while (offset < sql.length) {
1147
+ if (sql[offset] === "\\") {
1148
+ offset += 2;
1149
+ continue;
1150
+ }
1151
+ if (sql[offset] !== "'") {
1152
+ offset++;
1153
+ continue;
1154
+ }
1155
+ if (sql[offset + 1] === "'") {
1156
+ offset += 2;
1157
+ continue;
1158
+ }
1159
+ return offset + 1;
1160
+ }
1161
+ return null;
1162
+ }
1163
+ function parserType(type) {
1164
+ const unqualified = type.replace(/^pg_catalog\./i, "");
1165
+ const timetz = /^timetz(\s*\([^)]*\))?$/i.exec(unqualified);
1166
+ return timetz ? `TIME${timetz[1] ?? ""} WITH TIME ZONE` : unqualified;
1167
+ }
1168
+
1101
1169
  // packages/text2sql/src/lib/adapters/parser-sql-policy.ts
1102
1170
  var READ_ONLY_MESSAGE = "only SELECT or WITH queries allowed";
1103
1171
  var { Parser } = nodeSqlParser;
@@ -1122,7 +1190,7 @@ var ParserSqlPolicyAnalyzer = class {
1122
1190
  #readParsedStatements(sql) {
1123
1191
  for (const dialect of this.dialects) {
1124
1192
  try {
1125
- return parseStatements(sql, dialect);
1193
+ return this.#parseStatements(sql, dialect);
1126
1194
  } catch {
1127
1195
  }
1128
1196
  }
@@ -1134,7 +1202,7 @@ var ParserSqlPolicyAnalyzer = class {
1134
1202
  let lastDialect = this.dialects[0];
1135
1203
  for (const dialect of this.dialects) {
1136
1204
  try {
1137
- references = extractBaseEntityReferences(sql, dialect);
1205
+ references = extractBaseEntityReferences(this.#parseAst(sql, dialect));
1138
1206
  break;
1139
1207
  } catch (error) {
1140
1208
  lastDialect = dialect;
@@ -1169,9 +1237,25 @@ var ParserSqlPolicyAnalyzer = class {
1169
1237
  });
1170
1238
  return outOfScope.length === 0 ? null : buildOutOfScopePayload(sql, outOfScope, [...allowedEntities]);
1171
1239
  }
1240
+ #parseStatements(sql, dialect) {
1241
+ return parseStatements(this.#parseAst(sql, dialect));
1242
+ }
1243
+ #parseAst(sql, dialect) {
1244
+ let parserSql = sql;
1245
+ const attempted = /* @__PURE__ */ new Set([sql]);
1246
+ while (true) {
1247
+ try {
1248
+ return parser.astify(parserSql, { database: dialect });
1249
+ } catch (error) {
1250
+ const recovered = dialect === "postgresql" ? recoverPostgresTypedLiteralParserGap(parserSql, error) : null;
1251
+ if (!recovered || attempted.has(recovered)) throw error;
1252
+ attempted.add(recovered);
1253
+ parserSql = recovered;
1254
+ }
1255
+ }
1256
+ }
1172
1257
  };
1173
- function parseStatements(sql, dialect) {
1174
- const ast = parser.astify(sql, { database: dialect });
1258
+ function parseStatements(ast) {
1175
1259
  const statements = Array.isArray(ast) ? ast : [ast];
1176
1260
  return statements.filter(isAstLike);
1177
1261
  }
@@ -1228,8 +1312,7 @@ function appendIdentifierParts(parts, value) {
1228
1312
  ...value.toLowerCase().split(".").filter((part) => part.length > 0)
1229
1313
  );
1230
1314
  }
1231
- function extractBaseEntityReferences(sql, dialect) {
1232
- const ast = parser.astify(sql, { database: dialect });
1315
+ function extractBaseEntityReferences(ast) {
1233
1316
  const state = {
1234
1317
  cteNames: /* @__PURE__ */ new Set(),
1235
1318
  references: /* @__PURE__ */ new Map()