@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.
- package/dist/assets/{CellStatus-CEVFBnyt.js → CellStatus-BJRDATxe.js} +1 -1
- package/dist/assets/{ConnectedDataExplorerComponent-5izWKQVQ.js → ConnectedDataExplorerComponent-Cs4pQOKx.js} +1 -1
- package/dist/assets/{ImperativeModal-DujtmdOO.js → ImperativeModal-BG5LTpV0.js} +1 -1
- package/dist/assets/{JsonOutput-E2xVojk5.js → JsonOutput-BID8Oos7.js} +1 -1
- package/dist/assets/{LazyAnyLanguageCodeMirror-DHH4zj72.js → LazyAnyLanguageCodeMirror-RkzkO2YV.js} +2 -2
- package/dist/assets/MarimoErrorOutput-Lft73Wnl.js +6 -0
- package/dist/assets/{RenderHTML-BCi_V67U.js → RenderHTML-BoDLdBq-.js} +1 -1
- package/dist/assets/{VisuallyHidden-DvpnK2wO.js → VisuallyHidden-BiHw-PIc.js} +1 -1
- package/dist/assets/{accordion-C3CAEPwC.js → accordion-A41ffd5P.js} +1 -1
- package/dist/assets/{activity-BCW0BU81.js → activity-BhLNCNHF.js} +1 -1
- package/dist/assets/add-cell-with-ai-CxM_YKzf.js +36 -0
- package/dist/assets/{add-database-form-DSnHGqMe.js → add-database-form-Br1fMkMI.js} +1 -1
- package/dist/assets/{add-missing-import-Cwedhjm5.js → add-missing-import-CfRgNApn.js} +1 -1
- package/dist/assets/agent-panel-7ocujO8C.js +287 -0
- package/dist/assets/ai-model-dropdown-DSUVFIso.js +2 -0
- package/dist/assets/{alert-dialog-M1dUQe7C.js → alert-dialog-BO8sf-73.js} +1 -1
- package/dist/assets/{ansi_up-ZmFuCItK.js → ansi_up-D_b0GS7N.js} +1 -1
- package/dist/assets/{any-language-editor-BqGBgxZE.js → any-language-editor-edee1A1P.js} +1 -1
- package/dist/assets/app-config-button-Bg_CEfls.js +1 -0
- package/dist/assets/{architecture-O4VJ6CD3-CbkBEQri.js → architecture-O4VJ6CD3-CIYFBxkI.js} +1 -1
- package/dist/assets/{architectureDiagram-W76B3OCA-di95lJcF.js → architectureDiagram-W76B3OCA-CXqAkVTy.js} +1 -1
- package/dist/assets/{arrow-left-DQ-94PlS.js → arrow-left-D97p491f.js} +1 -1
- package/dist/assets/{between-horizontal-start-CotWLlFt.js → between-horizontal-start-DWTOsiF_.js} +1 -1
- package/dist/assets/{blockDiagram-QIGZ2CNN-ClcJSQFf.js → blockDiagram-QIGZ2CNN-DhYrUig_.js} +1 -1
- package/dist/assets/{c4Diagram-FPNF74CW-Cq2vxSdy.js → c4Diagram-FPNF74CW-Bj1S_Fyy.js} +1 -1
- package/dist/assets/{cell-actions-C5S4W3g_.js → cell-actions-hNx4EMmZ.js} +1 -1
- package/dist/assets/{cell-editor-X6EY7GQl.js → cell-editor-JimG_bBz.js} +13 -13
- package/dist/assets/cell-link-_kF38gGF.js +1 -0
- package/dist/assets/{cells-B4cnsYe_.js → cells-Dd1FatlG.js} +54 -54
- package/dist/assets/channel-Bil_pUlM.js +1 -0
- package/dist/assets/{chart-no-axes-column-DrG7h8mS.js → chart-no-axes-column-DmR44Tbq.js} +1 -1
- package/dist/assets/{chat-components-DXkntpg4.js → chat-components-OoNU4tLf.js} +3 -3
- package/dist/assets/chat-panel-DatwRFif.js +3 -0
- package/dist/assets/check-C5PVLNkJ.js +1 -0
- package/dist/assets/{chevron-right-Caf5yL5B.js → chevron-right-BDEhimQq.js} +1 -1
- package/dist/assets/{chunk-3AY6CYHV-BFFUJATX.js → chunk-3AY6CYHV-CBq2x1Nc.js} +1 -1
- package/dist/assets/{chunk-4KMFLZZN-D8J8fzqf.js → chunk-4KMFLZZN-DEMg9QYp.js} +1 -1
- package/dist/assets/{chunk-6OXUPJBA-Clo7-gS4.js → chunk-6OXUPJBA-CjFdZBrY.js} +2 -2
- package/dist/assets/{chunk-ABZYJK2D-DjRcbxmx.js → chunk-ABZYJK2D-eZsthrBr.js} +1 -1
- package/dist/assets/{chunk-BN7GFLIU-DvomLhVN.js → chunk-BN7GFLIU-ez-vZ7uD.js} +1 -1
- package/dist/assets/{chunk-CXMOBAN2-GhUPxuLT.js → chunk-CXMOBAN2-DxbPW6zT.js} +1 -1
- package/dist/assets/{chunk-EXTU4WIE-97Zvkznr.js → chunk-EXTU4WIE-C8Y_P6y8.js} +1 -1
- package/dist/assets/{chunk-JA3XYJ7Z-Mvfz9vG6.js → chunk-JA3XYJ7Z-pR89xWsn.js} +1 -1
- package/dist/assets/{chunk-JEIROHC2-Cp1tR_z8.js → chunk-JEIROHC2-2-ucCTVJ.js} +1 -1
- package/dist/assets/{chunk-K7UQS3LO-BbFs0Y5e.js → chunk-K7UQS3LO-Bz3bjON2.js} +1 -1
- package/dist/assets/{chunk-KMC2YHZD-Buiqyl2g.js → chunk-KMC2YHZD-BvMr39QE.js} +1 -1
- package/dist/assets/{chunk-QN33PNHL-dhs223oU.js → chunk-QN33PNHL-DgF0LOHR.js} +1 -1
- package/dist/assets/{chunk-QYVHNE3D-DA_jYaIp.js → chunk-QYVHNE3D-BxN3DJBX.js} +1 -1
- package/dist/assets/{chunk-S3R3BYOJ-DO68jEIo.js → chunk-S3R3BYOJ-Dy72CLbv.js} +1 -1
- package/dist/assets/{chunk-T44TD3VJ-Ww2OhwR5.js → chunk-T44TD3VJ-BfMjD4hS.js} +1 -1
- package/dist/assets/{chunk-TVAH2DTR-j2EljfwG.js → chunk-TVAH2DTR-CKnRAcjo.js} +1 -1
- package/dist/assets/{chunk-TZMSLE5B-DYFKU4Pb.js → chunk-TZMSLE5B-DdgcuCwZ.js} +1 -1
- package/dist/assets/{chunk-WFRQ32O7-k2LaZwie.js → chunk-WFRQ32O7-CHVQx4E8.js} +1 -1
- package/dist/assets/{chunk-WFWHJNB7-h5yM_3qQ.js → chunk-WFWHJNB7-B095GDsj.js} +1 -1
- package/dist/assets/{chunk-XRWGC2XP-C9Mh6qts.js → chunk-XRWGC2XP-C9u0mhR4.js} +1 -1
- package/dist/assets/{circle-play-Cktn64O2.js → circle-play-BnvyuDgL.js} +1 -1
- package/dist/assets/{circle-plus-CR5IX63e.js → circle-plus-CfdbDkkn.js} +1 -1
- package/dist/assets/{circle-x-t3DIkXqJ.js → circle-x-BsVcxKkV.js} +1 -1
- package/dist/assets/classDiagram-KNZD7YFC-CjqRV-TB.js +1 -0
- package/dist/assets/classDiagram-v2-RKCZMP56-CGekJfCg.js +1 -0
- package/dist/assets/client-RNr6mM1Y.js +2 -0
- package/dist/assets/{clipboard-paste-CCXUHJEo.js → clipboard-paste-CYFMW3x7.js} +1 -1
- package/dist/assets/column-preview-2H8pwalb.js +2 -0
- package/dist/assets/{columns-BBxos2iF.js → columns-qXe5bccO.js} +7 -7
- package/dist/assets/{command-CMralWVx.js → command-BZVf1cJP.js} +1 -1
- package/dist/assets/command-palette-CYMxp9xF.js +1 -0
- package/dist/assets/{common-CGhyb0HV.js → common-DW3bNKWY.js} +1 -1
- package/dist/assets/{config-DiCy6eC0.js → config-DXGmIv9f.js} +1 -1
- package/dist/assets/{copy-DAVB02c8.js → copy-6mpL4BeI.js} +1 -1
- package/dist/assets/{copy-icon-GGPHJWJ0.js → copy-icon-6ICckC-p.js} +1 -1
- package/dist/assets/{dagre-5GWH7T2D-B1wEBSrx.js → dagre-5GWH7T2D-hVCok2au.js} +1 -1
- package/dist/assets/{data-grid-overlay-editor-Drp4I0tg.js → data-grid-overlay-editor-BwcAr1JM.js} +1 -1
- package/dist/assets/datasources-panel-BvrtAadm.js +1 -0
- package/dist/assets/{dates-grtSI02N.js → dates-Au76svwW.js} +1 -1
- package/dist/assets/dependency-graph-panel-F9AD_whb.js +4 -0
- package/dist/assets/{diagram-N5W7TBWH-D0MGIq61.js → diagram-N5W7TBWH-C26XpepA.js} +1 -1
- package/dist/assets/{diagram-QEK2KX5R-DU6geLeA.js → diagram-QEK2KX5R-yrTR8I_L.js} +1 -1
- package/dist/assets/{diagram-S2PKOQOG-BNhY4Z1-.js → diagram-S2PKOQOG-BnrvSrEb.js} +1 -1
- package/dist/assets/{dialog-B7icy1Vb.js → dialog-CR68_CUl.js} +1 -1
- package/dist/assets/{dist-BNjtn4W8.js → dist--01dzFeG.js} +1 -1
- package/dist/assets/{dist-BagyUivg.js → dist--UHY1FN-.js} +1 -1
- package/dist/assets/{dist-5Gm6w_15.js → dist-6vTAXnMq.js} +1 -1
- package/dist/assets/{dist-DTazGMur.js → dist-B6CCfKkp.js} +1 -1
- package/dist/assets/dist-BAqgWgpM.js +1 -0
- package/dist/assets/{dist-BaApG_tl.js → dist-BUe_o-3o.js} +1 -1
- package/dist/assets/{dist-BpAb8rGb.js → dist-BnTbfmCK.js} +1 -1
- package/dist/assets/dist-C-4GTx-T.js +1 -0
- package/dist/assets/{dist-C0ek66tJ.js → dist-C1lnVyyK.js} +1 -1
- package/dist/assets/{dist-DGiVfc7V.js → dist-CbsJnssA.js} +1 -1
- package/dist/assets/{dist-DV-8bxFo.js → dist-CjoeBoZ9.js} +1 -1
- package/dist/assets/{dist-D5QvSsL_.js → dist-CsC8ZokE.js} +1 -1
- package/dist/assets/{dist-C69eWtaQ.js → dist-CyqTsfyg.js} +1 -1
- package/dist/assets/dist-D-ZYdf69.js +1 -0
- package/dist/assets/dist-D3B_GqVR.js +1 -0
- package/dist/assets/{dist-BME02X12.js → dist-DFJwMM7Z.js} +1 -1
- package/dist/assets/dist-Db9UVaw9.js +1 -0
- package/dist/assets/{dist-BPr57Wxb.js → dist-DhXqYYeD.js} +1 -1
- package/dist/assets/{dist-CL0hPMY6.js → dist-Dm8m1boP.js} +1 -1
- package/dist/assets/{dist-B0vg88Aq.js → dist-DvDyxv8b.js} +1 -1
- package/dist/assets/{dist-Bzn1Zd0x.js → dist-DzUKODTF.js} +1 -1
- package/dist/assets/dist-LmEq3o4w.js +1 -0
- package/dist/assets/dist-Z_cK0cSh.js +1 -0
- package/dist/assets/dist-biP83Yvc.js +1 -0
- package/dist/assets/dist-dJ4FqqTe.js +1 -0
- package/dist/assets/{documentation-panel-D4iq1tSm.js → documentation-panel-DYKAf6Sg.js} +1 -1
- package/dist/assets/{dom-4KyFHEbl.js → dom-CT3dAMQW.js} +1 -1
- package/dist/assets/{download-C4Fyu6kU.js → download-B4_BX7gi.js} +1 -1
- package/dist/assets/{download-qt61TbgC.js → download-BB5Iexmn.js} +1 -1
- package/dist/assets/{dropdown-menu-Bp1vhqcS.js → dropdown-menu-CJDB1PNI.js} +1 -1
- package/dist/assets/edit-page-BK3Irdme.js +12 -0
- package/dist/assets/{ellipsis-DVXWk8Lc.js → ellipsis-CJtiw1k3.js} +1 -1
- package/dist/assets/{ellipsis-vertical-DfpheMuY.js → ellipsis-vertical-DK--y082.js} +1 -1
- package/dist/assets/{en-US-B2g9dciI.js → en-US-CjWuOpsV.js} +1 -1
- package/dist/assets/{erDiagram-AWTI2OKA-DxxWZrYD.js → erDiagram-AWTI2OKA-9EqwLrlG.js} +1 -1
- package/dist/assets/{error-banner-ARu6PiHL.js → error-banner-BGjnZePp.js} +1 -1
- package/dist/assets/error-panel-CrkbkIF_.js +1 -0
- package/dist/assets/{es-C0Ih1AxE.js → es-C-CWIA-E.js} +1 -1
- package/dist/assets/{esm-BR7TuyMc.js → esm-7XxuulnL.js} +1 -1
- package/dist/assets/{esm-Cb-iIF_w.js → esm-B39og2OG.js} +1 -1
- package/dist/assets/{esm-BIF8NHm8.js → esm-BBn_y9Ew.js} +1 -1
- package/dist/assets/esm-DjUQOOJ2.js +1 -0
- package/dist/assets/{eye-off-BEVibdMQ.js → eye-off-9UMe_Y7D.js} +1 -1
- package/dist/assets/field-D6g5A_wf.js +1 -0
- package/dist/assets/{file-DqkkCGhs.js → file-BENStGHx.js} +1 -1
- package/dist/assets/file-explorer-panel-Cgv3WjVh.js +1 -0
- package/dist/assets/{file-plus-2-BCmZgbYs.js → file-plus-2-CloHhbsF.js} +1 -1
- package/dist/assets/{file-text-DNmaotaP.js → file-text-Lr1kJd4E.js} +1 -1
- package/dist/assets/{file-video-camera-C5lALvNf.js → file-video-camera-CfnyBQQe.js} +1 -1
- package/dist/assets/filename-B5Yo1bOu.js +1 -0
- package/dist/assets/{floating-outline-Cjas_exC.js → floating-outline-DZnSnZfg.js} +1 -1
- package/dist/assets/{flowDiagram-PVAE7QVJ-DlTZtqcN.js → flowDiagram-PVAE7QVJ-iOj6Qgu-.js} +1 -1
- package/dist/assets/{focus-OWoLlKnm.js → focus-Bnk25hTp.js} +1 -1
- package/dist/assets/{form-xOqp67zT.js → form-BGZvwlog.js} +1 -1
- package/dist/assets/{form--nX5W3gQ.js → form-DyKYT1WR.js} +1 -1
- package/dist/assets/{formats-C8bbggqj.js → formats-CWdWXhfT.js} +1 -1
- package/dist/assets/{fullscreen-BFmvQx5m.js → fullscreen-DTPr3iBY.js} +1 -1
- package/dist/assets/{ganttDiagram-OWAHRB6G-BEPmawB5.js → ganttDiagram-OWAHRB6G-BWbXeAXa.js} +1 -1
- package/dist/assets/{gitGraph-ZV4HHKMB-DsmmnKI3.js → gitGraph-ZV4HHKMB-BpeeuO4L.js} +1 -1
- package/dist/assets/{gitGraphDiagram-NY62KEGX-DfTKmX9v.js → gitGraphDiagram-NY62KEGX-BX3O-mzY.js} +1 -1
- package/dist/assets/{glide-data-editor-CzDe-oK3.js → glide-data-editor-C45ArX7n.js} +4 -4
- package/dist/assets/globals-BFoVgbHf.js +1 -0
- package/dist/assets/{globe-CgG1jfYF.js → globe-CPrVx8HM.js} +1 -1
- package/dist/assets/home-page-DhT6cm6c.js +4 -0
- package/dist/assets/{image-DXGqie4b.js → image-DTv0Ic6H.js} +1 -1
- package/dist/assets/{index-DtggTI4O.js → index-29P5xX8u.js} +11 -11
- package/dist/assets/index-Optxbl37.css +2 -0
- package/dist/assets/{info-63CPKGFF-BVRAJzgS.js → info-63CPKGFF-Czr08O9A.js} +1 -1
- package/dist/assets/{infoDiagram-STP46IZ2-CcEqfhrj.js → infoDiagram-STP46IZ2-C1JX9JfB.js} +1 -1
- package/dist/assets/input-C1RzjWSK.js +7 -0
- package/dist/assets/{isValid-gOtpcPxn.js → isValid-o3nZVu8e.js} +1 -1
- package/dist/assets/{journeyDiagram-BIP6EPQ6-CfxDuLls.js → journeyDiagram-BIP6EPQ6-CC2JvTQD.js} +1 -1
- package/dist/assets/{kanban-definition-6OIFK2YF-BwopERfW.js → kanban-definition-6OIFK2YF-3qAhCi66.js} +1 -1
- package/dist/assets/{key-BuxNhFKW.js → key-D4QiH_7H.js} +1 -1
- package/dist/assets/{kiosk-mode--OX2RHZj.js → kiosk-mode-Dy2WnuWt.js} +1 -1
- package/dist/assets/{label-COeaBwl_.js → label-BEUjZsdo.js} +1 -1
- package/dist/assets/{layout-CKoMTVJt.js → layout-C6K0XXFK.js} +3 -3
- package/dist/assets/{linear-BI0LBATm.js → linear-nWRf49aw.js} +1 -1
- package/dist/assets/{link-DSY8ADga.js → link-CDOxp9sn.js} +1 -1
- package/dist/assets/links-D-L0rzz9.js +1 -0
- package/dist/assets/{list-filter-D2Wx3thV.js → list-filter-CRC72QPW.js} +1 -1
- package/dist/assets/{loader-CPDA0quD.js → loader-CgbiPC_T.js} +1 -1
- package/dist/assets/logs-panel-BB-6orqg.js +1 -0
- package/dist/assets/{maps-CxCIYhRT.js → maps-DaQbs_UR.js} +1 -1
- package/dist/assets/{menu-items-COILZQ4q.js → menu-items-Bo6Dyd_Q.js} +1 -1
- package/dist/assets/{mermaid-oqJ6vLFm.js → mermaid-Bqzxmx0C.js} +1 -1
- package/dist/assets/{mermaid-parser.core-8414a7OP.js → mermaid-parser.core-CwRCqiGJ.js} +2 -2
- package/dist/assets/{mermaid.core-CKfX2q8j.js → mermaid.core-C4o4vdkw.js} +3 -3
- package/dist/assets/mermaid.core-DjncFP_O.js +1 -0
- package/dist/assets/{mindmap-definition-Q6HEUPPD-nadsjaMC.js → mindmap-definition-Q6HEUPPD-pLcSm-bI.js} +1 -1
- package/dist/assets/{mode-CBh2Ag_Y.js → mode-DQPKc-Hp.js} +1 -1
- package/dist/assets/{name-cell-input-CAG50xh2.js → name-cell-input-DQd65hJw.js} +1 -1
- package/dist/assets/{number-overlay-editor-CbWBjwI1.js → number-overlay-editor-Ce_FEpnn.js} +1 -1
- package/dist/assets/once-8ZDiGGtA.js +1 -0
- package/dist/assets/outline-panel-BJDiYH61.js +1 -0
- package/dist/assets/packages-panel-D_VswrEd.js +1 -0
- package/dist/assets/{packet-HUATNLJX-BJ_b_gYi.js → packet-HUATNLJX-C5NsAS_7.js} +1 -1
- package/dist/assets/{pie-WTHONI2E-CS2JfH5S.js → pie-WTHONI2E-BCNGQ0_9.js} +1 -1
- package/dist/assets/{pieDiagram-ADFJNKIX-DP_lAtPz.js → pieDiagram-ADFJNKIX-CUCBn1VN.js} +1 -1
- package/dist/assets/plug-DrNpofTj.js +1 -0
- package/dist/assets/{plus-C1zexBxS.js → plus-d2HNOuZI.js} +1 -1
- package/dist/assets/{popover-CLp_lH16.js → popover-DW0D4l0O.js} +1 -1
- package/dist/assets/{precisionRound-CR2cxaaR.js → precisionRound-TxjBk8nN.js} +1 -1
- package/dist/assets/{quadrantDiagram-LMRXKWRM-gzT_-w3S.js → quadrantDiagram-LMRXKWRM-C6DXTSnZ.js} +1 -1
- package/dist/assets/{radar-NJJJXTRR-ChMDxgqR.js → radar-NJJJXTRR-Cck-wBOB.js} +1 -1
- package/dist/assets/{react-plotly-DUuIpNDT.js → react-plotly-x7-8ig7L.js} +1 -1
- package/dist/assets/{readonly-python-code-DMLMHG1v.js → readonly-python-code-Cb7Ak_Dy.js} +1 -1
- package/dist/assets/{refresh-ccw-lUiAEOAx.js → refresh-ccw-CCJeTTJO.js} +1 -1
- package/dist/assets/{refresh-cw-CSv3xyYY.js → refresh-cw-B_tmnHav.js} +1 -1
- package/dist/assets/{renderShortcut-DMYtt-ju.js → renderShortcut-C9_NT6sD.js} +1 -1
- package/dist/assets/{request-registry-4Bq310sk.js → request-registry-D4PD0fDJ.js} +1 -1
- package/dist/assets/{requirementDiagram-4UW4RH46-aavD0qQF.js → requirementDiagram-4UW4RH46-Bj7w3axz.js} +1 -1
- package/dist/assets/run-page-D9jntYU0.js +1 -0
- package/dist/assets/{runs-CItfCHkl.js → runs-BWcKkv9g.js} +1 -1
- package/dist/assets/{sankeyDiagram-GR3RE2ED-r95m_h3N.js → sankeyDiagram-GR3RE2ED-DCmlCkUu.js} +1 -1
- package/dist/assets/{save-Bg0tsaXV.js → save-CVcbYdvl.js} +1 -1
- package/dist/assets/scratchpad-panel-BUGlPLwQ.js +1 -0
- package/dist/assets/{scroll-text-SAt1GCBr.js → scroll-text-CN-2fr92.js} +1 -1
- package/dist/assets/secrets-panel-DGPyMcTb.js +1 -0
- package/dist/assets/{select-CMG6DC3j.js → select-DKRTzlUU.js} +1 -1
- package/dist/assets/{send-ePQN2mpH.js → send-DRRBOpzT.js} +1 -1
- package/dist/assets/{sequenceDiagram-C3RYC4MD-C4GqHIgf.js → sequenceDiagram-C3RYC4MD-CtIOF8jj.js} +1 -1
- package/dist/assets/{settings-TIv8aSog.js → settings-6ySBJQ7Y.js} +1 -1
- package/dist/assets/{share-CUbi0XlA.js → share-Dcl7D_tA.js} +1 -1
- package/dist/assets/snippets-panel-CKi40HiX.js +1 -0
- package/dist/assets/{spinner-CxlO4-GJ.js → spinner-BhnfQOEl.js} +1 -1
- package/dist/assets/{square-uM1ci7iL.js → square-DKPXnMmD.js} +1 -1
- package/dist/assets/{square-function-OflPQrBg.js → square-function-DBJINsmk.js} +1 -1
- package/dist/assets/{square-terminal-DZAwMMdQ.js → square-terminal-DoFRZ-M6.js} +1 -1
- package/dist/assets/{src-BOK-SWX4.js → src-KuQao6GK.js} +1 -1
- package/dist/assets/state-B37sZn4X.js +1 -0
- package/dist/assets/{state-COfuW2QS.js → state-CEmS5WFQ.js} +1 -1
- package/dist/assets/state-jvUYiWCG.js +1 -0
- package/dist/assets/{stateDiagram-KXAO66HF-CdN43FzO.js → stateDiagram-KXAO66HF-DwZscOce.js} +1 -1
- package/dist/assets/stateDiagram-v2-UMBNRL4Z-D5XUGcJP.js +1 -0
- package/dist/assets/stex-C7nwqmPk.js +1 -0
- package/dist/assets/storage-CaQ7kwuv.js +1 -0
- package/dist/assets/{switch-BKaPFRvh.js → switch-B5bMMWJn.js} +1 -1
- package/dist/assets/{tabs-C8HicIPZ.js → tabs-8ThyQfYh.js} +1 -1
- package/dist/assets/{terminal-Cnm8ANjQ.js → terminal-CPdYItDn.js} +1 -1
- package/dist/assets/{text-search-DpMeajoz.js → text-search-iEvFn29l.js} +1 -1
- package/dist/assets/{textarea-DhU2DWSB.js → textarea-B-_OthMe.js} +1 -1
- package/dist/assets/{time-Dzg4b75Q.js → time-BkIHCvH2.js} +1 -1
- package/dist/assets/{timeline-definition-XQNQX7LJ-D48ppGT8.js → timeline-definition-XQNQX7LJ-BGsZ09p6.js} +1 -1
- package/dist/assets/{toDate-BartytS4.js → toDate-Daj1hQSF.js} +1 -1
- package/dist/assets/{toggle-BLLoLiay.js → toggle-BpFqu8FB.js} +1 -1
- package/dist/assets/{tooltip-BjoMzmCN.js → tooltip-ULHbIsj9.js} +1 -1
- package/dist/assets/tracing-UKZUjbDB.js +2 -0
- package/dist/assets/tracing-panel-CuDItRLt.js +2 -0
- package/dist/assets/{trash-2-GOPu47oc.js → trash-2-3UJSaMKF.js} +1 -1
- package/dist/assets/{trash-BpVsWH8l.js → trash-CYX7fe5Y.js} +1 -1
- package/dist/assets/{tree-qyAlDlFy.js → tree-3z9r1N_5.js} +1 -1
- package/dist/assets/{treemap-75Q7IDZK-B4o24kyC.js → treemap-75Q7IDZK-MX1Hmq0m.js} +1 -1
- package/dist/assets/{type-C9leWRlU.js → type-kF6pOJbH.js} +1 -1
- package/dist/assets/{types-BBD3GQ0S.js → types-DQDL7dro.js} +1 -1
- package/dist/assets/{types-DEwRoAG0.js → types-DyTIgBnH.js} +1 -1
- package/dist/assets/{useAddCell-DJhNA_O5.js → useAddCell-Dq3HqYz1.js} +1 -1
- package/dist/assets/{useAsyncData-BEqqunls.js → useAsyncData-D9GA9BWg.js} +1 -1
- package/dist/assets/{useBoolean-DnggoYme.js → useBoolean-CSR3XjhE.js} +1 -1
- package/dist/assets/{useCellActionButton-B_a4Sv2X.js → useCellActionButton-BAG0Vvnt.js} +1 -1
- package/dist/assets/{useDateFormatter-DjmrLzxH.js → useDateFormatter-DrFLqO1D.js} +1 -1
- package/dist/assets/{useDebounce-9_rqRiHk.js → useDebounce-_ztZiL0I.js} +1 -1
- package/dist/assets/{useDeepCompareMemoize-DIhr42Iz.js → useDeepCompareMemoize-BsZY8i2r.js} +1 -1
- package/dist/assets/{useDeleteCell-DVNOLjwN.js → useDeleteCell-CJaipocw.js} +1 -1
- package/dist/assets/useHotkey-DkiyGPLs.js +1 -0
- package/dist/assets/{useInstallPackage-CTHO3tj3.js → useInstallPackage-DoKAq17E.js} +1 -1
- package/dist/assets/useNotebookActions-CQd8IgyR.js +1 -0
- package/dist/assets/useSplitCell-Dodncnp8.js +1 -0
- package/dist/assets/{useTheme-C5JyqXTm.js → useTheme-oPMxEKRc.js} +1 -1
- package/dist/assets/{utilities.esm-DbqS7Pjb.js → utilities.esm-DcV_e-D3.js} +1 -1
- package/dist/assets/utils-DBmmAf_K.js +1 -0
- package/dist/assets/variable-panel-BCihDsBL.js +1 -0
- package/dist/assets/{vega-component-D1ZJxK-L.js → vega-component-CWMEFM7y.js} +1 -1
- package/dist/assets/{vega-loader.browser.module-Jwd7L8Ye.js → vega-loader.browser.module-BkWiTok0.js} +1 -1
- package/dist/assets/{with-selector-CXhuorCH.js → with-selector-BmLsipPw.js} +1 -1
- package/dist/assets/{workflow-Covue_dW.js → workflow-DA01FBLw.js} +1 -1
- package/dist/assets/{wrench-DNJq8NCj.js → wrench-B2m2X1sb.js} +1 -1
- package/dist/assets/{write-secret-modal-qe46KOIw.js → write-secret-modal-Dx9oubag.js} +1 -1
- package/dist/assets/{xychartDiagram-6GGTOJPD-DK41sZTI.js → xychartDiagram-6GGTOJPD-D-i5LTeX.js} +1 -1
- package/dist/assets/{youtube-0-RiaVkr.js → youtube-Bl4NeyvA.js} +1 -1
- package/dist/index.html +155 -155
- package/package.json +1 -1
- package/src/__tests__/chat-history.test.ts +123 -0
- package/src/components/app-config/ai-config.tsx +23 -0
- package/src/components/app-config/mcp-config.tsx +42 -2
- package/src/components/app-config/user-config-form.tsx +0 -24
- package/src/components/chat/acp/__tests__/context-utils.test.ts +1 -1
- package/src/components/chat/acp/agent-panel.tsx +1 -1
- package/src/components/chat/acp/blocks.tsx +46 -53
- package/src/components/chat/acp/common.tsx +1 -1
- package/src/components/chat/acp/context-utils.ts +1 -1
- package/src/components/chat/acp/session-tabs.tsx +1 -1
- package/src/components/chat/chat-history-popover.tsx +125 -0
- package/src/components/chat/chat-history-utils.ts +69 -0
- package/src/components/chat/chat-panel.tsx +9 -57
- package/src/components/editor/__tests__/data-attributes.test.tsx +1 -1
- package/src/components/editor/actions/useNotebookActions.tsx +2 -4
- package/src/components/editor/ai/__tests__/completion-utils.test.ts +23 -31
- package/src/components/editor/cell/CreateCellButton.tsx +14 -2
- package/src/components/editor/cell/code/cell-editor.tsx +1 -0
- package/src/components/editor/database/schemas.ts +2 -10
- package/src/components/editor/{Cell.tsx → notebook-cell.tsx} +5 -1
- package/src/components/editor/output/MarimoErrorOutput.tsx +4 -34
- package/src/components/editor/renderers/{CellArray.tsx → cell-array.tsx} +1 -1
- package/src/components/forms/__tests__/form-utils.test.ts +2 -2
- package/src/components/mcp/hooks.ts +48 -0
- package/src/components/mcp/mcp-status-indicator.tsx +144 -0
- package/src/components/ui/number-field.tsx +4 -1
- package/src/core/ai/context/providers/__tests__/__snapshots__/tables.test.ts.snap +13 -19
- package/src/core/ai/context/providers/__tests__/cell-output.test.ts +0 -1
- package/src/core/ai/context/providers/__tests__/datasource.test.ts +5 -6
- package/src/core/ai/context/providers/__tests__/error.test.ts +24 -15
- package/src/core/ai/context/providers/cell-output.ts +5 -5
- package/src/core/ai/context/providers/common.ts +13 -4
- package/src/core/ai/context/providers/datasource.ts +31 -20
- package/src/core/ai/context/providers/error.ts +3 -4
- package/src/core/ai/context/providers/file.ts +2 -2
- package/src/core/ai/context/providers/tables.ts +36 -8
- package/src/core/ai/context/providers/variable.ts +2 -3
- package/src/core/cells/__tests__/cells.test.ts +6 -6
- package/src/core/cells/cells.ts +12 -13
- package/src/core/cells/scrollCellIntoView.ts +1 -1
- package/src/core/codemirror/__tests__/setup.test.ts +1 -0
- package/src/core/codemirror/cm.ts +3 -2
- package/src/core/config/__tests__/config-schema.test.ts +2 -0
- package/src/core/config/config-schema.ts +2 -0
- package/src/core/config/feature-flag.tsx +0 -2
- package/src/core/edit-app.tsx +1 -1
- package/src/core/network/CachingRequestRegistry.ts +2 -2
- package/src/stories/cell.stories.tsx +1 -1
- package/src/stories/layout/vertical/one-column.stories.tsx +1 -1
- package/src/utils/numbers.ts +24 -1
- package/dist/assets/MarimoErrorOutput-CUb4AQdT.js +0 -6
- package/dist/assets/add-cell-with-ai-DCyfgnLI.js +0 -36
- package/dist/assets/agent-panel-B_MMb9mo.js +0 -287
- package/dist/assets/ai-model-dropdown-Dk9Kz_pz.js +0 -2
- package/dist/assets/api-DBBaApVO.js +0 -1
- package/dist/assets/app-config-button-Cbw9b5rl.js +0 -1
- package/dist/assets/cell-link-woRE950-.js +0 -1
- package/dist/assets/channel-D-YgrD6I.js +0 -1
- package/dist/assets/chat-panel-DLphumiN.js +0 -3
- package/dist/assets/check-hL6-9SZK.js +0 -1
- package/dist/assets/circle-check-big-C7DGeh12.js +0 -1
- package/dist/assets/classDiagram-KNZD7YFC-yzXw7kFX.js +0 -1
- package/dist/assets/classDiagram-v2-RKCZMP56-Co2zbBi0.js +0 -1
- package/dist/assets/client-CA946N69.js +0 -2
- package/dist/assets/column-preview-BT14RHNM.js +0 -2
- package/dist/assets/command-palette-qYrNUNjA.js +0 -1
- package/dist/assets/datasources-panel-2YJ76Lq8.js +0 -1
- package/dist/assets/dependency-graph-panel-CnzvmPdT.js +0 -4
- package/dist/assets/dist-BtRvVXgu.js +0 -1
- package/dist/assets/dist-CAZ5kHnb.js +0 -1
- package/dist/assets/dist-CN8IvtVY.js +0 -1
- package/dist/assets/dist-Cw007UHk.js +0 -1
- package/dist/assets/dist-DEfSR7VW.js +0 -1
- package/dist/assets/dist-DSbiMNpu.js +0 -1
- package/dist/assets/dist-DeIZvG9x.js +0 -1
- package/dist/assets/dist-DyZWkD0n.js +0 -1
- package/dist/assets/dist-hfODPqg9.js +0 -1
- package/dist/assets/edit-page-Bt_YqRld.js +0 -12
- package/dist/assets/error-panel-dvBEznKE.js +0 -1
- package/dist/assets/esm-hOS9Yf3s.js +0 -1
- package/dist/assets/field-Ota1KKvP.js +0 -1
- package/dist/assets/file-explorer-panel-Pa89UfV1.js +0 -1
- package/dist/assets/filename-BYm5Do9U.js +0 -1
- package/dist/assets/home-page-B3bIZC6F.js +0 -4
- package/dist/assets/index-BQd14tU4.css +0 -2
- package/dist/assets/input-Dm-m3XYB.js +0 -7
- package/dist/assets/links-CQoApRoA.js +0 -1
- package/dist/assets/logs-panel-R50NxjC7.js +0 -1
- package/dist/assets/mermaid.core-BjBlUxCx.js +0 -1
- package/dist/assets/numbers-DtHKLeOn.js +0 -1
- package/dist/assets/outline-panel-CB2kV_p5.js +0 -1
- package/dist/assets/packages-panel-BpFuUbAr.js +0 -1
- package/dist/assets/run-page-ClDuCh42.js +0 -1
- package/dist/assets/scratchpad-panel-BRljth0m.js +0 -1
- package/dist/assets/secrets-panel-CQON2dfx.js +0 -1
- package/dist/assets/snippets-panel-C0OdhmTA.js +0 -1
- package/dist/assets/state-DaDgAzck.js +0 -1
- package/dist/assets/state-Do6Fn2Io.js +0 -1
- package/dist/assets/stateDiagram-v2-UMBNRL4Z-Bi0DZGHg.js +0 -1
- package/dist/assets/stex-CbLDtSMU.js +0 -1
- package/dist/assets/storage-DFOl3UlZ.js +0 -1
- package/dist/assets/tracing-k1M6Upka.js +0 -2
- package/dist/assets/tracing-panel-CyG4yTCu.js +0 -2
- package/dist/assets/useHotkey-CJ5v8JMM.js +0 -1
- package/dist/assets/useNotebookActions-BB-5-4dL.js +0 -1
- package/dist/assets/useSplitCell-Cy53n7mS.js +0 -1
- package/dist/assets/utils-CfnN8i3Y.js +0 -1
- package/dist/assets/variable-panel-Dd_6lOoR.js +0 -1
- /package/dist/assets/{Deferred-BIEvCvJC.js → Deferred-Mppm0cvJ.js} +0 -0
- /package/dist/assets/{alert-B2-Y1fzf.js → alert-hjKHAeOD.js} +0 -0
- /package/dist/assets/{badge-D5b5ze0K.js → badge-DJuT6BaT.js} +0 -0
- /package/dist/assets/{blob-DFrnsWYL.js → blob-CTPcPiam.js} +0 -0
- /package/dist/assets/{connection-Cb7zku0y.js → connection-D2GvycR9.js} +0 -0
- /package/dist/assets/{copy-BiKQh0sU.js → copy-CkZsxeON.js} +0 -0
- /package/dist/assets/{createLucideIcon-Be9UM2Pe.js → createLucideIcon-QLW8E4z5.js} +0 -0
- /package/dist/assets/{createReducer-BaSP2BKE.js → createReducer-CFr1RdS2.js} +0 -0
- /package/dist/assets/{defaultLocale-DU4zdxes.js → defaultLocale-C6TNIE_k.js} +0 -0
- /package/dist/assets/{defaultLocale-BCtmQtCj.js → defaultLocale-DPsgYaXf.js} +0 -0
- /package/dist/assets/{dist-DIuPmJ5w.js → dist-Bz53xjA5.js} +0 -0
- /package/dist/assets/{dist-BhR4qmIv.js → dist-DcASoeRZ.js} +0 -0
- /package/dist/assets/{dist-BMAXVGJe.js → dist-Dlusp3mb.js} +0 -0
- /package/dist/assets/{documentation-BZROoSma.js → documentation-B7z6bB-t.js} +0 -0
- /package/dist/assets/{emotion-is-prop-valid.esm-plUNooLR.js → emotion-is-prop-valid.esm-BbphD4LX.js} +0 -0
- /package/dist/assets/{errors-qtuExmE-.js → errors-_3XAtRr3.js} +0 -0
- /package/dist/assets/{es-Hxx5X1vH.js → es-BVCqnQhJ.js} +0 -0
- /package/dist/assets/{extends--r5KbeWh.js → extends-Bwhapo2B.js} +0 -0
- /package/dist/assets/{fast-deep-equal-DT2Tke28.js → fast-deep-equal-BdzBWnNx.js} +0 -0
- /package/dist/assets/{icons-BUUt9FMo.js → icons-CLD-J5J3.js} +0 -0
- /package/dist/assets/{kbd-DItNvBdP.js → kbd-BQFiWIjd.js} +0 -0
- /package/dist/assets/{main-Co0CqoDt.js → main-CfqcqCNp.js} +0 -0
- /package/dist/assets/{marked.esm-BVjBUuHx.js → marked.esm-C_54K2ke.js} +0 -0
- /package/dist/assets/{namespace-BstGchRe.js → namespace-CnoeT75h.js} +0 -0
- /package/dist/assets/{objectWithoutPropertiesLoose-CGYpiDu4.js → objectWithoutPropertiesLoose-CDpgRi8_.js} +0 -0
- /package/dist/assets/{ordinal-DO1z0TEs.js → ordinal-CHS6rGcb.js} +0 -0
- /package/dist/assets/{preload-helper-CxnU7XTI.js → preload-helper-DImqtvgl.js} +0 -0
- /package/dist/assets/{prop-types-Bv8iPqhZ.js → prop-types-CHKlDUlJ.js} +0 -0
- /package/dist/assets/{range-CJAH1fu_.js → range-BPiwmiGf.js} +0 -0
- /package/dist/assets/{shim-Bk8nzKPV.js → shim-CWt9rDBn.js} +0 -0
- /package/dist/assets/{stex-CETff8Y9.js → stex-BrOrfhKB.js} +0 -0
- /package/dist/assets/{strings-1yw0WVap.js → strings-DYBy5ejj.js} +0 -0
- /package/dist/assets/{tslib.es6-DItc8Tbq.js → tslib.es6-dlz5WbC8.js} +0 -0
- /package/dist/assets/{use-toast-C07-frN_.js → use-toast-D6NNsC80.js} +0 -0
- /package/dist/assets/{useEvent-BIiDVnhT.js → useEvent-BOb1a9d1.js} +0 -0
- /package/dist/assets/{useLifecycle-Bnvt0QrQ.js → useLifecycle-BfeAlD80.js} +0 -0
- /package/dist/assets/{useNonce-Cw4ZAbgi.js → useNonce-BbWkd3B4.js} +0 -0
- /package/dist/assets/{useNumberFormatter-DYIEUCTe.js → useNumberFormatter-D21brJ0f.js} +0 -0
- /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
|
-
-
|
|
8
|
-
-
|
|
9
|
-
-
|
|
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
|
-
-
|
|
17
|
-
-
|
|
18
|
-
-
|
|
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
|
-
|
|
29
|
-
-
|
|
30
|
-
-
|
|
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(
|
|
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:
|
|
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:
|
|
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:
|
|
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).
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
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).
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
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.
|
|
158
|
+
boost: data.outputType === "media" ? Boosts.HIGH : Boosts.MEDIUM,
|
|
158
159
|
type: this.contextType,
|
|
159
|
-
section:
|
|
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:
|
|
6
|
-
REMOTE_TABLE:
|
|
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()]
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
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:
|
|
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 {
|
|
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:
|
|
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
|
-
|
|
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:
|
|
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 } =
|
|
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
|
|
44
|
-
num_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 +=
|
|
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 +=
|
|
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:
|
|
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 {
|
|
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:
|
|
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/
|
|
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.
|
|
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.
|
|
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("#
|
|
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.
|
|
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);
|
package/src/core/cells/cells.ts
CHANGED
|
@@ -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/
|
|
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
|
-
|
|
1328
|
-
|
|
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
|
-
//
|
|
1333
|
-
return
|
|
1334
|
-
state,
|
|
1335
|
-
|
|
1336
|
-
|
|
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";
|
|
@@ -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 &&
|
|
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,
|
package/src/core/edit-app.tsx
CHANGED
|
@@ -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/
|
|
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 {
|