@querypanel/node-sdk 1.0.42 → 1.0.44

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.d.cts CHANGED
@@ -169,6 +169,47 @@ declare class PostgresAdapter implements DatabaseAdapter {
169
169
  introspect(options?: IntrospectOptions): Promise<SchemaIntrospection>;
170
170
  }
171
171
 
172
+ /**
173
+ * Error codes for the query pipeline
174
+ * These match the server-side error codes returned in API responses
175
+ */
176
+ declare const QueryErrorCode: {
177
+ readonly MODERATION_FAILED: "MODERATION_FAILED";
178
+ readonly RELEVANCE_CHECK_FAILED: "RELEVANCE_CHECK_FAILED";
179
+ readonly SECURITY_CHECK_FAILED: "SECURITY_CHECK_FAILED";
180
+ readonly SQL_GENERATION_FAILED: "SQL_GENERATION_FAILED";
181
+ readonly SQL_VALIDATION_FAILED: "SQL_VALIDATION_FAILED";
182
+ readonly CONTEXT_RETRIEVAL_FAILED: "CONTEXT_RETRIEVAL_FAILED";
183
+ readonly INTERNAL_ERROR: "INTERNAL_ERROR";
184
+ readonly AUTHENTICATION_REQUIRED: "AUTHENTICATION_REQUIRED";
185
+ readonly VALIDATION_ERROR: "VALIDATION_ERROR";
186
+ };
187
+ type QueryErrorCode = (typeof QueryErrorCode)[keyof typeof QueryErrorCode];
188
+ /**
189
+ * Error thrown when the query pipeline fails
190
+ */
191
+ declare class QueryPipelineError extends Error {
192
+ readonly code: QueryErrorCode;
193
+ readonly details?: Record<string, unknown> | undefined;
194
+ constructor(message: string, code: QueryErrorCode, details?: Record<string, unknown> | undefined);
195
+ /**
196
+ * Check if this is a moderation error
197
+ */
198
+ isModeration(): boolean;
199
+ /**
200
+ * Check if this is a relevance error (question not related to database)
201
+ */
202
+ isRelevanceError(): boolean;
203
+ /**
204
+ * Check if this is a security error (SQL injection, prompt injection, etc.)
205
+ */
206
+ isSecurityError(): boolean;
207
+ /**
208
+ * Check if this is any guardrail error (relevance or security)
209
+ */
210
+ isGuardrailError(): boolean;
211
+ }
212
+
172
213
  type ParamValue = string | number | boolean | string[] | number[];
173
214
  type ParamRecord = Record<string, ParamValue>;
174
215
 
@@ -381,7 +422,7 @@ interface ContextDocument {
381
422
  interface ChartEnvelope {
382
423
  vegaLiteSpec?: Record<string, unknown> | null;
383
424
  vizSpec?: VizSpec | null;
384
- specType: 'vega-lite' | 'vizspec';
425
+ specType: "vega-lite" | "vizspec";
385
426
  notes: string | null;
386
427
  }
387
428
  interface AskOptions {
@@ -393,7 +434,7 @@ interface AskOptions {
393
434
  previousSql?: string;
394
435
  maxRetry?: number;
395
436
  chartMaxRetries?: number;
396
- chartType?: 'vega-lite' | 'vizspec';
437
+ chartType?: "vega-lite" | "vizspec";
397
438
  }
398
439
  interface AskResponse {
399
440
  sql: string;
@@ -411,6 +452,158 @@ interface AskResponse {
411
452
  }
412
453
  declare function anonymizeResults(rows: Array<Record<string, unknown>>): Array<Record<string, string>>;
413
454
 
455
+ /**
456
+ * Simplified field reference for modification inputs.
457
+ * More ergonomic than the full AxisField type.
458
+ */
459
+ interface AxisFieldInput {
460
+ /** Column name from the SQL result */
461
+ field: string;
462
+ /** Human-friendly label for the axis */
463
+ label?: string;
464
+ /** Field data type */
465
+ type?: FieldType;
466
+ /** Aggregation operation (e.g., 'sum', 'avg') */
467
+ aggregate?: AggregateOp;
468
+ /** Time unit for temporal fields */
469
+ timeUnit?: TimeUnit;
470
+ /** Value formatting options */
471
+ format?: ValueFormat;
472
+ }
473
+ /**
474
+ * Simplified field reference for series/grouping fields.
475
+ */
476
+ interface FieldRefInput {
477
+ /** Column name from the SQL result */
478
+ field: string;
479
+ /** Human-friendly label */
480
+ label?: string;
481
+ /** Field data type */
482
+ type?: FieldType;
483
+ }
484
+ /**
485
+ * Date range specification for SQL modifications.
486
+ */
487
+ interface DateRangeInput {
488
+ /** Start date in ISO format (e.g., '2024-01-01') */
489
+ from?: string;
490
+ /** End date in ISO format (e.g., '2024-12-31') */
491
+ to?: string;
492
+ }
493
+ /**
494
+ * SQL modification options that trigger query regeneration.
495
+ * When any of these are provided, a new ask() call is made.
496
+ */
497
+ interface SqlModifications {
498
+ /**
499
+ * Direct SQL override. When provided, this SQL is executed directly
500
+ * without calling the query generation endpoint.
501
+ */
502
+ customSql?: string;
503
+ /**
504
+ * Change the time granularity of the query.
505
+ * Triggers SQL regeneration with hints about the desired grouping.
506
+ */
507
+ timeGranularity?: TimeUnit;
508
+ /**
509
+ * Filter the query to a specific date range.
510
+ * Triggers SQL regeneration with date filter hints.
511
+ */
512
+ dateRange?: DateRangeInput;
513
+ /**
514
+ * Additional natural language instructions to modify the query.
515
+ * These are appended to the original question as hints.
516
+ * Example: "exclude cancelled orders" or "only show top 10"
517
+ */
518
+ additionalInstructions?: string;
519
+ }
520
+ /**
521
+ * Visualization modification options that don't affect the SQL.
522
+ * These changes only affect how the chart is rendered.
523
+ */
524
+ interface VizModifications {
525
+ /** Change the chart type (line, bar, area, scatter, pie) */
526
+ chartType?: ChartType;
527
+ /** Configure the X axis field and settings */
528
+ xAxis?: AxisFieldInput;
529
+ /** Configure the Y axis field(s) and settings */
530
+ yAxis?: AxisFieldInput | AxisFieldInput[];
531
+ /** Configure the series/grouping field for multi-series charts */
532
+ series?: FieldRefInput;
533
+ /** Stacking mode for multi-series charts */
534
+ stacking?: StackingMode;
535
+ /** Maximum number of rows to display in the chart */
536
+ limit?: number;
537
+ }
538
+ /**
539
+ * Input for the modifyChart() method.
540
+ * Accepts chart data from either ask() responses or saved charts.
541
+ */
542
+ interface ChartModifyInput {
543
+ /**
544
+ * The SQL query to modify or re-execute.
545
+ * From ask() response: response.sql
546
+ * From saved chart: chart.sql
547
+ */
548
+ sql: string;
549
+ /**
550
+ * The original natural language question.
551
+ * Used when regenerating SQL with modifications.
552
+ */
553
+ question: string;
554
+ /**
555
+ * The database to execute the query against.
556
+ * From ask() response: response.target_db
557
+ * From saved chart: chart.target_db
558
+ */
559
+ database: string;
560
+ /**
561
+ * Query parameters (optional).
562
+ * From ask() response: response.params
563
+ * From saved chart: chart.sql_params
564
+ */
565
+ params?: ParamRecord;
566
+ /**
567
+ * SQL modifications that trigger query regeneration.
568
+ * When provided, a new ask() call is made with modification hints.
569
+ */
570
+ sqlModifications?: SqlModifications;
571
+ /**
572
+ * Visualization modifications that don't affect the SQL.
573
+ * Applied during chart generation.
574
+ */
575
+ vizModifications?: VizModifications;
576
+ }
577
+ /**
578
+ * Options for the modifyChart() method.
579
+ */
580
+ interface ChartModifyOptions {
581
+ /** Tenant ID for multi-tenant isolation */
582
+ tenantId?: string;
583
+ /** User ID for audit/tracking */
584
+ userId?: string;
585
+ /** Permission scopes */
586
+ scopes?: string[];
587
+ /** Maximum retry attempts for SQL generation */
588
+ maxRetry?: number;
589
+ /** Maximum retry attempts for chart generation */
590
+ chartMaxRetries?: number;
591
+ /** Chart generation method: 'vega-lite' or 'vizspec' */
592
+ chartType?: "vega-lite" | "vizspec";
593
+ }
594
+ /**
595
+ * Response from modifyChart(), extending AskResponse with modification metadata.
596
+ */
597
+ interface ChartModifyResponse extends AskResponse {
598
+ /** Metadata about what was modified */
599
+ modified: {
600
+ /** Whether the SQL was changed (regenerated or custom) */
601
+ sqlChanged: boolean;
602
+ /** Whether visualization settings were applied */
603
+ vizChanged: boolean;
604
+ };
605
+ }
606
+
414
607
  interface VizSpecGenerateInput {
415
608
  question: string;
416
609
  sql: string;
@@ -460,42 +653,364 @@ declare class QueryPanelSdkAPI {
460
653
  }): void;
461
654
  attachDatabase(name: string, adapter: DatabaseAdapter): void;
462
655
  introspect(databaseName: string, tables?: string[]): Promise<SchemaIntrospection>;
656
+ /**
657
+ * Syncs the database schema to QueryPanel for natural language query generation.
658
+ *
659
+ * This method introspects your database schema and uploads it to QueryPanel's
660
+ * vector store. The schema is used by the LLM to generate accurate SQL queries.
661
+ * Schema embedding is skipped if no changes are detected (drift detection).
662
+ *
663
+ * @param databaseName - Name of the attached database to sync
664
+ * @param options - Sync options including tenantId and forceReindex
665
+ * @param signal - Optional AbortSignal for cancellation
666
+ * @returns Response with sync status and chunk counts
667
+ *
668
+ * @example
669
+ * ```typescript
670
+ * // Basic schema sync (skips if no changes)
671
+ * await qp.syncSchema("analytics", { tenantId: "tenant_123" });
672
+ *
673
+ * // Force re-embedding even if schema hasn't changed
674
+ * await qp.syncSchema("analytics", {
675
+ * tenantId: "tenant_123",
676
+ * forceReindex: true,
677
+ * });
678
+ * ```
679
+ */
463
680
  syncSchema(databaseName: string, options: SchemaSyncOptions, signal?: AbortSignal): Promise<IngestResponse>;
681
+ /**
682
+ * Generates SQL from a natural language question and executes it.
683
+ *
684
+ * This is the primary method for converting user questions into data.
685
+ * It handles the complete flow: SQL generation → validation → execution → chart generation.
686
+ *
687
+ * @param question - Natural language question (e.g., "Show revenue by country")
688
+ * @param options - Query options including tenantId, database, and retry settings
689
+ * @param signal - Optional AbortSignal for cancellation
690
+ * @returns Response with SQL, executed data rows, and generated chart
691
+ * @throws {Error} When SQL generation or execution fails after all retries
692
+ *
693
+ * @example
694
+ * ```typescript
695
+ * // Basic query
696
+ * const result = await qp.ask("Top 10 customers by revenue", {
697
+ * tenantId: "tenant_123",
698
+ * database: "analytics",
699
+ * });
700
+ * console.log(result.sql); // Generated SQL
701
+ * console.log(result.rows); // Query results
702
+ * console.log(result.chart); // Vega-Lite chart spec
703
+ *
704
+ * // With automatic SQL repair on failure
705
+ * const result = await qp.ask("Show monthly trends", {
706
+ * tenantId: "tenant_123",
707
+ * maxRetry: 3, // Retry up to 3 times if SQL fails
708
+ * });
709
+ * ```
710
+ */
464
711
  ask(question: string, options: AskOptions, signal?: AbortSignal): Promise<AskResponse>;
712
+ /**
713
+ * Generates a VizSpec visualization specification from query results.
714
+ *
715
+ * Use this when you have raw SQL results and want to generate a chart
716
+ * specification without going through the full ask() flow. Useful for
717
+ * re-generating charts with different settings.
718
+ *
719
+ * @param input - VizSpec generation input with question, SQL, and result data
720
+ * @param options - Optional settings for tenant and retries
721
+ * @param signal - Optional AbortSignal for cancellation
722
+ * @returns VizSpec specification for chart, table, or metric visualization
723
+ *
724
+ * @example
725
+ * ```typescript
726
+ * const vizspec = await qp.generateVizSpec({
727
+ * question: "Revenue by country",
728
+ * sql: "SELECT country, SUM(revenue) FROM orders GROUP BY country",
729
+ * fields: ["country", "revenue"],
730
+ * rows: queryResults,
731
+ * }, { tenantId: "tenant_123" });
732
+ * ```
733
+ */
465
734
  generateVizSpec(input: VizSpecGenerateInput, options?: VizSpecGenerateOptions, signal?: AbortSignal): Promise<VizSpecResponse>;
735
+ /**
736
+ * Modifies a chart by regenerating SQL and/or applying visualization changes.
737
+ *
738
+ * This method supports three modes of operation:
739
+ *
740
+ * 1. **SQL Modifications**: When `sqlModifications` is provided, the SQL is
741
+ * regenerated using the query endpoint with modification hints. If `customSql`
742
+ * is set, it's used directly without regeneration.
743
+ *
744
+ * 2. **Visualization Modifications**: When only `vizModifications` is provided,
745
+ * the existing SQL is re-executed and a new chart is generated with the
746
+ * specified encoding preferences.
747
+ *
748
+ * 3. **Combined**: Both SQL and visualization modifications can be applied
749
+ * together. SQL is regenerated first, then viz modifications are applied.
750
+ *
751
+ * @param input - Chart modification input with source data and modifications
752
+ * @param options - Optional settings for tenant, user, and chart generation
753
+ * @param signal - Optional AbortSignal for cancellation
754
+ * @returns Modified chart response with SQL, data, and chart specification
755
+ *
756
+ * @example
757
+ * ```typescript
758
+ * // Change chart type and axis from an ask() response
759
+ * const modified = await qp.modifyChart({
760
+ * sql: response.sql,
761
+ * question: "revenue by country",
762
+ * database: "analytics",
763
+ * vizModifications: {
764
+ * chartType: "bar",
765
+ * xAxis: { field: "country" },
766
+ * yAxis: { field: "revenue", aggregate: "sum" },
767
+ * },
768
+ * }, { tenantId: "tenant_123" });
769
+ *
770
+ * // Change time granularity (triggers SQL regeneration)
771
+ * const monthly = await qp.modifyChart({
772
+ * sql: response.sql,
773
+ * question: "revenue over time",
774
+ * database: "analytics",
775
+ * sqlModifications: {
776
+ * timeGranularity: "month",
777
+ * dateRange: { from: "2024-01-01", to: "2024-12-31" },
778
+ * },
779
+ * }, { tenantId: "tenant_123" });
780
+ *
781
+ * // Direct SQL edit with chart regeneration
782
+ * const customized = await qp.modifyChart({
783
+ * sql: response.sql,
784
+ * question: "revenue by country",
785
+ * database: "analytics",
786
+ * sqlModifications: {
787
+ * customSql: "SELECT country, SUM(revenue) FROM orders GROUP BY country",
788
+ * },
789
+ * }, { tenantId: "tenant_123" });
790
+ * ```
791
+ */
792
+ modifyChart(input: ChartModifyInput, options?: ChartModifyOptions, signal?: AbortSignal): Promise<ChartModifyResponse>;
793
+ /**
794
+ * Saves a chart to the QueryPanel system for later retrieval.
795
+ *
796
+ * Charts store the SQL query, parameters, and visualization spec - never the actual data.
797
+ * Data is fetched live when the chart is rendered or refreshed.
798
+ *
799
+ * @param body - Chart data including title, SQL, and Vega-Lite spec
800
+ * @param options - Tenant, user, and scope options
801
+ * @param signal - Optional AbortSignal for cancellation
802
+ * @returns The saved chart with its generated ID
803
+ *
804
+ * @example
805
+ * ```typescript
806
+ * const savedChart = await qp.createChart({
807
+ * title: "Revenue by Country",
808
+ * sql: response.sql,
809
+ * sql_params: response.params,
810
+ * vega_lite_spec: response.chart.vegaLiteSpec,
811
+ * target_db: "analytics",
812
+ * }, { tenantId: "tenant_123", userId: "user_456" });
813
+ * ```
814
+ */
466
815
  createChart(body: ChartCreateInput, options?: {
467
816
  tenantId?: string;
468
817
  userId?: string;
469
818
  scopes?: string[];
470
819
  }, signal?: AbortSignal): Promise<SdkChart>;
820
+ /**
821
+ * Lists saved charts with optional filtering and pagination.
822
+ *
823
+ * Use `includeData: true` to execute each chart's SQL and include live data.
824
+ *
825
+ * @param options - Filtering, pagination, and data options
826
+ * @param signal - Optional AbortSignal for cancellation
827
+ * @returns Paginated list of charts
828
+ *
829
+ * @example
830
+ * ```typescript
831
+ * // List charts with pagination
832
+ * const charts = await qp.listCharts({
833
+ * tenantId: "tenant_123",
834
+ * pagination: { page: 1, limit: 10 },
835
+ * sortBy: "created_at",
836
+ * sortDir: "desc",
837
+ * });
838
+ *
839
+ * // List with live data
840
+ * const chartsWithData = await qp.listCharts({
841
+ * tenantId: "tenant_123",
842
+ * includeData: true,
843
+ * });
844
+ * ```
845
+ */
471
846
  listCharts(options?: ChartListOptions, signal?: AbortSignal): Promise<PaginatedResponse<SdkChart>>;
847
+ /**
848
+ * Retrieves a single chart by ID with live data.
849
+ *
850
+ * The chart's SQL is automatically executed and data is included in the response.
851
+ *
852
+ * @param id - Chart ID
853
+ * @param options - Tenant, user, and scope options
854
+ * @param signal - Optional AbortSignal for cancellation
855
+ * @returns Chart with live data populated
856
+ *
857
+ * @example
858
+ * ```typescript
859
+ * const chart = await qp.getChart("chart_123", {
860
+ * tenantId: "tenant_123",
861
+ * });
862
+ * console.log(chart.vega_lite_spec.data.values); // Live data
863
+ * ```
864
+ */
472
865
  getChart(id: string, options?: {
473
866
  tenantId?: string;
474
867
  userId?: string;
475
868
  scopes?: string[];
476
869
  }, signal?: AbortSignal): Promise<SdkChart>;
870
+ /**
871
+ * Updates an existing chart's metadata or configuration.
872
+ *
873
+ * @param id - Chart ID to update
874
+ * @param body - Fields to update (partial update supported)
875
+ * @param options - Tenant, user, and scope options
876
+ * @param signal - Optional AbortSignal for cancellation
877
+ * @returns Updated chart
878
+ *
879
+ * @example
880
+ * ```typescript
881
+ * const updated = await qp.updateChart("chart_123", {
882
+ * title: "Updated Chart Title",
883
+ * description: "New description",
884
+ * }, { tenantId: "tenant_123" });
885
+ * ```
886
+ */
477
887
  updateChart(id: string, body: ChartUpdateInput, options?: {
478
888
  tenantId?: string;
479
889
  userId?: string;
480
890
  scopes?: string[];
481
891
  }, signal?: AbortSignal): Promise<SdkChart>;
892
+ /**
893
+ * Deletes a chart permanently.
894
+ *
895
+ * @param id - Chart ID to delete
896
+ * @param options - Tenant, user, and scope options
897
+ * @param signal - Optional AbortSignal for cancellation
898
+ *
899
+ * @example
900
+ * ```typescript
901
+ * await qp.deleteChart("chart_123", { tenantId: "tenant_123" });
902
+ * ```
903
+ */
482
904
  deleteChart(id: string, options?: {
483
905
  tenantId?: string;
484
906
  userId?: string;
485
907
  scopes?: string[];
486
908
  }, signal?: AbortSignal): Promise<void>;
909
+ /**
910
+ * Pins a saved chart to the dashboard (Active Charts).
911
+ *
912
+ * Active Charts are used for building dashboards. Unlike the chart history,
913
+ * active charts are meant to be displayed together with layout metadata.
914
+ *
915
+ * @param body - Active chart config with chart_id, order, and optional meta
916
+ * @param options - Tenant, user, and scope options
917
+ * @param signal - Optional AbortSignal for cancellation
918
+ * @returns Created active chart entry
919
+ *
920
+ * @example
921
+ * ```typescript
922
+ * const pinned = await qp.createActiveChart({
923
+ * chart_id: savedChart.id,
924
+ * order: 1,
925
+ * meta: { width: "full", variant: "dark" },
926
+ * }, { tenantId: "tenant_123" });
927
+ * ```
928
+ */
487
929
  createActiveChart(body: ActiveChartCreateInput, options?: {
488
930
  tenantId?: string;
489
931
  userId?: string;
490
932
  scopes?: string[];
491
933
  }, signal?: AbortSignal): Promise<SdkActiveChart>;
934
+ /**
935
+ * Lists all active charts (dashboard items) with optional live data.
936
+ *
937
+ * Use `withData: true` to execute each chart's SQL and include results.
938
+ * This is the primary method for loading a complete dashboard.
939
+ *
940
+ * @param options - Filtering and data options including withData
941
+ * @param signal - Optional AbortSignal for cancellation
942
+ * @returns Paginated list of active charts with optional live data
943
+ *
944
+ * @example
945
+ * ```typescript
946
+ * // Load dashboard with live data
947
+ * const dashboard = await qp.listActiveCharts({
948
+ * tenantId: "tenant_123",
949
+ * withData: true,
950
+ * });
951
+ *
952
+ * dashboard.data.forEach(item => {
953
+ * console.log(item.chart?.title);
954
+ * console.log(item.chart?.vega_lite_spec.data.values);
955
+ * });
956
+ * ```
957
+ */
492
958
  listActiveCharts(options?: ActiveChartListOptions, signal?: AbortSignal): Promise<PaginatedResponse<SdkActiveChart>>;
959
+ /**
960
+ * Retrieves a single active chart by ID.
961
+ *
962
+ * @param id - Active chart ID
963
+ * @param options - Options including withData for live data
964
+ * @param signal - Optional AbortSignal for cancellation
965
+ * @returns Active chart with associated chart data
966
+ *
967
+ * @example
968
+ * ```typescript
969
+ * const activeChart = await qp.getActiveChart("active_123", {
970
+ * tenantId: "tenant_123",
971
+ * withData: true,
972
+ * });
973
+ * ```
974
+ */
493
975
  getActiveChart(id: string, options?: ActiveChartListOptions, signal?: AbortSignal): Promise<SdkActiveChart>;
976
+ /**
977
+ * Updates an active chart's order or metadata.
978
+ *
979
+ * Use this to reorder dashboard items or update layout hints.
980
+ *
981
+ * @param id - Active chart ID to update
982
+ * @param body - Fields to update (order, meta)
983
+ * @param options - Tenant, user, and scope options
984
+ * @param signal - Optional AbortSignal for cancellation
985
+ * @returns Updated active chart
986
+ *
987
+ * @example
988
+ * ```typescript
989
+ * const updated = await qp.updateActiveChart("active_123", {
990
+ * order: 5,
991
+ * meta: { width: "half" },
992
+ * }, { tenantId: "tenant_123" });
993
+ * ```
994
+ */
494
995
  updateActiveChart(id: string, body: ActiveChartUpdateInput, options?: {
495
996
  tenantId?: string;
496
997
  userId?: string;
497
998
  scopes?: string[];
498
999
  }, signal?: AbortSignal): Promise<SdkActiveChart>;
1000
+ /**
1001
+ * Removes a chart from the dashboard (unpins it).
1002
+ *
1003
+ * This only removes the active chart entry, not the underlying saved chart.
1004
+ *
1005
+ * @param id - Active chart ID to delete
1006
+ * @param options - Tenant, user, and scope options
1007
+ * @param signal - Optional AbortSignal for cancellation
1008
+ *
1009
+ * @example
1010
+ * ```typescript
1011
+ * await qp.deleteActiveChart("active_123", { tenantId: "tenant_123" });
1012
+ * ```
1013
+ */
499
1014
  deleteActiveChart(id: string, options?: {
500
1015
  tenantId?: string;
501
1016
  userId?: string;
@@ -503,4 +1018,4 @@ declare class QueryPanelSdkAPI {
503
1018
  }, signal?: AbortSignal): Promise<void>;
504
1019
  }
505
1020
 
506
- export { type ActiveChartCreateInput, type ActiveChartListOptions, type ActiveChartUpdateInput, type AskOptions, type AskResponse, type AxisField, type ChartCreateInput, type ChartEncoding, type ChartEnvelope, type ChartListOptions, type ChartSpec, type ChartType, type ChartUpdateInput, ClickHouseAdapter, type ClickHouseAdapterOptions, type ClickHouseClientFn, type ContextDocument, type DatabaseAdapter, type DatabaseDialect, type FieldRef, type FieldType, type IngestResponse, type MetricEncoding, type MetricField, type MetricSpec, type PaginatedResponse, type PaginationInfo, type PaginationQuery, type ParamRecord, type ParamValue, PostgresAdapter, type PostgresAdapterOptions, type PostgresClientFn, QueryPanelSdkAPI, type SchemaIntrospection, type SchemaSyncOptions, type SdkActiveChart, type SdkChart, type TableColumn, type TableEncoding, type TableSpec, type VizSpec, type VizSpecGenerateInput, type VizSpecGenerateOptions, type VizSpecResponse, anonymizeResults };
1021
+ export { type ActiveChartCreateInput, type ActiveChartListOptions, type ActiveChartUpdateInput, type AggregateOp, type AskOptions, type AskResponse, type AxisField, type AxisFieldInput, type ChartCreateInput, type ChartEncoding, type ChartEnvelope, type ChartListOptions, type ChartModifyInput, type ChartModifyOptions, type ChartModifyResponse, type ChartSpec, type ChartType, type ChartUpdateInput, ClickHouseAdapter, type ClickHouseAdapterOptions, type ClickHouseClientFn, type ContextDocument, type DatabaseAdapter, type DatabaseDialect, type DateRangeInput, type FieldRef, type FieldRefInput, type FieldType, type IngestResponse, type MetricEncoding, type MetricField, type MetricSpec, type PaginatedResponse, type PaginationInfo, type PaginationQuery, type ParamRecord, type ParamValue, PostgresAdapter, type PostgresAdapterOptions, type PostgresClientFn, QueryErrorCode, QueryErrorCode as QueryErrorCodeType, QueryPanelSdkAPI, QueryPipelineError, type SchemaIntrospection, type SchemaSyncOptions, type SdkActiveChart, type SdkChart, type SqlModifications, type StackingMode, type TableColumn, type TableEncoding, type TableSpec, type TimeUnit, type VizModifications, type VizSpec, type VizSpecGenerateInput, type VizSpecGenerateOptions, type VizSpecResponse, anonymizeResults };