drizzle-cube 0.9.7 → 0.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/adapters/ActivityGridChart.config-BW77mjsu.cjs +1 -0
- package/dist/adapters/ActivityGridChart.config-DQRnTU6e.js +2 -0
- package/dist/adapters/AreaChart.config-DbvLVr-Y.cjs +1 -0
- package/dist/adapters/AreaChart.config-JbVNmary.js +2 -0
- package/dist/adapters/BarChart.config-Bkpwgqbk.js +2 -0
- package/dist/adapters/BarChart.config-jgDE3NUv.cjs +1 -0
- package/dist/adapters/BoxPlotChart.config-9wKKOZfN.cjs +1 -0
- package/dist/adapters/BoxPlotChart.config-Di99sPNJ.js +2 -0
- package/dist/adapters/BubbleChart.config-Cdg9nPFz.js +2 -0
- package/dist/adapters/BubbleChart.config-CwDXzdxC.cjs +1 -0
- package/dist/adapters/CandlestickChart.config-B45GmJYV.js +2 -0
- package/dist/adapters/CandlestickChart.config-C8BXzmbD.cjs +1 -0
- package/dist/adapters/DataTable.config-c-24M_qU.cjs +1 -0
- package/dist/adapters/DataTable.config-fic2OroS.js +2 -0
- package/dist/adapters/DotStripChart.config-BcNT3Les.cjs +1 -0
- package/dist/adapters/DotStripChart.config-Cqmgw5_z.js +2 -0
- package/dist/adapters/FunnelChart.config-D1E5zSay.cjs +1 -0
- package/dist/adapters/FunnelChart.config-DPjSoYex.js +2 -0
- package/dist/adapters/GaugeChart.config-BDcvnYln.js +2 -0
- package/dist/adapters/GaugeChart.config-DQnx37Jf.cjs +1 -0
- package/dist/adapters/HeatMapChart.config-BWd863ik.js +2 -0
- package/dist/adapters/HeatMapChart.config-HEbSm_Zt.cjs +1 -0
- package/dist/adapters/KpiDelta.config-Bj3kfmWv.js +2 -0
- package/dist/adapters/KpiDelta.config-CaLnl2w_.cjs +1 -0
- package/dist/adapters/KpiNumber.config-Da9HxGT8.cjs +1 -0
- package/dist/adapters/KpiNumber.config-n4SwHHlD.js +2 -0
- package/dist/adapters/KpiText.config-8VzcnlPF.cjs +1 -0
- package/dist/adapters/KpiText.config-CItv_gG6.js +2 -0
- package/dist/adapters/LineChart.config-DQ7nHYrr.js +2 -0
- package/dist/adapters/LineChart.config-_98RmRA_.cjs +1 -0
- package/dist/adapters/MarkdownChart.config-BpbqJDoz.cjs +1 -0
- package/dist/adapters/MarkdownChart.config-Dz7KZ621.js +2 -0
- package/dist/adapters/MeasureProfileChart.config-BTCTP7L0.js +2 -0
- package/dist/adapters/MeasureProfileChart.config-DzPxIxB5.cjs +1 -0
- package/dist/adapters/PieChart.config-BhjlnVFv.js +2 -0
- package/dist/adapters/PieChart.config-DJlGNsBY.cjs +1 -0
- package/dist/adapters/ProportionBarChart.config-Byp_8diR.cjs +1 -0
- package/dist/adapters/ProportionBarChart.config-RyjNhw3T.js +2 -0
- package/dist/adapters/RadarChart.config-BWdv4uyp.js +2 -0
- package/dist/adapters/RadarChart.config-kW4oIVi4.cjs +1 -0
- package/dist/adapters/RadialBarChart.config-CFYPoRQY.cjs +1 -0
- package/dist/adapters/RadialBarChart.config-D2-_-Z64.js +2 -0
- package/dist/adapters/RecordsTable.config-B7KFt3kd.cjs +1 -0
- package/dist/adapters/RecordsTable.config-S_aiXGKe.js +2 -0
- package/dist/adapters/RetentionCombinedChart.config-CVGWozL3.js +2 -0
- package/dist/adapters/RetentionCombinedChart.config-Cd0pTdHY.cjs +1 -0
- package/dist/adapters/RetentionHeatmap.config-BNqtWFjQ.js +2 -0
- package/dist/adapters/RetentionHeatmap.config-CMi1h_5M.cjs +1 -0
- package/dist/adapters/SankeyChart.config-COIfx3Ua.cjs +1 -0
- package/dist/adapters/SankeyChart.config-DIh4nEk2.js +2 -0
- package/dist/adapters/ScatterChart.config-CrSQhlT4.js +2 -0
- package/dist/adapters/ScatterChart.config-DRgg-HAm.cjs +1 -0
- package/dist/adapters/SunburstChart.config-08-ufQaK.cjs +1 -0
- package/dist/adapters/SunburstChart.config-DmNgAJrO.js +2 -0
- package/dist/adapters/TreeMapChart.config-7k2repRB.cjs +1 -0
- package/dist/adapters/TreeMapChart.config-C3vzB2dD.js +2 -0
- package/dist/adapters/WaterfallChart.config-AV2pHgrb.js +2 -0
- package/dist/adapters/WaterfallChart.config-USpcvapo.cjs +1 -0
- package/dist/adapters/express/index.cjs +1 -1
- package/dist/adapters/express/index.js +1 -1
- package/dist/adapters/fastify/index.cjs +1 -1
- package/dist/adapters/fastify/index.js +1 -1
- package/dist/adapters/{handler-DtX1YNOn.js → handler-B1_zd-qo.js} +30 -30
- package/dist/adapters/{handler-CTSg1daG.cjs → handler-CfZt5W8b.cjs} +2 -2
- package/dist/adapters/hono/index.cjs +1 -1
- package/dist/adapters/hono/index.js +1 -1
- package/dist/adapters/mcp-app-html-BNg78ecJ.js +5 -0
- package/dist/adapters/mcp-app-html-N18EJEvv.cjs +1 -0
- package/dist/adapters/mcp-app-html.cjs +1 -1
- package/dist/adapters/mcp-app-html.js +1 -1
- package/dist/adapters/mcp-tools.cjs +1 -1
- package/dist/adapters/mcp-tools.js +1 -1
- package/dist/adapters/nextjs/index.cjs +1 -1
- package/dist/adapters/nextjs/index.d.ts +7 -1
- package/dist/adapters/nextjs/index.js +1 -1
- package/dist/adapters/{openai-CWnhWp3I.js → openai-BpcMIv4e.js} +1 -1
- package/dist/adapters/openai-Br__Bn2t.cjs +19 -0
- package/dist/adapters/{openai-BwtOIJIk.cjs → openai-C32tey5N.cjs} +1 -1
- package/dist/adapters/{openai-Dqrs3PGo.js → openai-yfJF-3Rv.js} +3178 -2648
- package/dist/cjs/adapters/nextjs/index.d.ts +7 -1
- package/dist/cjs/client/components/AnalysisBuilder/AnalysisModeErrorBoundary.d.ts +1 -1
- package/dist/cjs/client/components/AnalysisBuilder/FilterValueInput.d.ts +1 -1
- package/dist/cjs/client/components/AnalysisBuilder/hooks/useFieldSearchKeyboard.d.ts +1 -1
- package/dist/cjs/client/components/AnalyticsPortlet.d.ts +1 -1
- package/dist/cjs/client/components/ChartErrorBoundary.d.ts +1 -1
- package/dist/cjs/client/components/DashboardFilters/CompactFilterBarParts.d.ts +2 -2
- package/dist/cjs/client/components/DashboardFilters/CustomDateDropdown.d.ts +1 -1
- package/dist/cjs/client/components/DashboardFilters/FilterValuePopover.d.ts +1 -1
- package/dist/cjs/client/components/DashboardFilters/XTDDropdown.d.ts +1 -1
- package/dist/cjs/client/components/DashboardFilters/useCompactFilterBar.d.ts +2 -2
- package/dist/cjs/client/components/DashboardFilters/useDashboardFilterConfigModal.d.ts +1 -1
- package/dist/cjs/client/components/DashboardFilters/useFilterDropdowns.d.ts +1 -1
- package/dist/cjs/client/components/charts/ChartTooltip.d.ts +2 -2
- package/dist/cjs/client/components/charts/recordsTableHooks.d.ts +3 -3
- package/dist/cjs/client/components/charts/useChartDimensions.d.ts +1 -1
- package/dist/cjs/client/components/charts/useKpiDimensions.d.ts +2 -2
- package/dist/cjs/client/components/dashboardPortletCard/usePortletCardActions.d.ts +1 -1
- package/dist/cjs/client/components/shared/dateRangeUtils.d.ts +7 -3
- package/dist/cjs/client/components/shared/filterItem/FilterFieldDropdown.d.ts +1 -1
- package/dist/cjs/client/components/shared/filterValueSelector/FilterValueInputs.d.ts +1 -1
- package/dist/cjs/client/components/shared/filterValueSelector/useFilterValueSelectorState.d.ts +1 -1
- package/dist/client/chunks/{DashboardEditModal-DfaeSZGf.js → DashboardEditModal-P-HUNrcp.js} +654 -532
- package/dist/client/chunks/DashboardEditModal-P-HUNrcp.js.map +1 -0
- package/dist/client/chunks/DotStripChart-in6QHc0b.js.map +1 -1
- package/dist/client/chunks/ProportionBarChart-CjuOm7NT.js.map +1 -1
- package/dist/client/chunks/RecordsTable-CXXsiaV1.js.map +1 -1
- package/dist/client/chunks/RetentionCombinedChart-DFCeEFkx.js.map +1 -1
- package/dist/client/chunks/RetentionHeatmap-jpshJ2Af.js.map +1 -1
- package/dist/client/chunks/af-ZA-C0dGb_53.js.map +1 -1
- package/dist/client/chunks/{analysis-builder-fPK8NgJW.js → analysis-builder-CRghdHVl.js} +36 -36
- package/dist/client/chunks/analysis-builder-CRghdHVl.js.map +1 -0
- package/dist/client/chunks/{analysis-builder-shared--4LqPSum.js → analysis-builder-shared-DBSxWIj8.js} +747 -939
- package/dist/client/chunks/analysis-builder-shared-DBSxWIj8.js.map +1 -0
- package/dist/client/chunks/chart-activity-grid-DGazwi4C.js.map +1 -1
- package/dist/client/chunks/chart-area-zyLGD-ym.js.map +1 -1
- package/dist/client/chunks/chart-bar-DMCBq8qJ.js.map +1 -1
- package/dist/client/chunks/chart-box-plot-5Z55A-it.js.map +1 -1
- package/dist/client/chunks/chart-bubble-YD28dX8w.js.map +1 -1
- package/dist/client/chunks/chart-candlestick-BUMpBI08.js.map +1 -1
- package/dist/client/chunks/chart-config-activity-grid-C4vXGQNu.js.map +1 -1
- package/dist/client/chunks/chart-config-area-DsrZCIwF.js.map +1 -1
- package/dist/client/chunks/chart-config-bar-BixSs43E.js.map +1 -1
- package/dist/client/chunks/chart-config-box-plot-DMuJZqkr.js.map +1 -1
- package/dist/client/chunks/chart-config-bubble-1IyZinH0.js.map +1 -1
- package/dist/client/chunks/chart-config-candlestick-QwQwJB_-.js.map +1 -1
- package/dist/client/chunks/chart-config-data-table-CrGyS7aJ.js.map +1 -1
- package/dist/client/chunks/chart-config-funnel-DMLLKtPF.js.map +1 -1
- package/dist/client/chunks/chart-config-gauge-CJktdjox.js.map +1 -1
- package/dist/client/chunks/chart-config-heat-map-CJF65SyL.js.map +1 -1
- package/dist/client/chunks/chart-config-kpi-delta-Cl7k6jTj.js.map +1 -1
- package/dist/client/chunks/chart-config-kpi-number-DCcnANWC.js.map +1 -1
- package/dist/client/chunks/chart-config-kpi-text-DnnxvOSA.js.map +1 -1
- package/dist/client/chunks/chart-config-line-CBF9Px9b.js.map +1 -1
- package/dist/client/chunks/chart-config-markdown-CK8PAWUg.js.map +1 -1
- package/dist/client/chunks/chart-config-measure-profile-CRSRIpKh.js.map +1 -1
- package/dist/client/chunks/chart-config-pie-DZLa6Eqm.js.map +1 -1
- package/dist/client/chunks/chart-config-radar-DR6vHHyd.js.map +1 -1
- package/dist/client/chunks/chart-config-radial-bar-DVFou4fB.js.map +1 -1
- package/dist/client/chunks/chart-config-sankey-De8E0C1A.js.map +1 -1
- package/dist/client/chunks/chart-config-scatter-CWA89oX4.js.map +1 -1
- package/dist/client/chunks/chart-config-sunburst-B4NUYHMH.js.map +1 -1
- package/dist/client/chunks/chart-config-tree-map-Uhise6Bx.js.map +1 -1
- package/dist/client/chunks/chart-config-waterfall-DlQb_PLh.js.map +1 -1
- package/dist/client/chunks/chart-data-table-BdMo3zVh.js.map +1 -1
- package/dist/client/chunks/chart-funnel-BRyZS6ie.js.map +1 -1
- package/dist/client/chunks/chart-gauge-DxgHlZKp.js.map +1 -1
- package/dist/client/chunks/chart-heat-map-5jHm3f-V.js.map +1 -1
- package/dist/client/chunks/chart-kpi-delta-C84P-mwu.js.map +1 -1
- package/dist/client/chunks/chart-kpi-number-D9GqtBWw.js.map +1 -1
- package/dist/client/chunks/chart-kpi-text-D3HqxXzU.js.map +1 -1
- package/dist/client/chunks/chart-line-IEgiF8Nv.js.map +1 -1
- package/dist/client/chunks/chart-markdown-B_2Ed7FJ.js.map +1 -1
- package/dist/client/chunks/chart-measure-profile-CWsPrQhH.js.map +1 -1
- package/dist/client/chunks/chart-pie-BEB2sCXF.js.map +1 -1
- package/dist/client/chunks/chart-radar-BbSbXKbP.js.map +1 -1
- package/dist/client/chunks/chart-radial-bar-CNYD7tkM.js.map +1 -1
- package/dist/client/chunks/chart-sankey-DKnTIvSr.js.map +1 -1
- package/dist/client/chunks/chart-scatter-CSWF6-lx.js.map +1 -1
- package/dist/client/chunks/chart-sunburst-CdGzCq7q.js.map +1 -1
- package/dist/client/chunks/chart-tree-map-BiXB7EiM.js.map +1 -1
- package/dist/client/chunks/chart-waterfall-5rSDeLEZ.js.map +1 -1
- package/dist/client/chunks/charts-core-CKpkoMCa.js.map +1 -1
- package/dist/client/chunks/charts-loader-BTI0UPK4.js.map +1 -1
- package/dist/client/chunks/core-BWRP9s8x.js.map +1 -1
- package/dist/client/chunks/dashboardExport-Db3rmUP1.js.map +1 -1
- package/dist/client/chunks/dist-COqN0-Yj.js.map +1 -1
- package/dist/client/chunks/en-US-HP6FHuNy.js.map +1 -1
- package/dist/client/chunks/exceljs.min-CdNVdwM3.js.map +1 -1
- package/dist/client/chunks/javascript-D6aJaG8F.js.map +1 -1
- package/dist/client/chunks/json-BrJhaXJI.js.map +1 -1
- package/dist/client/chunks/nl-NL-kRjxedTf.js.map +1 -1
- package/dist/client/chunks/providers-DwQCKdGW.js.map +1 -1
- package/dist/client/chunks/retention-ChW9jYdy.js.map +1 -1
- package/dist/client/chunks/schema-visualization-BbvL74Sf.js.map +1 -1
- package/dist/client/chunks/sql-CmVzGP4w.js.map +1 -1
- package/dist/client/chunks/useDirtyStateTracking-BfG1lX_3.js.map +1 -1
- package/dist/client/chunks/useExplainAI-CDFhgmpE.js.map +1 -1
- package/dist/client/chunks/useNotebookLayout-Ck3Z3uzg.js.map +1 -1
- package/dist/client/chunks/utils-CToHkuhU.js.map +1 -1
- package/dist/client/chunks/vendor-DeckzF1j.js.map +1 -1
- package/dist/client/components/AnalysisBuilder/AnalysisModeErrorBoundary.d.ts +1 -1
- package/dist/client/components/AnalysisBuilder/FilterValueInput.d.ts +1 -1
- package/dist/client/components/AnalysisBuilder/hooks/useFieldSearchKeyboard.d.ts +1 -1
- package/dist/client/components/AnalyticsPortlet.d.ts +1 -1
- package/dist/client/components/ChartErrorBoundary.d.ts +1 -1
- package/dist/client/components/DashboardFilters/CompactFilterBarParts.d.ts +2 -2
- package/dist/client/components/DashboardFilters/CustomDateDropdown.d.ts +1 -1
- package/dist/client/components/DashboardFilters/FilterValuePopover.d.ts +1 -1
- package/dist/client/components/DashboardFilters/XTDDropdown.d.ts +1 -1
- package/dist/client/components/DashboardFilters/useCompactFilterBar.d.ts +2 -2
- package/dist/client/components/DashboardFilters/useDashboardFilterConfigModal.d.ts +1 -1
- package/dist/client/components/DashboardFilters/useFilterDropdowns.d.ts +1 -1
- package/dist/client/components/charts/ChartTooltip.d.ts +2 -2
- package/dist/client/components/charts/recordsTableHooks.d.ts +3 -3
- package/dist/client/components/charts/useChartDimensions.d.ts +1 -1
- package/dist/client/components/charts/useKpiDimensions.d.ts +2 -2
- package/dist/client/components/dashboardPortletCard/usePortletCardActions.d.ts +1 -1
- package/dist/client/components/shared/dateRangeUtils.d.ts +7 -3
- package/dist/client/components/shared/filterItem/FilterFieldDropdown.d.ts +1 -1
- package/dist/client/components/shared/filterValueSelector/FilterValueInputs.d.ts +1 -1
- package/dist/client/components/shared/filterValueSelector/useFilterValueSelectorState.d.ts +1 -1
- package/dist/client/components.js +2 -2
- package/dist/client/index.js +8 -8
- package/dist/client/index.js.map +1 -1
- package/dist/client/utils.js.map +1 -1
- package/dist/client-bundle-stats.html +1 -1
- package/dist/mcp-app/mcp-app.html +147 -148
- package/dist/server/index.cjs +1 -1
- package/dist/server/index.js +1 -1
- package/dist/server/{openai-D346-vmt.cjs → openai-1GZyKucn.cjs} +1 -1
- package/dist/server/openai-DjP9PbWc.cjs +19 -0
- package/dist/server/{openai-SILGL2q_.js → openai-Dkcj08jM.js} +1 -1
- package/dist/server/{openai-D0vh48Oi.js → openai-DvjrXVVl.js} +3178 -2648
- package/package.json +19 -16
- package/dist/adapters/ActivityGridChart.config-C2kT9qd6.cjs +0 -1
- package/dist/adapters/ActivityGridChart.config-Crkwyx_5.js +0 -2
- package/dist/adapters/AreaChart.config-Cn4fTDQH.js +0 -2
- package/dist/adapters/AreaChart.config-DSBAn4xT.cjs +0 -1
- package/dist/adapters/BarChart.config-2r2_F09O.cjs +0 -1
- package/dist/adapters/BarChart.config-CorT50Sr.js +0 -2
- package/dist/adapters/BoxPlotChart.config-BM4SbL34.cjs +0 -1
- package/dist/adapters/BoxPlotChart.config-Dki3qfhN.js +0 -2
- package/dist/adapters/BubbleChart.config-DA768T1u.cjs +0 -1
- package/dist/adapters/BubbleChart.config-LJ2w0ZAz.js +0 -2
- package/dist/adapters/CandlestickChart.config-C00YG927.cjs +0 -1
- package/dist/adapters/CandlestickChart.config-D-vVDHaQ.js +0 -2
- package/dist/adapters/DataTable.config-Ml6Q3VEP.cjs +0 -1
- package/dist/adapters/DataTable.config-jwBiAUpg.js +0 -2
- package/dist/adapters/DotStripChart.config-C_dgJFje.js +0 -2
- package/dist/adapters/DotStripChart.config-D5M4xxNE.cjs +0 -1
- package/dist/adapters/FunnelChart.config-DBkjp0wh.js +0 -2
- package/dist/adapters/FunnelChart.config-Jc6DVjCx.cjs +0 -1
- package/dist/adapters/GaugeChart.config-BqW6WqXS.cjs +0 -1
- package/dist/adapters/GaugeChart.config-CyD4y_yf.js +0 -2
- package/dist/adapters/HeatMapChart.config-C_TKjH9_.cjs +0 -1
- package/dist/adapters/HeatMapChart.config-Di1KFl9H.js +0 -2
- package/dist/adapters/KpiDelta.config-qlIY4kju.js +0 -2
- package/dist/adapters/KpiDelta.config-zaqkGeS2.cjs +0 -1
- package/dist/adapters/KpiNumber.config-D1hq68b3.cjs +0 -1
- package/dist/adapters/KpiNumber.config-D9LpXMmo.js +0 -2
- package/dist/adapters/KpiText.config-BBBV_4aK.cjs +0 -1
- package/dist/adapters/KpiText.config-pqFid-lb.js +0 -2
- package/dist/adapters/LineChart.config-CFGa_jpk.js +0 -2
- package/dist/adapters/LineChart.config-DRTr24Jl.cjs +0 -1
- package/dist/adapters/MarkdownChart.config--Teyo7aa.cjs +0 -1
- package/dist/adapters/MarkdownChart.config-Cnptz8gx.js +0 -2
- package/dist/adapters/MeasureProfileChart.config-BlAnkNf6.js +0 -2
- package/dist/adapters/MeasureProfileChart.config-c4K6xVET.cjs +0 -1
- package/dist/adapters/PieChart.config-BX5FcoZn.cjs +0 -1
- package/dist/adapters/PieChart.config-DT1TCBFA.js +0 -2
- package/dist/adapters/ProportionBarChart.config-CN5ov6e6.js +0 -2
- package/dist/adapters/ProportionBarChart.config-DdrZQypv.cjs +0 -1
- package/dist/adapters/RadarChart.config-CYpWy1MI.js +0 -2
- package/dist/adapters/RadarChart.config-Cm14F-JW.cjs +0 -1
- package/dist/adapters/RadialBarChart.config-BXEmrEW0.js +0 -2
- package/dist/adapters/RadialBarChart.config-bJL8ZwT5.cjs +0 -1
- package/dist/adapters/RecordsTable.config-BifW_6cA.cjs +0 -1
- package/dist/adapters/RecordsTable.config-DOu5dLR9.js +0 -2
- package/dist/adapters/RetentionCombinedChart.config-BLTS46q4.js +0 -2
- package/dist/adapters/RetentionCombinedChart.config-DkIUp-uU.cjs +0 -1
- package/dist/adapters/RetentionHeatmap.config-Csnntt4P.js +0 -2
- package/dist/adapters/RetentionHeatmap.config-Xljn01Px.cjs +0 -1
- package/dist/adapters/SankeyChart.config-BExGzO93.cjs +0 -1
- package/dist/adapters/SankeyChart.config-DEBF3E7J.js +0 -2
- package/dist/adapters/ScatterChart.config-B9fxyVl8.cjs +0 -1
- package/dist/adapters/ScatterChart.config-CNWNsjv_.js +0 -2
- package/dist/adapters/SunburstChart.config-DyBJr_Ah.js +0 -2
- package/dist/adapters/SunburstChart.config-vXKPV3lF.cjs +0 -1
- package/dist/adapters/TreeMapChart.config-CoXSasFP.js +0 -2
- package/dist/adapters/TreeMapChart.config-iq-fCkIZ.cjs +0 -1
- package/dist/adapters/WaterfallChart.config-Coyj2j_7.cjs +0 -1
- package/dist/adapters/WaterfallChart.config-Dyf-p2Z2.js +0 -2
- package/dist/adapters/mcp-app-html-Bu4j3yZM.cjs +0 -1
- package/dist/adapters/mcp-app-html-D3GsxPcx.js +0 -5
- package/dist/adapters/openai-ClwjvwzT.cjs +0 -19
- package/dist/client/chunks/DashboardEditModal-DfaeSZGf.js.map +0 -1
- package/dist/client/chunks/analysis-builder-fPK8NgJW.js.map +0 -1
- package/dist/client/chunks/analysis-builder-shared--4LqPSum.js.map +0 -1
- package/dist/server/openai-C6tdx3yN.cjs +0 -19
package/dist/server/index.cjs
CHANGED
|
@@ -828,4 +828,4 @@ The query is validated before adding. The portlet fetches its own data.`,paramet
|
|
|
828
828
|
[IMPORTANT: Your next response MUST start with a brief text message BEFORE any tool calls. Now call add_markdown and add_portlet to visualize these results.]`}}catch(t){let n={measures:e.measures,dimensions:e.dimensions,filters:e.filters,timeDimensions:e.timeDimensions,order:e.order,limit:e.limit,...e.funnel?{funnel:e.funnel}:{},...e.flow?{flow:e.flow}:{},...e.retention?{retention:e.retention}:{}};return{result:`Query execution failed: ${t instanceof Error?t.message:`Unknown error`}\n\nAttempted query:\n${JSON.stringify(n,null,2)}`,isError:!0}}});function s(e){let r={number:`kpiNumber`,retention:`retentionHeatmap`}[e.chartType]??e.chartType,i;try{i=JSON.parse(e.query)}catch{return{error:"Invalid query: could not parse JSON string. Ensure `query` is a valid JSON string."}}i=Ef(i);let a=t.validateQuery(i,n);if(!a.isValid)return{error:`Invalid query — fix these errors and retry:\n${a.errors.join(`
|
|
829
829
|
`)}\n\nAttempted query:\n${JSON.stringify(i,null,2)}`};let o=!!(i.funnel||i.flow||i.retention),s,c=r,l;if(o)s=e.chartConfig??{};else{let t=Yp(r,e.chartConfig,i);c=t.chartType,l=t.note;let n=$p(c,e.chartConfig,i),a=Jp(c,n,i);if(!a.isValid)return{error:`Chart config invalid — fix these errors and retry:\n${a.errors.join(`
|
|
830
830
|
`)}\n\nchartType: ${c}\nAttempted chartConfig:\n${JSON.stringify(n,null,2)}\n\nQuery:\n${JSON.stringify(i,null,2)}`};s=n}return{portlet:{query:JSON.stringify(i),chartType:c,chartConfig:s,displayConfig:e.displayConfig},...l?{note:l}:{}}}return r.set(`add_portlet`,async e=>{let t=s({query:e.query,chartType:e.chartType,chartConfig:e.chartConfig,displayConfig:e.displayConfig});if(`error`in t)return{result:t.error,isError:!0};let n=`portlet-${Date.now()}-${Math.random().toString(36).slice(2,7)}`,r={id:n,title:e.title,...t.portlet};return i.set(n,r),{result:`Portlet "${e.title}" added to notebook (id: ${n}, chart: ${r.chartType}).`+(t.note?`\n${t.note}`:``)+` [Reminder: in your next response, start with a brief sentence about what you will do next BEFORE making any tool calls.]`,sideEffect:{type:`add_portlet`,data:r}}}),r.set(`update_portlet`,async e=>{let t=e.portletId,n=t?i.get(t):void 0,r=e.query??n?.query,a=e.chartType??n?.chartType;if(!t||!r||!a)return{result:`Cannot update portlet "${t??``}": it was not added in this conversation, so there is nothing to merge your change into. Call update_portlet again with the same portletId plus the full \`query\` and \`chartType\` for the chart you want.`,isError:!0};let o=s({query:r,chartType:a,chartConfig:e.chartConfig??n?.chartConfig,displayConfig:e.displayConfig??n?.displayConfig});if(`error`in o)return{result:o.error,isError:!0};let c=e.title??n?.title??`Untitled`,l={id:t,title:c,...o.portlet};return i.set(t,l),{result:`Portlet "${c}" updated (id: ${t}, chart: ${l.chartType}).`+(o.note?`\n${o.note}`:``)+` [Reminder: in your next response, start with a brief sentence about what you will do next BEFORE making any tool calls.]`,sideEffect:{type:`update_portlet`,data:l}}}),r.set(`add_markdown`,async e=>{let t=e.content||e.text||e.markdown||``;if(typeof t!=`string`||t.trim()===``)return{result:"add_markdown was called with no content, so no block was added. Call add_markdown again with the explanation text in the `content` field.",isError:!0};let n=`markdown-${Date.now()}-${Math.random().toString(36).slice(2,7)}`,r={id:n,title:e.title,content:t};return{result:`Markdown block added to notebook (id: ${n}). [Reminder: in your next response, start with a brief sentence about what you will do next BEFORE making any tool calls.]`,sideEffect:{type:`add_markdown`,data:r}}}),r.set(`save_as_dashboard`,async e=>{try{let r=e.portlets;if(!r||r.length===0)return{result:`Dashboard must contain at least one portlet.`,isError:!0};let i=[],a=new Map,o=new Map;for(let e of r){let r=e.chartType,s=r===`markdown`,c=e.query;if(!c){if(s)continue;i.push(`Portlet "${e.title}": missing query`);continue}let l;try{l=JSON.parse(c)}catch{i.push(`Portlet "${e.title}": invalid JSON query`);continue}if(l=Ef(l),s&&!cm(l))continue;let u=t.validateQuery(l,n);if(!u.isValid){i.push(`Portlet "${e.title}": ${u.errors.join(`, `)}`);continue}if(s){o.set(e,r);continue}let d=Yp(r,e.chartConfig,l).chartType,f=$p(d,e.chartConfig,l),p=Jp(d,f,l);if(!p.isValid){i.push(`Portlet "${e.title}": ${p.errors.join(`, `)}`);continue}a.set(e,f),o.set(e,d)}if(i.length>0)return{result:`Dashboard has invalid portlets — fix these errors and retry:\n${i.join(`
|
|
831
|
-
`)}`,isError:!0};let s={portlets:r.map(e=>{let t=o.get(e)??e.chartType,n=t===`markdown`,r=n?`query`:e.analysisType||`query`,i=r===`funnel`?`funnel`:r===`flow`?`flow`:r===`retention`?`retention`:`query`,s=e.query||`{}`,c;try{c=JSON.parse(s)}catch{c={}}let l={version:1,analysisType:i,activeView:`chart`,charts:{[i]:{chartType:t,chartConfig:a.get(e)??e.chartConfig??{},displayConfig:e.displayConfig||{}}},query:n&&!cm(c)?{}:c};return{id:e.id,title:e.title,analysisConfig:l,dashboardFilterMapping:e.dashboardFilterMapping,w:e.w,h:e.h,x:e.x,y:e.y}}),filters:e.filters,colorPalette:e.colorPalette},c=e.title;return{result:`Dashboard "${c}" created with ${s.portlets.length} portlets and ${s.filters?.length||0} filters.`,sideEffect:{type:`dashboard_saved`,data:{title:c,description:e.description,dashboardConfig:s}}}}catch(e){return{result:`Failed to save dashboard: ${e instanceof Error?e.message:`Unknown error`}`,isError:!0}}}),r}async function pm(e,t,n){switch(e){case`anthropic`:{let{AnthropicProvider:e}=await Promise.resolve().then(()=>require("./anthropic-CqLkud62.cjs"));return new e(t)}case`openai`:{let{OpenAIProvider:e}=await Promise.resolve().then(()=>require("./openai-D346-vmt.cjs"));return new e(t,n)}case`google`:{let{GoogleProvider:e}=await Promise.resolve().then(()=>require("./google-6pofxIfm.cjs"));return new e(t)}default:throw Error(`Unknown LLM provider: "${e}". Supported providers: anthropic, openai, google`)}}function mm(e,t){if(Array.isArray(t))for(let n of t)e.push(n);else e.push(t)}function hm(e){if(e)try{e()}catch{}}function gm(e,t){let n=[];if(!e||e.length===0)return n;for(let r of e){if(r.role===`user`){n.push({role:`user`,content:r.content});continue}if(r.role!==`assistant`)continue;let e=[];if(r.content&&e.push({type:`text`,text:r.content}),r.toolCalls&&r.toolCalls.length>0){for(let t of r.toolCalls)e.push({type:`tool_use`,id:t.id,name:t.name,input:t.input||{}});n.push({role:`assistant`,content:e});let i=r.toolCalls.map(e=>({toolUseId:e.id,toolName:e.name,content:typeof e.result==`string`?e.result:JSON.stringify(e.result??``),isError:e.status===`error`}));mm(n,t.formatToolResults(i))}else e.length>0&&n.push({role:`assistant`,content:r.content})}return n}function _m(e,t){if(e?.type===`tool_use`&&t)try{e.input=JSON.parse(t)}catch{e.input={},e.inputParseError=!0}}function vm(e,t){let n=e.contentBlocks[e.contentBlocks.length-1];n&&n.type===`text`?n.text=(n.text||``)+t:e.contentBlocks.push({type:`text`,text:t})}function ym(e,t){e.currentBlockIsToolUse&&e.currentToolInputJson&&_m(e.contentBlocks[e.contentBlocks.length-1],e.currentToolInputJson),e.contentBlocks.push({type:`tool_use`,id:t.id,name:t.name,input:{},...t.metadata?{metadata:t.metadata}:{}}),e.currentToolInputJson=``,e.currentBlockIsToolUse=!0}function bm(e,t){if(t.id&&t.input){let n=e.contentBlocks.find(e=>e.type===`tool_use`&&e.id===t.id);n&&(n.input=t.input,t.parseError&&(n.inputParseError=!0))}else if(e.currentBlockIsToolUse){let t=e.contentBlocks[e.contentBlocks.length-1];t?.type===`tool_use`&&e.currentToolInputJson&&(_m(t,e.currentToolInputJson),e.currentToolInputJson=``),e.currentBlockIsToolUse=!1}}async function*xm(e,t){let n={contentBlocks:[],currentToolInputJson:``,currentBlockIsToolUse:!1,stopReason:``};for await(let r of e.parseStreamEvents(t)){let e=r;switch(e.type){case`text_delta`:vm(n,e.text),yield{type:`text_delta`,data:e.text};break;case`tool_use_start`:ym(n,e),yield{type:`tool_use_start`,data:{id:e.id,name:e.name,input:void 0}};break;case`tool_input_delta`:n.currentToolInputJson+=e.json;break;case`tool_use_end`:bm(n,e);break;case`message_meta`:e.inputTokens!=null&&(n.inputTokens=e.inputTokens),e.outputTokens!=null&&(n.outputTokens=e.outputTokens),e.stopReason&&(n.stopReason=e.stopReason)}}return{contentBlocks:n.contentBlocks,stopReason:n.stopReason,inputTokens:n.inputTokens,outputTokens:n.outputTokens}}async function*Sm(e,t){let{executor:n,observability:r,traceId:i,turn:a}=t,o=e.name,s=e.input||{},c=e.id;if(e.inputParseError){let e=`Could not parse the arguments you sent for ${o} — they were not valid JSON, so the tool was not run. Call it again with well-formed JSON arguments.`;return yield{type:`tool_use_result`,data:{id:c,name:o,result:e,isError:!0}},hm(()=>r?.onToolEnd?.({traceId:i,turn:a,toolName:o,toolUseId:c,isError:!0,durationMs:0})),{toolUseId:c,toolName:o,content:e,isError:!0}}let l=n.get(o);if(!l)return yield{type:`tool_use_result`,data:{id:c,name:o,result:`Unknown tool: ${o}`,isError:!0}},{toolUseId:c,toolName:o,content:`Unknown tool: ${o}`,isError:!0};let u=Date.now();try{let e=await l(s);return e.sideEffect&&(yield e.sideEffect),yield{type:`tool_use_result`,data:{id:c,name:o,input:s,result:e.result,...e.isError?{isError:!0}:{}}},hm(()=>r?.onToolEnd?.({traceId:i,turn:a,toolName:o,toolUseId:c,isError:!!e.isError,durationMs:Date.now()-u})),{toolUseId:c,toolName:o,content:e.result,...e.isError?{isError:!0}:{}}}catch(e){let t=e instanceof Error?e.message:`Tool execution failed`;return yield{type:`tool_use_result`,data:{id:c,name:o,result:t,isError:!0}},hm(()=>r?.onToolEnd?.({traceId:i,turn:a,toolName:o,toolUseId:c,isError:!0,durationMs:Date.now()-u})),{toolUseId:c,toolName:o,content:t,isError:!0}}}async function*Cm(e,t){let n=[];for(let r of e){if(r.type!==`tool_use`)continue;let e=yield*Sm(r,t);n.push(e)}return n}var wm={anthropic:`claude-sonnet-4-6`,openai:`gpt-4.1-mini`,google:`gemini-3-flash-preview`};async function*Tm(e){let{message:t,history:n,semanticLayer:r,securityContext:i,agentConfig:a,apiKey:o}=e,s=e.sessionId||crypto.randomUUID(),c=a.observability,l=crypto.randomUUID(),u=Date.now(),d=e.providerOverride||a.provider||`anthropic`,f=e.modelOverride||a.model||wm[d]||`claude-sonnet-4-6`,p=e.baseURLOverride||a.baseURL,m=a.maxTurns||25,h=a.maxTokens||8192,g;try{g=await pm(d,o,{baseURL:p})}catch(e){console.error(`[agent] Failed to create %s provider: %s`,String(d).replace(/\n|\r/g,``),String(e instanceof Error?e.message:e).replace(/\n|\r/g,``)),yield{type:`error`,data:{message:e instanceof Error?e.message:T(`server.errors.llmInitFailed`)}};return}let _=dm(),v=fm({semanticLayer:r,securityContext:i}),y=rf(r.getMetadata(i));e.systemContext&&(y+=`\n\n## User Context\n\n${e.systemContext}`),hm(()=>c?.onChatStart?.({traceId:l,sessionId:s,message:t,model:f,historyLength:n?.length??0}));let b=gm(n,g);b.push({role:`user`,content:t});let ee=0;try{for(let e=0;e<m;e++){ee=e+1;let t=await g.createStream({model:f,maxTokens:h,system:y,tools:_,messages:b}),n=Date.now(),{contentBlocks:r,stopReason:i,inputTokens:a,outputTokens:o}=yield*xm(g,t);if(hm(()=>c?.onGenerationEnd?.({traceId:l,turn:e,model:f,stopReason:i,inputTokens:a,outputTokens:o,durationMs:Date.now()-n,input:b,output:r})),b.push({role:`assistant`,content:r}),g.isTruncated(i)){yield{type:`error`,data:{message:T(`server.errors.agentResponseTruncated`)}};break}if(!g.shouldContinue(i))break;let s=yield*Cm(r,{executor:v,observability:c,traceId:l,turn:e});yield{type:`turn_complete`,data:{}},mm(b,g.formatToolResults(s))}hm(()=>c?.onChatEnd?.({traceId:l,sessionId:s,totalTurns:ee,durationMs:Date.now()-u})),yield{type:`done`,data:{sessionId:s||``,traceId:l}}}catch(e){try{c?.onChatEnd?.({traceId:l,sessionId:s,totalTurns:0,durationMs:Date.now()-u,error:e instanceof Error?e.message:`Unknown error`})}catch{}console.error(`[agent] Chat error (provider=%s, model=%s): %s`,String(d).replace(/\n|\r/g,``),String(f).replace(/\n|\r/g,``),String(e instanceof Error?e.message:e).replace(/\n|\r/g,``)),yield{type:`error`,data:{message:g.formatError(e)}}}}function Q(e){return e.toISOString().split(`T`)[0]}function Em(e,t){let n=new Date,r=Q(n);if(/days?/.test(t)){let t=new Date(n);return t.setDate(t.getDate()-e),{dateRange:[Q(t),r],granularity:`day`}}if(/weeks?/.test(t)){let t=new Date(n);return t.setDate(t.getDate()-e*7),{dateRange:[Q(t),r],granularity:e<=4?`day`:`week`}}if(/months?/.test(t)){let t=new Date(n);return t.setMonth(t.getMonth()-e),{dateRange:[Q(t),r],granularity:e<=3?`day`:`month`}}return null}function Dm(e){let t=parseInt(e.slice(1),10),n=new Date().getFullYear(),r=(t-1)*3,i=new Date(n,r,1),a=new Date(n,r+3,0);return{dateRange:[Q(i),Q(a)],granularity:`month`}}function Om(e,t,n,r){let i=0;for(let a of e.measures){let e=[(a.name.split(`.`).pop()||a.name).toLowerCase(),a.title.toLowerCase(),...(a.synonyms||[]).map(e=>e.toLowerCase())];for(let o of e)if(t.includes(o)){n.push(a.name),r.push(`Matched measure '${a.name}' via keyword '${o}'`),i+=.15;break}}return i}function km(e,t,n,r){let i=e.measures.filter(e=>e.type===t.type);if(i.length>0){n.push(i[0].name),r.push(`Suggested ${i[0].name} based on ${t.type} intent`);return}if(t.type===`count`){let t=e.measures.find(e=>e.type===`count`||e.type===`countDistinct`);t&&(n.push(t.name),r.push(`Suggested ${t.name} for counting`))}}function Am(e,t,n,r,i){let a=0;for(let n of t){let t=Sf(e,n,`dimension`);t&&(r.push(t.field),i.push(`Matched dimension '${t.field}' from grouping keyword '${n}'`),a+=.1)}for(let t of e)for(let e of t.dimensions){let t=[(e.name.split(`.`).pop()||e.name).toLowerCase(),e.title.toLowerCase(),...(e.synonyms||[]).map(e=>e.toLowerCase())];for(let o of t)if(n.includes(o)&&!r.includes(e.name)&&(n.includes(`by ${o}`)||n.includes(`per ${o}`))){r.push(e.name),i.push(`Matched dimension '${e.name}' as grouping`),a+=.1;break}}return a}function jm(){let e=new Date,t=e.toISOString().split(`T`)[0],n=e=>e.toISOString().split(`T`)[0],r=e=>new Date(e.getFullYear(),e.getMonth(),1),i=e=>new Date(e.getFullYear(),0,1),a=e=>{let t=Math.floor(e.getMonth()/3);return new Date(e.getFullYear(),t*3,1)},o=e=>{let t=e.getDay(),n=e.getDate()-t+(t===0?-6:1);return new Date(e.getFullYear(),e.getMonth(),n)};return[{pattern:/\btoday\b/i,getDateRange:()=>[t,t],granularity:`day`},{pattern:/\byesterday\b/i,getDateRange:()=>{let t=new Date(e);t.setDate(t.getDate()-1);let r=n(t);return[r,r]},granularity:`day`},{pattern:/\bthis week\b/i,getDateRange:()=>[n(o(e)),t],granularity:`day`},{pattern:/\blast week\b/i,getDateRange:()=>{let t=new Date(o(e));t.setDate(t.getDate()-7);let r=new Date(t);return r.setDate(r.getDate()+6),[n(t),n(r)]},granularity:`day`},{pattern:/\bthis month\b/i,getDateRange:()=>[n(r(e)),t],granularity:`day`},{pattern:/\blast month\b/i,getDateRange:()=>{let t=new Date(e.getFullYear(),e.getMonth()-1,1),r=new Date(e.getFullYear(),e.getMonth(),0);return[n(t),n(r)]},granularity:`day`},{pattern:/\bthis quarter\b/i,getDateRange:()=>[n(a(e)),t],granularity:`month`},{pattern:/\blast quarter\b/i,getDateRange:()=>{let t=new Date(a(e));t.setMonth(t.getMonth()-3);let r=new Date(a(e));return r.setDate(r.getDate()-1),[n(t),n(r)]},granularity:`month`},{pattern:/\bthis year\b/i,getDateRange:()=>[n(i(e)),t],granularity:`month`},{pattern:/\blast year\b/i,getDateRange:()=>{let t=new Date(e.getFullYear()-1,0,1),r=new Date(e.getFullYear()-1,11,31);return[n(t),n(r)]},granularity:`month`},{pattern:/\blast (\d+) days?\b/i,getDateRange:()=>{let r=new Date(e);return r.setDate(r.getDate()-7),[n(r),t]},granularity:`day`},{pattern:/\blast (\d+) weeks?\b/i,getDateRange:()=>{let r=new Date(e);return r.setDate(r.getDate()-28),[n(r),t]},granularity:`week`},{pattern:/\blast (\d+) months?\b/i,getDateRange:()=>{let r=new Date(e);return r.setMonth(r.getMonth()-3),[n(r),t]},granularity:`month`},{pattern:/\bq([1-4])\b/i,getDateRange:()=>[n(new Date(e.getFullYear(),0,1)),n(new Date(e.getFullYear(),2,31))],granularity:`month`}]}var Mm={funnel:/\b(funnel|conversion|drop.?off|steps?|journey|pipeline|stages?)\b/i,flow:/\b(flows?|paths?|sequence|before|after|next|previous|user.?journey)\b/i,retention:/\b(retention|cohort|return|churn|comeback|retained|day.?\d+)\b/i};function Nm(e){let t=e.toLowerCase();return Mm.funnel.test(t)?`funnel`:Mm.flow.test(t)?`flow`:Mm.retention.test(t)?`retention`:`query`}function Pm(e,t){let n=t||`the relevant cube`;switch(e){case`funnel`:return[`Use /mcp/discover to get ${n} funnel configuration and schema`,`Query the event dimension to discover available event types for funnel steps`,`Build funnel query with discovered values using the schema from discover`];case`flow`:return[`Use /mcp/discover to get ${n} flow configuration and schema`,`Query the event dimension to discover available event types`,`Build flow query specifying the starting event and steps before/after`];case`retention`:return[`Use /mcp/discover to get ${n} retention configuration and schema`,`Build retention query specifying granularity (day/week/month) and number of periods`]}}function Fm(e){let t=jm(),n=e.toLowerCase();for(let e of t){let t=n.match(e.pattern);if(t){if(t[1]&&/^\d+$/.test(t[1])){let e=Em(parseInt(t[1],10),n);if(e)return e}return/^q[1-4]$/i.test(t[0])?Dm(t[0]):{dateRange:e.getDateRange(),granularity:e.granularity}}}return null}function Im(e){let t=e.toLowerCase();for(let{pattern:e,type:n}of[{pattern:/\b(total|sum|combined)\b/i,type:`sum`},{pattern:/\b(count|number of|how many)\b/i,type:`count`},{pattern:/\b(average|avg|mean)\b/i,type:`avg`},{pattern:/\b(maximum|max|highest|top)\b/i,type:`max`},{pattern:/\b(minimum|min|lowest|bottom)\b/i,type:`min`}])if(e.test(t))return{type:n,confidence:.8};return null}function Lm(e){let t=e.toLowerCase(),n=[],r=/\bby\s+(\w+(?:\s+\w+)?)/gi,i;for(;(i=r.exec(t))!==null;)n.push(i[1].trim());let a=/\bper\s+(\w+)/gi;for(;(i=a.exec(t))!==null;)n.push(i[1].trim());let o=/\bfor each\s+(\w+)/gi;for(;(i=o.exec(t))!==null;)n.push(i[1].trim());return n}function Rm(e,t,n,r,i){if(n){let t=e.find(e=>e.name===n);return t?(r.push(`Using specified cube: ${n}`),[t]):(i.push(`Specified cube '${n}' not found`),[])}let a=xf(e,{intent:t,limit:3}).map(t=>e.find(e=>e.name===t.cube)).filter(e=>e!==void 0);return a.length>0&&r.push(`Identified relevant cubes: ${a.map(e=>e.name).join(`, `)}`),a}function zm(e,t){return e===`query`?{query:{},confidence:0,reasoning:[`Could not identify relevant cubes for this query`],warnings:t,analysisMode:e,nextSteps:void 0}:{query:{},confidence:.7,reasoning:[`Detected ${e} intent from natural language`],warnings:t,analysisMode:e,nextSteps:Pm(e,void 0)}}function Bm(e,t,n){let r=[],i=[],a={},o=Nm(t),s=Rm(e,t,n,r,i);if(s.length===0)return zm(o,i);let c=s[0],l=.5,u=Im(t);u&&(r.push(`Detected ${u.type} aggregation intent`),l+=.1);let d=[],f=t.toLowerCase();l+=Om(c,f,d,r),d.length===0&&u&&km(c,u,d,r),d.length===0&&c.measures.length>0&&(d.push(c.measures[0].name),r.push(`Using default measure: ${c.measures[0].name}`),i.push(`Could not determine specific measure from query, using default`)),a.measures=d;let p=Lm(t),m=[];l+=Am(s,p,f,m,r),m.length>0&&(a.dimensions=m);let h=Fm(t);if(h){let e=c.dimensions.find(e=>e.type===`time`);if(e){let t={dimension:e.name,dateRange:h.dateRange};h.granularity&&(t.granularity=h.granularity),a.timeDimensions=[t],r.push(`Applied time filter: ${h.dateRange[0]} to ${h.dateRange[1]}`),l+=.15}else i.push(`Time expression found but no time dimension in cube`)}if(l=Math.min(1,l),o!==`query`){let e=s.length>0?s[0].name:void 0;return{query:{},confidence:.7,reasoning:[`Detected ${o} intent from natural language`,...e?[`Found relevant cube: ${e}`]:[]],warnings:i.length>0?i:void 0,analysisMode:o,nextSteps:Pm(o,e)}}return{query:a,confidence:l,reasoning:r,warnings:i.length>0?i:void 0,analysisMode:`query`}}function $(e,t,n,r){e?typeof e==`string`&&n(e,r):r.push({type:`syntax_error`,message:T(t)})}function Vm(e,t){return e.map(e=>t.get(e)||e)}function Hm(e,t){if(t.size===0)return;let n=JSON.parse(JSON.stringify(e));return n.measures&&=Vm(n.measures,t),n.dimensions&&=Vm(n.dimensions,t),n.timeDimensions&&=n.timeDimensions.map(e=>({...e,dimension:t.get(e.dimension)||e.dimension})),n}function Um(e,t){e.measures&&e.measures.length>10&&t.push({type:`performance`,message:T(`server.validation.ai.performanceManyMeasures`,{count:e.measures.length}),suggestion:T(`server.validation.ai.suggestSplitQueries`)}),e.dimensions&&e.dimensions.length>5&&t.push({type:`performance`,message:T(`server.validation.ai.performanceManyDimensions`,{count:e.dimensions.length}),suggestion:T(`server.validation.ai.suggestAddDimensionFilters`)})}function Wm(e,t,n){let[r]=e.split(`.`),i=t.find(e=>e.name===r);if(!i)return;let a=i.dimensions.find(t=>t.name===e);a&&a.type!==`time`&&n.push({type:`best_practice`,message:T(`server.validation.ai.dimensionNotTimeType`,{dimension:e,type:a.type}),field:e,suggestion:T(`server.validation.ai.suggestUseTimeDimension`)})}function Gm(e,t,n,r,i){let a=e.member,o=a.split(`.`);if(o.length!==2){n.push({type:`invalid_filter`,message:T(`server.validation.ai.invalidFilterMemberFormat`,{member:a}),field:a});return}let[s,c]=o,l=t.find(e=>e.name===s);if(!l){let e=i(s,t.map(e=>e.name));e&&r.set(a,`${e.field}.${c}`),n.push({type:`cube_not_found`,message:T(`server.validation.ai.cubeNotFoundInFilter`,{cubeName:s}),field:a,suggestion:e?`Did you mean '${e.field}'?`:void 0,correctedValue:e?`${e.field}.${c}`:void 0});return}let u=l.dimensions.some(e=>e.name===a),d=l.measures.some(e=>e.name===a);if(u||d)return;let f=i(c,[...l.dimensions.map(e=>e.name.split(`.`).pop()),...l.measures.map(e=>e.name.split(`.`).pop())]);if(f){let e=`${s}.${f.field}`;r.set(a,e),n.push({type:`invalid_filter`,message:T(`server.validation.ai.filterFieldNotFoundWithSuggestion`,{fieldName:c,cubeName:s}),field:a,suggestion:`Did you mean '${f.field}'?`,correctedValue:e})}else n.push({type:`invalid_filter`,message:T(`server.validation.ai.filterFieldNotFound`,{fieldName:c,cubeName:s}),field:a})}function Km(e,t){let n=null;for(let r of t){let t=ff(e.toLowerCase(),r.toLowerCase());t<=3&&(!n||t<n.distance)&&(n={field:r,distance:t})}return n}function qm(e,t,n,r){let i=e.split(`.`);if(i.length!==2){n.push({type:`syntax_error`,message:T(`server.validation.ai.invalidMeasureFormat`,{measure:e}),field:e});return}let[a,o]=i,s=t.find(e=>e.name===a);if(!s){let i=t.map(e=>e.name),s=Km(a,i);s?(n.push({type:`cube_not_found`,message:T(`server.validation.ai.cubeNotFoundWithSuggestion`,{cubeName:a}),field:e,suggestion:`Did you mean '${s.field}'?`,correctedValue:`${s.field}.${o}`}),r.set(e,`${s.field}.${o}`)):n.push({type:`cube_not_found`,message:T(`server.validation.ai.cubeNotFoundWithAvailable`,{cubeName:a}),field:e,suggestion:`Available cubes: ${i.join(`, `)}`});return}if(!s.measures.some(t=>t.name===e)){let i=Sf(t,o,`measure`);if(i&&i.cube===a)n.push({type:`measure_not_found`,message:T(`server.validation.ai.measureNotFoundWithSuggestion`,{measureName:o,cubeName:a}),field:e,suggestion:`Did you mean '${i.field}'?`,correctedValue:i.field}),r.set(e,i.field);else{let t=s.measures.map(e=>e.name.split(`.`).pop()),i=Km(o,t);if(i){let t=`${a}.${i.field}`;n.push({type:`measure_not_found`,message:T(`server.validation.ai.measureNotFoundWithSuggestion`,{measureName:o,cubeName:a}),field:e,suggestion:`Did you mean '${i.field}'?`,correctedValue:t}),r.set(e,t)}else n.push({type:`measure_not_found`,message:T(`server.validation.ai.measureNotFoundWithAvailable`,{measureName:o,cubeName:a}),field:e,suggestion:`Available measures: ${t.slice(0,5).join(`, `)}${t.length>5?`...`:``}`})}}}function Jm(e,t,n,r){let i=e.split(`.`);if(i.length!==2){n.push({type:`syntax_error`,message:T(`server.validation.ai.invalidDimensionFormat`,{dimension:e}),field:e});return}let[a,o]=i,s=t.find(e=>e.name===a);if(!s){let i=t.map(e=>e.name),s=Km(a,i);s?(n.push({type:`cube_not_found`,message:T(`server.validation.ai.cubeNotFoundWithSuggestion`,{cubeName:a}),field:e,suggestion:`Did you mean '${s.field}'?`,correctedValue:`${s.field}.${o}`}),r.set(e,`${s.field}.${o}`)):n.push({type:`cube_not_found`,message:T(`server.validation.ai.cubeNotFoundWithAvailable`,{cubeName:a}),field:e,suggestion:`Available cubes: ${i.join(`, `)}`});return}if(!s.dimensions.some(t=>t.name===e)){let i=Sf(t,o,`dimension`);if(i&&i.cube===a)n.push({type:`dimension_not_found`,message:T(`server.validation.ai.dimensionNotFoundWithSuggestion`,{dimensionName:o,cubeName:a}),field:e,suggestion:`Did you mean '${i.field}'?`,correctedValue:i.field}),r.set(e,i.field);else{let t=s.dimensions.map(e=>e.name.split(`.`).pop()),i=Km(o,t);if(i){let t=`${a}.${i.field}`;n.push({type:`dimension_not_found`,message:T(`server.validation.ai.dimensionNotFoundWithSuggestion`,{dimensionName:o,cubeName:a}),field:e,suggestion:`Did you mean '${i.field}'?`,correctedValue:t}),r.set(e,t)}else n.push({type:`dimension_not_found`,message:T(`server.validation.ai.dimensionNotFoundWithAvailable`,{dimensionName:o,cubeName:a}),field:e,suggestion:`Available dimensions: ${t.slice(0,5).join(`, `)}${t.length>5?`...`:``}`})}}}function Ym(e,t,n,r){for(let i of e){if(`and`in i&&Array.isArray(i.and)){Ym(i.and,t,n,r);continue}if(`or`in i&&Array.isArray(i.or)){Ym(i.or,t,n,r);continue}`member`in i&&Gm(i,t,n,r,Km)}}function Xm(e,t,n,r,i){let a=e.funnel;if(!a)return;let o=(e,n)=>Jm(e,t,n,i);if($(a.bindingKey,`server.validation.ai.bindingKeyRequired.funnel`,o,n),$(a.timeDimension,`server.validation.ai.timeDimensionRequired.funnel`,o,n),!a.steps||!Array.isArray(a.steps))n.push({type:`syntax_error`,message:T(`server.validation.ai.funnelStepsRequired`)});else if(a.steps.length<2)n.push({type:`syntax_error`,message:T(`server.validation.ai.funnelRequiresSteps`)});else for(let e=0;e<a.steps.length;e++){let o=a.steps[e];o.name||r.push({type:`best_practice`,message:T(`server.validation.ai.stepMissingName`,{step:e+1}),suggestion:T(`server.validation.ai.suggestAddStepNames`)}),o.filter&&`member`in o.filter&&Ym([o.filter],t,n,i)}}function Zm(e,t,n,r,i){let a=e.flow;if(!a)return;let o=(e,n)=>Jm(e,t,n,i);$(a.bindingKey,`server.validation.ai.bindingKeyRequired.flow`,o,n),$(a.timeDimension,`server.validation.ai.timeDimensionRequired.flow`,o,n),$(a.eventDimension,`server.validation.ai.eventDimensionRequired`,o,n),a.stepsBefore===void 0&&a.stepsAfter===void 0&&r.push({type:`best_practice`,message:T(`server.validation.ai.stepsBothMissing`),suggestion:T(`server.validation.ai.suggestSetSteps`)})}function Qm(e,t,n,r,i){let a=e.retention;if(!a)return;let o=(e,n)=>Jm(e,t,n,i);$(a.bindingKey,`server.validation.ai.bindingKeyRequired.retention`,o,n),$(a.timeDimension,`server.validation.ai.retentionTimeDimensionRequired`,o,n),a.granularity||r.push({type:`best_practice`,message:T(`server.validation.ai.granularityNotSpecified`),suggestion:T(`server.validation.ai.suggestSpecifyGranularity`)}),a.periods||r.push({type:`best_practice`,message:T(`server.validation.ai.periodsNotSpecified`),suggestion:T(`server.validation.ai.suggestSpecifyPeriods`)})}function $m(e,t,n,r,i){return e.funnel?(Xm(e,t,n,r,i),!0):e.flow?(Zm(e,t,n,r,i),!0):e.retention?(Qm(e,t,n,r,i),!0):!1}function eh(e,t,n,r,i){if(e.measures)for(let r of e.measures)qm(r,t,n,i);if(e.dimensions)for(let r of e.dimensions)Jm(r,t,n,i);if(e.timeDimensions)for(let a of e.timeDimensions)Jm(a.dimension,t,n,i),Wm(a.dimension,t,r);e.filters&&Ym(e.filters,t,n,i),!e.measures?.length&&!e.dimensions?.length&&n.push({type:`syntax_error`,message:T(`server.validation.ai.emptyQuery`)}),Um(e,r)}function th(e,t){let n=[],r=[],i=new Map;if($m(e,t,n,r,i))return{isValid:n.length===0,errors:n,warnings:r,correctedQuery:void 0};eh(e,t,n,r,i);let a=Hm(e,i);return{isValid:n.length===0,errors:n,warnings:r,correctedQuery:a}}function nh(e){return new Ad({drizzle:e.drizzle,schema:e.schema})}exports.BASE_CUBE_SET_ID=Dd,exports.BaseDatabaseExecutor=x,exports.CTEBuilder=An,exports.CalculatedMeasureResolver=A,exports.ComparisonQueryBuilder=Gr,exports.DatabendExecutor=Fe,exports.DrizzlePlanBuilder=ea,exports.DrizzleSqlBuilder=mn,exports.DuckDBExecutor=Ae,exports.EXPLAIN_ANALYSIS_PROMPT=Hd,exports.FlowQueryBuilder=qr,exports.FunnelQueryBuilder=Kr,exports.IdentityOptimiser=si,exports.JoinPathResolver=w,exports.LogicalPlanBuilder=oi,exports.LogicalPlanner=kn,exports.MemoryCacheProvider=Nd,exports.MySQLExecutor=ye,exports.OptimiserPipeline=ci,exports.PostgresExecutor=he,exports.QueryExecutor=na,exports.QueryValidationError=sr,exports.RetentionQueryBuilder=$r,exports.SINGLE_TENANT_CONTEXT=Od,exports.SQLiteExecutor=Ce,exports.STEP0_VALIDATION_PROMPT=Pd,exports.STEP1_SYSTEM_PROMPT=Rd,exports.STEP2_SYSTEM_PROMPT=Bd,exports.SYSTEM_PROMPT_TEMPLATE=Id,exports.SemanticLayerCompiler=Ad,exports.SnowflakeExecutor=Ve,exports.aiValidateQuery=th,exports.buildAgentSystemPrompt=rf,exports.buildAttributeDimensions=jd,exports.buildExplainAnalysisPrompt=Ud,exports.buildStep0Prompt=Fd,exports.buildStep1Prompt=zd,exports.buildStep2Prompt=Vd,exports.buildSystemPrompt=Ld,exports.createDatabaseExecutor=Ue,exports.createDatabendExecutor=Ie,exports.createDrizzleSemanticLayer=nh,exports.createDuckDBExecutor=je,exports.createMultiCubeContext=Ye,exports.createMySQLExecutor=be,exports.createPostgresExecutor=ge,exports.createSQLiteExecutor=we,exports.createSnowflakeExecutor=He,exports.createToolExecutor=fm,exports.defineCube=Xe,exports.detectQueryMode=ir,exports.detectQueryModes=nr,exports.discoverCubes=xf,exports.findBestFieldMatch=Sf,exports.fnv1aHash=Vr,exports.formatCubeSchemaForExplain=Wd,exports.formatExistingIndexes=Gd,exports.generateCacheKey=Pr,exports.getActiveQueryModes=rr,exports.getCubeInvalidationPattern=Ur,exports.getJoinType=Ge,exports.getToolDefinitions=dm,exports.handleAgentChat=Tm,exports.hasComparisonMode=Qn,exports.hasFlowMode=er,exports.hasFunnelMode=$n,exports.hasRetentionMode=tr,exports.normalizeQuery=Fr,exports.resolveCubeReference=S,exports.resolveSqlExpression=C,exports.strongHash=Hr,exports.suggestQuery=Bm;
|
|
831
|
+
`)}`,isError:!0};let s={portlets:r.map(e=>{let t=o.get(e)??e.chartType,n=t===`markdown`,r=n?`query`:e.analysisType||`query`,i=r===`funnel`?`funnel`:r===`flow`?`flow`:r===`retention`?`retention`:`query`,s=e.query||`{}`,c;try{c=JSON.parse(s)}catch{c={}}let l={version:1,analysisType:i,activeView:`chart`,charts:{[i]:{chartType:t,chartConfig:a.get(e)??e.chartConfig??{},displayConfig:e.displayConfig||{}}},query:n&&!cm(c)?{}:c};return{id:e.id,title:e.title,analysisConfig:l,dashboardFilterMapping:e.dashboardFilterMapping,w:e.w,h:e.h,x:e.x,y:e.y}}),filters:e.filters,colorPalette:e.colorPalette},c=e.title;return{result:`Dashboard "${c}" created with ${s.portlets.length} portlets and ${s.filters?.length||0} filters.`,sideEffect:{type:`dashboard_saved`,data:{title:c,description:e.description,dashboardConfig:s}}}}catch(e){return{result:`Failed to save dashboard: ${e instanceof Error?e.message:`Unknown error`}`,isError:!0}}}),r}async function pm(e,t,n){switch(e){case`anthropic`:{let{AnthropicProvider:e}=await Promise.resolve().then(()=>require("./anthropic-CqLkud62.cjs"));return new e(t)}case`openai`:{let{OpenAIProvider:e}=await Promise.resolve().then(()=>require("./openai-1GZyKucn.cjs"));return new e(t,n)}case`google`:{let{GoogleProvider:e}=await Promise.resolve().then(()=>require("./google-6pofxIfm.cjs"));return new e(t)}default:throw Error(`Unknown LLM provider: "${e}". Supported providers: anthropic, openai, google`)}}function mm(e,t){if(Array.isArray(t))for(let n of t)e.push(n);else e.push(t)}function hm(e){if(e)try{e()}catch{}}function gm(e,t){let n=[];if(!e||e.length===0)return n;for(let r of e){if(r.role===`user`){n.push({role:`user`,content:r.content});continue}if(r.role!==`assistant`)continue;let e=[];if(r.content&&e.push({type:`text`,text:r.content}),r.toolCalls&&r.toolCalls.length>0){for(let t of r.toolCalls)e.push({type:`tool_use`,id:t.id,name:t.name,input:t.input||{}});n.push({role:`assistant`,content:e});let i=r.toolCalls.map(e=>({toolUseId:e.id,toolName:e.name,content:typeof e.result==`string`?e.result:JSON.stringify(e.result??``),isError:e.status===`error`}));mm(n,t.formatToolResults(i))}else e.length>0&&n.push({role:`assistant`,content:r.content})}return n}function _m(e,t){if(e?.type===`tool_use`&&t)try{e.input=JSON.parse(t)}catch{e.input={},e.inputParseError=!0}}function vm(e,t){let n=e.contentBlocks[e.contentBlocks.length-1];n&&n.type===`text`?n.text=(n.text||``)+t:e.contentBlocks.push({type:`text`,text:t})}function ym(e,t){e.currentBlockIsToolUse&&e.currentToolInputJson&&_m(e.contentBlocks[e.contentBlocks.length-1],e.currentToolInputJson),e.contentBlocks.push({type:`tool_use`,id:t.id,name:t.name,input:{},...t.metadata?{metadata:t.metadata}:{}}),e.currentToolInputJson=``,e.currentBlockIsToolUse=!0}function bm(e,t){if(t.id&&t.input){let n=e.contentBlocks.find(e=>e.type===`tool_use`&&e.id===t.id);n&&(n.input=t.input,t.parseError&&(n.inputParseError=!0))}else if(e.currentBlockIsToolUse){let t=e.contentBlocks[e.contentBlocks.length-1];t?.type===`tool_use`&&e.currentToolInputJson&&(_m(t,e.currentToolInputJson),e.currentToolInputJson=``),e.currentBlockIsToolUse=!1}}async function*xm(e,t){let n={contentBlocks:[],currentToolInputJson:``,currentBlockIsToolUse:!1,stopReason:``};for await(let r of e.parseStreamEvents(t)){let e=r;switch(e.type){case`text_delta`:vm(n,e.text),yield{type:`text_delta`,data:e.text};break;case`tool_use_start`:ym(n,e),yield{type:`tool_use_start`,data:{id:e.id,name:e.name,input:void 0}};break;case`tool_input_delta`:n.currentToolInputJson+=e.json;break;case`tool_use_end`:bm(n,e);break;case`message_meta`:e.inputTokens!=null&&(n.inputTokens=e.inputTokens),e.outputTokens!=null&&(n.outputTokens=e.outputTokens),e.stopReason&&(n.stopReason=e.stopReason)}}return{contentBlocks:n.contentBlocks,stopReason:n.stopReason,inputTokens:n.inputTokens,outputTokens:n.outputTokens}}async function*Sm(e,t){let{executor:n,observability:r,traceId:i,turn:a}=t,o=e.name,s=e.input||{},c=e.id;if(e.inputParseError){let e=`Could not parse the arguments you sent for ${o} — they were not valid JSON, so the tool was not run. Call it again with well-formed JSON arguments.`;return yield{type:`tool_use_result`,data:{id:c,name:o,result:e,isError:!0}},hm(()=>r?.onToolEnd?.({traceId:i,turn:a,toolName:o,toolUseId:c,isError:!0,durationMs:0})),{toolUseId:c,toolName:o,content:e,isError:!0}}let l=n.get(o);if(!l)return yield{type:`tool_use_result`,data:{id:c,name:o,result:`Unknown tool: ${o}`,isError:!0}},{toolUseId:c,toolName:o,content:`Unknown tool: ${o}`,isError:!0};let u=Date.now();try{let e=await l(s);return e.sideEffect&&(yield e.sideEffect),yield{type:`tool_use_result`,data:{id:c,name:o,input:s,result:e.result,...e.isError?{isError:!0}:{}}},hm(()=>r?.onToolEnd?.({traceId:i,turn:a,toolName:o,toolUseId:c,isError:!!e.isError,durationMs:Date.now()-u})),{toolUseId:c,toolName:o,content:e.result,...e.isError?{isError:!0}:{}}}catch(e){let t=e instanceof Error?e.message:`Tool execution failed`;return yield{type:`tool_use_result`,data:{id:c,name:o,result:t,isError:!0}},hm(()=>r?.onToolEnd?.({traceId:i,turn:a,toolName:o,toolUseId:c,isError:!0,durationMs:Date.now()-u})),{toolUseId:c,toolName:o,content:t,isError:!0}}}async function*Cm(e,t){let n=[];for(let r of e){if(r.type!==`tool_use`)continue;let e=yield*Sm(r,t);n.push(e)}return n}var wm={anthropic:`claude-sonnet-4-6`,openai:`gpt-4.1-mini`,google:`gemini-3-flash-preview`};async function*Tm(e){let{message:t,history:n,semanticLayer:r,securityContext:i,agentConfig:a,apiKey:o}=e,s=e.sessionId||crypto.randomUUID(),c=a.observability,l=crypto.randomUUID(),u=Date.now(),d=e.providerOverride||a.provider||`anthropic`,f=e.modelOverride||a.model||wm[d]||`claude-sonnet-4-6`,p=e.baseURLOverride||a.baseURL,m=a.maxTurns||25,h=a.maxTokens||8192,g;try{g=await pm(d,o,{baseURL:p})}catch(e){console.error(`[agent] Failed to create %s provider: %s`,String(d).replace(/\n|\r/g,``),String(e instanceof Error?e.message:e).replace(/\n|\r/g,``)),yield{type:`error`,data:{message:e instanceof Error?e.message:T(`server.errors.llmInitFailed`)}};return}let _=dm(),v=fm({semanticLayer:r,securityContext:i}),y=rf(r.getMetadata(i));e.systemContext&&(y+=`\n\n## User Context\n\n${e.systemContext}`),hm(()=>c?.onChatStart?.({traceId:l,sessionId:s,message:t,model:f,historyLength:n?.length??0}));let b=gm(n,g);b.push({role:`user`,content:t});let ee=0;try{for(let e=0;e<m;e++){ee=e+1;let t=await g.createStream({model:f,maxTokens:h,system:y,tools:_,messages:b}),n=Date.now(),{contentBlocks:r,stopReason:i,inputTokens:a,outputTokens:o}=yield*xm(g,t);if(hm(()=>c?.onGenerationEnd?.({traceId:l,turn:e,model:f,stopReason:i,inputTokens:a,outputTokens:o,durationMs:Date.now()-n,input:b,output:r})),b.push({role:`assistant`,content:r}),g.isTruncated(i)){yield{type:`error`,data:{message:T(`server.errors.agentResponseTruncated`)}};break}if(!g.shouldContinue(i))break;let s=yield*Cm(r,{executor:v,observability:c,traceId:l,turn:e});yield{type:`turn_complete`,data:{}},mm(b,g.formatToolResults(s))}hm(()=>c?.onChatEnd?.({traceId:l,sessionId:s,totalTurns:ee,durationMs:Date.now()-u})),yield{type:`done`,data:{sessionId:s||``,traceId:l}}}catch(e){try{c?.onChatEnd?.({traceId:l,sessionId:s,totalTurns:0,durationMs:Date.now()-u,error:e instanceof Error?e.message:`Unknown error`})}catch{}console.error(`[agent] Chat error (provider=%s, model=%s): %s`,String(d).replace(/\n|\r/g,``),String(f).replace(/\n|\r/g,``),String(e instanceof Error?e.message:e).replace(/\n|\r/g,``)),yield{type:`error`,data:{message:g.formatError(e)}}}}function Q(e){return e.toISOString().split(`T`)[0]}function Em(e,t){let n=new Date,r=Q(n);if(/days?/.test(t)){let t=new Date(n);return t.setDate(t.getDate()-e),{dateRange:[Q(t),r],granularity:`day`}}if(/weeks?/.test(t)){let t=new Date(n);return t.setDate(t.getDate()-e*7),{dateRange:[Q(t),r],granularity:e<=4?`day`:`week`}}if(/months?/.test(t)){let t=new Date(n);return t.setMonth(t.getMonth()-e),{dateRange:[Q(t),r],granularity:e<=3?`day`:`month`}}return null}function Dm(e){let t=parseInt(e.slice(1),10),n=new Date().getFullYear(),r=(t-1)*3,i=new Date(n,r,1),a=new Date(n,r+3,0);return{dateRange:[Q(i),Q(a)],granularity:`month`}}function Om(e,t,n,r){let i=0;for(let a of e.measures){let e=[(a.name.split(`.`).pop()||a.name).toLowerCase(),a.title.toLowerCase(),...(a.synonyms||[]).map(e=>e.toLowerCase())];for(let o of e)if(t.includes(o)){n.push(a.name),r.push(`Matched measure '${a.name}' via keyword '${o}'`),i+=.15;break}}return i}function km(e,t,n,r){let i=e.measures.filter(e=>e.type===t.type);if(i.length>0){n.push(i[0].name),r.push(`Suggested ${i[0].name} based on ${t.type} intent`);return}if(t.type===`count`){let t=e.measures.find(e=>e.type===`count`||e.type===`countDistinct`);t&&(n.push(t.name),r.push(`Suggested ${t.name} for counting`))}}function Am(e,t,n,r,i){let a=0;for(let n of t){let t=Sf(e,n,`dimension`);t&&(r.push(t.field),i.push(`Matched dimension '${t.field}' from grouping keyword '${n}'`),a+=.1)}for(let t of e)for(let e of t.dimensions){let t=[(e.name.split(`.`).pop()||e.name).toLowerCase(),e.title.toLowerCase(),...(e.synonyms||[]).map(e=>e.toLowerCase())];for(let o of t)if(n.includes(o)&&!r.includes(e.name)&&(n.includes(`by ${o}`)||n.includes(`per ${o}`))){r.push(e.name),i.push(`Matched dimension '${e.name}' as grouping`),a+=.1;break}}return a}function jm(){let e=new Date,t=e.toISOString().split(`T`)[0],n=e=>e.toISOString().split(`T`)[0],r=e=>new Date(e.getFullYear(),e.getMonth(),1),i=e=>new Date(e.getFullYear(),0,1),a=e=>{let t=Math.floor(e.getMonth()/3);return new Date(e.getFullYear(),t*3,1)},o=e=>{let t=e.getDay(),n=e.getDate()-t+(t===0?-6:1);return new Date(e.getFullYear(),e.getMonth(),n)};return[{pattern:/\btoday\b/i,getDateRange:()=>[t,t],granularity:`day`},{pattern:/\byesterday\b/i,getDateRange:()=>{let t=new Date(e);t.setDate(t.getDate()-1);let r=n(t);return[r,r]},granularity:`day`},{pattern:/\bthis week\b/i,getDateRange:()=>[n(o(e)),t],granularity:`day`},{pattern:/\blast week\b/i,getDateRange:()=>{let t=new Date(o(e));t.setDate(t.getDate()-7);let r=new Date(t);return r.setDate(r.getDate()+6),[n(t),n(r)]},granularity:`day`},{pattern:/\bthis month\b/i,getDateRange:()=>[n(r(e)),t],granularity:`day`},{pattern:/\blast month\b/i,getDateRange:()=>{let t=new Date(e.getFullYear(),e.getMonth()-1,1),r=new Date(e.getFullYear(),e.getMonth(),0);return[n(t),n(r)]},granularity:`day`},{pattern:/\bthis quarter\b/i,getDateRange:()=>[n(a(e)),t],granularity:`month`},{pattern:/\blast quarter\b/i,getDateRange:()=>{let t=new Date(a(e));t.setMonth(t.getMonth()-3);let r=new Date(a(e));return r.setDate(r.getDate()-1),[n(t),n(r)]},granularity:`month`},{pattern:/\bthis year\b/i,getDateRange:()=>[n(i(e)),t],granularity:`month`},{pattern:/\blast year\b/i,getDateRange:()=>{let t=new Date(e.getFullYear()-1,0,1),r=new Date(e.getFullYear()-1,11,31);return[n(t),n(r)]},granularity:`month`},{pattern:/\blast (\d+) days?\b/i,getDateRange:()=>{let r=new Date(e);return r.setDate(r.getDate()-7),[n(r),t]},granularity:`day`},{pattern:/\blast (\d+) weeks?\b/i,getDateRange:()=>{let r=new Date(e);return r.setDate(r.getDate()-28),[n(r),t]},granularity:`week`},{pattern:/\blast (\d+) months?\b/i,getDateRange:()=>{let r=new Date(e);return r.setMonth(r.getMonth()-3),[n(r),t]},granularity:`month`},{pattern:/\bq([1-4])\b/i,getDateRange:()=>[n(new Date(e.getFullYear(),0,1)),n(new Date(e.getFullYear(),2,31))],granularity:`month`}]}var Mm={funnel:/\b(funnel|conversion|drop.?off|steps?|journey|pipeline|stages?)\b/i,flow:/\b(flows?|paths?|sequence|before|after|next|previous|user.?journey)\b/i,retention:/\b(retention|cohort|return|churn|comeback|retained|day.?\d+)\b/i};function Nm(e){let t=e.toLowerCase();return Mm.funnel.test(t)?`funnel`:Mm.flow.test(t)?`flow`:Mm.retention.test(t)?`retention`:`query`}function Pm(e,t){let n=t||`the relevant cube`;switch(e){case`funnel`:return[`Use /mcp/discover to get ${n} funnel configuration and schema`,`Query the event dimension to discover available event types for funnel steps`,`Build funnel query with discovered values using the schema from discover`];case`flow`:return[`Use /mcp/discover to get ${n} flow configuration and schema`,`Query the event dimension to discover available event types`,`Build flow query specifying the starting event and steps before/after`];case`retention`:return[`Use /mcp/discover to get ${n} retention configuration and schema`,`Build retention query specifying granularity (day/week/month) and number of periods`]}}function Fm(e){let t=jm(),n=e.toLowerCase();for(let e of t){let t=n.match(e.pattern);if(t){if(t[1]&&/^\d+$/.test(t[1])){let e=Em(parseInt(t[1],10),n);if(e)return e}return/^q[1-4]$/i.test(t[0])?Dm(t[0]):{dateRange:e.getDateRange(),granularity:e.granularity}}}return null}function Im(e){let t=e.toLowerCase();for(let{pattern:e,type:n}of[{pattern:/\b(total|sum|combined)\b/i,type:`sum`},{pattern:/\b(count|number of|how many)\b/i,type:`count`},{pattern:/\b(average|avg|mean)\b/i,type:`avg`},{pattern:/\b(maximum|max|highest|top)\b/i,type:`max`},{pattern:/\b(minimum|min|lowest|bottom)\b/i,type:`min`}])if(e.test(t))return{type:n,confidence:.8};return null}function Lm(e){let t=e.toLowerCase(),n=[],r=/\bby\s+(\w+(?:\s+\w+)?)/gi,i;for(;(i=r.exec(t))!==null;)n.push(i[1].trim());let a=/\bper\s+(\w+)/gi;for(;(i=a.exec(t))!==null;)n.push(i[1].trim());let o=/\bfor each\s+(\w+)/gi;for(;(i=o.exec(t))!==null;)n.push(i[1].trim());return n}function Rm(e,t,n,r,i){if(n){let t=e.find(e=>e.name===n);return t?(r.push(`Using specified cube: ${n}`),[t]):(i.push(`Specified cube '${n}' not found`),[])}let a=xf(e,{intent:t,limit:3}).map(t=>e.find(e=>e.name===t.cube)).filter(e=>e!==void 0);return a.length>0&&r.push(`Identified relevant cubes: ${a.map(e=>e.name).join(`, `)}`),a}function zm(e,t){return e===`query`?{query:{},confidence:0,reasoning:[`Could not identify relevant cubes for this query`],warnings:t,analysisMode:e,nextSteps:void 0}:{query:{},confidence:.7,reasoning:[`Detected ${e} intent from natural language`],warnings:t,analysisMode:e,nextSteps:Pm(e,void 0)}}function Bm(e,t,n){let r=[],i=[],a={},o=Nm(t),s=Rm(e,t,n,r,i);if(s.length===0)return zm(o,i);let c=s[0],l=.5,u=Im(t);u&&(r.push(`Detected ${u.type} aggregation intent`),l+=.1);let d=[],f=t.toLowerCase();l+=Om(c,f,d,r),d.length===0&&u&&km(c,u,d,r),d.length===0&&c.measures.length>0&&(d.push(c.measures[0].name),r.push(`Using default measure: ${c.measures[0].name}`),i.push(`Could not determine specific measure from query, using default`)),a.measures=d;let p=Lm(t),m=[];l+=Am(s,p,f,m,r),m.length>0&&(a.dimensions=m);let h=Fm(t);if(h){let e=c.dimensions.find(e=>e.type===`time`);if(e){let t={dimension:e.name,dateRange:h.dateRange};h.granularity&&(t.granularity=h.granularity),a.timeDimensions=[t],r.push(`Applied time filter: ${h.dateRange[0]} to ${h.dateRange[1]}`),l+=.15}else i.push(`Time expression found but no time dimension in cube`)}if(l=Math.min(1,l),o!==`query`){let e=s.length>0?s[0].name:void 0;return{query:{},confidence:.7,reasoning:[`Detected ${o} intent from natural language`,...e?[`Found relevant cube: ${e}`]:[]],warnings:i.length>0?i:void 0,analysisMode:o,nextSteps:Pm(o,e)}}return{query:a,confidence:l,reasoning:r,warnings:i.length>0?i:void 0,analysisMode:`query`}}function $(e,t,n,r){e?typeof e==`string`&&n(e,r):r.push({type:`syntax_error`,message:T(t)})}function Vm(e,t){return e.map(e=>t.get(e)||e)}function Hm(e,t){if(t.size===0)return;let n=JSON.parse(JSON.stringify(e));return n.measures&&=Vm(n.measures,t),n.dimensions&&=Vm(n.dimensions,t),n.timeDimensions&&=n.timeDimensions.map(e=>({...e,dimension:t.get(e.dimension)||e.dimension})),n}function Um(e,t){e.measures&&e.measures.length>10&&t.push({type:`performance`,message:T(`server.validation.ai.performanceManyMeasures`,{count:e.measures.length}),suggestion:T(`server.validation.ai.suggestSplitQueries`)}),e.dimensions&&e.dimensions.length>5&&t.push({type:`performance`,message:T(`server.validation.ai.performanceManyDimensions`,{count:e.dimensions.length}),suggestion:T(`server.validation.ai.suggestAddDimensionFilters`)})}function Wm(e,t,n){let[r]=e.split(`.`),i=t.find(e=>e.name===r);if(!i)return;let a=i.dimensions.find(t=>t.name===e);a&&a.type!==`time`&&n.push({type:`best_practice`,message:T(`server.validation.ai.dimensionNotTimeType`,{dimension:e,type:a.type}),field:e,suggestion:T(`server.validation.ai.suggestUseTimeDimension`)})}function Gm(e,t,n,r,i){let a=e.member,o=a.split(`.`);if(o.length!==2){n.push({type:`invalid_filter`,message:T(`server.validation.ai.invalidFilterMemberFormat`,{member:a}),field:a});return}let[s,c]=o,l=t.find(e=>e.name===s);if(!l){let e=i(s,t.map(e=>e.name));e&&r.set(a,`${e.field}.${c}`),n.push({type:`cube_not_found`,message:T(`server.validation.ai.cubeNotFoundInFilter`,{cubeName:s}),field:a,suggestion:e?`Did you mean '${e.field}'?`:void 0,correctedValue:e?`${e.field}.${c}`:void 0});return}let u=l.dimensions.some(e=>e.name===a),d=l.measures.some(e=>e.name===a);if(u||d)return;let f=i(c,[...l.dimensions.map(e=>e.name.split(`.`).pop()),...l.measures.map(e=>e.name.split(`.`).pop())]);if(f){let e=`${s}.${f.field}`;r.set(a,e),n.push({type:`invalid_filter`,message:T(`server.validation.ai.filterFieldNotFoundWithSuggestion`,{fieldName:c,cubeName:s}),field:a,suggestion:`Did you mean '${f.field}'?`,correctedValue:e})}else n.push({type:`invalid_filter`,message:T(`server.validation.ai.filterFieldNotFound`,{fieldName:c,cubeName:s}),field:a})}function Km(e,t){let n=null;for(let r of t){let t=ff(e.toLowerCase(),r.toLowerCase());t<=3&&(!n||t<n.distance)&&(n={field:r,distance:t})}return n}function qm(e,t,n,r){let i=e.split(`.`);if(i.length!==2){n.push({type:`syntax_error`,message:T(`server.validation.ai.invalidMeasureFormat`,{measure:e}),field:e});return}let[a,o]=i,s=t.find(e=>e.name===a);if(!s){let i=t.map(e=>e.name),s=Km(a,i);s?(n.push({type:`cube_not_found`,message:T(`server.validation.ai.cubeNotFoundWithSuggestion`,{cubeName:a}),field:e,suggestion:`Did you mean '${s.field}'?`,correctedValue:`${s.field}.${o}`}),r.set(e,`${s.field}.${o}`)):n.push({type:`cube_not_found`,message:T(`server.validation.ai.cubeNotFoundWithAvailable`,{cubeName:a}),field:e,suggestion:`Available cubes: ${i.join(`, `)}`});return}if(!s.measures.some(t=>t.name===e)){let i=Sf(t,o,`measure`);if(i&&i.cube===a)n.push({type:`measure_not_found`,message:T(`server.validation.ai.measureNotFoundWithSuggestion`,{measureName:o,cubeName:a}),field:e,suggestion:`Did you mean '${i.field}'?`,correctedValue:i.field}),r.set(e,i.field);else{let t=s.measures.map(e=>e.name.split(`.`).pop()),i=Km(o,t);if(i){let t=`${a}.${i.field}`;n.push({type:`measure_not_found`,message:T(`server.validation.ai.measureNotFoundWithSuggestion`,{measureName:o,cubeName:a}),field:e,suggestion:`Did you mean '${i.field}'?`,correctedValue:t}),r.set(e,t)}else n.push({type:`measure_not_found`,message:T(`server.validation.ai.measureNotFoundWithAvailable`,{measureName:o,cubeName:a}),field:e,suggestion:`Available measures: ${t.slice(0,5).join(`, `)}${t.length>5?`...`:``}`})}}}function Jm(e,t,n,r){let i=e.split(`.`);if(i.length!==2){n.push({type:`syntax_error`,message:T(`server.validation.ai.invalidDimensionFormat`,{dimension:e}),field:e});return}let[a,o]=i,s=t.find(e=>e.name===a);if(!s){let i=t.map(e=>e.name),s=Km(a,i);s?(n.push({type:`cube_not_found`,message:T(`server.validation.ai.cubeNotFoundWithSuggestion`,{cubeName:a}),field:e,suggestion:`Did you mean '${s.field}'?`,correctedValue:`${s.field}.${o}`}),r.set(e,`${s.field}.${o}`)):n.push({type:`cube_not_found`,message:T(`server.validation.ai.cubeNotFoundWithAvailable`,{cubeName:a}),field:e,suggestion:`Available cubes: ${i.join(`, `)}`});return}if(!s.dimensions.some(t=>t.name===e)){let i=Sf(t,o,`dimension`);if(i&&i.cube===a)n.push({type:`dimension_not_found`,message:T(`server.validation.ai.dimensionNotFoundWithSuggestion`,{dimensionName:o,cubeName:a}),field:e,suggestion:`Did you mean '${i.field}'?`,correctedValue:i.field}),r.set(e,i.field);else{let t=s.dimensions.map(e=>e.name.split(`.`).pop()),i=Km(o,t);if(i){let t=`${a}.${i.field}`;n.push({type:`dimension_not_found`,message:T(`server.validation.ai.dimensionNotFoundWithSuggestion`,{dimensionName:o,cubeName:a}),field:e,suggestion:`Did you mean '${i.field}'?`,correctedValue:t}),r.set(e,t)}else n.push({type:`dimension_not_found`,message:T(`server.validation.ai.dimensionNotFoundWithAvailable`,{dimensionName:o,cubeName:a}),field:e,suggestion:`Available dimensions: ${t.slice(0,5).join(`, `)}${t.length>5?`...`:``}`})}}}function Ym(e,t,n,r){for(let i of e){if(`and`in i&&Array.isArray(i.and)){Ym(i.and,t,n,r);continue}if(`or`in i&&Array.isArray(i.or)){Ym(i.or,t,n,r);continue}`member`in i&&Gm(i,t,n,r,Km)}}function Xm(e,t,n,r,i){let a=e.funnel;if(!a)return;let o=(e,n)=>Jm(e,t,n,i);if($(a.bindingKey,`server.validation.ai.bindingKeyRequired.funnel`,o,n),$(a.timeDimension,`server.validation.ai.timeDimensionRequired.funnel`,o,n),!a.steps||!Array.isArray(a.steps))n.push({type:`syntax_error`,message:T(`server.validation.ai.funnelStepsRequired`)});else if(a.steps.length<2)n.push({type:`syntax_error`,message:T(`server.validation.ai.funnelRequiresSteps`)});else for(let e=0;e<a.steps.length;e++){let o=a.steps[e];o.name||r.push({type:`best_practice`,message:T(`server.validation.ai.stepMissingName`,{step:e+1}),suggestion:T(`server.validation.ai.suggestAddStepNames`)}),o.filter&&`member`in o.filter&&Ym([o.filter],t,n,i)}}function Zm(e,t,n,r,i){let a=e.flow;if(!a)return;let o=(e,n)=>Jm(e,t,n,i);$(a.bindingKey,`server.validation.ai.bindingKeyRequired.flow`,o,n),$(a.timeDimension,`server.validation.ai.timeDimensionRequired.flow`,o,n),$(a.eventDimension,`server.validation.ai.eventDimensionRequired`,o,n),a.stepsBefore===void 0&&a.stepsAfter===void 0&&r.push({type:`best_practice`,message:T(`server.validation.ai.stepsBothMissing`),suggestion:T(`server.validation.ai.suggestSetSteps`)})}function Qm(e,t,n,r,i){let a=e.retention;if(!a)return;let o=(e,n)=>Jm(e,t,n,i);$(a.bindingKey,`server.validation.ai.bindingKeyRequired.retention`,o,n),$(a.timeDimension,`server.validation.ai.retentionTimeDimensionRequired`,o,n),a.granularity||r.push({type:`best_practice`,message:T(`server.validation.ai.granularityNotSpecified`),suggestion:T(`server.validation.ai.suggestSpecifyGranularity`)}),a.periods||r.push({type:`best_practice`,message:T(`server.validation.ai.periodsNotSpecified`),suggestion:T(`server.validation.ai.suggestSpecifyPeriods`)})}function $m(e,t,n,r,i){return e.funnel?(Xm(e,t,n,r,i),!0):e.flow?(Zm(e,t,n,r,i),!0):e.retention?(Qm(e,t,n,r,i),!0):!1}function eh(e,t,n,r,i){if(e.measures)for(let r of e.measures)qm(r,t,n,i);if(e.dimensions)for(let r of e.dimensions)Jm(r,t,n,i);if(e.timeDimensions)for(let a of e.timeDimensions)Jm(a.dimension,t,n,i),Wm(a.dimension,t,r);e.filters&&Ym(e.filters,t,n,i),!e.measures?.length&&!e.dimensions?.length&&n.push({type:`syntax_error`,message:T(`server.validation.ai.emptyQuery`)}),Um(e,r)}function th(e,t){let n=[],r=[],i=new Map;if($m(e,t,n,r,i))return{isValid:n.length===0,errors:n,warnings:r,correctedQuery:void 0};eh(e,t,n,r,i);let a=Hm(e,i);return{isValid:n.length===0,errors:n,warnings:r,correctedQuery:a}}function nh(e){return new Ad({drizzle:e.drizzle,schema:e.schema})}exports.BASE_CUBE_SET_ID=Dd,exports.BaseDatabaseExecutor=x,exports.CTEBuilder=An,exports.CalculatedMeasureResolver=A,exports.ComparisonQueryBuilder=Gr,exports.DatabendExecutor=Fe,exports.DrizzlePlanBuilder=ea,exports.DrizzleSqlBuilder=mn,exports.DuckDBExecutor=Ae,exports.EXPLAIN_ANALYSIS_PROMPT=Hd,exports.FlowQueryBuilder=qr,exports.FunnelQueryBuilder=Kr,exports.IdentityOptimiser=si,exports.JoinPathResolver=w,exports.LogicalPlanBuilder=oi,exports.LogicalPlanner=kn,exports.MemoryCacheProvider=Nd,exports.MySQLExecutor=ye,exports.OptimiserPipeline=ci,exports.PostgresExecutor=he,exports.QueryExecutor=na,exports.QueryValidationError=sr,exports.RetentionQueryBuilder=$r,exports.SINGLE_TENANT_CONTEXT=Od,exports.SQLiteExecutor=Ce,exports.STEP0_VALIDATION_PROMPT=Pd,exports.STEP1_SYSTEM_PROMPT=Rd,exports.STEP2_SYSTEM_PROMPT=Bd,exports.SYSTEM_PROMPT_TEMPLATE=Id,exports.SemanticLayerCompiler=Ad,exports.SnowflakeExecutor=Ve,exports.aiValidateQuery=th,exports.buildAgentSystemPrompt=rf,exports.buildAttributeDimensions=jd,exports.buildExplainAnalysisPrompt=Ud,exports.buildStep0Prompt=Fd,exports.buildStep1Prompt=zd,exports.buildStep2Prompt=Vd,exports.buildSystemPrompt=Ld,exports.createDatabaseExecutor=Ue,exports.createDatabendExecutor=Ie,exports.createDrizzleSemanticLayer=nh,exports.createDuckDBExecutor=je,exports.createMultiCubeContext=Ye,exports.createMySQLExecutor=be,exports.createPostgresExecutor=ge,exports.createSQLiteExecutor=we,exports.createSnowflakeExecutor=He,exports.createToolExecutor=fm,exports.defineCube=Xe,exports.detectQueryMode=ir,exports.detectQueryModes=nr,exports.discoverCubes=xf,exports.findBestFieldMatch=Sf,exports.fnv1aHash=Vr,exports.formatCubeSchemaForExplain=Wd,exports.formatExistingIndexes=Gd,exports.generateCacheKey=Pr,exports.getActiveQueryModes=rr,exports.getCubeInvalidationPattern=Ur,exports.getJoinType=Ge,exports.getToolDefinitions=dm,exports.handleAgentChat=Tm,exports.hasComparisonMode=Qn,exports.hasFlowMode=er,exports.hasFunnelMode=$n,exports.hasRetentionMode=tr,exports.normalizeQuery=Fr,exports.resolveCubeReference=S,exports.resolveSqlExpression=C,exports.strongHash=Hr,exports.suggestQuery=Bm;
|
package/dist/server/index.js
CHANGED
|
@@ -18044,7 +18044,7 @@ async function Jm(e, t, n) {
|
|
|
18044
18044
|
return new e(t);
|
|
18045
18045
|
}
|
|
18046
18046
|
case "openai": {
|
|
18047
|
-
let { OpenAIProvider: e } = await import("./openai-
|
|
18047
|
+
let { OpenAIProvider: e } = await import("./openai-Dkcj08jM.js");
|
|
18048
18048
|
return new e(t, n);
|
|
18049
18049
|
}
|
|
18050
18050
|
case "google": {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
function*e(e,t){let n=e.index??0;if(e.id&&(t.set(n,{id:e.id,name:e.function?.name||``,arguments:``}),yield{type:`tool_use_start`,id:e.id,name:e.function?.name||``}),e.function?.name&&t.has(n)){let r=t.get(n);r.name||=e.function.name}if(e.function?.arguments){let r=t.get(n);r&&(r.arguments+=e.function.arguments,yield{type:`tool_input_delta`,json:e.function.arguments})}}function*t(e,t){for(let[e,n]of t){let r={},i=!1;try{n.arguments&&(r=JSON.parse(n.arguments))}catch{i=!0}yield{type:`tool_use_end`,id:n.id,input:r,parseError:i},t.delete(e)}yield{type:`message_meta`,stopReason:e}}function*n(n,r){n.usage&&(yield{type:`message_meta`,inputTokens:n.usage.prompt_tokens,outputTokens:n.usage.completion_tokens,stopReason:``});let i=n.choices?.[0];if(!i)return;let a=i.delta;if(a){if(a.content&&(yield{type:`text_delta`,text:a.content}),a.tool_calls)for(let t of a.tool_calls)yield*e(t,r);i.finish_reason&&(yield*t(i.finish_reason,r))}}var r=class{client;apiKey;baseURL;initialized=!1;constructor(e,t){this.apiKey=e,this.baseURL=t?.baseURL}async ensureClient(){if(this.initialized)return;let e;try{let t=await Promise.resolve().then(()=>require("./openai-
|
|
1
|
+
function*e(e,t){let n=e.index??0;if(e.id&&(t.set(n,{id:e.id,name:e.function?.name||``,arguments:``}),yield{type:`tool_use_start`,id:e.id,name:e.function?.name||``}),e.function?.name&&t.has(n)){let r=t.get(n);r.name||=e.function.name}if(e.function?.arguments){let r=t.get(n);r&&(r.arguments+=e.function.arguments,yield{type:`tool_input_delta`,json:e.function.arguments})}}function*t(e,t){for(let[e,n]of t){let r={},i=!1;try{n.arguments&&(r=JSON.parse(n.arguments))}catch{i=!0}yield{type:`tool_use_end`,id:n.id,input:r,parseError:i},t.delete(e)}yield{type:`message_meta`,stopReason:e}}function*n(n,r){n.usage&&(yield{type:`message_meta`,inputTokens:n.usage.prompt_tokens,outputTokens:n.usage.completion_tokens,stopReason:``});let i=n.choices?.[0];if(!i)return;let a=i.delta;if(a){if(a.content&&(yield{type:`text_delta`,text:a.content}),a.tool_calls)for(let t of a.tool_calls)yield*e(t,r);i.finish_reason&&(yield*t(i.finish_reason,r))}}var r=class{client;apiKey;baseURL;initialized=!1;constructor(e,t){this.apiKey=e,this.baseURL=t?.baseURL}async ensureClient(){if(this.initialized)return;let e;try{let t=await Promise.resolve().then(()=>require("./openai-DjP9PbWc.cjs"));e=t.default||t.OpenAI||t}catch{throw Error(`openai is required for the OpenAI provider. Install it with: npm install openai`)}let t={apiKey:this.apiKey};this.baseURL&&(t.baseURL=this.baseURL),this.client=new e(t),this.initialized=!0}async createStream(e){await this.ensureClient();let{messages:t}=this.formatMessages(e.messages,e.system);return this.client.chat.completions.create({model:e.model,max_completion_tokens:e.maxTokens,tools:this.formatTools(e.tools),messages:t,stream:!0,stream_options:{include_usage:!0}})}async*parseStreamEvents(e){let t=new Map;for await(let r of e)yield*n(r,t)}formatTools(e){return e.map(e=>({type:`function`,function:{name:e.name,description:e.description,parameters:e.parameters}}))}formatMessages(e,t){let n=[{role:`system`,content:t}];for(let t of e)if(t.role===`user`)n.push({role:`user`,content:typeof t.content==`string`?t.content:JSON.stringify(t.content)});else if(t.role===`assistant`){if(typeof t.content==`string`)n.push({role:`assistant`,content:t.content});else{let e=t.content,r=e.filter(e=>e.type===`text`).map(e=>e.text).join(``),i=e.filter(e=>e.type===`tool_use`).map(e=>({id:e.id,type:`function`,function:{name:e.name,arguments:JSON.stringify(e.input||{})}})),a={role:`assistant`};r&&(a.content=r),i.length>0&&(a.tool_calls=i),n.push(a)}}else t.role===`tool`?n.push(t):t.role===`tool_result`&&n.push({role:`user`,content:typeof t.content==`string`?t.content:JSON.stringify(t.content)});return{messages:n}}formatToolResults(e){return e.map(e=>({role:`tool`,tool_call_id:e.toolUseId,content:e.content}))}shouldContinue(e){return e===`tool_calls`}isTruncated(e){return e===`length`}formatError(e){if(!e||!(e instanceof Error))return`Something went wrong. Please try again.`;let t=e.message||``,n=e;return n.status===429?`Too many requests. Please wait a moment and try again.`:n.status===401?`Authentication failed. Please check your API key configuration.`:n.status===503||n.status===502?`The AI service is temporarily unavailable. Please try again in a moment.`:n.status===400?`There was a problem with the request. Please try again.`:t.startsWith(`{`)||t.startsWith(`Error: {`)?`The AI service encountered an error. Please try again.`:t}};exports.OpenAIProvider=r;
|