@deepagents/text2sql 0.37.0 → 0.38.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 (38) hide show
  1. package/README.md +10 -1
  2. package/dist/index.js +159 -40
  3. package/dist/index.js.map +2 -2
  4. package/dist/lib/adapters/adapter.d.ts +4 -4
  5. package/dist/lib/adapters/adapter.d.ts.map +1 -1
  6. package/dist/lib/adapters/bigquery/constraint.bigquery.grounding.d.ts.map +1 -1
  7. package/dist/lib/adapters/bigquery/index.js +160 -31
  8. package/dist/lib/adapters/bigquery/index.js.map +3 -3
  9. package/dist/lib/adapters/bigquery/indexes.bigquery.grounding.d.ts.map +1 -1
  10. package/dist/lib/adapters/bigquery/row-count.bigquery.grounding.d.ts.map +1 -1
  11. package/dist/lib/adapters/groundings/abstract.grounding.d.ts +3 -1
  12. package/dist/lib/adapters/groundings/abstract.grounding.d.ts.map +1 -1
  13. package/dist/lib/adapters/groundings/column-stats.grounding.d.ts.map +1 -1
  14. package/dist/lib/adapters/groundings/column-values.grounding.d.ts.map +1 -1
  15. package/dist/lib/adapters/groundings/constraint.grounding.d.ts.map +1 -1
  16. package/dist/lib/adapters/groundings/context.d.ts +6 -2
  17. package/dist/lib/adapters/groundings/context.d.ts.map +1 -1
  18. package/dist/lib/adapters/groundings/index.js +96 -20
  19. package/dist/lib/adapters/groundings/index.js.map +2 -2
  20. package/dist/lib/adapters/groundings/indexes.grounding.d.ts.map +1 -1
  21. package/dist/lib/adapters/groundings/row-count.grounding.d.ts.map +1 -1
  22. package/dist/lib/adapters/groundings/table.grounding.d.ts.map +1 -1
  23. package/dist/lib/adapters/groundings/view.grounding.d.ts.map +1 -1
  24. package/dist/lib/adapters/mysql/index.js +145 -35
  25. package/dist/lib/adapters/mysql/index.js.map +3 -3
  26. package/dist/lib/adapters/postgres/index.js +151 -35
  27. package/dist/lib/adapters/postgres/index.js.map +3 -3
  28. package/dist/lib/adapters/postgres/postgres.d.ts.map +1 -1
  29. package/dist/lib/adapters/spreadsheet/index.js +109 -27
  30. package/dist/lib/adapters/spreadsheet/index.js.map +3 -3
  31. package/dist/lib/adapters/sqlite/index.js +145 -35
  32. package/dist/lib/adapters/sqlite/index.js.map +3 -3
  33. package/dist/lib/adapters/sqlserver/index.js +151 -35
  34. package/dist/lib/adapters/sqlserver/index.js.map +3 -3
  35. package/dist/lib/adapters/sqlserver/sqlserver.d.ts.map +1 -1
  36. package/dist/lib/sql.d.ts +14 -2
  37. package/dist/lib/sql.d.ts.map +1 -1
  38. package/package.json +4 -4
@@ -1 +1 @@
1
- {"version":3,"file":"postgres.d.ts","sourceRoot":"","sources":["../../../../src/lib/adapters/postgres/postgres.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,OAAO,EACP,KAAK,eAAe,EACpB,KAAK,WAAW,EAKhB,KAAK,gBAAgB,EACtB,MAAM,eAAe,CAAC;AAEvB,MAAM,MAAM,sBAAsB,GAAG;IACnC,OAAO,EAAE,eAAe,CAAC;IACzB,QAAQ,CAAC,EAAE,gBAAgB,CAAC;IAC5B,SAAS,EAAE,WAAW,EAAE,CAAC;IACzB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB,CAAC;AAwEF,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO;;;;;EA0B9D;AAED,qBAAa,QAAS,SAAQ,OAAO;;IAEnC,SAAkB,SAAS,EAAE,WAAW,EAAE,CAAC;IAC3C,SAAkB,aAAa,YAAY;IAC3C,SAAkB,aAAa,WAAwC;IACvE,SAAkB,iBAAiB,gBAAgB;gBAEvC,OAAO,EAAE,sBAAsB;IAY5B,WAAW,CAAC,GAAG,EAAE,MAAM;IAIvB,YAAY,CAAC,GAAG,EAAE,MAAM;IAcxB,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAIhD,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAIrC,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAI7B,oBAAoB,CAC3B,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EAAE,GAAG,SAAS,EAC7B,KAAK,EAAE,MAAM,GACZ,MAAM;CA0cV"}
1
+ {"version":3,"file":"postgres.d.ts","sourceRoot":"","sources":["../../../../src/lib/adapters/postgres/postgres.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,OAAO,EACP,KAAK,eAAe,EACpB,KAAK,WAAW,EAKhB,KAAK,gBAAgB,EACtB,MAAM,eAAe,CAAC;AAEvB,MAAM,MAAM,sBAAsB,GAAG;IACnC,OAAO,EAAE,eAAe,CAAC;IACzB,QAAQ,CAAC,EAAE,gBAAgB,CAAC;IAC5B,SAAS,EAAE,WAAW,EAAE,CAAC;IACzB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB,CAAC;AAwEF,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO;;;;;EA0B9D;AAED,qBAAa,QAAS,SAAQ,OAAO;;IAEnC,SAAkB,SAAS,EAAE,WAAW,EAAE,CAAC;IAC3C,SAAkB,aAAa,YAAY;IAC3C,SAAkB,aAAa,WAAwC;IACvE,SAAkB,iBAAiB,gBAAgB;gBAEvC,OAAO,EAAE,sBAAsB;IAY5B,WAAW,CAAC,GAAG,EAAE,MAAM;IAIvB,YAAY,CAAC,GAAG,EAAE,MAAM;IAcxB,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAIhD,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAIrC,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAI7B,oBAAoB,CAC3B,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EAAE,GAAG,SAAS,EAC7B,KAAK,EAAE,MAAM,GACZ,MAAM;CAgdV"}
@@ -148,13 +148,14 @@ function relationship(input) {
148
148
  }
149
149
 
150
150
  // packages/text2sql/src/lib/adapters/groundings/context.ts
151
- function createGroundingContext() {
151
+ function createGroundingContext(options = {}) {
152
152
  return {
153
153
  tables: [],
154
154
  views: [],
155
155
  relationships: [],
156
156
  info: void 0,
157
- cache: /* @__PURE__ */ new Map()
157
+ cache: /* @__PURE__ */ new Map(),
158
+ onProgress: options.onProgress
158
159
  };
159
160
  }
160
161
 
@@ -300,7 +301,24 @@ var Adapter = class {
300
301
  async introspect(ctx = createGroundingContext()) {
301
302
  for (const fn of this.grounding) {
302
303
  const grounding = fn(this);
303
- await grounding.execute(ctx);
304
+ if (grounding.phase) {
305
+ ctx.onProgress?.({
306
+ type: "phase:start",
307
+ phase: grounding.phase,
308
+ message: `Starting ${grounding.name} introspection...`
309
+ });
310
+ }
311
+ try {
312
+ await grounding.execute(ctx);
313
+ } finally {
314
+ if (grounding.phase) {
315
+ ctx.onProgress?.({
316
+ type: "phase:end",
317
+ phase: grounding.phase,
318
+ message: `Finished ${grounding.name} introspection.`
319
+ });
320
+ }
321
+ }
304
322
  }
305
323
  return this.#toSchemaFragments(ctx);
306
324
  }
@@ -506,26 +524,33 @@ var Adapter = class {
506
524
  async #checkScope(sql, allowedEntities) {
507
525
  const dialect = this.formatterLanguage;
508
526
  const scopeDialects = {
509
- sqlite: "mysql",
510
- postgresql: "postgresql",
511
- bigquery: "bigquery",
512
- transactsql: "transactsql",
513
- mysql: "mysql"
527
+ sqlite: ["sqlite", "mysql"],
528
+ postgresql: ["postgresql"],
529
+ bigquery: ["bigquery"],
530
+ transactsql: ["transactsql"],
531
+ mysql: ["mysql"]
514
532
  };
515
- const scopeDialect = scopeDialects[dialect];
516
- if (!scopeDialect) {
533
+ const candidates = scopeDialects[dialect];
534
+ if (!candidates) {
517
535
  throw new TypeError(
518
536
  `No scope dialect mapping for formatter language "${dialect}". Add it to the scopeDialects map in Adapter.#checkScope.`
519
537
  );
520
538
  }
521
- let references;
522
- try {
523
- references = extractBaseEntityReferences(sql, scopeDialect);
524
- } catch (error) {
539
+ let references = null;
540
+ let lastError;
541
+ for (const candidate of candidates) {
542
+ try {
543
+ references = extractBaseEntityReferences(sql, candidate);
544
+ break;
545
+ } catch (error) {
546
+ lastError = error;
547
+ }
548
+ }
549
+ if (references === null) {
525
550
  return buildScopeParseErrorPayload(
526
551
  sql,
527
552
  dialect,
528
- error
553
+ lastError
529
554
  );
530
555
  }
531
556
  if (references.length === 0) return null;
@@ -648,15 +673,17 @@ var AbstractGrounding = class {
648
673
  * Grounding identifier for debugging/logging.
649
674
  */
650
675
  name;
651
- constructor(name) {
676
+ phase;
677
+ constructor(name, phase) {
652
678
  this.name = name;
679
+ this.phase = phase;
653
680
  }
654
681
  };
655
682
 
656
683
  // packages/text2sql/src/lib/adapters/groundings/column-stats.grounding.ts
657
684
  var ColumnStatsGrounding = class extends AbstractGrounding {
658
685
  constructor(config = {}) {
659
- super("columnStats");
686
+ super("columnStats", "column_stats");
660
687
  }
661
688
  /**
662
689
  * Execute the grounding process.
@@ -664,7 +691,17 @@ var ColumnStatsGrounding = class extends AbstractGrounding {
664
691
  */
665
692
  async execute(ctx) {
666
693
  const allContainers = [...ctx.tables, ...ctx.views];
667
- for (const container of allContainers) {
694
+ const total = allContainers.length;
695
+ for (let i = 0; i < allContainers.length; i++) {
696
+ const container = allContainers[i];
697
+ ctx.onProgress?.({
698
+ type: "phase:progress",
699
+ phase: "column_stats",
700
+ table: container.name,
701
+ message: `Collecting stats for ${container.name}...`,
702
+ current: i + 1,
703
+ total
704
+ });
668
705
  for (const column2 of container.columns) {
669
706
  try {
670
707
  const stats = await this.collectStats(container.name, column2);
@@ -689,7 +726,7 @@ var ColumnValuesGrounding = class extends AbstractGrounding {
689
726
  lowCardinalityLimit;
690
727
  maxValueLength;
691
728
  constructor(config = {}) {
692
- super("columnValues");
729
+ super("columnValues", "column_values");
693
730
  this.lowCardinalityLimit = config.lowCardinalityLimit ?? 20;
694
731
  this.maxValueLength = config.maxValueLength ?? 100;
695
732
  }
@@ -772,7 +809,17 @@ var ColumnValuesGrounding = class extends AbstractGrounding {
772
809
  */
773
810
  async execute(ctx) {
774
811
  const allContainers = [...ctx.tables, ...ctx.views];
775
- for (const container of allContainers) {
812
+ const total = allContainers.length;
813
+ for (let i = 0; i < allContainers.length; i++) {
814
+ const container = allContainers[i];
815
+ ctx.onProgress?.({
816
+ type: "phase:progress",
817
+ phase: "column_values",
818
+ table: container.name,
819
+ message: `Collecting column values for ${container.name}...`,
820
+ current: i + 1,
821
+ total
822
+ });
776
823
  const table2 = this.getTable(ctx, container.name);
777
824
  for (const column2 of container.columns) {
778
825
  try {
@@ -826,7 +873,7 @@ var ColumnValuesGrounding = class extends AbstractGrounding {
826
873
  // packages/text2sql/src/lib/adapters/groundings/info.grounding.ts
827
874
  var InfoGrounding = class extends AbstractGrounding {
828
875
  constructor(config = {}) {
829
- super("dialectInfo");
876
+ super("dialectInfo", "info");
830
877
  }
831
878
  /**
832
879
  * Execute the grounding process.
@@ -840,14 +887,24 @@ var InfoGrounding = class extends AbstractGrounding {
840
887
  // packages/text2sql/src/lib/adapters/groundings/row-count.grounding.ts
841
888
  var RowCountGrounding = class extends AbstractGrounding {
842
889
  constructor(config = {}) {
843
- super("rowCount");
890
+ super("rowCount", "row_counts");
844
891
  }
845
892
  /**
846
893
  * Execute the grounding process.
847
894
  * Annotates tables in ctx.tables with row counts and size hints.
848
895
  */
849
896
  async execute(ctx) {
850
- for (const table2 of ctx.tables) {
897
+ const total = ctx.tables.length;
898
+ for (let i = 0; i < ctx.tables.length; i++) {
899
+ const table2 = ctx.tables[i];
900
+ ctx.onProgress?.({
901
+ type: "phase:progress",
902
+ phase: "row_counts",
903
+ table: table2.name,
904
+ message: `Counting rows in ${table2.name}...`,
905
+ current: i + 1,
906
+ total
907
+ });
851
908
  const count = await this.getRowCount(table2.name);
852
909
  if (count != null) {
853
910
  table2.rowCount = count;
@@ -874,7 +931,7 @@ var TableGrounding = class extends AbstractGrounding {
874
931
  #forward;
875
932
  #backward;
876
933
  constructor(config = {}) {
877
- super("table");
934
+ super("table", "tables");
878
935
  this.#filter = config.filter;
879
936
  this.#columns = config.columns;
880
937
  this.#forward = config.forward;
@@ -890,9 +947,17 @@ var TableGrounding = class extends AbstractGrounding {
890
947
  const backward = this.#backward;
891
948
  if (!forward && !backward) {
892
949
  const tables3 = await Promise.all(
893
- seedTables.map(
894
- async (name) => applyColumnFilter(await this.getTable(name), this.#columns)
895
- )
950
+ seedTables.map(async (name, index2) => {
951
+ ctx.onProgress?.({
952
+ type: "phase:progress",
953
+ phase: "tables",
954
+ table: name,
955
+ message: `Loading table ${name}...`,
956
+ current: index2 + 1,
957
+ total: seedTables.length
958
+ });
959
+ return applyColumnFilter(await this.getTable(name), this.#columns);
960
+ })
896
961
  );
897
962
  ctx.tables.push(...tables3);
898
963
  return;
@@ -904,6 +969,7 @@ var TableGrounding = class extends AbstractGrounding {
904
969
  const backwardQueue = [];
905
970
  const forwardVisited = /* @__PURE__ */ new Set();
906
971
  const backwardVisited = /* @__PURE__ */ new Set();
972
+ let loadedCount = 0;
907
973
  for (const name of seedTables) {
908
974
  if (forward) forwardQueue.push({ name, depth: 0 });
909
975
  if (backward) backwardQueue.push({ name, depth: 0 });
@@ -916,6 +982,14 @@ var TableGrounding = class extends AbstractGrounding {
916
982
  if (forwardVisited.has(name)) continue;
917
983
  forwardVisited.add(name);
918
984
  if (!tables2[name]) {
985
+ loadedCount++;
986
+ ctx.onProgress?.({
987
+ type: "phase:progress",
988
+ phase: "tables",
989
+ table: name,
990
+ message: `Loading table ${name}...`,
991
+ current: loadedCount
992
+ });
919
993
  tables2[name] = applyColumnFilter(
920
994
  await this.getTable(name),
921
995
  this.#columns
@@ -940,6 +1014,14 @@ var TableGrounding = class extends AbstractGrounding {
940
1014
  if (backwardVisited.has(name)) continue;
941
1015
  backwardVisited.add(name);
942
1016
  if (!tables2[name]) {
1017
+ loadedCount++;
1018
+ ctx.onProgress?.({
1019
+ type: "phase:progress",
1020
+ phase: "tables",
1021
+ table: name,
1022
+ message: `Loading table ${name}...`,
1023
+ current: loadedCount
1024
+ });
943
1025
  tables2[name] = applyColumnFilter(
944
1026
  await this.getTable(name),
945
1027
  this.#columns