@marimo-team/frontend 0.16.4 → 0.16.5

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 (408) hide show
  1. package/dist/assets/{CellStatus-CEVFBnyt.js → CellStatus-BJRDATxe.js} +1 -1
  2. package/dist/assets/{ConnectedDataExplorerComponent-5izWKQVQ.js → ConnectedDataExplorerComponent-Cs4pQOKx.js} +1 -1
  3. package/dist/assets/{ImperativeModal-DujtmdOO.js → ImperativeModal-BG5LTpV0.js} +1 -1
  4. package/dist/assets/{JsonOutput-E2xVojk5.js → JsonOutput-BID8Oos7.js} +1 -1
  5. package/dist/assets/{LazyAnyLanguageCodeMirror-DHH4zj72.js → LazyAnyLanguageCodeMirror-RkzkO2YV.js} +2 -2
  6. package/dist/assets/MarimoErrorOutput-Lft73Wnl.js +6 -0
  7. package/dist/assets/{RenderHTML-BCi_V67U.js → RenderHTML-BoDLdBq-.js} +1 -1
  8. package/dist/assets/{VisuallyHidden-DvpnK2wO.js → VisuallyHidden-BiHw-PIc.js} +1 -1
  9. package/dist/assets/{accordion-C3CAEPwC.js → accordion-A41ffd5P.js} +1 -1
  10. package/dist/assets/{activity-BCW0BU81.js → activity-BhLNCNHF.js} +1 -1
  11. package/dist/assets/add-cell-with-ai-CxM_YKzf.js +36 -0
  12. package/dist/assets/{add-database-form-DSnHGqMe.js → add-database-form-Br1fMkMI.js} +1 -1
  13. package/dist/assets/{add-missing-import-Cwedhjm5.js → add-missing-import-CfRgNApn.js} +1 -1
  14. package/dist/assets/agent-panel-7ocujO8C.js +287 -0
  15. package/dist/assets/ai-model-dropdown-DSUVFIso.js +2 -0
  16. package/dist/assets/{alert-dialog-M1dUQe7C.js → alert-dialog-BO8sf-73.js} +1 -1
  17. package/dist/assets/{ansi_up-ZmFuCItK.js → ansi_up-D_b0GS7N.js} +1 -1
  18. package/dist/assets/{any-language-editor-BqGBgxZE.js → any-language-editor-edee1A1P.js} +1 -1
  19. package/dist/assets/app-config-button-Bg_CEfls.js +1 -0
  20. package/dist/assets/{architecture-O4VJ6CD3-CbkBEQri.js → architecture-O4VJ6CD3-CIYFBxkI.js} +1 -1
  21. package/dist/assets/{architectureDiagram-W76B3OCA-di95lJcF.js → architectureDiagram-W76B3OCA-CXqAkVTy.js} +1 -1
  22. package/dist/assets/{arrow-left-DQ-94PlS.js → arrow-left-D97p491f.js} +1 -1
  23. package/dist/assets/{between-horizontal-start-CotWLlFt.js → between-horizontal-start-DWTOsiF_.js} +1 -1
  24. package/dist/assets/{blockDiagram-QIGZ2CNN-ClcJSQFf.js → blockDiagram-QIGZ2CNN-DhYrUig_.js} +1 -1
  25. package/dist/assets/{c4Diagram-FPNF74CW-Cq2vxSdy.js → c4Diagram-FPNF74CW-Bj1S_Fyy.js} +1 -1
  26. package/dist/assets/{cell-actions-C5S4W3g_.js → cell-actions-hNx4EMmZ.js} +1 -1
  27. package/dist/assets/{cell-editor-X6EY7GQl.js → cell-editor-JimG_bBz.js} +13 -13
  28. package/dist/assets/cell-link-_kF38gGF.js +1 -0
  29. package/dist/assets/{cells-B4cnsYe_.js → cells-Dd1FatlG.js} +54 -54
  30. package/dist/assets/channel-Bil_pUlM.js +1 -0
  31. package/dist/assets/{chart-no-axes-column-DrG7h8mS.js → chart-no-axes-column-DmR44Tbq.js} +1 -1
  32. package/dist/assets/{chat-components-DXkntpg4.js → chat-components-OoNU4tLf.js} +3 -3
  33. package/dist/assets/chat-panel-DatwRFif.js +3 -0
  34. package/dist/assets/check-C5PVLNkJ.js +1 -0
  35. package/dist/assets/{chevron-right-Caf5yL5B.js → chevron-right-BDEhimQq.js} +1 -1
  36. package/dist/assets/{chunk-3AY6CYHV-BFFUJATX.js → chunk-3AY6CYHV-CBq2x1Nc.js} +1 -1
  37. package/dist/assets/{chunk-4KMFLZZN-D8J8fzqf.js → chunk-4KMFLZZN-DEMg9QYp.js} +1 -1
  38. package/dist/assets/{chunk-6OXUPJBA-Clo7-gS4.js → chunk-6OXUPJBA-CjFdZBrY.js} +2 -2
  39. package/dist/assets/{chunk-ABZYJK2D-DjRcbxmx.js → chunk-ABZYJK2D-eZsthrBr.js} +1 -1
  40. package/dist/assets/{chunk-BN7GFLIU-DvomLhVN.js → chunk-BN7GFLIU-ez-vZ7uD.js} +1 -1
  41. package/dist/assets/{chunk-CXMOBAN2-GhUPxuLT.js → chunk-CXMOBAN2-DxbPW6zT.js} +1 -1
  42. package/dist/assets/{chunk-EXTU4WIE-97Zvkznr.js → chunk-EXTU4WIE-C8Y_P6y8.js} +1 -1
  43. package/dist/assets/{chunk-JA3XYJ7Z-Mvfz9vG6.js → chunk-JA3XYJ7Z-pR89xWsn.js} +1 -1
  44. package/dist/assets/{chunk-JEIROHC2-Cp1tR_z8.js → chunk-JEIROHC2-2-ucCTVJ.js} +1 -1
  45. package/dist/assets/{chunk-K7UQS3LO-BbFs0Y5e.js → chunk-K7UQS3LO-Bz3bjON2.js} +1 -1
  46. package/dist/assets/{chunk-KMC2YHZD-Buiqyl2g.js → chunk-KMC2YHZD-BvMr39QE.js} +1 -1
  47. package/dist/assets/{chunk-QN33PNHL-dhs223oU.js → chunk-QN33PNHL-DgF0LOHR.js} +1 -1
  48. package/dist/assets/{chunk-QYVHNE3D-DA_jYaIp.js → chunk-QYVHNE3D-BxN3DJBX.js} +1 -1
  49. package/dist/assets/{chunk-S3R3BYOJ-DO68jEIo.js → chunk-S3R3BYOJ-Dy72CLbv.js} +1 -1
  50. package/dist/assets/{chunk-T44TD3VJ-Ww2OhwR5.js → chunk-T44TD3VJ-BfMjD4hS.js} +1 -1
  51. package/dist/assets/{chunk-TVAH2DTR-j2EljfwG.js → chunk-TVAH2DTR-CKnRAcjo.js} +1 -1
  52. package/dist/assets/{chunk-TZMSLE5B-DYFKU4Pb.js → chunk-TZMSLE5B-DdgcuCwZ.js} +1 -1
  53. package/dist/assets/{chunk-WFRQ32O7-k2LaZwie.js → chunk-WFRQ32O7-CHVQx4E8.js} +1 -1
  54. package/dist/assets/{chunk-WFWHJNB7-h5yM_3qQ.js → chunk-WFWHJNB7-B095GDsj.js} +1 -1
  55. package/dist/assets/{chunk-XRWGC2XP-C9Mh6qts.js → chunk-XRWGC2XP-C9u0mhR4.js} +1 -1
  56. package/dist/assets/{circle-play-Cktn64O2.js → circle-play-BnvyuDgL.js} +1 -1
  57. package/dist/assets/{circle-plus-CR5IX63e.js → circle-plus-CfdbDkkn.js} +1 -1
  58. package/dist/assets/{circle-x-t3DIkXqJ.js → circle-x-BsVcxKkV.js} +1 -1
  59. package/dist/assets/classDiagram-KNZD7YFC-CjqRV-TB.js +1 -0
  60. package/dist/assets/classDiagram-v2-RKCZMP56-CGekJfCg.js +1 -0
  61. package/dist/assets/client-RNr6mM1Y.js +2 -0
  62. package/dist/assets/{clipboard-paste-CCXUHJEo.js → clipboard-paste-CYFMW3x7.js} +1 -1
  63. package/dist/assets/column-preview-2H8pwalb.js +2 -0
  64. package/dist/assets/{columns-BBxos2iF.js → columns-qXe5bccO.js} +7 -7
  65. package/dist/assets/{command-CMralWVx.js → command-BZVf1cJP.js} +1 -1
  66. package/dist/assets/command-palette-CYMxp9xF.js +1 -0
  67. package/dist/assets/{common-CGhyb0HV.js → common-DW3bNKWY.js} +1 -1
  68. package/dist/assets/{config-DiCy6eC0.js → config-DXGmIv9f.js} +1 -1
  69. package/dist/assets/{copy-DAVB02c8.js → copy-6mpL4BeI.js} +1 -1
  70. package/dist/assets/{copy-icon-GGPHJWJ0.js → copy-icon-6ICckC-p.js} +1 -1
  71. package/dist/assets/{dagre-5GWH7T2D-B1wEBSrx.js → dagre-5GWH7T2D-hVCok2au.js} +1 -1
  72. package/dist/assets/{data-grid-overlay-editor-Drp4I0tg.js → data-grid-overlay-editor-BwcAr1JM.js} +1 -1
  73. package/dist/assets/datasources-panel-BvrtAadm.js +1 -0
  74. package/dist/assets/{dates-grtSI02N.js → dates-Au76svwW.js} +1 -1
  75. package/dist/assets/dependency-graph-panel-F9AD_whb.js +4 -0
  76. package/dist/assets/{diagram-N5W7TBWH-D0MGIq61.js → diagram-N5W7TBWH-C26XpepA.js} +1 -1
  77. package/dist/assets/{diagram-QEK2KX5R-DU6geLeA.js → diagram-QEK2KX5R-yrTR8I_L.js} +1 -1
  78. package/dist/assets/{diagram-S2PKOQOG-BNhY4Z1-.js → diagram-S2PKOQOG-BnrvSrEb.js} +1 -1
  79. package/dist/assets/{dialog-B7icy1Vb.js → dialog-CR68_CUl.js} +1 -1
  80. package/dist/assets/{dist-BNjtn4W8.js → dist--01dzFeG.js} +1 -1
  81. package/dist/assets/{dist-BagyUivg.js → dist--UHY1FN-.js} +1 -1
  82. package/dist/assets/{dist-5Gm6w_15.js → dist-6vTAXnMq.js} +1 -1
  83. package/dist/assets/{dist-DTazGMur.js → dist-B6CCfKkp.js} +1 -1
  84. package/dist/assets/dist-BAqgWgpM.js +1 -0
  85. package/dist/assets/{dist-BaApG_tl.js → dist-BUe_o-3o.js} +1 -1
  86. package/dist/assets/{dist-BpAb8rGb.js → dist-BnTbfmCK.js} +1 -1
  87. package/dist/assets/dist-C-4GTx-T.js +1 -0
  88. package/dist/assets/{dist-C0ek66tJ.js → dist-C1lnVyyK.js} +1 -1
  89. package/dist/assets/{dist-DGiVfc7V.js → dist-CbsJnssA.js} +1 -1
  90. package/dist/assets/{dist-DV-8bxFo.js → dist-CjoeBoZ9.js} +1 -1
  91. package/dist/assets/{dist-D5QvSsL_.js → dist-CsC8ZokE.js} +1 -1
  92. package/dist/assets/{dist-C69eWtaQ.js → dist-CyqTsfyg.js} +1 -1
  93. package/dist/assets/dist-D-ZYdf69.js +1 -0
  94. package/dist/assets/dist-D3B_GqVR.js +1 -0
  95. package/dist/assets/{dist-BME02X12.js → dist-DFJwMM7Z.js} +1 -1
  96. package/dist/assets/dist-Db9UVaw9.js +1 -0
  97. package/dist/assets/{dist-BPr57Wxb.js → dist-DhXqYYeD.js} +1 -1
  98. package/dist/assets/{dist-CL0hPMY6.js → dist-Dm8m1boP.js} +1 -1
  99. package/dist/assets/{dist-B0vg88Aq.js → dist-DvDyxv8b.js} +1 -1
  100. package/dist/assets/{dist-Bzn1Zd0x.js → dist-DzUKODTF.js} +1 -1
  101. package/dist/assets/dist-LmEq3o4w.js +1 -0
  102. package/dist/assets/dist-Z_cK0cSh.js +1 -0
  103. package/dist/assets/dist-biP83Yvc.js +1 -0
  104. package/dist/assets/dist-dJ4FqqTe.js +1 -0
  105. package/dist/assets/{documentation-panel-D4iq1tSm.js → documentation-panel-DYKAf6Sg.js} +1 -1
  106. package/dist/assets/{dom-4KyFHEbl.js → dom-CT3dAMQW.js} +1 -1
  107. package/dist/assets/{download-C4Fyu6kU.js → download-B4_BX7gi.js} +1 -1
  108. package/dist/assets/{download-qt61TbgC.js → download-BB5Iexmn.js} +1 -1
  109. package/dist/assets/{dropdown-menu-Bp1vhqcS.js → dropdown-menu-CJDB1PNI.js} +1 -1
  110. package/dist/assets/edit-page-BK3Irdme.js +12 -0
  111. package/dist/assets/{ellipsis-DVXWk8Lc.js → ellipsis-CJtiw1k3.js} +1 -1
  112. package/dist/assets/{ellipsis-vertical-DfpheMuY.js → ellipsis-vertical-DK--y082.js} +1 -1
  113. package/dist/assets/{en-US-B2g9dciI.js → en-US-CjWuOpsV.js} +1 -1
  114. package/dist/assets/{erDiagram-AWTI2OKA-DxxWZrYD.js → erDiagram-AWTI2OKA-9EqwLrlG.js} +1 -1
  115. package/dist/assets/{error-banner-ARu6PiHL.js → error-banner-BGjnZePp.js} +1 -1
  116. package/dist/assets/error-panel-CrkbkIF_.js +1 -0
  117. package/dist/assets/{es-C0Ih1AxE.js → es-C-CWIA-E.js} +1 -1
  118. package/dist/assets/{esm-BR7TuyMc.js → esm-7XxuulnL.js} +1 -1
  119. package/dist/assets/{esm-Cb-iIF_w.js → esm-B39og2OG.js} +1 -1
  120. package/dist/assets/{esm-BIF8NHm8.js → esm-BBn_y9Ew.js} +1 -1
  121. package/dist/assets/esm-DjUQOOJ2.js +1 -0
  122. package/dist/assets/{eye-off-BEVibdMQ.js → eye-off-9UMe_Y7D.js} +1 -1
  123. package/dist/assets/field-D6g5A_wf.js +1 -0
  124. package/dist/assets/{file-DqkkCGhs.js → file-BENStGHx.js} +1 -1
  125. package/dist/assets/file-explorer-panel-Cgv3WjVh.js +1 -0
  126. package/dist/assets/{file-plus-2-BCmZgbYs.js → file-plus-2-CloHhbsF.js} +1 -1
  127. package/dist/assets/{file-text-DNmaotaP.js → file-text-Lr1kJd4E.js} +1 -1
  128. package/dist/assets/{file-video-camera-C5lALvNf.js → file-video-camera-CfnyBQQe.js} +1 -1
  129. package/dist/assets/filename-B5Yo1bOu.js +1 -0
  130. package/dist/assets/{floating-outline-Cjas_exC.js → floating-outline-DZnSnZfg.js} +1 -1
  131. package/dist/assets/{flowDiagram-PVAE7QVJ-DlTZtqcN.js → flowDiagram-PVAE7QVJ-iOj6Qgu-.js} +1 -1
  132. package/dist/assets/{focus-OWoLlKnm.js → focus-Bnk25hTp.js} +1 -1
  133. package/dist/assets/{form-xOqp67zT.js → form-BGZvwlog.js} +1 -1
  134. package/dist/assets/{form--nX5W3gQ.js → form-DyKYT1WR.js} +1 -1
  135. package/dist/assets/{formats-C8bbggqj.js → formats-CWdWXhfT.js} +1 -1
  136. package/dist/assets/{fullscreen-BFmvQx5m.js → fullscreen-DTPr3iBY.js} +1 -1
  137. package/dist/assets/{ganttDiagram-OWAHRB6G-BEPmawB5.js → ganttDiagram-OWAHRB6G-BWbXeAXa.js} +1 -1
  138. package/dist/assets/{gitGraph-ZV4HHKMB-DsmmnKI3.js → gitGraph-ZV4HHKMB-BpeeuO4L.js} +1 -1
  139. package/dist/assets/{gitGraphDiagram-NY62KEGX-DfTKmX9v.js → gitGraphDiagram-NY62KEGX-BX3O-mzY.js} +1 -1
  140. package/dist/assets/{glide-data-editor-CzDe-oK3.js → glide-data-editor-C45ArX7n.js} +4 -4
  141. package/dist/assets/globals-BFoVgbHf.js +1 -0
  142. package/dist/assets/{globe-CgG1jfYF.js → globe-CPrVx8HM.js} +1 -1
  143. package/dist/assets/home-page-DhT6cm6c.js +4 -0
  144. package/dist/assets/{image-DXGqie4b.js → image-DTv0Ic6H.js} +1 -1
  145. package/dist/assets/{index-DtggTI4O.js → index-29P5xX8u.js} +11 -11
  146. package/dist/assets/index-Optxbl37.css +2 -0
  147. package/dist/assets/{info-63CPKGFF-BVRAJzgS.js → info-63CPKGFF-Czr08O9A.js} +1 -1
  148. package/dist/assets/{infoDiagram-STP46IZ2-CcEqfhrj.js → infoDiagram-STP46IZ2-C1JX9JfB.js} +1 -1
  149. package/dist/assets/input-C1RzjWSK.js +7 -0
  150. package/dist/assets/{isValid-gOtpcPxn.js → isValid-o3nZVu8e.js} +1 -1
  151. package/dist/assets/{journeyDiagram-BIP6EPQ6-CfxDuLls.js → journeyDiagram-BIP6EPQ6-CC2JvTQD.js} +1 -1
  152. package/dist/assets/{kanban-definition-6OIFK2YF-BwopERfW.js → kanban-definition-6OIFK2YF-3qAhCi66.js} +1 -1
  153. package/dist/assets/{key-BuxNhFKW.js → key-D4QiH_7H.js} +1 -1
  154. package/dist/assets/{kiosk-mode--OX2RHZj.js → kiosk-mode-Dy2WnuWt.js} +1 -1
  155. package/dist/assets/{label-COeaBwl_.js → label-BEUjZsdo.js} +1 -1
  156. package/dist/assets/{layout-CKoMTVJt.js → layout-C6K0XXFK.js} +3 -3
  157. package/dist/assets/{linear-BI0LBATm.js → linear-nWRf49aw.js} +1 -1
  158. package/dist/assets/{link-DSY8ADga.js → link-CDOxp9sn.js} +1 -1
  159. package/dist/assets/links-D-L0rzz9.js +1 -0
  160. package/dist/assets/{list-filter-D2Wx3thV.js → list-filter-CRC72QPW.js} +1 -1
  161. package/dist/assets/{loader-CPDA0quD.js → loader-CgbiPC_T.js} +1 -1
  162. package/dist/assets/logs-panel-BB-6orqg.js +1 -0
  163. package/dist/assets/{maps-CxCIYhRT.js → maps-DaQbs_UR.js} +1 -1
  164. package/dist/assets/{menu-items-COILZQ4q.js → menu-items-Bo6Dyd_Q.js} +1 -1
  165. package/dist/assets/{mermaid-oqJ6vLFm.js → mermaid-Bqzxmx0C.js} +1 -1
  166. package/dist/assets/{mermaid-parser.core-8414a7OP.js → mermaid-parser.core-CwRCqiGJ.js} +2 -2
  167. package/dist/assets/{mermaid.core-CKfX2q8j.js → mermaid.core-C4o4vdkw.js} +3 -3
  168. package/dist/assets/mermaid.core-DjncFP_O.js +1 -0
  169. package/dist/assets/{mindmap-definition-Q6HEUPPD-nadsjaMC.js → mindmap-definition-Q6HEUPPD-pLcSm-bI.js} +1 -1
  170. package/dist/assets/{mode-CBh2Ag_Y.js → mode-DQPKc-Hp.js} +1 -1
  171. package/dist/assets/{name-cell-input-CAG50xh2.js → name-cell-input-DQd65hJw.js} +1 -1
  172. package/dist/assets/{number-overlay-editor-CbWBjwI1.js → number-overlay-editor-Ce_FEpnn.js} +1 -1
  173. package/dist/assets/once-8ZDiGGtA.js +1 -0
  174. package/dist/assets/outline-panel-BJDiYH61.js +1 -0
  175. package/dist/assets/packages-panel-D_VswrEd.js +1 -0
  176. package/dist/assets/{packet-HUATNLJX-BJ_b_gYi.js → packet-HUATNLJX-C5NsAS_7.js} +1 -1
  177. package/dist/assets/{pie-WTHONI2E-CS2JfH5S.js → pie-WTHONI2E-BCNGQ0_9.js} +1 -1
  178. package/dist/assets/{pieDiagram-ADFJNKIX-DP_lAtPz.js → pieDiagram-ADFJNKIX-CUCBn1VN.js} +1 -1
  179. package/dist/assets/plug-DrNpofTj.js +1 -0
  180. package/dist/assets/{plus-C1zexBxS.js → plus-d2HNOuZI.js} +1 -1
  181. package/dist/assets/{popover-CLp_lH16.js → popover-DW0D4l0O.js} +1 -1
  182. package/dist/assets/{precisionRound-CR2cxaaR.js → precisionRound-TxjBk8nN.js} +1 -1
  183. package/dist/assets/{quadrantDiagram-LMRXKWRM-gzT_-w3S.js → quadrantDiagram-LMRXKWRM-C6DXTSnZ.js} +1 -1
  184. package/dist/assets/{radar-NJJJXTRR-ChMDxgqR.js → radar-NJJJXTRR-Cck-wBOB.js} +1 -1
  185. package/dist/assets/{react-plotly-DUuIpNDT.js → react-plotly-x7-8ig7L.js} +1 -1
  186. package/dist/assets/{readonly-python-code-DMLMHG1v.js → readonly-python-code-Cb7Ak_Dy.js} +1 -1
  187. package/dist/assets/{refresh-ccw-lUiAEOAx.js → refresh-ccw-CCJeTTJO.js} +1 -1
  188. package/dist/assets/{refresh-cw-CSv3xyYY.js → refresh-cw-B_tmnHav.js} +1 -1
  189. package/dist/assets/{renderShortcut-DMYtt-ju.js → renderShortcut-C9_NT6sD.js} +1 -1
  190. package/dist/assets/{request-registry-4Bq310sk.js → request-registry-D4PD0fDJ.js} +1 -1
  191. package/dist/assets/{requirementDiagram-4UW4RH46-aavD0qQF.js → requirementDiagram-4UW4RH46-Bj7w3axz.js} +1 -1
  192. package/dist/assets/run-page-D9jntYU0.js +1 -0
  193. package/dist/assets/{runs-CItfCHkl.js → runs-BWcKkv9g.js} +1 -1
  194. package/dist/assets/{sankeyDiagram-GR3RE2ED-r95m_h3N.js → sankeyDiagram-GR3RE2ED-DCmlCkUu.js} +1 -1
  195. package/dist/assets/{save-Bg0tsaXV.js → save-CVcbYdvl.js} +1 -1
  196. package/dist/assets/scratchpad-panel-BUGlPLwQ.js +1 -0
  197. package/dist/assets/{scroll-text-SAt1GCBr.js → scroll-text-CN-2fr92.js} +1 -1
  198. package/dist/assets/secrets-panel-DGPyMcTb.js +1 -0
  199. package/dist/assets/{select-CMG6DC3j.js → select-DKRTzlUU.js} +1 -1
  200. package/dist/assets/{send-ePQN2mpH.js → send-DRRBOpzT.js} +1 -1
  201. package/dist/assets/{sequenceDiagram-C3RYC4MD-C4GqHIgf.js → sequenceDiagram-C3RYC4MD-CtIOF8jj.js} +1 -1
  202. package/dist/assets/{settings-TIv8aSog.js → settings-6ySBJQ7Y.js} +1 -1
  203. package/dist/assets/{share-CUbi0XlA.js → share-Dcl7D_tA.js} +1 -1
  204. package/dist/assets/snippets-panel-CKi40HiX.js +1 -0
  205. package/dist/assets/{spinner-CxlO4-GJ.js → spinner-BhnfQOEl.js} +1 -1
  206. package/dist/assets/{square-uM1ci7iL.js → square-DKPXnMmD.js} +1 -1
  207. package/dist/assets/{square-function-OflPQrBg.js → square-function-DBJINsmk.js} +1 -1
  208. package/dist/assets/{square-terminal-DZAwMMdQ.js → square-terminal-DoFRZ-M6.js} +1 -1
  209. package/dist/assets/{src-BOK-SWX4.js → src-KuQao6GK.js} +1 -1
  210. package/dist/assets/state-B37sZn4X.js +1 -0
  211. package/dist/assets/{state-COfuW2QS.js → state-CEmS5WFQ.js} +1 -1
  212. package/dist/assets/state-jvUYiWCG.js +1 -0
  213. package/dist/assets/{stateDiagram-KXAO66HF-CdN43FzO.js → stateDiagram-KXAO66HF-DwZscOce.js} +1 -1
  214. package/dist/assets/stateDiagram-v2-UMBNRL4Z-D5XUGcJP.js +1 -0
  215. package/dist/assets/stex-C7nwqmPk.js +1 -0
  216. package/dist/assets/storage-CaQ7kwuv.js +1 -0
  217. package/dist/assets/{switch-BKaPFRvh.js → switch-B5bMMWJn.js} +1 -1
  218. package/dist/assets/{tabs-C8HicIPZ.js → tabs-8ThyQfYh.js} +1 -1
  219. package/dist/assets/{terminal-Cnm8ANjQ.js → terminal-CPdYItDn.js} +1 -1
  220. package/dist/assets/{text-search-DpMeajoz.js → text-search-iEvFn29l.js} +1 -1
  221. package/dist/assets/{textarea-DhU2DWSB.js → textarea-B-_OthMe.js} +1 -1
  222. package/dist/assets/{time-Dzg4b75Q.js → time-BkIHCvH2.js} +1 -1
  223. package/dist/assets/{timeline-definition-XQNQX7LJ-D48ppGT8.js → timeline-definition-XQNQX7LJ-BGsZ09p6.js} +1 -1
  224. package/dist/assets/{toDate-BartytS4.js → toDate-Daj1hQSF.js} +1 -1
  225. package/dist/assets/{toggle-BLLoLiay.js → toggle-BpFqu8FB.js} +1 -1
  226. package/dist/assets/{tooltip-BjoMzmCN.js → tooltip-ULHbIsj9.js} +1 -1
  227. package/dist/assets/tracing-UKZUjbDB.js +2 -0
  228. package/dist/assets/tracing-panel-CuDItRLt.js +2 -0
  229. package/dist/assets/{trash-2-GOPu47oc.js → trash-2-3UJSaMKF.js} +1 -1
  230. package/dist/assets/{trash-BpVsWH8l.js → trash-CYX7fe5Y.js} +1 -1
  231. package/dist/assets/{tree-qyAlDlFy.js → tree-3z9r1N_5.js} +1 -1
  232. package/dist/assets/{treemap-75Q7IDZK-B4o24kyC.js → treemap-75Q7IDZK-MX1Hmq0m.js} +1 -1
  233. package/dist/assets/{type-C9leWRlU.js → type-kF6pOJbH.js} +1 -1
  234. package/dist/assets/{types-BBD3GQ0S.js → types-DQDL7dro.js} +1 -1
  235. package/dist/assets/{types-DEwRoAG0.js → types-DyTIgBnH.js} +1 -1
  236. package/dist/assets/{useAddCell-DJhNA_O5.js → useAddCell-Dq3HqYz1.js} +1 -1
  237. package/dist/assets/{useAsyncData-BEqqunls.js → useAsyncData-D9GA9BWg.js} +1 -1
  238. package/dist/assets/{useBoolean-DnggoYme.js → useBoolean-CSR3XjhE.js} +1 -1
  239. package/dist/assets/{useCellActionButton-B_a4Sv2X.js → useCellActionButton-BAG0Vvnt.js} +1 -1
  240. package/dist/assets/{useDateFormatter-DjmrLzxH.js → useDateFormatter-DrFLqO1D.js} +1 -1
  241. package/dist/assets/{useDebounce-9_rqRiHk.js → useDebounce-_ztZiL0I.js} +1 -1
  242. package/dist/assets/{useDeepCompareMemoize-DIhr42Iz.js → useDeepCompareMemoize-BsZY8i2r.js} +1 -1
  243. package/dist/assets/{useDeleteCell-DVNOLjwN.js → useDeleteCell-CJaipocw.js} +1 -1
  244. package/dist/assets/useHotkey-DkiyGPLs.js +1 -0
  245. package/dist/assets/{useInstallPackage-CTHO3tj3.js → useInstallPackage-DoKAq17E.js} +1 -1
  246. package/dist/assets/useNotebookActions-CQd8IgyR.js +1 -0
  247. package/dist/assets/useSplitCell-Dodncnp8.js +1 -0
  248. package/dist/assets/{useTheme-C5JyqXTm.js → useTheme-oPMxEKRc.js} +1 -1
  249. package/dist/assets/{utilities.esm-DbqS7Pjb.js → utilities.esm-DcV_e-D3.js} +1 -1
  250. package/dist/assets/utils-DBmmAf_K.js +1 -0
  251. package/dist/assets/variable-panel-BCihDsBL.js +1 -0
  252. package/dist/assets/{vega-component-D1ZJxK-L.js → vega-component-CWMEFM7y.js} +1 -1
  253. package/dist/assets/{vega-loader.browser.module-Jwd7L8Ye.js → vega-loader.browser.module-BkWiTok0.js} +1 -1
  254. package/dist/assets/{with-selector-CXhuorCH.js → with-selector-BmLsipPw.js} +1 -1
  255. package/dist/assets/{workflow-Covue_dW.js → workflow-DA01FBLw.js} +1 -1
  256. package/dist/assets/{wrench-DNJq8NCj.js → wrench-B2m2X1sb.js} +1 -1
  257. package/dist/assets/{write-secret-modal-qe46KOIw.js → write-secret-modal-Dx9oubag.js} +1 -1
  258. package/dist/assets/{xychartDiagram-6GGTOJPD-DK41sZTI.js → xychartDiagram-6GGTOJPD-D-i5LTeX.js} +1 -1
  259. package/dist/assets/{youtube-0-RiaVkr.js → youtube-Bl4NeyvA.js} +1 -1
  260. package/dist/index.html +155 -155
  261. package/package.json +1 -1
  262. package/src/__tests__/chat-history.test.ts +123 -0
  263. package/src/components/app-config/ai-config.tsx +23 -0
  264. package/src/components/app-config/mcp-config.tsx +42 -2
  265. package/src/components/app-config/user-config-form.tsx +0 -24
  266. package/src/components/chat/acp/__tests__/context-utils.test.ts +1 -1
  267. package/src/components/chat/acp/agent-panel.tsx +1 -1
  268. package/src/components/chat/acp/blocks.tsx +46 -53
  269. package/src/components/chat/acp/common.tsx +1 -1
  270. package/src/components/chat/acp/context-utils.ts +1 -1
  271. package/src/components/chat/acp/session-tabs.tsx +1 -1
  272. package/src/components/chat/chat-history-popover.tsx +125 -0
  273. package/src/components/chat/chat-history-utils.ts +69 -0
  274. package/src/components/chat/chat-panel.tsx +9 -57
  275. package/src/components/editor/__tests__/data-attributes.test.tsx +1 -1
  276. package/src/components/editor/actions/useNotebookActions.tsx +2 -4
  277. package/src/components/editor/ai/__tests__/completion-utils.test.ts +23 -31
  278. package/src/components/editor/cell/CreateCellButton.tsx +14 -2
  279. package/src/components/editor/cell/code/cell-editor.tsx +1 -0
  280. package/src/components/editor/database/schemas.ts +2 -10
  281. package/src/components/editor/{Cell.tsx → notebook-cell.tsx} +5 -1
  282. package/src/components/editor/output/MarimoErrorOutput.tsx +4 -34
  283. package/src/components/editor/renderers/{CellArray.tsx → cell-array.tsx} +1 -1
  284. package/src/components/forms/__tests__/form-utils.test.ts +2 -2
  285. package/src/components/mcp/hooks.ts +48 -0
  286. package/src/components/mcp/mcp-status-indicator.tsx +144 -0
  287. package/src/components/ui/number-field.tsx +4 -1
  288. package/src/core/ai/context/providers/__tests__/__snapshots__/tables.test.ts.snap +13 -19
  289. package/src/core/ai/context/providers/__tests__/cell-output.test.ts +0 -1
  290. package/src/core/ai/context/providers/__tests__/datasource.test.ts +5 -6
  291. package/src/core/ai/context/providers/__tests__/error.test.ts +24 -15
  292. package/src/core/ai/context/providers/cell-output.ts +5 -5
  293. package/src/core/ai/context/providers/common.ts +13 -4
  294. package/src/core/ai/context/providers/datasource.ts +31 -20
  295. package/src/core/ai/context/providers/error.ts +3 -4
  296. package/src/core/ai/context/providers/file.ts +2 -2
  297. package/src/core/ai/context/providers/tables.ts +36 -8
  298. package/src/core/ai/context/providers/variable.ts +2 -3
  299. package/src/core/cells/__tests__/cells.test.ts +6 -6
  300. package/src/core/cells/cells.ts +12 -13
  301. package/src/core/cells/scrollCellIntoView.ts +1 -1
  302. package/src/core/codemirror/__tests__/setup.test.ts +1 -0
  303. package/src/core/codemirror/cm.ts +3 -2
  304. package/src/core/config/__tests__/config-schema.test.ts +2 -0
  305. package/src/core/config/config-schema.ts +2 -0
  306. package/src/core/config/feature-flag.tsx +0 -2
  307. package/src/core/edit-app.tsx +1 -1
  308. package/src/core/network/CachingRequestRegistry.ts +2 -2
  309. package/src/stories/cell.stories.tsx +1 -1
  310. package/src/stories/layout/vertical/one-column.stories.tsx +1 -1
  311. package/src/utils/numbers.ts +24 -1
  312. package/dist/assets/MarimoErrorOutput-CUb4AQdT.js +0 -6
  313. package/dist/assets/add-cell-with-ai-DCyfgnLI.js +0 -36
  314. package/dist/assets/agent-panel-B_MMb9mo.js +0 -287
  315. package/dist/assets/ai-model-dropdown-Dk9Kz_pz.js +0 -2
  316. package/dist/assets/api-DBBaApVO.js +0 -1
  317. package/dist/assets/app-config-button-Cbw9b5rl.js +0 -1
  318. package/dist/assets/cell-link-woRE950-.js +0 -1
  319. package/dist/assets/channel-D-YgrD6I.js +0 -1
  320. package/dist/assets/chat-panel-DLphumiN.js +0 -3
  321. package/dist/assets/check-hL6-9SZK.js +0 -1
  322. package/dist/assets/circle-check-big-C7DGeh12.js +0 -1
  323. package/dist/assets/classDiagram-KNZD7YFC-yzXw7kFX.js +0 -1
  324. package/dist/assets/classDiagram-v2-RKCZMP56-Co2zbBi0.js +0 -1
  325. package/dist/assets/client-CA946N69.js +0 -2
  326. package/dist/assets/column-preview-BT14RHNM.js +0 -2
  327. package/dist/assets/command-palette-qYrNUNjA.js +0 -1
  328. package/dist/assets/datasources-panel-2YJ76Lq8.js +0 -1
  329. package/dist/assets/dependency-graph-panel-CnzvmPdT.js +0 -4
  330. package/dist/assets/dist-BtRvVXgu.js +0 -1
  331. package/dist/assets/dist-CAZ5kHnb.js +0 -1
  332. package/dist/assets/dist-CN8IvtVY.js +0 -1
  333. package/dist/assets/dist-Cw007UHk.js +0 -1
  334. package/dist/assets/dist-DEfSR7VW.js +0 -1
  335. package/dist/assets/dist-DSbiMNpu.js +0 -1
  336. package/dist/assets/dist-DeIZvG9x.js +0 -1
  337. package/dist/assets/dist-DyZWkD0n.js +0 -1
  338. package/dist/assets/dist-hfODPqg9.js +0 -1
  339. package/dist/assets/edit-page-Bt_YqRld.js +0 -12
  340. package/dist/assets/error-panel-dvBEznKE.js +0 -1
  341. package/dist/assets/esm-hOS9Yf3s.js +0 -1
  342. package/dist/assets/field-Ota1KKvP.js +0 -1
  343. package/dist/assets/file-explorer-panel-Pa89UfV1.js +0 -1
  344. package/dist/assets/filename-BYm5Do9U.js +0 -1
  345. package/dist/assets/home-page-B3bIZC6F.js +0 -4
  346. package/dist/assets/index-BQd14tU4.css +0 -2
  347. package/dist/assets/input-Dm-m3XYB.js +0 -7
  348. package/dist/assets/links-CQoApRoA.js +0 -1
  349. package/dist/assets/logs-panel-R50NxjC7.js +0 -1
  350. package/dist/assets/mermaid.core-BjBlUxCx.js +0 -1
  351. package/dist/assets/numbers-DtHKLeOn.js +0 -1
  352. package/dist/assets/outline-panel-CB2kV_p5.js +0 -1
  353. package/dist/assets/packages-panel-BpFuUbAr.js +0 -1
  354. package/dist/assets/run-page-ClDuCh42.js +0 -1
  355. package/dist/assets/scratchpad-panel-BRljth0m.js +0 -1
  356. package/dist/assets/secrets-panel-CQON2dfx.js +0 -1
  357. package/dist/assets/snippets-panel-C0OdhmTA.js +0 -1
  358. package/dist/assets/state-DaDgAzck.js +0 -1
  359. package/dist/assets/state-Do6Fn2Io.js +0 -1
  360. package/dist/assets/stateDiagram-v2-UMBNRL4Z-Bi0DZGHg.js +0 -1
  361. package/dist/assets/stex-CbLDtSMU.js +0 -1
  362. package/dist/assets/storage-DFOl3UlZ.js +0 -1
  363. package/dist/assets/tracing-k1M6Upka.js +0 -2
  364. package/dist/assets/tracing-panel-CyG4yTCu.js +0 -2
  365. package/dist/assets/useHotkey-CJ5v8JMM.js +0 -1
  366. package/dist/assets/useNotebookActions-BB-5-4dL.js +0 -1
  367. package/dist/assets/useSplitCell-Cy53n7mS.js +0 -1
  368. package/dist/assets/utils-CfnN8i3Y.js +0 -1
  369. package/dist/assets/variable-panel-Dd_6lOoR.js +0 -1
  370. /package/dist/assets/{Deferred-BIEvCvJC.js → Deferred-Mppm0cvJ.js} +0 -0
  371. /package/dist/assets/{alert-B2-Y1fzf.js → alert-hjKHAeOD.js} +0 -0
  372. /package/dist/assets/{badge-D5b5ze0K.js → badge-DJuT6BaT.js} +0 -0
  373. /package/dist/assets/{blob-DFrnsWYL.js → blob-CTPcPiam.js} +0 -0
  374. /package/dist/assets/{connection-Cb7zku0y.js → connection-D2GvycR9.js} +0 -0
  375. /package/dist/assets/{copy-BiKQh0sU.js → copy-CkZsxeON.js} +0 -0
  376. /package/dist/assets/{createLucideIcon-Be9UM2Pe.js → createLucideIcon-QLW8E4z5.js} +0 -0
  377. /package/dist/assets/{createReducer-BaSP2BKE.js → createReducer-CFr1RdS2.js} +0 -0
  378. /package/dist/assets/{defaultLocale-DU4zdxes.js → defaultLocale-C6TNIE_k.js} +0 -0
  379. /package/dist/assets/{defaultLocale-BCtmQtCj.js → defaultLocale-DPsgYaXf.js} +0 -0
  380. /package/dist/assets/{dist-DIuPmJ5w.js → dist-Bz53xjA5.js} +0 -0
  381. /package/dist/assets/{dist-BhR4qmIv.js → dist-DcASoeRZ.js} +0 -0
  382. /package/dist/assets/{dist-BMAXVGJe.js → dist-Dlusp3mb.js} +0 -0
  383. /package/dist/assets/{documentation-BZROoSma.js → documentation-B7z6bB-t.js} +0 -0
  384. /package/dist/assets/{emotion-is-prop-valid.esm-plUNooLR.js → emotion-is-prop-valid.esm-BbphD4LX.js} +0 -0
  385. /package/dist/assets/{errors-qtuExmE-.js → errors-_3XAtRr3.js} +0 -0
  386. /package/dist/assets/{es-Hxx5X1vH.js → es-BVCqnQhJ.js} +0 -0
  387. /package/dist/assets/{extends--r5KbeWh.js → extends-Bwhapo2B.js} +0 -0
  388. /package/dist/assets/{fast-deep-equal-DT2Tke28.js → fast-deep-equal-BdzBWnNx.js} +0 -0
  389. /package/dist/assets/{icons-BUUt9FMo.js → icons-CLD-J5J3.js} +0 -0
  390. /package/dist/assets/{kbd-DItNvBdP.js → kbd-BQFiWIjd.js} +0 -0
  391. /package/dist/assets/{main-Co0CqoDt.js → main-CfqcqCNp.js} +0 -0
  392. /package/dist/assets/{marked.esm-BVjBUuHx.js → marked.esm-C_54K2ke.js} +0 -0
  393. /package/dist/assets/{namespace-BstGchRe.js → namespace-CnoeT75h.js} +0 -0
  394. /package/dist/assets/{objectWithoutPropertiesLoose-CGYpiDu4.js → objectWithoutPropertiesLoose-CDpgRi8_.js} +0 -0
  395. /package/dist/assets/{ordinal-DO1z0TEs.js → ordinal-CHS6rGcb.js} +0 -0
  396. /package/dist/assets/{preload-helper-CxnU7XTI.js → preload-helper-DImqtvgl.js} +0 -0
  397. /package/dist/assets/{prop-types-Bv8iPqhZ.js → prop-types-CHKlDUlJ.js} +0 -0
  398. /package/dist/assets/{range-CJAH1fu_.js → range-BPiwmiGf.js} +0 -0
  399. /package/dist/assets/{shim-Bk8nzKPV.js → shim-CWt9rDBn.js} +0 -0
  400. /package/dist/assets/{stex-CETff8Y9.js → stex-BrOrfhKB.js} +0 -0
  401. /package/dist/assets/{strings-1yw0WVap.js → strings-DYBy5ejj.js} +0 -0
  402. /package/dist/assets/{tslib.es6-DItc8Tbq.js → tslib.es6-dlz5WbC8.js} +0 -0
  403. /package/dist/assets/{use-toast-C07-frN_.js → use-toast-D6NNsC80.js} +0 -0
  404. /package/dist/assets/{useEvent-BIiDVnhT.js → useEvent-BOb1a9d1.js} +0 -0
  405. /package/dist/assets/{useLifecycle-Bnvt0QrQ.js → useLifecycle-BfeAlD80.js} +0 -0
  406. /package/dist/assets/{useNonce-Cw4ZAbgi.js → useNonce-BbWkd3B4.js} +0 -0
  407. /package/dist/assets/{useNumberFormatter-DYIEUCTe.js → useNumberFormatter-D21brJ0f.js} +0 -0
  408. /package/dist/assets/{uuid-BWz20PcF.js → uuid-4lb_EYpq.js} +0 -0
@@ -1,34 +1,28 @@
1
1
  // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
2
2
 
3
3
  exports[`TableContextProvider > formatContext > should format context for basic table > basic-table-context 1`] = `
4
- "<data name="products" source="memory">
5
- Shape: 100 rows, 3 columns
4
+ "<data name="products" source="memory">Shape: 100 rows, 3 columns
6
5
  Columns:
7
- - id: integer
8
- - name: string
9
- - active: boolean</data>"
6
+ id (integer) - samples: [sample_id_1, sample_id_2]
7
+ name (string) - samples: [sample_name_1, sample_name_2]
8
+ active (boolean) - samples: [sample_active_1, sample_active_2]</data>"
10
9
  `;
11
10
 
12
11
  exports[`TableContextProvider > formatContext > should format context for remote database table > remote-table-context 1`] = `
13
- "<data name="remote_table" source="postgresql://localhost:5432/mydb">
14
- Shape: 100 rows, 3 columns
12
+ "<data name="remote_table" source="postgresql://localhost:5432/mydb">Shape: 100 rows, 3 columns
15
13
  Columns:
16
- - uuid: string
17
- - created_at: string
18
- - metadata: string</data>"
14
+ uuid (string) - samples: [sample_uuid_1, sample_uuid_2]
15
+ created_at (string) - samples: [sample_created_at_1, sample_created_at_2]
16
+ metadata (string) - samples: [sample_metadata_1, sample_metadata_2]</data>"
19
17
  `;
20
18
 
21
- exports[`TableContextProvider > formatContext > should format context for table without columns > no-columns-table-context 1`] = `
22
- "<data name="no_columns" source="memory">
23
- Shape: 100 rows, 3 columns</data>"
24
- `;
19
+ exports[`TableContextProvider > formatContext > should format context for table without columns > no-columns-table-context 1`] = `"<data name="no_columns" source="memory">Shape: 100 rows, 3 columns</data>"`;
25
20
 
26
21
  exports[`TableContextProvider > formatContext > should format context for table without shape info > no-shape-table-context 1`] = `
27
- "<data name="no_shape" source="memory">
28
- Columns:
29
- - id: integer
30
- - name: string
31
- - active: boolean</data>"
22
+ "<data name="no_shape" source="memory">Columns:
23
+ id (integer) - samples: [sample_id_1, sample_id_2]
24
+ name (string) - samples: [sample_name_1, sample_name_2]
25
+ active (boolean) - samples: [sample_active_1, sample_active_2]</data>"
32
26
  `;
33
27
 
34
28
  exports[`TableContextProvider > getItems > should handle dataframe tables with variable names > dataframe-table 1`] = `
@@ -187,7 +187,6 @@ describe("CellOutputContextProvider", () => {
187
187
  expect(completion.displayLabel).toBe(item.data.cellName);
188
188
  expect(completion.detail).toContain("output");
189
189
  expect(completion.type).toBe("cell-output");
190
- expect(completion.section).toBe("Cell Output");
191
190
  expect(typeof completion.info).toBe("function");
192
191
  });
193
192
  });
@@ -8,7 +8,7 @@ import type {
8
8
  } from "@/core/datasets/data-source-connections";
9
9
  import { DUCKDB_ENGINE } from "@/core/datasets/engines";
10
10
  import type { DataSourceConnection, DataTable } from "@/core/kernel/messages";
11
- import { Boosts } from "../common";
11
+ import { Boosts, Sections } from "../common";
12
12
  import { DatasourceContextProvider } from "../datasource";
13
13
 
14
14
  // Mock data for testing
@@ -268,8 +268,7 @@ describe("DatasourceContextProvider", () => {
268
268
  );
269
269
 
270
270
  const items = providerWithEmpty.getItems();
271
- expect(items).toHaveLength(1);
272
- expect(items[0].data.connection.databases).toEqual([]);
271
+ expect(items).toHaveLength(0);
273
272
  });
274
273
 
275
274
  it("should handle connections with databases but no schemas", () => {
@@ -311,7 +310,7 @@ describe("DatasourceContextProvider", () => {
311
310
  detail: "DuckDB",
312
311
  boost: Boosts.MEDIUM,
313
312
  type: "datasource",
314
- section: "Data Sources",
313
+ section: Sections.DATA_SOURCES,
315
314
  });
316
315
 
317
316
  expect(completion.info).toBeDefined();
@@ -355,7 +354,7 @@ describe("DatasourceContextProvider", () => {
355
354
  detail: "PostgreSQL",
356
355
  boost: Boosts.MEDIUM,
357
356
  type: "datasource",
358
- section: "Data Sources",
357
+ section: Sections.DATA_SOURCES,
359
358
  });
360
359
  });
361
360
 
@@ -380,7 +379,7 @@ describe("DatasourceContextProvider", () => {
380
379
  detail: "DuckDB",
381
380
  boost: Boosts.MEDIUM,
382
381
  type: "datasource",
383
- section: "Data Sources",
382
+ section: Sections.DATA_SOURCES,
384
383
  });
385
384
  });
386
385
  });
@@ -6,7 +6,6 @@ import { beforeEach, describe, expect, it } from "vitest";
6
6
  import { MockNotebook } from "@/__mocks__/notebook";
7
7
  import { notebookAtom } from "@/core/cells/cells";
8
8
  import { type CellId, CellId as CellIdClass } from "@/core/cells/ids";
9
- import { Boosts } from "../common";
10
9
  import { ErrorContextProvider } from "../error";
11
10
 
12
11
  describe("ErrorContextProvider", () => {
@@ -118,15 +117,20 @@ describe("ErrorContextProvider", () => {
118
117
  const items = provider.getItems();
119
118
  const completion = provider.formatCompletion(items[0]);
120
119
 
121
- expect(completion).toMatchObject({
122
- label: "@Errors",
123
- displayLabel: "Errors",
124
- detail: "2 errors",
125
- boost: Boosts.ERROR,
126
- type: "error",
127
- apply: "@Errors",
128
- section: "Errors",
129
- });
120
+ expect(completion).toMatchInlineSnapshot(`
121
+ {
122
+ "apply": "@Errors",
123
+ "detail": "2 errors",
124
+ "displayLabel": "Errors",
125
+ "info": [Function],
126
+ "label": "@Errors",
127
+ "section": {
128
+ "name": "Error",
129
+ "rank": 1,
130
+ },
131
+ "type": "error",
132
+ }
133
+ `);
130
134
 
131
135
  // Test the info function
132
136
  expect(completion.info).toBeDefined();
@@ -179,11 +183,16 @@ describe("ErrorContextProvider", () => {
179
183
  };
180
184
 
181
185
  const completion = provider.formatCompletion(item);
182
- expect(completion).toMatchObject({
183
- label: "Error",
184
- displayLabel: "Error",
185
- boost: Boosts.ERROR,
186
- });
186
+ expect(completion).toMatchInlineSnapshot(`
187
+ {
188
+ "displayLabel": "Error",
189
+ "label": "Error",
190
+ "section": {
191
+ "name": "Error",
192
+ "rank": 1,
193
+ },
194
+ }
195
+ `);
187
196
  });
188
197
  });
189
198
 
@@ -13,7 +13,7 @@ import { parseHtmlContent } from "@/utils/dom";
13
13
  import { Logger } from "@/utils/Logger";
14
14
  import { type AIContextItem, AIContextProvider } from "../registry";
15
15
  import { contextToXml } from "../utils";
16
- import { Boosts } from "./common";
16
+ import { Boosts, Sections } from "./common";
17
17
 
18
18
  export interface CellOutputContextItem extends AIContextItem {
19
19
  type: "cell-output";
@@ -150,13 +150,14 @@ export class CellOutputContextProvider extends AIContextProvider<CellOutputConte
150
150
 
151
151
  formatCompletion(item: CellOutputContextItem): Completion {
152
152
  const { data } = item;
153
+
153
154
  return {
154
155
  label: `@${data.cellName}`,
155
156
  displayLabel: data.cellName,
156
157
  detail: `${data.outputType} output`,
157
- boost: Boosts.CELL_OUTPUT,
158
+ boost: data.outputType === "media" ? Boosts.HIGH : Boosts.MEDIUM,
158
159
  type: this.contextType,
159
- section: "Cell Output",
160
+ section: Sections.CELL_OUTPUT,
160
161
  apply: `@${data.cellName}`,
161
162
  info: () => {
162
163
  const infoContainer = document.createElement("div");
@@ -247,8 +248,7 @@ export class CellOutputContextProvider extends AIContextProvider<CellOutputConte
247
248
  "italic",
248
249
  "mb-2",
249
250
  );
250
- mediaDiv.textContent =
251
- "Contains media content (image, SVG, or canvas)";
251
+ mediaDiv.textContent = "A screenshot of the output will be attached";
252
252
  infoContainer.append(mediaDiv);
253
253
  }
254
254
 
@@ -1,13 +1,22 @@
1
1
  /* Copyright 2024 Marimo. All rights reserved. */
2
2
 
3
+ import type { CompletionSection } from "@codemirror/autocomplete";
4
+
3
5
  /** Number from -99 to 99. Higher numbers are prioritized when surfacing completions. */
4
6
  export const Boosts = {
5
- LOCAL_TABLE: 5,
6
- REMOTE_TABLE: 4,
7
+ LOCAL_TABLE: 7,
8
+ REMOTE_TABLE: 5,
7
9
  HIGH: 4,
8
- VARIABLE: 3,
9
10
  MEDIUM: 3,
10
11
  CELL_OUTPUT: 2,
11
12
  LOW: 2,
12
- ERROR: 1,
13
13
  } as const;
14
+
15
+ export const Sections = {
16
+ ERROR: { name: "Error", rank: 1 },
17
+ TABLE: { name: "Table", rank: 2 },
18
+ DATA_SOURCES: { name: "Data Sources", rank: 3 },
19
+ VARIABLE: { name: "Variable", rank: 4 },
20
+ CELL_OUTPUT: { name: "Cell Output", rank: 5 },
21
+ FILE: { name: "File", rank: 6 },
22
+ } satisfies Record<string, CompletionSection>;
@@ -17,7 +17,7 @@ import type { DataSourceConnection, DataTable } from "@/core/kernel/messages";
17
17
  import type { AIContextItem } from "../registry";
18
18
  import { AIContextProvider } from "../registry";
19
19
  import { contextToXml } from "../utils";
20
- import { Boosts } from "./common";
20
+ import { Boosts, Sections } from "./common";
21
21
 
22
22
  type NamedDatasource = Omit<
23
23
  DataSourceConnection,
@@ -53,24 +53,35 @@ export class DatasourceContextProvider extends AIContextProvider<DatasourceConte
53
53
  }
54
54
 
55
55
  getItems(): DatasourceContextItem[] {
56
- return [...this.connectionsMap.values()].map((connection) => {
57
- let description = "Database schema.";
58
- const data: DatasourceContextItem["data"] = {
59
- connection: connection,
60
- };
61
- if (INTERNAL_SQL_ENGINES.has(connection.name)) {
62
- data.tables = this.dataframes;
63
- description = "Database schema and the dataframes that can be queried";
64
- }
65
-
66
- return {
67
- uri: this.asURI(connection.name),
68
- name: connection.name,
69
- description: description,
70
- type: this.contextType,
71
- data: data,
72
- };
73
- });
56
+ return [...this.connectionsMap.values()]
57
+ .map((connection): DatasourceContextItem | null => {
58
+ let description = "Database schema.";
59
+ const data: DatasourceContextItem["data"] = {
60
+ connection: connection,
61
+ };
62
+
63
+ if (INTERNAL_SQL_ENGINES.has(connection.name)) {
64
+ data.tables = this.dataframes;
65
+ description =
66
+ "Database schema and the dataframes that can be queried";
67
+ }
68
+
69
+ // Hide empty datasources
70
+ const hasNoTables =
71
+ connection.databases.length === 0 && (data.tables?.length ?? 0) === 0;
72
+ if (hasNoTables) {
73
+ return null;
74
+ }
75
+
76
+ return {
77
+ uri: this.asURI(connection.name),
78
+ name: connection.name,
79
+ description: description,
80
+ type: this.contextType,
81
+ data: data,
82
+ };
83
+ })
84
+ .filter(Boolean);
74
85
  }
75
86
 
76
87
  formatContext(item: DatasourceContextItem): string {
@@ -115,7 +126,7 @@ export class DatasourceContextProvider extends AIContextProvider<DatasourceConte
115
126
  detail: dbDisplayName(dataConnection.dialect),
116
127
  boost: Boosts.MEDIUM,
117
128
  type: this.contextType,
118
- section: "Data Sources",
129
+ section: Sections.DATA_SOURCES,
119
130
  info: () => {
120
131
  const infoContainer = document.createElement("div");
121
132
  infoContainer.classList.add("mo-cm-tooltip", "docs-documentation");
@@ -9,7 +9,7 @@ import { logNever } from "@/utils/assertNever";
9
9
  import { PluralWord } from "@/utils/pluralize";
10
10
  import { type AIContextItem, AIContextProvider } from "../registry";
11
11
  import { contextToXml } from "../utils";
12
- import { Boosts } from "./common";
12
+ import { Sections } from "./common";
13
13
 
14
14
  export interface ErrorContextItem extends AIContextItem {
15
15
  type: "error";
@@ -111,10 +111,9 @@ export class ErrorContextProvider extends AIContextProvider<ErrorContextItem> {
111
111
  label: "@Errors",
112
112
  displayLabel: "Errors",
113
113
  detail: `${item.data.errors.length} ${errorsTxt.pluralize(item.data.errors.length)}`,
114
- boost: Boosts.ERROR,
115
114
  type: "error",
116
115
  apply: "@Errors",
117
- section: "Errors",
116
+ section: Sections.ERROR,
118
117
  info: () => {
119
118
  const infoContainer = document.createElement("div");
120
119
  infoContainer.classList.add(
@@ -150,7 +149,7 @@ export class ErrorContextProvider extends AIContextProvider<ErrorContextItem> {
150
149
  return {
151
150
  label: "Error",
152
151
  displayLabel: "Error",
153
- boost: Boosts.ERROR,
152
+ section: Sections.ERROR,
154
153
  };
155
154
  }
156
155
 
@@ -15,7 +15,7 @@ import { type Base64String, base64ToDataURL } from "@/utils/json/base64";
15
15
  import { Logger } from "@/utils/Logger";
16
16
  import { type AIContextItem, AIContextProvider } from "../registry";
17
17
  import { contextToXml } from "../utils";
18
- import { Boosts } from "./common";
18
+ import { Boosts, Sections } from "./common";
19
19
  export interface FileContextItem extends AIContextItem {
20
20
  type: "file";
21
21
  data: {
@@ -190,7 +190,7 @@ export class FileContextProvider extends AIContextProvider<FileContextItem> {
190
190
  return {
191
191
  ...this.createBasicCompletion(item),
192
192
  type: "file",
193
- section: "File",
193
+ section: Sections.FILE,
194
194
  boost: data.isDirectory ? Boosts.MEDIUM : Boosts.LOW,
195
195
  detail: data.path,
196
196
  displayLabel: `${icon} ${name}`,
@@ -9,7 +9,7 @@ import type { DataTable } from "@/core/kernel/messages";
9
9
  import type { AIContextItem } from "../registry";
10
10
  import { AIContextProvider } from "../registry";
11
11
  import { contextToXml } from "../utils";
12
- import { Boosts } from "./common";
12
+ import { Boosts, Sections } from "./common";
13
13
 
14
14
  export interface TableContextItem extends AIContextItem {
15
15
  type: "data";
@@ -38,21 +38,46 @@ export class TableContextProvider extends AIContextProvider<TableContextItem> {
38
38
 
39
39
  formatContext(item: TableContextItem): string {
40
40
  const { data } = item;
41
- const { columns, source, num_rows, num_columns, name } = data;
41
+ const { columns, source, num_rows, num_columns, name, variable_name } =
42
+ data;
43
+
44
+ // Build shape information
42
45
  const shape = [
43
- num_rows == null ? undefined : `${num_rows} rows`,
44
- num_columns == null ? undefined : `${num_columns} columns`,
46
+ num_rows != null ? `${num_rows} rows` : undefined,
47
+ num_columns != null ? `${num_columns} columns` : undefined,
45
48
  ]
46
49
  .filter(Boolean)
47
50
  .join(", ");
48
51
 
49
52
  let details = "";
53
+
54
+ // Add shape information
50
55
  if (shape) {
51
- details += `\nShape: ${shape}`;
56
+ details += `Shape: ${shape}\n`;
57
+ }
58
+
59
+ // Add variable name if available
60
+ if (variable_name) {
61
+ details += `Variable: ${variable_name}\n`;
52
62
  }
53
63
 
64
+ // Add column information with sample values
54
65
  if (columns && columns.length > 0) {
55
- details += `\nColumns:\n${columns.map((col) => ` - ${col.name}: ${col.type}`).join("\n")}`;
66
+ details += "Columns:\n";
67
+ for (const col of columns) {
68
+ let columnInfo = ` ${col.name} (${col.type})`;
69
+
70
+ // Add sample values if available
71
+ if (col.sample_values && col.sample_values.length > 0) {
72
+ const samples = col.sample_values
73
+ .slice(0, 3) // Limit to first 3 samples
74
+ .map((val) => (val === null ? "null" : String(val)))
75
+ .join(", ");
76
+ columnInfo += ` - samples: [${samples}]`;
77
+ }
78
+
79
+ details += `${columnInfo}\n`;
80
+ }
56
81
  }
57
82
 
58
83
  return contextToXml({
@@ -61,7 +86,7 @@ export class TableContextProvider extends AIContextProvider<TableContextItem> {
61
86
  name: name,
62
87
  source: source ?? "unknown",
63
88
  },
64
- details: details,
89
+ details: details.trim(),
65
90
  });
66
91
  }
67
92
 
@@ -78,7 +103,10 @@ export class TableContextProvider extends AIContextProvider<TableContextItem> {
78
103
  : Boosts.REMOTE_TABLE,
79
104
  type: getTableType(table),
80
105
  apply: `@${tableName}`,
81
- section: getTableType(table) === "dataframe" ? "Dataframe" : "Table",
106
+ section: {
107
+ name: getTableType(table) === "dataframe" ? "Dataframe" : "Table",
108
+ rank: Sections.TABLE.rank,
109
+ },
82
110
  info: () => this.createTableInfoElement(tableName, table),
83
111
  };
84
112
  }
@@ -6,7 +6,7 @@ import type { DatasetTablesMap } from "@/core/datasets/data-source-connections";
6
6
  import type { Variable, Variables } from "@/core/variables/types";
7
7
  import { type AIContextItem, AIContextProvider } from "../registry";
8
8
  import { contextToXml } from "../utils";
9
- import { Boosts } from "./common";
9
+ import { Sections } from "./common";
10
10
 
11
11
  export interface VariableContextItem extends AIContextItem {
12
12
  type: "variable";
@@ -58,9 +58,8 @@ export class VariableContextProvider extends AIContextProvider<VariableContextIt
58
58
  label: `@${variable.name}`,
59
59
  displayLabel: variable.name,
60
60
  detail: variable.dataType ?? "",
61
- boost: Boosts.VARIABLE,
62
61
  type: this.contextType,
63
- section: "Variable",
62
+ section: Sections.VARIABLE,
64
63
  info: () => {
65
64
  return createVariableInfoElement(variable);
66
65
  },
@@ -12,7 +12,7 @@ import {
12
12
  it,
13
13
  vi,
14
14
  } from "vitest";
15
- import type { CellHandle } from "@/components/editor/Cell";
15
+ import type { CellHandle } from "@/components/editor/notebook-cell";
16
16
  import { CellId } from "@/core/cells/ids";
17
17
  import { foldAllBulk, unfoldAllBulk } from "@/core/codemirror/editing/commands";
18
18
  import { adaptiveLanguageConfiguration } from "@/core/codemirror/language/extension";
@@ -2094,9 +2094,9 @@ describe("cell reducer", () => {
2094
2094
  `);
2095
2095
  });
2096
2096
 
2097
- it("can create and update a setup cell", () => {
2097
+ it("can create and noop-update a setup cell", () => {
2098
2098
  // Create the setup cell
2099
- actions.upsertSetupCell({ code: "# Setup code" });
2099
+ actions.addSetupCellIfDoesntExist({ code: "# Setup code" });
2100
2100
 
2101
2101
  // Check that setup cell was created
2102
2102
  expect(state.cellData[SETUP_CELL_ID].id).toBe(SETUP_CELL_ID);
@@ -2106,17 +2106,17 @@ describe("cell reducer", () => {
2106
2106
  expect(state.cellIds.inOrderIds).toContain(SETUP_CELL_ID);
2107
2107
 
2108
2108
  // Update the setup cell
2109
- actions.upsertSetupCell({ code: "# Updated setup code" });
2109
+ actions.addSetupCellIfDoesntExist({ code: "# Updated setup code" });
2110
2110
 
2111
2111
  // Check that the same setup cell was updated, not duplicated
2112
- expect(state.cellData[SETUP_CELL_ID].code).toBe("# Updated setup code");
2112
+ expect(state.cellData[SETUP_CELL_ID].code).toBe("# Setup code");
2113
2113
  expect(state.cellData[SETUP_CELL_ID].edited).toBe(true);
2114
2114
  expect(state.cellIds.inOrderIds).toContain(SETUP_CELL_ID);
2115
2115
  });
2116
2116
 
2117
2117
  it("can delete and undelete the setup cell", () => {
2118
2118
  // Create the setup cell
2119
- actions.upsertSetupCell({ code: "# Setup code" });
2119
+ actions.addSetupCellIfDoesntExist({ code: "# Setup code" });
2120
2120
 
2121
2121
  // Check that setup cell was created
2122
2122
  expect(state.cellData[SETUP_CELL_ID].id).toBe(SETUP_CELL_ID);
@@ -5,7 +5,7 @@ import { type Atom, atom, useAtom, useAtomValue } from "jotai";
5
5
  import { atomFamily, selectAtom, splitAtom } from "jotai/utils";
6
6
  import { isEqual, zip } from "lodash-es";
7
7
  import { createRef, type ReducerWithoutAction } from "react";
8
- import type { CellHandle } from "@/components/editor/Cell";
8
+ import type { CellHandle } from "@/components/editor/notebook-cell";
9
9
  import {
10
10
  type CellColumnId,
11
11
  type CellIndex,
@@ -1324,21 +1324,19 @@ const {
1324
1324
  cellRuntime: newCellRuntime,
1325
1325
  };
1326
1326
  },
1327
- upsertSetupCell: (state, action: { code: string }) => {
1328
- const { code } = action;
1327
+ addSetupCellIfDoesntExist: (state, action: { code?: string }) => {
1328
+ let { code } = action;
1329
+ if (code == null) {
1330
+ code = "# Initialization code that runs before all other cells";
1331
+ }
1329
1332
 
1330
1333
  // First check if setup cell already exists
1331
1334
  if (SETUP_CELL_ID in state.cellData) {
1332
- // Update existing setup cell
1333
- return updateCellData({
1334
- state,
1335
- cellId: SETUP_CELL_ID,
1336
- cellReducer: (cell) => ({
1337
- ...cell,
1338
- code,
1339
- edited: code.trim() !== cell.lastCodeRun?.trim(),
1340
- }),
1341
- });
1335
+ // Just focus on the existing setup cell
1336
+ return {
1337
+ ...state,
1338
+ scrollKey: SETUP_CELL_ID,
1339
+ };
1342
1340
  }
1343
1341
 
1344
1342
  return {
@@ -1365,6 +1363,7 @@ const {
1365
1363
  ...state.cellHandles,
1366
1364
  [SETUP_CELL_ID]: createRef(),
1367
1365
  },
1366
+ scrollKey: SETUP_CELL_ID,
1368
1367
  };
1369
1368
  },
1370
1369
  });
@@ -1,10 +1,10 @@
1
1
  /* Copyright 2024 Marimo. All rights reserved. */
2
2
  import type { RefObject } from "react";
3
- import type { CellHandle } from "@/components/editor/Cell";
4
3
  import {
5
4
  isAnyCellFocused,
6
5
  tryFocus,
7
6
  } from "@/components/editor/navigation/focus-utils";
7
+ import type { CellHandle } from "@/components/editor/notebook-cell";
8
8
  import { retryWithTimeout } from "@/utils/timeout";
9
9
  import { Logger } from "../../utils/Logger";
10
10
  import { goToVariableDefinition } from "../codemirror/go-to-definition/commands";
@@ -67,6 +67,7 @@ function getOpts() {
67
67
  hotkeys: new OverridingHotkeyProvider({}),
68
68
  theme: "light",
69
69
  displayConfig: { reference_highlighting: false },
70
+ inlineAiTooltip: false,
70
71
  } as const;
71
72
  }
72
73
 
@@ -46,7 +46,6 @@ import type {
46
46
  KeymapConfig,
47
47
  LSPConfig,
48
48
  } from "../config/config-schema";
49
- import { getFeatureFlag } from "../config/feature-flag";
50
49
  import type { HotkeyProvider } from "../hotkeys/hotkeys";
51
50
  import { store } from "../state/jotai";
52
51
  import { requestEditCompletion } from "./ai/request";
@@ -83,6 +82,7 @@ export interface CodeMirrorSetupOpts {
83
82
  lspConfig: LSPConfig;
84
83
  diagnosticsConfig: DiagnosticsConfig;
85
84
  displayConfig: Pick<DisplayConfig, "reference_highlighting">;
85
+ inlineAiTooltip: boolean;
86
86
  }
87
87
 
88
88
  function getPlaceholderType(opts: CodeMirrorSetupOpts) {
@@ -104,6 +104,7 @@ export const setupCodeMirror = (opts: CodeMirrorSetupOpts): Extension[] => {
104
104
  lspConfig,
105
105
  diagnosticsConfig,
106
106
  displayConfig,
107
+ inlineAiTooltip,
107
108
  } = opts;
108
109
  const placeholderType = getPlaceholderType(opts);
109
110
 
@@ -128,7 +129,7 @@ export const setupCodeMirror = (opts: CodeMirrorSetupOpts): Extension[] => {
128
129
  goToDefinitionBundle(),
129
130
  diagnosticsConfig?.enabled ? lintGutter() : [],
130
131
  // AI edit inline
131
- enableAI && getFeatureFlag("inline_ai_tooltip")
132
+ enableAI && inlineAiTooltip
132
133
  ? [
133
134
  aiExtension({
134
135
  prompt: (req) => {
@@ -45,6 +45,7 @@ test("default UserConfig - empty", () => {
45
45
  expect(defaultConfig).toMatchInlineSnapshot(`
46
46
  {
47
47
  "ai": {
48
+ "inline_tooltip": false,
48
49
  "mode": "manual",
49
50
  "models": {
50
51
  "custom_models": [],
@@ -110,6 +111,7 @@ test("default UserConfig - one level", () => {
110
111
  expect(defaultConfig).toMatchInlineSnapshot(`
111
112
  {
112
113
  "ai": {
114
+ "inline_tooltip": false,
113
115
  "mode": "manual",
114
116
  "models": {
115
117
  "custom_models": [],
@@ -152,6 +152,7 @@ export const UserConfigSchema = z
152
152
  .looseObject({
153
153
  rules: z.string().prefault(""),
154
154
  mode: z.enum(["manual", "ask"]).prefault("manual"),
155
+ inline_tooltip: z.boolean().prefault(false),
155
156
  open_ai: AiConfigSchema.optional(),
156
157
  anthropic: AiConfigSchema.optional(),
157
158
  google: AiConfigSchema.optional(),
@@ -216,6 +217,7 @@ export type KeymapConfig = UserConfig["keymap"];
216
217
  export type LSPConfig = UserConfig["language_servers"];
217
218
  export type DiagnosticsConfig = UserConfig["diagnostics"];
218
219
  export type DisplayConfig = UserConfig["display"];
220
+ export type AiConfig = UserConfig["ai"];
219
221
 
220
222
  export const AppTitleSchema = z.string();
221
223
  export const SqlOutputSchema = z
@@ -7,7 +7,6 @@ import { getResolvedMarimoConfig } from "./config";
7
7
  // eslint-disable-next-line @typescript-eslint/no-empty-interface
8
8
  export interface ExperimentalFeatures {
9
9
  markdown: boolean; // Used in playground (community cloud)
10
- inline_ai_tooltip: boolean;
11
10
  wasm_layouts: boolean; // Used in playground (community cloud)
12
11
  rtc_v2: boolean;
13
12
  performant_table_charts: boolean;
@@ -20,7 +19,6 @@ export interface ExperimentalFeatures {
20
19
 
21
20
  const defaultValues: ExperimentalFeatures = {
22
21
  markdown: true,
23
- inline_ai_tooltip: import.meta.env.DEV,
24
22
  wasm_layouts: false,
25
23
  rtc_v2: false,
26
24
  performant_table_charts: false,
@@ -15,7 +15,7 @@ import {
15
15
  useRunAllCells,
16
16
  useRunStaleCells,
17
17
  } from "../components/editor/cell/useRunCells";
18
- import { CellArray } from "../components/editor/renderers/CellArray";
18
+ import { CellArray } from "../components/editor/renderers/cell-array";
19
19
  import { CellsRenderer } from "../components/editor/renderers/cells-renderer";
20
20
  import { useHotkey } from "../hooks/useHotkey";
21
21
  import {