drizzle-cube 0.11.1 → 0.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (264) hide show
  1. package/dist/adapters/ActivityGridChart.config-D2pyoHSf.cjs +1 -0
  2. package/dist/adapters/ActivityGridChart.config-DW-AgFxA.js +2 -0
  3. package/dist/adapters/AreaChart.config-BP3BU4W2.js +2 -0
  4. package/dist/adapters/AreaChart.config-CRyAhIvc.cjs +1 -0
  5. package/dist/adapters/BarChart.config-A6F0Q9OX.cjs +1 -0
  6. package/dist/adapters/BarChart.config-BInCLrWt.js +2 -0
  7. package/dist/adapters/BoxPlotChart.config-DUTvglWv.cjs +1 -0
  8. package/dist/adapters/BoxPlotChart.config-DXvJdMSr.js +2 -0
  9. package/dist/adapters/BubbleChart.config-B66v-bb5.cjs +1 -0
  10. package/dist/adapters/BubbleChart.config-nIFyWuBW.js +2 -0
  11. package/dist/adapters/CandlestickChart.config-C05c1RMZ.cjs +1 -0
  12. package/dist/adapters/CandlestickChart.config-D4axcOge.js +2 -0
  13. package/dist/adapters/DataTable.config-BOIQnyoS.js +2 -0
  14. package/dist/adapters/DataTable.config-CeFswxJI.cjs +1 -0
  15. package/dist/adapters/DotStripChart.config-B4DU-F1R.cjs +1 -0
  16. package/dist/adapters/DotStripChart.config-BsWG7BRS.js +2 -0
  17. package/dist/adapters/FunnelChart.config-BuAkxiFx.js +2 -0
  18. package/dist/adapters/FunnelChart.config-CEVsDKfR.cjs +1 -0
  19. package/dist/adapters/GaugeChart.config-JhbBQ77o.cjs +1 -0
  20. package/dist/adapters/GaugeChart.config-g3iF-G9g.js +2 -0
  21. package/dist/adapters/HeatMapChart.config-BzSlU0B1.cjs +1 -0
  22. package/dist/adapters/HeatMapChart.config-C6D638Sr.js +2 -0
  23. package/dist/adapters/KpiDelta.config-B5UKJ4n-.js +2 -0
  24. package/dist/adapters/KpiDelta.config-C3E_pfdr.cjs +1 -0
  25. package/dist/adapters/KpiNumber.config-B8mACkJy.js +2 -0
  26. package/dist/adapters/KpiNumber.config-BgNPzbNS.cjs +1 -0
  27. package/dist/adapters/KpiText.config-BsXkIGNW.js +2 -0
  28. package/dist/adapters/KpiText.config-vp2VuogK.cjs +1 -0
  29. package/dist/adapters/LineChart.config-B3NcBB9q.cjs +1 -0
  30. package/dist/adapters/LineChart.config-D_CAQVHv.js +2 -0
  31. package/dist/adapters/MarkdownChart.config-D_oVj4zs.js +2 -0
  32. package/dist/adapters/MarkdownChart.config-zhKb-tLR.cjs +1 -0
  33. package/dist/adapters/MeasureProfileChart.config-B-wBjGdA.cjs +1 -0
  34. package/dist/adapters/MeasureProfileChart.config-bRBJlzNa.js +2 -0
  35. package/dist/adapters/PieChart.config-CR9SlQ2E.cjs +1 -0
  36. package/dist/adapters/PieChart.config-DeGWqMNO.js +2 -0
  37. package/dist/adapters/ProportionBarChart.config-Bz0ssM8J.cjs +1 -0
  38. package/dist/adapters/ProportionBarChart.config-CXhHPnpM.js +2 -0
  39. package/dist/adapters/RadarChart.config-ColTmOOV.js +2 -0
  40. package/dist/adapters/RadarChart.config-QV34AUcy.cjs +1 -0
  41. package/dist/adapters/RadialBarChart.config-BU4kj-pP.js +2 -0
  42. package/dist/adapters/RadialBarChart.config-CxBOhmiO.cjs +1 -0
  43. package/dist/adapters/RecordsTable.config-B51ugEpH.js +2 -0
  44. package/dist/adapters/RecordsTable.config-LxS0O10c.cjs +1 -0
  45. package/dist/adapters/RetentionCombinedChart.config-DjunHInA.cjs +1 -0
  46. package/dist/adapters/RetentionCombinedChart.config-Xna3wl8a.js +2 -0
  47. package/dist/adapters/RetentionHeatmap.config-DJBHUdn1.cjs +1 -0
  48. package/dist/adapters/RetentionHeatmap.config-DMAmGV7x.js +2 -0
  49. package/dist/adapters/SankeyChart.config-CKuUbXMt.js +2 -0
  50. package/dist/adapters/SankeyChart.config-JrhBtNH4.cjs +1 -0
  51. package/dist/adapters/ScatterChart.config-BARL2-vh.cjs +1 -0
  52. package/dist/adapters/ScatterChart.config-Ch4yWKYL.js +2 -0
  53. package/dist/adapters/SunburstChart.config-CbvgqJ8d.cjs +1 -0
  54. package/dist/adapters/SunburstChart.config-Q89VT8vO.js +2 -0
  55. package/dist/adapters/TreeMapChart.config-Bee0ahde.js +2 -0
  56. package/dist/adapters/TreeMapChart.config-Dz1mOrnC.cjs +1 -0
  57. package/dist/adapters/WaterfallChart.config-BCJ4ZD6x.cjs +1 -0
  58. package/dist/adapters/WaterfallChart.config-Bz3tEEKN.js +2 -0
  59. package/dist/adapters/{compiler-BhityGUO.js → compiler-Cfy_zqyJ.js} +1 -1
  60. package/dist/adapters/{compiler-B-yljK02.cjs → compiler-ia3Lmjpw.cjs} +1 -1
  61. package/dist/adapters/core/index.cjs +1 -1
  62. package/dist/adapters/core/index.js +1 -1
  63. package/dist/adapters/{core-CQOrzBNh.cjs → core-ClA09uBX.cjs} +1 -1
  64. package/dist/adapters/{core-xZE0miIu.js → core-D4mTEaeK.js} +2 -2
  65. package/dist/adapters/express/index.cjs +1 -1
  66. package/dist/adapters/express/index.js +5 -5
  67. package/dist/adapters/fastify/index.cjs +1 -1
  68. package/dist/adapters/fastify/index.js +5 -5
  69. package/dist/adapters/{handler-ByeQ0-1r.js → handler-Bnp5LEMQ.js} +34 -33
  70. package/dist/adapters/{handler-DSNmfv1R.cjs → handler-TCnGdCyr.cjs} +3 -3
  71. package/dist/adapters/hono/index.cjs +1 -1
  72. package/dist/adapters/hono/index.js +4 -4
  73. package/dist/adapters/mcp-app-html-D37s8SEa.js +5 -0
  74. package/dist/adapters/mcp-app-html-MZNCuL3w.cjs +1 -0
  75. package/dist/adapters/mcp-app-html.cjs +1 -1
  76. package/dist/adapters/mcp-app-html.js +1 -1
  77. package/dist/adapters/mcp-tools.cjs +1 -1
  78. package/dist/adapters/mcp-tools.js +3 -3
  79. package/dist/adapters/{mcp-transport-DnLP5FPL.cjs → mcp-transport-6CWmHVtJ.cjs} +2 -2
  80. package/dist/adapters/{mcp-transport-Cy6n4uj1.js → mcp-transport-cd2BlW-Z.js} +28 -4
  81. package/dist/adapters/nextjs/index.cjs +1 -1
  82. package/dist/adapters/nextjs/index.js +5 -5
  83. package/dist/adapters/{openai-D3Nt6Bj7.js → openai-CIIYPf0X.js} +1 -1
  84. package/dist/adapters/{openai-z1ai-G4Q.cjs → openai-Cl5zHeHg.cjs} +1 -1
  85. package/dist/adapters/{openai-C4HrjyJj.js → openai-DioFEjMP.js} +1 -1
  86. package/dist/adapters/{openai-BQl0yJCS.cjs → openai-yJ8nX3dq.cjs} +1 -1
  87. package/dist/adapters/{utils-BaxFceDq.js → utils-B3_hJWlf.js} +9 -0
  88. package/dist/adapters/{utils-a2p2B6x8.cjs → utils-CeveyqY3.cjs} +1 -1
  89. package/dist/adapters/utils.cjs +1 -1
  90. package/dist/adapters/utils.js +1 -1
  91. package/dist/cjs/client/charts/chartConfigs.d.ts +17 -0
  92. package/dist/cjs/client/components/AnalysisBuilder/ColumnFormatsEditor.d.ts +9 -2
  93. package/dist/cjs/client/components/charts/MarkdownChart.helpers.d.ts +5 -0
  94. package/dist/cjs/client/components/markdownOverrides.d.ts +2 -0
  95. package/dist/cjs/client/types.d.ts +15 -1
  96. package/dist/cjs/client/utils/recordsTableUtils.d.ts +6 -3
  97. package/dist/cjs/server/ai/chart-schema.d.ts +25 -2
  98. package/dist/client/charts/chartConfigs.d.ts +17 -0
  99. package/dist/client/charts.js +12 -12
  100. package/dist/client/chunks/{DashboardEditModal-DifODH4h.js → DashboardEditModal-BFC08Qog.js} +315 -198
  101. package/dist/client/chunks/DashboardEditModal-BFC08Qog.js.map +1 -0
  102. package/dist/client/chunks/{DotStripChart-B9IVCFPO.js → DotStripChart-BwitDmpR.js} +3 -3
  103. package/dist/client/chunks/{DotStripChart-B9IVCFPO.js.map → DotStripChart-BwitDmpR.js.map} +1 -1
  104. package/dist/client/chunks/{ProportionBarChart-DieF9AzP.js → ProportionBarChart-CpUHH9UH.js} +3 -3
  105. package/dist/client/chunks/{ProportionBarChart-DieF9AzP.js.map → ProportionBarChart-CpUHH9UH.js.map} +1 -1
  106. package/dist/client/chunks/{RecordsTable-Mo3ai5_M.js → RecordsTable-BoQZiVVM.js} +85 -63
  107. package/dist/client/chunks/RecordsTable-BoQZiVVM.js.map +1 -0
  108. package/dist/client/chunks/{RetentionCombinedChart-Bie4ADyA.js → RetentionCombinedChart-Dd07baUu.js} +3 -3
  109. package/dist/client/chunks/{RetentionCombinedChart-Bie4ADyA.js.map → RetentionCombinedChart-Dd07baUu.js.map} +1 -1
  110. package/dist/client/chunks/{RetentionHeatmap-qstIAx5B.js → RetentionHeatmap-DlD2XmJe.js} +2 -2
  111. package/dist/client/chunks/{RetentionHeatmap-qstIAx5B.js.map → RetentionHeatmap-DlD2XmJe.js.map} +1 -1
  112. package/dist/client/chunks/{analysis-builder-D78aDJoL.js → analysis-builder-DVWOTd7e.js} +9 -9
  113. package/dist/client/chunks/{analysis-builder-D78aDJoL.js.map → analysis-builder-DVWOTd7e.js.map} +1 -1
  114. package/dist/client/chunks/{analysis-builder-shared-CsIs4-Xf.js → analysis-builder-shared-CXDGMDB-.js} +9 -9
  115. package/dist/client/chunks/{analysis-builder-shared-CsIs4-Xf.js.map → analysis-builder-shared-CXDGMDB-.js.map} +1 -1
  116. package/dist/client/chunks/{chart-activity-grid-Ly_-2B-f.js → chart-activity-grid-BHaBagS8.js} +12 -3
  117. package/dist/client/chunks/chart-activity-grid-BHaBagS8.js.map +1 -0
  118. package/dist/client/chunks/{chart-area-D3l-71Wy.js → chart-area-9lHCX2OO.js} +2 -2
  119. package/dist/client/chunks/{chart-area-D3l-71Wy.js.map → chart-area-9lHCX2OO.js.map} +1 -1
  120. package/dist/client/chunks/{chart-bar-BaTyQOqs.js → chart-bar-Dk1CH41V.js} +3 -3
  121. package/dist/client/chunks/{chart-bar-BaTyQOqs.js.map → chart-bar-Dk1CH41V.js.map} +1 -1
  122. package/dist/client/chunks/{chart-box-plot-Cem6PHjz.js → chart-box-plot-CMkzjTFz.js} +2 -2
  123. package/dist/client/chunks/{chart-box-plot-Cem6PHjz.js.map → chart-box-plot-CMkzjTFz.js.map} +1 -1
  124. package/dist/client/chunks/{chart-bubble-DFlfqCDG.js → chart-bubble-q8f7wXlp.js} +2 -2
  125. package/dist/client/chunks/{chart-bubble-DFlfqCDG.js.map → chart-bubble-q8f7wXlp.js.map} +1 -1
  126. package/dist/client/chunks/{chart-candlestick-BkAFBXtZ.js → chart-candlestick-DTX3wu-1.js} +2 -2
  127. package/dist/client/chunks/{chart-candlestick-BkAFBXtZ.js.map → chart-candlestick-DTX3wu-1.js.map} +1 -1
  128. package/dist/client/chunks/{chart-data-table-Cxd0cdAl.js → chart-data-table-BYQzVqtc.js} +4 -3
  129. package/dist/client/chunks/chart-data-table-BYQzVqtc.js.map +1 -0
  130. package/dist/client/chunks/{chart-funnel-71Kn4eeF.js → chart-funnel-CxW1voDU.js} +2 -2
  131. package/dist/client/chunks/{chart-funnel-71Kn4eeF.js.map → chart-funnel-CxW1voDU.js.map} +1 -1
  132. package/dist/client/chunks/{chart-gauge-BddS_9oS.js → chart-gauge-0M-Jufnw.js} +3 -3
  133. package/dist/client/chunks/{chart-gauge-BddS_9oS.js.map → chart-gauge-0M-Jufnw.js.map} +1 -1
  134. package/dist/client/chunks/{chart-heat-map-BQIsrn8m.js → chart-heat-map-BZvPdZAu.js} +3 -3
  135. package/dist/client/chunks/{chart-heat-map-BQIsrn8m.js.map → chart-heat-map-BZvPdZAu.js.map} +1 -1
  136. package/dist/client/chunks/{chart-kpi-delta-DndbqdZT.js → chart-kpi-delta-De-F9NUk.js} +3 -3
  137. package/dist/client/chunks/{chart-kpi-delta-DndbqdZT.js.map → chart-kpi-delta-De-F9NUk.js.map} +1 -1
  138. package/dist/client/chunks/{chart-kpi-number-DAbfoHMt.js → chart-kpi-number-MSdv2_ha.js} +5 -5
  139. package/dist/client/chunks/{chart-kpi-number-DAbfoHMt.js.map → chart-kpi-number-MSdv2_ha.js.map} +1 -1
  140. package/dist/client/chunks/{chart-kpi-text-D8oQgpxL.js → chart-kpi-text-Zt9JlUi2.js} +3 -3
  141. package/dist/client/chunks/{chart-kpi-text-D8oQgpxL.js.map → chart-kpi-text-Zt9JlUi2.js.map} +1 -1
  142. package/dist/client/chunks/{chart-line-BNqjUowg.js → chart-line-VFRY7_Zn.js} +3 -3
  143. package/dist/client/chunks/{chart-line-BNqjUowg.js.map → chart-line-VFRY7_Zn.js.map} +1 -1
  144. package/dist/client/chunks/{chart-markdown-DtgpU3xd.js → chart-markdown-RumOX5HX.js} +3 -2
  145. package/dist/client/chunks/{chart-markdown-DtgpU3xd.js.map → chart-markdown-RumOX5HX.js.map} +1 -1
  146. package/dist/client/chunks/{chart-measure-profile-D5nZMWlI.js → chart-measure-profile-5FFyPuV_.js} +3 -3
  147. package/dist/client/chunks/{chart-measure-profile-D5nZMWlI.js.map → chart-measure-profile-5FFyPuV_.js.map} +1 -1
  148. package/dist/client/chunks/{chart-pie-D8r9HCZ4.js → chart-pie-Bf5SbxZt.js} +3 -3
  149. package/dist/client/chunks/{chart-pie-D8r9HCZ4.js.map → chart-pie-Bf5SbxZt.js.map} +1 -1
  150. package/dist/client/chunks/{chart-radar-R4PuCIWp.js → chart-radar-D9NgUbth.js} +3 -3
  151. package/dist/client/chunks/{chart-radar-R4PuCIWp.js.map → chart-radar-D9NgUbth.js.map} +1 -1
  152. package/dist/client/chunks/{chart-radial-bar-hmrSFa6O.js → chart-radial-bar-BlFXSc1c.js} +3 -3
  153. package/dist/client/chunks/{chart-radial-bar-hmrSFa6O.js.map → chart-radial-bar-BlFXSc1c.js.map} +1 -1
  154. package/dist/client/chunks/{chart-sankey-CFXPybny.js → chart-sankey-BkanN_ql.js} +2 -2
  155. package/dist/client/chunks/{chart-sankey-CFXPybny.js.map → chart-sankey-BkanN_ql.js.map} +1 -1
  156. package/dist/client/chunks/{chart-scatter-CH82md0L.js → chart-scatter-DqqWojlQ.js} +3 -3
  157. package/dist/client/chunks/{chart-scatter-CH82md0L.js.map → chart-scatter-DqqWojlQ.js.map} +1 -1
  158. package/dist/client/chunks/{chart-sunburst-CTj95eEC.js → chart-sunburst-BMhXLThV.js} +3 -3
  159. package/dist/client/chunks/{chart-sunburst-CTj95eEC.js.map → chart-sunburst-BMhXLThV.js.map} +1 -1
  160. package/dist/client/chunks/{chart-tree-map-CmysE4bF.js → chart-tree-map-eaHTIJ76.js} +3 -3
  161. package/dist/client/chunks/{chart-tree-map-CmysE4bF.js.map → chart-tree-map-eaHTIJ76.js.map} +1 -1
  162. package/dist/client/chunks/{chart-waterfall-Bv1mPvlB.js → chart-waterfall-4MOpuCrR.js} +3 -3
  163. package/dist/client/chunks/{chart-waterfall-Bv1mPvlB.js.map → chart-waterfall-4MOpuCrR.js.map} +1 -1
  164. package/dist/client/chunks/{charts-core-BdEQgbqN.js → charts-core-CTTLxFYp.js} +2 -2
  165. package/dist/client/chunks/{charts-core-BdEQgbqN.js.map → charts-core-CTTLxFYp.js.map} +1 -1
  166. package/dist/client/chunks/charts-loader-DQ7MgPWB.js +87 -0
  167. package/dist/client/chunks/{charts-loader-DoLQqFXg.js.map → charts-loader-DQ7MgPWB.js.map} +1 -1
  168. package/dist/client/chunks/{en-US-HP6FHuNy.js → en-US-CXODg-om.js} +3 -1
  169. package/dist/client/chunks/{en-US-HP6FHuNy.js.map → en-US-CXODg-om.js.map} +1 -1
  170. package/dist/client/chunks/{nl-NL-DVZXf8U7.js → nl-NL-CpH637df.js} +10 -1
  171. package/dist/client/chunks/nl-NL-CpH637df.js.map +1 -0
  172. package/dist/client/chunks/{schema-visualization-MlRrcJQH.js → schema-visualization-26uy1UwE.js} +3 -3
  173. package/dist/client/chunks/{schema-visualization-MlRrcJQH.js.map → schema-visualization-26uy1UwE.js.map} +1 -1
  174. package/dist/client/chunks/{useDirtyStateTracking-DUyYwuN_.js → useDirtyStateTracking-CnEIH78A.js} +4 -4
  175. package/dist/client/chunks/{useDirtyStateTracking-DUyYwuN_.js.map → useDirtyStateTracking-CnEIH78A.js.map} +1 -1
  176. package/dist/client/chunks/{useExplainAI-BtoS3tb5.js → useExplainAI-SbAIGXOr.js} +4 -4
  177. package/dist/client/chunks/{useExplainAI-BtoS3tb5.js.map → useExplainAI-SbAIGXOr.js.map} +1 -1
  178. package/dist/client/chunks/{vendor-BfBpNmMa.js → vendor-Cn44d7zS.js} +2 -2
  179. package/dist/client/chunks/{vendor-BfBpNmMa.js.map → vendor-Cn44d7zS.js.map} +1 -1
  180. package/dist/client/components/AnalysisBuilder/ColumnFormatsEditor.d.ts +9 -2
  181. package/dist/client/components/charts/MarkdownChart.helpers.d.ts +5 -0
  182. package/dist/client/components/markdownOverrides.d.ts +2 -0
  183. package/dist/client/components.js +1 -1
  184. package/dist/client/hooks.js +3 -3
  185. package/dist/client/icons.js +1 -1
  186. package/dist/client/index.js +44 -38
  187. package/dist/client/index.js.map +1 -1
  188. package/dist/client/providers.js +1 -1
  189. package/dist/client/schema.js +1 -1
  190. package/dist/client/types.d.ts +15 -1
  191. package/dist/client/utils/recordsTableUtils.d.ts +6 -3
  192. package/dist/client/utils.js +4 -4
  193. package/dist/client-bundle-stats.html +1 -1
  194. package/dist/mcp-app/mcp-app.html +69 -69
  195. package/dist/server/ai/chart-schema.d.ts +25 -2
  196. package/dist/server/index.cjs +3 -3
  197. package/dist/server/index.js +37 -3
  198. package/package.json +1 -1
  199. package/dist/adapters/ActivityGridChart.config-XMtoteb6.js +0 -2
  200. package/dist/adapters/ActivityGridChart.config-h1AXPvn0.cjs +0 -1
  201. package/dist/adapters/AreaChart.config-DYf9wufo.cjs +0 -1
  202. package/dist/adapters/AreaChart.config-We6b53aT.js +0 -2
  203. package/dist/adapters/BarChart.config-4SX44IYv.cjs +0 -1
  204. package/dist/adapters/BarChart.config-CwBnyptL.js +0 -2
  205. package/dist/adapters/BoxPlotChart.config-BzNe-FlW.cjs +0 -1
  206. package/dist/adapters/BoxPlotChart.config-mfAHqmcp.js +0 -2
  207. package/dist/adapters/BubbleChart.config-CBT5jMdc.cjs +0 -1
  208. package/dist/adapters/BubbleChart.config-DxG_Umal.js +0 -2
  209. package/dist/adapters/CandlestickChart.config-Cqw3XP1h.js +0 -2
  210. package/dist/adapters/CandlestickChart.config-DPSSlzUD.cjs +0 -1
  211. package/dist/adapters/DataTable.config-DS1bvaDu.js +0 -2
  212. package/dist/adapters/DataTable.config-D_NsMeyz.cjs +0 -1
  213. package/dist/adapters/DotStripChart.config-BApWn6QV.cjs +0 -1
  214. package/dist/adapters/DotStripChart.config-Bdk5-YfB.js +0 -2
  215. package/dist/adapters/FunnelChart.config-BT5up_Bg.cjs +0 -1
  216. package/dist/adapters/FunnelChart.config-ISZiz9fn.js +0 -2
  217. package/dist/adapters/GaugeChart.config-Biaq1cKc.cjs +0 -1
  218. package/dist/adapters/GaugeChart.config-BjGfB84t.js +0 -2
  219. package/dist/adapters/HeatMapChart.config-Bmca8KiH.cjs +0 -1
  220. package/dist/adapters/HeatMapChart.config-uWvR0B-N.js +0 -2
  221. package/dist/adapters/KpiDelta.config-CJeDdj_1.js +0 -2
  222. package/dist/adapters/KpiDelta.config-CKr9pAxL.cjs +0 -1
  223. package/dist/adapters/KpiNumber.config-6YLEF2fy.cjs +0 -1
  224. package/dist/adapters/KpiNumber.config-C00M46GA.js +0 -2
  225. package/dist/adapters/KpiText.config-C8Av_D2W.cjs +0 -1
  226. package/dist/adapters/KpiText.config-bKTHob0C.js +0 -2
  227. package/dist/adapters/LineChart.config-DH68HT_B.js +0 -2
  228. package/dist/adapters/LineChart.config-DPq7GvL9.cjs +0 -1
  229. package/dist/adapters/MarkdownChart.config-CaaJPO3c.js +0 -2
  230. package/dist/adapters/MarkdownChart.config-ca_UyhWJ.cjs +0 -1
  231. package/dist/adapters/MeasureProfileChart.config-C1Il0IqL.cjs +0 -1
  232. package/dist/adapters/MeasureProfileChart.config-DMOnkmb6.js +0 -2
  233. package/dist/adapters/PieChart.config-Bg-8cxWK.js +0 -2
  234. package/dist/adapters/PieChart.config-joJcF--K.cjs +0 -1
  235. package/dist/adapters/ProportionBarChart.config-B2sltKsI.cjs +0 -1
  236. package/dist/adapters/ProportionBarChart.config-BlCedy1v.js +0 -2
  237. package/dist/adapters/RadarChart.config-DD1pX6FZ.js +0 -2
  238. package/dist/adapters/RadarChart.config-DVCCLSVw.cjs +0 -1
  239. package/dist/adapters/RadialBarChart.config--VIE2jMM.js +0 -2
  240. package/dist/adapters/RadialBarChart.config-BZwyWhTg.cjs +0 -1
  241. package/dist/adapters/RecordsTable.config-CTBQc-2r.js +0 -2
  242. package/dist/adapters/RecordsTable.config-DPdO0DL5.cjs +0 -1
  243. package/dist/adapters/RetentionCombinedChart.config-PGVxnkRL.js +0 -2
  244. package/dist/adapters/RetentionCombinedChart.config-mX5PMh82.cjs +0 -1
  245. package/dist/adapters/RetentionHeatmap.config-Co-JMzBm.js +0 -2
  246. package/dist/adapters/RetentionHeatmap.config-Cub3-ksy.cjs +0 -1
  247. package/dist/adapters/SankeyChart.config-BkIyUcAE.cjs +0 -1
  248. package/dist/adapters/SankeyChart.config-DGTnRmYg.js +0 -2
  249. package/dist/adapters/ScatterChart.config-CdZrBorg.js +0 -2
  250. package/dist/adapters/ScatterChart.config-CwN9niUL.cjs +0 -1
  251. package/dist/adapters/SunburstChart.config-D0ZkRSJv.cjs +0 -1
  252. package/dist/adapters/SunburstChart.config-RF3uu5Sa.js +0 -2
  253. package/dist/adapters/TreeMapChart.config-B2Yn_V7p.cjs +0 -1
  254. package/dist/adapters/TreeMapChart.config-diJtcs4D.js +0 -2
  255. package/dist/adapters/WaterfallChart.config-B10PxftT.cjs +0 -1
  256. package/dist/adapters/WaterfallChart.config-BImlkLmR.js +0 -2
  257. package/dist/adapters/mcp-app-html-CNp0VqS_.cjs +0 -1
  258. package/dist/adapters/mcp-app-html-CvWoYMO3.js +0 -5
  259. package/dist/client/chunks/DashboardEditModal-DifODH4h.js.map +0 -1
  260. package/dist/client/chunks/RecordsTable-Mo3ai5_M.js.map +0 -1
  261. package/dist/client/chunks/chart-activity-grid-Ly_-2B-f.js.map +0 -1
  262. package/dist/client/chunks/chart-data-table-Cxd0cdAl.js.map +0 -1
  263. package/dist/client/chunks/charts-loader-DoLQqFXg.js +0 -87
  264. package/dist/client/chunks/nl-NL-DVZXf8U7.js.map +0 -1
@@ -1 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./mcp-app-html-CNp0VqS_.cjs");exports.mcpAppHtml=e.t;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./mcp-app-html-MZNCuL3w.cjs");exports.mcpAppHtml=e.t;
@@ -1,2 +1,2 @@
1
- import { t as e } from "./mcp-app-html-CvWoYMO3.js";
1
+ import { t as e } from "./mcp-app-html-D37s8SEa.js";
2
2
  export { e as mcpAppHtml };
@@ -1 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./utils-a2p2B6x8.cjs"),t=require("./mcp-transport-DnLP5FPL.cjs"),n=require("./mcp-app-html-CNp0VqS_.cjs");async function r(t,n,r){let i=await t.getSecurityContext(r);return t.wrapContent(await e.p(t.semanticLayer,i,n||{}))}async function i(t,n,r){let i=n||{};if(!i.query)return t.wrapError(`query is required`);let a=await t.getSecurityContext(r);return t.wrapContent(await e.f(t.semanticLayer,a,i))}async function a(t,n,r){let i=n||{};if(!i.query)return t.wrapError(`query is required`);let a=await t.getSecurityContext(r);return t.wrapContent(await e.m(t.semanticLayer,a,i))}function o(e){return{content:[{type:`text`,text:typeof e==`string`?e:JSON.stringify(e)}],isError:!1}}function s(e){return{content:[{type:`text`,text:e instanceof Error?e.message:String(e)}],isError:!0}}function c(e){let{semanticLayer:n,getSecurityContext:c,toolPrefix:u=`drizzle_cube_`,tools:d=[`discover`,`validate`,`load`,`chart`],prompts:f=t.u(),resources:p,app:m=!1}=e,h=!!m,g=typeof m==`object`?m:void 0,_=p??t.d(),v=h?[..._,...l(g)]:_,y=t.o({appEnabled:h}),b=new Map(y.map(e=>[e.name,e])),x=d.filter(e=>b.has(e)).map(e=>{let t=b.get(e),n={name:`${u}${e}`,description:t.description,inputSchema:t.inputSchema},r=t._meta;return r&&(n._meta=r),n}),S=x.map(e=>e.name),C=new Set;for(let e of d)C.add(e),C.add(`${u}${e}`);function w(e){return C.has(e)}let T={semanticLayer:n,getSecurityContext:c,wrapContent:o,wrapError:s},E={discover:(e,t)=>r(T,e,t),validate:(e,t)=>i(T,e,t),load:(e,t)=>a(T,e,t),chart:(e,t)=>a(T,e,t)};async function D(e,t,n){let r=e.startsWith(u)?e.slice(u.length):e,i=d.includes(r)?E[r]:void 0;if(!i)return s(`Unknown tool: ${e}`);try{return await i(t,n)}catch(e){return s(e)}}return{definitions:x,handle:D,handles:w,prompts:f,resources:v,toolNames:S}}function l(e){let r=t.f(n.t,e);return r?[{uri:t.n,name:`Drizzle Cube Visualization`,description:`Interactive chart visualization for query results`,mimeType:t.t,text:r}]:[]}exports.getCubeTools=c;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./utils-CeveyqY3.cjs"),t=require("./mcp-transport-6CWmHVtJ.cjs"),n=require("./mcp-app-html-MZNCuL3w.cjs");async function r(t,n,r){let i=await t.getSecurityContext(r);return t.wrapContent(await e.p(t.semanticLayer,i,n||{}))}async function i(t,n,r){let i=n||{};if(!i.query)return t.wrapError(`query is required`);let a=await t.getSecurityContext(r);return t.wrapContent(await e.f(t.semanticLayer,a,i))}async function a(t,n,r){let i=n||{};if(!i.query)return t.wrapError(`query is required`);let a=await t.getSecurityContext(r);return t.wrapContent(await e.m(t.semanticLayer,a,i))}function o(e){return{content:[{type:`text`,text:typeof e==`string`?e:JSON.stringify(e)}],isError:!1}}function s(e){return{content:[{type:`text`,text:e instanceof Error?e.message:String(e)}],isError:!0}}function c(e){let{semanticLayer:n,getSecurityContext:c,toolPrefix:u=`drizzle_cube_`,tools:d=[`discover`,`validate`,`load`,`chart`],prompts:f=t.u(),resources:p,app:m=!1}=e,h=!!m,g=typeof m==`object`?m:void 0,_=p??t.d(),v=h?[..._,...l(g)]:_,y=t.o({appEnabled:h}),b=new Map(y.map(e=>[e.name,e])),x=d.filter(e=>b.has(e)).map(e=>{let t=b.get(e),n={name:`${u}${e}`,description:t.description,inputSchema:t.inputSchema},r=t._meta;return r&&(n._meta=r),n}),S=x.map(e=>e.name),C=new Set;for(let e of d)C.add(e),C.add(`${u}${e}`);function w(e){return C.has(e)}let T={semanticLayer:n,getSecurityContext:c,wrapContent:o,wrapError:s},E={discover:(e,t)=>r(T,e,t),validate:(e,t)=>i(T,e,t),load:(e,t)=>a(T,e,t),chart:(e,t)=>a(T,e,t)};async function D(e,t,n){let r=e.startsWith(u)?e.slice(u.length):e,i=d.includes(r)?E[r]:void 0;if(!i)return s(`Unknown tool: ${e}`);try{return await i(t,n)}catch(e){return s(e)}}return{definitions:x,handle:D,handles:w,prompts:f,resources:v,toolNames:S}}function l(e){let r=t.f(n.t,e);return r?[{uri:t.n,name:`Drizzle Cube Visualization`,description:`Interactive chart visualization for query results`,mimeType:t.t,text:r}]:[]}exports.getCubeTools=c;
@@ -1,6 +1,6 @@
1
- import { f as e, m as t, p as n } from "./utils-BaxFceDq.js";
2
- import { d as r, f as i, n as a, o, t as s, u as c } from "./mcp-transport-Cy6n4uj1.js";
3
- import { t as l } from "./mcp-app-html-CvWoYMO3.js";
1
+ import { f as e, m as t, p as n } from "./utils-B3_hJWlf.js";
2
+ import { d as r, f as i, n as a, o, t as s, u as c } from "./mcp-transport-cd2BlW-Z.js";
3
+ import { t as l } from "./mcp-app-html-D37s8SEa.js";
4
4
  //#region src/adapters/mcp-tools-handlers.ts
5
5
  async function u(e, t, r) {
6
6
  let i = await e.getSecurityContext(r);
@@ -1,4 +1,4 @@
1
- const e=require("./utils-a2p2B6x8.cjs");var t={valueField:{type:`array`,items:{type:`string`},description:`heatmap and activityGrid: single measure driving cell colour intensity. Required for both — the chart renders empty without it.`},dateField:{type:`array`,items:{type:`string`},description:`activityGrid only: single time dimension laying out the grid. Query it with day granularity over several months, or the grid has nothing to show.`}},n={minValue:{type:`number`,description:`gauge only: scale minimum (defaults to 0).`},maxValue:{type:`number`,description:`gauge only: scale maximum. ALWAYS set this — without it the gauge scales to the data it was given, so a single value always reads as 100%.`},template:{type:`string`,description:'kpiText only: sentence template around the value, e.g. "${fieldLabel}: ${value}". Defaults to that if omitted.'}},r={columns:{type:`array`,items:{type:`string`},description:`recordsTable only: fields to render as columns, in this order. Omit to show every field the query returns, in query order.`},hiddenColumns:{type:`array`,items:{type:`string`},description:`recordsTable only: fields fetched for row context or rowLink tokens but never displayed (e.g. an id used in the URL template). Leave empty unless a field is genuinely only needed behind the scenes — anything listed here disappears from the table.`}},i={columnFormats:{type:`object`,description:`recordsTable only: how each column renders, keyed by field name (e.g. "Employees.salary"). Formats are never inferred from the data — a column is plain text unless you say otherwise, so set this for any numeric, date, status or ratio column.`,additionalProperties:{type:`object`,required:[`kind`],properties:{kind:{type:`string`,enum:[`text`,`number`,`date`,`badge`,`progress`],description:`Required on every entry. text: as-is. number: formatted numeric. date: formatted date. badge: coloured pill for statuses/categories. progress: bar or ring for a bounded value. Use "text" when you only want to set a label.`},numberFormat:{type:`object`,description:`kind "number": { unit: "currency"|"percent"|"number"|"custom", decimals, abbreviate (K/M/B), currencyCode, customPrefix, customSuffix }.`},dateGranularity:{type:`string`,description:`kind "date": granularity to render at (e.g. "day", "month", "year").`},badgeColors:{type:`array`,description:`kind "badge": an ARRAY of { value, colorIndex } entries, not an object keyed by value. colorIndex is a number index into the dashboard palette (0, 1, 2, …), never a colour name like "green" — the palette is themed, so names would not follow it. A value with no entry renders neutral rather than being assigned a guessed colour.`,items:{type:`object`,required:[`value`,`colorIndex`],properties:{value:{type:`string`,description:`Cell value to colour, matched exactly`},colorIndex:{type:`number`,description:`Index into the dashboard colour palette`}}}},progressMin:{type:`number`,description:`kind "progress": lower bound (default 0). Values are clamped.`},progressMax:{type:`number`,description:`kind "progress": upper bound (default 100). Values are clamped.`},progressStyle:{type:`string`,enum:[`bar`,`circle`],description:`kind "progress": full-width bar, or a compact ring for narrow columns.`},label:{type:`string`,description:`Header override; defaults to the field title from the cube metadata.`},align:{type:`string`,enum:[`left`,`right`],description:`Cell alignment. Numbers usually read better right-aligned.`}}}},rowLink:{type:`object`,description:`recordsTable only: makes each row a link.`,required:[`urlTemplate`],properties:{urlTemplate:{type:`string`,description:`URL with {Cube.field} tokens substituted from the row, including hidden columns (e.g. "/employees/{Employees.id}"). Relative paths and http(s) URLs only.`},target:{type:`string`,enum:[`self`,`blank`],description:`Open in the same tab (default) or a new one.`}}},pageSize:{type:`number`,enum:[25,50,100],description:`recordsTable only: rows per page (default 25).`}},a=[`bar`,`line`,`area`,`pie`,`scatter`,`treemap`,`kpiNumber`,`kpiDelta`,`kpiText`,`table`,`recordsTable`,`radar`,`radialBar`,`bubble`,`funnel`,`waterfall`,`gauge`,`boxPlot`,`candlestick`,`activityGrid`,`measureProfile`,`sankey`,`sunburst`,`heatmap`,`markdown`];new Set(a);var o=`ui://drizzle-cube/visualization.html`,s=`text/html;profile=mcp-app`,c=a.filter(e=>e!==`markdown`);function l(e,t){if(!e||!t)return e;let n=`<script>window.__DRIZZLE_CUBE_MCP_APP_CONFIG__ = ${JSON.stringify({defaultLocale:t.defaultLocale,detectBrowserLocale:t.detectBrowserLocale}).replace(/<\//g,`<\\/`)}<\/script>`;return e.replace(`</head>`,`${n}</head>`)}async function u(e){let{mcpAppHtml:t}=await import(`drizzle-cube/mcp-app-html`);return l(t,e)}var d=[`2025-11-25`,`2025-06-18`,`2025-03-26`],f=`2025-11-25`;function p(e){let t=M(e[`mcp-protocol-version`])||`2025-11-25`;return{ok:d.includes(t),negotiated:d.includes(t)?t:null,supported:d}}function m(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 h=`mcp-session-id`;function g(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`),i=t.some(e=>e===`*/*`);return n&&r||n||i}function _(e){let t=e.hostname;return t===`localhost`||t===`::1`||t===`[::1]`||/^127(?:\.\d{1,3}){3}$/.test(t)}function v(e,t={}){let{allowMissingOrigin:n=!0,allowedOrigins:r}=t;if(!e)return n?{valid:!0}:{valid:!1,reason:`Origin header is required`};let i;try{i=new URL(e)}catch{return{valid:!1,reason:`Invalid Origin header format`}}let a=r&&r.length>0;return a&&r.includes(`*`)?{valid:!0}:a?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`}:_(i)?{valid:!0}:{valid:!1,reason:`Origin not allowed (default policy permits loopback origins only; configure mcp.allowedOrigins to allow this origin)`}}function y(e){return e.allowedOrigins?{allowedOrigins:e.allowedOrigins}:{}}function b(e){if(!e)return null;let t=/^Bearer\s+(\S+)$/i.exec(e);return t?t[1]:null}function x(e){return`Bearer resource_metadata="${e}"`}function S(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(`
1
+ const e=require("./utils-CeveyqY3.cjs");var t={valueField:{type:`array`,items:{type:`string`},description:`heatmap and activityGrid: single measure driving cell colour intensity. Required for both — the chart renders empty without it.`},dateField:{type:`array`,items:{type:`string`},description:`activityGrid only: single time dimension laying out the grid. Query it with day granularity over several months, or the grid has nothing to show.`}},n={minValue:{type:`number`,description:`gauge only: scale minimum (defaults to 0).`},maxValue:{type:`number`,description:`gauge only: scale maximum. ALWAYS set this — without it the gauge scales to the data it was given, so a single value always reads as 100%.`},template:{type:`string`,description:'kpiText only: sentence template around the value, e.g. "${fieldLabel}: ${value}". Defaults to that if omitted.'}},r={columns:{type:`array`,items:{type:`string`},description:`recordsTable only: fields to render as columns, in this order. Omit to show every field the query returns, in query order.`},hiddenColumns:{type:`array`,items:{type:`string`},description:`recordsTable only: fields fetched for row context or rowLink tokens but never displayed (e.g. an id used in the URL template). Leave empty unless a field is genuinely only needed behind the scenes — anything listed here disappears from the table.`}},i={columnFormats:{type:`object`,description:`recordsTable only: how each column renders, keyed by field name (e.g. "Employees.salary"). Formats are never inferred from the data — a column is plain text unless you say otherwise, so set this for any numeric, date, status or ratio column.`,additionalProperties:{type:`object`,required:[`kind`],properties:{kind:{type:`string`,enum:[`text`,`number`,`date`,`badge`,`progress`,`link`],description:`Required on every entry. text: as-is. number: formatted numeric. date: formatted date. badge: coloured pill for statuses/categories. progress: bar or ring for a bounded value. link: the value as a link to linkTemplate. Use "text" when you only want to set a label.`},numberFormat:{type:`object`,description:`kind "number": { unit: "currency"|"percent"|"number"|"custom", decimals, abbreviate (K/M/B), currencyCode, customPrefix, customSuffix }.`},dateGranularity:{type:`string`,description:`kind "date": granularity to render at (e.g. "day", "month", "year").`},badgeColors:{type:`array`,description:`kind "badge": an ARRAY of { value, colorIndex } entries, not an object keyed by value. colorIndex is a number index into the dashboard palette (0, 1, 2, …), never a colour name like "green" — the palette is themed, so names would not follow it. A value with no entry renders neutral rather than being assigned a guessed colour.`,items:{type:`object`,required:[`value`,`colorIndex`],properties:{value:{type:`string`,description:`Cell value to colour, matched exactly`},colorIndex:{type:`number`,description:`Index into the dashboard colour palette`}}}},progressMin:{type:`number`,description:`kind "progress": lower bound (default 0). Values are clamped.`},progressMax:{type:`number`,description:`kind "progress": upper bound (default 100). Values are clamped.`},progressStyle:{type:`string`,enum:[`bar`,`circle`],description:`kind "progress": full-width bar, or a compact ring for narrow columns.`},progressBands:{type:`array`,description:`kind "progress": colour bands, as an ARRAY of { value, colorIndex } entries. A cell takes the colour of the highest band whose value is at or below the cell value, so { value: 0, colorIndex: 3 }, { value: 50, colorIndex: 2 }, { value: 80, colorIndex: 1 } reads red below 50, then yellow, then green from 80. Below every band the bar keeps its default colour. colorIndex is a number index into the dashboard palette, never a colour name.`,items:{type:`object`,required:[`value`,`colorIndex`],properties:{value:{type:`number`,description:`Where the band starts, in the column's own units`},colorIndex:{type:`integer`,minimum:0,description:`Index into the dashboard colour palette`}}}},label:{type:`string`,description:`Header override; defaults to the field title from the cube metadata.`},align:{type:`string`,enum:[`left`,`right`],description:`Cell alignment. Numbers usually read better right-aligned.`},linkTemplate:{type:`string`,description:`kind "link": URL with {Cube.field} tokens substituted from the row, including hidden columns (e.g. "/employees/{Employees.id}"). Relative paths and http(s) URLs only. The cell link wins over rowLink for that cell.`}}}},rowLink:{type:`object`,description:`recordsTable only: makes each row a link.`,required:[`urlTemplate`],properties:{urlTemplate:{type:`string`,description:`URL with {Cube.field} tokens substituted from the row, including hidden columns (e.g. "/employees/{Employees.id}"). Relative paths and http(s) URLs only.`},target:{type:`string`,enum:[`self`,`blank`],description:`Open in the same tab (default) or a new one.`}}},pageSize:{type:`number`,enum:[25,50,100],description:`recordsTable only: rows per page (default 25).`}},a=[`bar`,`line`,`area`,`pie`,`scatter`,`treemap`,`kpiNumber`,`kpiDelta`,`kpiText`,`table`,`recordsTable`,`radar`,`radialBar`,`bubble`,`funnel`,`waterfall`,`gauge`,`boxPlot`,`candlestick`,`activityGrid`,`measureProfile`,`sankey`,`sunburst`,`heatmap`,`markdown`];new Set(a);var o=`ui://drizzle-cube/visualization.html`,s=`text/html;profile=mcp-app`,c=a.filter(e=>e!==`markdown`);function l(e,t){if(!e||!t)return e;let n=`<script>window.__DRIZZLE_CUBE_MCP_APP_CONFIG__ = ${JSON.stringify({defaultLocale:t.defaultLocale,detectBrowserLocale:t.detectBrowserLocale}).replace(/<\//g,`<\\/`)}<\/script>`;return e.replace(`</head>`,`${n}</head>`)}async function u(e){let{mcpAppHtml:t}=await import(`drizzle-cube/mcp-app-html`);return l(t,e)}var d=[`2025-11-25`,`2025-06-18`,`2025-03-26`],f=`2025-11-25`;function p(e){let t=M(e[`mcp-protocol-version`])||`2025-11-25`;return{ok:d.includes(t),negotiated:d.includes(t)?t:null,supported:d}}function m(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 h=`mcp-session-id`;function g(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`),i=t.some(e=>e===`*/*`);return n&&r||n||i}function _(e){let t=e.hostname;return t===`localhost`||t===`::1`||t===`[::1]`||/^127(?:\.\d{1,3}){3}$/.test(t)}function v(e,t={}){let{allowMissingOrigin:n=!0,allowedOrigins:r}=t;if(!e)return n?{valid:!0}:{valid:!1,reason:`Origin header is required`};let i;try{i=new URL(e)}catch{return{valid:!1,reason:`Invalid Origin header format`}}let a=r&&r.length>0;return a&&r.includes(`*`)?{valid:!0}:a?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`}:_(i)?{valid:!0}:{valid:!1,reason:`Origin not allowed (default policy permits loopback origins only; configure mcp.allowedOrigins to allow this origin)`}}function y(e){return e.allowedOrigins?{allowedOrigins:e.allowedOrigins}:{}}function b(e){if(!e)return null;let t=/^Bearer\s+(\S+)$/i.exec(e);return t?t[1]:null}function x(e){return`Bearer resource_metadata="${e}"`}function S(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
2
  `)}function C(e,t,n,r){return{jsonrpc:`2.0`,id:e??null,error:{code:t,message:n,...r===void 0?{}:{data:r}}}}function w(e,t){return{jsonrpc:`2.0`,id:e??null,result:t}}function T(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}}function E(e,t){let n=e?.protocolVersion;return{protocolVersion:n&&d.includes(n)?n:f,capabilities:{tools:{listChanged:!1},resources:{listChanged:!1},prompts:{listChanged:!1},sampling:{}},sessionId:P(),serverInfo:{name:t.serverName,version:typeof process<`u`?process.env?.npm_package_version||`dev`:`worker`},instructions:t.instructions}}async function D(e){return{resources:(await e.getResources()).map(({uri:e,name:t,description:n,mimeType:r})=>({uri:e,name:t,description:n,mimeType:r})),nextCursor:``}}async function O(e,t){let n=e?.uri,r=await t.getResources(),i=r.find(e=>e.uri===n)||r[0];if(!i)throw j(-32602,`resource not found`);return{contents:[{uri:i.uri,mimeType:i.mimeType,text:i.text}]}}function k(e,t){let n=e?.name,r=t.prompts.find(e=>e.name===n)||t.prompts[0];if(!r)throw j(-32602,`prompt not found`);return{name:r.name,description:r.description,messages:r.messages}}async function A(t,n,r){let{appEnabled:i,appConfig:a}=r,o=r.resources??B,s={appEnabled:i,serverName:r.serverName??`drizzle-cube`,prompts:r.prompts??z,getResources:async()=>{let e=await r.extractSecurityContext(r.rawRequest,r.rawResponse),t=J(r.semanticLayer,e,o);return i?[...t,...await R(a)]:t},instructions:r.instructions??e.y()};switch(t){case`initialize`:return E(n,s);case`list_tools`:case`tools/list`:return{tools:F({appEnabled:i}),nextCursor:``};case`call_tool`:case`tools/call`:return I(n,r);case`resources/list`:return await D(s);case`resources/templates/list`:return{resourceTemplates:[],nextCursor:``};case`resources/read`:return await O(n,s);case`prompts/list`:return{prompts:s.prompts.map(({name:e,description:t})=>({name:e,description:t})),nextCursor:``};case`ping`:return{};case`notifications/initialized`:return{};case`prompts/get`:return k(n,s);default:throw j(-32601,`Unknown MCP method: ${t}`)}}function j(e,t,n){let r=Error(t);return r.code=e,n!==void 0&&(r.data=n),r}function M(e){return e?Array.isArray(e)?e[0]||null:e:null}function N(e){return e.id===void 0||e.id===null}function P(){return`evt-${e.s()}`}function F(t){let n=[{name:`discover`,description:`MANDATORY FIRST CALL. You MUST call this before constructing any query — even if you think you know the schema.
3
3
 
4
4
  Returns:
@@ -37,6 +37,6 @@ Include a "chart" object to control the visualization.
37
37
  Chart types: ${c.join(`, `)}
38
38
  Guidelines: single number -> kpiNumber, trend -> line/area, categories -> bar, part-of-whole -> pie, correlation -> scatter/bubble, distribution -> boxPlot, record-level listing -> recordsTable
39
39
 
40
- recordsTable renders one row per record, so pair it with "ungrouped": true in the query. Its columns are plain text unless you say otherwise: use chart.displayConfig.columnFormats to give each column a kind (number, date, badge, progress), which is what makes the listing readable.`,inputSchema:{type:`object`,required:[`query`],properties:{query:{type:`object`,description:`Semantic query object. Same format as the load tool.`,properties:e.b},chart:{type:`object`,description:`Chart configuration for the visualization. If omitted, chart type is auto-detected from query shape.`,properties:{type:{type:`string`,enum:c,description:`Chart type to render`},title:{type:`string`,description:`Chart title`},chartConfig:{type:`object`,description:`Axis configuration — same schema as agent add_portlet chartConfig.`,properties:{xAxis:{type:`array`,items:{type:`string`},description:`Dimension fields for X axis`},yAxis:{type:`array`,items:{type:`string`},description:`Measure fields for Y axis`},series:{type:`array`,items:{type:`string`},description:`Dimension for series splitting (grouped/stacked)`},yAxisAssignment:{type:`object`,description:`Dual Y-axis: map measure fields to "left" or "right". Only bar/line/area with 2+ measures of different scales.`},sizeField:{type:`string`,description:`Bubble chart size field`},colorField:{type:`string`,description:`Bubble chart color field`},...r}},displayConfig:{type:`object`,description:`Display options.`,properties:{showLegend:{type:`boolean`},showGrid:{type:`boolean`},showTooltip:{type:`boolean`},stacked:{type:`boolean`},stackType:{type:`string`,enum:[`none`,`normal`,`percent`]},orientation:{type:`string`,enum:[`horizontal`,`vertical`]},...i}},xAxis:{type:`string`,description:`Deprecated: use chartConfig.xAxis`},yAxis:{type:`array`,items:{type:`string`},description:`Deprecated: use chartConfig.yAxis`}}}}}});let t=n.find(e=>e.name===`chart`);t&&(t._meta={ui:{resourceUri:o}})}return n}async function I(t,n){let{semanticLayer:r,extractSecurityContext:i,rawRequest:a,rawResponse:o}=n,s=t||{};if(!s.name)throw j(-32602,`name is required for tools/call`);let c=s.arguments;try{switch(s.name){case`discover`:{let t=await i(a,o);return L(await e.p(r,t,c||{}))}case`validate`:{let t=c||{};if(!t.query)throw j(-32602,`query is required`);let n=await i(a,o);return L(await e.f(r,n,t))}case`load`:{let t=c||{};if(!t.query)throw j(-32602,`query is required`);let n=await i(a,o);return L(await e.m(r,n,t))}case`chart`:{let t=c||{};if(!t.query)throw j(-32602,`query is required`);let n=await i(a,o);return L(await e.m(r,n,t))}default:throw j(-32601,`Unknown tool: ${s.name}`)}}catch(e){if(e?.code===-32602||e?.code===-32601)throw e;let t=e instanceof Error?e.message:String(e);return{content:[{type:`text`,text:JSON.stringify({error:t})}],isError:!0}}}function L(e){return{content:[{type:`text`,text:typeof e==`string`?e:JSON.stringify(e)}],isError:!1}}async function R(e){let t=await u(e);return t?[{uri:o,name:`Drizzle Cube Visualization`,description:`Interactive chart visualization for query results`,mimeType:s,text:t}]:[]}var z=e.v(),B=[{uri:`drizzle-cube://quickstart`,name:`Drizzle Cube MCP Quickstart`,description:`Minimal guide for using discover/validate/load`,mimeType:`text/markdown`,text:[`# Drizzle Cube MCP Quickstart`,``,`Tools:`,`- discover: { topic?, intent?, limit?, minScore? } -> cubes list`,`- validate: { query } -> corrected query + issues`,`- load: { query } -> data + annotation (text only)`,`- chart: { query, chart? } -> data + interactive chart visualization`,``,`Recommended flow:`,`1) tools/call name=discover intent="<goal>"`,`2) tools/call name=validate query=<draft> (optional)`,`3) tools/call name=load query=<validated> (data only) OR name=chart query=<validated> chart={type, ...} (with visualization)`,``,`Query shapes supported:`,`- regular: { measures, dimensions, filters, timeDimensions, order, limit, offset, ungrouped }`,`- funnel: { funnel: { bindingKey, timeDimension, steps[], includeTimeMetrics?, globalTimeWindow? } }`,`- flow: { flow: { bindingKey, timeDimension, eventDimension, startingStep: { name, filter }, stepsBefore, stepsAfter } }`,`- retention: { retention: { timeDimension, bindingKey, dateRange: { start, end }, granularity, periods, retentionType } }`,``,`Filter rules: flat arrays of { member, operator, values }. Use { and: [...] } or { or: [...] } for logical grouping.`].join(`
40
+ recordsTable renders one row per record, so pair it with "ungrouped": true in the query. Its columns are plain text unless you say otherwise: use chart.displayConfig.columnFormats to give each column a kind (number, date, badge, progress, link), which is what makes the listing readable. A link column needs a linkTemplate such as "/employees/{Employees.id}".`,inputSchema:{type:`object`,required:[`query`],properties:{query:{type:`object`,description:`Semantic query object. Same format as the load tool.`,properties:e.b},chart:{type:`object`,description:`Chart configuration for the visualization. If omitted, chart type is auto-detected from query shape.`,properties:{type:{type:`string`,enum:c,description:`Chart type to render`},title:{type:`string`,description:`Chart title`},chartConfig:{type:`object`,description:`Axis configuration — same schema as agent add_portlet chartConfig.`,properties:{xAxis:{type:`array`,items:{type:`string`},description:`Dimension fields for X axis`},yAxis:{type:`array`,items:{type:`string`},description:`Measure fields for Y axis`},series:{type:`array`,items:{type:`string`},description:`Dimension for series splitting (grouped/stacked)`},yAxisAssignment:{type:`object`,description:`Dual Y-axis: map measure fields to "left" or "right". Only bar/line/area with 2+ measures of different scales.`},sizeField:{type:`string`,description:`Bubble chart size field`},colorField:{type:`string`,description:`Bubble chart color field`},...r}},displayConfig:{type:`object`,description:`Display options.`,properties:{showLegend:{type:`boolean`},showGrid:{type:`boolean`},showTooltip:{type:`boolean`},stacked:{type:`boolean`},stackType:{type:`string`,enum:[`none`,`normal`,`percent`]},orientation:{type:`string`,enum:[`horizontal`,`vertical`]},...i}},xAxis:{type:`string`,description:`Deprecated: use chartConfig.xAxis`},yAxis:{type:`array`,items:{type:`string`},description:`Deprecated: use chartConfig.yAxis`}}}}}});let t=n.find(e=>e.name===`chart`);t&&(t._meta={ui:{resourceUri:o}})}return n}async function I(t,n){let{semanticLayer:r,extractSecurityContext:i,rawRequest:a,rawResponse:o}=n,s=t||{};if(!s.name)throw j(-32602,`name is required for tools/call`);let c=s.arguments;try{switch(s.name){case`discover`:{let t=await i(a,o);return L(await e.p(r,t,c||{}))}case`validate`:{let t=c||{};if(!t.query)throw j(-32602,`query is required`);let n=await i(a,o);return L(await e.f(r,n,t))}case`load`:{let t=c||{};if(!t.query)throw j(-32602,`query is required`);let n=await i(a,o);return L(await e.m(r,n,t))}case`chart`:{let t=c||{};if(!t.query)throw j(-32602,`query is required`);let n=await i(a,o);return L(await e.m(r,n,t))}default:throw j(-32601,`Unknown tool: ${s.name}`)}}catch(e){if(e?.code===-32602||e?.code===-32601)throw e;let t=e instanceof Error?e.message:String(e);return{content:[{type:`text`,text:JSON.stringify({error:t})}],isError:!0}}}function L(e){return{content:[{type:`text`,text:typeof e==`string`?e:JSON.stringify(e)}],isError:!1}}async function R(e){let t=await u(e);return t?[{uri:o,name:`Drizzle Cube Visualization`,description:`Interactive chart visualization for query results`,mimeType:s,text:t}]:[]}var z=e.v(),B=[{uri:`drizzle-cube://quickstart`,name:`Drizzle Cube MCP Quickstart`,description:`Minimal guide for using discover/validate/load`,mimeType:`text/markdown`,text:[`# Drizzle Cube MCP Quickstart`,``,`Tools:`,`- discover: { topic?, intent?, limit?, minScore? } -> cubes list`,`- validate: { query } -> corrected query + issues`,`- load: { query } -> data + annotation (text only)`,`- chart: { query, chart? } -> data + interactive chart visualization`,``,`Recommended flow:`,`1) tools/call name=discover intent="<goal>"`,`2) tools/call name=validate query=<draft> (optional)`,`3) tools/call name=load query=<validated> (data only) OR name=chart query=<validated> chart={type, ...} (with visualization)`,``,`Query shapes supported:`,`- regular: { measures, dimensions, filters, timeDimensions, order, limit, offset, ungrouped }`,`- funnel: { funnel: { bindingKey, timeDimension, steps[], includeTimeMetrics?, globalTimeWindow? } }`,`- flow: { flow: { bindingKey, timeDimension, eventDimension, startingStep: { name, filter }, stepsBefore, stepsAfter } }`,`- retention: { retention: { timeDimension, bindingKey, dateRange: { start, end }, granularity, periods, retentionType } }`,``,`Filter rules: flat arrays of { member, operator, values }. Use { and: [...] } or { or: [...] } for logical grouping.`].join(`
41
41
  `)},{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"] },`,` { "or": [`,` { "member": "Sales.region", "operator": "equals", "values": ["US"] },`,` { "member": "Sales.region", "operator": "equals", "values": ["EU"] }`,` ]}`,` ],`,` "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"] },`,` { "member": "Events.timestamp", "operator": "inDateRange", "values": ["last 6 months"] }`,` ]`,` },`,` {`,` "name": "Purchase",`,` "filter": [{ "member": "Events.eventType", "operator": "equals", "values": ["purchase"] }],`,` "timeToConvert": "P7D"`,` }`,` ],`,` "includeTimeMetrics": true`,` }`,`}`,"```",``,`## Flow`,"```json",`{`,` "flow": {`,` "bindingKey": "Events.userId",`,` "timeDimension": "Events.timestamp",`,` "eventDimension": "Events.eventType",`,` "startingStep": {`,` "name": "Checkout",`,` "filter": { "member": "Events.eventType", "operator": "equals", "values": ["checkout"] }`,` },`,` "stepsBefore": 2,`,` "stepsAfter": 3`,` }`,`}`,"```",``,`## Retention`,"```json",`{`,` "retention": {`,` "timeDimension": "Events.timestamp",`,` "bindingKey": "Events.userId",`,` "dateRange": { "start": "2024-01-01", "end": "2024-03-31" },`,` "granularity": "week",`,` "periods": 8,`,` "retentionType": "classic",`,` "breakdownDimensions": ["Events.country"]`,` }`,`}`,"```",``,`### Filter operators`,`String: equals, notEquals, contains, notContains, startsWith, notStartsWith, endsWith, notEndsWith, like, notLike, ilike, regex, notRegex`,`Numeric: gt, gte, lt, lte, between, notBetween`,`Set: in, notIn, set, notSet, isEmpty, isNotEmpty`,`Date: inDateRange, beforeDate, afterDate`,`No values: set, notSet, isEmpty, isNotEmpty (omit values)`,`Unknown operators are rejected by validation.`,``,`### Time handling`,`- Aggregated totals: use filters with inDateRange (NOT timeDimensions)`,`- Time series grouping: use timeDimensions with granularity`,`- A timeDimension without granularity is only a date filter (no time column)`,`- inDateRange values: ["last 3 months"] (one relative string) or ["2024-01-01", "2024-03-31"]`,`- Relative ranges: today, yesterday, tomorrow, this/last/next week|month|quarter|year, last N days|weeks|months|quarters|years`,`- Combine an inDateRange filter with timeDimensions only when they are on DIFFERENT fields`,`- Period comparison: use compareDateRange in timeDimensions`].join(`
42
42
  `)}];function V(){return B}function H(){return z}function U(){return e.y()}function W(e){let t=H();return typeof e==`function`?e(t):e??t}function G(e){let t=V();return typeof e==`function`?e(t):e??t}function K(e){let t=U();return typeof e==`function`?e(t):e??t}function q(e,t){return{uri:`drizzle-cube://schema`,name:`Cube Schema`,description:`Current cube metadata as JSON`,mimeType:`application/json`,text:JSON.stringify(e.getMetadata(t),null,2)}}function J(e,t,n){let r=q(e,t);return[...G(n).filter(e=>e.uri!==r.uri),r]}Object.defineProperty(exports,"C",{enumerable:!0,get:function(){return v}}),Object.defineProperty(exports,"D",{enumerable:!0,get:function(){return i}}),Object.defineProperty(exports,"E",{enumerable:!0,get:function(){return r}}),Object.defineProperty(exports,"O",{enumerable:!0,get:function(){return n}}),Object.defineProperty(exports,"S",{enumerable:!0,get:function(){return g}}),Object.defineProperty(exports,"T",{enumerable:!0,get:function(){return t}}),Object.defineProperty(exports,"_",{enumerable:!0,get:function(){return P}}),Object.defineProperty(exports,"a",{enumerable:!0,get:function(){return w}}),Object.defineProperty(exports,"b",{enumerable:!0,get:function(){return G}}),Object.defineProperty(exports,"c",{enumerable:!0,get:function(){return A}}),Object.defineProperty(exports,"d",{enumerable:!0,get:function(){return V}}),Object.defineProperty(exports,"f",{enumerable:!0,get:function(){return l}}),Object.defineProperty(exports,"g",{enumerable:!0,get:function(){return T}}),Object.defineProperty(exports,"h",{enumerable:!0,get:function(){return y}}),Object.defineProperty(exports,"i",{enumerable:!0,get:function(){return C}}),Object.defineProperty(exports,"l",{enumerable:!0,get:function(){return b}}),Object.defineProperty(exports,"m",{enumerable:!0,get:function(){return p}}),Object.defineProperty(exports,"n",{enumerable:!0,get:function(){return o}}),Object.defineProperty(exports,"o",{enumerable:!0,get:function(){return F}}),Object.defineProperty(exports,"p",{enumerable:!0,get:function(){return N}}),Object.defineProperty(exports,"r",{enumerable:!0,get:function(){return h}}),Object.defineProperty(exports,"s",{enumerable:!0,get:function(){return x}}),Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return s}}),Object.defineProperty(exports,"u",{enumerable:!0,get:function(){return H}}),Object.defineProperty(exports,"v",{enumerable:!0,get:function(){return K}}),Object.defineProperty(exports,"w",{enumerable:!0,get:function(){return m}}),Object.defineProperty(exports,"x",{enumerable:!0,get:function(){return S}}),Object.defineProperty(exports,"y",{enumerable:!0,get:function(){return W}});
@@ -1,4 +1,4 @@
1
- import { b as e, f as t, m as n, p as r, s as i, v as a, y as o } from "./utils-BaxFceDq.js";
1
+ import { b as e, f as t, m as n, p as r, s as i, v as a, y as o } from "./utils-B3_hJWlf.js";
2
2
  //#region src/server/ai/chart-schema.ts
3
3
  var s = {
4
4
  valueField: {
@@ -50,9 +50,10 @@ var s = {
50
50
  "number",
51
51
  "date",
52
52
  "badge",
53
- "progress"
53
+ "progress",
54
+ "link"
54
55
  ],
55
- description: "Required on every entry. text: as-is. number: formatted numeric. date: formatted date. badge: coloured pill for statuses/categories. progress: bar or ring for a bounded value. Use \"text\" when you only want to set a label."
56
+ description: "Required on every entry. text: as-is. number: formatted numeric. date: formatted date. badge: coloured pill for statuses/categories. progress: bar or ring for a bounded value. link: the value as a link to linkTemplate. Use \"text\" when you only want to set a label."
56
57
  },
57
58
  numberFormat: {
58
59
  type: "object",
@@ -93,6 +94,25 @@ var s = {
93
94
  enum: ["bar", "circle"],
94
95
  description: "kind \"progress\": full-width bar, or a compact ring for narrow columns."
95
96
  },
97
+ progressBands: {
98
+ type: "array",
99
+ description: "kind \"progress\": colour bands, as an ARRAY of { value, colorIndex } entries. A cell takes the colour of the highest band whose value is at or below the cell value, so { value: 0, colorIndex: 3 }, { value: 50, colorIndex: 2 }, { value: 80, colorIndex: 1 } reads red below 50, then yellow, then green from 80. Below every band the bar keeps its default colour. colorIndex is a number index into the dashboard palette, never a colour name.",
100
+ items: {
101
+ type: "object",
102
+ required: ["value", "colorIndex"],
103
+ properties: {
104
+ value: {
105
+ type: "number",
106
+ description: "Where the band starts, in the column's own units"
107
+ },
108
+ colorIndex: {
109
+ type: "integer",
110
+ minimum: 0,
111
+ description: "Index into the dashboard colour palette"
112
+ }
113
+ }
114
+ }
115
+ },
96
116
  label: {
97
117
  type: "string",
98
118
  description: "Header override; defaults to the field title from the cube metadata."
@@ -101,6 +121,10 @@ var s = {
101
121
  type: "string",
102
122
  enum: ["left", "right"],
103
123
  description: "Cell alignment. Numbers usually read better right-aligned."
124
+ },
125
+ linkTemplate: {
126
+ type: "string",
127
+ description: "kind \"link\": URL with {Cube.field} tokens substituted from the row, including hidden columns (e.g. \"/employees/{Employees.id}\"). Relative paths and http(s) URLs only. The cell link wins over rowLink for that cell."
104
128
  }
105
129
  }
106
130
  }
@@ -437,7 +461,7 @@ Include a "chart" object to control the visualization.
437
461
  Chart types: ${m.join(", ")}
438
462
  Guidelines: single number -> kpiNumber, trend -> line/area, categories -> bar, part-of-whole -> pie, correlation -> scatter/bubble, distribution -> boxPlot, record-level listing -> recordsTable
439
463
 
440
- recordsTable renders one row per record, so pair it with "ungrouped": true in the query. Its columns are plain text unless you say otherwise: use chart.displayConfig.columnFormats to give each column a kind (number, date, badge, progress), which is what makes the listing readable.`,
464
+ recordsTable renders one row per record, so pair it with "ungrouped": true in the query. Its columns are plain text unless you say otherwise: use chart.displayConfig.columnFormats to give each column a kind (number, date, badge, progress, link), which is what makes the listing readable. A link column needs a linkTemplate such as "/employees/{Employees.id}".`,
441
465
  inputSchema: {
442
466
  type: "object",
443
467
  required: ["query"],
@@ -1 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../utils-a2p2B6x8.cjs"),t=require("../compiler-B-yljK02.cjs"),n=require("../mcp-transport-DnLP5FPL.cjs"),r=require("../core-CQOrzBNh.cjs");let i=require("next/server");function a(e,t){let r=new TextEncoder,a=n._(),o=new ReadableStream({start(e){e.enqueue(r.encode(n.x({jsonrpc:`2.0`,method:`mcp/ready`,params:{protocol:`streamable-http`}},a,15e3)))}}),s=new Headers({"Content-Type":`text/event-stream`,"Cache-Control":`no-cache`,Connection:`keep-alive`});return t(e,s),new i.NextResponse(o,{status:200,headers:s})}function o(e){if(e.semanticLayer)return e.semanticLayer;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 s(e){return{extractSecurityContext:async(t,n)=>{let i=await e.extractSecurityContext(t,n),a=r.s(e=>t.headers.get(e));return r.c(i,a)},cors:e.cors?{...e.cors,allowedHeaders:r.o(e.cors.allowedHeaders)}:void 0}}function c(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 l(e){let t=o(e),n=r.t({semanticLayer:t,onError:e=>{process.env.NODE_ENV!==`test`&&console.error(`Next.js handler error:`,e)},mcp:e.mcp}),i=e.cors?{...e.cors,allowedHeaders:r.o(e.cors.allowedHeaders)}:void 0;return{httpHandler:n,corsHeaders:e=>i?c(e,i):{},baseContext:(t,n)=>()=>e.extractSecurityContext(t,n)}}function u(e,t){let n={};return{getHeader:t=>e.headers.get(t)??void 0,getBody:async()=>{try{return await e.json()}catch{return null}},getQueryParam:t=>e.nextUrl.searchParams.get(t)??void 0,send:(e,r)=>i.NextResponse.json(r,{status:e,headers:{...t,...n}}),setHeader:(e,t)=>{n[e]=t},sendEmpty:e=>new i.NextResponse(null,{status:e,headers:{...t,...n}}),sendSse:(e,r)=>new i.NextResponse(r,{status:e,headers:{"Content-Type":`text/event-stream`,"Cache-Control":`no-cache`,Connection:`keep-alive`,...t,...n}})}}function d(e){return async function(t){let n=c(t,{...e,allowedHeaders:r.o(e.allowedHeaders)});return new Response(null,{status:200,headers:n})}}function f(t){let{httpHandler:n,corsHeaders:r,baseContext:a}=l(t);return async function(t,o){let s=u(t,r(t));return t.method===`POST`?n.handleLoadPost(s,a(t,o)):t.method===`GET`?n.handleLoadGet(s,a(t,o)):i.NextResponse.json(e.i(`Method not allowed`,405),{status:405})}}function p(e){let{httpHandler:t,corsHeaders:n,baseContext:r}=l(e);return async function(e,i){return t.handleMetaGet(u(e,n(e)),r(e,i))}}function m(t){let{httpHandler:n,corsHeaders:r,baseContext:a}=l(t);return async function(t,o){let s=u(t,r(t));return t.method===`POST`?n.handleSqlPost(s,a(t,o)):t.method===`GET`?n.handleSqlGet(s,a(t,o)):i.NextResponse.json(e.i(`Method not allowed`,405),{status:405})}}function h(e){let{httpHandler:t,corsHeaders:n,baseContext:r}=l(e);return async function(e,a){let o=u(e,n(e));return e.method===`POST`?t.handleDryRunPost(o,r(e,a)):e.method===`GET`?t.handleDryRunGet(o,r(e,a)):i.NextResponse.json({error:`Method not allowed`,valid:!1},{status:405})}}function g(t){let{httpHandler:n,corsHeaders:r,baseContext:a}=l(t);return async function(t,o){return t.method===`POST`?n.handleBatchPost(u(t,r(t)),a(t,o)):i.NextResponse.json(e.i(`Method not allowed - use POST`,405),{status:405})}}function _(e){let{httpHandler:t,corsHeaders:n,baseContext:r}=l(e);return async function(e,a){return e.method===`POST`?t.handleExplainPost(u(e,n(e)),r(e,a)):i.NextResponse.json({error:`Method not allowed`},{status:405})}}function v(t){let{extractSecurityContext:n,cors:r}=s(t),a=o(t);return async function(t,o){try{if(t.method!==`POST`)return i.NextResponse.json(e.i(`Method not allowed - use POST`,405),{status:405});let s=await t.json(),l=await n(t,o),u=await e.p(a,l,s);return i.NextResponse.json(u,{headers:r?c(t,r):{}})}catch(t){return process.env.NODE_ENV!==`test`&&console.error(`Next.js discover handler error:`,t),i.NextResponse.json(e.i(t instanceof Error?t.message:`Discovery failed`,500),{status:500})}}}function y(t){let{extractSecurityContext:n,cors:r}=s(t),a=o(t);return async function(t,o){try{if(t.method!==`POST`)return i.NextResponse.json(e.i(`Method not allowed - use POST`,405),{status:405});let s=await t.json();if(!s.naturalLanguage)return i.NextResponse.json(e.i(`naturalLanguage field is required`,400),{status:400});let l=await n(t,o),u=await e.d(a,l,s);return i.NextResponse.json(u,{headers:r?c(t,r):{}})}catch(t){return process.env.NODE_ENV!==`test`&&console.error(`Next.js suggest handler error:`,t),i.NextResponse.json(e.i(t instanceof Error?t.message:`Query suggestion failed`,500),{status:500})}}}function b(t){let{extractSecurityContext:n,cors:r}=s(t),a=o(t);return async function(t,o){try{if(t.method!==`POST`)return i.NextResponse.json(e.i(`Method not allowed - use POST`,405),{status:405});let s=await t.json();if(!s.query)return i.NextResponse.json(e.i(`query field is required`,400),{status:400});let l=await n(t,o),u=await e.f(a,l,s);return i.NextResponse.json(u,{headers:r?c(t,r):{}})}catch(t){return process.env.NODE_ENV!==`test`&&console.error(`Next.js validate handler error:`,t),i.NextResponse.json(e.i(t instanceof Error?t.message:`Query validation failed`,500),{status:500})}}}function x(t){let{extractSecurityContext:n,cors:r}=s(t),a=o(t);return async function(t,o){try{if(t.method!==`POST`)return i.NextResponse.json(e.i(`Method not allowed - use POST`,405),{status:405});let s=await t.json();if(!s.query)return i.NextResponse.json(e.i(`query field is required`,400),{status:400});let l=await n(t,o),u=await e.m(a,l,s);return i.NextResponse.json(u,{headers:r?c(t,r):{}})}catch(t){return process.env.NODE_ENV!==`test`&&console.error(`Next.js MCP load handler error:`,t),i.NextResponse.json(e.i(t instanceof Error?t.message:`Query execution failed`,500),{status:500})}}}function S(t){let{httpHandler:r,corsHeaders:o,baseContext:s}=l(t),{mcp:c={enabled:!0}}=t,d=(e,t)=>{Object.entries(o(e)).forEach(([e,n])=>t.set(e,n))};return async function(t,l){if(c.resourceMetadataUrl&&!n.l(t.headers.get(`authorization`)))return i.NextResponse.json({error:`Bearer token required`},{status:401,headers:{"WWW-Authenticate":n.s(c.resourceMetadataUrl)}});if(t.method===`DELETE`||t.method===`GET`){let e=n.C(t.headers.get(`origin`),n.h(c));if(!e.valid)return i.NextResponse.json({error:e.reason},{status:403})}return t.method===`DELETE`?i.NextResponse.json({error:`Session termination not supported`},{status:405}):t.method===`GET`?a(t,d):t.method===`POST`?r.handleMcpPost(u(t,o(t)),s(t,l)):i.NextResponse.json(e.i(`Method not allowed - use POST`,405),{status:405})}}function C(e){let{cors:t}=s(e),{agent:n}=e;if(!n)throw Error(`agent config is required for createAgentChatHandler`);let a=o(e);return async function(o,s){try{if(o.method!==`POST`)return i.NextResponse.json({error:`Method not allowed - use POST`},{status:405});let{handleAgentChat:l}=await Promise.resolve().then(()=>require("../handler-DSNmfv1R.cjs")),{message:u,sessionId:d,history:f}=await o.json();if(!u||typeof u!=`string`)return i.NextResponse.json({error:`message is required and must be a string`},{status:400});let p=(n.apiKey||``).trim();if(n.allowClientApiKey){let e=o.headers.get(`x-agent-api-key`);e&&(p=e.trim())}if(!p)return i.NextResponse.json({error:`No API key configured. Set agent.apiKey in server config or send X-Agent-Api-Key header.`},{status:401});let m=n.allowClientApiKey&&o.headers.get(`x-agent-provider`)||void 0,h=n.allowClientApiKey&&o.headers.get(`x-agent-model`)||void 0,g=n.allowClientApiKey&&o.headers.get(`x-agent-provider-endpoint`)||void 0,_=r.r(await e.extractSecurityContext(o,s),e=>o.headers.get(e)??void 0),v=n.buildSystemContext?.(_),y=new TextEncoder,b=new ReadableStream({async start(e){try{let t=l({message:u,sessionId:d,history:f,semanticLayer:a,securityContext:_,agentConfig:n,apiKey:p,systemContext:v,providerOverride:m,modelOverride:h,baseURLOverride:g});for await(let n of t){let t=`data: ${JSON.stringify(n)}\n\n`;e.enqueue(y.encode(t))}}catch(t){let n={type:`error`,data:{message:t instanceof Error?t.message:`Stream failed`}};e.enqueue(y.encode(`data: ${JSON.stringify(n)}\n\n`))}finally{e.close()}}}),x=new Headers({"Content-Type":`text/event-stream`,"Cache-Control":`no-cache`,Connection:`keep-alive`});if(t){let e=c(o,t);Object.entries(e).forEach(([e,t])=>x.set(e,t))}return new Response(b,{status:200,headers:x})}catch(e){return process.env.NODE_ENV!==`test`&&console.error(`Next.js agent chat handler error:`,e),i.NextResponse.json({error:e instanceof Error?e.message:`Agent chat failed`},{status:500})}}}function w(e){let{mcp:t={enabled:!0}}=e,n=o(e),r={...e,semanticLayer:n},i={load:f(r),meta:p(r),sql:m(r),dryRun:h(r),batch:g(r),explain:_(r)};return t.enabled!==!1&&(i.mcpRpc=S(r)),e.agent&&(i.agentChat=C(r)),i}exports.createAgentChatHandler=C,exports.createBatchHandler=g,exports.createCubeHandlers=w,exports.createDiscoverHandler=v,exports.createDryRunHandler=h,exports.createExplainHandler=_,exports.createLoadHandler=f,exports.createMcpLoadHandler=x,exports.createMcpRpcHandler=S,exports.createMetaHandler=p,exports.createOptionsHandler=d,exports.createSqlHandler=m,exports.createSuggestHandler=y,exports.createValidateHandler=b;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../utils-CeveyqY3.cjs"),t=require("../compiler-ia3Lmjpw.cjs"),n=require("../mcp-transport-6CWmHVtJ.cjs"),r=require("../core-ClA09uBX.cjs");let i=require("next/server");function a(e,t){let r=new TextEncoder,a=n._(),o=new ReadableStream({start(e){e.enqueue(r.encode(n.x({jsonrpc:`2.0`,method:`mcp/ready`,params:{protocol:`streamable-http`}},a,15e3)))}}),s=new Headers({"Content-Type":`text/event-stream`,"Cache-Control":`no-cache`,Connection:`keep-alive`});return t(e,s),new i.NextResponse(o,{status:200,headers:s})}function o(e){if(e.semanticLayer)return e.semanticLayer;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 s(e){return{extractSecurityContext:async(t,n)=>{let i=await e.extractSecurityContext(t,n),a=r.s(e=>t.headers.get(e));return r.c(i,a)},cors:e.cors?{...e.cors,allowedHeaders:r.o(e.cors.allowedHeaders)}:void 0}}function c(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 l(e){let t=o(e),n=r.t({semanticLayer:t,onError:e=>{process.env.NODE_ENV!==`test`&&console.error(`Next.js handler error:`,e)},mcp:e.mcp}),i=e.cors?{...e.cors,allowedHeaders:r.o(e.cors.allowedHeaders)}:void 0;return{httpHandler:n,corsHeaders:e=>i?c(e,i):{},baseContext:(t,n)=>()=>e.extractSecurityContext(t,n)}}function u(e,t){let n={};return{getHeader:t=>e.headers.get(t)??void 0,getBody:async()=>{try{return await e.json()}catch{return null}},getQueryParam:t=>e.nextUrl.searchParams.get(t)??void 0,send:(e,r)=>i.NextResponse.json(r,{status:e,headers:{...t,...n}}),setHeader:(e,t)=>{n[e]=t},sendEmpty:e=>new i.NextResponse(null,{status:e,headers:{...t,...n}}),sendSse:(e,r)=>new i.NextResponse(r,{status:e,headers:{"Content-Type":`text/event-stream`,"Cache-Control":`no-cache`,Connection:`keep-alive`,...t,...n}})}}function d(e){return async function(t){let n=c(t,{...e,allowedHeaders:r.o(e.allowedHeaders)});return new Response(null,{status:200,headers:n})}}function f(t){let{httpHandler:n,corsHeaders:r,baseContext:a}=l(t);return async function(t,o){let s=u(t,r(t));return t.method===`POST`?n.handleLoadPost(s,a(t,o)):t.method===`GET`?n.handleLoadGet(s,a(t,o)):i.NextResponse.json(e.i(`Method not allowed`,405),{status:405})}}function p(e){let{httpHandler:t,corsHeaders:n,baseContext:r}=l(e);return async function(e,i){return t.handleMetaGet(u(e,n(e)),r(e,i))}}function m(t){let{httpHandler:n,corsHeaders:r,baseContext:a}=l(t);return async function(t,o){let s=u(t,r(t));return t.method===`POST`?n.handleSqlPost(s,a(t,o)):t.method===`GET`?n.handleSqlGet(s,a(t,o)):i.NextResponse.json(e.i(`Method not allowed`,405),{status:405})}}function h(e){let{httpHandler:t,corsHeaders:n,baseContext:r}=l(e);return async function(e,a){let o=u(e,n(e));return e.method===`POST`?t.handleDryRunPost(o,r(e,a)):e.method===`GET`?t.handleDryRunGet(o,r(e,a)):i.NextResponse.json({error:`Method not allowed`,valid:!1},{status:405})}}function g(t){let{httpHandler:n,corsHeaders:r,baseContext:a}=l(t);return async function(t,o){return t.method===`POST`?n.handleBatchPost(u(t,r(t)),a(t,o)):i.NextResponse.json(e.i(`Method not allowed - use POST`,405),{status:405})}}function _(e){let{httpHandler:t,corsHeaders:n,baseContext:r}=l(e);return async function(e,a){return e.method===`POST`?t.handleExplainPost(u(e,n(e)),r(e,a)):i.NextResponse.json({error:`Method not allowed`},{status:405})}}function v(t){let{extractSecurityContext:n,cors:r}=s(t),a=o(t);return async function(t,o){try{if(t.method!==`POST`)return i.NextResponse.json(e.i(`Method not allowed - use POST`,405),{status:405});let s=await t.json(),l=await n(t,o),u=await e.p(a,l,s);return i.NextResponse.json(u,{headers:r?c(t,r):{}})}catch(t){return process.env.NODE_ENV!==`test`&&console.error(`Next.js discover handler error:`,t),i.NextResponse.json(e.i(t instanceof Error?t.message:`Discovery failed`,500),{status:500})}}}function y(t){let{extractSecurityContext:n,cors:r}=s(t),a=o(t);return async function(t,o){try{if(t.method!==`POST`)return i.NextResponse.json(e.i(`Method not allowed - use POST`,405),{status:405});let s=await t.json();if(!s.naturalLanguage)return i.NextResponse.json(e.i(`naturalLanguage field is required`,400),{status:400});let l=await n(t,o),u=await e.d(a,l,s);return i.NextResponse.json(u,{headers:r?c(t,r):{}})}catch(t){return process.env.NODE_ENV!==`test`&&console.error(`Next.js suggest handler error:`,t),i.NextResponse.json(e.i(t instanceof Error?t.message:`Query suggestion failed`,500),{status:500})}}}function b(t){let{extractSecurityContext:n,cors:r}=s(t),a=o(t);return async function(t,o){try{if(t.method!==`POST`)return i.NextResponse.json(e.i(`Method not allowed - use POST`,405),{status:405});let s=await t.json();if(!s.query)return i.NextResponse.json(e.i(`query field is required`,400),{status:400});let l=await n(t,o),u=await e.f(a,l,s);return i.NextResponse.json(u,{headers:r?c(t,r):{}})}catch(t){return process.env.NODE_ENV!==`test`&&console.error(`Next.js validate handler error:`,t),i.NextResponse.json(e.i(t instanceof Error?t.message:`Query validation failed`,500),{status:500})}}}function x(t){let{extractSecurityContext:n,cors:r}=s(t),a=o(t);return async function(t,o){try{if(t.method!==`POST`)return i.NextResponse.json(e.i(`Method not allowed - use POST`,405),{status:405});let s=await t.json();if(!s.query)return i.NextResponse.json(e.i(`query field is required`,400),{status:400});let l=await n(t,o),u=await e.m(a,l,s);return i.NextResponse.json(u,{headers:r?c(t,r):{}})}catch(t){return process.env.NODE_ENV!==`test`&&console.error(`Next.js MCP load handler error:`,t),i.NextResponse.json(e.i(t instanceof Error?t.message:`Query execution failed`,500),{status:500})}}}function S(t){let{httpHandler:r,corsHeaders:o,baseContext:s}=l(t),{mcp:c={enabled:!0}}=t,d=(e,t)=>{Object.entries(o(e)).forEach(([e,n])=>t.set(e,n))};return async function(t,l){if(c.resourceMetadataUrl&&!n.l(t.headers.get(`authorization`)))return i.NextResponse.json({error:`Bearer token required`},{status:401,headers:{"WWW-Authenticate":n.s(c.resourceMetadataUrl)}});if(t.method===`DELETE`||t.method===`GET`){let e=n.C(t.headers.get(`origin`),n.h(c));if(!e.valid)return i.NextResponse.json({error:e.reason},{status:403})}return t.method===`DELETE`?i.NextResponse.json({error:`Session termination not supported`},{status:405}):t.method===`GET`?a(t,d):t.method===`POST`?r.handleMcpPost(u(t,o(t)),s(t,l)):i.NextResponse.json(e.i(`Method not allowed - use POST`,405),{status:405})}}function C(e){let{cors:t}=s(e),{agent:n}=e;if(!n)throw Error(`agent config is required for createAgentChatHandler`);let a=o(e);return async function(o,s){try{if(o.method!==`POST`)return i.NextResponse.json({error:`Method not allowed - use POST`},{status:405});let{handleAgentChat:l}=await Promise.resolve().then(()=>require("../handler-TCnGdCyr.cjs")),{message:u,sessionId:d,history:f}=await o.json();if(!u||typeof u!=`string`)return i.NextResponse.json({error:`message is required and must be a string`},{status:400});let p=(n.apiKey||``).trim();if(n.allowClientApiKey){let e=o.headers.get(`x-agent-api-key`);e&&(p=e.trim())}if(!p)return i.NextResponse.json({error:`No API key configured. Set agent.apiKey in server config or send X-Agent-Api-Key header.`},{status:401});let m=n.allowClientApiKey&&o.headers.get(`x-agent-provider`)||void 0,h=n.allowClientApiKey&&o.headers.get(`x-agent-model`)||void 0,g=n.allowClientApiKey&&o.headers.get(`x-agent-provider-endpoint`)||void 0,_=r.r(await e.extractSecurityContext(o,s),e=>o.headers.get(e)??void 0),v=n.buildSystemContext?.(_),y=new TextEncoder,b=new ReadableStream({async start(e){try{let t=l({message:u,sessionId:d,history:f,semanticLayer:a,securityContext:_,agentConfig:n,apiKey:p,systemContext:v,providerOverride:m,modelOverride:h,baseURLOverride:g});for await(let n of t){let t=`data: ${JSON.stringify(n)}\n\n`;e.enqueue(y.encode(t))}}catch(t){let n={type:`error`,data:{message:t instanceof Error?t.message:`Stream failed`}};e.enqueue(y.encode(`data: ${JSON.stringify(n)}\n\n`))}finally{e.close()}}}),x=new Headers({"Content-Type":`text/event-stream`,"Cache-Control":`no-cache`,Connection:`keep-alive`});if(t){let e=c(o,t);Object.entries(e).forEach(([e,t])=>x.set(e,t))}return new Response(b,{status:200,headers:x})}catch(e){return process.env.NODE_ENV!==`test`&&console.error(`Next.js agent chat handler error:`,e),i.NextResponse.json({error:e instanceof Error?e.message:`Agent chat failed`},{status:500})}}}function w(e){let{mcp:t={enabled:!0}}=e,n=o(e),r={...e,semanticLayer:n},i={load:f(r),meta:p(r),sql:m(r),dryRun:h(r),batch:g(r),explain:_(r)};return t.enabled!==!1&&(i.mcpRpc=S(r)),e.agent&&(i.agentChat=C(r)),i}exports.createAgentChatHandler=C,exports.createBatchHandler=g,exports.createCubeHandlers=w,exports.createDiscoverHandler=v,exports.createDryRunHandler=h,exports.createExplainHandler=_,exports.createLoadHandler=f,exports.createMcpLoadHandler=x,exports.createMcpRpcHandler=S,exports.createMetaHandler=p,exports.createOptionsHandler=d,exports.createSqlHandler=m,exports.createSuggestHandler=y,exports.createValidateHandler=b;
@@ -1,7 +1,7 @@
1
- import { d as e, f as t, i as n, m as r, p as i } from "../utils-BaxFceDq.js";
2
- import { t as a } from "../compiler-BhityGUO.js";
3
- import { C as o, _ as s, h as c, l, s as u, x as d } from "../mcp-transport-Cy6n4uj1.js";
4
- import { c as f, o as p, r as m, s as h, t as g } from "../core-xZE0miIu.js";
1
+ import { d as e, f as t, i as n, m as r, p as i } from "../utils-B3_hJWlf.js";
2
+ import { t as a } from "../compiler-Cfy_zqyJ.js";
3
+ import { C as o, _ as s, h as c, l, s as u, x as d } from "../mcp-transport-cd2BlW-Z.js";
4
+ import { c as f, o as p, r as m, s as h, t as g } from "../core-D4mTEaeK.js";
5
5
  import { NextResponse as _ } from "next/server";
6
6
  //#region src/adapters/nextjs/mcp-handler.ts
7
7
  function v(e, t) {
@@ -243,7 +243,7 @@ function I(e) {
243
243
  return async function(i, a) {
244
244
  try {
245
245
  if (i.method !== "POST") return _.json({ error: "Method not allowed - use POST" }, { status: 405 });
246
- let { handleAgentChat: o } = await import("../handler-ByeQ0-1r.js"), { message: s, sessionId: c, history: l } = await i.json();
246
+ let { handleAgentChat: o } = await import("../handler-Bnp5LEMQ.js"), { message: s, sessionId: c, history: l } = await i.json();
247
247
  if (!s || typeof s != "string") return _.json({ error: "message is required and must be a string" }, { status: 400 });
248
248
  let u = (n.apiKey || "").trim();
249
249
  if (n.allowClientApiKey) {
@@ -1,4 +1,4 @@
1
- import { _t as e, bt as t, vt as n } from "./utils-BaxFceDq.js";
1
+ import { _t as e, bt as t, vt as n } from "./utils-B3_hJWlf.js";
2
2
  //#region node_modules/openai/internal/tslib.mjs
3
3
  function r(e, t, n, r, i) {
4
4
  if (r === "m") throw TypeError("Private method is not writable");
@@ -1 +1 @@
1
- function*e(e,t){let n=e.index??0;if(e.id&&(t.set(n,{id:e.id,name:e.function?.name||``,arguments:``}),yield{type:`tool_use_start`,id:e.id,name:e.function?.name||``}),e.function?.name&&t.has(n)){let r=t.get(n);r.name||=e.function.name}if(e.function?.arguments){let r=t.get(n);r&&(r.arguments+=e.function.arguments,yield{type:`tool_input_delta`,json:e.function.arguments})}}function*t(e,t){for(let[e,n]of t){let r={},i=!1;try{n.arguments&&(r=JSON.parse(n.arguments))}catch{i=!0}yield{type:`tool_use_end`,id:n.id,input:r,parseError:i},t.delete(e)}yield{type:`message_meta`,stopReason:e}}function*n(n,r){n.usage&&(yield{type:`message_meta`,inputTokens:n.usage.prompt_tokens,outputTokens:n.usage.completion_tokens,stopReason:``});let i=n.choices?.[0];if(!i)return;let a=i.delta;if(a){if(a.content&&(yield{type:`text_delta`,text:a.content}),a.tool_calls)for(let t of a.tool_calls)yield*e(t,r);i.finish_reason&&(yield*t(i.finish_reason,r))}}var r=class{client;apiKey;baseURL;initialized=!1;constructor(e,t){this.apiKey=e,this.baseURL=t?.baseURL}async ensureClient(){if(this.initialized)return;let e;try{let t=await Promise.resolve().then(()=>require("./openai-BQl0yJCS.cjs"));e=t.default||t.OpenAI||t}catch{throw Error(`openai is required for the OpenAI provider. Install it with: npm install openai`)}let t={apiKey:this.apiKey};this.baseURL&&(t.baseURL=this.baseURL),this.client=new e(t),this.initialized=!0}async createStream(e){await this.ensureClient();let{messages:t}=this.formatMessages(e.messages,e.system);return this.client.chat.completions.create({model:e.model,max_completion_tokens:e.maxTokens,tools:this.formatTools(e.tools),messages:t,stream:!0,stream_options:{include_usage:!0}})}async*parseStreamEvents(e){let t=new Map;for await(let r of e)yield*n(r,t)}formatTools(e){return e.map(e=>({type:`function`,function:{name:e.name,description:e.description,parameters:e.parameters}}))}formatMessages(e,t){let n=[{role:`system`,content:t}];for(let t of e)if(t.role===`user`)n.push({role:`user`,content:typeof t.content==`string`?t.content:JSON.stringify(t.content)});else if(t.role===`assistant`){if(typeof t.content==`string`)n.push({role:`assistant`,content:t.content});else{let e=t.content,r=e.filter(e=>e.type===`text`).map(e=>e.text).join(``),i=e.filter(e=>e.type===`tool_use`).map(e=>({id:e.id,type:`function`,function:{name:e.name,arguments:JSON.stringify(e.input||{})}})),a={role:`assistant`};r&&(a.content=r),i.length>0&&(a.tool_calls=i),n.push(a)}}else t.role===`tool`?n.push(t):t.role===`tool_result`&&n.push({role:`user`,content:typeof t.content==`string`?t.content:JSON.stringify(t.content)});return{messages:n}}formatToolResults(e){return e.map(e=>({role:`tool`,tool_call_id:e.toolUseId,content:e.content}))}shouldContinue(e){return e===`tool_calls`}isTruncated(e){return e===`length`}formatError(e){if(!e||!(e instanceof Error))return`Something went wrong. Please try again.`;let t=e.message||``,n=e;return n.status===429?`Too many requests. Please wait a moment and try again.`:n.status===401?`Authentication failed. Please check your API key configuration.`:n.status===503||n.status===502?`The AI service is temporarily unavailable. Please try again in a moment.`:n.status===400?`There was a problem with the request. Please try again.`:t.startsWith(`{`)||t.startsWith(`Error: {`)?`The AI service encountered an error. Please try again.`:t}};exports.OpenAIProvider=r;
1
+ function*e(e,t){let n=e.index??0;if(e.id&&(t.set(n,{id:e.id,name:e.function?.name||``,arguments:``}),yield{type:`tool_use_start`,id:e.id,name:e.function?.name||``}),e.function?.name&&t.has(n)){let r=t.get(n);r.name||=e.function.name}if(e.function?.arguments){let r=t.get(n);r&&(r.arguments+=e.function.arguments,yield{type:`tool_input_delta`,json:e.function.arguments})}}function*t(e,t){for(let[e,n]of t){let r={},i=!1;try{n.arguments&&(r=JSON.parse(n.arguments))}catch{i=!0}yield{type:`tool_use_end`,id:n.id,input:r,parseError:i},t.delete(e)}yield{type:`message_meta`,stopReason:e}}function*n(n,r){n.usage&&(yield{type:`message_meta`,inputTokens:n.usage.prompt_tokens,outputTokens:n.usage.completion_tokens,stopReason:``});let i=n.choices?.[0];if(!i)return;let a=i.delta;if(a){if(a.content&&(yield{type:`text_delta`,text:a.content}),a.tool_calls)for(let t of a.tool_calls)yield*e(t,r);i.finish_reason&&(yield*t(i.finish_reason,r))}}var r=class{client;apiKey;baseURL;initialized=!1;constructor(e,t){this.apiKey=e,this.baseURL=t?.baseURL}async ensureClient(){if(this.initialized)return;let e;try{let t=await Promise.resolve().then(()=>require("./openai-yJ8nX3dq.cjs"));e=t.default||t.OpenAI||t}catch{throw Error(`openai is required for the OpenAI provider. Install it with: npm install openai`)}let t={apiKey:this.apiKey};this.baseURL&&(t.baseURL=this.baseURL),this.client=new e(t),this.initialized=!0}async createStream(e){await this.ensureClient();let{messages:t}=this.formatMessages(e.messages,e.system);return this.client.chat.completions.create({model:e.model,max_completion_tokens:e.maxTokens,tools:this.formatTools(e.tools),messages:t,stream:!0,stream_options:{include_usage:!0}})}async*parseStreamEvents(e){let t=new Map;for await(let r of e)yield*n(r,t)}formatTools(e){return e.map(e=>({type:`function`,function:{name:e.name,description:e.description,parameters:e.parameters}}))}formatMessages(e,t){let n=[{role:`system`,content:t}];for(let t of e)if(t.role===`user`)n.push({role:`user`,content:typeof t.content==`string`?t.content:JSON.stringify(t.content)});else if(t.role===`assistant`){if(typeof t.content==`string`)n.push({role:`assistant`,content:t.content});else{let e=t.content,r=e.filter(e=>e.type===`text`).map(e=>e.text).join(``),i=e.filter(e=>e.type===`tool_use`).map(e=>({id:e.id,type:`function`,function:{name:e.name,arguments:JSON.stringify(e.input||{})}})),a={role:`assistant`};r&&(a.content=r),i.length>0&&(a.tool_calls=i),n.push(a)}}else t.role===`tool`?n.push(t):t.role===`tool_result`&&n.push({role:`user`,content:typeof t.content==`string`?t.content:JSON.stringify(t.content)});return{messages:n}}formatToolResults(e){return e.map(e=>({role:`tool`,tool_call_id:e.toolUseId,content:e.content}))}shouldContinue(e){return e===`tool_calls`}isTruncated(e){return e===`length`}formatError(e){if(!e||!(e instanceof Error))return`Something went wrong. Please try again.`;let t=e.message||``,n=e;return n.status===429?`Too many requests. Please wait a moment and try again.`:n.status===401?`Authentication failed. Please check your API key configuration.`:n.status===503||n.status===502?`The AI service is temporarily unavailable. Please try again in a moment.`:n.status===400?`There was a problem with the request. Please try again.`:t.startsWith(`{`)||t.startsWith(`Error: {`)?`The AI service encountered an error. Please try again.`:t}};exports.OpenAIProvider=r;
@@ -73,7 +73,7 @@ var r = class {
73
73
  try {
74
74
  let t = await import(
75
75
  /* webpackIgnore: true */
76
- "./openai-D3Nt6Bj7.js"
76
+ "./openai-CIIYPf0X.js"
77
77
  );
78
78
  e = t.default || t.OpenAI || t;
79
79
  } catch {
@@ -1,4 +1,4 @@
1
- const e=require("./utils-a2p2B6x8.cjs");function t(e,t,n,r,i){if(r===`m`)throw TypeError(`Private method is not writable`);if(r===`a`&&!i)throw TypeError(`Private accessor was defined without a setter`);if(typeof t==`function`?e!==t||!i:!t.has(e))throw TypeError(`Cannot write private member to an object whose class did not declare it`);return r===`a`?i.call(e,n):i?i.value=n:t.set(e,n),n}function n(e,t,n,r){if(n===`a`&&!r)throw TypeError(`Private accessor was defined without a getter`);if(typeof t==`function`?e!==t||!r:!t.has(e))throw TypeError(`Cannot read private member from an object whose class did not declare it`);return n===`m`?r:n===`a`?r.call(e):r?r.value:t.get(e)}var r=function(){let{crypto:e}=globalThis;if(e?.randomUUID)return r=e.randomUUID.bind(e),e.randomUUID();let t=new Uint8Array(1),n=e?()=>e.getRandomValues(t)[0]:()=>Math.random()*255&255;return`10000000-1000-4000-8000-100000000000`.replace(/[018]/g,e=>(+e^n()&15>>e/4).toString(16))};function i(e){return typeof e==`object`&&!!e&&(`name`in e&&e.name===`AbortError`||`message`in e&&String(e.message).includes(`FetchRequestCanceledException`))}var a=e=>{if(e instanceof Error)return e;if(typeof e==`object`&&e){try{if(Object.prototype.toString.call(e)===`[object Error]`){let t=`cause`in e,n=Error(e.message,t?{cause:e.cause}:{});return e.stack&&(n.stack=e.stack),t&&!Object.prototype.hasOwnProperty.call(n,`cause`)&&(n.cause=e.cause),e.name&&(n.name=e.name),n}}catch{}try{return Error(JSON.stringify(e))}catch{}}return Error(e)},o=class extends Error{},s=class e extends o{constructor(t,n,r,i){super(`${e.makeMessage(t,n,r)}`),this.status=t,this.headers=i,this.requestID=i?.get(`x-request-id`),this.error=n;let a=n;this.code=a?.code,this.param=a?.param,this.type=a?.type}static makeMessage(e,t,n){let r=t?.message?typeof t.message==`string`?t.message:JSON.stringify(t.message):t?JSON.stringify(t):n;return e&&r?`${e} ${r}`:e?`${e} status code (no body)`:r||`(no status code or body)`}static generate(t,n,r,i){if(!t||!i)return new l({message:r,cause:a(n)});let o=n?.error;return t===400?new d(t,o,r,i):t===401?new f(t,o,r,i):t===403?new p(t,o,r,i):t===404?new m(t,o,r,i):t===409?new h(t,o,r,i):t===422?new g(t,o,r,i):t===429?new _(t,o,r,i):t>=500?new v(t,o,r,i):new e(t,o,r,i)}},c=class extends s{constructor({message:e}={}){super(void 0,void 0,e||`Request was aborted.`,void 0)}},l=class extends s{constructor({message:e,cause:t}){super(void 0,void 0,e||`Connection error.`,void 0),t&&(this.cause=t)}},u=class extends l{constructor({message:e}={}){super({message:e??`Request timed out.`})}},d=class extends s{},f=class extends s{},p=class extends s{},m=class extends s{},h=class extends s{},g=class extends s{},_=class extends s{},v=class extends s{},y=class extends o{constructor(){super(`Could not parse response content as the length limit was reached`)}},b=class extends o{constructor(){super(`Could not parse response content as the request was rejected by the content filter`)}},x=class extends Error{constructor(e){super(e)}},S=class extends s{constructor(e,t,n){let r=`OAuth2 authentication error`,i;if(t&&typeof t==`object`){let e=t;i=e.error;let n=e.error_description;n&&typeof n==`string`?r=n:i&&(r=i)}super(e,t,r,n),this.error_code=i}},C=class extends o{constructor(e,t,n){super(e),this.provider=t,this.cause=n}},w=/^[a-z][a-z0-9+.-]*:/i,ee=e=>w.test(e),T=e=>(T=Array.isArray,T(e)),te=T;function ne(e){return typeof e==`object`?e??{}:{}}function re(e){if(!e)return!0;for(let t in e)return!1;return!0}function E(e,t){return Object.prototype.hasOwnProperty.call(e,t)}function D(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}var ie=(e,t)=>{if(typeof t!=`number`||!Number.isInteger(t))throw new o(`${e} must be an integer`);if(t<0)throw new o(`${e} must be a positive integer`);return t},ae=e=>{try{return JSON.parse(e)}catch{return}},oe=(e,...t)=>new Promise((n,r)=>{let i=[...new Set(t.filter(e=>e!=null))],a,o=!1,s=()=>{for(let e of i)try{e.removeEventListener(`abort`,l)}catch{}},c=e=>{o||(o=!0,a!==void 0&&(clearTimeout(a),a=void 0),s(),e())},l=()=>{c(()=>r())};if(i.some(e=>e.aborted)){l();return}a=setTimeout(()=>{c(n)},e);for(let e of i){if(o)break;try{e.addEventListener(`abort`,l,{once:!0})}catch(e){c(()=>r(e))}}i.some(e=>e.aborted)&&l()}),se=globalThis,ce=typeof se.FinalizationRegistry==`function`?new se.FinalizationRegistry(e=>{try{e()}catch{}}):void 0,le=new WeakMap,ue=new WeakMap;function de(e,t,n){let r=ue.get(e);if(!r){let t=new Set,i=()=>{ue.delete(e);for(let e of t)n.unregister(e),e.deref()?.();t.clear()};r={callbacks:t,abort:i},e.addEventListener(`abort`,i,{once:!0}),ue.set(e,r)}let i=r;return i.callbacks.add(t),()=>{i.callbacks.delete(t),n.unregister(t),i.callbacks.size===0&&(ue.get(e)===i&&ue.delete(e),e.removeEventListener(`abort`,i.abort))}}function fe(e,t,n){e.addEventListener(`abort`,()=>t.deref()?.delete(n),{once:!0})}function pe(e,t,n){if(typeof se.WeakRef==`function`&&ce&&!n.aborted){let r=le.get(e);r||(r=new Set,le.set(e,r)),r.add(t),fe(n,new se.WeakRef(r),t)}}function me(e,t,n){if(e.aborted)return t(),()=>{};if(typeof se.WeakRef!=`function`||!ce)return e.addEventListener(`abort`,t,{once:!0}),()=>e.removeEventListener(`abort`,t);let r=new se.WeakRef(t),i=de(e,r,ce);return ce.register(t,i,r),pe(n,t,n),i}function he(){if(typeof fetch<`u`)return fetch;throw Error("`fetch` is not defined as a global; Either pass `fetch` to the client, `new OpenAI({ fetch })` or polyfill the global, `globalThis.fetch = fetch`")}function ge(...e){let t=globalThis.ReadableStream;if(t===void 0)throw Error("`ReadableStream` is not defined as a global; You will need to polyfill it, `globalThis.ReadableStream = ReadableStream`");return new t(...e)}function _e(e){let t=Symbol.asyncIterator in e?e[Symbol.asyncIterator]():e[Symbol.iterator]();return ge({start(){},async pull(e){let{done:n,value:r}=await t.next();n?e.close():e.enqueue(r)},async cancel(){await t.return?.()}})}function ve(e){if(e[Symbol.asyncIterator])return e;let t=e.getReader();return{async next(){try{let e=await t.read();return e?.done&&t.releaseLock(),e}catch(e){throw t.releaseLock(),e}},async return(){let e=t.cancel();return t.releaseLock(),await e,{done:!0,value:void 0}},[Symbol.asyncIterator](){return this}}}async function ye(e){if(typeof e!=`object`||!e)return;if(e[Symbol.asyncIterator]){await e[Symbol.asyncIterator]().return?.();return}let t=e.getReader(),n=t.cancel();t.releaseLock(),await n}var be;function xe(e){let t;return(be??=(t=new globalThis.TextEncoder,t.encode.bind(t)))(e)}var Se;function Ce(e){let t;return(Se??=(t=new globalThis.TextDecoder,t.decode.bind(t)))(e)}var we,O,k,A,Te,Ee,De,Oe=65536,ke=class{constructor(){we.add(this),O.set(this,void 0),k.set(this,void 0),A.set(this,void 0),Te.set(this,void 0),Ee.set(this,void 0),t(this,O,new Uint8Array,`f`),t(this,k,0,`f`),t(this,A,0,`f`),t(this,Te,0,`f`),t(this,Ee,!1,`f`)}decode(e){if(e==null)return[];let r;if(r=e instanceof ArrayBuffer?new Uint8Array(e):typeof e==`string`?xe(e):e,r.length===0||n(this,Ee,`f`)&&(t(this,Ee,!1,`f`),r[0]===10&&(r=r.subarray(1)),r.length===0))return[];n(this,we,`m`,De).call(this,r);let i=[],a;for(;(a=Ae(n(this,O,`f`),n(this,Te,`f`),n(this,A,`f`)))!=null;){let e=Ce(n(this,O,`f`).subarray(n(this,k,`f`),a.preceding));i.push(e),t(this,k,a.index,`f`),a.carriage&&(n(this,k,`f`)<n(this,A,`f`)&&n(this,O,`f`)[n(this,k,`f`)]===10?t(this,k,n(this,k,`f`)+1,`f`):n(this,k,`f`)===n(this,A,`f`)&&t(this,Ee,!0,`f`)),t(this,Te,n(this,k,`f`),`f`)}if(t(this,Te,n(this,A,`f`),`f`),n(this,k,`f`)===n(this,A,`f`))t(this,k,0,`f`),t(this,A,0,`f`),t(this,Te,0,`f`),n(this,O,`f`).length>Oe&&t(this,O,new Uint8Array,`f`);else if(i.length>0&&n(this,O,`f`).length>Oe){let e=n(this,A,`f`)-n(this,k,`f`);if(e<=Oe||n(this,O,`f`).length>e*4){let r=e<=Oe?Math.min(Math.max(e*2,256),Oe):e*2,i=new Uint8Array(r);i.set(n(this,O,`f`).subarray(n(this,k,`f`),n(this,A,`f`))),t(this,O,i,`f`),t(this,k,0,`f`),t(this,A,e,`f`),t(this,Te,e,`f`)}}return i}flush(){return t(this,Ee,!1,`f`),n(this,k,`f`)===n(this,A,`f`)?[]:this.decode(`
1
+ const e=require("./utils-CeveyqY3.cjs");function t(e,t,n,r,i){if(r===`m`)throw TypeError(`Private method is not writable`);if(r===`a`&&!i)throw TypeError(`Private accessor was defined without a setter`);if(typeof t==`function`?e!==t||!i:!t.has(e))throw TypeError(`Cannot write private member to an object whose class did not declare it`);return r===`a`?i.call(e,n):i?i.value=n:t.set(e,n),n}function n(e,t,n,r){if(n===`a`&&!r)throw TypeError(`Private accessor was defined without a getter`);if(typeof t==`function`?e!==t||!r:!t.has(e))throw TypeError(`Cannot read private member from an object whose class did not declare it`);return n===`m`?r:n===`a`?r.call(e):r?r.value:t.get(e)}var r=function(){let{crypto:e}=globalThis;if(e?.randomUUID)return r=e.randomUUID.bind(e),e.randomUUID();let t=new Uint8Array(1),n=e?()=>e.getRandomValues(t)[0]:()=>Math.random()*255&255;return`10000000-1000-4000-8000-100000000000`.replace(/[018]/g,e=>(+e^n()&15>>e/4).toString(16))};function i(e){return typeof e==`object`&&!!e&&(`name`in e&&e.name===`AbortError`||`message`in e&&String(e.message).includes(`FetchRequestCanceledException`))}var a=e=>{if(e instanceof Error)return e;if(typeof e==`object`&&e){try{if(Object.prototype.toString.call(e)===`[object Error]`){let t=`cause`in e,n=Error(e.message,t?{cause:e.cause}:{});return e.stack&&(n.stack=e.stack),t&&!Object.prototype.hasOwnProperty.call(n,`cause`)&&(n.cause=e.cause),e.name&&(n.name=e.name),n}}catch{}try{return Error(JSON.stringify(e))}catch{}}return Error(e)},o=class extends Error{},s=class e extends o{constructor(t,n,r,i){super(`${e.makeMessage(t,n,r)}`),this.status=t,this.headers=i,this.requestID=i?.get(`x-request-id`),this.error=n;let a=n;this.code=a?.code,this.param=a?.param,this.type=a?.type}static makeMessage(e,t,n){let r=t?.message?typeof t.message==`string`?t.message:JSON.stringify(t.message):t?JSON.stringify(t):n;return e&&r?`${e} ${r}`:e?`${e} status code (no body)`:r||`(no status code or body)`}static generate(t,n,r,i){if(!t||!i)return new l({message:r,cause:a(n)});let o=n?.error;return t===400?new d(t,o,r,i):t===401?new f(t,o,r,i):t===403?new p(t,o,r,i):t===404?new m(t,o,r,i):t===409?new h(t,o,r,i):t===422?new g(t,o,r,i):t===429?new _(t,o,r,i):t>=500?new v(t,o,r,i):new e(t,o,r,i)}},c=class extends s{constructor({message:e}={}){super(void 0,void 0,e||`Request was aborted.`,void 0)}},l=class extends s{constructor({message:e,cause:t}){super(void 0,void 0,e||`Connection error.`,void 0),t&&(this.cause=t)}},u=class extends l{constructor({message:e}={}){super({message:e??`Request timed out.`})}},d=class extends s{},f=class extends s{},p=class extends s{},m=class extends s{},h=class extends s{},g=class extends s{},_=class extends s{},v=class extends s{},y=class extends o{constructor(){super(`Could not parse response content as the length limit was reached`)}},b=class extends o{constructor(){super(`Could not parse response content as the request was rejected by the content filter`)}},x=class extends Error{constructor(e){super(e)}},S=class extends s{constructor(e,t,n){let r=`OAuth2 authentication error`,i;if(t&&typeof t==`object`){let e=t;i=e.error;let n=e.error_description;n&&typeof n==`string`?r=n:i&&(r=i)}super(e,t,r,n),this.error_code=i}},C=class extends o{constructor(e,t,n){super(e),this.provider=t,this.cause=n}},w=/^[a-z][a-z0-9+.-]*:/i,ee=e=>w.test(e),T=e=>(T=Array.isArray,T(e)),te=T;function ne(e){return typeof e==`object`?e??{}:{}}function re(e){if(!e)return!0;for(let t in e)return!1;return!0}function E(e,t){return Object.prototype.hasOwnProperty.call(e,t)}function D(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}var ie=(e,t)=>{if(typeof t!=`number`||!Number.isInteger(t))throw new o(`${e} must be an integer`);if(t<0)throw new o(`${e} must be a positive integer`);return t},ae=e=>{try{return JSON.parse(e)}catch{return}},oe=(e,...t)=>new Promise((n,r)=>{let i=[...new Set(t.filter(e=>e!=null))],a,o=!1,s=()=>{for(let e of i)try{e.removeEventListener(`abort`,l)}catch{}},c=e=>{o||(o=!0,a!==void 0&&(clearTimeout(a),a=void 0),s(),e())},l=()=>{c(()=>r())};if(i.some(e=>e.aborted)){l();return}a=setTimeout(()=>{c(n)},e);for(let e of i){if(o)break;try{e.addEventListener(`abort`,l,{once:!0})}catch(e){c(()=>r(e))}}i.some(e=>e.aborted)&&l()}),se=globalThis,ce=typeof se.FinalizationRegistry==`function`?new se.FinalizationRegistry(e=>{try{e()}catch{}}):void 0,le=new WeakMap,ue=new WeakMap;function de(e,t,n){let r=ue.get(e);if(!r){let t=new Set,i=()=>{ue.delete(e);for(let e of t)n.unregister(e),e.deref()?.();t.clear()};r={callbacks:t,abort:i},e.addEventListener(`abort`,i,{once:!0}),ue.set(e,r)}let i=r;return i.callbacks.add(t),()=>{i.callbacks.delete(t),n.unregister(t),i.callbacks.size===0&&(ue.get(e)===i&&ue.delete(e),e.removeEventListener(`abort`,i.abort))}}function fe(e,t,n){e.addEventListener(`abort`,()=>t.deref()?.delete(n),{once:!0})}function pe(e,t,n){if(typeof se.WeakRef==`function`&&ce&&!n.aborted){let r=le.get(e);r||(r=new Set,le.set(e,r)),r.add(t),fe(n,new se.WeakRef(r),t)}}function me(e,t,n){if(e.aborted)return t(),()=>{};if(typeof se.WeakRef!=`function`||!ce)return e.addEventListener(`abort`,t,{once:!0}),()=>e.removeEventListener(`abort`,t);let r=new se.WeakRef(t),i=de(e,r,ce);return ce.register(t,i,r),pe(n,t,n),i}function he(){if(typeof fetch<`u`)return fetch;throw Error("`fetch` is not defined as a global; Either pass `fetch` to the client, `new OpenAI({ fetch })` or polyfill the global, `globalThis.fetch = fetch`")}function ge(...e){let t=globalThis.ReadableStream;if(t===void 0)throw Error("`ReadableStream` is not defined as a global; You will need to polyfill it, `globalThis.ReadableStream = ReadableStream`");return new t(...e)}function _e(e){let t=Symbol.asyncIterator in e?e[Symbol.asyncIterator]():e[Symbol.iterator]();return ge({start(){},async pull(e){let{done:n,value:r}=await t.next();n?e.close():e.enqueue(r)},async cancel(){await t.return?.()}})}function ve(e){if(e[Symbol.asyncIterator])return e;let t=e.getReader();return{async next(){try{let e=await t.read();return e?.done&&t.releaseLock(),e}catch(e){throw t.releaseLock(),e}},async return(){let e=t.cancel();return t.releaseLock(),await e,{done:!0,value:void 0}},[Symbol.asyncIterator](){return this}}}async function ye(e){if(typeof e!=`object`||!e)return;if(e[Symbol.asyncIterator]){await e[Symbol.asyncIterator]().return?.();return}let t=e.getReader(),n=t.cancel();t.releaseLock(),await n}var be;function xe(e){let t;return(be??=(t=new globalThis.TextEncoder,t.encode.bind(t)))(e)}var Se;function Ce(e){let t;return(Se??=(t=new globalThis.TextDecoder,t.decode.bind(t)))(e)}var we,O,k,A,Te,Ee,De,Oe=65536,ke=class{constructor(){we.add(this),O.set(this,void 0),k.set(this,void 0),A.set(this,void 0),Te.set(this,void 0),Ee.set(this,void 0),t(this,O,new Uint8Array,`f`),t(this,k,0,`f`),t(this,A,0,`f`),t(this,Te,0,`f`),t(this,Ee,!1,`f`)}decode(e){if(e==null)return[];let r;if(r=e instanceof ArrayBuffer?new Uint8Array(e):typeof e==`string`?xe(e):e,r.length===0||n(this,Ee,`f`)&&(t(this,Ee,!1,`f`),r[0]===10&&(r=r.subarray(1)),r.length===0))return[];n(this,we,`m`,De).call(this,r);let i=[],a;for(;(a=Ae(n(this,O,`f`),n(this,Te,`f`),n(this,A,`f`)))!=null;){let e=Ce(n(this,O,`f`).subarray(n(this,k,`f`),a.preceding));i.push(e),t(this,k,a.index,`f`),a.carriage&&(n(this,k,`f`)<n(this,A,`f`)&&n(this,O,`f`)[n(this,k,`f`)]===10?t(this,k,n(this,k,`f`)+1,`f`):n(this,k,`f`)===n(this,A,`f`)&&t(this,Ee,!0,`f`)),t(this,Te,n(this,k,`f`),`f`)}if(t(this,Te,n(this,A,`f`),`f`),n(this,k,`f`)===n(this,A,`f`))t(this,k,0,`f`),t(this,A,0,`f`),t(this,Te,0,`f`),n(this,O,`f`).length>Oe&&t(this,O,new Uint8Array,`f`);else if(i.length>0&&n(this,O,`f`).length>Oe){let e=n(this,A,`f`)-n(this,k,`f`);if(e<=Oe||n(this,O,`f`).length>e*4){let r=e<=Oe?Math.min(Math.max(e*2,256),Oe):e*2,i=new Uint8Array(r);i.set(n(this,O,`f`).subarray(n(this,k,`f`),n(this,A,`f`))),t(this,O,i,`f`),t(this,k,0,`f`),t(this,A,e,`f`),t(this,Te,e,`f`)}}return i}flush(){return t(this,Ee,!1,`f`),n(this,k,`f`)===n(this,A,`f`)?[]:this.decode(`
2
2
  `)}};O=new WeakMap,k=new WeakMap,A=new WeakMap,Te=new WeakMap,Ee=new WeakMap,we=new WeakSet,De=function(e){if(n(this,A,`f`)+e.length>n(this,O,`f`).length){let r=n(this,A,`f`)-n(this,k,`f`);if(n(this,k,`f`)>=n(this,O,`f`).length/2&&r+e.length<=n(this,O,`f`).length)n(this,O,`f`).copyWithin(0,n(this,k,`f`),n(this,A,`f`));else{let i=Math.max(n(this,O,`f`).length*2,r+e.length,256),a=new Uint8Array(i);a.set(n(this,O,`f`).subarray(n(this,k,`f`),n(this,A,`f`))),t(this,O,a,`f`)}t(this,Te,n(this,Te,`f`)-n(this,k,`f`),`f`),t(this,A,r,`f`),t(this,k,0,`f`)}n(this,O,`f`).set(e,n(this,A,`f`)),t(this,A,n(this,A,`f`)+e.length,`f`)},ke.NEWLINE_CHARS=new Set([`
3
3
  `,`\r`]),ke.NEWLINE_REGEXP=/\r\n|[\n\r]/g;function Ae(e,t,n){for(let r=t;r<n;r++){if(e[r]===10)return{preceding:r,index:r+1,carriage:!1};if(e[r]===13)return{preceding:r,index:r+1,carriage:!0}}return null}function je(e){for(let t=0;t<e.length-1;t++){let n=Me(e,t);if(n>0){let r=t+n,i=Me(e,r);if(i>0)return r+i}}return-1}function Me(e,t){return e[t]===10?1:e[t]===13?e[t+1]===10?2:1:0}var Ne={off:0,error:200,warn:300,info:400,debug:500},Pe=(e,t,n)=>{if(e){if(E(Ne,e))return e;j(n).warn(`${t} was set to ${JSON.stringify(e)}, expected one of ${JSON.stringify(Object.keys(Ne))}`)}};function Fe(){}function Ie(e,t,n){return!t||Ne[e]>Ne[n]?Fe:t[e].bind(t)}var Le={error:Fe,warn:Fe,info:Fe,debug:Fe},Re=new WeakMap;function j(e){let t=e.logger,n=e.logLevel??`off`;if(!t)return Le;let r=Re.get(t);if(r&&r[0]===n)return r[1];let i={error:Ie(`error`,t,n),warn:Ie(`warn`,t,n),info:Ie(`info`,t,n),debug:Ie(`debug`,t,n)};return Re.set(t,[n,i]),i}var ze=new Set([`apikey`,`accesstoken`,`refreshtoken`,`sessiontoken`,`sessionid`,`idtoken`,`authtoken`,`authorization`,`token`,`password`,`clientsecret`,`signingsecret`,`xamzsecuritytoken`,`xamzsignature`,`xamzcredential`]);function Be(e){let t=e.toLowerCase().replace(/[-_]/gu,``);return ze.has(t)||ze.has(t.replace(/^x/u,``))}var Ve=new Set([`authorization`,`proxy-authorization`,`api-key`,`x-api-key`,`x-amz-security-token`,`cookie`,`set-cookie`,`x-session-token`,`x-session-id`,`x-auth-token`,`x-id-token`]);function He(e){return Ve.has(e.toLowerCase().replace(/_/gu,`-`))||Be(e)}function Ue(e){let t=new URL(e);t.username=``,t.password=``,t.hash=``;for(let e of t.searchParams.keys())Be(e)&&t.searchParams.set(e,`***`);return t.href}var We=e=>{if(e.options){if(e.options={...e.options},delete e.options.headers,e.options.path){let t=e.options.path,n=new URL(Ue(new URL(t,`https://redacted.invalid`).href));e.options.path=n.origin===`https://redacted.invalid`?`${t.startsWith(`/`)?`/`:``}${n.pathname.slice(1)}${n.search}`:n.href}e.options.query&&(e.options.query=Object.fromEntries(Object.entries(e.options.query).map(([e,t])=>[e,Be(e)?`***`:t])))}return e.url&&=Ue(e.url),e.headers&&=Object.fromEntries((e.headers instanceof Headers?[...e.headers]:Object.entries(e.headers)).map(([e,t])=>[e,He(e)?`***`:t])),`retryOfRequestLogID`in e&&(e.retryOfRequestLogID&&(e.retryOf=e.retryOfRequestLogID),delete e.retryOfRequestLogID),e},Ge,Ke,qe,Je;function Ye(e){return!(e instanceof s)&&i(e)}function Xe(){let e=[],t=0,n=!1;return{get length(){return e.length-t},get canceled(){return n},enqueue(t){n||e.push(t)},dequeue(){if(t===e.length)return;let n=e[t];return e[t]=void 0,t+=1,t===e.length?(e=[],t=0):t>=1024&&t*2>=e.length&&(e=e.slice(t),t=0),n},cancel(){n=!0,e.length=0,t=0}}}var Ze=class e{constructor(e,n,r){Ge.add(this),Ke.set(this,void 0),qe.set(this,!1),this.iterator=e,this.controller=n,t(this,Ke,r,`f`)}static fromSSEResponse(t,n,r,i){let a=!1,c=r?j(r):console;async function*l(){if(a)throw new o("Cannot iterate over a consumed stream, use `.tee()` to split the stream.");a=!0;let e=!1,r=!1,l=$e(t,n),u=l.return.bind(l);l.return=e=>(r||n.abort(),u(e));try{for await(let e of l){if(e.data===`[DONE]`){r=!0;break}if(e.event===null||!e.event.startsWith(`thread.`)){let n;try{n=JSON.parse(e.data)}catch{throw c.error(`Could not parse message into JSON:`),c.error(`From chunk:`),SyntaxError(`Error reading response: malformed server-sent event JSON.`)}if(e.event===`error`)throw new s(void 0,n?.error??n,void 0,t.headers);if(n&&n.error)throw new s(void 0,n.error,void 0,t.headers);yield i?{event:e.event,data:n}:n}else{let t;try{t=JSON.parse(e.data)}catch{throw c.error(`Could not parse message into JSON:`),c.error(`From chunk:`),SyntaxError(`Error reading response: malformed server-sent event JSON.`)}yield{event:e.event,data:t}}}e=!0}catch(e){if(r||Ye(e)||n.signal.aborted&&e===n.signal.reason)return;throw e}finally{e||n.abort()}}return new e(l,n,r)}static fromReadableStream(t,n,r){let a=!1;async function*s(){let e=new ke,r=t.getReader(),i=!1,a,o=()=>{a??=r.cancel(),a.catch(()=>void 0)};n.signal.addEventListener(`abort`,o,{once:!0});try{if(n.signal.aborted){o();return}for(;;){let{value:t,done:a}=await r.read();if(a){i=!0;break}if(n.signal.aborted)return;for(let r of e.decode(t)){if(n.signal.aborted)return;yield r}}if(n.signal.aborted)return;for(let t of e.flush()){if(n.signal.aborted)return;yield t}}finally{n.signal.removeEventListener(`abort`,o),i||o(),r.releaseLock()}}async function*c(){if(a)throw new o("Cannot iterate over a consumed stream, use `.tee()` to split the stream.");a=!0;let e=!1;try{for await(let e of s())if(e){let t;try{t=JSON.parse(e)}catch(e){throw e instanceof SyntaxError?SyntaxError(`Error reading response: malformed newline-delimited JSON.`):e}yield t}e=!0}catch(e){if(n.signal.aborted||i(e))return;throw e}finally{e||n.abort()}}return new e(c,n,r)}[(Ke=new WeakMap,qe=new WeakMap,Ge=new WeakSet,Symbol.asyncIterator)](){return this.iterator()}__betaTransformIterator(e){this.iterator=e(this.iterator.bind(this))}tee(){let{controller:r}=this,i=Xe(),a=Xe(),o=this.iterator(),s=e=>({next:()=>{if(e.canceled)return Promise.resolve({value:void 0,done:!0});if(e.length===0){let e=o.next();i.enqueue(e),a.enqueue(e)}return e.dequeue()},return:async()=>(e.canceled||(e.cancel(),i.canceled&&a.canceled&&await n(this,Ge,`m`,Je).call(this,o,r)),{value:void 0,done:!0})}),c=i=>{let a=new e(()=>s(i),r,n(this,Ke,`f`));return t(a,qe,!0,`f`),a};return[c(i),c(a)]}toReadableStream(){let{controller:e}=this,t,r,i=()=>r??=n(this,Ge,`m`,Je).call(this,t,e);return ge({start:async()=>{t=this[Symbol.asyncIterator]()},async pull(e){try{let{value:n,done:r}=await t.next();if(r)return e.close();let i=xe(JSON.stringify(n)+`
4
4
  `);e.enqueue(i)}catch(t){e.error(t),i().catch(()=>void 0)}},cancel:i})}};Je=async function(e,t){let r=e.return;r&&(n(this,qe,`f`)||t.abort(),await Reflect.apply(r,e,[]))};function Qe(e,t){let n=typeof e.getReader==`function`?e.getReader():void 0,r=n?{next:()=>n.read(),return:()=>n.cancel()}:ve(e)[Symbol.asyncIterator](),a={value:void 0,done:!0},o=!1,s=!1,c,l,u=()=>new Promise(e=>{l=e}),d=()=>{if(s||o)return c;s=!0;try{c=Promise.resolve(r.return?.())}catch(e){c=Promise.reject(e)}return c.catch(()=>void 0),c},f=()=>{queueMicrotask(()=>{l?.(),d()})};return{iterator:{async next(){if(t.aborted)return a;let e=u().then(()=>a);try{let n=await Promise.race([r.next(),e]);return t.aborted?a:n.done?(o=!0,a):{value:n.value,done:!1}}catch(e){if(t.aborted&&(i(e)||e===t.reason))return a;throw e}finally{l=void 0}},async return(){let e=d();if(e&&!t.aborted){let n=u();try{t.aborted||await Promise.race([e,n])}finally{l=void 0}}return a},[Symbol.asyncIterator](){return this}},start(){t.addEventListener(`abort`,f,{once:!0}),t.aborted&&f()},async cleanup(e){let r;try{t.removeEventListener(`abort`,f)}catch(e){r=e}if(!o){let n=d();if(n&&!e&&!t.aborted)try{await n}catch(e){r??=e}}if(n)try{n.releaseLock()}catch(e){r??=e}if(r!==void 0&&!e&&!t.aborted)throw r}}}async function*$e(e,t){if(!e.body)throw t.abort(),globalThis.navigator!==void 0&&globalThis.navigator.product===`ReactNative`?new o(`The default react-native fetch implementation does not support streaming. Please use expo/fetch: https://docs.expo.dev/versions/latest/sdk/expo/#expofetch-api`):new o(`Attempted to iterate over a response with no body`);let n=new nt,r=new ke,{signal:a}=t,s=Qe(e.body,a),c=!1;try{s.start();for await(let e of tt(s.iterator)){if(a.aborted)return;for(let t of r.decode(e)){if(a.aborted)return;let e=n.decode(t);e&&(yield e)}}if(a.aborted)return;for(let e of r.flush()){if(a.aborted)return;let t=n.decode(e);t&&(yield t)}if(a.aborted)return;let e=n.flush();e&&(yield e)}catch(e){if(c=!0,!a.aborted||!i(e)&&e!==a.reason)throw e}finally{await s.cleanup(c)}}var et=3;async function*tt(e){let t=new Uint8Array,n=0,r=0,i=0;for await(let a of e){if(a==null)continue;let e;if(e=a instanceof ArrayBuffer?new Uint8Array(a):typeof a==`string`?xe(a):a,r+e.length>t.length){let a=r-n;if(n>=t.length/2&&a+e.length<=t.length)t.copyWithin(0,n,r);else{let i=new Uint8Array(Math.max(t.length*2,a+e.length));i.set(t.subarray(n,r)),t=i}i-=n,n=0,r=a}t.set(e,r),r+=e.length;let o;for(;(o=je(t.subarray(i,r)))!==-1;)o+=i,yield t.slice(n,o),n=o,i=n;i=Math.max(n,r-et)}r>n&&(yield t.slice(n,r))}var nt=class{constructor(){this.event=null,this.data=[],this.chunks=[]}decode(e){if(e.endsWith(`\r`)&&(e=e.slice(0,-1)),!e){if(!this.event&&!this.data.length)return null;let e={event:this.event,data:this.data.join(`
@@ -1174,6 +1174,7 @@ var Ge = class {
1174
1174
  "chart.recordsTable.columnFormats.kind.date": "Date",
1175
1175
  "chart.recordsTable.columnFormats.kind.badge": "Badge",
1176
1176
  "chart.recordsTable.columnFormats.kind.progress": "Progress",
1177
+ "chart.recordsTable.columnFormats.kind.link": "Link",
1177
1178
  "chart.recordsTable.columnFormats.numberFormat": "Number format",
1178
1179
  "chart.recordsTable.columnFormats.granularity": "Granularity",
1179
1180
  "chart.recordsTable.columnFormats.badgeColours": "Value colours",
@@ -1186,7 +1187,15 @@ var Ge = class {
1186
1187
  "chart.recordsTable.columnFormats.progressStyle": "Style",
1187
1188
  "chart.recordsTable.columnFormats.progressStyle.bar": "Bar",
1188
1189
  "chart.recordsTable.columnFormats.progressStyle.circle": "Circle",
1190
+ "chart.recordsTable.columnFormats.progressBandColours": "Colour bands",
1191
+ "chart.recordsTable.columnFormats.progressBandColour": "Colour",
1192
+ "chart.recordsTable.columnFormats.progressBandValue": "From value",
1193
+ "chart.recordsTable.columnFormats.progressBandAdd": "Add band",
1194
+ "chart.recordsTable.columnFormats.progressBandRemove": "Remove band",
1189
1195
  "chart.recordsTable.columnFormats.header": "Header",
1196
+ "chart.recordsTable.columnFormats.linkTemplate": "URL template",
1197
+ "chart.recordsTable.columnFormats.linkTemplatePlaceholder": "/employees/{Employees.id}",
1198
+ "chart.recordsTable.columnFormats.linkTemplateHelp": "Each cell links here and shows its own value. {Cube.field} tokens fill from the row, so add each field to the query — a hidden field works too. Relative paths and http(s) URLs only.",
1190
1199
  "chart.activityGrid.dropZone.dateField.empty": "Drop a time dimension (granularity affects grid structure)",
1191
1200
  "chart.activityGrid.dropZone.valueField.empty": "Drop a measure for activity intensity",
1192
1201
  "chart.kpiNumber.dropZone.yAxis.empty": "Drop a measure here",