drizzle-cube 0.6.5 → 0.6.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (157) hide show
  1. package/dist/adapters/ActivityGridChart.config-BK3hB9co.cjs +1 -0
  2. package/dist/adapters/ActivityGridChart.config-C-68HsAw.js +2 -0
  3. package/dist/adapters/AreaChart.config-5G7_E-7u.cjs +1 -0
  4. package/dist/adapters/AreaChart.config-C7S67Qt4.js +2 -0
  5. package/dist/adapters/BarChart.config-C6kG_uEt.cjs +1 -0
  6. package/dist/adapters/BarChart.config-DQcicZYy.js +2 -0
  7. package/dist/adapters/BoxPlotChart.config-B4xDTwop.js +2 -0
  8. package/dist/adapters/BoxPlotChart.config-DifAPvo0.cjs +1 -0
  9. package/dist/adapters/BubbleChart.config-BS2edxZ5.cjs +1 -0
  10. package/dist/adapters/BubbleChart.config-C5AYou9n.js +2 -0
  11. package/dist/adapters/CandlestickChart.config-Duknkqyk.js +2 -0
  12. package/dist/adapters/CandlestickChart.config-jk3ZXIAQ.cjs +1 -0
  13. package/dist/adapters/DataTable.config-BG_5hx63.cjs +1 -0
  14. package/dist/adapters/DataTable.config-Bkv6CmFa.js +2 -0
  15. package/dist/adapters/FunnelChart.config-Dvy0S17e.js +2 -0
  16. package/dist/adapters/FunnelChart.config-DzqGZgKz.cjs +1 -0
  17. package/dist/adapters/GaugeChart.config-DAWIU33N.js +2 -0
  18. package/dist/adapters/GaugeChart.config-DC0NW8XT.cjs +1 -0
  19. package/dist/adapters/HeatMapChart.config-BlQDS9nY.cjs +1 -0
  20. package/dist/adapters/HeatMapChart.config-DccGkzHI.js +2 -0
  21. package/dist/adapters/KpiDelta.config-DvpALT3Z.js +2 -0
  22. package/dist/adapters/KpiDelta.config-u2AlJkZ3.cjs +1 -0
  23. package/dist/adapters/KpiNumber.config-CF_LqRh-.cjs +1 -0
  24. package/dist/adapters/KpiNumber.config-lhEzZOFR.js +2 -0
  25. package/dist/adapters/KpiText.config-BCYGZdnx.js +2 -0
  26. package/dist/adapters/KpiText.config-FbnsbjdV.cjs +1 -0
  27. package/dist/adapters/LineChart.config-B7qWURRH.js +2 -0
  28. package/dist/adapters/LineChart.config-B9JKd48E.cjs +1 -0
  29. package/dist/adapters/MarkdownChart.config-BIS9PqHh.js +2 -0
  30. package/dist/adapters/MarkdownChart.config-BfM9NaQe.cjs +1 -0
  31. package/dist/adapters/MeasureProfileChart.config-1hh--3nI.js +2 -0
  32. package/dist/adapters/MeasureProfileChart.config-cmL8wp6a.cjs +1 -0
  33. package/dist/adapters/PieChart.config-DzzCeT7z.cjs +1 -0
  34. package/dist/adapters/PieChart.config-aRJJwYx4.js +2 -0
  35. package/dist/adapters/RadarChart.config-AcZ7kWG8.js +2 -0
  36. package/dist/adapters/RadarChart.config-CddBTWAo.cjs +1 -0
  37. package/dist/adapters/RadialBarChart.config-D4qPexJV.cjs +1 -0
  38. package/dist/adapters/RadialBarChart.config-y-NBkq5N.js +2 -0
  39. package/dist/adapters/RetentionCombinedChart.config-BkRNE7lX.cjs +1 -0
  40. package/dist/adapters/RetentionCombinedChart.config-WoX6n6D5.js +2 -0
  41. package/dist/adapters/RetentionHeatmap.config-ByjWidhh.cjs +1 -0
  42. package/dist/adapters/RetentionHeatmap.config-DjXLk03y.js +2 -0
  43. package/dist/adapters/SankeyChart.config-BWO9LszQ.cjs +1 -0
  44. package/dist/adapters/SankeyChart.config-SuP0jjib.js +2 -0
  45. package/dist/adapters/ScatterChart.config-Dk1G4Eaj.cjs +1 -0
  46. package/dist/adapters/ScatterChart.config-DzVXd1ZM.js +2 -0
  47. package/dist/adapters/SunburstChart.config-Cu4ib4Ui.cjs +1 -0
  48. package/dist/adapters/SunburstChart.config-_0gUzNs7.js +2 -0
  49. package/dist/adapters/TreeMapChart.config-DbwYrje4.js +2 -0
  50. package/dist/adapters/TreeMapChart.config-hM8PukgE.cjs +1 -0
  51. package/dist/adapters/WaterfallChart.config-CjUHeE8R.js +2 -0
  52. package/dist/adapters/WaterfallChart.config-Dwxt0kK-.cjs +1 -0
  53. package/dist/adapters/core/index.cjs +1 -1
  54. package/dist/adapters/core/index.js +1 -1
  55. package/dist/adapters/{core-DoSUiMmv.js → core-BMZhIzaI.js} +1 -1
  56. package/dist/adapters/{core-CVqTwOR3.cjs → core-VK-KVH9q.cjs} +1 -1
  57. package/dist/adapters/express/index.cjs +1 -1
  58. package/dist/adapters/express/index.js +3 -3
  59. package/dist/adapters/fastify/index.cjs +1 -1
  60. package/dist/adapters/fastify/index.js +3 -3
  61. package/dist/adapters/{handler-DyIyrFFp.cjs → handler-_PXp3G47.cjs} +2 -2
  62. package/dist/adapters/{handler-j74EJDdo.js → handler-xR2P1EI4.js} +27 -27
  63. package/dist/adapters/hono/index.cjs +1 -1
  64. package/dist/adapters/hono/index.js +3 -3
  65. package/dist/adapters/mcp-tools.cjs +1 -1
  66. package/dist/adapters/mcp-tools.js +1 -1
  67. package/dist/adapters/mcp-transport-C2v5BTDF.cjs +40 -0
  68. package/dist/adapters/mcp-transport-CyDBoYEe.js +601 -0
  69. package/dist/adapters/nextjs/index.cjs +1 -1
  70. package/dist/adapters/nextjs/index.js +3 -3
  71. package/dist/adapters/{openai-BCSKRcbD.js → openai-B1pC8nVM.js} +2082 -1351
  72. package/dist/adapters/{openai-BjR3ohaS.js → openai-B6hWZk_r.js} +1 -1
  73. package/dist/adapters/{openai-CsVXOcJZ.cjs → openai-C3-mjSAc.cjs} +1 -1
  74. package/dist/adapters/openai-DQZaHN0V.cjs +18 -0
  75. package/dist/cjs/client/charts.d.ts +1 -1
  76. package/dist/cjs/client/index.d.ts +1 -1
  77. package/dist/client/charts.d.ts +1 -1
  78. package/dist/client/chunks/{DashboardEditModal-DFQSxR_C.js → DashboardEditModal-9o16JNF0.js} +3 -3
  79. package/dist/client/chunks/{DashboardEditModal-DFQSxR_C.js.map → DashboardEditModal-9o16JNF0.js.map} +1 -1
  80. package/dist/client/chunks/{analysis-builder-CBZ7lOC-.js → analysis-builder-BDWychCW.js} +3 -3
  81. package/dist/client/chunks/{analysis-builder-CBZ7lOC-.js.map → analysis-builder-BDWychCW.js.map} +1 -1
  82. package/dist/client/chunks/{analysis-builder-shared-8alCn-zw.js → analysis-builder-shared-DkL0e-wU.js} +3 -3
  83. package/dist/client/chunks/{analysis-builder-shared-8alCn-zw.js.map → analysis-builder-shared-DkL0e-wU.js.map} +1 -1
  84. package/dist/client/chunks/{useExplainAI-CEf04DPE.js → useExplainAI-DueJjb0r.js} +2 -2
  85. package/dist/client/chunks/{useExplainAI-CEf04DPE.js.map → useExplainAI-DueJjb0r.js.map} +1 -1
  86. package/dist/client/chunks/{vendor-DFAQ4Ucl.js → vendor-ChnlgSP0.js} +29 -27
  87. package/dist/client/chunks/vendor-ChnlgSP0.js.map +1 -0
  88. package/dist/client/components.js +1 -1
  89. package/dist/client/hooks.js +1 -1
  90. package/dist/client/index.d.ts +1 -1
  91. package/dist/client/index.js +4 -4
  92. package/dist/client-bundle-stats.html +1 -1
  93. package/dist/mcp-app/mcp-app.html +100 -100
  94. package/dist/server/index.cjs +1 -1
  95. package/dist/server/index.js +1 -1
  96. package/dist/server/{openai-BCSKRcbD.js → openai-B1pC8nVM.js} +2082 -1351
  97. package/dist/server/{openai-BjR3ohaS.js → openai-B6hWZk_r.js} +1 -1
  98. package/dist/server/{openai-CsVXOcJZ.cjs → openai-C3-mjSAc.cjs} +1 -1
  99. package/dist/server/openai-DQZaHN0V.cjs +18 -0
  100. package/package.json +7 -7
  101. package/dist/adapters/ActivityGridChart.config-Bvi50jl_.cjs +0 -1
  102. package/dist/adapters/ActivityGridChart.config-BwswifOD.js +0 -2
  103. package/dist/adapters/AreaChart.config-Cehf1Kjo.cjs +0 -1
  104. package/dist/adapters/AreaChart.config-DC-gnmli.js +0 -2
  105. package/dist/adapters/BarChart.config-BY53r96T.cjs +0 -1
  106. package/dist/adapters/BarChart.config-DJN5Oqmw.js +0 -2
  107. package/dist/adapters/BoxPlotChart.config-9hLT3yMs.js +0 -2
  108. package/dist/adapters/BoxPlotChart.config-D9P4PMTf.cjs +0 -1
  109. package/dist/adapters/BubbleChart.config-CEVSsy7u.js +0 -2
  110. package/dist/adapters/BubbleChart.config-Cji0z0Tb.cjs +0 -1
  111. package/dist/adapters/CandlestickChart.config-DPv76FmM.cjs +0 -1
  112. package/dist/adapters/CandlestickChart.config-tcHTorLu.js +0 -2
  113. package/dist/adapters/DataTable.config-D4txBrlQ.cjs +0 -1
  114. package/dist/adapters/DataTable.config-DrObkanI.js +0 -2
  115. package/dist/adapters/FunnelChart.config-BFYSkibE.js +0 -2
  116. package/dist/adapters/FunnelChart.config-BTSFeha-.cjs +0 -1
  117. package/dist/adapters/GaugeChart.config-BFz6NZfT.js +0 -2
  118. package/dist/adapters/GaugeChart.config-DJKD6oh8.cjs +0 -1
  119. package/dist/adapters/HeatMapChart.config-C3EZl9Sy.cjs +0 -1
  120. package/dist/adapters/HeatMapChart.config-jUCb5NAE.js +0 -2
  121. package/dist/adapters/KpiDelta.config-DhuealNk.js +0 -2
  122. package/dist/adapters/KpiDelta.config-m6FEIeWo.cjs +0 -1
  123. package/dist/adapters/KpiNumber.config-Cmd7eHmg.cjs +0 -1
  124. package/dist/adapters/KpiNumber.config-KQdKrkK-.js +0 -2
  125. package/dist/adapters/KpiText.config-D_pU4jH3.cjs +0 -1
  126. package/dist/adapters/KpiText.config-V8SvhllA.js +0 -2
  127. package/dist/adapters/LineChart.config-BuWM0TJx.js +0 -2
  128. package/dist/adapters/LineChart.config-CsxJ3f5A.cjs +0 -1
  129. package/dist/adapters/MarkdownChart.config-CJdjenj7.cjs +0 -1
  130. package/dist/adapters/MarkdownChart.config-oCWrAuom.js +0 -2
  131. package/dist/adapters/MeasureProfileChart.config-DBLnhtOk.cjs +0 -1
  132. package/dist/adapters/MeasureProfileChart.config-DWg0jzxA.js +0 -2
  133. package/dist/adapters/PieChart.config-D3qI6nbM.cjs +0 -1
  134. package/dist/adapters/PieChart.config-R2rcul2D.js +0 -2
  135. package/dist/adapters/RadarChart.config-BlK8QuDi.js +0 -2
  136. package/dist/adapters/RadarChart.config-fH3ce10I.cjs +0 -1
  137. package/dist/adapters/RadialBarChart.config-CqCnb27I.js +0 -2
  138. package/dist/adapters/RadialBarChart.config-DQQHJOCs.cjs +0 -1
  139. package/dist/adapters/RetentionCombinedChart.config-BFJ8i-kp.js +0 -2
  140. package/dist/adapters/RetentionCombinedChart.config-B_Wd_YjX.cjs +0 -1
  141. package/dist/adapters/RetentionHeatmap.config-BLqu9-Ft.js +0 -2
  142. package/dist/adapters/RetentionHeatmap.config-MvOPw_Dd.cjs +0 -1
  143. package/dist/adapters/SankeyChart.config-C_4u9Xiq.js +0 -2
  144. package/dist/adapters/SankeyChart.config-EH6wsjPr.cjs +0 -1
  145. package/dist/adapters/ScatterChart.config-D-MlQ7mP.js +0 -2
  146. package/dist/adapters/ScatterChart.config-DmwiEBN-.cjs +0 -1
  147. package/dist/adapters/SunburstChart.config-BRr_as_L.js +0 -2
  148. package/dist/adapters/SunburstChart.config-CptDj8e4.cjs +0 -1
  149. package/dist/adapters/TreeMapChart.config-D5wX2xaT.cjs +0 -1
  150. package/dist/adapters/TreeMapChart.config-Dyhwpwq3.js +0 -2
  151. package/dist/adapters/WaterfallChart.config-B_LGJIov.js +0 -2
  152. package/dist/adapters/WaterfallChart.config-Q4Fv196W.cjs +0 -1
  153. package/dist/adapters/mcp-transport-BuU5CrKL.cjs +0 -40
  154. package/dist/adapters/mcp-transport-l8DhKzR5.js +0 -601
  155. package/dist/adapters/openai-ClVVLjNl.cjs +0 -17
  156. package/dist/client/chunks/vendor-DFAQ4Ucl.js.map +0 -1
  157. package/dist/server/openai-ClVVLjNl.cjs +0 -17
@@ -822,4 +822,4 @@ The query is validated before adding. The portlet fetches its own data.`,paramet
822
822
  [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}}}),r.set(`add_portlet`,async e=>{let n={number:`kpiNumber`,retention:`retentionHeatmap`}[e.chartType]??e.chartType,r;try{r=JSON.parse(e.query)}catch{return{result:"Invalid query: could not parse JSON string. Ensure `query` is a valid JSON string.",isError:!0}}r=ef(r);let i=t.validateQuery(r);if(!i.isValid)return{result:`Invalid query — fix these errors and retry:\n${i.errors.join(`
823
823
  `)}\n\nAttempted query:\n${JSON.stringify(r,null,2)}`,isError:!0};let a=!!(r.funnel||r.flow||r.retention),o;if(a)o=e.chartConfig??{};else{let t=_p(n,e.chartConfig,r),i=mp(n,t,r);if(!i.isValid)return{result:`Chart config invalid — fix these errors and retry:\n${i.errors.join(`
824
824
  `)}`,isError:!0};o=t}let s=`portlet-${Date.now()}-${Math.random().toString(36).slice(2,7)}`,c={id:s,title:e.title,query:e.query,chartType:n,chartConfig:o,displayConfig:e.displayConfig};return{result:`Portlet "${e.title}" added to notebook (id: ${s}, chart: ${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_portlet`,data:c}}}),r.set(`add_markdown`,async e=>{let t=`markdown-${Date.now()}-${Math.random().toString(36).slice(2,7)}`,n=e.content||e.text||e.markdown||``,r={id:t,title:e.title,content:n};return{result:`Markdown block added to notebook (id: ${t}). [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 n=e.portlets;if(!n||n.length===0)return{result:`Dashboard must contain at least one portlet.`,isError:!0};let r=[];for(let e of n){if(e.chartType===`markdown`)continue;let n=e.query;if(!n){r.push(`Portlet "${e.title}": missing query`);continue}let i;try{i=JSON.parse(n)}catch{r.push(`Portlet "${e.title}": invalid JSON query`);continue}i=ef(i);let a=t.validateQuery(i);a.isValid||r.push(`Portlet "${e.title}": ${a.errors.join(`, `)}`)}if(r.length>0)return{result:`Dashboard has invalid portlets — fix these errors and retry:\n${r.join(`
825
- `)}`,isError:!0};let i={portlets:n.map(e=>{let t=e.chartType,n=t===`markdown`,r=n?`query`:e.analysisType||`query`,i=r===`funnel`?`funnel`:r===`flow`?`flow`:r===`retention`?`retention`:`query`,a=e.query||`{}`,o;try{o=JSON.parse(a)}catch{o={}}let s={version:1,analysisType:i,activeView:`chart`,charts:{[i]:{chartType:t,chartConfig:e.chartConfig||{},displayConfig:e.displayConfig||{}}},query:n?{}:o};return{id:e.id,title:e.title,analysisConfig:s,dashboardFilterMapping:e.dashboardFilterMapping,w:e.w,h:e.h,x:e.x,y:e.y}}),filters:e.filters,colorPalette:e.colorPalette},a=e.title;return{result:`Dashboard "${a}" created with ${i.portlets.length} portlets and ${i.filters?.length||0} filters.`,sideEffect:{type:`dashboard_saved`,data:{title:a,description:e.description,dashboardConfig:i}}}}catch(e){return{result:`Failed to save dashboard: ${e instanceof Error?e.message:`Unknown error`}`,isError:!0}}}),r}async function Sp(e,t,n){switch(e){case`anthropic`:{let{AnthropicProvider:e}=await Promise.resolve().then(()=>require("./anthropic-DG4r1LSm.cjs"));return new e(t)}case`openai`:{let{OpenAIProvider:e}=await Promise.resolve().then(()=>require("./openai-CsVXOcJZ.cjs"));return new e(t,n)}case`google`:{let{GoogleProvider:e}=await Promise.resolve().then(()=>require("./google-BOnRIN1w.cjs"));return new e(t)}default:throw Error(`Unknown LLM provider: "${e}". Supported providers: anthropic, openai, google`)}}function Cp(e,t){if(Array.isArray(t))for(let n of t)e.push(n);else e.push(t)}function wp(e){if(e)try{e()}catch{}}function Tp(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`}));Cp(n,t.formatToolResults(i))}else e.length>0&&n.push({role:`assistant`,content:r.content})}return n}function Ep(e,t){if(!(e?.type!==`tool_use`||!t))try{e.input=JSON.parse(t)}catch{e.input={}}}function Dp(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 Op(e,t){if(e.currentBlockIsToolUse&&e.currentToolInputJson){let t=e.contentBlocks[e.contentBlocks.length-1];if(t?.type===`tool_use`)try{t.input=JSON.parse(e.currentToolInputJson)}catch{}}e.contentBlocks.push({type:`tool_use`,id:t.id,name:t.name,input:{},...t.metadata?{metadata:t.metadata}:{}}),e.currentToolInputJson=``,e.currentBlockIsToolUse=!0}function kp(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)}else if(e.currentBlockIsToolUse){let t=e.contentBlocks[e.contentBlocks.length-1];t?.type===`tool_use`&&e.currentToolInputJson&&(Ep(t,e.currentToolInputJson),e.currentToolInputJson=``),e.currentBlockIsToolUse=!1}}async function*Ap(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`:Dp(n,e.text),yield{type:`text_delta`,data:e.text};break;case`tool_use_start`:Op(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`:kp(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);break}}return{contentBlocks:n.contentBlocks,stopReason:n.stopReason,inputTokens:n.inputTokens,outputTokens:n.outputTokens}}async function*jp(e,t){let{executor:n,observability:r,traceId:i,turn:a}=t,o=e.name,s=e.input||{},c=e.id,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,result:e.result,...e.isError?{isError:!0}:{}}},wp(()=>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}},wp(()=>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*Mp(e,t){let n=[];for(let r of e){if(r.type!==`tool_use`)continue;let e=yield*jp(r,t);n.push(e)}return n}var Np={anthropic:`claude-sonnet-4-6`,openai:`gpt-4.1-mini`,google:`gemini-3-flash-preview`};async function*Pp(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||Np[d]||`claude-sonnet-4-6`,p=e.baseURLOverride||a.baseURL,m=a.maxTurns||25,h=a.maxTokens||4096,g;try{g=await Sp(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:k(`server.errors.llmInitFailed`)}};return}let _=bp(),v=xp({semanticLayer:r,securityContext:i}),y=Nd(r.getMetadata());e.systemContext&&(y+=`\n\n## User Context\n\n${e.systemContext}`),wp(()=>c?.onChatStart?.({traceId:l,sessionId:s,message:t,model:f,historyLength:n?.length??0}));let b=Tp(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*Ap(g,t);if(wp(()=>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.shouldContinue(i))break;let s=yield*Mp(r,{executor:v,observability:c,traceId:l,turn:e});yield{type:`turn_complete`,data:{}},Cp(b,g.formatToolResults(s))}wp(()=>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 Fp(e){return e.toISOString().split(`T`)[0]}function Ip(e,t){let n=new Date,r=Fp(n);if(/days?/.test(t)){let t=new Date(n);return t.setDate(t.getDate()-e),{dateRange:[Fp(t),r],granularity:`day`}}if(/weeks?/.test(t)){let t=new Date(n);return t.setDate(t.getDate()-e*7),{dateRange:[Fp(t),r],granularity:e<=4?`day`:`week`}}if(/months?/.test(t)){let t=new Date(n);return t.setMonth(t.getMonth()-e),{dateRange:[Fp(t),r],granularity:e<=3?`day`:`month`}}return null}function Lp(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:[Fp(i),Fp(a)],granularity:`month`}}function Rp(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 zp(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 Bp(e,t,n,r,i){let a=0;for(let n of t){let t=Xd(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 Vp(){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 Hp={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 Up(e){let t=e.toLowerCase();return Hp.funnel.test(t)?`funnel`:Hp.flow.test(t)?`flow`:Hp.retention.test(t)?`retention`:`query`}function Wp(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 Gp(e){let t=Vp(),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=Ip(parseInt(t[1],10),n);if(e)return e}return/^q[1-4]$/i.test(t[0])?Lp(t[0]):{dateRange:e.getDateRange(),granularity:e.granularity}}}return null}function Kp(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 qp(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 Jp(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=Yd(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 Yp(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:Wp(e,void 0)}}function Xp(e,t,n){let r=[],i=[],a={},o=Up(t),s=Jp(e,t,n,r,i);if(s.length===0)return Yp(o,i);let c=s[0],l=.5,u=Kp(t);u&&(r.push(`Detected ${u.type} aggregation intent`),l+=.1);let d=[],f=t.toLowerCase();l+=Rp(c,f,d,r),d.length===0&&u&&zp(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=qp(t),m=[];l+=Bp(s,p,f,m,r),m.length>0&&(a.dimensions=m);let h=Gp(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:Wp(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:k(t)})}function Zp(e,t){return e.map(e=>t.get(e)||e)}function Qp(e,t){if(t.size===0)return;let n=JSON.parse(JSON.stringify(e));return n.measures&&=Zp(n.measures,t),n.dimensions&&=Zp(n.dimensions,t),n.timeDimensions&&=n.timeDimensions.map(e=>({...e,dimension:t.get(e.dimension)||e.dimension})),n}function $p(e,t){e.measures&&e.measures.length>10&&t.push({type:`performance`,message:k(`server.validation.ai.performanceManyMeasures`,{count:e.measures.length}),suggestion:k(`server.validation.ai.suggestSplitQueries`)}),e.dimensions&&e.dimensions.length>5&&t.push({type:`performance`,message:k(`server.validation.ai.performanceManyDimensions`,{count:e.dimensions.length}),suggestion:k(`server.validation.ai.suggestAddDimensionFilters`)})}function em(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:k(`server.validation.ai.dimensionNotTimeType`,{dimension:e,type:a.type}),field:e,suggestion:k(`server.validation.ai.suggestUseTimeDimension`)})}function tm(e,t,n,r,i){let a=e.member,o=a.split(`.`);if(o.length!==2){n.push({type:`invalid_filter`,message:k(`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:k(`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:k(`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:k(`server.validation.ai.filterFieldNotFound`,{fieldName:c,cubeName:s}),field:a})}function nm(e,t){let n=null;for(let r of t){let t=zd(e.toLowerCase(),r.toLowerCase());t<=3&&(!n||t<n.distance)&&(n={field:r,distance:t})}return n}function rm(e,t,n,r){let i=e.split(`.`);if(i.length!==2){n.push({type:`syntax_error`,message:k(`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=nm(a,i);s?(n.push({type:`cube_not_found`,message:k(`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:k(`server.validation.ai.cubeNotFoundWithAvailable`,{cubeName:a}),field:e,suggestion:`Available cubes: ${i.join(`, `)}`});return}if(!s.measures.some(t=>t.name===e)){let i=Xd(t,o,`measure`);if(i&&i.cube===a)n.push({type:`measure_not_found`,message:k(`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=nm(o,t);if(i){let t=`${a}.${i.field}`;n.push({type:`measure_not_found`,message:k(`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:k(`server.validation.ai.measureNotFoundWithAvailable`,{measureName:o,cubeName:a}),field:e,suggestion:`Available measures: ${t.slice(0,5).join(`, `)}${t.length>5?`...`:``}`})}}}function im(e,t,n,r){let i=e.split(`.`);if(i.length!==2){n.push({type:`syntax_error`,message:k(`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=nm(a,i);s?(n.push({type:`cube_not_found`,message:k(`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:k(`server.validation.ai.cubeNotFoundWithAvailable`,{cubeName:a}),field:e,suggestion:`Available cubes: ${i.join(`, `)}`});return}if(!s.dimensions.some(t=>t.name===e)){let i=Xd(t,o,`dimension`);if(i&&i.cube===a)n.push({type:`dimension_not_found`,message:k(`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=nm(o,t);if(i){let t=`${a}.${i.field}`;n.push({type:`dimension_not_found`,message:k(`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:k(`server.validation.ai.dimensionNotFoundWithAvailable`,{dimensionName:o,cubeName:a}),field:e,suggestion:`Available dimensions: ${t.slice(0,5).join(`, `)}${t.length>5?`...`:``}`})}}}function am(e,t,n,r){for(let i of e){if(`and`in i&&Array.isArray(i.and)){am(i.and,t,n,r);continue}if(`or`in i&&Array.isArray(i.or)){am(i.or,t,n,r);continue}`member`in i&&tm(i,t,n,r,nm)}}function om(e,t,n,r,i){let a=e.funnel;if(!a)return;let o=(e,n)=>im(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:k(`server.validation.ai.funnelStepsRequired`)});else if(a.steps.length<2)n.push({type:`syntax_error`,message:k(`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:k(`server.validation.ai.stepMissingName`,{step:e+1}),suggestion:k(`server.validation.ai.suggestAddStepNames`)}),o.filter&&`member`in o.filter&&am([o.filter],t,n,i)}}function sm(e,t,n,r,i){let a=e.flow;if(!a)return;let o=(e,n)=>im(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:k(`server.validation.ai.stepsBothMissing`),suggestion:k(`server.validation.ai.suggestSetSteps`)})}function cm(e,t,n,r,i){let a=e.retention;if(!a)return;let o=(e,n)=>im(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:k(`server.validation.ai.granularityNotSpecified`),suggestion:k(`server.validation.ai.suggestSpecifyGranularity`)}),a.periods||r.push({type:`best_practice`,message:k(`server.validation.ai.periodsNotSpecified`),suggestion:k(`server.validation.ai.suggestSpecifyPeriods`)})}function lm(e,t,n,r,i){return e.funnel?(om(e,t,n,r,i),!0):e.flow?(sm(e,t,n,r,i),!0):e.retention?(cm(e,t,n,r,i),!0):!1}function um(e,t,n,r,i){if(e.measures)for(let r of e.measures)rm(r,t,n,i);if(e.dimensions)for(let r of e.dimensions)im(r,t,n,i);if(e.timeDimensions)for(let a of e.timeDimensions)im(a.dimension,t,n,i),em(a.dimension,t,r);e.filters&&am(e.filters,t,n,i),!e.measures?.length&&!e.dimensions?.length&&n.push({type:`syntax_error`,message:k(`server.validation.ai.emptyQuery`)}),$p(e,r)}function dm(e,t){let n=[],r=[],i=new Map;if(lm(e,t,n,r,i))return{isValid:n.length===0,errors:n,warnings:r,correctedQuery:void 0};um(e,t,n,r,i);let a=Qp(e,i);return{isValid:n.length===0,errors:n,warnings:r,correctedQuery:a}}function fm(e){return new sd({drizzle:e.drizzle,schema:e.schema})}exports.BaseDatabaseExecutor=S,exports.CTEBuilder=Tn,exports.CalculatedMeasureResolver=j,exports.ComparisonQueryBuilder=Ar,exports.DatabendExecutor=He,exports.DrizzlePlanBuilder=zi,exports.DrizzleSqlBuilder=cn,exports.DuckDBExecutor=Le,exports.EXPLAIN_ANALYSIS_PROMPT=vd,exports.FlowQueryBuilder=Mr,exports.FunnelQueryBuilder=jr,exports.IdentityOptimiser=Kr,exports.JoinPathResolver=ln,exports.LogicalPlanBuilder=Gr,exports.LogicalPlanner=Cn,exports.MemoryCacheProvider=ld,exports.MySQLExecutor=Ee,exports.OptimiserPipeline=qr,exports.PostgresExecutor=Se,exports.QueryExecutor=Vi,exports.RetentionQueryBuilder=Rr,exports.SQLiteExecutor=Ae,exports.STEP0_VALIDATION_PROMPT=ud,exports.STEP1_SYSTEM_PROMPT=md,exports.STEP2_SYSTEM_PROMPT=gd,exports.SYSTEM_PROMPT_TEMPLATE=fd,exports.SemanticLayerCompiler=sd,exports.SnowflakeExecutor=Je,exports.aiValidateQuery=dm,exports.buildAgentSystemPrompt=Nd,exports.buildExplainAnalysisPrompt=yd,exports.buildStep0Prompt=dd,exports.buildStep1Prompt=hd,exports.buildStep2Prompt=_d,exports.buildSystemPrompt=pd,exports.createDatabaseExecutor=Xe,exports.createDatabendExecutor=Ue,exports.createDrizzleSemanticLayer=fm,exports.createDuckDBExecutor=Re,exports.createMultiCubeContext=nt,exports.createMySQLExecutor=De,exports.createPostgresExecutor=Ce,exports.createSQLiteExecutor=je,exports.createSnowflakeExecutor=Ye,exports.createToolExecutor=xp,exports.defineCube=rt,exports.detectQueryMode=er,exports.detectQueryModes=Qn,exports.discoverCubes=Yd,exports.findBestFieldMatch=Xd,exports.fnv1aHash=Er,exports.formatCubeSchemaForExplain=bd,exports.formatExistingIndexes=xd,exports.generateCacheKey=yr,exports.getActiveQueryModes=$n,exports.getCubeInvalidationPattern=Or,exports.getJoinType=Qe,exports.getToolDefinitions=bp,exports.handleAgentChat=Pp,exports.hasComparisonMode=Jn,exports.hasFlowMode=Xn,exports.hasFunnelMode=Yn,exports.hasRetentionMode=Zn,exports.normalizeQuery=br,exports.resolveCubeReference=w,exports.resolveSqlExpression=T,exports.strongHash=Dr,exports.suggestQuery=Xp;
825
+ `)}`,isError:!0};let i={portlets:n.map(e=>{let t=e.chartType,n=t===`markdown`,r=n?`query`:e.analysisType||`query`,i=r===`funnel`?`funnel`:r===`flow`?`flow`:r===`retention`?`retention`:`query`,a=e.query||`{}`,o;try{o=JSON.parse(a)}catch{o={}}let s={version:1,analysisType:i,activeView:`chart`,charts:{[i]:{chartType:t,chartConfig:e.chartConfig||{},displayConfig:e.displayConfig||{}}},query:n?{}:o};return{id:e.id,title:e.title,analysisConfig:s,dashboardFilterMapping:e.dashboardFilterMapping,w:e.w,h:e.h,x:e.x,y:e.y}}),filters:e.filters,colorPalette:e.colorPalette},a=e.title;return{result:`Dashboard "${a}" created with ${i.portlets.length} portlets and ${i.filters?.length||0} filters.`,sideEffect:{type:`dashboard_saved`,data:{title:a,description:e.description,dashboardConfig:i}}}}catch(e){return{result:`Failed to save dashboard: ${e instanceof Error?e.message:`Unknown error`}`,isError:!0}}}),r}async function Sp(e,t,n){switch(e){case`anthropic`:{let{AnthropicProvider:e}=await Promise.resolve().then(()=>require("./anthropic-DG4r1LSm.cjs"));return new e(t)}case`openai`:{let{OpenAIProvider:e}=await Promise.resolve().then(()=>require("./openai-C3-mjSAc.cjs"));return new e(t,n)}case`google`:{let{GoogleProvider:e}=await Promise.resolve().then(()=>require("./google-BOnRIN1w.cjs"));return new e(t)}default:throw Error(`Unknown LLM provider: "${e}". Supported providers: anthropic, openai, google`)}}function Cp(e,t){if(Array.isArray(t))for(let n of t)e.push(n);else e.push(t)}function wp(e){if(e)try{e()}catch{}}function Tp(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`}));Cp(n,t.formatToolResults(i))}else e.length>0&&n.push({role:`assistant`,content:r.content})}return n}function Ep(e,t){if(!(e?.type!==`tool_use`||!t))try{e.input=JSON.parse(t)}catch{e.input={}}}function Dp(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 Op(e,t){if(e.currentBlockIsToolUse&&e.currentToolInputJson){let t=e.contentBlocks[e.contentBlocks.length-1];if(t?.type===`tool_use`)try{t.input=JSON.parse(e.currentToolInputJson)}catch{}}e.contentBlocks.push({type:`tool_use`,id:t.id,name:t.name,input:{},...t.metadata?{metadata:t.metadata}:{}}),e.currentToolInputJson=``,e.currentBlockIsToolUse=!0}function kp(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)}else if(e.currentBlockIsToolUse){let t=e.contentBlocks[e.contentBlocks.length-1];t?.type===`tool_use`&&e.currentToolInputJson&&(Ep(t,e.currentToolInputJson),e.currentToolInputJson=``),e.currentBlockIsToolUse=!1}}async function*Ap(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`:Dp(n,e.text),yield{type:`text_delta`,data:e.text};break;case`tool_use_start`:Op(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`:kp(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);break}}return{contentBlocks:n.contentBlocks,stopReason:n.stopReason,inputTokens:n.inputTokens,outputTokens:n.outputTokens}}async function*jp(e,t){let{executor:n,observability:r,traceId:i,turn:a}=t,o=e.name,s=e.input||{},c=e.id,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,result:e.result,...e.isError?{isError:!0}:{}}},wp(()=>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}},wp(()=>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*Mp(e,t){let n=[];for(let r of e){if(r.type!==`tool_use`)continue;let e=yield*jp(r,t);n.push(e)}return n}var Np={anthropic:`claude-sonnet-4-6`,openai:`gpt-4.1-mini`,google:`gemini-3-flash-preview`};async function*Pp(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||Np[d]||`claude-sonnet-4-6`,p=e.baseURLOverride||a.baseURL,m=a.maxTurns||25,h=a.maxTokens||4096,g;try{g=await Sp(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:k(`server.errors.llmInitFailed`)}};return}let _=bp(),v=xp({semanticLayer:r,securityContext:i}),y=Nd(r.getMetadata());e.systemContext&&(y+=`\n\n## User Context\n\n${e.systemContext}`),wp(()=>c?.onChatStart?.({traceId:l,sessionId:s,message:t,model:f,historyLength:n?.length??0}));let b=Tp(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*Ap(g,t);if(wp(()=>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.shouldContinue(i))break;let s=yield*Mp(r,{executor:v,observability:c,traceId:l,turn:e});yield{type:`turn_complete`,data:{}},Cp(b,g.formatToolResults(s))}wp(()=>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 Fp(e){return e.toISOString().split(`T`)[0]}function Ip(e,t){let n=new Date,r=Fp(n);if(/days?/.test(t)){let t=new Date(n);return t.setDate(t.getDate()-e),{dateRange:[Fp(t),r],granularity:`day`}}if(/weeks?/.test(t)){let t=new Date(n);return t.setDate(t.getDate()-e*7),{dateRange:[Fp(t),r],granularity:e<=4?`day`:`week`}}if(/months?/.test(t)){let t=new Date(n);return t.setMonth(t.getMonth()-e),{dateRange:[Fp(t),r],granularity:e<=3?`day`:`month`}}return null}function Lp(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:[Fp(i),Fp(a)],granularity:`month`}}function Rp(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 zp(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 Bp(e,t,n,r,i){let a=0;for(let n of t){let t=Xd(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 Vp(){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 Hp={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 Up(e){let t=e.toLowerCase();return Hp.funnel.test(t)?`funnel`:Hp.flow.test(t)?`flow`:Hp.retention.test(t)?`retention`:`query`}function Wp(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 Gp(e){let t=Vp(),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=Ip(parseInt(t[1],10),n);if(e)return e}return/^q[1-4]$/i.test(t[0])?Lp(t[0]):{dateRange:e.getDateRange(),granularity:e.granularity}}}return null}function Kp(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 qp(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 Jp(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=Yd(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 Yp(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:Wp(e,void 0)}}function Xp(e,t,n){let r=[],i=[],a={},o=Up(t),s=Jp(e,t,n,r,i);if(s.length===0)return Yp(o,i);let c=s[0],l=.5,u=Kp(t);u&&(r.push(`Detected ${u.type} aggregation intent`),l+=.1);let d=[],f=t.toLowerCase();l+=Rp(c,f,d,r),d.length===0&&u&&zp(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=qp(t),m=[];l+=Bp(s,p,f,m,r),m.length>0&&(a.dimensions=m);let h=Gp(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:Wp(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:k(t)})}function Zp(e,t){return e.map(e=>t.get(e)||e)}function Qp(e,t){if(t.size===0)return;let n=JSON.parse(JSON.stringify(e));return n.measures&&=Zp(n.measures,t),n.dimensions&&=Zp(n.dimensions,t),n.timeDimensions&&=n.timeDimensions.map(e=>({...e,dimension:t.get(e.dimension)||e.dimension})),n}function $p(e,t){e.measures&&e.measures.length>10&&t.push({type:`performance`,message:k(`server.validation.ai.performanceManyMeasures`,{count:e.measures.length}),suggestion:k(`server.validation.ai.suggestSplitQueries`)}),e.dimensions&&e.dimensions.length>5&&t.push({type:`performance`,message:k(`server.validation.ai.performanceManyDimensions`,{count:e.dimensions.length}),suggestion:k(`server.validation.ai.suggestAddDimensionFilters`)})}function em(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:k(`server.validation.ai.dimensionNotTimeType`,{dimension:e,type:a.type}),field:e,suggestion:k(`server.validation.ai.suggestUseTimeDimension`)})}function tm(e,t,n,r,i){let a=e.member,o=a.split(`.`);if(o.length!==2){n.push({type:`invalid_filter`,message:k(`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:k(`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:k(`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:k(`server.validation.ai.filterFieldNotFound`,{fieldName:c,cubeName:s}),field:a})}function nm(e,t){let n=null;for(let r of t){let t=zd(e.toLowerCase(),r.toLowerCase());t<=3&&(!n||t<n.distance)&&(n={field:r,distance:t})}return n}function rm(e,t,n,r){let i=e.split(`.`);if(i.length!==2){n.push({type:`syntax_error`,message:k(`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=nm(a,i);s?(n.push({type:`cube_not_found`,message:k(`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:k(`server.validation.ai.cubeNotFoundWithAvailable`,{cubeName:a}),field:e,suggestion:`Available cubes: ${i.join(`, `)}`});return}if(!s.measures.some(t=>t.name===e)){let i=Xd(t,o,`measure`);if(i&&i.cube===a)n.push({type:`measure_not_found`,message:k(`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=nm(o,t);if(i){let t=`${a}.${i.field}`;n.push({type:`measure_not_found`,message:k(`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:k(`server.validation.ai.measureNotFoundWithAvailable`,{measureName:o,cubeName:a}),field:e,suggestion:`Available measures: ${t.slice(0,5).join(`, `)}${t.length>5?`...`:``}`})}}}function im(e,t,n,r){let i=e.split(`.`);if(i.length!==2){n.push({type:`syntax_error`,message:k(`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=nm(a,i);s?(n.push({type:`cube_not_found`,message:k(`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:k(`server.validation.ai.cubeNotFoundWithAvailable`,{cubeName:a}),field:e,suggestion:`Available cubes: ${i.join(`, `)}`});return}if(!s.dimensions.some(t=>t.name===e)){let i=Xd(t,o,`dimension`);if(i&&i.cube===a)n.push({type:`dimension_not_found`,message:k(`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=nm(o,t);if(i){let t=`${a}.${i.field}`;n.push({type:`dimension_not_found`,message:k(`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:k(`server.validation.ai.dimensionNotFoundWithAvailable`,{dimensionName:o,cubeName:a}),field:e,suggestion:`Available dimensions: ${t.slice(0,5).join(`, `)}${t.length>5?`...`:``}`})}}}function am(e,t,n,r){for(let i of e){if(`and`in i&&Array.isArray(i.and)){am(i.and,t,n,r);continue}if(`or`in i&&Array.isArray(i.or)){am(i.or,t,n,r);continue}`member`in i&&tm(i,t,n,r,nm)}}function om(e,t,n,r,i){let a=e.funnel;if(!a)return;let o=(e,n)=>im(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:k(`server.validation.ai.funnelStepsRequired`)});else if(a.steps.length<2)n.push({type:`syntax_error`,message:k(`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:k(`server.validation.ai.stepMissingName`,{step:e+1}),suggestion:k(`server.validation.ai.suggestAddStepNames`)}),o.filter&&`member`in o.filter&&am([o.filter],t,n,i)}}function sm(e,t,n,r,i){let a=e.flow;if(!a)return;let o=(e,n)=>im(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:k(`server.validation.ai.stepsBothMissing`),suggestion:k(`server.validation.ai.suggestSetSteps`)})}function cm(e,t,n,r,i){let a=e.retention;if(!a)return;let o=(e,n)=>im(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:k(`server.validation.ai.granularityNotSpecified`),suggestion:k(`server.validation.ai.suggestSpecifyGranularity`)}),a.periods||r.push({type:`best_practice`,message:k(`server.validation.ai.periodsNotSpecified`),suggestion:k(`server.validation.ai.suggestSpecifyPeriods`)})}function lm(e,t,n,r,i){return e.funnel?(om(e,t,n,r,i),!0):e.flow?(sm(e,t,n,r,i),!0):e.retention?(cm(e,t,n,r,i),!0):!1}function um(e,t,n,r,i){if(e.measures)for(let r of e.measures)rm(r,t,n,i);if(e.dimensions)for(let r of e.dimensions)im(r,t,n,i);if(e.timeDimensions)for(let a of e.timeDimensions)im(a.dimension,t,n,i),em(a.dimension,t,r);e.filters&&am(e.filters,t,n,i),!e.measures?.length&&!e.dimensions?.length&&n.push({type:`syntax_error`,message:k(`server.validation.ai.emptyQuery`)}),$p(e,r)}function dm(e,t){let n=[],r=[],i=new Map;if(lm(e,t,n,r,i))return{isValid:n.length===0,errors:n,warnings:r,correctedQuery:void 0};um(e,t,n,r,i);let a=Qp(e,i);return{isValid:n.length===0,errors:n,warnings:r,correctedQuery:a}}function fm(e){return new sd({drizzle:e.drizzle,schema:e.schema})}exports.BaseDatabaseExecutor=S,exports.CTEBuilder=Tn,exports.CalculatedMeasureResolver=j,exports.ComparisonQueryBuilder=Ar,exports.DatabendExecutor=He,exports.DrizzlePlanBuilder=zi,exports.DrizzleSqlBuilder=cn,exports.DuckDBExecutor=Le,exports.EXPLAIN_ANALYSIS_PROMPT=vd,exports.FlowQueryBuilder=Mr,exports.FunnelQueryBuilder=jr,exports.IdentityOptimiser=Kr,exports.JoinPathResolver=ln,exports.LogicalPlanBuilder=Gr,exports.LogicalPlanner=Cn,exports.MemoryCacheProvider=ld,exports.MySQLExecutor=Ee,exports.OptimiserPipeline=qr,exports.PostgresExecutor=Se,exports.QueryExecutor=Vi,exports.RetentionQueryBuilder=Rr,exports.SQLiteExecutor=Ae,exports.STEP0_VALIDATION_PROMPT=ud,exports.STEP1_SYSTEM_PROMPT=md,exports.STEP2_SYSTEM_PROMPT=gd,exports.SYSTEM_PROMPT_TEMPLATE=fd,exports.SemanticLayerCompiler=sd,exports.SnowflakeExecutor=Je,exports.aiValidateQuery=dm,exports.buildAgentSystemPrompt=Nd,exports.buildExplainAnalysisPrompt=yd,exports.buildStep0Prompt=dd,exports.buildStep1Prompt=hd,exports.buildStep2Prompt=_d,exports.buildSystemPrompt=pd,exports.createDatabaseExecutor=Xe,exports.createDatabendExecutor=Ue,exports.createDrizzleSemanticLayer=fm,exports.createDuckDBExecutor=Re,exports.createMultiCubeContext=nt,exports.createMySQLExecutor=De,exports.createPostgresExecutor=Ce,exports.createSQLiteExecutor=je,exports.createSnowflakeExecutor=Ye,exports.createToolExecutor=xp,exports.defineCube=rt,exports.detectQueryMode=er,exports.detectQueryModes=Qn,exports.discoverCubes=Yd,exports.findBestFieldMatch=Xd,exports.fnv1aHash=Er,exports.formatCubeSchemaForExplain=bd,exports.formatExistingIndexes=xd,exports.generateCacheKey=yr,exports.getActiveQueryModes=$n,exports.getCubeInvalidationPattern=Or,exports.getJoinType=Qe,exports.getToolDefinitions=bp,exports.handleAgentChat=Pp,exports.hasComparisonMode=Jn,exports.hasFlowMode=Xn,exports.hasFunnelMode=Yn,exports.hasRetentionMode=Zn,exports.normalizeQuery=br,exports.resolveCubeReference=w,exports.resolveSqlExpression=T,exports.strongHash=Dr,exports.suggestQuery=Xp;
@@ -16836,7 +16836,7 @@ async function $p(e, t, n) {
16836
16836
  return new e(t);
16837
16837
  }
16838
16838
  case "openai": {
16839
- let { OpenAIProvider: e } = await import("./openai-BjR3ohaS.js");
16839
+ let { OpenAIProvider: e } = await import("./openai-B6hWZk_r.js");
16840
16840
  return new e(t, n);
16841
16841
  }
16842
16842
  case "google": {