drizzle-cube 0.4.42 → 0.4.43

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 (183) hide show
  1. package/README.md +1 -1
  2. package/dist/adapters/express/index.cjs +1 -1
  3. package/dist/adapters/express/index.js +2 -2
  4. package/dist/adapters/fastify/index.cjs +1 -1
  5. package/dist/adapters/fastify/index.js +2 -2
  6. package/dist/adapters/{handler-dHHEEbG9.cjs → handler-BneUGY0k.cjs} +1 -1
  7. package/dist/adapters/{handler-fto6TSVn.js → handler-CiQoQsnP.js} +1 -1
  8. package/dist/adapters/hono/index.cjs +1 -1
  9. package/dist/adapters/hono/index.js +5 -5
  10. package/dist/adapters/{mcp-transport-tB5a7Het.js → mcp-transport-CC3hQOnb.js} +1099 -1338
  11. package/dist/adapters/mcp-transport-mmuPvjfR.cjs +255 -0
  12. package/dist/adapters/nextjs/index.cjs +1 -1
  13. package/dist/adapters/nextjs/index.js +2 -2
  14. package/dist/adapters/{openai-Ckpe7iU7.js → openai-CQfaz257.js} +1 -1
  15. package/dist/{server/openai-DKpZPCay.cjs → adapters/openai-CZ74gWd4.cjs} +1 -1
  16. package/dist/adapters/{openai-Bc8qwEKW.cjs → openai-DLfardui.cjs} +1 -1
  17. package/dist/adapters/{openai-DxeVtl8X.js → openai-DaxuhJLS.js} +1 -1
  18. package/dist/client/charts.js +12 -12
  19. package/dist/client/chunks/{DashboardEditModal-4zzjtZRR.js → DashboardEditModal-BTdV528l.js} +1421 -1396
  20. package/dist/client/chunks/DashboardEditModal-BTdV528l.js.map +1 -0
  21. package/dist/client/chunks/{FieldSearchModal-trURu9Sa.js → FieldSearchModal-D75vy4Wb.js} +4 -4
  22. package/dist/client/chunks/{FieldSearchModal-trURu9Sa.js.map → FieldSearchModal-D75vy4Wb.js.map} +1 -1
  23. package/dist/client/chunks/KpiDelta-Bk8bzKYM.js +2 -0
  24. package/dist/client/chunks/KpiNumber-CKF-8e_T.js +2 -0
  25. package/dist/client/chunks/KpiText-Iz1vIvu_.js +2 -0
  26. package/dist/client/chunks/{RetentionCombinedChart-B1hUYaXt.js → RetentionCombinedChart-DIhK5pD8.js} +3 -3
  27. package/dist/client/chunks/{RetentionCombinedChart-B1hUYaXt.js.map → RetentionCombinedChart-DIhK5pD8.js.map} +1 -1
  28. package/dist/client/chunks/{RetentionHeatmap-Dn2ocjVf.js → RetentionHeatmap-CyREolyP.js} +1 -1
  29. package/dist/client/chunks/{RetentionHeatmap-Dn2ocjVf.js.map → RetentionHeatmap-CyREolyP.js.map} +1 -1
  30. package/dist/client/chunks/SchemaVisualization-B1GUT-FM.js +2 -0
  31. package/dist/client/chunks/SchemaVisualizationLazy-DymwT34e.js +2 -0
  32. package/dist/client/chunks/{analysis-builder-B7XSIMkr.js → analysis-builder-C1CJ0c7L.js} +52 -52
  33. package/dist/client/chunks/{analysis-builder-B7XSIMkr.js.map → analysis-builder-C1CJ0c7L.js.map} +1 -1
  34. package/dist/client/chunks/{analysis-builder-shared-DaqtrLxd.js → analysis-builder-shared-rkjJfWLT.js} +9 -9
  35. package/dist/client/chunks/{analysis-builder-shared-DaqtrLxd.js.map → analysis-builder-shared-rkjJfWLT.js.map} +1 -1
  36. package/dist/client/chunks/{chart-activity-grid-wR2Twpo7.js → chart-activity-grid-DLktOINm.js} +2 -2
  37. package/dist/client/chunks/{chart-activity-grid-wR2Twpo7.js.map → chart-activity-grid-DLktOINm.js.map} +1 -1
  38. package/dist/client/chunks/{chart-area-e9ysnatQ.js → chart-area-BwYaflNk.js} +3 -3
  39. package/dist/client/chunks/{chart-area-e9ysnatQ.js.map → chart-area-BwYaflNk.js.map} +1 -1
  40. package/dist/client/chunks/{chart-bar-CPt67rLR.js → chart-bar-BiENfFgE.js} +4 -4
  41. package/dist/client/chunks/{chart-bar-CPt67rLR.js.map → chart-bar-BiENfFgE.js.map} +1 -1
  42. package/dist/client/chunks/{chart-box-plot-Dp_nqQen.js → chart-box-plot-BJF1tBXC.js} +3 -3
  43. package/dist/client/chunks/{chart-box-plot-Dp_nqQen.js.map → chart-box-plot-BJF1tBXC.js.map} +1 -1
  44. package/dist/client/chunks/{chart-bubble-CYQ8loeS.js → chart-bubble-DQQhGVDJ.js} +3 -3
  45. package/dist/client/chunks/{chart-bubble-CYQ8loeS.js.map → chart-bubble-DQQhGVDJ.js.map} +1 -1
  46. package/dist/client/chunks/{chart-candlestick-DTeSf7C5.js → chart-candlestick-C2UuXbLe.js} +3 -3
  47. package/dist/client/chunks/{chart-candlestick-DTeSf7C5.js.map → chart-candlestick-C2UuXbLe.js.map} +1 -1
  48. package/dist/client/chunks/{chart-config-activity-grid-BSWS08cI.js → chart-config-activity-grid-DJOU3TEz.js} +2 -2
  49. package/dist/client/chunks/{chart-config-activity-grid-BSWS08cI.js.map → chart-config-activity-grid-DJOU3TEz.js.map} +1 -1
  50. package/dist/client/chunks/{chart-config-area-DKwgcHp4.js → chart-config-area-CWnWVT6a.js} +2 -2
  51. package/dist/client/chunks/{chart-config-area-DKwgcHp4.js.map → chart-config-area-CWnWVT6a.js.map} +1 -1
  52. package/dist/client/chunks/{chart-config-bar-deTjEhap.js → chart-config-bar-C-7Dr1Ho.js} +2 -2
  53. package/dist/client/chunks/{chart-config-bar-deTjEhap.js.map → chart-config-bar-C-7Dr1Ho.js.map} +1 -1
  54. package/dist/client/chunks/{chart-config-box-plot-DU4iWk3V.js → chart-config-box-plot-mVOwmLdu.js} +2 -2
  55. package/dist/client/chunks/{chart-config-box-plot-DU4iWk3V.js.map → chart-config-box-plot-mVOwmLdu.js.map} +1 -1
  56. package/dist/client/chunks/{chart-config-bubble-B8FSHSW-.js → chart-config-bubble-BPE2CeiD.js} +2 -2
  57. package/dist/client/chunks/{chart-config-bubble-B8FSHSW-.js.map → chart-config-bubble-BPE2CeiD.js.map} +1 -1
  58. package/dist/client/chunks/{chart-config-candlestick-BGfyWFft.js → chart-config-candlestick-BSB9DRy2.js} +2 -2
  59. package/dist/client/chunks/{chart-config-candlestick-BGfyWFft.js.map → chart-config-candlestick-BSB9DRy2.js.map} +1 -1
  60. package/dist/client/chunks/{chart-config-data-table-DKRcGa8t.js → chart-config-data-table-Bhdx5Hem.js} +2 -2
  61. package/dist/client/chunks/{chart-config-data-table-DKRcGa8t.js.map → chart-config-data-table-Bhdx5Hem.js.map} +1 -1
  62. package/dist/client/chunks/{chart-config-funnel-Bt4iGFo_.js → chart-config-funnel-Cl-v-bm1.js} +2 -2
  63. package/dist/client/chunks/{chart-config-funnel-Bt4iGFo_.js.map → chart-config-funnel-Cl-v-bm1.js.map} +1 -1
  64. package/dist/client/chunks/{chart-config-gauge-Bk4Jjp3W.js → chart-config-gauge-CdrUTJMJ.js} +2 -2
  65. package/dist/client/chunks/{chart-config-gauge-Bk4Jjp3W.js.map → chart-config-gauge-CdrUTJMJ.js.map} +1 -1
  66. package/dist/client/chunks/{chart-config-heat-map-CkHsqkrY.js → chart-config-heat-map-DGE3NzoF.js} +2 -2
  67. package/dist/client/chunks/{chart-config-heat-map-CkHsqkrY.js.map → chart-config-heat-map-DGE3NzoF.js.map} +1 -1
  68. package/dist/client/chunks/{chart-config-kpi-delta-CkUX98JV.js → chart-config-kpi-delta-DMrQerUW.js} +2 -2
  69. package/dist/client/chunks/{chart-config-kpi-delta-CkUX98JV.js.map → chart-config-kpi-delta-DMrQerUW.js.map} +1 -1
  70. package/dist/client/chunks/{chart-config-kpi-number-DcxyiUgs.js → chart-config-kpi-number-DCytCytn.js} +2 -2
  71. package/dist/client/chunks/{chart-config-kpi-number-DcxyiUgs.js.map → chart-config-kpi-number-DCytCytn.js.map} +1 -1
  72. package/dist/client/chunks/{chart-config-kpi-text-DI4mj8CN.js → chart-config-kpi-text-KdKQUvHo.js} +2 -2
  73. package/dist/client/chunks/{chart-config-kpi-text-DI4mj8CN.js.map → chart-config-kpi-text-KdKQUvHo.js.map} +1 -1
  74. package/dist/client/chunks/{chart-config-line--j7-dLue.js → chart-config-line-Bl9VDAdz.js} +2 -2
  75. package/dist/client/chunks/{chart-config-line--j7-dLue.js.map → chart-config-line-Bl9VDAdz.js.map} +1 -1
  76. package/dist/client/chunks/{chart-config-markdown-DUjvVjV4.js → chart-config-markdown-BX26b94i.js} +2 -2
  77. package/dist/client/chunks/{chart-config-markdown-DUjvVjV4.js.map → chart-config-markdown-BX26b94i.js.map} +1 -1
  78. package/dist/client/chunks/{chart-config-measure-profile-B9FKBNGc.js → chart-config-measure-profile-DwtRhEFh.js} +2 -2
  79. package/dist/client/chunks/{chart-config-measure-profile-B9FKBNGc.js.map → chart-config-measure-profile-DwtRhEFh.js.map} +1 -1
  80. package/dist/client/chunks/{chart-config-pie-yU4jipl9.js → chart-config-pie-BzBcqPMJ.js} +2 -2
  81. package/dist/client/chunks/{chart-config-pie-yU4jipl9.js.map → chart-config-pie-BzBcqPMJ.js.map} +1 -1
  82. package/dist/client/chunks/{chart-config-radar-R9Fkc8wL.js → chart-config-radar-6ZOgt__z.js} +2 -2
  83. package/dist/client/chunks/{chart-config-radar-R9Fkc8wL.js.map → chart-config-radar-6ZOgt__z.js.map} +1 -1
  84. package/dist/client/chunks/{chart-config-radial-bar-DeoXfpIp.js → chart-config-radial-bar-Df6Eta7N.js} +2 -2
  85. package/dist/client/chunks/{chart-config-radial-bar-DeoXfpIp.js.map → chart-config-radial-bar-Df6Eta7N.js.map} +1 -1
  86. package/dist/client/chunks/{chart-config-sankey-CXEsxo6s.js → chart-config-sankey-DgqKBFvN.js} +2 -2
  87. package/dist/client/chunks/{chart-config-sankey-CXEsxo6s.js.map → chart-config-sankey-DgqKBFvN.js.map} +1 -1
  88. package/dist/client/chunks/{chart-config-scatter-MVUFupub.js → chart-config-scatter-D5nVLDvi.js} +2 -2
  89. package/dist/client/chunks/{chart-config-scatter-MVUFupub.js.map → chart-config-scatter-D5nVLDvi.js.map} +1 -1
  90. package/dist/client/chunks/{chart-config-sunburst-Z_gqIY5u.js → chart-config-sunburst-Ca3FX9nW.js} +2 -2
  91. package/dist/client/chunks/{chart-config-sunburst-Z_gqIY5u.js.map → chart-config-sunburst-Ca3FX9nW.js.map} +1 -1
  92. package/dist/client/chunks/{chart-config-tree-map-BD-xAeIy.js → chart-config-tree-map-Bjy4QNa3.js} +2 -2
  93. package/dist/client/chunks/{chart-config-tree-map-BD-xAeIy.js.map → chart-config-tree-map-Bjy4QNa3.js.map} +1 -1
  94. package/dist/client/chunks/{chart-config-waterfall-CHwVkXZc.js → chart-config-waterfall-C5K2eqR7.js} +2 -2
  95. package/dist/client/chunks/{chart-config-waterfall-CHwVkXZc.js.map → chart-config-waterfall-C5K2eqR7.js.map} +1 -1
  96. package/dist/client/chunks/{chart-data-table-BZ7StNWv.js → chart-data-table-2iCsn0CF.js} +1099 -933
  97. package/dist/client/chunks/chart-data-table-2iCsn0CF.js.map +1 -0
  98. package/dist/client/chunks/{chart-funnel-C9JRW79j.js → chart-funnel-poyOf7-e.js} +3 -3
  99. package/dist/client/chunks/{chart-funnel-C9JRW79j.js.map → chart-funnel-poyOf7-e.js.map} +1 -1
  100. package/dist/client/chunks/{chart-gauge-_Xdgk_qI.js → chart-gauge-D5J4gRky.js} +3 -3
  101. package/dist/client/chunks/{chart-gauge-_Xdgk_qI.js.map → chart-gauge-D5J4gRky.js.map} +1 -1
  102. package/dist/client/chunks/{chart-heat-map-BOMQeUDL.js → chart-heat-map-BAMVhLGG.js} +3 -3
  103. package/dist/client/chunks/{chart-heat-map-BOMQeUDL.js.map → chart-heat-map-BAMVhLGG.js.map} +1 -1
  104. package/dist/client/chunks/{chart-kpi-delta-C2tdpWki.js → chart-kpi-delta-KQjUIeal.js} +71 -73
  105. package/dist/client/chunks/{chart-kpi-delta-C2tdpWki.js.map → chart-kpi-delta-KQjUIeal.js.map} +1 -1
  106. package/dist/client/chunks/{chart-kpi-number-BUNKM7yg.js → chart-kpi-number-CsQgV_x3.js} +62 -63
  107. package/dist/client/chunks/{chart-kpi-number-BUNKM7yg.js.map → chart-kpi-number-CsQgV_x3.js.map} +1 -1
  108. package/dist/client/chunks/{chart-kpi-text-COF8iN0K.js → chart-kpi-text-BR0IyeUU.js} +26 -27
  109. package/dist/client/chunks/{chart-kpi-text-COF8iN0K.js.map → chart-kpi-text-BR0IyeUU.js.map} +1 -1
  110. package/dist/client/chunks/{chart-line-D3SEwXDS.js → chart-line-B5_WntY5.js} +4 -4
  111. package/dist/client/chunks/{chart-line-D3SEwXDS.js.map → chart-line-B5_WntY5.js.map} +1 -1
  112. package/dist/client/chunks/{chart-markdown-DMekYkKz.js → chart-markdown-B6bENbel.js} +2 -2
  113. package/dist/client/chunks/{chart-markdown-DMekYkKz.js.map → chart-markdown-B6bENbel.js.map} +1 -1
  114. package/dist/client/chunks/{chart-measure-profile-BPhI1Z9s.js → chart-measure-profile-yWk-obNb.js} +4 -4
  115. package/dist/client/chunks/{chart-measure-profile-BPhI1Z9s.js.map → chart-measure-profile-yWk-obNb.js.map} +1 -1
  116. package/dist/client/chunks/{chart-pie-COl3Rmdk.js → chart-pie-BodrUoHv.js} +4 -4
  117. package/dist/client/chunks/{chart-pie-COl3Rmdk.js.map → chart-pie-BodrUoHv.js.map} +1 -1
  118. package/dist/client/chunks/{chart-radar-BKZXylBB.js → chart-radar-gG3zfLud.js} +4 -4
  119. package/dist/client/chunks/{chart-radar-BKZXylBB.js.map → chart-radar-gG3zfLud.js.map} +1 -1
  120. package/dist/client/chunks/{chart-radial-bar-CMfC7SPd.js → chart-radial-bar-C2IPCV8c.js} +4 -4
  121. package/dist/client/chunks/{chart-radial-bar-CMfC7SPd.js.map → chart-radial-bar-C2IPCV8c.js.map} +1 -1
  122. package/dist/client/chunks/{chart-sankey-8nRYnupt.js → chart-sankey-BOyxfG1Q.js} +3 -3
  123. package/dist/client/chunks/{chart-sankey-8nRYnupt.js.map → chart-sankey-BOyxfG1Q.js.map} +1 -1
  124. package/dist/client/chunks/{chart-scatter-xQMa3dUt.js → chart-scatter-B8OwlsAX.js} +4 -4
  125. package/dist/client/chunks/{chart-scatter-xQMa3dUt.js.map → chart-scatter-B8OwlsAX.js.map} +1 -1
  126. package/dist/client/chunks/{chart-sunburst-BGhJ4fui.js → chart-sunburst-D9lGEOCc.js} +4 -4
  127. package/dist/client/chunks/{chart-sunburst-BGhJ4fui.js.map → chart-sunburst-D9lGEOCc.js.map} +1 -1
  128. package/dist/client/chunks/{chart-tree-map-Cn1pmrAw.js → chart-tree-map-DZaKy9he.js} +4 -4
  129. package/dist/client/chunks/{chart-tree-map-Cn1pmrAw.js.map → chart-tree-map-DZaKy9he.js.map} +1 -1
  130. package/dist/client/chunks/{chart-waterfall-C2nVN4pn.js → chart-waterfall-BCdUx4DC.js} +4 -4
  131. package/dist/client/chunks/{chart-waterfall-C2nVN4pn.js.map → chart-waterfall-BCdUx4DC.js.map} +1 -1
  132. package/dist/client/chunks/{charts-core-Cy3rHADX.js → charts-core-C5Yokk-x.js} +2 -2
  133. package/dist/client/chunks/{charts-core-Cy3rHADX.js.map → charts-core-C5Yokk-x.js.map} +1 -1
  134. package/dist/client/chunks/{core-BdWfCZ3y.js → core-DcfMGTVa.js} +2 -2
  135. package/dist/client/chunks/{core-BdWfCZ3y.js.map → core-DcfMGTVa.js.map} +1 -1
  136. package/dist/client/chunks/{dist-BWPE2m_X.js → dist-eZurnOde.js} +1 -1
  137. package/dist/client/chunks/{dist-BWPE2m_X.js.map → dist-eZurnOde.js.map} +1 -1
  138. package/dist/client/chunks/exceljs.min-CcjgM-qg.js +31986 -0
  139. package/dist/client/chunks/exceljs.min-CcjgM-qg.js.map +1 -0
  140. package/dist/client/chunks/{javascript-O1RIRkZr.js → javascript-DFvvCuoP.js} +1 -1
  141. package/dist/client/chunks/{javascript-O1RIRkZr.js.map → javascript-DFvvCuoP.js.map} +1 -1
  142. package/dist/client/chunks/{json-C5bX2tt1.js → json-BBm9TlrA.js} +1 -1
  143. package/dist/client/chunks/{json-C5bX2tt1.js.map → json-BBm9TlrA.js.map} +1 -1
  144. package/dist/client/chunks/{rolldown-runtime-lc2dmIiU.js → rolldown-runtime-CCl2IeXn.js} +5 -2
  145. package/dist/client/chunks/{schema-visualization-DVdfx6N8.js → schema-visualization-t1KiOORo.js} +261 -265
  146. package/dist/client/chunks/{schema-visualization-DVdfx6N8.js.map → schema-visualization-t1KiOORo.js.map} +1 -1
  147. package/dist/client/chunks/{sql-D2qikO5q.js → sql-k0GA6oZ_.js} +1 -1
  148. package/dist/client/chunks/{sql-D2qikO5q.js.map → sql-k0GA6oZ_.js.map} +1 -1
  149. package/dist/client/chunks/{syntaxHighlighting-BYYWYmjr.js → syntaxHighlighting-CnDujqwg.js} +2 -2
  150. package/dist/client/chunks/{syntaxHighlighting-BYYWYmjr.js.map → syntaxHighlighting-CnDujqwg.js.map} +1 -1
  151. package/dist/client/chunks/{useDebounce-Bel8J05v.js → useDebounce-CKqkM42n.js} +11 -14
  152. package/dist/client/chunks/{useDebounce-Bel8J05v.js.map → useDebounce-CKqkM42n.js.map} +1 -1
  153. package/dist/client/chunks/{useExplainAI-CxdzY2N0.js → useExplainAI-DBIfYwz-.js} +12 -12
  154. package/dist/client/chunks/{useExplainAI-CxdzY2N0.js.map → useExplainAI-DBIfYwz-.js.map} +1 -1
  155. package/dist/client/chunks/{utils-CMkS7h9x.js → utils--qCr8Yn5.js} +2 -2
  156. package/dist/client/chunks/utils--qCr8Yn5.js.map +1 -0
  157. package/dist/client/chunks/{vendor-BoWEubRu.js → vendor-BRlsCGnK.js} +46 -46
  158. package/dist/client/chunks/{vendor-BoWEubRu.js.map → vendor-BRlsCGnK.js.map} +1 -1
  159. package/dist/client/components.js +3 -3
  160. package/dist/client/hooks.js +3 -3
  161. package/dist/client/icons/types.d.ts +1 -0
  162. package/dist/client/icons.js +1 -1
  163. package/dist/client/index.d.ts +2 -1
  164. package/dist/client/index.js +168 -168
  165. package/dist/client/index.js.map +1 -1
  166. package/dist/client/providers.js +1 -1
  167. package/dist/client/schema.js +1 -1
  168. package/dist/client/types.d.ts +6 -0
  169. package/dist/client/utils/exportXlsx.d.ts +20 -0
  170. package/dist/client/utils/index.d.ts +1 -0
  171. package/dist/client/utils.js +7 -7
  172. package/dist/client-bundle-stats.html +1 -1
  173. package/dist/server/index.cjs +1 -1
  174. package/dist/server/index.js +1 -1
  175. package/dist/server/{openai-DqCEogm0.js → openai-CqZg6zYL.js} +1 -1
  176. package/dist/server/{openai-0HbLlZq6.cjs → openai-D9Zjuby1.cjs} +1 -1
  177. package/dist/{adapters/openai-C96O8M75.cjs → server/openai-DmuEbFd6.cjs} +1 -1
  178. package/dist/server/{openai-DnGeU9PT.js → openai-rwauPzCT.js} +1 -1
  179. package/package.json +6 -1
  180. package/dist/adapters/mcp-transport-ro4OL4BW.cjs +0 -255
  181. package/dist/client/chunks/DashboardEditModal-4zzjtZRR.js.map +0 -1
  182. package/dist/client/chunks/chart-data-table-BZ7StNWv.js.map +0 -1
  183. package/dist/client/chunks/utils-CMkS7h9x.js.map +0 -1
@@ -745,4 +745,4 @@ The query is validated before adding. The portlet fetches its own data.`,paramet
745
745
  [IMPORTANT: Your next response MUST start with a brief text message BEFORE any tool calls. Now call add_markdown and add_portlet to visualize these results.]`}}catch(t){let n={measures:e.measures,dimensions:e.dimensions,filters:e.filters,timeDimensions:e.timeDimensions,order:e.order,limit:e.limit,...e.funnel?{funnel:e.funnel}:{},...e.flow?{flow:e.flow}:{},...e.retention?{retention:e.retention}:{}};return{result:`Query execution failed: ${t instanceof Error?t.message:`Unknown error`}\n\nAttempted query:\n${JSON.stringify(n,null,2)}`,isError:!0}}}),r.set(`add_portlet`,async e=>{let n={number:`kpiNumber`,retention:`retentionHeatmap`}[e.chartType]??e.chartType,r;try{r=JSON.parse(e.query)}catch{return{result:"Invalid query: could not parse JSON string. Ensure `query` is a valid JSON string.",isError:!0}}let i=t.validateQuery(r);if(!i.isValid)return{result:`Invalid query — fix these errors and retry:\n${i.errors.join(`
746
746
  `)}\n\nAttempted query:\n${JSON.stringify(r,null,2)}`,isError:!0};let a=!!(r.funnel||r.flow||r.retention),o;if(a)o=e.chartConfig??{};else{let t=bc(n,e.chartConfig,r),i=yc(n,t,r);if(!i.isValid)return{result:`Chart config invalid — fix these errors and retry:\n${i.errors.join(`
747
747
  `)}`,isError:!0};o=t}let s=`portlet-${Date.now()}-${Math.random().toString(36).slice(2,7)}`,c={id:s,title:e.title,query:e.query,chartType:n,chartConfig:o,displayConfig:e.displayConfig};return{result:`Portlet "${e.title}" added to notebook (id: ${s}, chart: ${n}). [Reminder: in your next response, start with a brief sentence about what you will do next BEFORE making any tool calls.]`,sideEffect:{type:`add_portlet`,data:c}}}),r.set(`add_markdown`,async e=>{let t=`markdown-${Date.now()}-${Math.random().toString(36).slice(2,7)}`,n=e.content||e.text||e.markdown||``,r={id:t,title:e.title,content:n};return{result:`Markdown block added to notebook (id: ${t}). [Reminder: in your next response, start with a brief sentence about what you will do next BEFORE making any tool calls.]`,sideEffect:{type:`add_markdown`,data:r}}}),r.set(`save_as_dashboard`,async e=>{try{let n=e.portlets;if(!n||n.length===0)return{result:`Dashboard must contain at least one portlet.`,isError:!0};let r=[];for(let e of n){if(e.chartType===`markdown`)continue;let n=e.query;if(!n){r.push(`Portlet "${e.title}": missing query`);continue}let i;try{i=JSON.parse(n)}catch{r.push(`Portlet "${e.title}": invalid JSON query`);continue}let a=t.validateQuery(i);a.isValid||r.push(`Portlet "${e.title}": ${a.errors.join(`, `)}`)}if(r.length>0)return{result:`Dashboard has invalid portlets — fix these errors and retry:\n${r.join(`
748
- `)}`,isError:!0};let i={portlets:n.map(e=>{let t=e.chartType,n=t===`markdown`,r=n?`query`:e.analysisType||`query`,i=r===`funnel`?`funnel`:r===`flow`?`flow`:r===`retention`?`retention`:`query`,a=e.query||`{}`,o;try{o=JSON.parse(a)}catch{o={}}let s={version:1,analysisType:i,activeView:`chart`,charts:{[i]:{chartType:t,chartConfig:e.chartConfig||{},displayConfig:e.displayConfig||{}}},query:n?{}:o};return{id:e.id,title:e.title,analysisConfig:s,dashboardFilterMapping:e.dashboardFilterMapping,w:e.w,h:e.h,x:e.x,y:e.y}}),filters:e.filters,colorPalette:e.colorPalette},a=e.title;return{result:`Dashboard "${a}" created with ${i.portlets.length} portlets and ${i.filters?.length||0} filters.`,sideEffect:{type:`dashboard_saved`,data:{title:a,description:e.description,dashboardConfig:i}}}}catch(e){return{result:`Failed to save dashboard: ${e instanceof Error?e.message:`Unknown error`}`,isError:!0}}}),r}async function Tc(e,t,n){switch(e){case`anthropic`:{let{AnthropicProvider:e}=await Promise.resolve().then(()=>require(`./anthropic-DsCEX6Fm.cjs`));return new e(t)}case`openai`:{let{OpenAIProvider:e}=await Promise.resolve().then(()=>require(`./openai-0HbLlZq6.cjs`));return new e(t,n)}case`google`:{let{GoogleProvider:e}=await Promise.resolve().then(()=>require(`./google-DzQWXFwF.cjs`));return new e(t)}default:throw Error(`Unknown LLM provider: "${e}". Supported providers: anthropic, openai, google`)}}var Ec={anthropic:`claude-sonnet-4-6`,openai:`gpt-4.1-mini`,google:`gemini-3-flash-preview`};async function*Dc(e){let{message:t,history:n,semanticLayer:r,securityContext:i,agentConfig:a,apiKey:o}=e,s=e.sessionId||crypto.randomUUID(),c=a.observability,l=crypto.randomUUID(),u=Date.now(),d=e.providerOverride||a.provider||`anthropic`,f=e.modelOverride||a.model||Ec[d]||`claude-sonnet-4-6`,p=e.baseURLOverride||a.baseURL,m=a.maxTurns||25,h=a.maxTokens||4096,g;try{g=await Tc(d,o,{baseURL:p})}catch(e){console.error(`[agent] Failed to create %s provider: %s`,String(d).replace(/\n|\r/g,``),String(e instanceof Error?e.message:e).replace(/\n|\r/g,``)),yield{type:`error`,data:{message:e instanceof Error?e.message:`Failed to initialize LLM provider`}};return}let _=Cc(),v=wc({semanticLayer:r,securityContext:i}),y=_c(r.getMetadata());e.systemContext&&(y+=`\n\n## User Context\n\n${e.systemContext}`);try{c?.onChatStart?.({traceId:l,sessionId:s,message:t,model:f,historyLength:n?.length??0})}catch{}let b=[];if(n&&n.length>0){for(let e of n)if(e.role===`user`)b.push({role:`user`,content:e.content});else if(e.role===`assistant`){let t=[];if(e.content&&t.push({type:`text`,text:e.content}),e.toolCalls&&e.toolCalls.length>0){for(let n of e.toolCalls)t.push({type:`tool_use`,id:n.id,name:n.name,input:n.input||{}});b.push({role:`assistant`,content:t});let n=e.toolCalls.map(e=>({toolUseId:e.id,toolName:e.name,content:typeof e.result==`string`?e.result:JSON.stringify(e.result??``),isError:e.status===`error`})),r=g.formatToolResults(n);if(Array.isArray(r))for(let e of r)b.push(e);else b.push(r)}else t.length>0&&b.push({role:`assistant`,content:e.content})}}b.push({role:`user`,content:t});let x=0;try{for(let e=0;e<m;e++){x=e+1;let t=await g.createStream({model:f,maxTokens:h,system:y,tools:_,messages:b}),n=[],r=``,i=``,a,o,s=Date.now(),u=!1;for await(let e of g.parseStreamEvents(t)){let t=e;switch(t.type){case`text_delta`:{let e=n[n.length-1];e&&e.type===`text`?e.text=(e.text||``)+t.text:n.push({type:`text`,text:t.text}),yield{type:`text_delta`,data:t.text};break}case`tool_use_start`:if(u&&r){let e=n[n.length-1];if(e?.type===`tool_use`)try{e.input=JSON.parse(r)}catch{}}n.push({type:`tool_use`,id:t.id,name:t.name,input:{},...t.metadata?{metadata:t.metadata}:{}}),r=``,u=!0,yield{type:`tool_use_start`,data:{id:t.id,name:t.name,input:void 0}};break;case`tool_input_delta`:r+=t.json;break;case`tool_use_end`:if(t.id&&t.input){let e=n.find(e=>e.type===`tool_use`&&e.id===t.id);e&&(e.input=t.input)}else if(u){let e=n[n.length-1];if(e?.type===`tool_use`&&r){try{e.input=JSON.parse(r)}catch{e.input={}}r=``}u=!1}break;case`message_meta`:t.inputTokens!=null&&(a=t.inputTokens),t.outputTokens!=null&&(o=t.outputTokens),t.stopReason&&(i=t.stopReason);break}}try{c?.onGenerationEnd?.({traceId:l,turn:e,model:f,stopReason:i,inputTokens:a,outputTokens:o,durationMs:Date.now()-s,input:b,output:n})}catch{}if(b.push({role:`assistant`,content:n}),!g.shouldContinue(i))break;let d=[];for(let t of n){if(t.type!==`tool_use`)continue;let n=t.name,r=t.input||{},i=t.id,a=v.get(n);if(!a){d.push({toolUseId:i,toolName:n,content:`Unknown tool: ${n}`,isError:!0}),yield{type:`tool_use_result`,data:{id:i,name:n,result:`Unknown tool: ${n}`,isError:!0}};continue}let o=Date.now();try{let t=await a(r);t.sideEffect&&(yield t.sideEffect),d.push({toolUseId:i,toolName:n,content:t.result,...t.isError?{isError:!0}:{}}),yield{type:`tool_use_result`,data:{id:i,name:n,result:t.result,...t.isError?{isError:!0}:{}}};try{c?.onToolEnd?.({traceId:l,turn:e,toolName:n,toolUseId:i,isError:!!t.isError,durationMs:Date.now()-o})}catch{}}catch(t){let r=t instanceof Error?t.message:`Tool execution failed`;d.push({toolUseId:i,toolName:n,content:r,isError:!0}),yield{type:`tool_use_result`,data:{id:i,name:n,result:r,isError:!0}};try{c?.onToolEnd?.({traceId:l,turn:e,toolName:n,toolUseId:i,isError:!0,durationMs:Date.now()-o})}catch{}}}yield{type:`turn_complete`,data:{}};let p=g.formatToolResults(d);if(Array.isArray(p))for(let e of p)b.push(e);else b.push(p)}try{c?.onChatEnd?.({traceId:l,sessionId:s,totalTurns:x,durationMs:Date.now()-u})}catch{}yield{type:`done`,data:{sessionId:s||``,traceId:l}}}catch(e){try{c?.onChatEnd?.({traceId:l,sessionId:s,totalTurns:0,durationMs:Date.now()-u,error:e instanceof Error?e.message:`Unknown error`})}catch{}console.error(`[agent] Chat error (provider=%s, model=%s): %s`,String(d).replace(/\n|\r/g,``),String(f).replace(/\n|\r/g,``),String(e instanceof Error?e.message:e).replace(/\n|\r/g,``)),yield{type:`error`,data:{message:g.formatError(e)}}}}var Oc={funnel:{description:`Track conversion through sequential steps. Entities (identified by bindingKey) move through ordered steps.`,structure:{funnel:{bindingKey:`Cube.dimension - identifies entities moving through funnel`,timeDimension:`Cube.dimension - time field for ordering events`,steps:[{name:`string - human readable step name`,filter:{member:`Cube.dimension`,operator:`equals | notEquals | contains | ...`,values:[`array of filter values`]},timeToConvert:`optional - max time window e.g. "7 days"`}],dateRange:`[start, end] array OR string like "last 7 days", "last 3 months", "this quarter"`}}},flow:{description:`Analyze paths users take before/after a specific event. Shows event sequences.`,structure:{flow:{bindingKey:`Cube.dimension - identifies entities`,timeDimension:`Cube.dimension - time field for ordering`,eventDimension:`Cube.dimension - the event type field`,startingStep:{filter:{member:`Cube.dimension`,operator:`equals`,values:[`event value`]}},stepsBefore:`number - how many steps to show before starting step`,stepsAfter:`number - how many steps to show after starting step`,dateRange:`[start, end] array OR string like "last 7 days", "last 3 months", "this quarter"`}}},retention:{description:`Measure how many users return over time periods after initial activity.`,structure:{retention:{bindingKey:`Cube.dimension - identifies entities`,timeDimension:`Cube.dimension - time field for cohort assignment`,granularity:`day | week | month - period size`,periods:`number - how many periods to analyze`,dateRange:`[start, end] array OR string like "last 7 days", "last 3 months", "this quarter"`}}}};function kc(e,t){if(e.length>500||t.length>500)return e.length+t.length;let n=[];for(let e=0;e<=t.length;e++)n[e]=[e];for(let t=0;t<=e.length;t++)n[0][t]=t;for(let r=1;r<=t.length;r++)for(let i=1;i<=e.length;i++)t.charAt(r-1)===e.charAt(i-1)?n[r][i]=n[r-1][i-1]:n[r][i]=Math.min(n[r-1][i-1]+1,n[r][i-1]+1,n[r-1][i]+1);return n[t.length][e.length]}function Z(e,t){let n=e.toLowerCase().trim(),r=t.toLowerCase().trim();if(n===r)return 1;if(r.includes(n))return .9;let i=r.split(/[\s_-]+/);for(let e of i){if(e===n)return .85;if(e.startsWith(n))return .75}let a=1-kc(n,r)/Math.max(n.length,r.length);return a>.5?a*.7:0}function Ac(e,t){let n=0;for(let r of t){let t=Z(e,r);t>n&&(n=t)}return n}function jc(e){let t=new Set(`a.an.the.is.are.was.were.be.been.being.have.has.had.do.does.did.will.would.could.should.may.might.must.can.and.or.but.if.then.else.when.where.why.how.what.which.who.this.that.these.those.i.me.my.we.our.you.your.he.she.it.they.them.their.in.on.at.to.for.of.with.by.from.up.down.out.over.under.about.into.through.during.before.after.above.below.between.show.me.get.find.list.give.tell.display.want.need.see.know`.split(`.`));return e.toLowerCase().replace(/[^\w\s]/g,` `).split(/\s+/).filter(e=>e.length>2&&!t.has(e))}function Mc(e,t){let n=0,r=[],i=new Map,a=new Map;for(let o of t){let t=Z(o,e.name);t>.5&&(n+=t*2,r.includes(`name`)||r.push(`name`));let s=Z(o,e.title);if(s>.5&&(n+=s*1.5,r.includes(`title`)||r.push(`title`)),e.description){let t=Z(o,e.description);t>.3&&(n+=t,r.includes(`description`)||r.push(`description`))}if(e.exampleQuestions)for(let t of e.exampleQuestions){let e=Z(o,t);e>.3&&(n+=e*1.5,r.includes(`exampleQuestions`)||r.push(`exampleQuestions`))}for(let t of e.measures){let e=0,a=t.name.split(`.`).pop()||t.name;if(e=Math.max(e,Z(o,a)),e=Math.max(e,Z(o,t.title)),t.description&&(e=Math.max(e,Z(o,t.description)*.8)),t.synonyms&&(e=Math.max(e,Ac(o,t.synonyms))),e>.4){n+=e,r.includes(`measures`)||r.push(`measures`);let a=i.get(t.name)||0;i.set(t.name,Math.max(a,e))}}for(let t of e.dimensions){let e=0,i=t.name.split(`.`).pop()||t.name;if(e=Math.max(e,Z(o,i)),e=Math.max(e,Z(o,t.title)),t.description&&(e=Math.max(e,Z(o,t.description)*.8)),t.synonyms&&(e=Math.max(e,Ac(o,t.synonyms))),e>.4){n+=e,r.includes(`dimensions`)||r.push(`dimensions`);let i=a.get(t.name)||0;a.set(t.name,Math.max(i,e))}}}return{score:Math.min(1,n/(t.length*2)),matchedOn:r,suggestedMeasures:Array.from(i.entries()).sort((e,t)=>t[1]-e[1]).slice(0,5).map(([e])=>e),suggestedDimensions:Array.from(a.entries()).sort((e,t)=>t[1]-e[1]).slice(0,5).map(([e])=>e)}}function Nc(e){let t=!!e.meta?.eventStream,n=e.dimensions.some(e=>e.type===`time`),r=e.dimensions.some(t=>t.name.toLowerCase().includes(`id`)||t.type===`number`||e.meta?.eventStream?.bindingKey&&t.name===e.meta.eventStream.bindingKey),i=t||n&&r;return{query:!0,funnel:i,flow:i,retention:i}}function Pc(e){let t=Nc(e);if(!t.funnel&&!t.flow&&!t.retention)return;let n=[];if(e.meta?.eventStream?.bindingKey){let t=e.dimensions.find(t=>t.name===e.meta?.eventStream?.bindingKey);n.push({dimension:e.meta.eventStream.bindingKey,description:t?.description||`Configured binding key`})}for(let t of e.dimensions)(t.name.split(`.`).pop()?.toLowerCase()||``).includes(`id`)&&!n.some(e=>e.dimension===t.name)&&n.push({dimension:t.name,description:t.description||`Potential entity identifier`});let r=[];if(e.meta?.eventStream?.timeDimension){let t=e.dimensions.find(t=>t.name===e.meta?.eventStream?.timeDimension);r.push({dimension:e.meta.eventStream.timeDimension,description:t?.description||`Configured time dimension`})}for(let t of e.dimensions)t.type===`time`&&!r.some(e=>e.dimension===t.name)&&r.push({dimension:t.name,description:t.description});let i=[];for(let t of e.dimensions){let e=t.name.split(`.`).pop()?.toLowerCase()||``;t.type===`string`&&(e.includes(`type`)||e.includes(`event`)||e.includes(`status`)||e.includes(`state`)||e.includes(`action`))&&i.push({dimension:t.name,description:t.description||`Potential event type dimension`})}return{candidateBindingKeys:n,candidateTimeDimensions:r,candidateEventDimensions:i}}function Fc(e,t){let n=[];if(!t)return n;if(t.candidateBindingKeys.length>1&&n.push(`Choose bindingKey based on what entity to track through the analysis`),t.candidateEventDimensions.length>0){let e=t.candidateEventDimensions[0].dimension;n.push(`Query ${e} dimension to discover available values for funnel steps`)}return n.push(`Use /mcp/load with a standard query to discover dimension values before building analysis queries`),n}function Ic(e,t={}){let{topic:n,intent:r,limit:i=10,minScore:a=.1}=t,o=[n,r].filter(Boolean).join(` `);if(!o.trim())return e.slice(0,i).map(e=>{let t=Nc(e),n=Pc(e),r=Fc(e,n),i=t.funnel||t.flow||t.retention;return{cube:e.name,title:e.title,description:e.description,relevanceScore:1,matchedOn:[],suggestedMeasures:e.measures.slice(0,5).map(e=>e.name),suggestedDimensions:e.dimensions.slice(0,5).map(e=>e.name),capabilities:t,analysisConfig:n,hints:r.length>0?r:void 0,querySchemas:i?Oc:void 0}});let s=jc(o);if(s.length===0)return[];let c=[];for(let t of e){let{score:e,matchedOn:n,suggestedMeasures:r,suggestedDimensions:i}=Mc(t,s);if(e>=a){let a=Nc(t),o=Pc(t),s=Fc(t,o),l=a.funnel||a.flow||a.retention;c.push({cube:t.name,title:t.title,description:t.description,relevanceScore:e,matchedOn:n,suggestedMeasures:r,suggestedDimensions:i,capabilities:a,analysisConfig:o,hints:s.length>0?s:void 0,querySchemas:l?Oc:void 0})}}return c.sort((e,t)=>t.relevanceScore-e.relevanceScore).slice(0,i)}function Lc(e,t,n){let r=null;for(let i of e){if(!n||n===`measure`)for(let e of i.measures){let n=Z(t,e.name.split(`.`).pop()||e.name);n=Math.max(n,Z(t,e.title)),e.synonyms&&(n=Math.max(n,Ac(t,e.synonyms))),n>.5&&(!r||n>r.score)&&(r={field:e.name,cube:i.name,score:n,type:`measure`})}if(!n||n===`dimension`)for(let e of i.dimensions){let n=Z(t,e.name.split(`.`).pop()||e.name);n=Math.max(n,Z(t,e.title)),e.synonyms&&(n=Math.max(n,Ac(t,e.synonyms))),n>.5&&(!r||n>r.score)&&(r={field:e.name,cube:i.name,score:n,type:`dimension`})}}return r}function Rc(){let e=new Date,t=e.toISOString().split(`T`)[0],n=e=>e.toISOString().split(`T`)[0],r=e=>new Date(e.getFullYear(),e.getMonth(),1),i=e=>new Date(e.getFullYear(),0,1),a=e=>{let t=Math.floor(e.getMonth()/3);return new Date(e.getFullYear(),t*3,1)},o=e=>{let t=e.getDay(),n=e.getDate()-t+(t===0?-6:1);return new Date(e.getFullYear(),e.getMonth(),n)};return[{pattern:/\btoday\b/i,getDateRange:()=>[t,t],granularity:`day`},{pattern:/\byesterday\b/i,getDateRange:()=>{let t=new Date(e);t.setDate(t.getDate()-1);let r=n(t);return[r,r]},granularity:`day`},{pattern:/\bthis week\b/i,getDateRange:()=>[n(o(e)),t],granularity:`day`},{pattern:/\blast week\b/i,getDateRange:()=>{let t=new Date(o(e));t.setDate(t.getDate()-7);let r=new Date(t);return r.setDate(r.getDate()+6),[n(t),n(r)]},granularity:`day`},{pattern:/\bthis month\b/i,getDateRange:()=>[n(r(e)),t],granularity:`day`},{pattern:/\blast month\b/i,getDateRange:()=>{let t=new Date(e.getFullYear(),e.getMonth()-1,1),r=new Date(e.getFullYear(),e.getMonth(),0);return[n(t),n(r)]},granularity:`day`},{pattern:/\bthis quarter\b/i,getDateRange:()=>[n(a(e)),t],granularity:`month`},{pattern:/\blast quarter\b/i,getDateRange:()=>{let t=new Date(a(e));t.setMonth(t.getMonth()-3);let r=new Date(a(e));return r.setDate(r.getDate()-1),[n(t),n(r)]},granularity:`month`},{pattern:/\bthis year\b/i,getDateRange:()=>[n(i(e)),t],granularity:`month`},{pattern:/\blast year\b/i,getDateRange:()=>{let t=new Date(e.getFullYear()-1,0,1),r=new Date(e.getFullYear()-1,11,31);return[n(t),n(r)]},granularity:`month`},{pattern:/\blast (\d+) days?\b/i,getDateRange:()=>{let r=new Date(e);return r.setDate(r.getDate()-7),[n(r),t]},granularity:`day`},{pattern:/\blast (\d+) weeks?\b/i,getDateRange:()=>{let r=new Date(e);return r.setDate(r.getDate()-28),[n(r),t]},granularity:`week`},{pattern:/\blast (\d+) months?\b/i,getDateRange:()=>{let r=new Date(e);return r.setMonth(r.getMonth()-3),[n(r),t]},granularity:`month`},{pattern:/\bq([1-4])\b/i,getDateRange:()=>[n(new Date(e.getFullYear(),0,1)),n(new Date(e.getFullYear(),2,31))],granularity:`month`}]}var zc={funnel:/\b(funnel|conversion|drop.?off|steps?|journey|pipeline|stages?)\b/i,flow:/\b(flows?|paths?|sequence|before|after|next|previous|user.?journey)\b/i,retention:/\b(retention|cohort|return|churn|comeback|retained|day.?\d+)\b/i};function Bc(e){let t=e.toLowerCase();return zc.funnel.test(t)?`funnel`:zc.flow.test(t)?`flow`:zc.retention.test(t)?`retention`:`query`}function Vc(e,t){let n=t||`the relevant cube`;switch(e){case`funnel`:return[`Use /mcp/discover to get ${n} funnel configuration and schema`,`Query the event dimension to discover available event types for funnel steps`,`Build funnel query with discovered values using the schema from discover`];case`flow`:return[`Use /mcp/discover to get ${n} flow configuration and schema`,`Query the event dimension to discover available event types`,`Build flow query specifying the starting event and steps before/after`];case`retention`:return[`Use /mcp/discover to get ${n} retention configuration and schema`,`Build retention query specifying granularity (day/week/month) and number of periods`]}}function Hc(e){let t=Rc(),n=e.toLowerCase();for(let e of t){let t=n.match(e.pattern);if(t){if(t[1]&&/^\d+$/.test(t[1])){let e=parseInt(t[1],10),r=new Date,i=r.toISOString().split(`T`)[0],a=e=>e.toISOString().split(`T`)[0];if(/days?/.test(n)){let t=new Date(r);return t.setDate(t.getDate()-e),{dateRange:[a(t),i],granularity:`day`}}if(/weeks?/.test(n)){let t=new Date(r);return t.setDate(t.getDate()-e*7),{dateRange:[a(t),i],granularity:e<=4?`day`:`week`}}if(/months?/.test(n)){let t=new Date(r);return t.setMonth(t.getMonth()-e),{dateRange:[a(t),i],granularity:e<=3?`day`:`month`}}}if(/^q[1-4]$/i.test(t[0])){let e=parseInt(t[1],10),n=new Date().getFullYear(),r=(e-1)*3,i=new Date(n,r,1),a=new Date(n,r+3,0),o=e=>e.toISOString().split(`T`)[0];return{dateRange:[o(i),o(a)],granularity:`month`}}return{dateRange:e.getDateRange(),granularity:e.granularity}}}return null}function Uc(e){let t=e.toLowerCase();for(let{pattern:e,type:n}of[{pattern:/\b(total|sum|combined)\b/i,type:`sum`},{pattern:/\b(count|number of|how many)\b/i,type:`count`},{pattern:/\b(average|avg|mean)\b/i,type:`avg`},{pattern:/\b(maximum|max|highest|top)\b/i,type:`max`},{pattern:/\b(minimum|min|lowest|bottom)\b/i,type:`min`}])if(e.test(t))return{type:n,confidence:.8};return null}function Wc(e){let t=e.toLowerCase(),n=[],r=/\bby\s+(\w+(?:\s+\w+)?)/gi,i;for(;(i=r.exec(t))!==null;)n.push(i[1].trim());let a=/\bper\s+(\w+)/gi;for(;(i=a.exec(t))!==null;)n.push(i[1].trim());let o=/\bfor each\s+(\w+)/gi;for(;(i=o.exec(t))!==null;)n.push(i[1].trim());return n}function Gc(e,t,n){let r=[],i=[],a={},o=Bc(t),s;if(n){let t=e.find(e=>e.name===n);t?(s=[t],r.push(`Using specified cube: ${n}`)):(i.push(`Specified cube '${n}' not found`),s=[])}else s=Ic(e,{intent:t,limit:3}).map(t=>e.find(e=>e.name===t.cube)).filter(e=>e!==void 0),s.length>0&&r.push(`Identified relevant cubes: ${s.map(e=>e.name).join(`, `)}`);if(s.length===0){let e=o!==`query`,t=e?Vc(o,void 0):void 0;return{query:{},confidence:e?.7:0,reasoning:e?[`Detected ${o} intent from natural language`]:[`Could not identify relevant cubes for this query`],warnings:i,analysisMode:o,nextSteps:t}}let c=s[0],l=.5,u=Uc(t);u&&(r.push(`Detected ${u.type} aggregation intent`),l+=.1);let d=[],f=t.toLowerCase();for(let e of c.measures){let t=[(e.name.split(`.`).pop()||e.name).toLowerCase(),e.title.toLowerCase(),...(e.synonyms||[]).map(e=>e.toLowerCase())];for(let n of t)if(f.includes(n)){d.push(e.name),r.push(`Matched measure '${e.name}' via keyword '${n}'`),l+=.15;break}}if(d.length===0&&u){let e=c.measures.filter(e=>e.type===u.type);if(e.length>0)d.push(e[0].name),r.push(`Suggested ${e[0].name} based on ${u.type} intent`);else if(u.type===`count`){let e=c.measures.find(e=>e.type===`count`||e.type===`countDistinct`);e&&(d.push(e.name),r.push(`Suggested ${e.name} for counting`))}}d.length===0&&c.measures.length>0&&(d.push(c.measures[0].name),r.push(`Using default measure: ${c.measures[0].name}`),i.push(`Could not determine specific measure from query, using default`)),a.measures=d;let p=Wc(t),m=[];for(let e of p){let t=Lc(s,e,`dimension`);t&&(m.push(t.field),r.push(`Matched dimension '${t.field}' from grouping keyword '${e}'`),l+=.1)}for(let e of s)for(let t of e.dimensions){let e=[(t.name.split(`.`).pop()||t.name).toLowerCase(),t.title.toLowerCase(),...(t.synonyms||[]).map(e=>e.toLowerCase())];for(let n of e)if(f.includes(n)&&!m.includes(t.name)&&(f.includes(`by ${n}`)||f.includes(`per ${n}`))){m.push(t.name),r.push(`Matched dimension '${t.name}' as grouping`),l+=.1;break}}m.length>0&&(a.dimensions=m);let h=Hc(t);if(h){let e=c.dimensions.find(e=>e.type===`time`);if(e){let t={dimension:e.name,dateRange:h.dateRange};h.granularity&&(t.granularity=h.granularity),a.timeDimensions=[t],r.push(`Applied time filter: ${h.dateRange[0]} to ${h.dateRange[1]}`),l+=.15}else i.push(`Time expression found but no time dimension in cube`)}if(l=Math.min(1,l),o!==`query`){let e=s.length>0?s[0].name:void 0;return{query:{},confidence:.7,reasoning:[`Detected ${o} intent from natural language`,...e?[`Found relevant cube: ${e}`]:[]],warnings:i.length>0?i:void 0,analysisMode:o,nextSteps:Vc(o,e)}}return{query:a,confidence:l,reasoning:r,warnings:i.length>0?i:void 0,analysisMode:`query`}}function Kc(e,t){if(e.length>500||t.length>500)return e.length+t.length;let n=[];for(let e=0;e<=t.length;e++)n[e]=[e];for(let t=0;t<=e.length;t++)n[0][t]=t;for(let r=1;r<=t.length;r++)for(let i=1;i<=e.length;i++)t.charAt(r-1)===e.charAt(i-1)?n[r][i]=n[r-1][i-1]:n[r][i]=Math.min(n[r-1][i-1]+1,n[r][i-1]+1,n[r-1][i]+1);return n[t.length][e.length]}function Q(e,t){let n=null;for(let r of t){let t=Kc(e.toLowerCase(),r.toLowerCase());t<=3&&(!n||t<n.distance)&&(n={field:r,distance:t})}return n}function qc(e,t,n,r){let i=e.split(`.`);if(i.length!==2){n.push({type:`syntax_error`,message:`Invalid measure format: '${e}'. Expected 'CubeName.measureName'`,field:e});return}let[a,o]=i,s=t.find(e=>e.name===a);if(!s){let i=t.map(e=>e.name),s=Q(a,i);s?(n.push({type:`cube_not_found`,message:`Cube '${a}' not found`,field:e,suggestion:`Did you mean '${s.field}'?`,correctedValue:`${s.field}.${o}`}),r.set(e,`${s.field}.${o}`)):n.push({type:`cube_not_found`,message:`Cube '${a}' not found`,field:e,suggestion:`Available cubes: ${i.join(`, `)}`});return}if(!s.measures.some(t=>t.name===e)){let i=Lc(t,o,`measure`);if(i&&i.cube===a)n.push({type:`measure_not_found`,message:`Measure '${o}' not found on cube '${a}'`,field:e,suggestion:`Did you mean '${i.field}'?`,correctedValue:i.field}),r.set(e,i.field);else{let t=s.measures.map(e=>e.name.split(`.`).pop()),i=Q(o,t);if(i){let t=`${a}.${i.field}`;n.push({type:`measure_not_found`,message:`Measure '${o}' not found on cube '${a}'`,field:e,suggestion:`Did you mean '${i.field}'?`,correctedValue:t}),r.set(e,t)}else n.push({type:`measure_not_found`,message:`Measure '${o}' not found on cube '${a}'`,field:e,suggestion:`Available measures: ${t.slice(0,5).join(`, `)}${t.length>5?`...`:``}`})}}}function $(e,t,n,r){let i=e.split(`.`);if(i.length!==2){n.push({type:`syntax_error`,message:`Invalid dimension format: '${e}'. Expected 'CubeName.dimensionName'`,field:e});return}let[a,o]=i,s=t.find(e=>e.name===a);if(!s){let i=t.map(e=>e.name),s=Q(a,i);s?(n.push({type:`cube_not_found`,message:`Cube '${a}' not found`,field:e,suggestion:`Did you mean '${s.field}'?`,correctedValue:`${s.field}.${o}`}),r.set(e,`${s.field}.${o}`)):n.push({type:`cube_not_found`,message:`Cube '${a}' not found`,field:e,suggestion:`Available cubes: ${i.join(`, `)}`});return}if(!s.dimensions.some(t=>t.name===e)){let i=Lc(t,o,`dimension`);if(i&&i.cube===a)n.push({type:`dimension_not_found`,message:`Dimension '${o}' not found on cube '${a}'`,field:e,suggestion:`Did you mean '${i.field}'?`,correctedValue:i.field}),r.set(e,i.field);else{let t=s.dimensions.map(e=>e.name.split(`.`).pop()),i=Q(o,t);if(i){let t=`${a}.${i.field}`;n.push({type:`dimension_not_found`,message:`Dimension '${o}' not found on cube '${a}'`,field:e,suggestion:`Did you mean '${i.field}'?`,correctedValue:t}),r.set(e,t)}else n.push({type:`dimension_not_found`,message:`Dimension '${o}' not found on cube '${a}'`,field:e,suggestion:`Available dimensions: ${t.slice(0,5).join(`, `)}${t.length>5?`...`:``}`})}}}function Jc(e,t,n,r){for(let i of e){if(`and`in i&&Array.isArray(i.and)){Jc(i.and,t,n,r);continue}if(`or`in i&&Array.isArray(i.or)){Jc(i.or,t,n,r);continue}if(`member`in i){let e=i.member,a=e.split(`.`);if(a.length!==2){n.push({type:`invalid_filter`,message:`Invalid filter member format: '${e}'`,field:e});continue}let[o,s]=a,c=t.find(e=>e.name===o);if(!c){let i=Q(o,t.map(e=>e.name));i&&r.set(e,`${i.field}.${s}`),n.push({type:`cube_not_found`,message:`Cube '${o}' not found in filter`,field:e,suggestion:i?`Did you mean '${i.field}'?`:void 0,correctedValue:i?`${i.field}.${s}`:void 0});continue}let l=c.dimensions.some(t=>t.name===e),u=c.measures.some(t=>t.name===e);if(!l&&!u){let t=Q(s,[...c.dimensions.map(e=>e.name.split(`.`).pop()),...c.measures.map(e=>e.name.split(`.`).pop())]);if(t){let i=`${o}.${t.field}`;r.set(e,i),n.push({type:`invalid_filter`,message:`Filter field '${s}' not found on cube '${o}'`,field:e,suggestion:`Did you mean '${t.field}'?`,correctedValue:i})}else n.push({type:`invalid_filter`,message:`Filter field '${s}' not found on cube '${o}'`,field:e})}}}}function Yc(e,t,n,r,i){let a=e.funnel;if(a)if(a.bindingKey?typeof a.bindingKey==`string`&&$(a.bindingKey,t,n,i):n.push({type:`syntax_error`,message:`funnel.bindingKey is required`}),a.timeDimension?typeof a.timeDimension==`string`&&$(a.timeDimension,t,n,i):n.push({type:`syntax_error`,message:`funnel.timeDimension is required`}),!a.steps||!Array.isArray(a.steps))n.push({type:`syntax_error`,message:`funnel.steps array is required`});else if(a.steps.length<2)n.push({type:`syntax_error`,message:`funnel requires at least 2 steps`});else for(let e=0;e<a.steps.length;e++){let o=a.steps[e];o.name||r.push({type:`best_practice`,message:`Step ${e+1} is missing a name`,suggestion:`Add descriptive names to funnel steps`}),o.filter&&`member`in o.filter&&Jc([o.filter],t,n,i)}}function Xc(e,t,n,r,i){let a=e.flow;a&&(a.bindingKey?typeof a.bindingKey==`string`&&$(a.bindingKey,t,n,i):n.push({type:`syntax_error`,message:`flow.bindingKey is required`}),a.timeDimension?typeof a.timeDimension==`string`&&$(a.timeDimension,t,n,i):n.push({type:`syntax_error`,message:`flow.timeDimension is required`}),a.eventDimension?typeof a.eventDimension==`string`&&$(a.eventDimension,t,n,i):n.push({type:`syntax_error`,message:`flow.eventDimension is required`}),a.stepsBefore===void 0&&a.stepsAfter===void 0&&r.push({type:`best_practice`,message:`Neither stepsBefore nor stepsAfter specified`,suggestion:`Set stepsBefore and/or stepsAfter to see event sequences`}))}function Zc(e,t,n,r,i){let a=e.retention;a&&(a.bindingKey?typeof a.bindingKey==`string`&&$(a.bindingKey,t,n,i):n.push({type:`syntax_error`,message:`retention.bindingKey is required`}),a.timeDimension?typeof a.timeDimension==`string`&&$(a.timeDimension,t,n,i):n.push({type:`syntax_error`,message:`retention.timeDimension is required`}),a.granularity||r.push({type:`best_practice`,message:`retention.granularity not specified`,suggestion:`Specify granularity: "day", "week", or "month"`}),a.periods||r.push({type:`best_practice`,message:`retention.periods not specified`,suggestion:`Specify number of periods to analyze`}))}function Qc(e,t){let n=[],r=[],i=new Map;if(e.funnel)return Yc(e,t,n,r,i),{isValid:n.length===0,errors:n,warnings:r,correctedQuery:void 0};if(e.flow)return Xc(e,t,n,r,i),{isValid:n.length===0,errors:n,warnings:r,correctedQuery:void 0};if(e.retention)return Zc(e,t,n,r,i),{isValid:n.length===0,errors:n,warnings:r,correctedQuery:void 0};if(e.measures)for(let r of e.measures)qc(r,t,n,i);if(e.dimensions)for(let r of e.dimensions)$(r,t,n,i);if(e.timeDimensions)for(let a of e.timeDimensions){$(a.dimension,t,n,i);let[e]=a.dimension.split(`.`),o=t.find(t=>t.name===e);if(o){let e=o.dimensions.find(e=>e.name===a.dimension);e&&e.type!==`time`&&r.push({type:`best_practice`,message:`Dimension '${a.dimension}' is not a time type (it's '${e.type}')`,field:a.dimension,suggestion:`Use a dimension with type "time" for timeDimensions`})}}e.filters&&Jc(e.filters,t,n,i),!e.measures?.length&&!e.dimensions?.length&&n.push({type:`syntax_error`,message:`Query must have at least one measure or dimension`}),e.measures&&e.measures.length>10&&r.push({type:`performance`,message:`Query has ${e.measures.length} measures, which may impact performance`,suggestion:`Consider splitting into multiple queries`}),e.dimensions&&e.dimensions.length>5&&r.push({type:`performance`,message:`Query has ${e.dimensions.length} dimensions, which may produce many rows`,suggestion:`Consider adding filters or reducing dimensions`});let a;if(i.size>0){let t=JSON.parse(JSON.stringify(e));t.measures&&=t.measures.map(e=>i.get(e)||e),t.dimensions&&=t.dimensions.map(e=>i.get(e)||e),t.timeDimensions&&=t.timeDimensions.map(e=>({...e,dimension:i.get(e.dimension)||e.dimension})),a=t}return{isValid:n.length===0,errors:n,warnings:r,correctedQuery:i.size>0?a:void 0}}function $c(e){return new qs({drizzle:e.drizzle,schema:e.schema})}exports.BaseDatabaseExecutor=b,exports.CTEBuilder=Qe,exports.CalculatedMeasureResolver=M,exports.ComparisonQueryBuilder=st,exports.DatabendExecutor=me,exports.DrizzlePlanBuilder=Dt,exports.DrizzleSqlBuilder=Ye,exports.DuckDBExecutor=le,exports.EXPLAIN_ANALYSIS_PROMPT=sc,exports.FlowQueryBuilder=lt,exports.FunnelQueryBuilder=ct,exports.IdentityOptimiser=gt,exports.JoinPathResolver=Xe,exports.LogicalPlanBuilder=ht,exports.LogicalPlanner=Ze,exports.MemoryCacheProvider=Qs,exports.MySQLExecutor=E,exports.OptimiserPipeline=_t,exports.PostgresExecutor=C,exports.QueryExecutor=kt,exports.RetentionQueryBuilder=mt,exports.SQLiteExecutor=ne,exports.STEP0_VALIDATION_PROMPT=$s,exports.STEP1_SYSTEM_PROMPT=rc,exports.STEP2_SYSTEM_PROMPT=ac,exports.SYSTEM_PROMPT_TEMPLATE=tc,exports.SemanticLayerCompiler=qs,exports.SnowflakeExecutor=ye,exports.aiValidateQuery=Qc,exports.buildAgentSystemPrompt=_c,exports.buildExplainAnalysisPrompt=cc,exports.buildStep0Prompt=ec,exports.buildStep1Prompt=ic,exports.buildStep2Prompt=oc,exports.buildSystemPrompt=nc,exports.createDatabaseExecutor=xe,exports.createDatabendExecutor=he,exports.createDrizzleSemanticLayer=$c,exports.createDuckDBExecutor=ue,exports.createMultiCubeContext=Ee,exports.createMySQLExecutor=te,exports.createPostgresExecutor=w,exports.createSQLiteExecutor=re,exports.createSnowflakeExecutor=be,exports.createToolExecutor=wc,exports.defineCube=De,exports.discoverCubes=Ic,exports.findBestFieldMatch=Lc,exports.fnv1aHash=Be,exports.formatCubeSchemaForExplain=lc,exports.formatExistingIndexes=uc,exports.generateCacheKey=Ne,exports.getCubeInvalidationPattern=Ve,exports.getJoinType=Ce,exports.getToolDefinitions=Cc,exports.handleAgentChat=Dc,exports.normalizeQuery=Pe,exports.resolveCubeReference=k,exports.resolveSqlExpression=A,exports.suggestQuery=Gc;
748
+ `)}`,isError:!0};let i={portlets:n.map(e=>{let t=e.chartType,n=t===`markdown`,r=n?`query`:e.analysisType||`query`,i=r===`funnel`?`funnel`:r===`flow`?`flow`:r===`retention`?`retention`:`query`,a=e.query||`{}`,o;try{o=JSON.parse(a)}catch{o={}}let s={version:1,analysisType:i,activeView:`chart`,charts:{[i]:{chartType:t,chartConfig:e.chartConfig||{},displayConfig:e.displayConfig||{}}},query:n?{}:o};return{id:e.id,title:e.title,analysisConfig:s,dashboardFilterMapping:e.dashboardFilterMapping,w:e.w,h:e.h,x:e.x,y:e.y}}),filters:e.filters,colorPalette:e.colorPalette},a=e.title;return{result:`Dashboard "${a}" created with ${i.portlets.length} portlets and ${i.filters?.length||0} filters.`,sideEffect:{type:`dashboard_saved`,data:{title:a,description:e.description,dashboardConfig:i}}}}catch(e){return{result:`Failed to save dashboard: ${e instanceof Error?e.message:`Unknown error`}`,isError:!0}}}),r}async function Tc(e,t,n){switch(e){case`anthropic`:{let{AnthropicProvider:e}=await Promise.resolve().then(()=>require(`./anthropic-DsCEX6Fm.cjs`));return new e(t)}case`openai`:{let{OpenAIProvider:e}=await Promise.resolve().then(()=>require(`./openai-D9Zjuby1.cjs`));return new e(t,n)}case`google`:{let{GoogleProvider:e}=await Promise.resolve().then(()=>require(`./google-DzQWXFwF.cjs`));return new e(t)}default:throw Error(`Unknown LLM provider: "${e}". Supported providers: anthropic, openai, google`)}}var Ec={anthropic:`claude-sonnet-4-6`,openai:`gpt-4.1-mini`,google:`gemini-3-flash-preview`};async function*Dc(e){let{message:t,history:n,semanticLayer:r,securityContext:i,agentConfig:a,apiKey:o}=e,s=e.sessionId||crypto.randomUUID(),c=a.observability,l=crypto.randomUUID(),u=Date.now(),d=e.providerOverride||a.provider||`anthropic`,f=e.modelOverride||a.model||Ec[d]||`claude-sonnet-4-6`,p=e.baseURLOverride||a.baseURL,m=a.maxTurns||25,h=a.maxTokens||4096,g;try{g=await Tc(d,o,{baseURL:p})}catch(e){console.error(`[agent] Failed to create %s provider: %s`,String(d).replace(/\n|\r/g,``),String(e instanceof Error?e.message:e).replace(/\n|\r/g,``)),yield{type:`error`,data:{message:e instanceof Error?e.message:`Failed to initialize LLM provider`}};return}let _=Cc(),v=wc({semanticLayer:r,securityContext:i}),y=_c(r.getMetadata());e.systemContext&&(y+=`\n\n## User Context\n\n${e.systemContext}`);try{c?.onChatStart?.({traceId:l,sessionId:s,message:t,model:f,historyLength:n?.length??0})}catch{}let b=[];if(n&&n.length>0){for(let e of n)if(e.role===`user`)b.push({role:`user`,content:e.content});else if(e.role===`assistant`){let t=[];if(e.content&&t.push({type:`text`,text:e.content}),e.toolCalls&&e.toolCalls.length>0){for(let n of e.toolCalls)t.push({type:`tool_use`,id:n.id,name:n.name,input:n.input||{}});b.push({role:`assistant`,content:t});let n=e.toolCalls.map(e=>({toolUseId:e.id,toolName:e.name,content:typeof e.result==`string`?e.result:JSON.stringify(e.result??``),isError:e.status===`error`})),r=g.formatToolResults(n);if(Array.isArray(r))for(let e of r)b.push(e);else b.push(r)}else t.length>0&&b.push({role:`assistant`,content:e.content})}}b.push({role:`user`,content:t});let x=0;try{for(let e=0;e<m;e++){x=e+1;let t=await g.createStream({model:f,maxTokens:h,system:y,tools:_,messages:b}),n=[],r=``,i=``,a,o,s=Date.now(),u=!1;for await(let e of g.parseStreamEvents(t)){let t=e;switch(t.type){case`text_delta`:{let e=n[n.length-1];e&&e.type===`text`?e.text=(e.text||``)+t.text:n.push({type:`text`,text:t.text}),yield{type:`text_delta`,data:t.text};break}case`tool_use_start`:if(u&&r){let e=n[n.length-1];if(e?.type===`tool_use`)try{e.input=JSON.parse(r)}catch{}}n.push({type:`tool_use`,id:t.id,name:t.name,input:{},...t.metadata?{metadata:t.metadata}:{}}),r=``,u=!0,yield{type:`tool_use_start`,data:{id:t.id,name:t.name,input:void 0}};break;case`tool_input_delta`:r+=t.json;break;case`tool_use_end`:if(t.id&&t.input){let e=n.find(e=>e.type===`tool_use`&&e.id===t.id);e&&(e.input=t.input)}else if(u){let e=n[n.length-1];if(e?.type===`tool_use`&&r){try{e.input=JSON.parse(r)}catch{e.input={}}r=``}u=!1}break;case`message_meta`:t.inputTokens!=null&&(a=t.inputTokens),t.outputTokens!=null&&(o=t.outputTokens),t.stopReason&&(i=t.stopReason);break}}try{c?.onGenerationEnd?.({traceId:l,turn:e,model:f,stopReason:i,inputTokens:a,outputTokens:o,durationMs:Date.now()-s,input:b,output:n})}catch{}if(b.push({role:`assistant`,content:n}),!g.shouldContinue(i))break;let d=[];for(let t of n){if(t.type!==`tool_use`)continue;let n=t.name,r=t.input||{},i=t.id,a=v.get(n);if(!a){d.push({toolUseId:i,toolName:n,content:`Unknown tool: ${n}`,isError:!0}),yield{type:`tool_use_result`,data:{id:i,name:n,result:`Unknown tool: ${n}`,isError:!0}};continue}let o=Date.now();try{let t=await a(r);t.sideEffect&&(yield t.sideEffect),d.push({toolUseId:i,toolName:n,content:t.result,...t.isError?{isError:!0}:{}}),yield{type:`tool_use_result`,data:{id:i,name:n,result:t.result,...t.isError?{isError:!0}:{}}};try{c?.onToolEnd?.({traceId:l,turn:e,toolName:n,toolUseId:i,isError:!!t.isError,durationMs:Date.now()-o})}catch{}}catch(t){let r=t instanceof Error?t.message:`Tool execution failed`;d.push({toolUseId:i,toolName:n,content:r,isError:!0}),yield{type:`tool_use_result`,data:{id:i,name:n,result:r,isError:!0}};try{c?.onToolEnd?.({traceId:l,turn:e,toolName:n,toolUseId:i,isError:!0,durationMs:Date.now()-o})}catch{}}}yield{type:`turn_complete`,data:{}};let p=g.formatToolResults(d);if(Array.isArray(p))for(let e of p)b.push(e);else b.push(p)}try{c?.onChatEnd?.({traceId:l,sessionId:s,totalTurns:x,durationMs:Date.now()-u})}catch{}yield{type:`done`,data:{sessionId:s||``,traceId:l}}}catch(e){try{c?.onChatEnd?.({traceId:l,sessionId:s,totalTurns:0,durationMs:Date.now()-u,error:e instanceof Error?e.message:`Unknown error`})}catch{}console.error(`[agent] Chat error (provider=%s, model=%s): %s`,String(d).replace(/\n|\r/g,``),String(f).replace(/\n|\r/g,``),String(e instanceof Error?e.message:e).replace(/\n|\r/g,``)),yield{type:`error`,data:{message:g.formatError(e)}}}}var Oc={funnel:{description:`Track conversion through sequential steps. Entities (identified by bindingKey) move through ordered steps.`,structure:{funnel:{bindingKey:`Cube.dimension - identifies entities moving through funnel`,timeDimension:`Cube.dimension - time field for ordering events`,steps:[{name:`string - human readable step name`,filter:{member:`Cube.dimension`,operator:`equals | notEquals | contains | ...`,values:[`array of filter values`]},timeToConvert:`optional - max time window e.g. "7 days"`}],dateRange:`[start, end] array OR string like "last 7 days", "last 3 months", "this quarter"`}}},flow:{description:`Analyze paths users take before/after a specific event. Shows event sequences.`,structure:{flow:{bindingKey:`Cube.dimension - identifies entities`,timeDimension:`Cube.dimension - time field for ordering`,eventDimension:`Cube.dimension - the event type field`,startingStep:{filter:{member:`Cube.dimension`,operator:`equals`,values:[`event value`]}},stepsBefore:`number - how many steps to show before starting step`,stepsAfter:`number - how many steps to show after starting step`,dateRange:`[start, end] array OR string like "last 7 days", "last 3 months", "this quarter"`}}},retention:{description:`Measure how many users return over time periods after initial activity.`,structure:{retention:{bindingKey:`Cube.dimension - identifies entities`,timeDimension:`Cube.dimension - time field for cohort assignment`,granularity:`day | week | month - period size`,periods:`number - how many periods to analyze`,dateRange:`[start, end] array OR string like "last 7 days", "last 3 months", "this quarter"`}}}};function kc(e,t){if(e.length>500||t.length>500)return e.length+t.length;let n=[];for(let e=0;e<=t.length;e++)n[e]=[e];for(let t=0;t<=e.length;t++)n[0][t]=t;for(let r=1;r<=t.length;r++)for(let i=1;i<=e.length;i++)t.charAt(r-1)===e.charAt(i-1)?n[r][i]=n[r-1][i-1]:n[r][i]=Math.min(n[r-1][i-1]+1,n[r][i-1]+1,n[r-1][i]+1);return n[t.length][e.length]}function Z(e,t){let n=e.toLowerCase().trim(),r=t.toLowerCase().trim();if(n===r)return 1;if(r.includes(n))return .9;let i=r.split(/[\s_-]+/);for(let e of i){if(e===n)return .85;if(e.startsWith(n))return .75}let a=1-kc(n,r)/Math.max(n.length,r.length);return a>.5?a*.7:0}function Ac(e,t){let n=0;for(let r of t){let t=Z(e,r);t>n&&(n=t)}return n}function jc(e){let t=new Set(`a.an.the.is.are.was.were.be.been.being.have.has.had.do.does.did.will.would.could.should.may.might.must.can.and.or.but.if.then.else.when.where.why.how.what.which.who.this.that.these.those.i.me.my.we.our.you.your.he.she.it.they.them.their.in.on.at.to.for.of.with.by.from.up.down.out.over.under.about.into.through.during.before.after.above.below.between.show.me.get.find.list.give.tell.display.want.need.see.know`.split(`.`));return e.toLowerCase().replace(/[^\w\s]/g,` `).split(/\s+/).filter(e=>e.length>2&&!t.has(e))}function Mc(e,t){let n=0,r=[],i=new Map,a=new Map;for(let o of t){let t=Z(o,e.name);t>.5&&(n+=t*2,r.includes(`name`)||r.push(`name`));let s=Z(o,e.title);if(s>.5&&(n+=s*1.5,r.includes(`title`)||r.push(`title`)),e.description){let t=Z(o,e.description);t>.3&&(n+=t,r.includes(`description`)||r.push(`description`))}if(e.exampleQuestions)for(let t of e.exampleQuestions){let e=Z(o,t);e>.3&&(n+=e*1.5,r.includes(`exampleQuestions`)||r.push(`exampleQuestions`))}for(let t of e.measures){let e=0,a=t.name.split(`.`).pop()||t.name;if(e=Math.max(e,Z(o,a)),e=Math.max(e,Z(o,t.title)),t.description&&(e=Math.max(e,Z(o,t.description)*.8)),t.synonyms&&(e=Math.max(e,Ac(o,t.synonyms))),e>.4){n+=e,r.includes(`measures`)||r.push(`measures`);let a=i.get(t.name)||0;i.set(t.name,Math.max(a,e))}}for(let t of e.dimensions){let e=0,i=t.name.split(`.`).pop()||t.name;if(e=Math.max(e,Z(o,i)),e=Math.max(e,Z(o,t.title)),t.description&&(e=Math.max(e,Z(o,t.description)*.8)),t.synonyms&&(e=Math.max(e,Ac(o,t.synonyms))),e>.4){n+=e,r.includes(`dimensions`)||r.push(`dimensions`);let i=a.get(t.name)||0;a.set(t.name,Math.max(i,e))}}}return{score:Math.min(1,n/(t.length*2)),matchedOn:r,suggestedMeasures:Array.from(i.entries()).sort((e,t)=>t[1]-e[1]).slice(0,5).map(([e])=>e),suggestedDimensions:Array.from(a.entries()).sort((e,t)=>t[1]-e[1]).slice(0,5).map(([e])=>e)}}function Nc(e){let t=!!e.meta?.eventStream,n=e.dimensions.some(e=>e.type===`time`),r=e.dimensions.some(t=>t.name.toLowerCase().includes(`id`)||t.type===`number`||e.meta?.eventStream?.bindingKey&&t.name===e.meta.eventStream.bindingKey),i=t||n&&r;return{query:!0,funnel:i,flow:i,retention:i}}function Pc(e){let t=Nc(e);if(!t.funnel&&!t.flow&&!t.retention)return;let n=[];if(e.meta?.eventStream?.bindingKey){let t=e.dimensions.find(t=>t.name===e.meta?.eventStream?.bindingKey);n.push({dimension:e.meta.eventStream.bindingKey,description:t?.description||`Configured binding key`})}for(let t of e.dimensions)(t.name.split(`.`).pop()?.toLowerCase()||``).includes(`id`)&&!n.some(e=>e.dimension===t.name)&&n.push({dimension:t.name,description:t.description||`Potential entity identifier`});let r=[];if(e.meta?.eventStream?.timeDimension){let t=e.dimensions.find(t=>t.name===e.meta?.eventStream?.timeDimension);r.push({dimension:e.meta.eventStream.timeDimension,description:t?.description||`Configured time dimension`})}for(let t of e.dimensions)t.type===`time`&&!r.some(e=>e.dimension===t.name)&&r.push({dimension:t.name,description:t.description});let i=[];for(let t of e.dimensions){let e=t.name.split(`.`).pop()?.toLowerCase()||``;t.type===`string`&&(e.includes(`type`)||e.includes(`event`)||e.includes(`status`)||e.includes(`state`)||e.includes(`action`))&&i.push({dimension:t.name,description:t.description||`Potential event type dimension`})}return{candidateBindingKeys:n,candidateTimeDimensions:r,candidateEventDimensions:i}}function Fc(e,t){let n=[];if(!t)return n;if(t.candidateBindingKeys.length>1&&n.push(`Choose bindingKey based on what entity to track through the analysis`),t.candidateEventDimensions.length>0){let e=t.candidateEventDimensions[0].dimension;n.push(`Query ${e} dimension to discover available values for funnel steps`)}return n.push(`Use /mcp/load with a standard query to discover dimension values before building analysis queries`),n}function Ic(e,t={}){let{topic:n,intent:r,limit:i=10,minScore:a=.1}=t,o=[n,r].filter(Boolean).join(` `);if(!o.trim())return e.slice(0,i).map(e=>{let t=Nc(e),n=Pc(e),r=Fc(e,n),i=t.funnel||t.flow||t.retention;return{cube:e.name,title:e.title,description:e.description,relevanceScore:1,matchedOn:[],suggestedMeasures:e.measures.slice(0,5).map(e=>e.name),suggestedDimensions:e.dimensions.slice(0,5).map(e=>e.name),capabilities:t,analysisConfig:n,hints:r.length>0?r:void 0,querySchemas:i?Oc:void 0}});let s=jc(o);if(s.length===0)return[];let c=[];for(let t of e){let{score:e,matchedOn:n,suggestedMeasures:r,suggestedDimensions:i}=Mc(t,s);if(e>=a){let a=Nc(t),o=Pc(t),s=Fc(t,o),l=a.funnel||a.flow||a.retention;c.push({cube:t.name,title:t.title,description:t.description,relevanceScore:e,matchedOn:n,suggestedMeasures:r,suggestedDimensions:i,capabilities:a,analysisConfig:o,hints:s.length>0?s:void 0,querySchemas:l?Oc:void 0})}}return c.sort((e,t)=>t.relevanceScore-e.relevanceScore).slice(0,i)}function Lc(e,t,n){let r=null;for(let i of e){if(!n||n===`measure`)for(let e of i.measures){let n=Z(t,e.name.split(`.`).pop()||e.name);n=Math.max(n,Z(t,e.title)),e.synonyms&&(n=Math.max(n,Ac(t,e.synonyms))),n>.5&&(!r||n>r.score)&&(r={field:e.name,cube:i.name,score:n,type:`measure`})}if(!n||n===`dimension`)for(let e of i.dimensions){let n=Z(t,e.name.split(`.`).pop()||e.name);n=Math.max(n,Z(t,e.title)),e.synonyms&&(n=Math.max(n,Ac(t,e.synonyms))),n>.5&&(!r||n>r.score)&&(r={field:e.name,cube:i.name,score:n,type:`dimension`})}}return r}function Rc(){let e=new Date,t=e.toISOString().split(`T`)[0],n=e=>e.toISOString().split(`T`)[0],r=e=>new Date(e.getFullYear(),e.getMonth(),1),i=e=>new Date(e.getFullYear(),0,1),a=e=>{let t=Math.floor(e.getMonth()/3);return new Date(e.getFullYear(),t*3,1)},o=e=>{let t=e.getDay(),n=e.getDate()-t+(t===0?-6:1);return new Date(e.getFullYear(),e.getMonth(),n)};return[{pattern:/\btoday\b/i,getDateRange:()=>[t,t],granularity:`day`},{pattern:/\byesterday\b/i,getDateRange:()=>{let t=new Date(e);t.setDate(t.getDate()-1);let r=n(t);return[r,r]},granularity:`day`},{pattern:/\bthis week\b/i,getDateRange:()=>[n(o(e)),t],granularity:`day`},{pattern:/\blast week\b/i,getDateRange:()=>{let t=new Date(o(e));t.setDate(t.getDate()-7);let r=new Date(t);return r.setDate(r.getDate()+6),[n(t),n(r)]},granularity:`day`},{pattern:/\bthis month\b/i,getDateRange:()=>[n(r(e)),t],granularity:`day`},{pattern:/\blast month\b/i,getDateRange:()=>{let t=new Date(e.getFullYear(),e.getMonth()-1,1),r=new Date(e.getFullYear(),e.getMonth(),0);return[n(t),n(r)]},granularity:`day`},{pattern:/\bthis quarter\b/i,getDateRange:()=>[n(a(e)),t],granularity:`month`},{pattern:/\blast quarter\b/i,getDateRange:()=>{let t=new Date(a(e));t.setMonth(t.getMonth()-3);let r=new Date(a(e));return r.setDate(r.getDate()-1),[n(t),n(r)]},granularity:`month`},{pattern:/\bthis year\b/i,getDateRange:()=>[n(i(e)),t],granularity:`month`},{pattern:/\blast year\b/i,getDateRange:()=>{let t=new Date(e.getFullYear()-1,0,1),r=new Date(e.getFullYear()-1,11,31);return[n(t),n(r)]},granularity:`month`},{pattern:/\blast (\d+) days?\b/i,getDateRange:()=>{let r=new Date(e);return r.setDate(r.getDate()-7),[n(r),t]},granularity:`day`},{pattern:/\blast (\d+) weeks?\b/i,getDateRange:()=>{let r=new Date(e);return r.setDate(r.getDate()-28),[n(r),t]},granularity:`week`},{pattern:/\blast (\d+) months?\b/i,getDateRange:()=>{let r=new Date(e);return r.setMonth(r.getMonth()-3),[n(r),t]},granularity:`month`},{pattern:/\bq([1-4])\b/i,getDateRange:()=>[n(new Date(e.getFullYear(),0,1)),n(new Date(e.getFullYear(),2,31))],granularity:`month`}]}var zc={funnel:/\b(funnel|conversion|drop.?off|steps?|journey|pipeline|stages?)\b/i,flow:/\b(flows?|paths?|sequence|before|after|next|previous|user.?journey)\b/i,retention:/\b(retention|cohort|return|churn|comeback|retained|day.?\d+)\b/i};function Bc(e){let t=e.toLowerCase();return zc.funnel.test(t)?`funnel`:zc.flow.test(t)?`flow`:zc.retention.test(t)?`retention`:`query`}function Vc(e,t){let n=t||`the relevant cube`;switch(e){case`funnel`:return[`Use /mcp/discover to get ${n} funnel configuration and schema`,`Query the event dimension to discover available event types for funnel steps`,`Build funnel query with discovered values using the schema from discover`];case`flow`:return[`Use /mcp/discover to get ${n} flow configuration and schema`,`Query the event dimension to discover available event types`,`Build flow query specifying the starting event and steps before/after`];case`retention`:return[`Use /mcp/discover to get ${n} retention configuration and schema`,`Build retention query specifying granularity (day/week/month) and number of periods`]}}function Hc(e){let t=Rc(),n=e.toLowerCase();for(let e of t){let t=n.match(e.pattern);if(t){if(t[1]&&/^\d+$/.test(t[1])){let e=parseInt(t[1],10),r=new Date,i=r.toISOString().split(`T`)[0],a=e=>e.toISOString().split(`T`)[0];if(/days?/.test(n)){let t=new Date(r);return t.setDate(t.getDate()-e),{dateRange:[a(t),i],granularity:`day`}}if(/weeks?/.test(n)){let t=new Date(r);return t.setDate(t.getDate()-e*7),{dateRange:[a(t),i],granularity:e<=4?`day`:`week`}}if(/months?/.test(n)){let t=new Date(r);return t.setMonth(t.getMonth()-e),{dateRange:[a(t),i],granularity:e<=3?`day`:`month`}}}if(/^q[1-4]$/i.test(t[0])){let e=parseInt(t[1],10),n=new Date().getFullYear(),r=(e-1)*3,i=new Date(n,r,1),a=new Date(n,r+3,0),o=e=>e.toISOString().split(`T`)[0];return{dateRange:[o(i),o(a)],granularity:`month`}}return{dateRange:e.getDateRange(),granularity:e.granularity}}}return null}function Uc(e){let t=e.toLowerCase();for(let{pattern:e,type:n}of[{pattern:/\b(total|sum|combined)\b/i,type:`sum`},{pattern:/\b(count|number of|how many)\b/i,type:`count`},{pattern:/\b(average|avg|mean)\b/i,type:`avg`},{pattern:/\b(maximum|max|highest|top)\b/i,type:`max`},{pattern:/\b(minimum|min|lowest|bottom)\b/i,type:`min`}])if(e.test(t))return{type:n,confidence:.8};return null}function Wc(e){let t=e.toLowerCase(),n=[],r=/\bby\s+(\w+(?:\s+\w+)?)/gi,i;for(;(i=r.exec(t))!==null;)n.push(i[1].trim());let a=/\bper\s+(\w+)/gi;for(;(i=a.exec(t))!==null;)n.push(i[1].trim());let o=/\bfor each\s+(\w+)/gi;for(;(i=o.exec(t))!==null;)n.push(i[1].trim());return n}function Gc(e,t,n){let r=[],i=[],a={},o=Bc(t),s;if(n){let t=e.find(e=>e.name===n);t?(s=[t],r.push(`Using specified cube: ${n}`)):(i.push(`Specified cube '${n}' not found`),s=[])}else s=Ic(e,{intent:t,limit:3}).map(t=>e.find(e=>e.name===t.cube)).filter(e=>e!==void 0),s.length>0&&r.push(`Identified relevant cubes: ${s.map(e=>e.name).join(`, `)}`);if(s.length===0){let e=o!==`query`,t=e?Vc(o,void 0):void 0;return{query:{},confidence:e?.7:0,reasoning:e?[`Detected ${o} intent from natural language`]:[`Could not identify relevant cubes for this query`],warnings:i,analysisMode:o,nextSteps:t}}let c=s[0],l=.5,u=Uc(t);u&&(r.push(`Detected ${u.type} aggregation intent`),l+=.1);let d=[],f=t.toLowerCase();for(let e of c.measures){let t=[(e.name.split(`.`).pop()||e.name).toLowerCase(),e.title.toLowerCase(),...(e.synonyms||[]).map(e=>e.toLowerCase())];for(let n of t)if(f.includes(n)){d.push(e.name),r.push(`Matched measure '${e.name}' via keyword '${n}'`),l+=.15;break}}if(d.length===0&&u){let e=c.measures.filter(e=>e.type===u.type);if(e.length>0)d.push(e[0].name),r.push(`Suggested ${e[0].name} based on ${u.type} intent`);else if(u.type===`count`){let e=c.measures.find(e=>e.type===`count`||e.type===`countDistinct`);e&&(d.push(e.name),r.push(`Suggested ${e.name} for counting`))}}d.length===0&&c.measures.length>0&&(d.push(c.measures[0].name),r.push(`Using default measure: ${c.measures[0].name}`),i.push(`Could not determine specific measure from query, using default`)),a.measures=d;let p=Wc(t),m=[];for(let e of p){let t=Lc(s,e,`dimension`);t&&(m.push(t.field),r.push(`Matched dimension '${t.field}' from grouping keyword '${e}'`),l+=.1)}for(let e of s)for(let t of e.dimensions){let e=[(t.name.split(`.`).pop()||t.name).toLowerCase(),t.title.toLowerCase(),...(t.synonyms||[]).map(e=>e.toLowerCase())];for(let n of e)if(f.includes(n)&&!m.includes(t.name)&&(f.includes(`by ${n}`)||f.includes(`per ${n}`))){m.push(t.name),r.push(`Matched dimension '${t.name}' as grouping`),l+=.1;break}}m.length>0&&(a.dimensions=m);let h=Hc(t);if(h){let e=c.dimensions.find(e=>e.type===`time`);if(e){let t={dimension:e.name,dateRange:h.dateRange};h.granularity&&(t.granularity=h.granularity),a.timeDimensions=[t],r.push(`Applied time filter: ${h.dateRange[0]} to ${h.dateRange[1]}`),l+=.15}else i.push(`Time expression found but no time dimension in cube`)}if(l=Math.min(1,l),o!==`query`){let e=s.length>0?s[0].name:void 0;return{query:{},confidence:.7,reasoning:[`Detected ${o} intent from natural language`,...e?[`Found relevant cube: ${e}`]:[]],warnings:i.length>0?i:void 0,analysisMode:o,nextSteps:Vc(o,e)}}return{query:a,confidence:l,reasoning:r,warnings:i.length>0?i:void 0,analysisMode:`query`}}function Kc(e,t){if(e.length>500||t.length>500)return e.length+t.length;let n=[];for(let e=0;e<=t.length;e++)n[e]=[e];for(let t=0;t<=e.length;t++)n[0][t]=t;for(let r=1;r<=t.length;r++)for(let i=1;i<=e.length;i++)t.charAt(r-1)===e.charAt(i-1)?n[r][i]=n[r-1][i-1]:n[r][i]=Math.min(n[r-1][i-1]+1,n[r][i-1]+1,n[r-1][i]+1);return n[t.length][e.length]}function Q(e,t){let n=null;for(let r of t){let t=Kc(e.toLowerCase(),r.toLowerCase());t<=3&&(!n||t<n.distance)&&(n={field:r,distance:t})}return n}function qc(e,t,n,r){let i=e.split(`.`);if(i.length!==2){n.push({type:`syntax_error`,message:`Invalid measure format: '${e}'. Expected 'CubeName.measureName'`,field:e});return}let[a,o]=i,s=t.find(e=>e.name===a);if(!s){let i=t.map(e=>e.name),s=Q(a,i);s?(n.push({type:`cube_not_found`,message:`Cube '${a}' not found`,field:e,suggestion:`Did you mean '${s.field}'?`,correctedValue:`${s.field}.${o}`}),r.set(e,`${s.field}.${o}`)):n.push({type:`cube_not_found`,message:`Cube '${a}' not found`,field:e,suggestion:`Available cubes: ${i.join(`, `)}`});return}if(!s.measures.some(t=>t.name===e)){let i=Lc(t,o,`measure`);if(i&&i.cube===a)n.push({type:`measure_not_found`,message:`Measure '${o}' not found on cube '${a}'`,field:e,suggestion:`Did you mean '${i.field}'?`,correctedValue:i.field}),r.set(e,i.field);else{let t=s.measures.map(e=>e.name.split(`.`).pop()),i=Q(o,t);if(i){let t=`${a}.${i.field}`;n.push({type:`measure_not_found`,message:`Measure '${o}' not found on cube '${a}'`,field:e,suggestion:`Did you mean '${i.field}'?`,correctedValue:t}),r.set(e,t)}else n.push({type:`measure_not_found`,message:`Measure '${o}' not found on cube '${a}'`,field:e,suggestion:`Available measures: ${t.slice(0,5).join(`, `)}${t.length>5?`...`:``}`})}}}function $(e,t,n,r){let i=e.split(`.`);if(i.length!==2){n.push({type:`syntax_error`,message:`Invalid dimension format: '${e}'. Expected 'CubeName.dimensionName'`,field:e});return}let[a,o]=i,s=t.find(e=>e.name===a);if(!s){let i=t.map(e=>e.name),s=Q(a,i);s?(n.push({type:`cube_not_found`,message:`Cube '${a}' not found`,field:e,suggestion:`Did you mean '${s.field}'?`,correctedValue:`${s.field}.${o}`}),r.set(e,`${s.field}.${o}`)):n.push({type:`cube_not_found`,message:`Cube '${a}' not found`,field:e,suggestion:`Available cubes: ${i.join(`, `)}`});return}if(!s.dimensions.some(t=>t.name===e)){let i=Lc(t,o,`dimension`);if(i&&i.cube===a)n.push({type:`dimension_not_found`,message:`Dimension '${o}' not found on cube '${a}'`,field:e,suggestion:`Did you mean '${i.field}'?`,correctedValue:i.field}),r.set(e,i.field);else{let t=s.dimensions.map(e=>e.name.split(`.`).pop()),i=Q(o,t);if(i){let t=`${a}.${i.field}`;n.push({type:`dimension_not_found`,message:`Dimension '${o}' not found on cube '${a}'`,field:e,suggestion:`Did you mean '${i.field}'?`,correctedValue:t}),r.set(e,t)}else n.push({type:`dimension_not_found`,message:`Dimension '${o}' not found on cube '${a}'`,field:e,suggestion:`Available dimensions: ${t.slice(0,5).join(`, `)}${t.length>5?`...`:``}`})}}}function Jc(e,t,n,r){for(let i of e){if(`and`in i&&Array.isArray(i.and)){Jc(i.and,t,n,r);continue}if(`or`in i&&Array.isArray(i.or)){Jc(i.or,t,n,r);continue}if(`member`in i){let e=i.member,a=e.split(`.`);if(a.length!==2){n.push({type:`invalid_filter`,message:`Invalid filter member format: '${e}'`,field:e});continue}let[o,s]=a,c=t.find(e=>e.name===o);if(!c){let i=Q(o,t.map(e=>e.name));i&&r.set(e,`${i.field}.${s}`),n.push({type:`cube_not_found`,message:`Cube '${o}' not found in filter`,field:e,suggestion:i?`Did you mean '${i.field}'?`:void 0,correctedValue:i?`${i.field}.${s}`:void 0});continue}let l=c.dimensions.some(t=>t.name===e),u=c.measures.some(t=>t.name===e);if(!l&&!u){let t=Q(s,[...c.dimensions.map(e=>e.name.split(`.`).pop()),...c.measures.map(e=>e.name.split(`.`).pop())]);if(t){let i=`${o}.${t.field}`;r.set(e,i),n.push({type:`invalid_filter`,message:`Filter field '${s}' not found on cube '${o}'`,field:e,suggestion:`Did you mean '${t.field}'?`,correctedValue:i})}else n.push({type:`invalid_filter`,message:`Filter field '${s}' not found on cube '${o}'`,field:e})}}}}function Yc(e,t,n,r,i){let a=e.funnel;if(a)if(a.bindingKey?typeof a.bindingKey==`string`&&$(a.bindingKey,t,n,i):n.push({type:`syntax_error`,message:`funnel.bindingKey is required`}),a.timeDimension?typeof a.timeDimension==`string`&&$(a.timeDimension,t,n,i):n.push({type:`syntax_error`,message:`funnel.timeDimension is required`}),!a.steps||!Array.isArray(a.steps))n.push({type:`syntax_error`,message:`funnel.steps array is required`});else if(a.steps.length<2)n.push({type:`syntax_error`,message:`funnel requires at least 2 steps`});else for(let e=0;e<a.steps.length;e++){let o=a.steps[e];o.name||r.push({type:`best_practice`,message:`Step ${e+1} is missing a name`,suggestion:`Add descriptive names to funnel steps`}),o.filter&&`member`in o.filter&&Jc([o.filter],t,n,i)}}function Xc(e,t,n,r,i){let a=e.flow;a&&(a.bindingKey?typeof a.bindingKey==`string`&&$(a.bindingKey,t,n,i):n.push({type:`syntax_error`,message:`flow.bindingKey is required`}),a.timeDimension?typeof a.timeDimension==`string`&&$(a.timeDimension,t,n,i):n.push({type:`syntax_error`,message:`flow.timeDimension is required`}),a.eventDimension?typeof a.eventDimension==`string`&&$(a.eventDimension,t,n,i):n.push({type:`syntax_error`,message:`flow.eventDimension is required`}),a.stepsBefore===void 0&&a.stepsAfter===void 0&&r.push({type:`best_practice`,message:`Neither stepsBefore nor stepsAfter specified`,suggestion:`Set stepsBefore and/or stepsAfter to see event sequences`}))}function Zc(e,t,n,r,i){let a=e.retention;a&&(a.bindingKey?typeof a.bindingKey==`string`&&$(a.bindingKey,t,n,i):n.push({type:`syntax_error`,message:`retention.bindingKey is required`}),a.timeDimension?typeof a.timeDimension==`string`&&$(a.timeDimension,t,n,i):n.push({type:`syntax_error`,message:`retention.timeDimension is required`}),a.granularity||r.push({type:`best_practice`,message:`retention.granularity not specified`,suggestion:`Specify granularity: "day", "week", or "month"`}),a.periods||r.push({type:`best_practice`,message:`retention.periods not specified`,suggestion:`Specify number of periods to analyze`}))}function Qc(e,t){let n=[],r=[],i=new Map;if(e.funnel)return Yc(e,t,n,r,i),{isValid:n.length===0,errors:n,warnings:r,correctedQuery:void 0};if(e.flow)return Xc(e,t,n,r,i),{isValid:n.length===0,errors:n,warnings:r,correctedQuery:void 0};if(e.retention)return Zc(e,t,n,r,i),{isValid:n.length===0,errors:n,warnings:r,correctedQuery:void 0};if(e.measures)for(let r of e.measures)qc(r,t,n,i);if(e.dimensions)for(let r of e.dimensions)$(r,t,n,i);if(e.timeDimensions)for(let a of e.timeDimensions){$(a.dimension,t,n,i);let[e]=a.dimension.split(`.`),o=t.find(t=>t.name===e);if(o){let e=o.dimensions.find(e=>e.name===a.dimension);e&&e.type!==`time`&&r.push({type:`best_practice`,message:`Dimension '${a.dimension}' is not a time type (it's '${e.type}')`,field:a.dimension,suggestion:`Use a dimension with type "time" for timeDimensions`})}}e.filters&&Jc(e.filters,t,n,i),!e.measures?.length&&!e.dimensions?.length&&n.push({type:`syntax_error`,message:`Query must have at least one measure or dimension`}),e.measures&&e.measures.length>10&&r.push({type:`performance`,message:`Query has ${e.measures.length} measures, which may impact performance`,suggestion:`Consider splitting into multiple queries`}),e.dimensions&&e.dimensions.length>5&&r.push({type:`performance`,message:`Query has ${e.dimensions.length} dimensions, which may produce many rows`,suggestion:`Consider adding filters or reducing dimensions`});let a;if(i.size>0){let t=JSON.parse(JSON.stringify(e));t.measures&&=t.measures.map(e=>i.get(e)||e),t.dimensions&&=t.dimensions.map(e=>i.get(e)||e),t.timeDimensions&&=t.timeDimensions.map(e=>({...e,dimension:i.get(e.dimension)||e.dimension})),a=t}return{isValid:n.length===0,errors:n,warnings:r,correctedQuery:i.size>0?a:void 0}}function $c(e){return new qs({drizzle:e.drizzle,schema:e.schema})}exports.BaseDatabaseExecutor=b,exports.CTEBuilder=Qe,exports.CalculatedMeasureResolver=M,exports.ComparisonQueryBuilder=st,exports.DatabendExecutor=me,exports.DrizzlePlanBuilder=Dt,exports.DrizzleSqlBuilder=Ye,exports.DuckDBExecutor=le,exports.EXPLAIN_ANALYSIS_PROMPT=sc,exports.FlowQueryBuilder=lt,exports.FunnelQueryBuilder=ct,exports.IdentityOptimiser=gt,exports.JoinPathResolver=Xe,exports.LogicalPlanBuilder=ht,exports.LogicalPlanner=Ze,exports.MemoryCacheProvider=Qs,exports.MySQLExecutor=E,exports.OptimiserPipeline=_t,exports.PostgresExecutor=C,exports.QueryExecutor=kt,exports.RetentionQueryBuilder=mt,exports.SQLiteExecutor=ne,exports.STEP0_VALIDATION_PROMPT=$s,exports.STEP1_SYSTEM_PROMPT=rc,exports.STEP2_SYSTEM_PROMPT=ac,exports.SYSTEM_PROMPT_TEMPLATE=tc,exports.SemanticLayerCompiler=qs,exports.SnowflakeExecutor=ye,exports.aiValidateQuery=Qc,exports.buildAgentSystemPrompt=_c,exports.buildExplainAnalysisPrompt=cc,exports.buildStep0Prompt=ec,exports.buildStep1Prompt=ic,exports.buildStep2Prompt=oc,exports.buildSystemPrompt=nc,exports.createDatabaseExecutor=xe,exports.createDatabendExecutor=he,exports.createDrizzleSemanticLayer=$c,exports.createDuckDBExecutor=ue,exports.createMultiCubeContext=Ee,exports.createMySQLExecutor=te,exports.createPostgresExecutor=w,exports.createSQLiteExecutor=re,exports.createSnowflakeExecutor=be,exports.createToolExecutor=wc,exports.defineCube=De,exports.discoverCubes=Ic,exports.findBestFieldMatch=Lc,exports.fnv1aHash=Be,exports.formatCubeSchemaForExplain=lc,exports.formatExistingIndexes=uc,exports.generateCacheKey=Ne,exports.getCubeInvalidationPattern=Ve,exports.getJoinType=Ce,exports.getToolDefinitions=Cc,exports.handleAgentChat=Dc,exports.normalizeQuery=Pe,exports.resolveCubeReference=k,exports.resolveSqlExpression=A,exports.suggestQuery=Gc;
@@ -14778,7 +14778,7 @@ async function Jc(e, t, n) {
14778
14778
  return new e(t);
14779
14779
  }
14780
14780
  case "openai": {
14781
- let { OpenAIProvider: e } = await import("./openai-DnGeU9PT.js");
14781
+ let { OpenAIProvider: e } = await import("./openai-rwauPzCT.js");
14782
14782
  return new e(t, n);
14783
14783
  }
14784
14784
  case "google": {
@@ -104,7 +104,7 @@ var re = (e, t) => {
104
104
  } catch {
105
105
  return;
106
106
  }
107
- }, ae = (e) => new Promise((t) => setTimeout(t, e)), oe = "6.32.0", se = () => typeof window < "u" && window.document !== void 0 && typeof navigator < "u";
107
+ }, ae = (e) => new Promise((t) => setTimeout(t, e)), oe = "6.33.0", se = () => typeof window < "u" && window.document !== void 0 && typeof navigator < "u";
108
108
  function ce() {
109
109
  return typeof Deno < "u" && Deno.build != null ? "deno" : typeof EdgeRuntime < "u" ? "edge" : Object.prototype.toString.call(globalThis.process === void 0 ? 0 : globalThis.process) === "[object process]" ? "node" : "unknown";
110
110
  }
@@ -1 +1 @@
1
- var e=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-DKpZPCay.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 n of e){let e=n;e.usage&&(yield{type:`message_meta`,inputTokens:e.usage.prompt_tokens,outputTokens:e.usage.completion_tokens,stopReason:``});let r=e.choices?.[0];if(!r)continue;let i=r.delta;if(i){if(i.content&&(yield{type:`text_delta`,text:i.content}),i.tool_calls)for(let e of i.tool_calls){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})}}if(r.finish_reason){for(let[e,n]of t){let r={};try{n.arguments&&(r=JSON.parse(n.arguments))}catch{}yield{type:`tool_use_end`,id:n.id,input:r},t.delete(e)}yield{type:`message_meta`,stopReason:r.finish_reason}}}}}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`}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=e;
1
+ var e=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-DmuEbFd6.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 n of e){let e=n;e.usage&&(yield{type:`message_meta`,inputTokens:e.usage.prompt_tokens,outputTokens:e.usage.completion_tokens,stopReason:``});let r=e.choices?.[0];if(!r)continue;let i=r.delta;if(i){if(i.content&&(yield{type:`text_delta`,text:i.content}),i.tool_calls)for(let e of i.tool_calls){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})}}if(r.finish_reason){for(let[e,n]of t){let r={};try{n.arguments&&(r=JSON.parse(n.arguments))}catch{}yield{type:`tool_use_end`,id:n.id,input:r},t.delete(e)}yield{type:`message_meta`,stopReason:r.finish_reason}}}}}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`}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=e;
@@ -1,4 +1,4 @@
1
- function e(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 t(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 n=function(){let{crypto:e}=globalThis;if(e?.randomUUID)return n=e.randomUUID.bind(e),e.randomUUID();let t=new Uint8Array(1),r=e?()=>e.getRandomValues(t)[0]:()=>Math.random()*255&255;return`10000000-1000-4000-8000-100000000000`.replace(/[018]/g,e=>(e^r()&15>>e/4).toString(16))};function r(e){return typeof e==`object`&&!!e&&(`name`in e&&e.name===`AbortError`||`message`in e&&String(e.message).includes(`FetchRequestCanceledException`))}var i=e=>{if(e instanceof Error)return e;if(typeof e==`object`&&e){try{if(Object.prototype.toString.call(e)===`[object Error]`){let t=Error(e.message,e.cause?{cause:e.cause}:{});return e.stack&&(t.stack=e.stack),e.cause&&!t.cause&&(t.cause=e.cause),e.name&&(t.name=e.name),t}}catch{}try{return Error(JSON.stringify(e))}catch{}}return Error(e)},a=class extends Error{},o=class e extends a{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,a){if(!t||!a)return new c({message:r,cause:i(n)});let o=n?.error;return t===400?new u(t,o,r,a):t===401?new d(t,o,r,a):t===403?new f(t,o,r,a):t===404?new p(t,o,r,a):t===409?new m(t,o,r,a):t===422?new h(t,o,r,a):t===429?new g(t,o,r,a):t>=500?new _(t,o,r,a):new e(t,o,r,a)}},s=class extends o{constructor({message:e}={}){super(void 0,void 0,e||`Request was aborted.`,void 0)}},c=class extends o{constructor({message:e,cause:t}){super(void 0,void 0,e||`Connection error.`,void 0),t&&(this.cause=t)}},l=class extends c{constructor({message:e}={}){super({message:e??`Request timed out.`})}},u=class extends o{},d=class extends o{},f=class extends o{},p=class extends o{},m=class extends o{},h=class extends o{},g=class extends o{},_=class extends o{},v=class extends a{constructor(){super(`Could not parse response content as the length limit was reached`)}},y=class extends a{constructor(){super(`Could not parse response content as the request was rejected by the content filter`)}},b=class extends Error{constructor(e){super(e)}},ee=/^[a-z][a-z0-9+.-]*:/i,te=e=>ee.test(e),x=e=>(x=Array.isArray,x(e)),S=x;function C(e){return typeof e==`object`?e??{}:{}}function w(e){if(!e)return!0;for(let t in e)return!1;return!0}function ne(e,t){return Object.prototype.hasOwnProperty.call(e,t)}function T(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}var re=(e,t)=>{if(typeof t!=`number`||!Number.isInteger(t))throw new a(`${e} must be an integer`);if(t<0)throw new a(`${e} must be a positive integer`);return t},ie=e=>{try{return JSON.parse(e)}catch{return}},ae=e=>new Promise(t=>setTimeout(t,e)),oe=`6.32.0`,se=()=>typeof window<`u`&&window.document!==void 0&&typeof navigator<`u`;function ce(){return typeof Deno<`u`&&Deno.build!=null?`deno`:typeof EdgeRuntime<`u`?`edge`:Object.prototype.toString.call(globalThis.process===void 0?0:globalThis.process)===`[object process]`?`node`:`unknown`}var le=()=>{let e=ce();if(e===`deno`)return{"X-Stainless-Lang":`js`,"X-Stainless-Package-Version":oe,"X-Stainless-OS":fe(Deno.build.os),"X-Stainless-Arch":de(Deno.build.arch),"X-Stainless-Runtime":`deno`,"X-Stainless-Runtime-Version":typeof Deno.version==`string`?Deno.version:Deno.version?.deno??`unknown`};if(typeof EdgeRuntime<`u`)return{"X-Stainless-Lang":`js`,"X-Stainless-Package-Version":oe,"X-Stainless-OS":`Unknown`,"X-Stainless-Arch":`other:${EdgeRuntime}`,"X-Stainless-Runtime":`edge`,"X-Stainless-Runtime-Version":globalThis.process.version};if(e===`node`)return{"X-Stainless-Lang":`js`,"X-Stainless-Package-Version":oe,"X-Stainless-OS":fe(globalThis.process.platform??`unknown`),"X-Stainless-Arch":de(globalThis.process.arch??`unknown`),"X-Stainless-Runtime":`node`,"X-Stainless-Runtime-Version":globalThis.process.version??`unknown`};let t=ue();return t?{"X-Stainless-Lang":`js`,"X-Stainless-Package-Version":oe,"X-Stainless-OS":`Unknown`,"X-Stainless-Arch":`unknown`,"X-Stainless-Runtime":`browser:${t.browser}`,"X-Stainless-Runtime-Version":t.version}:{"X-Stainless-Lang":`js`,"X-Stainless-Package-Version":oe,"X-Stainless-OS":`Unknown`,"X-Stainless-Arch":`unknown`,"X-Stainless-Runtime":`unknown`,"X-Stainless-Runtime-Version":`unknown`}};function ue(){if(typeof navigator>`u`||!navigator)return null;for(let{key:e,pattern:t}of[{key:`edge`,pattern:/Edge(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:`ie`,pattern:/MSIE(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:`ie`,pattern:/Trident(?:.*rv\:(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:`chrome`,pattern:/Chrome(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:`firefox`,pattern:/Firefox(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:`safari`,pattern:/(?:Version\W+(\d+)\.(\d+)(?:\.(\d+))?)?(?:\W+Mobile\S*)?\W+Safari/}]){let n=t.exec(navigator.userAgent);if(n)return{browser:e,version:`${n[1]||0}.${n[2]||0}.${n[3]||0}`}}return null}var de=e=>e===`x32`?`x32`:e===`x86_64`||e===`x64`?`x64`:e===`arm`?`arm`:e===`aarch64`||e===`arm64`?`arm64`:e?`other:${e}`:`unknown`,fe=e=>(e=e.toLowerCase(),e.includes(`ios`)?`iOS`:e===`android`?`Android`:e===`darwin`?`MacOS`:e===`win32`?`Windows`:e===`freebsd`?`FreeBSD`:e===`openbsd`?`OpenBSD`:e===`linux`?`Linux`:e?`Other:${e}`:`Unknown`),pe,me=()=>pe??=le();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=({headers:e,body:t})=>({bodyHeaders:{"content-type":`application/json`},body:JSON.stringify(t)}),xe=`RFC3986`,Se=e=>String(e),Ce={RFC1738:e=>String(e).replace(/%20/g,`+`),RFC3986:Se},we=(e,t)=>(we=Object.hasOwn??Function.prototype.call.bind(Object.prototype.hasOwnProperty),we(e,t)),E=(()=>{let e=[];for(let t=0;t<256;++t)e.push(`%`+((t<16?`0`:``)+t.toString(16)).toUpperCase());return e})(),Te=1024,Ee=(e,t,n,r,i)=>{if(e.length===0)return e;let a=e;if(typeof e==`symbol`?a=Symbol.prototype.toString.call(e):typeof e!=`string`&&(a=String(e)),n===`iso-8859-1`)return escape(a).replace(/%u[0-9a-f]{4}/gi,function(e){return`%26%23`+parseInt(e.slice(2),16)+`%3B`});let o=``;for(let e=0;e<a.length;e+=Te){let t=a.length>=Te?a.slice(e,e+Te):a,n=[];for(let e=0;e<t.length;++e){let r=t.charCodeAt(e);if(r===45||r===46||r===95||r===126||r>=48&&r<=57||r>=65&&r<=90||r>=97&&r<=122||i===`RFC1738`&&(r===40||r===41)){n[n.length]=t.charAt(e);continue}if(r<128){n[n.length]=E[r];continue}if(r<2048){n[n.length]=E[192|r>>6]+E[128|r&63];continue}if(r<55296||r>=57344){n[n.length]=E[224|r>>12]+E[128|r>>6&63]+E[128|r&63];continue}e+=1,r=65536+((r&1023)<<10|t.charCodeAt(e)&1023),n[n.length]=E[240|r>>18]+E[128|r>>12&63]+E[128|r>>6&63]+E[128|r&63]}o+=n.join(``)}return o};function De(e){return!e||typeof e!=`object`?!1:!!(e.constructor&&e.constructor.isBuffer&&e.constructor.isBuffer(e))}function Oe(e,t){if(x(e)){let n=[];for(let r=0;r<e.length;r+=1)n.push(t(e[r]));return n}return t(e)}var ke={brackets(e){return String(e)+`[]`},comma:`comma`,indices(e,t){return String(e)+`[`+t+`]`},repeat(e){return String(e)}},Ae=function(e,t){Array.prototype.push.apply(e,x(t)?t:[t])},je,D={addQueryPrefix:!1,allowDots:!1,allowEmptyArrays:!1,arrayFormat:`indices`,charset:`utf-8`,charsetSentinel:!1,delimiter:`&`,encode:!0,encodeDotInKeys:!1,encoder:Ee,encodeValuesOnly:!1,format:xe,formatter:Se,indices:!1,serializeDate(e){return(je??=Function.prototype.call.bind(Date.prototype.toISOString))(e)},skipNulls:!1,strictNullHandling:!1};function Me(e){return typeof e==`string`||typeof e==`number`||typeof e==`boolean`||typeof e==`symbol`||typeof e==`bigint`}var Ne={};function Pe(e,t,n,r,i,a,o,s,c,l,u,d,f,p,m,h,g,_){let v=e,y=_,b=0,ee=!1;for(;(y=y.get(Ne))!==void 0&&!ee;){let t=y.get(e);if(b+=1,t!==void 0){if(t===b)throw RangeError(`Cyclic object value`);ee=!0}y.get(Ne)===void 0&&(b=0)}if(typeof l==`function`?v=l(t,v):v instanceof Date?v=f?.(v):n===`comma`&&x(v)&&(v=Oe(v,function(e){return e instanceof Date?f?.(e):e})),v===null){if(a)return c&&!h?c(t,D.encoder,g,`key`,p):t;v=``}if(Me(v)||De(v)){if(c){let e=h?t:c(t,D.encoder,g,`key`,p);return[m?.(e)+`=`+m?.(c(v,D.encoder,g,`value`,p))]}return[m?.(t)+`=`+m?.(String(v))]}let te=[];if(v===void 0)return te;let S;if(n===`comma`&&x(v))h&&c&&(v=Oe(v,c)),S=[{value:v.length>0?v.join(`,`)||null:void 0}];else if(x(l))S=l;else{let e=Object.keys(v);S=u?e.sort(u):e}let C=s?String(t).replace(/\./g,`%2E`):String(t),w=r&&x(v)&&v.length===1?C+`[]`:C;if(i&&x(v)&&v.length===0)return w+`[]`;for(let t=0;t<S.length;++t){let y=S[t],ee=typeof y==`object`&&y.value!==void 0?y.value:v[y];if(o&&ee===null)continue;let C=d&&s?y.replace(/\./g,`%2E`):y,ne=x(v)?typeof n==`function`?n(w,C):w:w+(d?`.`+C:`[`+C+`]`);_.set(e,b);let T=new WeakMap;T.set(Ne,_),Ae(te,Pe(ee,ne,n,r,i,a,o,s,n===`comma`&&h&&x(v)?null:c,l,u,d,f,p,m,h,g,T))}return te}function Fe(e=D){if(e.allowEmptyArrays!==void 0&&typeof e.allowEmptyArrays!=`boolean`)throw TypeError("`allowEmptyArrays` option can only be `true` or `false`, when provided");if(e.encodeDotInKeys!==void 0&&typeof e.encodeDotInKeys!=`boolean`)throw TypeError("`encodeDotInKeys` option can only be `true` or `false`, when provided");if(e.encoder!==null&&e.encoder!==void 0&&typeof e.encoder!=`function`)throw TypeError(`Encoder has to be a function.`);let t=e.charset||D.charset;if(e.charset!==void 0&&e.charset!==`utf-8`&&e.charset!==`iso-8859-1`)throw TypeError(`The charset option must be either utf-8, iso-8859-1, or undefined`);let n=xe;if(e.format!==void 0){if(!we(Ce,e.format))throw TypeError(`Unknown format option provided.`);n=e.format}let r=Ce[n],i=D.filter;(typeof e.filter==`function`||x(e.filter))&&(i=e.filter);let a;if(a=e.arrayFormat&&e.arrayFormat in ke?e.arrayFormat:`indices`in e?e.indices?`indices`:`repeat`:D.arrayFormat,`commaRoundTrip`in e&&typeof e.commaRoundTrip!=`boolean`)throw TypeError("`commaRoundTrip` must be a boolean, or absent");let o=e.allowDots===void 0?e.encodeDotInKeys?!0:D.allowDots:!!e.allowDots;return{addQueryPrefix:typeof e.addQueryPrefix==`boolean`?e.addQueryPrefix:D.addQueryPrefix,allowDots:o,allowEmptyArrays:typeof e.allowEmptyArrays==`boolean`?!!e.allowEmptyArrays:D.allowEmptyArrays,arrayFormat:a,charset:t,charsetSentinel:typeof e.charsetSentinel==`boolean`?e.charsetSentinel:D.charsetSentinel,commaRoundTrip:!!e.commaRoundTrip,delimiter:e.delimiter===void 0?D.delimiter:e.delimiter,encode:typeof e.encode==`boolean`?e.encode:D.encode,encodeDotInKeys:typeof e.encodeDotInKeys==`boolean`?e.encodeDotInKeys:D.encodeDotInKeys,encoder:typeof e.encoder==`function`?e.encoder:D.encoder,encodeValuesOnly:typeof e.encodeValuesOnly==`boolean`?e.encodeValuesOnly:D.encodeValuesOnly,filter:i,format:n,formatter:r,serializeDate:typeof e.serializeDate==`function`?e.serializeDate:D.serializeDate,skipNulls:typeof e.skipNulls==`boolean`?e.skipNulls:D.skipNulls,sort:typeof e.sort==`function`?e.sort:null,strictNullHandling:typeof e.strictNullHandling==`boolean`?e.strictNullHandling:D.strictNullHandling}}function Ie(e,t={}){let n=e,r=Fe(t),i,a;typeof r.filter==`function`?(a=r.filter,n=a(``,n)):x(r.filter)&&(a=r.filter,i=a);let o=[];if(typeof n!=`object`||!n)return``;let s=ke[r.arrayFormat],c=s===`comma`&&r.commaRoundTrip;i||=Object.keys(n),r.sort&&i.sort(r.sort);let l=new WeakMap;for(let e=0;e<i.length;++e){let t=i[e];r.skipNulls&&n[t]===null||Ae(o,Pe(n[t],t,s,c,r.allowEmptyArrays,r.strictNullHandling,r.skipNulls,r.encodeDotInKeys,r.encode?r.encoder:null,r.filter,r.sort,r.allowDots,r.serializeDate,r.format,r.formatter,r.encodeValuesOnly,r.charset,l))}let u=o.join(r.delimiter),d=r.addQueryPrefix===!0?`?`:``;return r.charsetSentinel&&(r.charset===`iso-8859-1`?d+=`utf8=%26%2310003%3B&`:d+=`utf8=%E2%9C%93&`),u.length>0?d+u:``}function Le(e){return Ie(e,{arrayFormat:`brackets`})}function Re(e){let t=0;for(let n of e)t+=n.length;let n=new Uint8Array(t),r=0;for(let t of e)n.set(t,r),r+=t.length;return n}var ze;function Be(e){let t;return(ze??=(t=new globalThis.TextEncoder,t.encode.bind(t)))(e)}var Ve;function He(e){let t;return(Ve??=(t=new globalThis.TextDecoder,t.decode.bind(t)))(e)}var O,k,Ue=class{constructor(){O.set(this,void 0),k.set(this,void 0),e(this,O,new Uint8Array,`f`),e(this,k,null,`f`)}decode(n){if(n==null)return[];let r=n instanceof ArrayBuffer?new Uint8Array(n):typeof n==`string`?Be(n):n;e(this,O,Re([t(this,O,`f`),r]),`f`);let i=[],a;for(;(a=We(t(this,O,`f`),t(this,k,`f`)))!=null;){if(a.carriage&&t(this,k,`f`)==null){e(this,k,a.index,`f`);continue}if(t(this,k,`f`)!=null&&(a.index!==t(this,k,`f`)+1||a.carriage)){i.push(He(t(this,O,`f`).subarray(0,t(this,k,`f`)-1))),e(this,O,t(this,O,`f`).subarray(t(this,k,`f`)),`f`),e(this,k,null,`f`);continue}let n=t(this,k,`f`)===null?a.preceding:a.preceding-1,r=He(t(this,O,`f`).subarray(0,n));i.push(r),e(this,O,t(this,O,`f`).subarray(a.index),`f`),e(this,k,null,`f`)}return i}flush(){return t(this,O,`f`).length?this.decode(`
1
+ function e(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 t(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 n=function(){let{crypto:e}=globalThis;if(e?.randomUUID)return n=e.randomUUID.bind(e),e.randomUUID();let t=new Uint8Array(1),r=e?()=>e.getRandomValues(t)[0]:()=>Math.random()*255&255;return`10000000-1000-4000-8000-100000000000`.replace(/[018]/g,e=>(e^r()&15>>e/4).toString(16))};function r(e){return typeof e==`object`&&!!e&&(`name`in e&&e.name===`AbortError`||`message`in e&&String(e.message).includes(`FetchRequestCanceledException`))}var i=e=>{if(e instanceof Error)return e;if(typeof e==`object`&&e){try{if(Object.prototype.toString.call(e)===`[object Error]`){let t=Error(e.message,e.cause?{cause:e.cause}:{});return e.stack&&(t.stack=e.stack),e.cause&&!t.cause&&(t.cause=e.cause),e.name&&(t.name=e.name),t}}catch{}try{return Error(JSON.stringify(e))}catch{}}return Error(e)},a=class extends Error{},o=class e extends a{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,a){if(!t||!a)return new c({message:r,cause:i(n)});let o=n?.error;return t===400?new u(t,o,r,a):t===401?new d(t,o,r,a):t===403?new f(t,o,r,a):t===404?new p(t,o,r,a):t===409?new m(t,o,r,a):t===422?new h(t,o,r,a):t===429?new g(t,o,r,a):t>=500?new _(t,o,r,a):new e(t,o,r,a)}},s=class extends o{constructor({message:e}={}){super(void 0,void 0,e||`Request was aborted.`,void 0)}},c=class extends o{constructor({message:e,cause:t}){super(void 0,void 0,e||`Connection error.`,void 0),t&&(this.cause=t)}},l=class extends c{constructor({message:e}={}){super({message:e??`Request timed out.`})}},u=class extends o{},d=class extends o{},f=class extends o{},p=class extends o{},m=class extends o{},h=class extends o{},g=class extends o{},_=class extends o{},v=class extends a{constructor(){super(`Could not parse response content as the length limit was reached`)}},y=class extends a{constructor(){super(`Could not parse response content as the request was rejected by the content filter`)}},b=class extends Error{constructor(e){super(e)}},ee=/^[a-z][a-z0-9+.-]*:/i,te=e=>ee.test(e),x=e=>(x=Array.isArray,x(e)),S=x;function C(e){return typeof e==`object`?e??{}:{}}function w(e){if(!e)return!0;for(let t in e)return!1;return!0}function ne(e,t){return Object.prototype.hasOwnProperty.call(e,t)}function T(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}var re=(e,t)=>{if(typeof t!=`number`||!Number.isInteger(t))throw new a(`${e} must be an integer`);if(t<0)throw new a(`${e} must be a positive integer`);return t},ie=e=>{try{return JSON.parse(e)}catch{return}},ae=e=>new Promise(t=>setTimeout(t,e)),oe=`6.33.0`,se=()=>typeof window<`u`&&window.document!==void 0&&typeof navigator<`u`;function ce(){return typeof Deno<`u`&&Deno.build!=null?`deno`:typeof EdgeRuntime<`u`?`edge`:Object.prototype.toString.call(globalThis.process===void 0?0:globalThis.process)===`[object process]`?`node`:`unknown`}var le=()=>{let e=ce();if(e===`deno`)return{"X-Stainless-Lang":`js`,"X-Stainless-Package-Version":oe,"X-Stainless-OS":fe(Deno.build.os),"X-Stainless-Arch":de(Deno.build.arch),"X-Stainless-Runtime":`deno`,"X-Stainless-Runtime-Version":typeof Deno.version==`string`?Deno.version:Deno.version?.deno??`unknown`};if(typeof EdgeRuntime<`u`)return{"X-Stainless-Lang":`js`,"X-Stainless-Package-Version":oe,"X-Stainless-OS":`Unknown`,"X-Stainless-Arch":`other:${EdgeRuntime}`,"X-Stainless-Runtime":`edge`,"X-Stainless-Runtime-Version":globalThis.process.version};if(e===`node`)return{"X-Stainless-Lang":`js`,"X-Stainless-Package-Version":oe,"X-Stainless-OS":fe(globalThis.process.platform??`unknown`),"X-Stainless-Arch":de(globalThis.process.arch??`unknown`),"X-Stainless-Runtime":`node`,"X-Stainless-Runtime-Version":globalThis.process.version??`unknown`};let t=ue();return t?{"X-Stainless-Lang":`js`,"X-Stainless-Package-Version":oe,"X-Stainless-OS":`Unknown`,"X-Stainless-Arch":`unknown`,"X-Stainless-Runtime":`browser:${t.browser}`,"X-Stainless-Runtime-Version":t.version}:{"X-Stainless-Lang":`js`,"X-Stainless-Package-Version":oe,"X-Stainless-OS":`Unknown`,"X-Stainless-Arch":`unknown`,"X-Stainless-Runtime":`unknown`,"X-Stainless-Runtime-Version":`unknown`}};function ue(){if(typeof navigator>`u`||!navigator)return null;for(let{key:e,pattern:t}of[{key:`edge`,pattern:/Edge(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:`ie`,pattern:/MSIE(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:`ie`,pattern:/Trident(?:.*rv\:(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:`chrome`,pattern:/Chrome(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:`firefox`,pattern:/Firefox(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:`safari`,pattern:/(?:Version\W+(\d+)\.(\d+)(?:\.(\d+))?)?(?:\W+Mobile\S*)?\W+Safari/}]){let n=t.exec(navigator.userAgent);if(n)return{browser:e,version:`${n[1]||0}.${n[2]||0}.${n[3]||0}`}}return null}var de=e=>e===`x32`?`x32`:e===`x86_64`||e===`x64`?`x64`:e===`arm`?`arm`:e===`aarch64`||e===`arm64`?`arm64`:e?`other:${e}`:`unknown`,fe=e=>(e=e.toLowerCase(),e.includes(`ios`)?`iOS`:e===`android`?`Android`:e===`darwin`?`MacOS`:e===`win32`?`Windows`:e===`freebsd`?`FreeBSD`:e===`openbsd`?`OpenBSD`:e===`linux`?`Linux`:e?`Other:${e}`:`Unknown`),pe,me=()=>pe??=le();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=({headers:e,body:t})=>({bodyHeaders:{"content-type":`application/json`},body:JSON.stringify(t)}),xe=`RFC3986`,Se=e=>String(e),Ce={RFC1738:e=>String(e).replace(/%20/g,`+`),RFC3986:Se},we=(e,t)=>(we=Object.hasOwn??Function.prototype.call.bind(Object.prototype.hasOwnProperty),we(e,t)),E=(()=>{let e=[];for(let t=0;t<256;++t)e.push(`%`+((t<16?`0`:``)+t.toString(16)).toUpperCase());return e})(),Te=1024,Ee=(e,t,n,r,i)=>{if(e.length===0)return e;let a=e;if(typeof e==`symbol`?a=Symbol.prototype.toString.call(e):typeof e!=`string`&&(a=String(e)),n===`iso-8859-1`)return escape(a).replace(/%u[0-9a-f]{4}/gi,function(e){return`%26%23`+parseInt(e.slice(2),16)+`%3B`});let o=``;for(let e=0;e<a.length;e+=Te){let t=a.length>=Te?a.slice(e,e+Te):a,n=[];for(let e=0;e<t.length;++e){let r=t.charCodeAt(e);if(r===45||r===46||r===95||r===126||r>=48&&r<=57||r>=65&&r<=90||r>=97&&r<=122||i===`RFC1738`&&(r===40||r===41)){n[n.length]=t.charAt(e);continue}if(r<128){n[n.length]=E[r];continue}if(r<2048){n[n.length]=E[192|r>>6]+E[128|r&63];continue}if(r<55296||r>=57344){n[n.length]=E[224|r>>12]+E[128|r>>6&63]+E[128|r&63];continue}e+=1,r=65536+((r&1023)<<10|t.charCodeAt(e)&1023),n[n.length]=E[240|r>>18]+E[128|r>>12&63]+E[128|r>>6&63]+E[128|r&63]}o+=n.join(``)}return o};function De(e){return!e||typeof e!=`object`?!1:!!(e.constructor&&e.constructor.isBuffer&&e.constructor.isBuffer(e))}function Oe(e,t){if(x(e)){let n=[];for(let r=0;r<e.length;r+=1)n.push(t(e[r]));return n}return t(e)}var ke={brackets(e){return String(e)+`[]`},comma:`comma`,indices(e,t){return String(e)+`[`+t+`]`},repeat(e){return String(e)}},Ae=function(e,t){Array.prototype.push.apply(e,x(t)?t:[t])},je,D={addQueryPrefix:!1,allowDots:!1,allowEmptyArrays:!1,arrayFormat:`indices`,charset:`utf-8`,charsetSentinel:!1,delimiter:`&`,encode:!0,encodeDotInKeys:!1,encoder:Ee,encodeValuesOnly:!1,format:xe,formatter:Se,indices:!1,serializeDate(e){return(je??=Function.prototype.call.bind(Date.prototype.toISOString))(e)},skipNulls:!1,strictNullHandling:!1};function Me(e){return typeof e==`string`||typeof e==`number`||typeof e==`boolean`||typeof e==`symbol`||typeof e==`bigint`}var Ne={};function Pe(e,t,n,r,i,a,o,s,c,l,u,d,f,p,m,h,g,_){let v=e,y=_,b=0,ee=!1;for(;(y=y.get(Ne))!==void 0&&!ee;){let t=y.get(e);if(b+=1,t!==void 0){if(t===b)throw RangeError(`Cyclic object value`);ee=!0}y.get(Ne)===void 0&&(b=0)}if(typeof l==`function`?v=l(t,v):v instanceof Date?v=f?.(v):n===`comma`&&x(v)&&(v=Oe(v,function(e){return e instanceof Date?f?.(e):e})),v===null){if(a)return c&&!h?c(t,D.encoder,g,`key`,p):t;v=``}if(Me(v)||De(v)){if(c){let e=h?t:c(t,D.encoder,g,`key`,p);return[m?.(e)+`=`+m?.(c(v,D.encoder,g,`value`,p))]}return[m?.(t)+`=`+m?.(String(v))]}let te=[];if(v===void 0)return te;let S;if(n===`comma`&&x(v))h&&c&&(v=Oe(v,c)),S=[{value:v.length>0?v.join(`,`)||null:void 0}];else if(x(l))S=l;else{let e=Object.keys(v);S=u?e.sort(u):e}let C=s?String(t).replace(/\./g,`%2E`):String(t),w=r&&x(v)&&v.length===1?C+`[]`:C;if(i&&x(v)&&v.length===0)return w+`[]`;for(let t=0;t<S.length;++t){let y=S[t],ee=typeof y==`object`&&y.value!==void 0?y.value:v[y];if(o&&ee===null)continue;let C=d&&s?y.replace(/\./g,`%2E`):y,ne=x(v)?typeof n==`function`?n(w,C):w:w+(d?`.`+C:`[`+C+`]`);_.set(e,b);let T=new WeakMap;T.set(Ne,_),Ae(te,Pe(ee,ne,n,r,i,a,o,s,n===`comma`&&h&&x(v)?null:c,l,u,d,f,p,m,h,g,T))}return te}function Fe(e=D){if(e.allowEmptyArrays!==void 0&&typeof e.allowEmptyArrays!=`boolean`)throw TypeError("`allowEmptyArrays` option can only be `true` or `false`, when provided");if(e.encodeDotInKeys!==void 0&&typeof e.encodeDotInKeys!=`boolean`)throw TypeError("`encodeDotInKeys` option can only be `true` or `false`, when provided");if(e.encoder!==null&&e.encoder!==void 0&&typeof e.encoder!=`function`)throw TypeError(`Encoder has to be a function.`);let t=e.charset||D.charset;if(e.charset!==void 0&&e.charset!==`utf-8`&&e.charset!==`iso-8859-1`)throw TypeError(`The charset option must be either utf-8, iso-8859-1, or undefined`);let n=xe;if(e.format!==void 0){if(!we(Ce,e.format))throw TypeError(`Unknown format option provided.`);n=e.format}let r=Ce[n],i=D.filter;(typeof e.filter==`function`||x(e.filter))&&(i=e.filter);let a;if(a=e.arrayFormat&&e.arrayFormat in ke?e.arrayFormat:`indices`in e?e.indices?`indices`:`repeat`:D.arrayFormat,`commaRoundTrip`in e&&typeof e.commaRoundTrip!=`boolean`)throw TypeError("`commaRoundTrip` must be a boolean, or absent");let o=e.allowDots===void 0?e.encodeDotInKeys?!0:D.allowDots:!!e.allowDots;return{addQueryPrefix:typeof e.addQueryPrefix==`boolean`?e.addQueryPrefix:D.addQueryPrefix,allowDots:o,allowEmptyArrays:typeof e.allowEmptyArrays==`boolean`?!!e.allowEmptyArrays:D.allowEmptyArrays,arrayFormat:a,charset:t,charsetSentinel:typeof e.charsetSentinel==`boolean`?e.charsetSentinel:D.charsetSentinel,commaRoundTrip:!!e.commaRoundTrip,delimiter:e.delimiter===void 0?D.delimiter:e.delimiter,encode:typeof e.encode==`boolean`?e.encode:D.encode,encodeDotInKeys:typeof e.encodeDotInKeys==`boolean`?e.encodeDotInKeys:D.encodeDotInKeys,encoder:typeof e.encoder==`function`?e.encoder:D.encoder,encodeValuesOnly:typeof e.encodeValuesOnly==`boolean`?e.encodeValuesOnly:D.encodeValuesOnly,filter:i,format:n,formatter:r,serializeDate:typeof e.serializeDate==`function`?e.serializeDate:D.serializeDate,skipNulls:typeof e.skipNulls==`boolean`?e.skipNulls:D.skipNulls,sort:typeof e.sort==`function`?e.sort:null,strictNullHandling:typeof e.strictNullHandling==`boolean`?e.strictNullHandling:D.strictNullHandling}}function Ie(e,t={}){let n=e,r=Fe(t),i,a;typeof r.filter==`function`?(a=r.filter,n=a(``,n)):x(r.filter)&&(a=r.filter,i=a);let o=[];if(typeof n!=`object`||!n)return``;let s=ke[r.arrayFormat],c=s===`comma`&&r.commaRoundTrip;i||=Object.keys(n),r.sort&&i.sort(r.sort);let l=new WeakMap;for(let e=0;e<i.length;++e){let t=i[e];r.skipNulls&&n[t]===null||Ae(o,Pe(n[t],t,s,c,r.allowEmptyArrays,r.strictNullHandling,r.skipNulls,r.encodeDotInKeys,r.encode?r.encoder:null,r.filter,r.sort,r.allowDots,r.serializeDate,r.format,r.formatter,r.encodeValuesOnly,r.charset,l))}let u=o.join(r.delimiter),d=r.addQueryPrefix===!0?`?`:``;return r.charsetSentinel&&(r.charset===`iso-8859-1`?d+=`utf8=%26%2310003%3B&`:d+=`utf8=%E2%9C%93&`),u.length>0?d+u:``}function Le(e){return Ie(e,{arrayFormat:`brackets`})}function Re(e){let t=0;for(let n of e)t+=n.length;let n=new Uint8Array(t),r=0;for(let t of e)n.set(t,r),r+=t.length;return n}var ze;function Be(e){let t;return(ze??=(t=new globalThis.TextEncoder,t.encode.bind(t)))(e)}var Ve;function He(e){let t;return(Ve??=(t=new globalThis.TextDecoder,t.decode.bind(t)))(e)}var O,k,Ue=class{constructor(){O.set(this,void 0),k.set(this,void 0),e(this,O,new Uint8Array,`f`),e(this,k,null,`f`)}decode(n){if(n==null)return[];let r=n instanceof ArrayBuffer?new Uint8Array(n):typeof n==`string`?Be(n):n;e(this,O,Re([t(this,O,`f`),r]),`f`);let i=[],a;for(;(a=We(t(this,O,`f`),t(this,k,`f`)))!=null;){if(a.carriage&&t(this,k,`f`)==null){e(this,k,a.index,`f`);continue}if(t(this,k,`f`)!=null&&(a.index!==t(this,k,`f`)+1||a.carriage)){i.push(He(t(this,O,`f`).subarray(0,t(this,k,`f`)-1))),e(this,O,t(this,O,`f`).subarray(t(this,k,`f`)),`f`),e(this,k,null,`f`);continue}let n=t(this,k,`f`)===null?a.preceding:a.preceding-1,r=He(t(this,O,`f`).subarray(0,n));i.push(r),e(this,O,t(this,O,`f`).subarray(a.index),`f`),e(this,k,null,`f`)}return i}flush(){return t(this,O,`f`).length?this.decode(`
2
2
  `):[]}};O=new WeakMap,k=new WeakMap,Ue.NEWLINE_CHARS=new Set([`
3
3
  `,`\r`]),Ue.NEWLINE_REGEXP=/\r\n|[\n\r]/g;function We(e,t){for(let n=t??0;n<e.length;n++){if(e[n]===10)return{preceding:n,index:n+1,carriage:!1};if(e[n]===13)return{preceding:n,index:n+1,carriage:!0}}return null}function Ge(e){for(let t=0;t<e.length-1;t++){if(e[t]===10&&e[t+1]===10||e[t]===13&&e[t+1]===13)return t+2;if(e[t]===13&&e[t+1]===10&&t+3<e.length&&e[t+2]===13&&e[t+3]===10)return t+4}return-1}var Ke={off:0,error:200,warn:300,info:400,debug:500},qe=(e,t,n)=>{if(e){if(ne(Ke,e))return e;A(n).warn(`${t} was set to ${JSON.stringify(e)}, expected one of ${JSON.stringify(Object.keys(Ke))}`)}};function Je(){}function Ye(e,t,n){return!t||Ke[e]>Ke[n]?Je:t[e].bind(t)}var Xe={error:Je,warn:Je,info:Je,debug:Je},Ze=new WeakMap;function A(e){let t=e.logger,n=e.logLevel??`off`;if(!t)return Xe;let r=Ze.get(t);if(r&&r[0]===n)return r[1];let i={error:Ye(`error`,t,n),warn:Ye(`warn`,t,n),info:Ye(`info`,t,n),debug:Ye(`debug`,t,n)};return Ze.set(t,[n,i]),i}var j=e=>(e.options&&(e.options={...e.options},delete e.options.headers),e.headers&&=Object.fromEntries((e.headers instanceof Headers?[...e.headers]:Object.entries(e.headers)).map(([e,t])=>[e,e.toLowerCase()===`authorization`||e.toLowerCase()===`cookie`||e.toLowerCase()===`set-cookie`?`***`:t])),`retryOfRequestLogID`in e&&(e.retryOfRequestLogID&&(e.retryOf=e.retryOfRequestLogID),delete e.retryOfRequestLogID),e),Qe,$e=class n{constructor(t,n,r){this.iterator=t,Qe.set(this,void 0),this.controller=n,e(this,Qe,r,`f`)}static fromSSEResponse(e,t,i,s){let c=!1,l=i?A(i):console;async function*u(){if(c)throw new a("Cannot iterate over a consumed stream, use `.tee()` to split the stream.");c=!0;let n=!1;try{for await(let r of et(e,t))if(!n){if(r.data.startsWith(`[DONE]`)){n=!0;continue}if(r.event===null||!r.event.startsWith(`thread.`)){let t;try{t=JSON.parse(r.data)}catch(e){throw l.error(`Could not parse message into JSON:`,r.data),l.error(`From chunk:`,r.raw),e}if(t&&t.error)throw new o(void 0,t.error,void 0,e.headers);yield s?{event:r.event,data:t}:t}else{let e;try{e=JSON.parse(r.data)}catch(e){throw console.error(`Could not parse message into JSON:`,r.data),console.error(`From chunk:`,r.raw),e}if(r.event==`error`)throw new o(void 0,e.error,e.message,void 0);yield{event:r.event,data:e}}}n=!0}catch(e){if(r(e))return;throw e}finally{n||t.abort()}}return new n(u,t,i)}static fromReadableStream(e,t,i){let o=!1;async function*s(){let t=new Ue,n=ve(e);for await(let e of n)for(let n of t.decode(e))yield n;for(let e of t.flush())yield e}async function*c(){if(o)throw new a("Cannot iterate over a consumed stream, use `.tee()` to split the stream.");o=!0;let e=!1;try{for await(let t of s())e||t&&(yield JSON.parse(t));e=!0}catch(e){if(r(e))return;throw e}finally{e||t.abort()}}return new n(c,t,i)}[(Qe=new WeakMap,Symbol.asyncIterator)](){return this.iterator()}tee(){let e=[],r=[],i=this.iterator(),a=t=>({next:()=>{if(t.length===0){let t=i.next();e.push(t),r.push(t)}return t.shift()}});return[new n(()=>a(e),this.controller,t(this,Qe,`f`)),new n(()=>a(r),this.controller,t(this,Qe,`f`))]}toReadableStream(){let e=this,t;return ge({async start(){t=e[Symbol.asyncIterator]()},async pull(e){try{let{value:n,done:r}=await t.next();if(r)return e.close();let i=Be(JSON.stringify(n)+`
4
4
  `);e.enqueue(i)}catch(t){e.error(t)}},async cancel(){await t.return?.()}})}};async function*et(e,t){if(!e.body)throw t.abort(),globalThis.navigator!==void 0&&globalThis.navigator.product===`ReactNative`?new a(`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 a(`Attempted to iterate over a response with no body`);let n=new nt,r=new Ue,i=ve(e.body);for await(let e of tt(i))for(let t of r.decode(e)){let e=n.decode(t);e&&(yield e)}for(let e of r.flush()){let t=n.decode(e);t&&(yield t)}}async function*tt(e){let t=new Uint8Array;for await(let n of e){if(n==null)continue;let e=n instanceof ArrayBuffer?new Uint8Array(n):typeof n==`string`?Be(n):n,r=new Uint8Array(t.length+e.length);r.set(t),r.set(e,t.length),t=r;let i;for(;(i=Ge(t))!==-1;)yield t.slice(0,i),t=t.slice(i)}t.length>0&&(yield t)}var nt=class{constructor(){this.event=null,this.data=[],this.chunks=[]}decode(e){if(e.endsWith(`\r`)&&(e=e.substring(0,e.length-1)),!e){if(!this.event&&!this.data.length)return null;let e={event:this.event,data:this.data.join(`
@@ -13,7 +13,7 @@ var e = class {
13
13
  try {
14
14
  let t = await import(
15
15
  /* webpackIgnore: true */
16
- "./openai-DqCEogm0.js"
16
+ "./openai-CqZg6zYL.js"
17
17
  );
18
18
  e = t.default || t.OpenAI || t;
19
19
  } catch {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "drizzle-cube",
3
- "version": "0.4.42",
3
+ "version": "0.4.43",
4
4
  "description": "Drizzle ORM-first semantic layer with Cube.js compatibility. Type-safe analytics and dashboards with SQL injection protection.",
5
5
  "main": "./dist/server/index.js",
6
6
  "types": "./dist/server/index.d.ts",
@@ -184,6 +184,7 @@
184
184
  "d3": "^7.9.0",
185
185
  "drizzle-orm": "^0.45.0",
186
186
  "elkjs": "^0.9.0 || ^0.11.1",
187
+ "exceljs": ">=4.0.0",
187
188
  "express": "^5.0.0",
188
189
  "fastify": "^5.0.0",
189
190
  "hono": "^4.0.0",
@@ -267,6 +268,9 @@
267
268
  },
268
269
  "elkjs": {
269
270
  "optional": true
271
+ },
272
+ "exceljs": {
273
+ "optional": true
270
274
  }
271
275
  },
272
276
  "optionalDependencies": {
@@ -320,6 +324,7 @@
320
324
  "elkjs": "^0.11.1",
321
325
  "eslint": "^10.0.0",
322
326
  "eslint-plugin-react-hooks": "^7.0.1",
327
+ "exceljs": "^4.4.0",
323
328
  "express": "^5.1.0",
324
329
  "fastify": "^5.6.2",
325
330
  "globals": "^17.0.0",