drizzle-cube 0.4.42 → 0.4.44

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (199) hide show
  1. package/README.md +1 -1
  2. package/dist/adapters/compiler-CA6iopu7.cjs +198 -0
  3. package/dist/adapters/{mcp-transport-tB5a7Het.js → compiler-O3T1u7jl.js} +1172 -1779
  4. package/dist/adapters/express/index.cjs +2 -2
  5. package/dist/adapters/express/index.js +27 -26
  6. package/dist/adapters/fastify/index.cjs +2 -2
  7. package/dist/adapters/fastify/index.js +26 -25
  8. package/dist/adapters/{google-Dgo9-Kb5.cjs → google-BOAwi9Ib.cjs} +1 -1
  9. package/dist/adapters/{google-CT4kgmBf.js → google-CBfBGU4F.js} +1 -1
  10. package/dist/adapters/{handler-dHHEEbG9.cjs → handler-BO2nq6IS.cjs} +2 -2
  11. package/dist/adapters/{handler-fto6TSVn.js → handler-CjVc3ytc.js} +4 -4
  12. package/dist/adapters/hono/index.cjs +2 -2
  13. package/dist/adapters/hono/index.js +30 -29
  14. package/dist/adapters/mcp-tools.cjs +1 -0
  15. package/dist/adapters/mcp-tools.d.ts +128 -0
  16. package/dist/adapters/mcp-tools.js +69 -0
  17. package/dist/adapters/mcp-transport--zhJJHJc.js +370 -0
  18. package/dist/adapters/mcp-transport-MOoCDu2M.cjs +58 -0
  19. package/dist/adapters/mcp-transport.d.ts +44 -0
  20. package/dist/adapters/nextjs/index.cjs +1 -1
  21. package/dist/adapters/nextjs/index.js +23 -22
  22. package/dist/{server/openai-DKpZPCay.cjs → adapters/openai-4JP2B6pB.cjs} +1 -1
  23. package/dist/adapters/{openai-Ckpe7iU7.js → openai-BAnEZgKZ.js} +1 -1
  24. package/dist/adapters/{openai-Bc8qwEKW.cjs → openai-C4BD8xnN.cjs} +1 -1
  25. package/dist/adapters/{openai-DxeVtl8X.js → openai-CaSQEduB.js} +1 -1
  26. package/dist/adapters/{utils-_2o905Fi.js → utils-C7Nrw9Wb.js} +7 -3
  27. package/dist/adapters/{utils-2MwxiQ2o.cjs → utils-tNZ6Cvzw.cjs} +1 -1
  28. package/dist/adapters/utils.cjs +1 -1
  29. package/dist/adapters/utils.js +1 -1
  30. package/dist/client/charts.js +12 -12
  31. package/dist/client/chunks/{DashboardEditModal-4zzjtZRR.js → DashboardEditModal-BTdV528l.js} +1421 -1396
  32. package/dist/client/chunks/DashboardEditModal-BTdV528l.js.map +1 -0
  33. package/dist/client/chunks/{FieldSearchModal-trURu9Sa.js → FieldSearchModal-D75vy4Wb.js} +4 -4
  34. package/dist/client/chunks/{FieldSearchModal-trURu9Sa.js.map → FieldSearchModal-D75vy4Wb.js.map} +1 -1
  35. package/dist/client/chunks/KpiDelta-Bk8bzKYM.js +2 -0
  36. package/dist/client/chunks/KpiNumber-CKF-8e_T.js +2 -0
  37. package/dist/client/chunks/KpiText-Iz1vIvu_.js +2 -0
  38. package/dist/client/chunks/{RetentionCombinedChart-B1hUYaXt.js → RetentionCombinedChart-DIhK5pD8.js} +3 -3
  39. package/dist/client/chunks/{RetentionCombinedChart-B1hUYaXt.js.map → RetentionCombinedChart-DIhK5pD8.js.map} +1 -1
  40. package/dist/client/chunks/{RetentionHeatmap-Dn2ocjVf.js → RetentionHeatmap-CyREolyP.js} +1 -1
  41. package/dist/client/chunks/{RetentionHeatmap-Dn2ocjVf.js.map → RetentionHeatmap-CyREolyP.js.map} +1 -1
  42. package/dist/client/chunks/SchemaVisualization-B1GUT-FM.js +2 -0
  43. package/dist/client/chunks/SchemaVisualizationLazy-DymwT34e.js +2 -0
  44. package/dist/client/chunks/{analysis-builder-B7XSIMkr.js → analysis-builder-C1CJ0c7L.js} +52 -52
  45. package/dist/client/chunks/{analysis-builder-B7XSIMkr.js.map → analysis-builder-C1CJ0c7L.js.map} +1 -1
  46. package/dist/client/chunks/{analysis-builder-shared-DaqtrLxd.js → analysis-builder-shared-rkjJfWLT.js} +9 -9
  47. package/dist/client/chunks/{analysis-builder-shared-DaqtrLxd.js.map → analysis-builder-shared-rkjJfWLT.js.map} +1 -1
  48. package/dist/client/chunks/{chart-activity-grid-wR2Twpo7.js → chart-activity-grid-DLktOINm.js} +2 -2
  49. package/dist/client/chunks/{chart-activity-grid-wR2Twpo7.js.map → chart-activity-grid-DLktOINm.js.map} +1 -1
  50. package/dist/client/chunks/{chart-area-e9ysnatQ.js → chart-area-BwYaflNk.js} +3 -3
  51. package/dist/client/chunks/{chart-area-e9ysnatQ.js.map → chart-area-BwYaflNk.js.map} +1 -1
  52. package/dist/client/chunks/{chart-bar-CPt67rLR.js → chart-bar-BiENfFgE.js} +4 -4
  53. package/dist/client/chunks/{chart-bar-CPt67rLR.js.map → chart-bar-BiENfFgE.js.map} +1 -1
  54. package/dist/client/chunks/{chart-box-plot-Dp_nqQen.js → chart-box-plot-BJF1tBXC.js} +3 -3
  55. package/dist/client/chunks/{chart-box-plot-Dp_nqQen.js.map → chart-box-plot-BJF1tBXC.js.map} +1 -1
  56. package/dist/client/chunks/{chart-bubble-CYQ8loeS.js → chart-bubble-DQQhGVDJ.js} +3 -3
  57. package/dist/client/chunks/{chart-bubble-CYQ8loeS.js.map → chart-bubble-DQQhGVDJ.js.map} +1 -1
  58. package/dist/client/chunks/{chart-candlestick-DTeSf7C5.js → chart-candlestick-C2UuXbLe.js} +3 -3
  59. package/dist/client/chunks/{chart-candlestick-DTeSf7C5.js.map → chart-candlestick-C2UuXbLe.js.map} +1 -1
  60. package/dist/client/chunks/{chart-config-activity-grid-BSWS08cI.js → chart-config-activity-grid-DJOU3TEz.js} +2 -2
  61. package/dist/client/chunks/{chart-config-activity-grid-BSWS08cI.js.map → chart-config-activity-grid-DJOU3TEz.js.map} +1 -1
  62. package/dist/client/chunks/{chart-config-area-DKwgcHp4.js → chart-config-area-CWnWVT6a.js} +2 -2
  63. package/dist/client/chunks/{chart-config-area-DKwgcHp4.js.map → chart-config-area-CWnWVT6a.js.map} +1 -1
  64. package/dist/client/chunks/{chart-config-bar-deTjEhap.js → chart-config-bar-C-7Dr1Ho.js} +2 -2
  65. package/dist/client/chunks/{chart-config-bar-deTjEhap.js.map → chart-config-bar-C-7Dr1Ho.js.map} +1 -1
  66. package/dist/client/chunks/{chart-config-box-plot-DU4iWk3V.js → chart-config-box-plot-mVOwmLdu.js} +2 -2
  67. package/dist/client/chunks/{chart-config-box-plot-DU4iWk3V.js.map → chart-config-box-plot-mVOwmLdu.js.map} +1 -1
  68. package/dist/client/chunks/{chart-config-bubble-B8FSHSW-.js → chart-config-bubble-BPE2CeiD.js} +2 -2
  69. package/dist/client/chunks/{chart-config-bubble-B8FSHSW-.js.map → chart-config-bubble-BPE2CeiD.js.map} +1 -1
  70. package/dist/client/chunks/{chart-config-candlestick-BGfyWFft.js → chart-config-candlestick-BSB9DRy2.js} +2 -2
  71. package/dist/client/chunks/{chart-config-candlestick-BGfyWFft.js.map → chart-config-candlestick-BSB9DRy2.js.map} +1 -1
  72. package/dist/client/chunks/{chart-config-data-table-DKRcGa8t.js → chart-config-data-table-Bhdx5Hem.js} +2 -2
  73. package/dist/client/chunks/{chart-config-data-table-DKRcGa8t.js.map → chart-config-data-table-Bhdx5Hem.js.map} +1 -1
  74. package/dist/client/chunks/{chart-config-funnel-Bt4iGFo_.js → chart-config-funnel-Cl-v-bm1.js} +2 -2
  75. package/dist/client/chunks/{chart-config-funnel-Bt4iGFo_.js.map → chart-config-funnel-Cl-v-bm1.js.map} +1 -1
  76. package/dist/client/chunks/{chart-config-gauge-Bk4Jjp3W.js → chart-config-gauge-CdrUTJMJ.js} +2 -2
  77. package/dist/client/chunks/{chart-config-gauge-Bk4Jjp3W.js.map → chart-config-gauge-CdrUTJMJ.js.map} +1 -1
  78. package/dist/client/chunks/{chart-config-heat-map-CkHsqkrY.js → chart-config-heat-map-DGE3NzoF.js} +2 -2
  79. package/dist/client/chunks/{chart-config-heat-map-CkHsqkrY.js.map → chart-config-heat-map-DGE3NzoF.js.map} +1 -1
  80. package/dist/client/chunks/{chart-config-kpi-delta-CkUX98JV.js → chart-config-kpi-delta-DMrQerUW.js} +2 -2
  81. package/dist/client/chunks/{chart-config-kpi-delta-CkUX98JV.js.map → chart-config-kpi-delta-DMrQerUW.js.map} +1 -1
  82. package/dist/client/chunks/{chart-config-kpi-number-DcxyiUgs.js → chart-config-kpi-number-DCytCytn.js} +2 -2
  83. package/dist/client/chunks/{chart-config-kpi-number-DcxyiUgs.js.map → chart-config-kpi-number-DCytCytn.js.map} +1 -1
  84. package/dist/client/chunks/{chart-config-kpi-text-DI4mj8CN.js → chart-config-kpi-text-KdKQUvHo.js} +2 -2
  85. package/dist/client/chunks/{chart-config-kpi-text-DI4mj8CN.js.map → chart-config-kpi-text-KdKQUvHo.js.map} +1 -1
  86. package/dist/client/chunks/{chart-config-line--j7-dLue.js → chart-config-line-Bl9VDAdz.js} +2 -2
  87. package/dist/client/chunks/{chart-config-line--j7-dLue.js.map → chart-config-line-Bl9VDAdz.js.map} +1 -1
  88. package/dist/client/chunks/{chart-config-markdown-DUjvVjV4.js → chart-config-markdown-BX26b94i.js} +2 -2
  89. package/dist/client/chunks/{chart-config-markdown-DUjvVjV4.js.map → chart-config-markdown-BX26b94i.js.map} +1 -1
  90. package/dist/client/chunks/{chart-config-measure-profile-B9FKBNGc.js → chart-config-measure-profile-DwtRhEFh.js} +2 -2
  91. package/dist/client/chunks/{chart-config-measure-profile-B9FKBNGc.js.map → chart-config-measure-profile-DwtRhEFh.js.map} +1 -1
  92. package/dist/client/chunks/{chart-config-pie-yU4jipl9.js → chart-config-pie-BzBcqPMJ.js} +2 -2
  93. package/dist/client/chunks/{chart-config-pie-yU4jipl9.js.map → chart-config-pie-BzBcqPMJ.js.map} +1 -1
  94. package/dist/client/chunks/{chart-config-radar-R9Fkc8wL.js → chart-config-radar-6ZOgt__z.js} +2 -2
  95. package/dist/client/chunks/{chart-config-radar-R9Fkc8wL.js.map → chart-config-radar-6ZOgt__z.js.map} +1 -1
  96. package/dist/client/chunks/{chart-config-radial-bar-DeoXfpIp.js → chart-config-radial-bar-Df6Eta7N.js} +2 -2
  97. package/dist/client/chunks/{chart-config-radial-bar-DeoXfpIp.js.map → chart-config-radial-bar-Df6Eta7N.js.map} +1 -1
  98. package/dist/client/chunks/{chart-config-sankey-CXEsxo6s.js → chart-config-sankey-DgqKBFvN.js} +2 -2
  99. package/dist/client/chunks/{chart-config-sankey-CXEsxo6s.js.map → chart-config-sankey-DgqKBFvN.js.map} +1 -1
  100. package/dist/client/chunks/{chart-config-scatter-MVUFupub.js → chart-config-scatter-D5nVLDvi.js} +2 -2
  101. package/dist/client/chunks/{chart-config-scatter-MVUFupub.js.map → chart-config-scatter-D5nVLDvi.js.map} +1 -1
  102. package/dist/client/chunks/{chart-config-sunburst-Z_gqIY5u.js → chart-config-sunburst-Ca3FX9nW.js} +2 -2
  103. package/dist/client/chunks/{chart-config-sunburst-Z_gqIY5u.js.map → chart-config-sunburst-Ca3FX9nW.js.map} +1 -1
  104. package/dist/client/chunks/{chart-config-tree-map-BD-xAeIy.js → chart-config-tree-map-Bjy4QNa3.js} +2 -2
  105. package/dist/client/chunks/{chart-config-tree-map-BD-xAeIy.js.map → chart-config-tree-map-Bjy4QNa3.js.map} +1 -1
  106. package/dist/client/chunks/{chart-config-waterfall-CHwVkXZc.js → chart-config-waterfall-C5K2eqR7.js} +2 -2
  107. package/dist/client/chunks/{chart-config-waterfall-CHwVkXZc.js.map → chart-config-waterfall-C5K2eqR7.js.map} +1 -1
  108. package/dist/client/chunks/{chart-data-table-BZ7StNWv.js → chart-data-table-2iCsn0CF.js} +1099 -933
  109. package/dist/client/chunks/chart-data-table-2iCsn0CF.js.map +1 -0
  110. package/dist/client/chunks/{chart-funnel-C9JRW79j.js → chart-funnel-poyOf7-e.js} +3 -3
  111. package/dist/client/chunks/{chart-funnel-C9JRW79j.js.map → chart-funnel-poyOf7-e.js.map} +1 -1
  112. package/dist/client/chunks/{chart-gauge-_Xdgk_qI.js → chart-gauge-D5J4gRky.js} +3 -3
  113. package/dist/client/chunks/{chart-gauge-_Xdgk_qI.js.map → chart-gauge-D5J4gRky.js.map} +1 -1
  114. package/dist/client/chunks/{chart-heat-map-BOMQeUDL.js → chart-heat-map-BAMVhLGG.js} +3 -3
  115. package/dist/client/chunks/{chart-heat-map-BOMQeUDL.js.map → chart-heat-map-BAMVhLGG.js.map} +1 -1
  116. package/dist/client/chunks/{chart-kpi-delta-C2tdpWki.js → chart-kpi-delta-KQjUIeal.js} +71 -73
  117. package/dist/client/chunks/{chart-kpi-delta-C2tdpWki.js.map → chart-kpi-delta-KQjUIeal.js.map} +1 -1
  118. package/dist/client/chunks/{chart-kpi-number-BUNKM7yg.js → chart-kpi-number-CsQgV_x3.js} +62 -63
  119. package/dist/client/chunks/{chart-kpi-number-BUNKM7yg.js.map → chart-kpi-number-CsQgV_x3.js.map} +1 -1
  120. package/dist/client/chunks/{chart-kpi-text-COF8iN0K.js → chart-kpi-text-BR0IyeUU.js} +26 -27
  121. package/dist/client/chunks/{chart-kpi-text-COF8iN0K.js.map → chart-kpi-text-BR0IyeUU.js.map} +1 -1
  122. package/dist/client/chunks/{chart-line-D3SEwXDS.js → chart-line-B5_WntY5.js} +4 -4
  123. package/dist/client/chunks/{chart-line-D3SEwXDS.js.map → chart-line-B5_WntY5.js.map} +1 -1
  124. package/dist/client/chunks/{chart-markdown-DMekYkKz.js → chart-markdown-B6bENbel.js} +2 -2
  125. package/dist/client/chunks/{chart-markdown-DMekYkKz.js.map → chart-markdown-B6bENbel.js.map} +1 -1
  126. package/dist/client/chunks/{chart-measure-profile-BPhI1Z9s.js → chart-measure-profile-yWk-obNb.js} +4 -4
  127. package/dist/client/chunks/{chart-measure-profile-BPhI1Z9s.js.map → chart-measure-profile-yWk-obNb.js.map} +1 -1
  128. package/dist/client/chunks/{chart-pie-COl3Rmdk.js → chart-pie-BodrUoHv.js} +4 -4
  129. package/dist/client/chunks/{chart-pie-COl3Rmdk.js.map → chart-pie-BodrUoHv.js.map} +1 -1
  130. package/dist/client/chunks/{chart-radar-BKZXylBB.js → chart-radar-gG3zfLud.js} +4 -4
  131. package/dist/client/chunks/{chart-radar-BKZXylBB.js.map → chart-radar-gG3zfLud.js.map} +1 -1
  132. package/dist/client/chunks/{chart-radial-bar-CMfC7SPd.js → chart-radial-bar-C2IPCV8c.js} +4 -4
  133. package/dist/client/chunks/{chart-radial-bar-CMfC7SPd.js.map → chart-radial-bar-C2IPCV8c.js.map} +1 -1
  134. package/dist/client/chunks/{chart-sankey-8nRYnupt.js → chart-sankey-BOyxfG1Q.js} +3 -3
  135. package/dist/client/chunks/{chart-sankey-8nRYnupt.js.map → chart-sankey-BOyxfG1Q.js.map} +1 -1
  136. package/dist/client/chunks/{chart-scatter-xQMa3dUt.js → chart-scatter-B8OwlsAX.js} +4 -4
  137. package/dist/client/chunks/{chart-scatter-xQMa3dUt.js.map → chart-scatter-B8OwlsAX.js.map} +1 -1
  138. package/dist/client/chunks/{chart-sunburst-BGhJ4fui.js → chart-sunburst-D9lGEOCc.js} +4 -4
  139. package/dist/client/chunks/{chart-sunburst-BGhJ4fui.js.map → chart-sunburst-D9lGEOCc.js.map} +1 -1
  140. package/dist/client/chunks/{chart-tree-map-Cn1pmrAw.js → chart-tree-map-DZaKy9he.js} +4 -4
  141. package/dist/client/chunks/{chart-tree-map-Cn1pmrAw.js.map → chart-tree-map-DZaKy9he.js.map} +1 -1
  142. package/dist/client/chunks/{chart-waterfall-C2nVN4pn.js → chart-waterfall-BCdUx4DC.js} +4 -4
  143. package/dist/client/chunks/{chart-waterfall-C2nVN4pn.js.map → chart-waterfall-BCdUx4DC.js.map} +1 -1
  144. package/dist/client/chunks/{charts-core-Cy3rHADX.js → charts-core-C5Yokk-x.js} +2 -2
  145. package/dist/client/chunks/{charts-core-Cy3rHADX.js.map → charts-core-C5Yokk-x.js.map} +1 -1
  146. package/dist/client/chunks/{core-BdWfCZ3y.js → core-DcfMGTVa.js} +2 -2
  147. package/dist/client/chunks/{core-BdWfCZ3y.js.map → core-DcfMGTVa.js.map} +1 -1
  148. package/dist/client/chunks/{dist-BWPE2m_X.js → dist-eZurnOde.js} +1 -1
  149. package/dist/client/chunks/{dist-BWPE2m_X.js.map → dist-eZurnOde.js.map} +1 -1
  150. package/dist/client/chunks/exceljs.min-CcjgM-qg.js +31986 -0
  151. package/dist/client/chunks/exceljs.min-CcjgM-qg.js.map +1 -0
  152. package/dist/client/chunks/{javascript-O1RIRkZr.js → javascript-DFvvCuoP.js} +1 -1
  153. package/dist/client/chunks/{javascript-O1RIRkZr.js.map → javascript-DFvvCuoP.js.map} +1 -1
  154. package/dist/client/chunks/{json-C5bX2tt1.js → json-BBm9TlrA.js} +1 -1
  155. package/dist/client/chunks/{json-C5bX2tt1.js.map → json-BBm9TlrA.js.map} +1 -1
  156. package/dist/client/chunks/{rolldown-runtime-lc2dmIiU.js → rolldown-runtime-CCl2IeXn.js} +5 -2
  157. package/dist/client/chunks/{schema-visualization-DVdfx6N8.js → schema-visualization-t1KiOORo.js} +261 -265
  158. package/dist/client/chunks/{schema-visualization-DVdfx6N8.js.map → schema-visualization-t1KiOORo.js.map} +1 -1
  159. package/dist/client/chunks/{sql-D2qikO5q.js → sql-k0GA6oZ_.js} +1 -1
  160. package/dist/client/chunks/{sql-D2qikO5q.js.map → sql-k0GA6oZ_.js.map} +1 -1
  161. package/dist/client/chunks/{syntaxHighlighting-BYYWYmjr.js → syntaxHighlighting-CnDujqwg.js} +2 -2
  162. package/dist/client/chunks/{syntaxHighlighting-BYYWYmjr.js.map → syntaxHighlighting-CnDujqwg.js.map} +1 -1
  163. package/dist/client/chunks/{useDebounce-Bel8J05v.js → useDebounce-CKqkM42n.js} +11 -14
  164. package/dist/client/chunks/{useDebounce-Bel8J05v.js.map → useDebounce-CKqkM42n.js.map} +1 -1
  165. package/dist/client/chunks/{useExplainAI-CxdzY2N0.js → useExplainAI-DBIfYwz-.js} +12 -12
  166. package/dist/client/chunks/{useExplainAI-CxdzY2N0.js.map → useExplainAI-DBIfYwz-.js.map} +1 -1
  167. package/dist/client/chunks/{utils-CMkS7h9x.js → utils--qCr8Yn5.js} +2 -2
  168. package/dist/client/chunks/utils--qCr8Yn5.js.map +1 -0
  169. package/dist/client/chunks/{vendor-BoWEubRu.js → vendor-BRlsCGnK.js} +46 -46
  170. package/dist/client/chunks/{vendor-BoWEubRu.js.map → vendor-BRlsCGnK.js.map} +1 -1
  171. package/dist/client/components.js +3 -3
  172. package/dist/client/hooks.js +3 -3
  173. package/dist/client/icons/types.d.ts +1 -0
  174. package/dist/client/icons.js +1 -1
  175. package/dist/client/index.d.ts +2 -1
  176. package/dist/client/index.js +168 -168
  177. package/dist/client/index.js.map +1 -1
  178. package/dist/client/providers.js +1 -1
  179. package/dist/client/schema.js +1 -1
  180. package/dist/client/types.d.ts +6 -0
  181. package/dist/client/utils/exportXlsx.d.ts +20 -0
  182. package/dist/client/utils/index.d.ts +1 -0
  183. package/dist/client/utils.js +7 -7
  184. package/dist/client-bundle-stats.html +1 -1
  185. package/dist/server/index.cjs +2 -2
  186. package/dist/server/index.js +8 -4
  187. package/dist/server/{openai-DqCEogm0.js → openai-CqZg6zYL.js} +1 -1
  188. package/dist/server/{openai-0HbLlZq6.cjs → openai-D9Zjuby1.cjs} +1 -1
  189. package/dist/{adapters/openai-C96O8M75.cjs → server/openai-DmuEbFd6.cjs} +1 -1
  190. package/dist/server/{openai-DnGeU9PT.js → openai-rwauPzCT.js} +1 -1
  191. package/package.json +11 -1
  192. package/dist/adapters/mcp-transport-ro4OL4BW.cjs +0 -255
  193. package/dist/client/chunks/DashboardEditModal-4zzjtZRR.js.map +0 -1
  194. package/dist/client/chunks/chart-data-table-BZ7StNWv.js.map +0 -1
  195. package/dist/client/chunks/utils-CMkS7h9x.js.map +0 -1
  196. /package/dist/adapters/{anthropic-BIva8k1r.cjs → anthropic-Cto4Jxqt.cjs} +0 -0
  197. /package/dist/adapters/{anthropic-B_rg0BhK.js → anthropic-DpEbCVvF.js} +0 -0
  198. /package/dist/adapters/{dist-Boc63-1q.cjs → dist-BnyV9wfA.cjs} +0 -0
  199. /package/dist/adapters/{dist-De5fzUEM.js → dist-DjVh2RFz.js} +0 -0
@@ -0,0 +1,370 @@
1
+ import { c as e, d as t, h as n, p as r } from "./utils-C7Nrw9Wb.js";
2
+ import { a as i } from "./mcp-prompts-BAutSQYA.js";
3
+ //#region src/adapters/mcp-transport.ts
4
+ var a = [
5
+ "2025-11-25",
6
+ "2025-06-18",
7
+ "2025-03-26"
8
+ ], o = "2025-11-25";
9
+ function s(e) {
10
+ let t = v(e["mcp-protocol-version"]) || "2025-11-25";
11
+ return {
12
+ ok: a.includes(t),
13
+ negotiated: a.includes(t) ? t : null,
14
+ supported: a
15
+ };
16
+ }
17
+ function c(e) {
18
+ if (!e) return !1;
19
+ let t = e.split(",").map((e) => e.trim().toLowerCase()), n = t.includes("text/event-stream"), r = t.includes("application/json");
20
+ return n && !r;
21
+ }
22
+ var l = "mcp-session-id";
23
+ function u(e) {
24
+ if (!e) return !1;
25
+ let t = e.split(",").map((e) => e.trim().toLowerCase().split(";")[0]), n = t.some((e) => e === "application/json"), r = t.some((e) => e === "text/event-stream");
26
+ return n && r;
27
+ }
28
+ function d(e, t = {}) {
29
+ let { allowMissingOrigin: n = !0, allowedOrigins: r } = t;
30
+ if (!e) return n ? { valid: !0 } : {
31
+ valid: !1,
32
+ reason: "Origin header is required"
33
+ };
34
+ if (!r || r.length === 0) return { valid: !0 };
35
+ let i;
36
+ try {
37
+ i = new URL(e);
38
+ } catch {
39
+ return {
40
+ valid: !1,
41
+ reason: "Invalid Origin header format"
42
+ };
43
+ }
44
+ return r.map((e) => {
45
+ try {
46
+ return new URL(e).origin;
47
+ } catch {
48
+ return e;
49
+ }
50
+ }).includes(i.origin) ? { valid: !0 } : {
51
+ valid: !1,
52
+ reason: "Origin not in allowed list"
53
+ };
54
+ }
55
+ function f(e, t, n) {
56
+ let r = [];
57
+ return t && r.push(`id: ${t}`), n && n > 0 && r.push(`retry: ${n}`), r.push("event: message"), r.push(`data: ${JSON.stringify(e)}`), r.push(""), r.join("\n");
58
+ }
59
+ function p(e, t, n, r) {
60
+ return {
61
+ jsonrpc: "2.0",
62
+ id: e ?? null,
63
+ error: {
64
+ code: t,
65
+ message: n,
66
+ ...r === void 0 ? {} : { data: r }
67
+ }
68
+ };
69
+ }
70
+ function m(e, t) {
71
+ return {
72
+ jsonrpc: "2.0",
73
+ id: e ?? null,
74
+ result: t
75
+ };
76
+ }
77
+ function h(e) {
78
+ if (!e || typeof e != "object") return null;
79
+ let t = e;
80
+ return t.jsonrpc !== "2.0" || typeof t.method != "string" ? null : {
81
+ jsonrpc: "2.0",
82
+ method: t.method,
83
+ id: t.id,
84
+ params: t.params
85
+ };
86
+ }
87
+ async function g(e, i, s) {
88
+ let { semanticLayer: c, extractSecurityContext: l, rawRequest: u, rawResponse: d } = s, f = s.prompts ?? w, p = s.resources ?? T;
89
+ switch (e) {
90
+ case "initialize": {
91
+ let e = i?.protocolVersion, t;
92
+ return t = e && a.includes(e) ? e : o, {
93
+ protocolVersion: t,
94
+ capabilities: {
95
+ tools: { listChanged: !1 },
96
+ resources: { listChanged: !1 },
97
+ prompts: { listChanged: !1 },
98
+ sampling: {}
99
+ },
100
+ sessionId: b(),
101
+ serverInfo: {
102
+ name: "drizzle-cube",
103
+ version: typeof process < "u" ? process.env?.npm_package_version || "dev" : "worker"
104
+ }
105
+ };
106
+ }
107
+ case "list_tools":
108
+ case "tools/list": return {
109
+ tools: x(),
110
+ nextCursor: ""
111
+ };
112
+ case "call_tool":
113
+ case "tools/call": return S(i, s);
114
+ case "resources/list": return {
115
+ resources: p.map(({ uri: e, name: t, description: n, mimeType: r }) => ({
116
+ uri: e,
117
+ name: t,
118
+ description: n,
119
+ mimeType: r
120
+ })),
121
+ nextCursor: ""
122
+ };
123
+ case "resources/templates/list": return {
124
+ resourceTemplates: [],
125
+ nextCursor: ""
126
+ };
127
+ case "resources/read": {
128
+ let e = i?.uri, t = p.find((t) => t.uri === e) || p[0];
129
+ if (!t) throw _(-32602, "resource not found");
130
+ return { contents: [{
131
+ uri: t.uri,
132
+ mimeType: t.mimeType,
133
+ text: t.text
134
+ }] };
135
+ }
136
+ case "prompts/list": return {
137
+ prompts: f.map(({ name: e, description: t }) => ({
138
+ name: e,
139
+ description: t
140
+ })),
141
+ nextCursor: ""
142
+ };
143
+ case "ping": return {};
144
+ case "notifications/initialized": return {};
145
+ case "prompts/get": {
146
+ let e = i?.name, t = f.find((t) => t.name === e) || f[0];
147
+ if (!t) throw _(-32602, "prompt not found");
148
+ return {
149
+ name: t.name,
150
+ description: t.description,
151
+ messages: t.messages
152
+ };
153
+ }
154
+ case "discover": return t(c, i || {});
155
+ case "validate": {
156
+ let e = i || {};
157
+ if (!e.query) throw _(-32602, "query is required");
158
+ return n(c, e);
159
+ }
160
+ case "load": {
161
+ let e = i || {};
162
+ if (!e.query) throw _(-32602, "query is required");
163
+ return r(c, await l(u, d), e);
164
+ }
165
+ default: throw _(-32601, `Unknown MCP method: ${e}`);
166
+ }
167
+ }
168
+ function _(e, t, n) {
169
+ let r = Error(t);
170
+ return r.code = e, n !== void 0 && (r.data = n), r;
171
+ }
172
+ function v(e) {
173
+ return e ? Array.isArray(e) ? e[0] || null : e : null;
174
+ }
175
+ function y(e) {
176
+ return e.id === void 0 || e.id === null;
177
+ }
178
+ function b() {
179
+ return `evt-${e()}`;
180
+ }
181
+ function x() {
182
+ return [
183
+ {
184
+ name: "discover",
185
+ description: "Find relevant cubes based on topic or intent. Call this FIRST to understand available data.\n\nReturns cubes with:\n- All measures and dimensions with their types\n- Relationship information (joins) showing how cubes connect\n- Metadata hints (eventStream for funnels, etc.)\n\nIMPORTANT: The 'joins' property shows relationships between cubes. You can include dimensions from ANY related cube in your query - the system auto-joins them.\n\nExample: If Productivity has a join to Employees, you can query:\n{ \"measures\": [\"Productivity.totalPullRequests\"], \"dimensions\": [\"Employees.name\"] }",
186
+ inputSchema: {
187
+ type: "object",
188
+ properties: {
189
+ topic: {
190
+ type: "string",
191
+ description: "Keyword to search (e.g., \"sales\", \"employees\")"
192
+ },
193
+ intent: {
194
+ type: "string",
195
+ description: "Natural language goal (e.g., \"analyze productivity trends\")"
196
+ },
197
+ limit: {
198
+ type: "number",
199
+ description: "Max results (default: 10)"
200
+ },
201
+ minScore: {
202
+ type: "number",
203
+ description: "Min relevance 0-1 (default: 0.1)"
204
+ }
205
+ }
206
+ }
207
+ },
208
+ {
209
+ name: "validate",
210
+ description: "Validate a query and get auto-corrections for issues.\n\nChecks:\n- Field existence (measures, dimensions exist in schema)\n- Filter syntax and operators\n- Cross-cube join validity\n\nReturns corrected query if issues found.",
211
+ inputSchema: {
212
+ type: "object",
213
+ required: ["query"],
214
+ properties: { query: {
215
+ type: "object",
216
+ description: "CubeQuery to validate"
217
+ } }
218
+ }
219
+ },
220
+ {
221
+ name: "load",
222
+ description: "Execute a semantic query and return aggregated results.\n\nQUERY CONSTRUCTION RULES:\n\n1. CROSS-CUBE JOINS (use dimensions from related cubes!)\n Check 'joins' in discover results. Include dimensions from ANY related cube.\n Example - get employee names with their productivity:\n {\n \"measures\": [\"Productivity.totalPullRequests\"],\n \"dimensions\": [\"Employees.name\"],\n \"filters\": [{ \"member\": \"Productivity.date\", \"operator\": \"inDateRange\", \"values\": [\"last 3 months\"] }]\n }\n\n2. DATE FILTERING vs TIME GROUPING\n For AGGREGATED TOTALS: use 'filters' with 'inDateRange' (NOT timeDimensions)\n {\n \"measures\": [\"Productivity.totalPullRequests\"],\n \"dimensions\": [\"Employees.name\"],\n \"filters\": [{ \"member\": \"Productivity.date\", \"operator\": \"inDateRange\", \"values\": [\"last 3 months\"] }],\n \"order\": { \"Productivity.totalPullRequests\": \"desc\" },\n \"limit\": 5\n }\n\n For TIME SERIES: use 'timeDimensions' WITH 'granularity'\n {\n \"measures\": [\"Productivity.totalPullRequests\"],\n \"timeDimensions\": [{ \"dimension\": \"Productivity.date\", \"dateRange\": \"last 3 months\", \"granularity\": \"month\" }]\n }\n\n WARNING: timeDimensions WITHOUT granularity groups by day, returning many rows!\n\n3. TOP N PATTERN: filters + order + limit",
223
+ inputSchema: {
224
+ type: "object",
225
+ required: ["query"],
226
+ properties: { query: {
227
+ type: "object",
228
+ description: "CubeQuery object with:\n- measures: string[] - Aggregations (from any cube)\n- dimensions: string[] - Grouping fields (can be from RELATED cubes via joins)\n- filters: [{ member, operator, values }] - Use 'inDateRange' for date filtering\n- timeDimensions: [{ dimension, granularity, dateRange }] - ONLY for time series\n- order: { \"Cube.field\": \"asc\"|\"desc\" }\n- limit: number"
229
+ } }
230
+ }
231
+ }
232
+ ];
233
+ }
234
+ async function S(e, i) {
235
+ let { semanticLayer: a, extractSecurityContext: o, rawRequest: s, rawResponse: c } = i, l = e || {};
236
+ if (!l.name) throw _(-32602, "name is required for tools/call");
237
+ let u = l.arguments;
238
+ switch (l.name) {
239
+ case "discover": return C(await t(a, u || {}));
240
+ case "validate": {
241
+ let e = u || {};
242
+ if (!e.query) throw _(-32602, "query is required");
243
+ return C(await n(a, e));
244
+ }
245
+ case "load": {
246
+ let e = u || {};
247
+ if (!e.query) throw _(-32602, "query is required");
248
+ return C(await r(a, await o(s, c), e));
249
+ }
250
+ default: throw _(-32601, `Unknown tool: ${l.name}`);
251
+ }
252
+ }
253
+ function C(e) {
254
+ return {
255
+ content: [{
256
+ type: "text",
257
+ text: typeof e == "string" ? e : JSON.stringify(e)
258
+ }],
259
+ isError: !1
260
+ };
261
+ }
262
+ var w = i(), T = [{
263
+ uri: "drizzle-cube://quickstart",
264
+ name: "Drizzle Cube MCP Quickstart",
265
+ description: "Minimal guide for using discover/suggest/validate/load",
266
+ mimeType: "text/markdown",
267
+ text: [
268
+ "# Drizzle Cube MCP Quickstart",
269
+ "",
270
+ "Tools:",
271
+ "- discover: { topic?, intent?, limit?, minScore? } → cubes list",
272
+ "- suggest: { naturalLanguage, cube? } → draft query",
273
+ "- validate: { query } → corrected query + issues",
274
+ "- load: { query } → data + annotation",
275
+ "",
276
+ "Recommended flow:",
277
+ "1) tools/list",
278
+ "2) tools/call name=discover intent=\"<goal>\"",
279
+ "3) tools/call name=suggest naturalLanguage=\"<goal>\"",
280
+ "4) tools/call name=validate query=<from suggest>",
281
+ "5) tools/call name=load query=<validated>",
282
+ "",
283
+ "Query shapes supported:",
284
+ "- regular Cube.js-style query { measures, dimensions, filters, timeDimensions, order, limit, offset }",
285
+ "- funnel { bindingKey, timeDimension, steps[], includeTimeMetrics? }",
286
+ "- flow { bindingKey, eventDimension, steps?, window? }",
287
+ "- retention { bindingKey, timeDimension, periods, granularity, retentionType, breakdownDimensions }",
288
+ "",
289
+ "Filter rules: flat arrays of { member, operator, values }; do not nest arrays."
290
+ ].join("\n")
291
+ }, {
292
+ uri: "drizzle-cube://query-shapes",
293
+ name: "Query Shapes Reference",
294
+ description: "Detailed schema examples for regular, funnel, flow, and retention queries",
295
+ mimeType: "text/markdown",
296
+ text: [
297
+ "# Query Shapes",
298
+ "",
299
+ "## Regular query",
300
+ "```json",
301
+ "{",
302
+ " \"measures\": [\"Sales.count\"],",
303
+ " \"dimensions\": [\"Sales.channel\"],",
304
+ " \"filters\": [ { \"member\": \"Sales.status\", \"operator\": \"equals\", \"values\": [\"paid\"] } ],",
305
+ " \"timeDimensions\": [ { \"dimension\": \"Sales.createdAt\", \"dateRange\": \"last 30 days\", \"granularity\": \"day\" } ],",
306
+ " \"order\": { \"Sales.createdAt\": \"asc\" },",
307
+ " \"limit\": 500",
308
+ "}",
309
+ "```",
310
+ "",
311
+ "## Funnel",
312
+ "```json",
313
+ "{",
314
+ " \"funnel\": {",
315
+ " \"bindingKey\": \"Events.userId\",",
316
+ " \"timeDimension\": \"Events.timestamp\",",
317
+ " \"steps\": [",
318
+ " { \"name\": \"Signup\", \"filter\": [{ \"member\": \"Events.eventType\", \"operator\": \"equals\", \"values\": [\"signup\"] }] },",
319
+ " { \"name\": \"Purchase\", \"filter\": [{ \"member\": \"Events.eventType\", \"operator\": \"equals\", \"values\": [\"purchase\"] }] }",
320
+ " ],",
321
+ " \"includeTimeMetrics\": true",
322
+ " }",
323
+ "}",
324
+ "```",
325
+ "",
326
+ "## Flow",
327
+ "```json",
328
+ "{",
329
+ " \"flow\": {",
330
+ " \"bindingKey\": \"Events.sessionId\",",
331
+ " \"eventDimension\": \"Events.eventType\",",
332
+ " \"steps\": [\"view\", \"add_to_cart\", \"checkout\"],",
333
+ " \"window\": { \"unit\": \"minute\", \"value\": 30 }",
334
+ " }",
335
+ "}",
336
+ "```",
337
+ "",
338
+ "## Retention",
339
+ "```json",
340
+ "{",
341
+ " \"retention\": {",
342
+ " \"bindingKey\": \"Users.id\",",
343
+ " \"timeDimension\": \"Events.timestamp\",",
344
+ " \"periods\": 8,",
345
+ " \"granularity\": \"week\",",
346
+ " \"retentionType\": \"rolling\",",
347
+ " \"breakdownDimensions\": [\"Events.country\"]",
348
+ " }",
349
+ "}",
350
+ "```",
351
+ "",
352
+ "### Filter rules",
353
+ "- Always a flat array of filter objects: [{ member, operator, values }]",
354
+ "- For funnels, put time filter (inDateRange) only on step 0",
355
+ "- Operators: equals, notEquals, inDateRange, gt, gte, lt, lte, contains, notContains, set, notSet",
356
+ "",
357
+ "### Time handling",
358
+ "- Relative ranges (\"last 3 months\") -> add ONLY an inDateRange filter on the time dimension (do NOT add timeDimensions unless grouping is requested).",
359
+ "- Grouping (\"by month/week/day\") -> add timeDimensions entry with granularity.",
360
+ "- Both can be combined: inDateRange filter + timeDimensions granularity."
361
+ ].join("\n")
362
+ }];
363
+ function E() {
364
+ return T;
365
+ }
366
+ function D() {
367
+ return w;
368
+ }
369
+ //#endregion
370
+ export { g as a, y as c, b as d, f, c as h, x as i, s as l, d as m, p as n, D as o, u as p, m as r, E as s, l as t, h as u };
@@ -0,0 +1,58 @@
1
+ const e=require(`./utils-tNZ6Cvzw.cjs`),t=require(`./mcp-prompts-DsAkafVn.cjs`);var n=[`2025-11-25`,`2025-06-18`,`2025-03-26`],r=`2025-11-25`;function i(e){let t=h(e[`mcp-protocol-version`])||`2025-11-25`;return{ok:n.includes(t),negotiated:n.includes(t)?t:null,supported:n}}function a(e){if(!e)return!1;let t=e.split(`,`).map(e=>e.trim().toLowerCase()),n=t.includes(`text/event-stream`),r=t.includes(`application/json`);return n&&!r}var o=`mcp-session-id`;function s(e){if(!e)return!1;let t=e.split(`,`).map(e=>e.trim().toLowerCase().split(`;`)[0]),n=t.some(e=>e===`application/json`),r=t.some(e=>e===`text/event-stream`);return n&&r}function c(e,t={}){let{allowMissingOrigin:n=!0,allowedOrigins:r}=t;if(!e)return n?{valid:!0}:{valid:!1,reason:`Origin header is required`};if(!r||r.length===0)return{valid:!0};let i;try{i=new URL(e)}catch{return{valid:!1,reason:`Invalid Origin header format`}}return r.map(e=>{try{return new URL(e).origin}catch{return e}}).includes(i.origin)?{valid:!0}:{valid:!1,reason:`Origin not in allowed list`}}function l(e,t,n){let r=[];return t&&r.push(`id: ${t}`),n&&n>0&&r.push(`retry: ${n}`),r.push(`event: message`),r.push(`data: ${JSON.stringify(e)}`),r.push(``),r.join(`
2
+ `)}function u(e,t,n,r){return{jsonrpc:`2.0`,id:e??null,error:{code:t,message:n,...r===void 0?{}:{data:r}}}}function d(e,t){return{jsonrpc:`2.0`,id:e??null,result:t}}function f(e){if(!e||typeof e!=`object`)return null;let t=e;return t.jsonrpc!==`2.0`||typeof t.method!=`string`?null:{jsonrpc:`2.0`,method:t.method,id:t.id,params:t.params}}async function p(t,i,a){let{semanticLayer:o,extractSecurityContext:s,rawRequest:c,rawResponse:l}=a,u=a.prompts??x,d=a.resources??S;switch(t){case`initialize`:{let e=i?.protocolVersion,t;return t=e&&n.includes(e)?e:r,{protocolVersion:t,capabilities:{tools:{listChanged:!1},resources:{listChanged:!1},prompts:{listChanged:!1},sampling:{}},sessionId:_(),serverInfo:{name:`drizzle-cube`,version:typeof process<`u`?process.env?.npm_package_version||`dev`:`worker`}}}case`list_tools`:case`tools/list`:return{tools:v(),nextCursor:``};case`call_tool`:case`tools/call`:return y(i,a);case`resources/list`:return{resources:d.map(({uri:e,name:t,description:n,mimeType:r})=>({uri:e,name:t,description:n,mimeType:r})),nextCursor:``};case`resources/templates/list`:return{resourceTemplates:[],nextCursor:``};case`resources/read`:{let e=i?.uri,t=d.find(t=>t.uri===e)||d[0];if(!t)throw m(-32602,`resource not found`);return{contents:[{uri:t.uri,mimeType:t.mimeType,text:t.text}]}}case`prompts/list`:return{prompts:u.map(({name:e,description:t})=>({name:e,description:t})),nextCursor:``};case`ping`:return{};case`notifications/initialized`:return{};case`prompts/get`:{let e=i?.name,t=u.find(t=>t.name===e)||u[0];if(!t)throw m(-32602,`prompt not found`);return{name:t.name,description:t.description,messages:t.messages}}case`discover`:return e.d(o,i||{});case`validate`:{let t=i||{};if(!t.query)throw m(-32602,`query is required`);return e.h(o,t)}case`load`:{let t=i||{};if(!t.query)throw m(-32602,`query is required`);return e.p(o,await s(c,l),t)}default:throw m(-32601,`Unknown MCP method: ${t}`)}}function m(e,t,n){let r=Error(t);return r.code=e,n!==void 0&&(r.data=n),r}function h(e){return e?Array.isArray(e)?e[0]||null:e:null}function g(e){return e.id===void 0||e.id===null}function _(){return`evt-${e.c()}`}function v(){return[{name:`discover`,description:`Find relevant cubes based on topic or intent. Call this FIRST to understand available data.
3
+
4
+ Returns cubes with:
5
+ - All measures and dimensions with their types
6
+ - Relationship information (joins) showing how cubes connect
7
+ - Metadata hints (eventStream for funnels, etc.)
8
+
9
+ IMPORTANT: The 'joins' property shows relationships between cubes. You can include dimensions from ANY related cube in your query - the system auto-joins them.
10
+
11
+ Example: If Productivity has a join to Employees, you can query:
12
+ { "measures": ["Productivity.totalPullRequests"], "dimensions": ["Employees.name"] }`,inputSchema:{type:`object`,properties:{topic:{type:`string`,description:`Keyword to search (e.g., "sales", "employees")`},intent:{type:`string`,description:`Natural language goal (e.g., "analyze productivity trends")`},limit:{type:`number`,description:`Max results (default: 10)`},minScore:{type:`number`,description:`Min relevance 0-1 (default: 0.1)`}}}},{name:`validate`,description:`Validate a query and get auto-corrections for issues.
13
+
14
+ Checks:
15
+ - Field existence (measures, dimensions exist in schema)
16
+ - Filter syntax and operators
17
+ - Cross-cube join validity
18
+
19
+ Returns corrected query if issues found.`,inputSchema:{type:`object`,required:[`query`],properties:{query:{type:`object`,description:`CubeQuery to validate`}}}},{name:`load`,description:`Execute a semantic query and return aggregated results.
20
+
21
+ QUERY CONSTRUCTION RULES:
22
+
23
+ 1. CROSS-CUBE JOINS (use dimensions from related cubes!)
24
+ Check 'joins' in discover results. Include dimensions from ANY related cube.
25
+ Example - get employee names with their productivity:
26
+ {
27
+ "measures": ["Productivity.totalPullRequests"],
28
+ "dimensions": ["Employees.name"],
29
+ "filters": [{ "member": "Productivity.date", "operator": "inDateRange", "values": ["last 3 months"] }]
30
+ }
31
+
32
+ 2. DATE FILTERING vs TIME GROUPING
33
+ For AGGREGATED TOTALS: use 'filters' with 'inDateRange' (NOT timeDimensions)
34
+ {
35
+ "measures": ["Productivity.totalPullRequests"],
36
+ "dimensions": ["Employees.name"],
37
+ "filters": [{ "member": "Productivity.date", "operator": "inDateRange", "values": ["last 3 months"] }],
38
+ "order": { "Productivity.totalPullRequests": "desc" },
39
+ "limit": 5
40
+ }
41
+
42
+ For TIME SERIES: use 'timeDimensions' WITH 'granularity'
43
+ {
44
+ "measures": ["Productivity.totalPullRequests"],
45
+ "timeDimensions": [{ "dimension": "Productivity.date", "dateRange": "last 3 months", "granularity": "month" }]
46
+ }
47
+
48
+ WARNING: timeDimensions WITHOUT granularity groups by day, returning many rows!
49
+
50
+ 3. TOP N PATTERN: filters + order + limit`,inputSchema:{type:`object`,required:[`query`],properties:{query:{type:`object`,description:`CubeQuery object with:
51
+ - measures: string[] - Aggregations (from any cube)
52
+ - dimensions: string[] - Grouping fields (can be from RELATED cubes via joins)
53
+ - filters: [{ member, operator, values }] - Use 'inDateRange' for date filtering
54
+ - timeDimensions: [{ dimension, granularity, dateRange }] - ONLY for time series
55
+ - order: { "Cube.field": "asc"|"desc" }
56
+ - limit: number`}}}}]}async function y(t,n){let{semanticLayer:r,extractSecurityContext:i,rawRequest:a,rawResponse:o}=n,s=t||{};if(!s.name)throw m(-32602,`name is required for tools/call`);let c=s.arguments;switch(s.name){case`discover`:return b(await e.d(r,c||{}));case`validate`:{let t=c||{};if(!t.query)throw m(-32602,`query is required`);return b(await e.h(r,t))}case`load`:{let t=c||{};if(!t.query)throw m(-32602,`query is required`);return b(await e.p(r,await i(a,o),t))}default:throw m(-32601,`Unknown tool: ${s.name}`)}}function b(e){return{content:[{type:`text`,text:typeof e==`string`?e:JSON.stringify(e)}],isError:!1}}var x=t.a(),S=[{uri:`drizzle-cube://quickstart`,name:`Drizzle Cube MCP Quickstart`,description:`Minimal guide for using discover/suggest/validate/load`,mimeType:`text/markdown`,text:[`# Drizzle Cube MCP Quickstart`,``,`Tools:`,`- discover: { topic?, intent?, limit?, minScore? } → cubes list`,`- suggest: { naturalLanguage, cube? } → draft query`,`- validate: { query } → corrected query + issues`,`- load: { query } → data + annotation`,``,`Recommended flow:`,`1) tools/list`,`2) tools/call name=discover intent="<goal>"`,`3) tools/call name=suggest naturalLanguage="<goal>"`,`4) tools/call name=validate query=<from suggest>`,`5) tools/call name=load query=<validated>`,``,`Query shapes supported:`,`- regular Cube.js-style query { measures, dimensions, filters, timeDimensions, order, limit, offset }`,`- funnel { bindingKey, timeDimension, steps[], includeTimeMetrics? }`,`- flow { bindingKey, eventDimension, steps?, window? }`,`- retention { bindingKey, timeDimension, periods, granularity, retentionType, breakdownDimensions }`,``,`Filter rules: flat arrays of { member, operator, values }; do not nest arrays.`].join(`
57
+ `)},{uri:`drizzle-cube://query-shapes`,name:`Query Shapes Reference`,description:`Detailed schema examples for regular, funnel, flow, and retention queries`,mimeType:`text/markdown`,text:[`# Query Shapes`,``,`## Regular query`,"```json",`{`,` "measures": ["Sales.count"],`,` "dimensions": ["Sales.channel"],`,` "filters": [ { "member": "Sales.status", "operator": "equals", "values": ["paid"] } ],`,` "timeDimensions": [ { "dimension": "Sales.createdAt", "dateRange": "last 30 days", "granularity": "day" } ],`,` "order": { "Sales.createdAt": "asc" },`,` "limit": 500`,`}`,"```",``,`## Funnel`,"```json",`{`,` "funnel": {`,` "bindingKey": "Events.userId",`,` "timeDimension": "Events.timestamp",`,` "steps": [`,` { "name": "Signup", "filter": [{ "member": "Events.eventType", "operator": "equals", "values": ["signup"] }] },`,` { "name": "Purchase", "filter": [{ "member": "Events.eventType", "operator": "equals", "values": ["purchase"] }] }`,` ],`,` "includeTimeMetrics": true`,` }`,`}`,"```",``,`## Flow`,"```json",`{`,` "flow": {`,` "bindingKey": "Events.sessionId",`,` "eventDimension": "Events.eventType",`,` "steps": ["view", "add_to_cart", "checkout"],`,` "window": { "unit": "minute", "value": 30 }`,` }`,`}`,"```",``,`## Retention`,"```json",`{`,` "retention": {`,` "bindingKey": "Users.id",`,` "timeDimension": "Events.timestamp",`,` "periods": 8,`,` "granularity": "week",`,` "retentionType": "rolling",`,` "breakdownDimensions": ["Events.country"]`,` }`,`}`,"```",``,`### Filter rules`,`- Always a flat array of filter objects: [{ member, operator, values }]`,`- For funnels, put time filter (inDateRange) only on step 0`,`- Operators: equals, notEquals, inDateRange, gt, gte, lt, lte, contains, notContains, set, notSet`,``,`### Time handling`,`- Relative ranges ("last 3 months") -> add ONLY an inDateRange filter on the time dimension (do NOT add timeDimensions unless grouping is requested).`,`- Grouping ("by month/week/day") -> add timeDimensions entry with granularity.`,`- Both can be combined: inDateRange filter + timeDimensions granularity.`].join(`
58
+ `)}];function C(){return S}function w(){return x}Object.defineProperty(exports,`a`,{enumerable:!0,get:function(){return p}}),Object.defineProperty(exports,`c`,{enumerable:!0,get:function(){return g}}),Object.defineProperty(exports,`d`,{enumerable:!0,get:function(){return _}}),Object.defineProperty(exports,`f`,{enumerable:!0,get:function(){return l}}),Object.defineProperty(exports,`h`,{enumerable:!0,get:function(){return a}}),Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return v}}),Object.defineProperty(exports,`l`,{enumerable:!0,get:function(){return i}}),Object.defineProperty(exports,`m`,{enumerable:!0,get:function(){return c}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return u}}),Object.defineProperty(exports,`o`,{enumerable:!0,get:function(){return w}}),Object.defineProperty(exports,`p`,{enumerable:!0,get:function(){return s}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return d}}),Object.defineProperty(exports,`s`,{enumerable:!0,get:function(){return C}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return o}}),Object.defineProperty(exports,`u`,{enumerable:!0,get:function(){return f}});
@@ -95,5 +95,49 @@ export declare function jsonRpcError(code: number, message: string, data?: unkno
95
95
  export declare function normalizeHeader(value: string | string[] | undefined): string | null;
96
96
  export declare function isNotification(request: JsonRpcRequest): boolean;
97
97
  export declare function primeEventId(): string;
98
+ export declare function buildToolList(): ({
99
+ name: string;
100
+ description: string;
101
+ inputSchema: {
102
+ type: string;
103
+ properties: {
104
+ topic: {
105
+ type: string;
106
+ description: string;
107
+ };
108
+ intent: {
109
+ type: string;
110
+ description: string;
111
+ };
112
+ limit: {
113
+ type: string;
114
+ description: string;
115
+ };
116
+ minScore: {
117
+ type: string;
118
+ description: string;
119
+ };
120
+ query?: undefined;
121
+ };
122
+ required?: undefined;
123
+ };
124
+ } | {
125
+ name: string;
126
+ description: string;
127
+ inputSchema: {
128
+ type: string;
129
+ required: string[];
130
+ properties: {
131
+ query: {
132
+ type: string;
133
+ description: string;
134
+ };
135
+ topic?: undefined;
136
+ intent?: undefined;
137
+ limit?: undefined;
138
+ minScore?: undefined;
139
+ };
140
+ };
141
+ })[];
98
142
  export declare function getDefaultResources(): MCPResource[];
99
143
  export declare function getDefaultPrompts(): MCPPrompt[];
@@ -1 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`../utils-2MwxiQ2o.cjs`),t=require(`../mcp-transport-ro4OL4BW.cjs`);let n=require(`next/server`);function r(e){let{cubes:n,drizzle:r,schema:i,engineType:a,cache:o,rlsSetup:s}=e;if(!n||n.length===0)throw Error(`At least one cube must be provided in the cubes array`);let c=new t.h({drizzle:r,schema:i,engineType:a,cache:o,rlsSetup:s});return n.forEach(e=>{c.registerCube(e)}),c}function i(e,t){let n=e.headers.get(`origin`),r={};return t.origin&&(typeof t.origin==`string`?r[`Access-Control-Allow-Origin`]=t.origin:Array.isArray(t.origin)?n&&t.origin.includes(n)&&(r[`Access-Control-Allow-Origin`]=n):typeof t.origin==`function`&&n&&t.origin(n)&&(r[`Access-Control-Allow-Origin`]=n)),t.methods&&(r[`Access-Control-Allow-Methods`]=t.methods.join(`, `)),t.allowedHeaders&&(r[`Access-Control-Allow-Headers`]=t.allowedHeaders.join(`, `)),t.credentials&&(r[`Access-Control-Allow-Credentials`]=`true`),r}function a(e){return async function(t){let n=i(t,e);return new Response(null,{status:200,headers:n})}}function o(t){let{extractSecurityContext:a,cors:o}=t,s=r(t);return async function(t,r){try{let c;if(t.method===`POST`){let e=await t.json();c=e.query||e}else if(t.method===`GET`){let r=t.nextUrl.searchParams.get(`query`);if(!r)return n.NextResponse.json(e.i(`Query parameter is required`,400),{status:400});try{c=JSON.parse(r)}catch{return n.NextResponse.json(e.i(`Invalid JSON in query parameter`,400),{status:400})}}else return n.NextResponse.json(e.i(`Method not allowed`,405),{status:405});let l=await a(t,r),u=s.validateQuery(c);if(!u.isValid)return n.NextResponse.json(e.i(`Query validation failed: ${u.errors.join(`, `)}`,400),{status:400});let d=t.headers.get(`x-cache-control`)===`no-cache`,f=await s.executeMultiCubeQuery(c,l,{skipCache:d}),p=e.r(c,f,s);return n.NextResponse.json(p,{headers:o?i(t,o):{}})}catch(t){return process.env.NODE_ENV!==`test`&&console.error(`Next.js load handler error:`,t),n.NextResponse.json(e.i(t instanceof Error?t.message:`Query execution failed`,500),{status:500})}}}function s(t){let{cors:a}=t,o=r(t);return async function(t,r){try{let r=e.a(o.getMetadata());return n.NextResponse.json(r,{headers:a?i(t,a):{}})}catch(t){return process.env.NODE_ENV!==`test`&&console.error(`Next.js meta handler error:`,t),n.NextResponse.json(e.i(t instanceof Error?t.message:`Failed to fetch metadata`,500),{status:500})}}}function c(t){let{extractSecurityContext:a,cors:o}=t,s=r(t);return async function(t,r){try{let c;if(t.method===`POST`){let e=await t.json();c=e.query||e}else if(t.method===`GET`){let r=t.nextUrl.searchParams.get(`query`);if(!r)return n.NextResponse.json(e.i(`Query parameter is required`,400),{status:400});try{c=JSON.parse(r)}catch{return n.NextResponse.json(e.i(`Invalid JSON in query parameter`,400),{status:400})}}else return n.NextResponse.json(e.i(`Method not allowed`,405),{status:405});let l=await a(t,r),u=s.validateQuery(c);if(!u.isValid)return n.NextResponse.json(e.i(`Query validation failed: ${u.errors.join(`, `)}`,400),{status:400});let d=c.measures?.[0]||c.dimensions?.[0];if(!d)return n.NextResponse.json(e.i(`No measures or dimensions specified`,400),{status:400});let f=d.split(`.`)[0],p=await s.generateSQL(f,c,l),m=e.o(c,p);return n.NextResponse.json(m,{headers:o?i(t,o):{}})}catch(t){return process.env.NODE_ENV!==`test`&&console.error(`Next.js SQL handler error:`,t),n.NextResponse.json(e.i(t instanceof Error?t.message:`SQL generation failed`,500),{status:500})}}}function l(t){let{extractSecurityContext:a,cors:o}=t,s=r(t);return async function(t,r){try{let c;if(t.method===`POST`){let e=await t.json();c=e.query||e}else if(t.method===`GET`){let e=t.nextUrl.searchParams.get(`query`);if(!e)return n.NextResponse.json({error:`Query parameter is required`,valid:!1},{status:400});try{c=JSON.parse(e)}catch{return n.NextResponse.json({error:`Invalid JSON in query parameter`,valid:!1},{status:400})}}else return n.NextResponse.json({error:`Method not allowed`,valid:!1},{status:405});let l=await a(t,r),u=await e.f(c,l,s);return n.NextResponse.json(u,{headers:o?i(t,o):{}})}catch(e){return process.env.NODE_ENV!==`test`&&console.error(`Next.js dry-run handler error:`,e),n.NextResponse.json({error:e instanceof Error?e.message:`Dry-run validation failed`,valid:!1},{status:400})}}}function u(t){let{extractSecurityContext:a,cors:o}=t,s=r(t);return async function(t,r){try{if(t.method!==`POST`)return n.NextResponse.json(e.i(`Method not allowed - use POST`,405),{status:405});let{queries:c}=await t.json();if(!c||!Array.isArray(c))return n.NextResponse.json(e.i(`Request body must contain a "queries" array`,400),{status:400});if(c.length===0)return n.NextResponse.json(e.i(`Queries array cannot be empty`,400),{status:400});let l=await e.u(c,await a(t,r),s,{skipCache:t.headers.get(`x-cache-control`)===`no-cache`});return n.NextResponse.json(l,{headers:o?i(t,o):{}})}catch(t){return process.env.NODE_ENV!==`test`&&console.error(`Next.js batch handler error:`,t),n.NextResponse.json(e.i(t instanceof Error?t.message:`Batch execution failed`,500),{status:500})}}}function d(e){let{extractSecurityContext:t,cors:a}=e,o=r(e);return async function(e,r){try{if(e.method!==`POST`)return n.NextResponse.json({error:`Method not allowed`},{status:405});let s=await e.json(),c=s.query||s,l=s.options||{},u=await t(e,r),d=o.validateQuery(c);if(!d.isValid)return n.NextResponse.json({error:`Query validation failed: ${d.errors.join(`, `)}`},{status:400});let f=await o.explainQuery(c,u,l);return n.NextResponse.json(f,{headers:a?i(e,a):{}})}catch(e){return process.env.NODE_ENV!==`test`&&console.error(`Next.js explain handler error:`,e),n.NextResponse.json({error:e instanceof Error?e.message:`Explain query failed`},{status:500})}}}function f(t){let{cors:a}=t,o=r(t);return async function(t,r){try{if(t.method!==`POST`)return n.NextResponse.json(e.i(`Method not allowed - use POST`,405),{status:405});let r=await e.d(o,await t.json());return n.NextResponse.json(r,{headers:a?i(t,a):{}})}catch(t){return process.env.NODE_ENV!==`test`&&console.error(`Next.js discover handler error:`,t),n.NextResponse.json(e.i(t instanceof Error?t.message:`Discovery failed`,500),{status:500})}}}function p(t){let{cors:a}=t,o=r(t);return async function(t,r){try{if(t.method!==`POST`)return n.NextResponse.json(e.i(`Method not allowed - use POST`,405),{status:405});let r=await t.json();if(!r.naturalLanguage)return n.NextResponse.json(e.i(`naturalLanguage field is required`,400),{status:400});let s=await e.m(o,r);return n.NextResponse.json(s,{headers:a?i(t,a):{}})}catch(t){return process.env.NODE_ENV!==`test`&&console.error(`Next.js suggest handler error:`,t),n.NextResponse.json(e.i(t instanceof Error?t.message:`Query suggestion failed`,500),{status:500})}}}function m(t){let{cors:a}=t,o=r(t);return async function(t,r){try{if(t.method!==`POST`)return n.NextResponse.json(e.i(`Method not allowed - use POST`,405),{status:405});let r=await t.json();if(!r.query)return n.NextResponse.json(e.i(`query field is required`,400),{status:400});let s=await e.h(o,r);return n.NextResponse.json(s,{headers:a?i(t,a):{}})}catch(t){return process.env.NODE_ENV!==`test`&&console.error(`Next.js validate handler error:`,t),n.NextResponse.json(e.i(t instanceof Error?t.message:`Query validation failed`,500),{status:500})}}}function h(t){let{extractSecurityContext:a,cors:o}=t,s=r(t);return async function(t,r){try{if(t.method!==`POST`)return n.NextResponse.json(e.i(`Method not allowed - use POST`,405),{status:405});let c=await t.json();if(!c.query)return n.NextResponse.json(e.i(`query field is required`,400),{status:400});let l=await e.p(s,await a(t,r),c);return n.NextResponse.json(l,{headers:o?i(t,o):{}})}catch(t){return process.env.NODE_ENV!==`test`&&console.error(`Next.js MCP load handler error:`,t),n.NextResponse.json(e.i(t instanceof Error?t.message:`Query execution failed`,500),{status:500})}}}function g(a){let{extractSecurityContext:o,cors:s,mcp:c={enabled:!0}}=a,l=r(a);return async function(r){if(r.method===`DELETE`)return n.NextResponse.json({error:`Session termination not supported`},{status:405});if(r.method===`GET`){let e=new TextEncoder,a=t.u(),o=new ReadableStream({start(n){n.enqueue(e.encode(t.d({jsonrpc:`2.0`,method:`mcp/ready`,params:{protocol:`streamable-http`}},a,15e3)))}}),c=new Headers({"Content-Type":`text/event-stream`,"Cache-Control":`no-cache`,Connection:`keep-alive`});if(s){let e=i(r,s);Object.entries(e).forEach(([e,t])=>c.set(e,t))}return new n.NextResponse(o,{status:200,headers:c})}if(r.method!==`POST`)return n.NextResponse.json(e.i(`Method not allowed - use POST`,405),{status:405});let a=t.p(r.headers.get(`origin`),c.allowedOrigins?{allowedOrigins:c.allowedOrigins}:{});if(!a.valid)return n.NextResponse.json(t.n(null,-32600,a.reason),{status:403});let u=r.headers.get(`accept`);if(!t.f(u))return n.NextResponse.json(t.n(null,-32600,`Accept header must include both application/json and text/event-stream`),{status:400});let d=t.c(Object.fromEntries(r.headers.entries()));if(!d.ok)return n.NextResponse.json({error:`Unsupported MCP protocol version`,supported:d.supported},{status:426});let f;try{f=await r.json()}catch{f=null}let p=t.l(f);if(!p)return n.NextResponse.json(t.n(null,-32600,`Invalid JSON-RPC 2.0 request`),{status:400});let m=t.m(u),h=p.method===`initialize`,g=(e,t=200,a={})=>n.NextResponse.json(e,{status:t,headers:{...s?i(r,s):{},...a}});try{let e=await t.i(p.method,p.params,{semanticLayer:l,extractSecurityContext:e=>o(e),rawRequest:r,rawResponse:null});if(t.s(p))return new n.NextResponse(null,{status:202});let a=h&&e&&typeof e==`object`&&`sessionId`in e?e.sessionId:void 0,c={};a&&(c[t.t]=a);let u=t.r(p.id??null,e);if(m){let e=new TextEncoder,a=t.u(),o=new ReadableStream({start(n){n.enqueue(e.encode(`id: ${a}\n\n`)),n.enqueue(e.encode(t.d(u,a))),n.close()}}),l=new Headers({"Content-Type":`text/event-stream`,"Cache-Control":`no-cache`,Connection:`keep-alive`,...c});if(s){let e=i(r,s);Object.entries(e).forEach(([e,t])=>l.set(e,t))}return new n.NextResponse(o,{status:200,headers:l})}return g(u,200,c)}catch(e){if(t.s(p))return process.env.NODE_ENV!==`test`&&console.error(`Next.js MCP notification processing error:`,e),new n.NextResponse(null,{status:202});process.env.NODE_ENV!==`test`&&console.error(`Next.js MCP RPC handler error:`,e);let a=e?.code??-32603,o=e?.data,c=e.message||`MCP request failed`,l=t.n(p.id??null,a,c,o);if(m){let e=new TextEncoder,a=t.u(),o=new ReadableStream({start(n){n.enqueue(e.encode(`id: ${a}\n\n`)),n.enqueue(e.encode(t.d(l,a))),n.close()}}),c=new Headers({"Content-Type":`text/event-stream`,"Cache-Control":`no-cache`,Connection:`keep-alive`});if(s){let e=i(r,s);Object.entries(e).forEach(([e,t])=>c.set(e,t))}return new n.NextResponse(o,{status:200,headers:c})}return g(l,200)}}}function _(e){let{extractSecurityContext:t,cors:a,agent:o}=e;if(!o)throw Error(`agent config is required for createAgentChatHandler`);let s=r(e);return async function(e,r){try{if(e.method!==`POST`)return n.NextResponse.json({error:`Method not allowed - use POST`},{status:405});let{handleAgentChat:c}=await Promise.resolve().then(()=>require(`../handler-dHHEEbG9.cjs`)),{message:l,sessionId:u,history:d}=await e.json();if(!l||typeof l!=`string`)return n.NextResponse.json({error:`message is required and must be a string`},{status:400});let f=(o.apiKey||``).trim();if(o.allowClientApiKey){let t=e.headers.get(`x-agent-api-key`);t&&(f=t.trim())}if(!f)return n.NextResponse.json({error:`No API key configured. Set agent.apiKey in server config or send X-Agent-Api-Key header.`},{status:401});let p=o.allowClientApiKey&&e.headers.get(`x-agent-provider`)||void 0,m=o.allowClientApiKey&&e.headers.get(`x-agent-model`)||void 0,h=o.allowClientApiKey&&e.headers.get(`x-agent-provider-endpoint`)||void 0,g=await t(e,r),_=o.buildSystemContext?.(g),v=new TextEncoder,y=new ReadableStream({async start(e){try{let t=c({message:l,sessionId:u,history:d,semanticLayer:s,securityContext:g,agentConfig:o,apiKey:f,systemContext:_,providerOverride:p,modelOverride:m,baseURLOverride:h});for await(let n of t){let t=`data: ${JSON.stringify(n)}\n\n`;e.enqueue(v.encode(t))}}catch(t){let n={type:`error`,data:{message:t instanceof Error?t.message:`Stream failed`}};e.enqueue(v.encode(`data: ${JSON.stringify(n)}\n\n`))}finally{e.close()}}}),b=new Headers({"Content-Type":`text/event-stream`,"Cache-Control":`no-cache`,Connection:`keep-alive`});if(a){let t=i(e,a);Object.entries(t).forEach(([e,t])=>b.set(e,t))}return new Response(y,{status:200,headers:b})}catch(e){return process.env.NODE_ENV!==`test`&&console.error(`Next.js agent chat handler error:`,e),n.NextResponse.json({error:e instanceof Error?e.message:`Agent chat failed`},{status:500})}}}function v(e){let{mcp:t={enabled:!0}}=e,n={load:o(e),meta:s(e),sql:c(e),dryRun:l(e),batch:u(e),explain:d(e)};return t.enabled!==!1&&(n.mcpRpc=g(e)),e.agent&&(n.agentChat=_(e)),n}exports.createAgentChatHandler=_,exports.createBatchHandler=u,exports.createCubeHandlers=v,exports.createDiscoverHandler=f,exports.createDryRunHandler=l,exports.createExplainHandler=d,exports.createLoadHandler=o,exports.createMcpLoadHandler=h,exports.createMcpRpcHandler=g,exports.createMetaHandler=s,exports.createOptionsHandler=a,exports.createSqlHandler=c,exports.createSuggestHandler=p,exports.createValidateHandler=m;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`../utils-tNZ6Cvzw.cjs`),t=require(`../compiler-CA6iopu7.cjs`),n=require(`../mcp-transport-MOoCDu2M.cjs`);let r=require(`next/server`);function i(e){let{cubes:n,drizzle:r,schema:i,engineType:a,cache:o,rlsSetup:s}=e;if(!n||n.length===0)throw Error(`At least one cube must be provided in the cubes array`);let c=new t.t({drizzle:r,schema:i,engineType:a,cache:o,rlsSetup:s});return n.forEach(e=>{c.registerCube(e)}),c}function a(e,t){let n=e.headers.get(`origin`),r={};return t.origin&&(typeof t.origin==`string`?r[`Access-Control-Allow-Origin`]=t.origin:Array.isArray(t.origin)?n&&t.origin.includes(n)&&(r[`Access-Control-Allow-Origin`]=n):typeof t.origin==`function`&&n&&t.origin(n)&&(r[`Access-Control-Allow-Origin`]=n)),t.methods&&(r[`Access-Control-Allow-Methods`]=t.methods.join(`, `)),t.allowedHeaders&&(r[`Access-Control-Allow-Headers`]=t.allowedHeaders.join(`, `)),t.credentials&&(r[`Access-Control-Allow-Credentials`]=`true`),r}function o(e){return async function(t){let n=a(t,e);return new Response(null,{status:200,headers:n})}}function s(t){let{extractSecurityContext:n,cors:o}=t,s=i(t);return async function(t,i){try{let c;if(t.method===`POST`){let e=await t.json();c=e.query||e}else if(t.method===`GET`){let n=t.nextUrl.searchParams.get(`query`);if(!n)return r.NextResponse.json(e.i(`Query parameter is required`,400),{status:400});try{c=JSON.parse(n)}catch{return r.NextResponse.json(e.i(`Invalid JSON in query parameter`,400),{status:400})}}else return r.NextResponse.json(e.i(`Method not allowed`,405),{status:405});let l=await n(t,i),u=s.validateQuery(c);if(!u.isValid)return r.NextResponse.json(e.i(`Query validation failed: ${u.errors.join(`, `)}`,400),{status:400});let d=t.headers.get(`x-cache-control`)===`no-cache`,f=await s.executeMultiCubeQuery(c,l,{skipCache:d}),p=e.r(c,f,s);return r.NextResponse.json(p,{headers:o?a(t,o):{}})}catch(t){return process.env.NODE_ENV!==`test`&&console.error(`Next.js load handler error:`,t),r.NextResponse.json(e.i(t instanceof Error?t.message:`Query execution failed`,500),{status:500})}}}function c(t){let{cors:n}=t,o=i(t);return async function(t,i){try{let i=e.a(o.getMetadata());return r.NextResponse.json(i,{headers:n?a(t,n):{}})}catch(t){return process.env.NODE_ENV!==`test`&&console.error(`Next.js meta handler error:`,t),r.NextResponse.json(e.i(t instanceof Error?t.message:`Failed to fetch metadata`,500),{status:500})}}}function l(t){let{extractSecurityContext:n,cors:o}=t,s=i(t);return async function(t,i){try{let c;if(t.method===`POST`){let e=await t.json();c=e.query||e}else if(t.method===`GET`){let n=t.nextUrl.searchParams.get(`query`);if(!n)return r.NextResponse.json(e.i(`Query parameter is required`,400),{status:400});try{c=JSON.parse(n)}catch{return r.NextResponse.json(e.i(`Invalid JSON in query parameter`,400),{status:400})}}else return r.NextResponse.json(e.i(`Method not allowed`,405),{status:405});let l=await n(t,i),u=s.validateQuery(c);if(!u.isValid)return r.NextResponse.json(e.i(`Query validation failed: ${u.errors.join(`, `)}`,400),{status:400});let d=c.measures?.[0]||c.dimensions?.[0];if(!d)return r.NextResponse.json(e.i(`No measures or dimensions specified`,400),{status:400});let f=d.split(`.`)[0],p=await s.generateSQL(f,c,l),m=e.o(c,p);return r.NextResponse.json(m,{headers:o?a(t,o):{}})}catch(t){return process.env.NODE_ENV!==`test`&&console.error(`Next.js SQL handler error:`,t),r.NextResponse.json(e.i(t instanceof Error?t.message:`SQL generation failed`,500),{status:500})}}}function u(t){let{extractSecurityContext:n,cors:o}=t,s=i(t);return async function(t,i){try{let c;if(t.method===`POST`){let e=await t.json();c=e.query||e}else if(t.method===`GET`){let e=t.nextUrl.searchParams.get(`query`);if(!e)return r.NextResponse.json({error:`Query parameter is required`,valid:!1},{status:400});try{c=JSON.parse(e)}catch{return r.NextResponse.json({error:`Invalid JSON in query parameter`,valid:!1},{status:400})}}else return r.NextResponse.json({error:`Method not allowed`,valid:!1},{status:405});let l=await n(t,i),u=await e.f(c,l,s);return r.NextResponse.json(u,{headers:o?a(t,o):{}})}catch(e){return process.env.NODE_ENV!==`test`&&console.error(`Next.js dry-run handler error:`,e),r.NextResponse.json({error:e instanceof Error?e.message:`Dry-run validation failed`,valid:!1},{status:400})}}}function d(t){let{extractSecurityContext:n,cors:o}=t,s=i(t);return async function(t,i){try{if(t.method!==`POST`)return r.NextResponse.json(e.i(`Method not allowed - use POST`,405),{status:405});let{queries:c}=await t.json();if(!c||!Array.isArray(c))return r.NextResponse.json(e.i(`Request body must contain a "queries" array`,400),{status:400});if(c.length===0)return r.NextResponse.json(e.i(`Queries array cannot be empty`,400),{status:400});let l=await e.u(c,await n(t,i),s,{skipCache:t.headers.get(`x-cache-control`)===`no-cache`});return r.NextResponse.json(l,{headers:o?a(t,o):{}})}catch(t){return process.env.NODE_ENV!==`test`&&console.error(`Next.js batch handler error:`,t),r.NextResponse.json(e.i(t instanceof Error?t.message:`Batch execution failed`,500),{status:500})}}}function f(e){let{extractSecurityContext:t,cors:n}=e,o=i(e);return async function(e,i){try{if(e.method!==`POST`)return r.NextResponse.json({error:`Method not allowed`},{status:405});let s=await e.json(),c=s.query||s,l=s.options||{},u=await t(e,i),d=o.validateQuery(c);if(!d.isValid)return r.NextResponse.json({error:`Query validation failed: ${d.errors.join(`, `)}`},{status:400});let f=await o.explainQuery(c,u,l);return r.NextResponse.json(f,{headers:n?a(e,n):{}})}catch(e){return process.env.NODE_ENV!==`test`&&console.error(`Next.js explain handler error:`,e),r.NextResponse.json({error:e instanceof Error?e.message:`Explain query failed`},{status:500})}}}function p(t){let{cors:n}=t,o=i(t);return async function(t,i){try{if(t.method!==`POST`)return r.NextResponse.json(e.i(`Method not allowed - use POST`,405),{status:405});let i=await e.d(o,await t.json());return r.NextResponse.json(i,{headers:n?a(t,n):{}})}catch(t){return process.env.NODE_ENV!==`test`&&console.error(`Next.js discover handler error:`,t),r.NextResponse.json(e.i(t instanceof Error?t.message:`Discovery failed`,500),{status:500})}}}function m(t){let{cors:n}=t,o=i(t);return async function(t,i){try{if(t.method!==`POST`)return r.NextResponse.json(e.i(`Method not allowed - use POST`,405),{status:405});let i=await t.json();if(!i.naturalLanguage)return r.NextResponse.json(e.i(`naturalLanguage field is required`,400),{status:400});let s=await e.m(o,i);return r.NextResponse.json(s,{headers:n?a(t,n):{}})}catch(t){return process.env.NODE_ENV!==`test`&&console.error(`Next.js suggest handler error:`,t),r.NextResponse.json(e.i(t instanceof Error?t.message:`Query suggestion failed`,500),{status:500})}}}function h(t){let{cors:n}=t,o=i(t);return async function(t,i){try{if(t.method!==`POST`)return r.NextResponse.json(e.i(`Method not allowed - use POST`,405),{status:405});let i=await t.json();if(!i.query)return r.NextResponse.json(e.i(`query field is required`,400),{status:400});let s=await e.h(o,i);return r.NextResponse.json(s,{headers:n?a(t,n):{}})}catch(t){return process.env.NODE_ENV!==`test`&&console.error(`Next.js validate handler error:`,t),r.NextResponse.json(e.i(t instanceof Error?t.message:`Query validation failed`,500),{status:500})}}}function g(t){let{extractSecurityContext:n,cors:o}=t,s=i(t);return async function(t,i){try{if(t.method!==`POST`)return r.NextResponse.json(e.i(`Method not allowed - use POST`,405),{status:405});let c=await t.json();if(!c.query)return r.NextResponse.json(e.i(`query field is required`,400),{status:400});let l=await e.p(s,await n(t,i),c);return r.NextResponse.json(l,{headers:o?a(t,o):{}})}catch(t){return process.env.NODE_ENV!==`test`&&console.error(`Next.js MCP load handler error:`,t),r.NextResponse.json(e.i(t instanceof Error?t.message:`Query execution failed`,500),{status:500})}}}function _(t){let{extractSecurityContext:o,cors:s,mcp:c={enabled:!0}}=t,l=i(t);return async function(t){if(t.method===`DELETE`)return r.NextResponse.json({error:`Session termination not supported`},{status:405});if(t.method===`GET`){let e=new TextEncoder,i=n.d(),o=new ReadableStream({start(t){t.enqueue(e.encode(n.f({jsonrpc:`2.0`,method:`mcp/ready`,params:{protocol:`streamable-http`}},i,15e3)))}}),c=new Headers({"Content-Type":`text/event-stream`,"Cache-Control":`no-cache`,Connection:`keep-alive`});if(s){let e=a(t,s);Object.entries(e).forEach(([e,t])=>c.set(e,t))}return new r.NextResponse(o,{status:200,headers:c})}if(t.method!==`POST`)return r.NextResponse.json(e.i(`Method not allowed - use POST`,405),{status:405});let i=n.m(t.headers.get(`origin`),c.allowedOrigins?{allowedOrigins:c.allowedOrigins}:{});if(!i.valid)return r.NextResponse.json(n.n(null,-32600,i.reason),{status:403});let u=t.headers.get(`accept`);if(!n.p(u))return r.NextResponse.json(n.n(null,-32600,`Accept header must include both application/json and text/event-stream`),{status:400});let d=n.l(Object.fromEntries(t.headers.entries()));if(!d.ok)return r.NextResponse.json({error:`Unsupported MCP protocol version`,supported:d.supported},{status:426});let f;try{f=await t.json()}catch{f=null}let p=n.u(f);if(!p)return r.NextResponse.json(n.n(null,-32600,`Invalid JSON-RPC 2.0 request`),{status:400});let m=n.h(u),h=p.method===`initialize`,g=(e,n=200,i={})=>r.NextResponse.json(e,{status:n,headers:{...s?a(t,s):{},...i}});try{let e=await n.a(p.method,p.params,{semanticLayer:l,extractSecurityContext:e=>o(e),rawRequest:t,rawResponse:null});if(n.c(p))return new r.NextResponse(null,{status:202});let i=h&&e&&typeof e==`object`&&`sessionId`in e?e.sessionId:void 0,c={};i&&(c[n.t]=i);let u=n.r(p.id??null,e);if(m){let e=new TextEncoder,i=n.d(),o=new ReadableStream({start(t){t.enqueue(e.encode(`id: ${i}\n\n`)),t.enqueue(e.encode(n.f(u,i))),t.close()}}),l=new Headers({"Content-Type":`text/event-stream`,"Cache-Control":`no-cache`,Connection:`keep-alive`,...c});if(s){let e=a(t,s);Object.entries(e).forEach(([e,t])=>l.set(e,t))}return new r.NextResponse(o,{status:200,headers:l})}return g(u,200,c)}catch(e){if(n.c(p))return process.env.NODE_ENV!==`test`&&console.error(`Next.js MCP notification processing error:`,e),new r.NextResponse(null,{status:202});process.env.NODE_ENV!==`test`&&console.error(`Next.js MCP RPC handler error:`,e);let i=e?.code??-32603,o=e?.data,c=e.message||`MCP request failed`,l=n.n(p.id??null,i,c,o);if(m){let e=new TextEncoder,i=n.d(),o=new ReadableStream({start(t){t.enqueue(e.encode(`id: ${i}\n\n`)),t.enqueue(e.encode(n.f(l,i))),t.close()}}),c=new Headers({"Content-Type":`text/event-stream`,"Cache-Control":`no-cache`,Connection:`keep-alive`});if(s){let e=a(t,s);Object.entries(e).forEach(([e,t])=>c.set(e,t))}return new r.NextResponse(o,{status:200,headers:c})}return g(l,200)}}}function v(e){let{extractSecurityContext:t,cors:n,agent:o}=e;if(!o)throw Error(`agent config is required for createAgentChatHandler`);let s=i(e);return async function(e,i){try{if(e.method!==`POST`)return r.NextResponse.json({error:`Method not allowed - use POST`},{status:405});let{handleAgentChat:c}=await Promise.resolve().then(()=>require(`../handler-BO2nq6IS.cjs`)),{message:l,sessionId:u,history:d}=await e.json();if(!l||typeof l!=`string`)return r.NextResponse.json({error:`message is required and must be a string`},{status:400});let f=(o.apiKey||``).trim();if(o.allowClientApiKey){let t=e.headers.get(`x-agent-api-key`);t&&(f=t.trim())}if(!f)return r.NextResponse.json({error:`No API key configured. Set agent.apiKey in server config or send X-Agent-Api-Key header.`},{status:401});let p=o.allowClientApiKey&&e.headers.get(`x-agent-provider`)||void 0,m=o.allowClientApiKey&&e.headers.get(`x-agent-model`)||void 0,h=o.allowClientApiKey&&e.headers.get(`x-agent-provider-endpoint`)||void 0,g=await t(e,i),_=o.buildSystemContext?.(g),v=new TextEncoder,y=new ReadableStream({async start(e){try{let t=c({message:l,sessionId:u,history:d,semanticLayer:s,securityContext:g,agentConfig:o,apiKey:f,systemContext:_,providerOverride:p,modelOverride:m,baseURLOverride:h});for await(let n of t){let t=`data: ${JSON.stringify(n)}\n\n`;e.enqueue(v.encode(t))}}catch(t){let n={type:`error`,data:{message:t instanceof Error?t.message:`Stream failed`}};e.enqueue(v.encode(`data: ${JSON.stringify(n)}\n\n`))}finally{e.close()}}}),b=new Headers({"Content-Type":`text/event-stream`,"Cache-Control":`no-cache`,Connection:`keep-alive`});if(n){let t=a(e,n);Object.entries(t).forEach(([e,t])=>b.set(e,t))}return new Response(y,{status:200,headers:b})}catch(e){return process.env.NODE_ENV!==`test`&&console.error(`Next.js agent chat handler error:`,e),r.NextResponse.json({error:e instanceof Error?e.message:`Agent chat failed`},{status:500})}}}function y(e){let{mcp:t={enabled:!0}}=e,n={load:s(e),meta:c(e),sql:l(e),dryRun:u(e),batch:d(e),explain:f(e)};return t.enabled!==!1&&(n.mcpRpc=_(e)),e.agent&&(n.agentChat=v(e)),n}exports.createAgentChatHandler=v,exports.createBatchHandler=d,exports.createCubeHandlers=y,exports.createDiscoverHandler=p,exports.createDryRunHandler=u,exports.createExplainHandler=f,exports.createLoadHandler=s,exports.createMcpLoadHandler=g,exports.createMcpRpcHandler=_,exports.createMetaHandler=c,exports.createOptionsHandler=o,exports.createSqlHandler=l,exports.createSuggestHandler=m,exports.createValidateHandler=h;