@sqlrooms/mosaic 0.29.0-rc.8 → 0.29.0-rc.9
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/README.md +84 -74
- package/dist/ai/agentIntent.d.ts +5 -0
- package/dist/ai/agentIntent.d.ts.map +1 -0
- package/dist/ai/agentIntent.js +8 -0
- package/dist/ai/agentIntent.js.map +1 -0
- package/dist/ai/block-document/constants.d.ts +9 -0
- package/dist/ai/block-document/constants.d.ts.map +1 -0
- package/dist/ai/block-document/constants.js +9 -0
- package/dist/ai/block-document/constants.js.map +1 -0
- package/dist/ai/block-document/createAddMosaicDashboardBlockTool.d.ts +48 -0
- package/dist/ai/block-document/createAddMosaicDashboardBlockTool.d.ts.map +1 -0
- package/dist/ai/block-document/createAddMosaicDashboardBlockTool.js +59 -0
- package/dist/ai/block-document/createAddMosaicDashboardBlockTool.js.map +1 -0
- package/dist/ai/block-document/createBlockDocumentChartTools.d.ts +19 -0
- package/dist/ai/block-document/createBlockDocumentChartTools.d.ts.map +1 -0
- package/dist/ai/block-document/createBlockDocumentChartTools.js +37 -0
- package/dist/ai/block-document/createBlockDocumentChartTools.js.map +1 -0
- package/dist/ai/block-document/createBlockDocumentDataTableExplorerTool.d.ts +32 -0
- package/dist/ai/block-document/createBlockDocumentDataTableExplorerTool.d.ts.map +1 -0
- package/dist/ai/block-document/createBlockDocumentDataTableExplorerTool.js +37 -0
- package/dist/ai/block-document/createBlockDocumentDataTableExplorerTool.js.map +1 -0
- package/dist/ai/constants.d.ts +3 -0
- package/dist/ai/constants.d.ts.map +1 -0
- package/dist/ai/constants.js +3 -0
- package/dist/ai/constants.js.map +1 -0
- package/dist/ai/createDataTableExplorerTool.d.ts +69 -0
- package/dist/ai/createDataTableExplorerTool.d.ts.map +1 -0
- package/dist/ai/createDataTableExplorerTool.js +68 -0
- package/dist/ai/createDataTableExplorerTool.js.map +1 -0
- package/dist/ai/dashboard/constants.d.ts +6 -0
- package/dist/ai/dashboard/constants.d.ts.map +1 -0
- package/dist/ai/dashboard/constants.js +6 -0
- package/dist/ai/dashboard/constants.js.map +1 -0
- package/dist/ai/dashboard/createDashboardAgentTool.d.ts +17 -0
- package/dist/ai/dashboard/createDashboardAgentTool.d.ts.map +1 -0
- package/dist/ai/dashboard/createDashboardAgentTool.js +205 -0
- package/dist/ai/dashboard/createDashboardAgentTool.js.map +1 -0
- package/dist/ai/dashboard/createDashboardAiAdapter.d.ts +14 -0
- package/dist/ai/dashboard/createDashboardAiAdapter.d.ts.map +1 -0
- package/dist/ai/dashboard/createDashboardAiAdapter.js +75 -0
- package/dist/ai/dashboard/createDashboardAiAdapter.js.map +1 -0
- package/dist/ai/dashboard/createDashboardAiTools.d.ts +26 -0
- package/dist/ai/dashboard/createDashboardAiTools.d.ts.map +1 -0
- package/dist/ai/dashboard/createDashboardAiTools.js +40 -0
- package/dist/ai/dashboard/createDashboardAiTools.js.map +1 -0
- package/dist/ai/dashboard/createDashboardChartTools.d.ts +27 -0
- package/dist/ai/dashboard/createDashboardChartTools.d.ts.map +1 -0
- package/dist/ai/dashboard/createDashboardChartTools.js +55 -0
- package/dist/ai/dashboard/createDashboardChartTools.js.map +1 -0
- package/dist/ai/dashboard/createDashboardDataTableExplorerTool.d.ts +23 -0
- package/dist/ai/dashboard/createDashboardDataTableExplorerTool.d.ts.map +1 -0
- package/dist/ai/dashboard/createDashboardDataTableExplorerTool.js +29 -0
- package/dist/ai/dashboard/createDashboardDataTableExplorerTool.js.map +1 -0
- package/dist/ai/dashboard/createListDashboardPanelsTool.d.ts +28 -0
- package/dist/ai/dashboard/createListDashboardPanelsTool.d.ts.map +1 -0
- package/dist/ai/dashboard/createListDashboardPanelsTool.js +54 -0
- package/dist/ai/dashboard/createListDashboardPanelsTool.js.map +1 -0
- package/dist/ai/dashboard/dashboard-types.d.ts +59 -0
- package/dist/ai/dashboard/dashboard-types.d.ts.map +1 -0
- package/dist/ai/dashboard/dashboard-types.js +2 -0
- package/dist/ai/dashboard/dashboard-types.js.map +1 -0
- package/dist/ai/database-types.d.ts +12 -0
- package/dist/ai/database-types.d.ts.map +1 -0
- package/dist/ai/database-types.js +2 -0
- package/dist/ai/database-types.js.map +1 -0
- package/dist/ai/errors.d.ts +8 -0
- package/dist/ai/errors.d.ts.map +1 -0
- package/dist/ai/errors.js +11 -0
- package/dist/ai/errors.js.map +1 -0
- package/dist/ai/tool-helpers.d.ts +28 -29
- package/dist/ai/tool-helpers.d.ts.map +1 -1
- package/dist/ai/tool-helpers.js +38 -76
- package/dist/ai/tool-helpers.js.map +1 -1
- package/dist/ai/tool-schemas.d.ts +9 -4
- package/dist/ai/tool-schemas.d.ts.map +1 -1
- package/dist/ai/tool-schemas.js +12 -12
- package/dist/ai/tool-schemas.js.map +1 -1
- package/dist/ai/tool-types.d.ts +19 -1
- package/dist/ai/tool-types.d.ts.map +1 -1
- package/dist/ai/tool-types.js.map +1 -1
- package/dist/ai/types.d.ts +64 -0
- package/dist/ai/types.d.ts.map +1 -0
- package/dist/ai/types.js +2 -0
- package/dist/ai/types.js.map +1 -0
- package/dist/ai.d.ts +16 -2
- package/dist/ai.d.ts.map +1 -1
- package/dist/ai.js +14 -5
- package/dist/ai.js.map +1 -1
- package/dist/charts/MosaicChart.js +1 -1
- package/dist/charts/MosaicChart.js.map +1 -1
- package/dist/charts/MosaicChartView.d.ts.map +1 -1
- package/dist/charts/MosaicChartView.js +1 -2
- package/dist/charts/MosaicChartView.js.map +1 -1
- package/dist/charts/chart-settings/MosaicChartSpecViewerPanel.d.ts.map +1 -1
- package/dist/charts/chart-settings/MosaicChartSpecViewerPanel.js +2 -1
- package/dist/charts/chart-settings/MosaicChartSpecViewerPanel.js.map +1 -1
- package/dist/charts/chart-settings/MosaicChartTypeSelector.d.ts.map +1 -1
- package/dist/charts/chart-settings/MosaicChartTypeSelector.js +4 -11
- package/dist/charts/chart-settings/MosaicChartTypeSelector.js.map +1 -1
- package/dist/charts/chart-types/base-types.d.ts +27 -23
- package/dist/charts/chart-types/base-types.d.ts.map +1 -1
- package/dist/charts/chart-types/base-types.js +3 -1
- package/dist/charts/chart-types/base-types.js.map +1 -1
- package/dist/charts/chart-types/box-plot/definition.d.ts.map +1 -1
- package/dist/charts/chart-types/box-plot/definition.js +1 -0
- package/dist/charts/chart-types/box-plot/definition.js.map +1 -1
- package/dist/charts/chart-types/box-plot/renderer/BoxPlotClient.d.ts +37 -3
- package/dist/charts/chart-types/box-plot/renderer/BoxPlotClient.d.ts.map +1 -1
- package/dist/charts/chart-types/box-plot/renderer/BoxPlotClient.js +26 -6
- package/dist/charts/chart-types/box-plot/renderer/BoxPlotClient.js.map +1 -1
- package/dist/charts/chart-types/box-plot/renderer/BoxPlotPanelRenderer.js +2 -2
- package/dist/charts/chart-types/box-plot/renderer/BoxPlotPanelRenderer.js.map +1 -1
- package/dist/charts/chart-types/box-plot/renderer/useBoxPlotClient.d.ts +12 -1
- package/dist/charts/chart-types/box-plot/renderer/useBoxPlotClient.d.ts.map +1 -1
- package/dist/charts/chart-types/box-plot/renderer/useBoxPlotClient.js +13 -3
- package/dist/charts/chart-types/box-plot/renderer/useBoxPlotClient.js.map +1 -1
- package/dist/charts/chart-types/box-plot/tool.d.ts +20 -24
- package/dist/charts/chart-types/box-plot/tool.d.ts.map +1 -1
- package/dist/charts/chart-types/box-plot/tool.js +25 -33
- package/dist/charts/chart-types/box-plot/tool.js.map +1 -1
- package/dist/charts/chart-types/box-plot/validation.d.ts +9 -0
- package/dist/charts/chart-types/box-plot/validation.d.ts.map +1 -0
- package/dist/charts/chart-types/box-plot/validation.js +32 -0
- package/dist/charts/chart-types/box-plot/validation.js.map +1 -0
- package/dist/charts/chart-types/column-types.d.ts +8 -0
- package/dist/charts/chart-types/column-types.d.ts.map +1 -0
- package/dist/charts/chart-types/column-types.js +2 -0
- package/dist/charts/chart-types/column-types.js.map +1 -0
- package/dist/charts/chart-types/count-plot/definition.d.ts.map +1 -1
- package/dist/charts/chart-types/count-plot/definition.js +1 -0
- package/dist/charts/chart-types/count-plot/definition.js.map +1 -1
- package/dist/charts/chart-types/count-plot/spec.d.ts.map +1 -1
- package/dist/charts/chart-types/count-plot/spec.js +1 -19
- package/dist/charts/chart-types/count-plot/spec.js.map +1 -1
- package/dist/charts/chart-types/count-plot/tool.d.ts +19 -24
- package/dist/charts/chart-types/count-plot/tool.d.ts.map +1 -1
- package/dist/charts/chart-types/count-plot/tool.js +25 -32
- package/dist/charts/chart-types/count-plot/tool.js.map +1 -1
- package/dist/charts/chart-types/count-plot/validation.d.ts +8 -0
- package/dist/charts/chart-types/count-plot/validation.d.ts.map +1 -0
- package/dist/charts/chart-types/count-plot/validation.js +20 -0
- package/dist/charts/chart-types/count-plot/validation.js.map +1 -0
- package/dist/charts/chart-types/createChartInstructions.d.ts +3 -0
- package/dist/charts/chart-types/createChartInstructions.d.ts.map +1 -0
- package/dist/charts/chart-types/createChartInstructions.js +12 -0
- package/dist/charts/chart-types/createChartInstructions.js.map +1 -0
- package/dist/charts/chart-types/createChartTools.d.ts +15 -9
- package/dist/charts/chart-types/createChartTools.d.ts.map +1 -1
- package/dist/charts/chart-types/createChartTools.js +16 -10
- package/dist/charts/chart-types/createChartTools.js.map +1 -1
- package/dist/charts/chart-types/custom-spec/definition.d.ts.map +1 -1
- package/dist/charts/chart-types/custom-spec/definition.js +1 -0
- package/dist/charts/chart-types/custom-spec/definition.js.map +1 -1
- package/dist/charts/chart-types/errors.d.ts +10 -0
- package/dist/charts/chart-types/errors.d.ts.map +1 -1
- package/dist/charts/chart-types/errors.js +18 -0
- package/dist/charts/chart-types/errors.js.map +1 -1
- package/dist/charts/chart-types/heatmap/definition.d.ts.map +1 -1
- package/dist/charts/chart-types/heatmap/definition.js +1 -0
- package/dist/charts/chart-types/heatmap/definition.js.map +1 -1
- package/dist/charts/chart-types/heatmap/spec.d.ts.map +1 -1
- package/dist/charts/chart-types/heatmap/spec.js +1 -33
- package/dist/charts/chart-types/heatmap/spec.js.map +1 -1
- package/dist/charts/chart-types/heatmap/tool.d.ts +20 -24
- package/dist/charts/chart-types/heatmap/tool.d.ts.map +1 -1
- package/dist/charts/chart-types/heatmap/tool.js +26 -36
- package/dist/charts/chart-types/heatmap/tool.js.map +1 -1
- package/dist/charts/chart-types/heatmap/validation.d.ts +9 -0
- package/dist/charts/chart-types/heatmap/validation.d.ts.map +1 -0
- package/dist/charts/chart-types/heatmap/validation.js +34 -0
- package/dist/charts/chart-types/heatmap/validation.js.map +1 -0
- package/dist/charts/chart-types/histogram/definition.d.ts.map +1 -1
- package/dist/charts/chart-types/histogram/definition.js +1 -0
- package/dist/charts/chart-types/histogram/definition.js.map +1 -1
- package/dist/charts/chart-types/histogram/spec.d.ts.map +1 -1
- package/dist/charts/chart-types/histogram/spec.js +1 -21
- package/dist/charts/chart-types/histogram/spec.js.map +1 -1
- package/dist/charts/chart-types/histogram/tool.d.ts +37 -24
- package/dist/charts/chart-types/histogram/tool.d.ts.map +1 -1
- package/dist/charts/chart-types/histogram/tool.js +38 -32
- package/dist/charts/chart-types/histogram/tool.js.map +1 -1
- package/dist/charts/chart-types/histogram/validation.d.ts +9 -0
- package/dist/charts/chart-types/histogram/validation.d.ts.map +1 -0
- package/dist/charts/chart-types/histogram/validation.js +22 -0
- package/dist/charts/chart-types/histogram/validation.js.map +1 -0
- package/dist/charts/chart-types/index.d.ts +1 -7
- package/dist/charts/chart-types/index.d.ts.map +1 -1
- package/dist/charts/chart-types/index.js +2 -8
- package/dist/charts/chart-types/index.js.map +1 -1
- package/dist/charts/chart-types/line-chart/definition.d.ts.map +1 -1
- package/dist/charts/chart-types/line-chart/definition.js +1 -0
- package/dist/charts/chart-types/line-chart/definition.js.map +1 -1
- package/dist/charts/chart-types/line-chart/spec.d.ts.map +1 -1
- package/dist/charts/chart-types/line-chart/spec.js +5 -46
- package/dist/charts/chart-types/line-chart/spec.js.map +1 -1
- package/dist/charts/chart-types/line-chart/tool.d.ts +26 -24
- package/dist/charts/chart-types/line-chart/tool.d.ts.map +1 -1
- package/dist/charts/chart-types/line-chart/tool.js +26 -38
- package/dist/charts/chart-types/line-chart/tool.js.map +1 -1
- package/dist/charts/chart-types/line-chart/validation.d.ts +16 -0
- package/dist/charts/chart-types/line-chart/validation.d.ts.map +1 -0
- package/dist/charts/chart-types/line-chart/validation.js +43 -0
- package/dist/charts/chart-types/line-chart/validation.js.map +1 -0
- package/dist/charts/chart-types/resolveChartTypes.d.ts +3 -0
- package/dist/charts/chart-types/resolveChartTypes.d.ts.map +1 -0
- package/dist/charts/chart-types/resolveChartTypes.js +8 -0
- package/dist/charts/chart-types/resolveChartTypes.js.map +1 -0
- package/dist/charts/chart-types/scatter-plot/definition.d.ts.map +1 -1
- package/dist/charts/chart-types/scatter-plot/definition.js +1 -0
- package/dist/charts/chart-types/scatter-plot/definition.js.map +1 -1
- package/dist/charts/chart-types/scatter-plot/spec.d.ts.map +1 -1
- package/dist/charts/chart-types/scatter-plot/spec.js +1 -45
- package/dist/charts/chart-types/scatter-plot/spec.js.map +1 -1
- package/dist/charts/chart-types/scatter-plot/tool.d.ts +21 -24
- package/dist/charts/chart-types/scatter-plot/tool.d.ts.map +1 -1
- package/dist/charts/chart-types/scatter-plot/tool.js +28 -41
- package/dist/charts/chart-types/scatter-plot/tool.js.map +1 -1
- package/dist/charts/chart-types/scatter-plot/validation.d.ts +13 -0
- package/dist/charts/chart-types/scatter-plot/validation.d.ts.map +1 -0
- package/dist/charts/chart-types/scatter-plot/validation.js +52 -0
- package/dist/charts/chart-types/scatter-plot/validation.js.map +1 -0
- package/dist/charts/chart-types/tool-types.d.ts +43 -0
- package/dist/charts/chart-types/tool-types.d.ts.map +1 -0
- package/dist/charts/chart-types/tool-types.js +2 -0
- package/dist/charts/chart-types/tool-types.js.map +1 -0
- package/dist/charts/chart-types/utils.d.ts +3 -0
- package/dist/charts/chart-types/utils.d.ts.map +1 -0
- package/dist/charts/chart-types/utils.js +4 -0
- package/dist/charts/chart-types/utils.js.map +1 -0
- package/dist/charts/dashboard/MosaicDashboardChartRenderer.d.ts.map +1 -1
- package/dist/charts/dashboard/MosaicDashboardChartRenderer.js +5 -3
- package/dist/charts/dashboard/MosaicDashboardChartRenderer.js.map +1 -1
- package/dist/charts/useChartDataPolicy.js +2 -2
- package/dist/charts/useChartDataPolicy.js.map +1 -1
- package/dist/components/AggregationSelector.d.ts.map +1 -1
- package/dist/components/AggregationSelector.js +1 -1
- package/dist/components/AggregationSelector.js.map +1 -1
- package/dist/components/ColorSelector.d.ts.map +1 -1
- package/dist/components/ColorSelector.js +1 -2
- package/dist/components/ColorSelector.js.map +1 -1
- package/dist/components/FieldSelectorInput.d.ts.map +1 -1
- package/dist/components/FieldSelectorInput.js +3 -3
- package/dist/components/FieldSelectorInput.js.map +1 -1
- package/dist/components/TemporalGranularitySelector.d.ts.map +1 -1
- package/dist/components/TemporalGranularitySelector.js +1 -1
- package/dist/components/TemporalGranularitySelector.js.map +1 -1
- package/dist/dashboard/MosaicDashboardCommands.d.ts +19 -0
- package/dist/dashboard/MosaicDashboardCommands.d.ts.map +1 -0
- package/dist/dashboard/MosaicDashboardCommands.js +226 -0
- package/dist/dashboard/MosaicDashboardCommands.js.map +1 -0
- package/dist/dashboard/dashboard-types.d.ts.map +1 -1
- package/dist/dashboard/dashboard-types.js.map +1 -1
- package/dist/dashboard/panel/MosaicDashboardPanel.d.ts.map +1 -1
- package/dist/dashboard/panel/MosaicDashboardPanel.js +1 -1
- package/dist/dashboard/panel/MosaicDashboardPanel.js.map +1 -1
- package/dist/dashboard/panel/MosaicDashboardPanelLayout.d.ts.map +1 -1
- package/dist/dashboard/panel/MosaicDashboardPanelLayout.js +3 -3
- package/dist/dashboard/panel/MosaicDashboardPanelLayout.js.map +1 -1
- package/dist/dashboard/panel/MosaicDashboardPanels.d.ts.map +1 -1
- package/dist/dashboard/panel/MosaicDashboardPanels.js +4 -2
- package/dist/dashboard/panel/MosaicDashboardPanels.js.map +1 -1
- package/dist/dashboard/toolbar/MosaicDashboardDataTableSelector.d.ts.map +1 -1
- package/dist/dashboard/toolbar/MosaicDashboardDataTableSelector.js +4 -4
- package/dist/dashboard/toolbar/MosaicDashboardDataTableSelector.js.map +1 -1
- package/dist/dashboard/toolbar/MosaicDashboardToolbar.d.ts.map +1 -1
- package/dist/dashboard/toolbar/MosaicDashboardToolbar.js +5 -3
- package/dist/dashboard/toolbar/MosaicDashboardToolbar.js.map +1 -1
- package/dist/dashboard/useSelectedOrFirstTable.d.ts +1 -1
- package/dist/dashboard/useSelectedOrFirstTable.d.ts.map +1 -1
- package/dist/dashboard/useSelectedOrFirstTable.js +10 -8
- package/dist/dashboard/useSelectedOrFirstTable.js.map +1 -1
- package/dist/data-table-explorer/DataTableExplorerCategoryClient.d.ts +3 -2
- package/dist/data-table-explorer/DataTableExplorerCategoryClient.d.ts.map +1 -1
- package/dist/data-table-explorer/DataTableExplorerCategoryClient.js +3 -3
- package/dist/data-table-explorer/DataTableExplorerCategoryClient.js.map +1 -1
- package/dist/data-table-explorer/DataTableExplorerCountClient.d.ts +3 -1
- package/dist/data-table-explorer/DataTableExplorerCountClient.d.ts.map +1 -1
- package/dist/data-table-explorer/DataTableExplorerCountClient.js +3 -3
- package/dist/data-table-explorer/DataTableExplorerCountClient.js.map +1 -1
- package/dist/data-table-explorer/DataTableExplorerHistogramClient.d.ts +3 -2
- package/dist/data-table-explorer/DataTableExplorerHistogramClient.d.ts.map +1 -1
- package/dist/data-table-explorer/DataTableExplorerHistogramClient.js +4 -4
- package/dist/data-table-explorer/DataTableExplorerHistogramClient.js.map +1 -1
- package/dist/data-table-explorer/DataTableExplorerPageClient.d.ts +3 -1
- package/dist/data-table-explorer/DataTableExplorerPageClient.d.ts.map +1 -1
- package/dist/data-table-explorer/DataTableExplorerPageClient.js +3 -1
- package/dist/data-table-explorer/DataTableExplorerPageClient.js.map +1 -1
- package/dist/data-table-explorer/DataTableExplorerUnsupportedSummaryClient.d.ts +3 -2
- package/dist/data-table-explorer/DataTableExplorerUnsupportedSummaryClient.d.ts.map +1 -1
- package/dist/data-table-explorer/DataTableExplorerUnsupportedSummaryClient.js +3 -3
- package/dist/data-table-explorer/DataTableExplorerUnsupportedSummaryClient.js.map +1 -1
- package/dist/data-table-explorer/dashboard/MosaicDashboardDataTableExplorerPanelRenderer.d.ts.map +1 -1
- package/dist/data-table-explorer/dashboard/MosaicDashboardDataTableExplorerPanelRenderer.js +7 -4
- package/dist/data-table-explorer/dashboard/MosaicDashboardDataTableExplorerPanelRenderer.js.map +1 -1
- package/dist/data-table-explorer/dataTableExplorerController.d.ts +58 -2
- package/dist/data-table-explorer/dataTableExplorerController.d.ts.map +1 -1
- package/dist/data-table-explorer/dataTableExplorerController.js +68 -8
- package/dist/data-table-explorer/dataTableExplorerController.js.map +1 -1
- package/dist/data-table-explorer/hooks/useDataTableExplorerLifecycles.d.ts +23 -1
- package/dist/data-table-explorer/hooks/useDataTableExplorerLifecycles.d.ts.map +1 -1
- package/dist/data-table-explorer/hooks/useDataTableExplorerLifecycles.js +46 -13
- package/dist/data-table-explorer/hooks/useDataTableExplorerLifecycles.js.map +1 -1
- package/dist/data-table-explorer/hooks/useDataTableExplorerQueryState.d.ts +17 -3
- package/dist/data-table-explorer/hooks/useDataTableExplorerQueryState.d.ts.map +1 -1
- package/dist/data-table-explorer/hooks/useDataTableExplorerQueryState.js +9 -6
- package/dist/data-table-explorer/hooks/useDataTableExplorerQueryState.js.map +1 -1
- package/dist/data-table-explorer/types.d.ts +10 -0
- package/dist/data-table-explorer/types.d.ts.map +1 -1
- package/dist/data-table-explorer/types.js.map +1 -1
- package/dist/data-table-explorer/useDataTableExplorer.d.ts.map +1 -1
- package/dist/data-table-explorer/useDataTableExplorer.js +10 -6
- package/dist/data-table-explorer/useDataTableExplorer.js.map +1 -1
- package/dist/data-table-explorer/utils.d.ts +64 -6
- package/dist/data-table-explorer/utils.d.ts.map +1 -1
- package/dist/data-table-explorer/utils.js +58 -0
- package/dist/data-table-explorer/utils.js.map +1 -1
- package/dist/data-table-explorer/worksheet/DataTableBlockRenderer.d.ts.map +1 -1
- package/dist/data-table-explorer/worksheet/DataTableBlockRenderer.js +2 -2
- package/dist/data-table-explorer/worksheet/DataTableBlockRenderer.js.map +1 -1
- package/dist/index.d.ts +49 -29
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +81 -25
- package/dist/index.js.map +1 -1
- package/dist/mosaicTableReference.d.ts +59 -0
- package/dist/mosaicTableReference.d.ts.map +1 -0
- package/dist/mosaicTableReference.js +68 -0
- package/dist/mosaicTableReference.js.map +1 -0
- package/dist/useVgPlotChartRender.d.ts.map +1 -1
- package/dist/useVgPlotChartRender.js +26 -1
- package/dist/useVgPlotChartRender.js.map +1 -1
- package/dist/utils/table-lookup.d.ts +7 -0
- package/dist/utils/table-lookup.d.ts.map +1 -0
- package/dist/utils/table-lookup.js +10 -0
- package/dist/utils/table-lookup.js.map +1 -0
- package/package.json +14 -14
- package/dist/ai/ai.d.ts +0 -108
- package/dist/ai/ai.d.ts.map +0 -1
- package/dist/ai/ai.js +0 -461
- package/dist/ai/ai.js.map +0 -1
- package/dist/ai/data-table-explorer-tool.d.ts +0 -40
- package/dist/ai/data-table-explorer-tool.d.ts.map +0 -1
- package/dist/ai/data-table-explorer-tool.js +0 -75
- package/dist/ai/data-table-explorer-tool.js.map +0 -1
- package/dist/ai/list-panels-tool.d.ts +0 -35
- package/dist/ai/list-panels-tool.d.ts.map +0 -1
- package/dist/ai/list-panels-tool.js +0 -66
- package/dist/ai/list-panels-tool.js.map +0 -1
- package/dist/ai/remove-panel-tool.d.ts +0 -31
- package/dist/ai/remove-panel-tool.d.ts.map +0 -1
- package/dist/ai/remove-panel-tool.js +0 -55
- package/dist/ai/remove-panel-tool.js.map +0 -1
- package/dist/ai/tool-validation.d.ts +0 -3
- package/dist/ai/tool-validation.d.ts.map +0 -1
- package/dist/ai/tool-validation.js +0 -11
- package/dist/ai/tool-validation.js.map +0 -1
- package/dist/components/Combobox.d.ts +0 -45
- package/dist/components/Combobox.d.ts.map +0 -1
- package/dist/components/Combobox.js +0 -58
- package/dist/components/Combobox.js.map +0 -1
- package/dist/components/useCombobox.d.ts +0 -23
- package/dist/components/useCombobox.d.ts.map +0 -1
- package/dist/components/useCombobox.js +0 -26
- package/dist/components/useCombobox.js.map +0 -1
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { tool } from 'ai';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import { ensureTable } from './tool-helpers';
|
|
4
|
+
/**
|
|
5
|
+
* Parameters for creating a Data Table Explorer panel.
|
|
6
|
+
*/
|
|
7
|
+
export const DataTableExplorerParameters = z.object({
|
|
8
|
+
tableName: z
|
|
9
|
+
.string()
|
|
10
|
+
.min(1, 'tableName cannot be empty')
|
|
11
|
+
.optional()
|
|
12
|
+
.describe('Optional table name. Use when no table is selected yet.'),
|
|
13
|
+
title: z
|
|
14
|
+
.string()
|
|
15
|
+
.optional()
|
|
16
|
+
.default('Data Table Explorer')
|
|
17
|
+
.describe('Title for the Data Table Explorer panel.'),
|
|
18
|
+
intent: z
|
|
19
|
+
.string()
|
|
20
|
+
.optional()
|
|
21
|
+
.describe('Optional natural-language objective this Data Table Explorer should satisfy.'),
|
|
22
|
+
});
|
|
23
|
+
/**
|
|
24
|
+
* Tool input schema including reasoning and explorer parameters.
|
|
25
|
+
*/
|
|
26
|
+
export const DataTableExplorerToolInput = z.object({
|
|
27
|
+
reasoning: z
|
|
28
|
+
.string()
|
|
29
|
+
.describe('Brief rationale for creating the Data Table Explorer.'),
|
|
30
|
+
...DataTableExplorerParameters.shape,
|
|
31
|
+
});
|
|
32
|
+
/**
|
|
33
|
+
* Creates an AI tool for generating Data Table Explorer panels with schema and column statistics.
|
|
34
|
+
*/
|
|
35
|
+
export function createDataTableExplorerTool({ databaseAdapter, addDataTable, }) {
|
|
36
|
+
return tool({
|
|
37
|
+
description: `Data Table Explorer: displays table schema and statistics for all columns (count, distinct values, min/max, etc.).
|
|
38
|
+
|
|
39
|
+
Use when: user asks to "profile the data", "show table statistics", "what's in this table", "summarize columns", "give me an overview of the data".
|
|
40
|
+
|
|
41
|
+
Useful for: quick data exploration, understanding data quality, finding missing values, identifying column types.`,
|
|
42
|
+
inputSchema: DataTableExplorerToolInput,
|
|
43
|
+
execute: async (params) => {
|
|
44
|
+
try {
|
|
45
|
+
if (params.tableName) {
|
|
46
|
+
ensureTable(databaseAdapter, params.tableName);
|
|
47
|
+
}
|
|
48
|
+
const dataTable = await addDataTable(params);
|
|
49
|
+
return {
|
|
50
|
+
llmResult: {
|
|
51
|
+
success: true,
|
|
52
|
+
details: `Created Data Table Explorer "${params.title}".`,
|
|
53
|
+
data: dataTable ? { ...params, dataTable } : params,
|
|
54
|
+
},
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
catch (error) {
|
|
58
|
+
return {
|
|
59
|
+
llmResult: {
|
|
60
|
+
success: false,
|
|
61
|
+
errorMessage: error instanceof Error ? error.message : String(error),
|
|
62
|
+
},
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
},
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=createDataTableExplorerTool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createDataTableExplorerTool.js","sourceRoot":"","sources":["../../src/ai/createDataTableExplorerTool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,IAAI,EAAC,MAAM,IAAI,CAAC;AACxB,OAAO,EAAC,CAAC,EAAC,MAAM,KAAK,CAAC;AACtB,OAAO,EAAC,WAAW,EAAC,MAAM,gBAAgB,CAAC;AAG3C;;GAEG;AACH,MAAM,CAAC,MAAM,2BAA2B,GAAG,CAAC,CAAC,MAAM,CAAC;IAClD,SAAS,EAAE,CAAC;SACT,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,EAAE,2BAA2B,CAAC;SACnC,QAAQ,EAAE;SACV,QAAQ,CAAC,yDAAyD,CAAC;IACtE,KAAK,EAAE,CAAC;SACL,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,OAAO,CAAC,qBAAqB,CAAC;SAC9B,QAAQ,CAAC,0CAA0C,CAAC;IACvD,MAAM,EAAE,CAAC;SACN,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CACP,8EAA8E,CAC/E;CACJ,CAAC,CAAC;AASH;;GAEG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,CAAC,MAAM,CAAC;IACjD,SAAS,EAAE,CAAC;SACT,MAAM,EAAE;SACR,QAAQ,CAAC,uDAAuD,CAAC;IACpE,GAAG,2BAA2B,CAAC,KAAK;CACrC,CAAC,CAAC;AAiBH;;GAEG;AACH,MAAM,UAAU,2BAA2B,CAAC,EAC1C,eAAe,EACf,YAAY,GACuB;IACnC,OAAO,IAAI,CAAC;QACV,WAAW,EAAE;;;;kHAIiG;QAC9G,WAAW,EAAE,0BAA0B;QACvC,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;YACxB,IAAI,CAAC;gBACH,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;oBACrB,WAAW,CAAC,eAAe,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;gBACjD,CAAC;gBAED,MAAM,SAAS,GAAG,MAAM,YAAY,CAAC,MAAM,CAAC,CAAC;gBAE7C,OAAO;oBACL,SAAS,EAAE;wBACT,OAAO,EAAE,IAAI;wBACb,OAAO,EAAE,gCAAgC,MAAM,CAAC,KAAK,IAAI;wBACzD,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,EAAC,GAAG,MAAM,EAAE,SAAS,EAAC,CAAC,CAAC,CAAC,MAAM;qBAClD;iBACF,CAAC;YACJ,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO;oBACL,SAAS,EAAE;wBACT,OAAO,EAAE,KAAK;wBACd,YAAY,EACV,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;qBACzD;iBACF,CAAC;YACJ,CAAC;QACH,CAAC;KACF,CAAC,CAAC;AACL,CAAC","sourcesContent":["import {tool} from 'ai';\nimport {z} from 'zod';\nimport {ensureTable} from './tool-helpers';\nimport {DatabaseAiAdapter} from './database-types';\n\n/**\n * Parameters for creating a Data Table Explorer panel.\n */\nexport const DataTableExplorerParameters = z.object({\n tableName: z\n .string()\n .min(1, 'tableName cannot be empty')\n .optional()\n .describe('Optional table name. Use when no table is selected yet.'),\n title: z\n .string()\n .optional()\n .default('Data Table Explorer')\n .describe('Title for the Data Table Explorer panel.'),\n intent: z\n .string()\n .optional()\n .describe(\n 'Optional natural-language objective this Data Table Explorer should satisfy.',\n ),\n});\n\n/**\n * Inferred type for Data Table Explorer parameters.\n */\nexport type DataTableExplorerParameters = z.infer<\n typeof DataTableExplorerParameters\n>;\n\n/**\n * Tool input schema including reasoning and explorer parameters.\n */\nexport const DataTableExplorerToolInput = z.object({\n reasoning: z\n .string()\n .describe('Brief rationale for creating the Data Table Explorer.'),\n ...DataTableExplorerParameters.shape,\n});\n\n/**\n * Inferred type for Data Table Explorer tool input.\n */\nexport type DataTableExplorerToolInput = z.infer<\n typeof DataTableExplorerToolInput\n>;\n\n/**\n * Options for creating the Data Table Explorer tool.\n */\nexport type CreateDataTableExplorerToolOptions = {\n databaseAdapter: DatabaseAiAdapter;\n addDataTable(params: DataTableExplorerParameters): unknown | Promise<unknown>;\n};\n\n/**\n * Creates an AI tool for generating Data Table Explorer panels with schema and column statistics.\n */\nexport function createDataTableExplorerTool({\n databaseAdapter,\n addDataTable,\n}: CreateDataTableExplorerToolOptions) {\n return tool({\n description: `Data Table Explorer: displays table schema and statistics for all columns (count, distinct values, min/max, etc.).\n\nUse when: user asks to \"profile the data\", \"show table statistics\", \"what's in this table\", \"summarize columns\", \"give me an overview of the data\".\n\nUseful for: quick data exploration, understanding data quality, finding missing values, identifying column types.`,\n inputSchema: DataTableExplorerToolInput,\n execute: async (params) => {\n try {\n if (params.tableName) {\n ensureTable(databaseAdapter, params.tableName);\n }\n\n const dataTable = await addDataTable(params);\n\n return {\n llmResult: {\n success: true,\n details: `Created Data Table Explorer \"${params.title}\".`,\n data: dataTable ? {...params, dataTable} : params,\n },\n };\n } catch (error) {\n return {\n llmResult: {\n success: false,\n errorMessage:\n error instanceof Error ? error.message : String(error),\n },\n };\n }\n },\n });\n}\n"]}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export declare const DASHBOARD_CHART_TOOL_PREFIX = "create_dashboard_panel_";
|
|
2
|
+
export declare const KnownDashboardTools: {
|
|
3
|
+
readonly list_dashboard_panels: "list_dashboard_panels";
|
|
4
|
+
readonly create_dashboard_panel_data_table_explorer: "create_dashboard_panel_data_table_explorer";
|
|
5
|
+
};
|
|
6
|
+
//# sourceMappingURL=constants.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../src/ai/dashboard/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,2BAA2B,4BAA4B,CAAC;AAErE,eAAO,MAAM,mBAAmB;;;CAItB,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export const DASHBOARD_CHART_TOOL_PREFIX = 'create_dashboard_panel_';
|
|
2
|
+
export const KnownDashboardTools = {
|
|
3
|
+
list_dashboard_panels: 'list_dashboard_panels',
|
|
4
|
+
create_dashboard_panel_data_table_explorer: 'create_dashboard_panel_data_table_explorer',
|
|
5
|
+
};
|
|
6
|
+
//# sourceMappingURL=constants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../src/ai/dashboard/constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,2BAA2B,GAAG,yBAAyB,CAAC;AAErE,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,qBAAqB,EAAE,uBAAuB;IAC9C,0CAA0C,EACxC,4CAA4C;CACtC,CAAC","sourcesContent":["export const DASHBOARD_CHART_TOOL_PREFIX = 'create_dashboard_panel_';\n\nexport const KnownDashboardTools = {\n list_dashboard_panels: 'list_dashboard_panels',\n create_dashboard_panel_data_table_explorer:\n 'create_dashboard_panel_data_table_explorer',\n} as const;\n"]}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { type Tool } from 'ai';
|
|
2
|
+
import type { CreateDashboardAgentToolOptions } from './dashboard-types';
|
|
3
|
+
import { MosaicDashboardStoreState } from '../../dashboard/MosaicDashboardSlice';
|
|
4
|
+
/**
|
|
5
|
+
* Creates an AI agent tool for populating dashboards with charts and interactive panels.
|
|
6
|
+
* The agent explores data through queries and creates multiple panels showing different aspects.
|
|
7
|
+
*
|
|
8
|
+
* @template TState - Store state type extending MosaicDashboardStoreState
|
|
9
|
+
* @param options - Configuration options for the dashboard agent
|
|
10
|
+
* @param options.store - Zustand store instance for state management
|
|
11
|
+
* @param options.databaseAdapter - Adapter for database operations and queries
|
|
12
|
+
* @param options.chartToolsOptions - Optional chart configuration and type restrictions
|
|
13
|
+
* @param options.extraTools - Optional factory for additional custom tools (e.g., map panels)
|
|
14
|
+
* @returns Tool instance that orchestrates multi-turn dashboard creation via a ToolLoopAgent
|
|
15
|
+
*/
|
|
16
|
+
export declare function createDashboardAgentTool<TState extends MosaicDashboardStoreState>(options: CreateDashboardAgentToolOptions<TState>): Tool;
|
|
17
|
+
//# sourceMappingURL=createDashboardAgentTool.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createDashboardAgentTool.d.ts","sourceRoot":"","sources":["../../../src/ai/dashboard/createDashboardAgentTool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,KAAK,IAAI,EAAmC,MAAM,IAAI,CAAC;AAG/D,OAAO,KAAK,EACV,+BAA+B,EAEhC,MAAM,mBAAmB,CAAC;AAI3B,OAAO,EAAC,yBAAyB,EAAC,MAAM,sCAAsC,CAAC;AAqH/E;;;;;;;;;;;GAWG;AACH,wBAAgB,wBAAwB,CACtC,MAAM,SAAS,yBAAyB,EACxC,OAAO,EAAE,+BAA+B,CAAC,MAAM,CAAC,GAAG,IAAI,CAyGxD"}
|
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
import { ToolLoopAgent, stepCountIs, tool } from 'ai';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import { MAP_TOOL_KEY } from '../constants';
|
|
4
|
+
import { AiAgentError } from '../errors';
|
|
5
|
+
import { ensureTable, calculateAgentResultMetadata } from '../tool-helpers';
|
|
6
|
+
import { createDashboardAiTools } from './createDashboardAiTools';
|
|
7
|
+
import { createDashboardAiAdapter } from './createDashboardAiAdapter';
|
|
8
|
+
import { resolveChartTypes } from '../../charts/chart-types/resolveChartTypes';
|
|
9
|
+
import { createChartToolsInstructions } from '../../charts/chart-types/createChartInstructions';
|
|
10
|
+
import { DASHBOARD_CHART_TOOL_PREFIX, KnownDashboardTools } from './constants';
|
|
11
|
+
import { AgentIntentSchemaFields } from '../agentIntent';
|
|
12
|
+
import { getMosaicTableIdentity } from '../../mosaicTableReference';
|
|
13
|
+
function getDashboardAgentInstructions(options) {
|
|
14
|
+
const chartTools = resolveChartTypes(options.chartToolsOptions?.chartTypes);
|
|
15
|
+
const chartToolsInstructions = createChartToolsInstructions(chartTools, DASHBOARD_CHART_TOOL_PREFIX);
|
|
16
|
+
return `
|
|
17
|
+
You are a dashboard builder AI agent that creates dashboard.
|
|
18
|
+
|
|
19
|
+
## Your Role
|
|
20
|
+
|
|
21
|
+
You create DASHBOARD contains multiple panel including:
|
|
22
|
+
- Chart panel
|
|
23
|
+
- Data Table Explorer panel
|
|
24
|
+
- Map panel (if provided by the host app)
|
|
25
|
+
|
|
26
|
+
You can handle both direct requests ("create histogram of magnitude") and exploratory requests ("find interesting insights in earthquakes dataset").
|
|
27
|
+
|
|
28
|
+
## Dataset
|
|
29
|
+
|
|
30
|
+
Dashboard uses the **tableName** parameter to specify the dataset to analyze. If tableName is omitted for an existing dashboard, the agent uses the dashboard's selected table.
|
|
31
|
+
You can use the query tool to explore the data and discover patterns, then create panels based on your findings.
|
|
32
|
+
|
|
33
|
+
## Available Tools
|
|
34
|
+
|
|
35
|
+
**Chart Tools:**
|
|
36
|
+
${chartToolsInstructions}
|
|
37
|
+
|
|
38
|
+
**Panel Tools:**
|
|
39
|
+
- ${KnownDashboardTools.list_dashboard_panels} - inspect existing panel IDs, the selected table, and runtime issues
|
|
40
|
+
- ${KnownDashboardTools.create_dashboard_panel_data_table_explorer} - table statistics and column summaries
|
|
41
|
+
- ${MAP_TOOL_KEY} - native Deck JSON geospatial map panel (if provided by the host app)
|
|
42
|
+
|
|
43
|
+
**Data Tools:**
|
|
44
|
+
- query - execute SQL queries for data exploration
|
|
45
|
+
|
|
46
|
+
## Workflows
|
|
47
|
+
|
|
48
|
+
### Direct Requests
|
|
49
|
+
When user provides specific instructions:
|
|
50
|
+
1. Parse intent -> identify panel type
|
|
51
|
+
2. If the user asks to change, update, edit, replace, or fix an existing panel, call ${KnownDashboardTools.list_dashboard_panels} first and pass the target panelId to the appropriate chart or map tool.
|
|
52
|
+
3. Call appropriate tool with settings
|
|
53
|
+
4. Done
|
|
54
|
+
|
|
55
|
+
### Exploratory Requests
|
|
56
|
+
When user asks to discover insights:
|
|
57
|
+
1. Use query tool to explore data:
|
|
58
|
+
- Start with simple stats: COUNT, MIN, MAX, AVG, DISTINCT (check total row count!)
|
|
59
|
+
- Check distributions: GROUP BY with COUNT
|
|
60
|
+
- Find correlations: CORR(col1, col2)
|
|
61
|
+
- Identify outliers and patterns
|
|
62
|
+
2. Create targeted panels based on discoveries:
|
|
63
|
+
- Create 3-5 panels showing different aspects of the data
|
|
64
|
+
- If dataset has >10k rows: avoid scatter charts and unaggregated line charts
|
|
65
|
+
- Use histogram, count plot, heatmap, or aggregated visualizations instead
|
|
66
|
+
3. Stop when dashboard tells coherent story
|
|
67
|
+
|
|
68
|
+
## Query Guidelines
|
|
69
|
+
|
|
70
|
+
**Keep queries simple:**
|
|
71
|
+
- Start with aggregations: COUNT, MIN, MAX, AVG, SUM
|
|
72
|
+
- Use GROUP BY for breakdowns and distributions
|
|
73
|
+
- Use LIMIT to control result size (especially with GROUP BY)
|
|
74
|
+
- Avoid expensive operations: large JOINs, full table scans
|
|
75
|
+
|
|
76
|
+
**Exploration strategy:**
|
|
77
|
+
- Limit exploration to 5-10 queries per request
|
|
78
|
+
- Start broad (overall stats), then narrow (specific patterns)
|
|
79
|
+
- Stop when you have enough insights for a coherent dashboard
|
|
80
|
+
|
|
81
|
+
## Best Practices
|
|
82
|
+
|
|
83
|
+
- **Avoid unaggregated charts for large datasets:** For datasets >10k rows, DO NOT use scatter charts or line charts without aggregations. Use aggregated alternatives instead:
|
|
84
|
+
- For scatter plots: use heatmap or binned aggregations
|
|
85
|
+
- For line charts: use GROUP BY with time buckets or aggregations
|
|
86
|
+
- Histograms and count plots are always safe (they aggregate automatically)
|
|
87
|
+
- **Validate columns:** Query tools will validate column existence and types
|
|
88
|
+
- **Update existing panels:** Chart tools accept panelId. Pass panelId when the user wants to modify an existing chart; omit it only when creating a new panel.
|
|
89
|
+
- **Handle errors gracefully:** If a query or chart creation fails, try alternative approach`;
|
|
90
|
+
}
|
|
91
|
+
const DashboardAgentInputSchema = z.object({
|
|
92
|
+
reasoning: z
|
|
93
|
+
.string()
|
|
94
|
+
.describe('Reasoning for why the dashboard agent is being called'),
|
|
95
|
+
...AgentIntentSchemaFields,
|
|
96
|
+
tableName: z
|
|
97
|
+
.string()
|
|
98
|
+
.optional()
|
|
99
|
+
.describe('The name of the table/dataset to analyze. Optional when the target dashboard already has a selected table.'),
|
|
100
|
+
dashboardId: z
|
|
101
|
+
.string()
|
|
102
|
+
.describe('The ID of an existing dashboard to update.'),
|
|
103
|
+
maxSteps: z
|
|
104
|
+
.number()
|
|
105
|
+
.optional()
|
|
106
|
+
.default(20)
|
|
107
|
+
.describe('Maximum exploration steps (default: 20, range: 5-50)'),
|
|
108
|
+
});
|
|
109
|
+
/**
|
|
110
|
+
* Creates an AI agent tool for populating dashboards with charts and interactive panels.
|
|
111
|
+
* The agent explores data through queries and creates multiple panels showing different aspects.
|
|
112
|
+
*
|
|
113
|
+
* @template TState - Store state type extending MosaicDashboardStoreState
|
|
114
|
+
* @param options - Configuration options for the dashboard agent
|
|
115
|
+
* @param options.store - Zustand store instance for state management
|
|
116
|
+
* @param options.databaseAdapter - Adapter for database operations and queries
|
|
117
|
+
* @param options.chartToolsOptions - Optional chart configuration and type restrictions
|
|
118
|
+
* @param options.extraTools - Optional factory for additional custom tools (e.g., map panels)
|
|
119
|
+
* @returns Tool instance that orchestrates multi-turn dashboard creation via a ToolLoopAgent
|
|
120
|
+
*/
|
|
121
|
+
export function createDashboardAgentTool(options) {
|
|
122
|
+
const { store, databaseAdapter, chartToolsOptions, extraTools } = options;
|
|
123
|
+
return tool({
|
|
124
|
+
description: `An AI agent that populates a dashboard with charts and interactive panels.
|
|
125
|
+
|
|
126
|
+
This agent:
|
|
127
|
+
- Queries the data to discover patterns and insights
|
|
128
|
+
- Creates charts (histograms, scatter plots, heatmaps, box plots, etc.)
|
|
129
|
+
- Adds Data Table Explorer panels for tabular analysis
|
|
130
|
+
- Builds interactive dashboards for data exploration
|
|
131
|
+
|
|
132
|
+
REQUIRED PARAMETERS:
|
|
133
|
+
- dashboardId: The ID of the dashboard to populate
|
|
134
|
+
- intent: What insights, patterns, or specific charts to create
|
|
135
|
+
|
|
136
|
+
OPTIONAL PARAMETERS:
|
|
137
|
+
- tableName: The dataset to analyze. If omitted, the dashboard's selected table is used.
|
|
138
|
+
|
|
139
|
+
The agent will explore the data and create 3-5 panels showing different aspects based on the intent.
|
|
140
|
+
|
|
141
|
+
IMPORTANT: IF primary artefact in run context is a dashboard, prioritize using this tool for any queries or data analysis tasks.`,
|
|
142
|
+
inputSchema: DashboardAgentInputSchema,
|
|
143
|
+
execute: async (params, toolOptions) => {
|
|
144
|
+
const { dashboardId, maxSteps } = params;
|
|
145
|
+
const { intent } = params;
|
|
146
|
+
const dashboardAdapter = createDashboardAiAdapter(store, dashboardId);
|
|
147
|
+
try {
|
|
148
|
+
const state = store.getState();
|
|
149
|
+
const tableName = params.tableName ?? dashboardAdapter.getSelectedTable?.();
|
|
150
|
+
if (!tableName) {
|
|
151
|
+
throw new AiAgentError('Dashboard tableName was not provided and the dashboard has no selected table.');
|
|
152
|
+
}
|
|
153
|
+
const dataTable = ensureTable(databaseAdapter, tableName);
|
|
154
|
+
await dashboardAdapter.setSelectedTable(dataTable.table ? getMosaicTableIdentity(dataTable.table) : tableName);
|
|
155
|
+
const dataTools = options.createDataTools?.({ store }) ?? {};
|
|
156
|
+
const agent = new ToolLoopAgent({
|
|
157
|
+
model: options.getModel({ state }),
|
|
158
|
+
tools: {
|
|
159
|
+
...dataTools,
|
|
160
|
+
...createDashboardAiTools({
|
|
161
|
+
dashboardAdapter,
|
|
162
|
+
databaseAdapter,
|
|
163
|
+
chartToolsOptions,
|
|
164
|
+
extraTools,
|
|
165
|
+
}),
|
|
166
|
+
},
|
|
167
|
+
stopWhen: [stepCountIs(Math.max(5, Math.min(50, maxSteps ?? 20)))],
|
|
168
|
+
instructions: [
|
|
169
|
+
options.instructions ?? getDashboardAgentInstructions(options),
|
|
170
|
+
options.additionalInstructions,
|
|
171
|
+
]
|
|
172
|
+
.filter(Boolean)
|
|
173
|
+
.join('\n\n'),
|
|
174
|
+
});
|
|
175
|
+
const result = await options.runSubAgent({
|
|
176
|
+
agent,
|
|
177
|
+
prompt: intent,
|
|
178
|
+
store,
|
|
179
|
+
parentToolCallId: toolOptions?.toolCallId || '',
|
|
180
|
+
abortSignal: toolOptions?.abortSignal,
|
|
181
|
+
});
|
|
182
|
+
const metadata = calculateAgentResultMetadata(tableName, result.agentToolCalls);
|
|
183
|
+
return {
|
|
184
|
+
success: true,
|
|
185
|
+
finalOutput: result.finalOutput || 'Dashboard created successfully.',
|
|
186
|
+
dashboardId,
|
|
187
|
+
metadata,
|
|
188
|
+
};
|
|
189
|
+
}
|
|
190
|
+
catch (error) {
|
|
191
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
192
|
+
const friendlyMessage = error instanceof AiAgentError
|
|
193
|
+
? errorMessage
|
|
194
|
+
: 'Dashboard agent execution failed.';
|
|
195
|
+
return {
|
|
196
|
+
success: false,
|
|
197
|
+
finalOutput: friendlyMessage,
|
|
198
|
+
dashboardId,
|
|
199
|
+
error: errorMessage,
|
|
200
|
+
};
|
|
201
|
+
}
|
|
202
|
+
},
|
|
203
|
+
});
|
|
204
|
+
}
|
|
205
|
+
//# sourceMappingURL=createDashboardAgentTool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createDashboardAgentTool.js","sourceRoot":"","sources":["../../../src/ai/dashboard/createDashboardAgentTool.ts"],"names":[],"mappings":"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","sourcesContent":["import {type Tool, ToolLoopAgent, stepCountIs, tool} from 'ai';\nimport {z} from 'zod';\nimport {MAP_TOOL_KEY} from '../constants';\nimport type {\n CreateDashboardAgentToolOptions,\n DashboardAgentResult,\n} from './dashboard-types';\nimport {AiAgentError} from '../errors';\nimport {ensureTable, calculateAgentResultMetadata} from '../tool-helpers';\nimport {createDashboardAiTools} from './createDashboardAiTools';\nimport {MosaicDashboardStoreState} from '../../dashboard/MosaicDashboardSlice';\nimport {createDashboardAiAdapter} from './createDashboardAiAdapter';\nimport {resolveChartTypes} from '../../charts/chart-types/resolveChartTypes';\nimport {createChartToolsInstructions} from '../../charts/chart-types/createChartInstructions';\nimport {DASHBOARD_CHART_TOOL_PREFIX, KnownDashboardTools} from './constants';\nimport {AgentIntentSchemaFields} from '../agentIntent';\nimport {getMosaicTableIdentity} from '../../mosaicTableReference';\n\nfunction getDashboardAgentInstructions<TState>(\n options: CreateDashboardAgentToolOptions<TState>,\n): string {\n const chartTools = resolveChartTypes(options.chartToolsOptions?.chartTypes);\n\n const chartToolsInstructions = createChartToolsInstructions(\n chartTools,\n DASHBOARD_CHART_TOOL_PREFIX,\n );\n\n return `\nYou are a dashboard builder AI agent that creates dashboard.\n\n## Your Role\n\nYou create DASHBOARD contains multiple panel including:\n- Chart panel\n- Data Table Explorer panel\n- Map panel (if provided by the host app)\n\nYou can handle both direct requests (\"create histogram of magnitude\") and exploratory requests (\"find interesting insights in earthquakes dataset\").\n\n## Dataset\n\nDashboard uses the **tableName** parameter to specify the dataset to analyze. If tableName is omitted for an existing dashboard, the agent uses the dashboard's selected table.\nYou can use the query tool to explore the data and discover patterns, then create panels based on your findings.\n\n## Available Tools\n\n**Chart Tools:**\n${chartToolsInstructions}\n\n**Panel Tools:**\n- ${KnownDashboardTools.list_dashboard_panels} - inspect existing panel IDs, the selected table, and runtime issues\n- ${KnownDashboardTools.create_dashboard_panel_data_table_explorer} - table statistics and column summaries\n- ${MAP_TOOL_KEY} - native Deck JSON geospatial map panel (if provided by the host app)\n\n**Data Tools:**\n- query - execute SQL queries for data exploration\n\n## Workflows\n\n### Direct Requests\nWhen user provides specific instructions:\n1. Parse intent -> identify panel type\n2. If the user asks to change, update, edit, replace, or fix an existing panel, call ${KnownDashboardTools.list_dashboard_panels} first and pass the target panelId to the appropriate chart or map tool.\n3. Call appropriate tool with settings\n4. Done\n\n### Exploratory Requests\nWhen user asks to discover insights:\n1. Use query tool to explore data:\n - Start with simple stats: COUNT, MIN, MAX, AVG, DISTINCT (check total row count!)\n - Check distributions: GROUP BY with COUNT\n - Find correlations: CORR(col1, col2)\n - Identify outliers and patterns\n2. Create targeted panels based on discoveries:\n - Create 3-5 panels showing different aspects of the data\n - If dataset has >10k rows: avoid scatter charts and unaggregated line charts\n - Use histogram, count plot, heatmap, or aggregated visualizations instead\n3. Stop when dashboard tells coherent story\n\n## Query Guidelines\n\n**Keep queries simple:**\n- Start with aggregations: COUNT, MIN, MAX, AVG, SUM\n- Use GROUP BY for breakdowns and distributions\n- Use LIMIT to control result size (especially with GROUP BY)\n- Avoid expensive operations: large JOINs, full table scans\n\n**Exploration strategy:**\n- Limit exploration to 5-10 queries per request\n- Start broad (overall stats), then narrow (specific patterns)\n- Stop when you have enough insights for a coherent dashboard\n\n## Best Practices\n\n- **Avoid unaggregated charts for large datasets:** For datasets >10k rows, DO NOT use scatter charts or line charts without aggregations. Use aggregated alternatives instead:\n - For scatter plots: use heatmap or binned aggregations\n - For line charts: use GROUP BY with time buckets or aggregations\n - Histograms and count plots are always safe (they aggregate automatically)\n- **Validate columns:** Query tools will validate column existence and types\n- **Update existing panels:** Chart tools accept panelId. Pass panelId when the user wants to modify an existing chart; omit it only when creating a new panel.\n- **Handle errors gracefully:** If a query or chart creation fails, try alternative approach`;\n}\n\nconst DashboardAgentInputSchema = z.object({\n reasoning: z\n .string()\n .describe('Reasoning for why the dashboard agent is being called'),\n ...AgentIntentSchemaFields,\n tableName: z\n .string()\n .optional()\n .describe(\n 'The name of the table/dataset to analyze. Optional when the target dashboard already has a selected table.',\n ),\n dashboardId: z\n .string()\n .describe('The ID of an existing dashboard to update.'),\n maxSteps: z\n .number()\n .optional()\n .default(20)\n .describe('Maximum exploration steps (default: 20, range: 5-50)'),\n});\n\ntype DashboardAgentInputSchema = z.infer<typeof DashboardAgentInputSchema>;\n\n/**\n * Creates an AI agent tool for populating dashboards with charts and interactive panels.\n * The agent explores data through queries and creates multiple panels showing different aspects.\n *\n * @template TState - Store state type extending MosaicDashboardStoreState\n * @param options - Configuration options for the dashboard agent\n * @param options.store - Zustand store instance for state management\n * @param options.databaseAdapter - Adapter for database operations and queries\n * @param options.chartToolsOptions - Optional chart configuration and type restrictions\n * @param options.extraTools - Optional factory for additional custom tools (e.g., map panels)\n * @returns Tool instance that orchestrates multi-turn dashboard creation via a ToolLoopAgent\n */\nexport function createDashboardAgentTool<\n TState extends MosaicDashboardStoreState,\n>(options: CreateDashboardAgentToolOptions<TState>): Tool {\n const {store, databaseAdapter, chartToolsOptions, extraTools} = options;\n\n return tool({\n description: `An AI agent that populates a dashboard with charts and interactive panels.\n\nThis agent:\n- Queries the data to discover patterns and insights\n- Creates charts (histograms, scatter plots, heatmaps, box plots, etc.)\n- Adds Data Table Explorer panels for tabular analysis\n- Builds interactive dashboards for data exploration\n\nREQUIRED PARAMETERS:\n- dashboardId: The ID of the dashboard to populate\n- intent: What insights, patterns, or specific charts to create\n\nOPTIONAL PARAMETERS:\n- tableName: The dataset to analyze. If omitted, the dashboard's selected table is used.\n\nThe agent will explore the data and create 3-5 panels showing different aspects based on the intent.\n\nIMPORTANT: IF primary artefact in run context is a dashboard, prioritize using this tool for any queries or data analysis tasks.`,\n inputSchema: DashboardAgentInputSchema,\n execute: async (params, toolOptions): Promise<DashboardAgentResult> => {\n const {dashboardId, maxSteps} = params;\n const {intent} = params;\n\n const dashboardAdapter = createDashboardAiAdapter(store, dashboardId);\n\n try {\n const state = store.getState();\n const tableName =\n params.tableName ?? dashboardAdapter.getSelectedTable?.();\n\n if (!tableName) {\n throw new AiAgentError(\n 'Dashboard tableName was not provided and the dashboard has no selected table.',\n );\n }\n\n const dataTable = ensureTable(databaseAdapter, tableName);\n\n await dashboardAdapter.setSelectedTable(\n dataTable.table ? getMosaicTableIdentity(dataTable.table) : tableName,\n );\n\n const dataTools = options.createDataTools?.({store}) ?? {};\n\n const agent = new ToolLoopAgent({\n model: options.getModel({state}),\n tools: {\n ...dataTools,\n ...createDashboardAiTools({\n dashboardAdapter,\n databaseAdapter,\n chartToolsOptions,\n extraTools,\n }),\n },\n stopWhen: [stepCountIs(Math.max(5, Math.min(50, maxSteps ?? 20)))],\n instructions: [\n options.instructions ?? getDashboardAgentInstructions(options),\n options.additionalInstructions,\n ]\n .filter(Boolean)\n .join('\\n\\n'),\n });\n\n const result = await options.runSubAgent({\n agent,\n prompt: intent,\n store,\n parentToolCallId: toolOptions?.toolCallId || '',\n abortSignal: toolOptions?.abortSignal,\n });\n\n const metadata = calculateAgentResultMetadata(\n tableName,\n result.agentToolCalls,\n );\n\n return {\n success: true,\n finalOutput: result.finalOutput || 'Dashboard created successfully.',\n dashboardId,\n metadata,\n };\n } catch (error) {\n const errorMessage =\n error instanceof Error ? error.message : String(error);\n\n const friendlyMessage =\n error instanceof AiAgentError\n ? errorMessage\n : 'Dashboard agent execution failed.';\n\n return {\n success: false,\n finalOutput: friendlyMessage,\n dashboardId,\n error: errorMessage,\n };\n }\n },\n });\n}\n"]}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { DashboardAiAdapter } from './dashboard-types';
|
|
2
|
+
import { MosaicDashboardStoreState } from '../../dashboard/MosaicDashboardSlice';
|
|
3
|
+
import { AiStore } from '../types';
|
|
4
|
+
/**
|
|
5
|
+
* Creates a dashboard adapter for AI operations scoped to a specific dashboard.
|
|
6
|
+
* The adapter provides methods for managing panels, tables, and dashboard state.
|
|
7
|
+
*
|
|
8
|
+
* @template TState - Store state type extending MosaicDashboardStoreState
|
|
9
|
+
* @param store - Zustand store instance with dashboard management capabilities
|
|
10
|
+
* @param dashboardId - ID of the dashboard to scope adapter operations to
|
|
11
|
+
* @returns Dashboard adapter instance with panel and table management methods
|
|
12
|
+
*/
|
|
13
|
+
export declare function createDashboardAiAdapter<TState extends MosaicDashboardStoreState>(store: AiStore<TState>, dashboardId: string): DashboardAiAdapter;
|
|
14
|
+
//# sourceMappingURL=createDashboardAiAdapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createDashboardAiAdapter.d.ts","sourceRoot":"","sources":["../../../src/ai/dashboard/createDashboardAiAdapter.ts"],"names":[],"mappings":"AAIA,OAAO,EAAC,kBAAkB,EAAC,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAC,yBAAyB,EAAC,MAAM,sCAAsC,CAAC;AAE/E,OAAO,EAAC,OAAO,EAAC,MAAM,UAAU,CAAC;AAsBjC;;;;;;;;GAQG;AACH,wBAAgB,wBAAwB,CACtC,MAAM,SAAS,yBAAyB,EACxC,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,MAAM,GAAG,kBAAkB,CAwEjE"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { hasCommandSliceState, } from '@sqlrooms/room-store';
|
|
2
|
+
import { MOSAIC_DASHBOARD_COMMAND_IDS } from '../../dashboard/MosaicDashboardCommands';
|
|
3
|
+
function getCommands(store) {
|
|
4
|
+
const state = store.getState();
|
|
5
|
+
return hasCommandSliceState(state) ? state.commands : undefined;
|
|
6
|
+
}
|
|
7
|
+
function hasCommand(store, commandId) {
|
|
8
|
+
return Boolean(getCommands(store)?.getCommand(commandId));
|
|
9
|
+
}
|
|
10
|
+
function assertCommandSuccess(result, commandId) {
|
|
11
|
+
if (!result.success) {
|
|
12
|
+
throw new Error(result.error ?? result.message ?? `Command "${commandId}" failed.`);
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Creates a dashboard adapter for AI operations scoped to a specific dashboard.
|
|
17
|
+
* The adapter provides methods for managing panels, tables, and dashboard state.
|
|
18
|
+
*
|
|
19
|
+
* @template TState - Store state type extending MosaicDashboardStoreState
|
|
20
|
+
* @param store - Zustand store instance with dashboard management capabilities
|
|
21
|
+
* @param dashboardId - ID of the dashboard to scope adapter operations to
|
|
22
|
+
* @returns Dashboard adapter instance with panel and table management methods
|
|
23
|
+
*/
|
|
24
|
+
export function createDashboardAiAdapter(store, dashboardId) {
|
|
25
|
+
return {
|
|
26
|
+
getSelectedTable: () => store.getState().mosaicDashboard.getDashboard(dashboardId)?.selectedTable,
|
|
27
|
+
getPanels: () => store.getState().mosaicDashboard.getDashboard(dashboardId)?.panels ?? [],
|
|
28
|
+
setSelectedTable: async (tableName) => {
|
|
29
|
+
const commandId = MOSAIC_DASHBOARD_COMMAND_IDS.setSelectedTable;
|
|
30
|
+
if (!hasCommand(store, commandId)) {
|
|
31
|
+
store
|
|
32
|
+
.getState()
|
|
33
|
+
.mosaicDashboard.setSelectedTable(dashboardId, tableName);
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
const result = await getCommands(store).invokeCommand(commandId, { dashboardId, tableName }, { surface: 'ai', actor: 'dashboard-ai-adapter' });
|
|
37
|
+
assertCommandSuccess(result, commandId);
|
|
38
|
+
},
|
|
39
|
+
addPanel: async (panel) => {
|
|
40
|
+
const commandId = MOSAIC_DASHBOARD_COMMAND_IDS.addPanel;
|
|
41
|
+
if (!hasCommand(store, commandId)) {
|
|
42
|
+
return store.getState().mosaicDashboard.addPanel(dashboardId, panel);
|
|
43
|
+
}
|
|
44
|
+
const result = await getCommands(store).invokeCommand(commandId, { dashboardId, panel }, { surface: 'ai', actor: 'dashboard-ai-adapter' });
|
|
45
|
+
assertCommandSuccess(result, commandId);
|
|
46
|
+
return (result.data?.panelId ?? panel.id);
|
|
47
|
+
},
|
|
48
|
+
updatePanel: async (panelId, patch) => {
|
|
49
|
+
const commandId = MOSAIC_DASHBOARD_COMMAND_IDS.updatePanel;
|
|
50
|
+
if (!hasCommand(store, commandId)) {
|
|
51
|
+
store
|
|
52
|
+
.getState()
|
|
53
|
+
.mosaicDashboard.updatePanel(dashboardId, panelId, patch);
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
const result = await getCommands(store).invokeCommand(commandId, { dashboardId, panelId, patch }, { surface: 'ai', actor: 'dashboard-ai-adapter' });
|
|
57
|
+
assertCommandSuccess(result, commandId);
|
|
58
|
+
},
|
|
59
|
+
removePanel: async (panelId) => {
|
|
60
|
+
const commandId = MOSAIC_DASHBOARD_COMMAND_IDS.removePanel;
|
|
61
|
+
if (!hasCommand(store, commandId)) {
|
|
62
|
+
store.getState().mosaicDashboard.removePanel(dashboardId, panelId);
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
const result = await getCommands(store).invokeCommand(commandId, { dashboardId, panelId }, { surface: 'ai', actor: 'dashboard-ai-adapter' });
|
|
66
|
+
assertCommandSuccess(result, commandId);
|
|
67
|
+
},
|
|
68
|
+
getPanel: (panelId) => store
|
|
69
|
+
.getState()
|
|
70
|
+
.mosaicDashboard.getDashboard(dashboardId)
|
|
71
|
+
?.panels.find((panel) => panel.id === panelId),
|
|
72
|
+
getPanelIssue: (panelId) => store.getState().mosaicDashboard.getPanelIssue(dashboardId, panelId),
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=createDashboardAiAdapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createDashboardAiAdapter.js","sourceRoot":"","sources":["../../../src/ai/dashboard/createDashboardAiAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,oBAAoB,GAErB,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EAAC,4BAA4B,EAAC,MAAM,yCAAyC,CAAC;AAGrF,SAAS,WAAW,CAAC,KAAyC;IAC5D,MAAM,KAAK,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC;IAC/B,OAAO,oBAAoB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;AAClE,CAAC;AAED,SAAS,UAAU,CACjB,KAAyC,EACzC,SAAiB;IAEjB,OAAO,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC;AAC5D,CAAC;AAED,SAAS,oBAAoB,CAAC,MAAyB,EAAE,SAAiB;IACxE,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CACb,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,OAAO,IAAI,YAAY,SAAS,WAAW,CACnE,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,wBAAwB,CAEtC,KAAsB,EAAE,WAAmB;IAC3C,OAAO;QACL,gBAAgB,EAAE,GAAG,EAAE,CACrB,KAAK,CAAC,QAAQ,EAAE,CAAC,eAAe,CAAC,YAAY,CAAC,WAAW,CAAC,EAAE,aAAa;QAC3E,SAAS,EAAE,GAAG,EAAE,CACd,KAAK,CAAC,QAAQ,EAAE,CAAC,eAAe,CAAC,YAAY,CAAC,WAAW,CAAC,EAAE,MAAM,IAAI,EAAE;QAC1E,gBAAgB,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE;YACpC,MAAM,SAAS,GAAG,4BAA4B,CAAC,gBAAgB,CAAC;YAChE,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,SAAS,CAAC,EAAE,CAAC;gBAClC,KAAK;qBACF,QAAQ,EAAE;qBACV,eAAe,CAAC,gBAAgB,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;gBAC5D,OAAO;YACT,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,KAAK,CAAE,CAAC,aAAa,CACpD,SAAS,EACT,EAAC,WAAW,EAAE,SAAS,EAAC,EACxB,EAAC,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,sBAAsB,EAAC,CAC/C,CAAC;YACF,oBAAoB,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;QAC1C,CAAC;QACD,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;YACxB,MAAM,SAAS,GAAG,4BAA4B,CAAC,QAAQ,CAAC;YACxD,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,SAAS,CAAC,EAAE,CAAC;gBAClC,OAAO,KAAK,CAAC,QAAQ,EAAE,CAAC,eAAe,CAAC,QAAQ,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;YACvE,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,KAAK,CAAE,CAAC,aAAa,CACpD,SAAS,EACT,EAAC,WAAW,EAAE,KAAK,EAAC,EACpB,EAAC,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,sBAAsB,EAAC,CAC/C,CAAC;YACF,oBAAoB,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;YACxC,OAAO,CACJ,MAAM,CAAC,IAAuC,EAAE,OAAO,IAAI,KAAK,CAAC,EAAE,CACrE,CAAC;QACJ,CAAC;QACD,WAAW,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;YACpC,MAAM,SAAS,GAAG,4BAA4B,CAAC,WAAW,CAAC;YAC3D,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,SAAS,CAAC,EAAE,CAAC;gBAClC,KAAK;qBACF,QAAQ,EAAE;qBACV,eAAe,CAAC,WAAW,CAAC,WAAW,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;gBAC5D,OAAO;YACT,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,KAAK,CAAE,CAAC,aAAa,CACpD,SAAS,EACT,EAAC,WAAW,EAAE,OAAO,EAAE,KAAK,EAAC,EAC7B,EAAC,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,sBAAsB,EAAC,CAC/C,CAAC;YACF,oBAAoB,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;QAC1C,CAAC;QACD,WAAW,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;YAC7B,MAAM,SAAS,GAAG,4BAA4B,CAAC,WAAW,CAAC;YAC3D,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,SAAS,CAAC,EAAE,CAAC;gBAClC,KAAK,CAAC,QAAQ,EAAE,CAAC,eAAe,CAAC,WAAW,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;gBACnE,OAAO;YACT,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,KAAK,CAAE,CAAC,aAAa,CACpD,SAAS,EACT,EAAC,WAAW,EAAE,OAAO,EAAC,EACtB,EAAC,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,sBAAsB,EAAC,CAC/C,CAAC;YACF,oBAAoB,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;QAC1C,CAAC;QACD,QAAQ,EAAE,CAAC,OAAO,EAAE,EAAE,CACpB,KAAK;aACF,QAAQ,EAAE;aACV,eAAe,CAAC,YAAY,CAAC,WAAW,CAAC;YAC1C,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,OAAO,CAAC;QAClD,aAAa,EAAE,CAAC,OAAO,EAAE,EAAE,CACzB,KAAK,CAAC,QAAQ,EAAE,CAAC,eAAe,CAAC,aAAa,CAAC,WAAW,EAAE,OAAO,CAAC;KACvE,CAAC;AACJ,CAAC","sourcesContent":["import {\n hasCommandSliceState,\n type RoomCommandResult,\n} from '@sqlrooms/room-store';\nimport {DashboardAiAdapter} from './dashboard-types';\nimport {MosaicDashboardStoreState} from '../../dashboard/MosaicDashboardSlice';\nimport {MOSAIC_DASHBOARD_COMMAND_IDS} from '../../dashboard/MosaicDashboardCommands';\nimport {AiStore} from '../types';\n\nfunction getCommands(store: AiStore<MosaicDashboardStoreState>) {\n const state = store.getState();\n return hasCommandSliceState(state) ? state.commands : undefined;\n}\n\nfunction hasCommand(\n store: AiStore<MosaicDashboardStoreState>,\n commandId: string,\n) {\n return Boolean(getCommands(store)?.getCommand(commandId));\n}\n\nfunction assertCommandSuccess(result: RoomCommandResult, commandId: string) {\n if (!result.success) {\n throw new Error(\n result.error ?? result.message ?? `Command \"${commandId}\" failed.`,\n );\n }\n}\n\n/**\n * Creates a dashboard adapter for AI operations scoped to a specific dashboard.\n * The adapter provides methods for managing panels, tables, and dashboard state.\n *\n * @template TState - Store state type extending MosaicDashboardStoreState\n * @param store - Zustand store instance with dashboard management capabilities\n * @param dashboardId - ID of the dashboard to scope adapter operations to\n * @returns Dashboard adapter instance with panel and table management methods\n */\nexport function createDashboardAiAdapter<\n TState extends MosaicDashboardStoreState,\n>(store: AiStore<TState>, dashboardId: string): DashboardAiAdapter {\n return {\n getSelectedTable: () =>\n store.getState().mosaicDashboard.getDashboard(dashboardId)?.selectedTable,\n getPanels: () =>\n store.getState().mosaicDashboard.getDashboard(dashboardId)?.panels ?? [],\n setSelectedTable: async (tableName) => {\n const commandId = MOSAIC_DASHBOARD_COMMAND_IDS.setSelectedTable;\n if (!hasCommand(store, commandId)) {\n store\n .getState()\n .mosaicDashboard.setSelectedTable(dashboardId, tableName);\n return;\n }\n const result = await getCommands(store)!.invokeCommand(\n commandId,\n {dashboardId, tableName},\n {surface: 'ai', actor: 'dashboard-ai-adapter'},\n );\n assertCommandSuccess(result, commandId);\n },\n addPanel: async (panel) => {\n const commandId = MOSAIC_DASHBOARD_COMMAND_IDS.addPanel;\n if (!hasCommand(store, commandId)) {\n return store.getState().mosaicDashboard.addPanel(dashboardId, panel);\n }\n const result = await getCommands(store)!.invokeCommand(\n commandId,\n {dashboardId, panel},\n {surface: 'ai', actor: 'dashboard-ai-adapter'},\n );\n assertCommandSuccess(result, commandId);\n return (\n (result.data as {panelId?: string} | undefined)?.panelId ?? panel.id\n );\n },\n updatePanel: async (panelId, patch) => {\n const commandId = MOSAIC_DASHBOARD_COMMAND_IDS.updatePanel;\n if (!hasCommand(store, commandId)) {\n store\n .getState()\n .mosaicDashboard.updatePanel(dashboardId, panelId, patch);\n return;\n }\n const result = await getCommands(store)!.invokeCommand(\n commandId,\n {dashboardId, panelId, patch},\n {surface: 'ai', actor: 'dashboard-ai-adapter'},\n );\n assertCommandSuccess(result, commandId);\n },\n removePanel: async (panelId) => {\n const commandId = MOSAIC_DASHBOARD_COMMAND_IDS.removePanel;\n if (!hasCommand(store, commandId)) {\n store.getState().mosaicDashboard.removePanel(dashboardId, panelId);\n return;\n }\n const result = await getCommands(store)!.invokeCommand(\n commandId,\n {dashboardId, panelId},\n {surface: 'ai', actor: 'dashboard-ai-adapter'},\n );\n assertCommandSuccess(result, commandId);\n },\n getPanel: (panelId) =>\n store\n .getState()\n .mosaicDashboard.getDashboard(dashboardId)\n ?.panels.find((panel) => panel.id === panelId),\n getPanelIssue: (panelId) =>\n store.getState().mosaicDashboard.getPanelIssue(dashboardId, panelId),\n };\n}\n"]}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { Tool } from 'ai';
|
|
2
|
+
import { DashboardAiAdapter, ExtraDashboardAiToolsFactory } from './dashboard-types';
|
|
3
|
+
import { DatabaseAiAdapter } from '../database-types';
|
|
4
|
+
import { ChartToolsOptions } from '../types';
|
|
5
|
+
/**
|
|
6
|
+
* Options for creating dashboard AI tools.
|
|
7
|
+
*
|
|
8
|
+
* @property databaseAdapter - Adapter for database operations and table queries
|
|
9
|
+
* @property dashboardAdapter - Adapter for dashboard-specific operations like adding panels
|
|
10
|
+
* @property chartToolsOptions - Optional configuration for chart tool behavior
|
|
11
|
+
* @property extraTools - Optional factory function for registering additional custom tools
|
|
12
|
+
*/
|
|
13
|
+
export type CreateDashboardAiToolsOptions = {
|
|
14
|
+
databaseAdapter: DatabaseAiAdapter;
|
|
15
|
+
dashboardAdapter: DashboardAiAdapter;
|
|
16
|
+
chartToolsOptions?: ChartToolsOptions;
|
|
17
|
+
extraTools?: ExtraDashboardAiToolsFactory;
|
|
18
|
+
};
|
|
19
|
+
/**
|
|
20
|
+
* Creates the complete set of AI tools for dashboard operations, including chart tools and data table explorer.
|
|
21
|
+
*
|
|
22
|
+
* @param options - Configuration options for creating dashboard tools
|
|
23
|
+
* @returns Record of tool names to Tool instances, including built-in and any extra tools
|
|
24
|
+
*/
|
|
25
|
+
export declare function createDashboardAiTools({ dashboardAdapter, databaseAdapter, chartToolsOptions, extraTools, }: CreateDashboardAiToolsOptions): Record<string, Tool>;
|
|
26
|
+
//# sourceMappingURL=createDashboardAiTools.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createDashboardAiTools.d.ts","sourceRoot":"","sources":["../../../src/ai/dashboard/createDashboardAiTools.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,IAAI,EAAC,MAAM,IAAI,CAAC;AAG7B,OAAO,EACL,kBAAkB,EAClB,4BAA4B,EAC7B,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EAAC,iBAAiB,EAAC,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAC,iBAAiB,EAAC,MAAM,UAAU,CAAC;AAI3C;;;;;;;GAOG;AACH,MAAM,MAAM,6BAA6B,GAAG;IAC1C,eAAe,EAAE,iBAAiB,CAAC;IACnC,gBAAgB,EAAE,kBAAkB,CAAC;IACrC,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;IACtC,UAAU,CAAC,EAAE,4BAA4B,CAAC;CAC3C,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,EACrC,gBAAgB,EAChB,eAAe,EACf,iBAAiB,EACjB,UAAU,GACX,EAAE,6BAA6B,GAAG,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAmCtD"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { ensureNoOverride } from '../tool-helpers';
|
|
2
|
+
import { createDashboardChartTools } from './createDashboardChartTools';
|
|
3
|
+
import { createDashboardDataTableExplorerTool } from './createDashboardDataTableExplorerTool';
|
|
4
|
+
import { KnownDashboardTools } from './constants';
|
|
5
|
+
import { createListDashboardPanelsTool } from './createListDashboardPanelsTool';
|
|
6
|
+
/**
|
|
7
|
+
* Creates the complete set of AI tools for dashboard operations, including chart tools and data table explorer.
|
|
8
|
+
*
|
|
9
|
+
* @param options - Configuration options for creating dashboard tools
|
|
10
|
+
* @returns Record of tool names to Tool instances, including built-in and any extra tools
|
|
11
|
+
*/
|
|
12
|
+
export function createDashboardAiTools({ dashboardAdapter, databaseAdapter, chartToolsOptions, extraTools, }) {
|
|
13
|
+
const chartTools = createDashboardChartTools({
|
|
14
|
+
databaseAdapter,
|
|
15
|
+
dashboardAdapter,
|
|
16
|
+
chartToolsOptions,
|
|
17
|
+
});
|
|
18
|
+
const dataTableExplorerTool = createDashboardDataTableExplorerTool({
|
|
19
|
+
databaseAdapter,
|
|
20
|
+
dashboardAdapter,
|
|
21
|
+
});
|
|
22
|
+
const listDashboardPanelsTool = createListDashboardPanelsTool({
|
|
23
|
+
dashboardAdapter,
|
|
24
|
+
});
|
|
25
|
+
const builtInTools = {
|
|
26
|
+
[KnownDashboardTools.list_dashboard_panels]: listDashboardPanelsTool,
|
|
27
|
+
...chartTools,
|
|
28
|
+
[KnownDashboardTools.create_dashboard_panel_data_table_explorer]: dataTableExplorerTool,
|
|
29
|
+
};
|
|
30
|
+
const additionalTools = extraTools?.({
|
|
31
|
+
databaseAdapter,
|
|
32
|
+
dashboardAdapter,
|
|
33
|
+
}) ?? {};
|
|
34
|
+
ensureNoOverride(builtInTools, additionalTools);
|
|
35
|
+
return {
|
|
36
|
+
...builtInTools,
|
|
37
|
+
...additionalTools,
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=createDashboardAiTools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createDashboardAiTools.js","sourceRoot":"","sources":["../../../src/ai/dashboard/createDashboardAiTools.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,gBAAgB,EAAC,MAAM,iBAAiB,CAAC;AAMjD,OAAO,EAAC,yBAAyB,EAAC,MAAM,6BAA6B,CAAC;AACtE,OAAO,EAAC,oCAAoC,EAAC,MAAM,wCAAwC,CAAC;AAG5F,OAAO,EAAC,mBAAmB,EAAC,MAAM,aAAa,CAAC;AAChD,OAAO,EAAC,6BAA6B,EAAC,MAAM,iCAAiC,CAAC;AAiB9E;;;;;GAKG;AACH,MAAM,UAAU,sBAAsB,CAAC,EACrC,gBAAgB,EAChB,eAAe,EACf,iBAAiB,EACjB,UAAU,GACoB;IAC9B,MAAM,UAAU,GAAG,yBAAyB,CAAC;QAC3C,eAAe;QACf,gBAAgB;QAChB,iBAAiB;KAClB,CAAC,CAAC;IAEH,MAAM,qBAAqB,GAAG,oCAAoC,CAAC;QACjE,eAAe;QACf,gBAAgB;KACjB,CAAC,CAAC;IAEH,MAAM,uBAAuB,GAAG,6BAA6B,CAAC;QAC5D,gBAAgB;KACjB,CAAC,CAAC;IAEH,MAAM,YAAY,GAAyB;QACzC,CAAC,mBAAmB,CAAC,qBAAqB,CAAC,EAAE,uBAAuB;QACpE,GAAG,UAAU;QACb,CAAC,mBAAmB,CAAC,0CAA0C,CAAC,EAC9D,qBAAqB;KACxB,CAAC;IAEF,MAAM,eAAe,GACnB,UAAU,EAAE,CAAC;QACX,eAAe;QACf,gBAAgB;KACjB,CAAC,IAAI,EAAE,CAAC;IAEX,gBAAgB,CAAC,YAAY,EAAE,eAAe,CAAC,CAAC;IAEhD,OAAO;QACL,GAAG,YAAY;QACf,GAAG,eAAe;KACnB,CAAC;AACJ,CAAC","sourcesContent":["import type {Tool} from 'ai';\nimport {ensureNoOverride} from '../tool-helpers';\n\nimport {\n DashboardAiAdapter,\n ExtraDashboardAiToolsFactory,\n} from './dashboard-types';\nimport {createDashboardChartTools} from './createDashboardChartTools';\nimport {createDashboardDataTableExplorerTool} from './createDashboardDataTableExplorerTool';\nimport {DatabaseAiAdapter} from '../database-types';\nimport {ChartToolsOptions} from '../types';\nimport {KnownDashboardTools} from './constants';\nimport {createListDashboardPanelsTool} from './createListDashboardPanelsTool';\n\n/**\n * Options for creating dashboard AI tools.\n *\n * @property databaseAdapter - Adapter for database operations and table queries\n * @property dashboardAdapter - Adapter for dashboard-specific operations like adding panels\n * @property chartToolsOptions - Optional configuration for chart tool behavior\n * @property extraTools - Optional factory function for registering additional custom tools\n */\nexport type CreateDashboardAiToolsOptions = {\n databaseAdapter: DatabaseAiAdapter;\n dashboardAdapter: DashboardAiAdapter;\n chartToolsOptions?: ChartToolsOptions;\n extraTools?: ExtraDashboardAiToolsFactory;\n};\n\n/**\n * Creates the complete set of AI tools for dashboard operations, including chart tools and data table explorer.\n *\n * @param options - Configuration options for creating dashboard tools\n * @returns Record of tool names to Tool instances, including built-in and any extra tools\n */\nexport function createDashboardAiTools({\n dashboardAdapter,\n databaseAdapter,\n chartToolsOptions,\n extraTools,\n}: CreateDashboardAiToolsOptions): Record<string, Tool> {\n const chartTools = createDashboardChartTools({\n databaseAdapter,\n dashboardAdapter,\n chartToolsOptions,\n });\n\n const dataTableExplorerTool = createDashboardDataTableExplorerTool({\n databaseAdapter,\n dashboardAdapter,\n });\n\n const listDashboardPanelsTool = createListDashboardPanelsTool({\n dashboardAdapter,\n });\n\n const builtInTools: Record<string, Tool> = {\n [KnownDashboardTools.list_dashboard_panels]: listDashboardPanelsTool,\n ...chartTools,\n [KnownDashboardTools.create_dashboard_panel_data_table_explorer]:\n dataTableExplorerTool,\n };\n\n const additionalTools =\n extraTools?.({\n databaseAdapter,\n dashboardAdapter,\n }) ?? {};\n\n ensureNoOverride(builtInTools, additionalTools);\n\n return {\n ...builtInTools,\n ...additionalTools,\n };\n}\n"]}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { Tool } from 'ai';
|
|
2
|
+
import { DatabaseAiAdapter } from '../database-types';
|
|
3
|
+
import { DashboardAiAdapter } from './dashboard-types';
|
|
4
|
+
import { ChartToolsOptions } from '../types';
|
|
5
|
+
/**
|
|
6
|
+
* Parameters for creating dashboard chart tools.
|
|
7
|
+
*
|
|
8
|
+
* @property databaseAdapter - Adapter for database operations and table queries
|
|
9
|
+
* @property dashboardAdapter - Adapter for adding panels to the dashboard
|
|
10
|
+
* @property chartToolsOptions - Optional configuration for chart types and data point limits
|
|
11
|
+
*/
|
|
12
|
+
export type CreateDashboardChartToolsParams = {
|
|
13
|
+
databaseAdapter: DatabaseAiAdapter;
|
|
14
|
+
dashboardAdapter: DashboardAiAdapter;
|
|
15
|
+
chartToolsOptions?: ChartToolsOptions;
|
|
16
|
+
};
|
|
17
|
+
/**
|
|
18
|
+
* Creates AI tools for generating chart panels in dashboards.
|
|
19
|
+
*
|
|
20
|
+
* @param params - Configuration parameters for chart tool creation
|
|
21
|
+
* @param params.databaseAdapter - Adapter for database operations
|
|
22
|
+
* @param params.dashboardAdapter - Adapter for dashboard panel management
|
|
23
|
+
* @param params.chartToolsOptions - Optional chart configuration options
|
|
24
|
+
* @returns Record of chart tool names to Tool instances, prefixed with dashboard-specific identifiers
|
|
25
|
+
*/
|
|
26
|
+
export declare function createDashboardChartTools({ databaseAdapter, dashboardAdapter, chartToolsOptions, }: CreateDashboardChartToolsParams): Record<string, Tool>;
|
|
27
|
+
//# sourceMappingURL=createDashboardChartTools.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createDashboardChartTools.d.ts","sourceRoot":"","sources":["../../../src/ai/dashboard/createDashboardChartTools.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,IAAI,EAAC,MAAM,IAAI,CAAC;AAI7B,OAAO,EAAC,iBAAiB,EAAC,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAC,kBAAkB,EAAC,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAC,iBAAiB,EAAC,MAAM,UAAU,CAAC;AAO3C;;;;;;GAMG;AACH,MAAM,MAAM,+BAA+B,GAAG;IAC5C,eAAe,EAAE,iBAAiB,CAAC;IACnC,gBAAgB,EAAE,kBAAkB,CAAC;IACrC,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;CACvC,CAAC;AAEF;;;;;;;;GAQG;AACH,wBAAgB,yBAAyB,CAAC,EACxC,eAAe,EACf,gBAAgB,EAChB,iBAAiB,GAClB,EAAE,+BAA+B,GAAG,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAoDxD"}
|