@marimo-team/islands 0.16.5 → 0.17.1
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/{fullscreen-D1yTiBlu.js → Combination-De9yoNY5.js} +855 -795
- package/dist/{ConnectedDataExplorerComponent-D96i9G-X.js → ConnectedDataExplorerComponent-DuvpJOKp.js} +102 -123
- package/dist/{ImageComparisonComponent-D4Tv9QzJ.js → ImageComparisonComponent--etUl2pp.js} +2 -2
- package/dist/{_baseIsEqual-oN7pRNcM.js → _baseIsEqual-BFlyFUxC.js} +20 -20
- package/dist/{_basePickBy-CYvzhRjy.js → _basePickBy-gCCvtjgp.js} +3 -3
- package/dist/{_baseProperty-DGUdIBuu.js → _baseProperty-BuqBC0Ie.js} +5 -5
- package/dist/{_baseUniq-B5gfSl8S.js → _baseUniq-CKN9mEDq.js} +5 -5
- package/dist/any-language-editor-Du2Q_6IK.js +156 -0
- package/dist/apl-CUm2DGqh.js +4 -0
- package/dist/{arc-B1iVbHTB.js → arc-C_O2hc-b.js} +2 -2
- package/dist/architecture-O4VJ6CD3-PFw3eFBY.js +21 -0
- package/dist/{architectureDiagram-W76B3OCA-DkEhipkW.js → architectureDiagram-W76B3OCA-CrK99pJi.js} +41 -40
- package/dist/asciiarmor-lqJ78U01.js +4 -0
- package/dist/asn1-CjwpSTlW.js +4 -0
- package/dist/assets/__vite-browser-external-DHoMWs4M.js +1 -0
- package/dist/assets/worker-B6tH8gPO.js +54 -0
- package/dist/{blockDiagram-QIGZ2CNN-DZOqLMYa.js → blockDiagram-QIGZ2CNN-BJOEyO6w.js} +101 -111
- package/dist/brainfuck-ClvDI1dq.js +4 -0
- package/dist/{button-CEcjneWG.js → button-ADXOb_gX.js} +37 -40
- package/dist/{c4Diagram-FPNF74CW-DVaR7c9q.js → c4Diagram-FPNF74CW-7Pz_X9wF.js} +31 -54
- package/dist/{channel-Uh0KpgGW.js → channel-X-wRUxX6.js} +1 -1
- package/dist/{check-BK9zDfQk.js → check-COlaG7Ss.js} +1 -1
- package/dist/{chunk-3AY6CYHV-Dk2R2-S1.js → chunk-3AY6CYHV-BQH2fFpA.js} +37 -37
- package/dist/{chunk-4BX2VUAB-CqO6zUIz.js → chunk-4BX2VUAB-D-QtDCKM.js} +1 -1
- package/dist/{chunk-4KMFLZZN-CloTfTwP.js → chunk-4KMFLZZN-BirZvvJS.js} +220 -329
- package/dist/{chunk-55IACEB6-I0rmqTua.js → chunk-55IACEB6-DjtPYZKs.js} +1 -1
- package/dist/{chunk-6OXUPJBA-BuROSTmo.js → chunk-6OXUPJBA-CTnnqlzw.js} +7 -7
- package/dist/{chunk-7GE3RBXV-B1-tsIPP.js → chunk-7GE3RBXV-CT47hCrL.js} +1 -1
- package/dist/{chunk-ABZYJK2D-CLlso8tj.js → chunk-ABZYJK2D-B6ZsU6SR.js} +484 -1043
- package/dist/{chunk-BN7GFLIU-Db2-FjLn.js → chunk-BN7GFLIU-DYWEsrG4.js} +1 -1
- package/dist/{chunk-CVBHYZKI-BONeiloK.js → chunk-CVBHYZKI-BuzDGXz0.js} +3 -3
- package/dist/{chunk-CXMOBAN2-U9GJSP1d.js → chunk-CXMOBAN2-Bas2S5w1.js} +46 -54
- package/dist/chunk-EXTU4WIE-DXwNSukz.js +10 -0
- package/dist/{chunk-FMBD7UC4-DyV3BR_I.js → chunk-FMBD7UC4-CYKEpuPr.js} +1 -1
- package/dist/{chunk-JA3XYJ7Z-C9A1076P.js → chunk-JA3XYJ7Z-DcxfkcDC.js} +21 -25
- package/dist/{chunk-JEIROHC2-BGnFkSVq.js → chunk-JEIROHC2-C01ZIcIG.js} +1 -1
- package/dist/{chunk-K7UQS3LO-033LOsjK.js → chunk-K7UQS3LO-CmbT97MV.js} +7 -7
- package/dist/{chunk-KMC2YHZD-DT4Sq4Ld.js → chunk-KMC2YHZD-D64m-1E1.js} +1 -1
- package/dist/{chunk-QN33PNHL-gs44MZla.js → chunk-QN33PNHL-DjB0j8Dr.js} +2 -2
- package/dist/{chunk-QYVHNE3D-B8BO1AnT.js → chunk-QYVHNE3D-VA4W4oxG.js} +3 -4
- package/dist/{chunk-QZHKN3VN-CeN_GkU6.js → chunk-QZHKN3VN-KT0fl3Em.js} +1 -1
- package/dist/chunk-S3R3BYOJ-C5zmcMvn.js +380 -0
- package/dist/{chunk-T44TD3VJ-BwzD6YE0.js → chunk-T44TD3VJ-BMOgu-Hk.js} +1 -1
- package/dist/{chunk-TVAH2DTR-Bi6jpQJQ.js → chunk-TVAH2DTR-eKm8SKnH.js} +7 -8
- package/dist/{chunk-TZMSLE5B-D8klz2H_.js → chunk-TZMSLE5B-CQxFRiI2.js} +5 -6
- package/dist/{chunk-WFRQ32O7-CzSwSlN0.js → chunk-WFRQ32O7-Dg51o277.js} +1 -1
- package/dist/{chunk-WFWHJNB7-DN_cavM6.js → chunk-WFWHJNB7-DVLO98ge.js} +1 -1
- package/dist/{chunk-XRWGC2XP-Bb5eGNM2.js → chunk-XRWGC2XP-UNFKdWQh.js} +1 -1
- package/dist/{chunk-ZPAFE4SF-S5UYNb0V.js → chunk-ZPAFE4SF-DbCSwfLK.js} +22 -22
- package/dist/classDiagram-KNZD7YFC-HUFFxNdk.js +40 -0
- package/dist/classDiagram-v2-RKCZMP56-Dw7Acmuf.js +40 -0
- package/dist/{click-outside-container-DE4e7p1p.js → click-outside-container-2BH589Bq.js} +9 -14
- package/dist/{clike-Cg_DBrJ0.js → clike-Bc2PZzZQ.js} +1 -1
- package/dist/{clike-CxAz4p9E.js → clike-CytFO-kN.js} +1 -1
- package/dist/clojure-8GefCgPe.js +4 -0
- package/dist/{clone-Dk4FkKH0.js → clone-CCgVUJ6x.js} +1 -1
- package/dist/cmake-yAhT9H0F.js +4 -0
- package/dist/cobol-BmltueOY.js +4 -0
- package/dist/coffeescript-C7KEQBcH.js +4 -0
- package/dist/commonlisp-CNbiJRU-.js +4 -0
- package/dist/{constants-Cjd_3kwd.js → constants-BaCMVd12.js} +3 -3
- package/dist/{copy-C5RFg7ok.js → copy-GNcK40wy.js} +6 -2
- package/dist/{cose-bilkent-S5V4N54A-B3iOTGu5.js → cose-bilkent-S5V4N54A-BnvuJG6Y.js} +20 -20
- package/dist/crystal-OdjZZ8bc.js +4 -0
- package/dist/css-DhTxMmL_.js +5 -0
- package/dist/cypher-CgN8E3YI.js +4 -0
- package/dist/{cytoscape.esm-DTDV0Nbj.js → cytoscape.esm-BFEMljQI.js} +586 -661
- package/dist/d-g41sJcBC.js +4 -0
- package/dist/{dagre-5GWH7T2D-KM4Z11yT.js → dagre-5GWH7T2D-rn7tZYaQ.js} +41 -45
- package/dist/{dagre-B0u1urxE.js → dagre-Bghq6VKO.js} +58 -77
- package/dist/data-grid-overlay-editor-B4_Caieu.js +133 -0
- package/dist/{diagram-N5W7TBWH-CtO7az4G.js → diagram-N5W7TBWH-lbF94o-g.js} +46 -61
- package/dist/diagram-QEK2KX5R-CKBhSzsO.js +246 -0
- package/dist/{diagram-S2PKOQOG-CiXElLNQ.js → diagram-S2PKOQOG-161_1f53.js} +35 -34
- package/dist/diff-ViRYYhhg.js +4 -0
- package/dist/{dist-C3WYsf4K.js → dist-28HYzERB.js} +4 -10
- package/dist/{dist-CChOkSUg.js → dist-4dtbqf8A.js} +3 -3
- package/dist/{dist-CUnh_3Ii.js → dist-71jYYbWP.js} +2 -2
- package/dist/{dist-elblfNXO.js → dist-B8Pbw5ln.js} +2 -2
- package/dist/{dist-DPF5TTUg.js → dist-BAqp4Vtl.js} +126 -115
- package/dist/{dist-BEvIw5Nh.js → dist-BBhmkni2.js} +1 -1
- package/dist/{dist-C7ASiFxI.js → dist-BNRdMfJH.js} +273 -263
- package/dist/dist-BSyYM1Gi.js +15 -0
- package/dist/{dist-DzOpMdwb.js → dist-BYHiiJB-.js} +4 -4
- package/dist/{dist-DKFaZRVk.js → dist-B_wjJqqS.js} +2 -2
- package/dist/{dist-CutXTm8t.js → dist-BaPjLM6s.js} +1 -1
- package/dist/dist-BfJO8Bm9.js +12 -0
- package/dist/{dist-CGIZPq3J.js → dist-BqdQPWpQ.js} +2 -2
- package/dist/{dist--I6Htnlv.js → dist-C2IEc8og.js} +5 -5
- package/dist/{dist-CLvpViod.js → dist-C9-uHBqC.js} +2 -3
- package/dist/{dist-DBhzmFyH.js → dist-CJb8EiFO.js} +3 -3
- package/dist/dist-CLuF3AtO.js +6 -0
- package/dist/{dist-Dzk1C8l5.js → dist-CNAkUyxv.js} +11 -14
- package/dist/{dist-DNnYAdRE.js → dist-CNvMOZu9.js} +2 -2
- package/dist/{dist-CxD5E6Sh.js → dist-CPNnKuPh.js} +24 -22
- package/dist/{dist-C3QUag__.js → dist-CTIyD_KU.js} +3 -3
- package/dist/dist-CU04U4NL.js +10 -0
- package/dist/{dist-CZfRM7pE.js → dist-CWh5ZwcC.js} +2 -2
- package/dist/{dist-DW9er3Zq.js → dist-CWqB4bg8.js} +44 -23
- package/dist/{dist-CbRkrKrP.js → dist-CtOeHDJp.js} +5 -5
- package/dist/{dist-DL_ci7Yc.js → dist-Cw0F6l-7.js} +1 -1
- package/dist/{dist-BZBitvuL.js → dist-CwZcC4om.js} +1 -1
- package/dist/dist-DNUT6b47.js +6 -0
- package/dist/{dist-BBlFk9ki.js → dist-Da046MhT.js} +1 -1
- package/dist/{dist-Cib4sGDA.js → dist-DaTVdKJa.js} +2 -2
- package/dist/dist-DbAb2sY7.js +6 -0
- package/dist/dist-DiDFQ2Rk.js +6 -0
- package/dist/{dist-BQmQQqFH.js → dist-DlK420ke.js} +1 -1
- package/dist/{dist-o7fhJC7U.js → dist-Drf3cyIW.js} +3 -3
- package/dist/{dist-CdE2C2In.js → dist-DxESp2-T.js} +15 -20
- package/dist/{dist-JCAky9ND.js → dist-DzJem5xc.js} +17 -22
- package/dist/{dist-C5zMs_n5.js → dist-O0zVziwn.js} +3 -3
- package/dist/dist-SNAyAOJ-.js +6 -0
- package/dist/{dist-Bar1QnNM.js → dist-_4cudra1.js} +3 -3
- package/dist/dist-cbW5xJNV.js +6 -0
- package/dist/dist-h8eGLSbK.js +10 -0
- package/dist/{dist-BqgkUnEN.js → dist-xLN9qCAp.js} +3 -3
- package/dist/{dockerfile-Dum_1b-5.js → dockerfile-Cmlcqk35.js} +1 -1
- package/dist/dtd-RplB6hDg.js +4 -0
- package/dist/dylan-BX8KJufP.js +4 -0
- package/dist/ecl-CWtLaNMH.js +4 -0
- package/dist/eiffel-C-mlZPMn.js +4 -0
- package/dist/elm-CWp06vcb.js +4 -0
- package/dist/{erDiagram-AWTI2OKA-ZTIl9iQO.js → erDiagram-AWTI2OKA-BU7Qig7n.js} +32 -31
- package/dist/erlang-pfp22AZM.js +4 -0
- package/dist/error-banner-BAWlXn49.js +1012 -0
- package/dist/{esm-d0g2RsOH.js → esm-AtKNNGYO.js} +7 -9
- package/dist/esm-B2pocBPL.js +26 -0
- package/dist/{esm-DxFkg7a6.js → esm-Oo8OvZ6m.js} +1529 -1493
- package/dist/{esm-1_Mp6VD2.js → esm-YVnxJqkD.js} +340 -411
- package/dist/{factor-CdgiDGiu.js → factor-BZnBK3CG.js} +1 -1
- package/dist/factor-CEn53jua.js +5 -0
- package/dist/{flowDiagram-PVAE7QVJ-DsbofOzu.js → flowDiagram-PVAE7QVJ-JKJebWeY.js} +41 -40
- package/dist/{formats-ChrNdVdJ.js → formats-DOEuF6TR.js} +15 -19
- package/dist/forth-CL8vu_y8.js +4 -0
- package/dist/fortran-DsmXkYtE.js +4 -0
- package/dist/{ganttDiagram-OWAHRB6G-FnCH1Yj3.js → ganttDiagram-OWAHRB6G-BvWRfg05.js} +17 -16
- package/dist/gas-mYt9Rtlx.js +4 -0
- package/dist/gherkin-DHNCKBNj.js +4 -0
- package/dist/gitGraph-ZV4HHKMB-Cpd6k0O8.js +21 -0
- package/dist/{gitGraphDiagram-NY62KEGX-B0wvMNqU.js → gitGraphDiagram-NY62KEGX-VEJJBf5L.js} +38 -40
- package/dist/{glide-data-editor-D_kEsT07.js → glide-data-editor-Bne10icG.js} +1703 -1771
- package/dist/{graphlib-BGmr7CYF.js → graphlib-DRS8CrjA.js} +5 -5
- package/dist/groovy-DzRtOS5a.js +4 -0
- package/dist/haskell-Bl9iT_Mp.js +4 -0
- package/dist/haxe-DqA0ED6k.js +5 -0
- package/dist/{hotkeys-yFrUwyJK.js → hotkeys-DVxFjl2s.js} +16 -7
- package/dist/idl-WU2hil4i.js +4 -0
- package/dist/info-63CPKGFF-CG-xzUJo.js +21 -0
- package/dist/infoDiagram-STP46IZ2-zoRBGoup.js +45 -0
- package/dist/invariant-D3JoRb4I.js +6 -0
- package/dist/{isArrayLikeObject-DiDsNamC.js → isArrayLikeObject-DU5MCuQM.js} +3 -5
- package/dist/{isEmpty-BBG-u1GM.js → isEmpty-Do_v2sls.js} +2 -2
- package/dist/{isSymbol-BxF-_8BA.js → isSymbol-CtkA8Y0a.js} +1 -1
- package/dist/{javascript-Dfq1qI35.js → javascript-DGukg1sB.js} +2 -2
- package/dist/javascript-QY2BGJeV.js +5 -0
- package/dist/jinja2-Czleq7Sk.js +4 -0
- package/dist/{journeyDiagram-BIP6EPQ6-B3PotfAW.js → journeyDiagram-BIP6EPQ6-CsgEQgxh.js} +28 -28
- package/dist/julia-Dru3Qi0y.js +4 -0
- package/dist/{kanban-definition-6OIFK2YF-BTrQZ3LN.js → kanban-definition-6OIFK2YF-Bi8Ete2P.js} +42 -41
- package/dist/{katex-dN__NFdn.js → katex-C-g3rKKt.js} +1 -1
- package/dist/{katex-BE4xflfm.js → katex-DgfMWJY9.js} +149 -173
- package/dist/{label-BinTsX-u.js → label-BiVIU_wb.js} +252 -253
- package/dist/{line-C6-zz71o.js → line-B7-GoF1m.js} +3 -3
- package/dist/{linear-DyTdUIqX.js → linear-DeGGALuc.js} +4 -4
- package/dist/livescript-Dxqi_HLT.js +4 -0
- package/dist/{loader-Dijti3y4.js → loader-BBqwtZWj.js} +19 -26
- package/dist/lua-ByH1cUQZ.js +4 -0
- package/dist/main.js +17025 -17039
- package/dist/{marked.esm-3RjvXPoO.js → marked.esm-DkVwEwtO.js} +5 -5
- package/dist/mathematica-CWJIFuES.js +4 -0
- package/dist/mbox-qhPIGaUI.js +4 -0
- package/dist/{memoize-Dq87l1O_.js → memoize-D7eDkf3R.js} +1 -1
- package/dist/{merge-BPDCIm8P.js → merge-C_6cGM6o.js} +1 -1
- package/dist/{mermaid-MWiyXDcI.js → mermaid-BmtvsZ2m.js} +323 -339
- package/dist/{mermaid-parser.core-CSFx6MQ7.js → mermaid-parser.core-geyG_6o0.js} +8 -8
- package/dist/{mhchem-DZ68WS0G.js → mhchem-OhAaJ0fA.js} +1 -1
- package/dist/{min-BzhKOmZo.js → min-Dwa_NbP6.js} +7 -7
- package/dist/{mindmap-definition-Q6HEUPPD-9hhnrO1k.js → mindmap-definition-Q6HEUPPD-B-wmX1oG.js} +29 -28
- package/dist/mirc-yYcXhXBY.js +4 -0
- package/dist/mllike-BfT_Nl9x.js +6 -0
- package/dist/modelica-lVDtz1Rm.js +4 -0
- package/dist/mscgen-DvwdD1QJ.js +6 -0
- package/dist/mumps-BiY3GwKd.js +4 -0
- package/dist/{node-sql-parser-13oju30e.js → node-sql-parser-CoPWN4hn.js} +14343 -14351
- package/dist/{now-DVBcRCoE.js → now-DumxsrcX.js} +1 -1
- package/dist/{nsis-BW6_XagK.js → nsis-D4bLR_Y1.js} +1 -1
- package/dist/nsis-Dk18Sq_4.js +5 -0
- package/dist/ntriples-Cj-8VqKF.js +4 -0
- package/dist/{number-overlay-editor-D1YdiOrm.js → number-overlay-editor-D6r-48ka.js} +18 -24
- package/dist/octave-BgFAaYjU.js +4 -0
- package/dist/once-3OSMKEsL.js +74 -0
- package/dist/{ordinal-BXk5xAj2.js → ordinal-DpEbSVPc.js} +1 -1
- package/dist/oz-IsEG1I1m.js +4 -0
- package/dist/packet-HUATNLJX-Cafuo3IG.js +21 -0
- package/dist/pascal-BVf7FtIE.js +4 -0
- package/dist/perl-BM0-y4mZ.js +4 -0
- package/dist/pie-WTHONI2E-BE0pHBwB.js +21 -0
- package/dist/{pieDiagram-ADFJNKIX-CSBC0ZgF.js → pieDiagram-ADFJNKIX-C3GvPNUL.js} +40 -39
- package/dist/pig-CLBjzQmc.js +4 -0
- package/dist/powershell-B_qvE33J.js +4 -0
- package/dist/powershell-Dr7WZMDU.js +236 -0
- package/dist/{precisionRound-DbP73hkf.js → precisionRound-7YYJq2rW.js} +1 -1
- package/dist/properties-CUTpsH2y.js +4 -0
- package/dist/protobuf-DqCP8a-0.js +4 -0
- package/dist/pug-BvexKkw4.js +5 -0
- package/dist/{pug-Bmups_z0.js → pug-Dv3gE36O.js} +1 -1
- package/dist/puppet-CoIi0R3f.js +4 -0
- package/dist/purify.es-CrfFzTyi.js +536 -0
- package/dist/python-C-11-YMh.js +5 -0
- package/dist/{q-BzWcnVri.js → q-BzRpKgfd.js} +3 -2
- package/dist/q-CCVgEip7.js +4 -0
- package/dist/{quadrantDiagram-LMRXKWRM-h7nHf8xG.js → quadrantDiagram-LMRXKWRM-DPXwGNVa.js} +11 -10
- package/dist/r-CIdR0Sfs.js +4 -0
- package/dist/radar-NJJJXTRR-0adgjw0u.js +21 -0
- package/dist/{range-CgK0-PEw.js → range-CIbLpsrs.js} +3 -3
- package/dist/{react-plotly-BZakcxdv.js → react-plotly-DYyvxcRD.js} +4365 -4706
- package/dist/{requirementDiagram-4UW4RH46-BGEurQYq.js → requirementDiagram-4UW4RH46-Cs3Hqnm0.js} +24 -23
- package/dist/rpm-Dwvm039g.js +5 -0
- package/dist/ruby-DpTnO5gb.js +4 -0
- package/dist/{sankeyDiagram-GR3RE2ED-CxeJ_jfl.js → sankeyDiagram-GR3RE2ED-Be1d_Xf7.js} +7 -6
- package/dist/sas-CK9boxgv.js +4 -0
- package/dist/scheme-Y1aYL-Qq.js +4 -0
- package/dist/{sequenceDiagram-C3RYC4MD-CbFxwyr_.js → sequenceDiagram-C3RYC4MD-lbtovKTa.js} +24 -33
- package/dist/shell-D3eXGsHd.js +4 -0
- package/dist/sieve-BdwSFdWJ.js +4 -0
- package/dist/{simple-mode-Cgyya8F-.js → simple-mode-BMmwP_vI.js} +1 -1
- package/dist/{slides-component-BEyG25AH.js → slides-component-BoeQU7-s.js} +1012 -1033
- package/dist/smalltalk-BTYJquCm.js +4 -0
- package/dist/sparql-CYF0g4Cc.js +4 -0
- package/dist/{src-BNNJRxz3.js → src-BTqT1mA1.js} +6 -6
- package/dist/{stateDiagram-KXAO66HF-A61bMf29.js → stateDiagram-KXAO66HF-BmbR-Rol.js} +48 -49
- package/dist/stateDiagram-v2-UMBNRL4Z-DdJ7qVWc.js +39 -0
- package/dist/{step-IHYrujTc.js → step-2RJrMSSG.js} +1 -1
- package/dist/stex-CyWhoWHt.js +5 -0
- package/dist/style.css +1 -1
- package/dist/stylus-BBiKaI2h.js +4 -0
- package/dist/swift-COb15qFR.js +4 -0
- package/dist/tcl-Jik1LXu9.js +4 -0
- package/dist/textile-BFHPD3wr.js +4 -0
- package/dist/{time-D3tzCqJ6.js → time-BB30r1tK.js} +4 -4
- package/dist/{timeline-definition-XQNQX7LJ-BwdsB7CR.js → timeline-definition-XQNQX7LJ-1mv5caPW.js} +17 -17
- package/dist/{timer-D3Zlu9ow.js → timer-CcUhugb0.js} +2 -2
- package/dist/{toNumber-efKT08hh.js → toNumber-D3Ystr3y.js} +2 -2
- package/dist/{toString-BvCd3yJc.js → toString-CbuxCRDG.js} +2 -2
- package/dist/{toml-CIUkU1CP.js → toml-BqNUJWRI.js} +6 -2
- package/dist/toml-Brp9fBXs.js +4 -0
- package/dist/treemap-75Q7IDZK-CyBT8_Wh.js +21 -0
- package/dist/troff-CcZRW4vg.js +4 -0
- package/dist/ttcn-Bz_6ifRd.js +4 -0
- package/dist/ttcn-cfg-v-yi2rKc.js +4 -0
- package/dist/turtle-CDOsZYhB.js +4 -0
- package/dist/{types-1X1uZB4y.js → types-BPohCsA7.js} +198 -278
- package/dist/{useAsyncData-C4IqQK0g.js → useAsyncData-DHBqeb9a.js} +3 -2
- package/dist/{useDateFormatter-BCsBqetx.js → useDateFormatter-BkbjKw83.js} +9 -9
- package/dist/useIframeCapabilities-BEvvwlwt.js +46 -0
- package/dist/{useTheme-C2pgJzDH.js → useTheme-CnMbo-iq.js} +32 -29
- package/dist/vb-CL7fRwRw.js +4 -0
- package/dist/vbscript-CR2xfxpw.js +4 -0
- package/dist/{vega-component-Cv4J8CHz.js → vega-component-BfFcXZxw.js} +40 -39
- package/dist/{vega-loader.browser.module-Bi3ttvdj.js → vega-loader.browser.module-CFMtdrNw.js} +4 -5
- package/dist/velocity-CfuZoxPt.js +4 -0
- package/dist/verilog-CySTkzw_.js +4 -0
- package/dist/vhdl-Dvcd8KHW.js +4 -0
- package/dist/webidl-tbJt7sKk.js +4 -0
- package/dist/xquery-DJQVztyc.js +4 -0
- package/dist/{xychartDiagram-6GGTOJPD-BJRRi5HC.js → xychartDiagram-6GGTOJPD-njc-naaw.js} +24 -24
- package/dist/yacas-BbgBReEH.js +4 -0
- package/dist/z80-DPyb8VGz.js +4 -0
- package/dist/{zod-UPQf9SGn.js → zod-mAEs2ITo.js} +71 -81
- package/package.json +21 -17
- package/src/__mocks__/requests.ts +2 -0
- package/src/components/app-config/ai-config.tsx +1 -3
- package/src/components/app-config/common.tsx +14 -0
- package/src/components/app-config/data-form.tsx +282 -0
- package/src/components/app-config/user-config-form.tsx +36 -219
- package/src/components/chat/acp/__tests__/state.test.ts +75 -2
- package/src/components/chat/acp/agent-panel.tsx +143 -89
- package/src/components/chat/acp/blocks.tsx +77 -34
- package/src/components/chat/acp/state.ts +5 -1
- package/src/components/chat/acp/thread.tsx +12 -1
- package/src/components/chat/chat-panel.tsx +38 -5
- package/src/components/chat/chat-utils.ts +16 -5
- package/src/components/chat/markdown-renderer.css +1 -0
- package/src/components/chat/tool-call-accordion.tsx +7 -1
- package/src/components/data-table/__tests__/header-items.test.tsx +117 -0
- package/src/components/data-table/charts/__tests__/storage.test.ts +12 -6
- package/src/components/data-table/charts/charts.tsx +8 -2
- package/src/components/data-table/charts/storage.ts +1 -1
- package/src/components/data-table/column-header.tsx +4 -2
- package/src/components/data-table/column-wrapping/feature.ts +2 -0
- package/src/components/data-table/columns.tsx +12 -3
- package/src/components/data-table/data-table.tsx +7 -2
- package/src/components/data-table/header-items.tsx +63 -10
- package/src/components/data-table/renderers.tsx +3 -2
- package/src/components/dependency-graph/custom-node.tsx +11 -11
- package/src/components/dependency-graph/elements.ts +9 -4
- package/src/components/dependency-graph/panels.tsx +6 -4
- package/src/components/editor/Output.tsx +34 -25
- package/src/components/editor/actions/useCellActionButton.tsx +20 -4
- package/src/components/editor/ai/add-cell-with-ai.tsx +17 -3
- package/src/components/editor/ai/ai-completion-editor.tsx +203 -26
- package/src/components/editor/ai/completion-handlers.tsx +126 -23
- package/src/components/editor/cell/StagedAICell.tsx +81 -12
- package/src/components/editor/cell/code/cell-editor.tsx +6 -2
- package/src/components/editor/cell/useRunCells.ts +62 -30
- package/src/components/editor/chrome/panels/cache-panel.tsx +216 -0
- package/src/components/editor/chrome/panels/empty-state.tsx +3 -1
- package/src/components/editor/chrome/panels/packages-panel.tsx +1 -1
- package/src/components/editor/chrome/state.ts +1 -1
- package/src/components/editor/chrome/types.ts +66 -22
- package/src/components/editor/chrome/wrapper/app-chrome.tsx +4 -0
- package/src/components/editor/chrome/wrapper/minimap.tsx +2 -0
- package/src/components/editor/chrome/wrapper/pending-ai-cells.tsx +108 -0
- package/src/components/editor/chrome/wrapper/sidebar.tsx +1 -1
- package/src/components/editor/code/readonly-diff.tsx +49 -0
- package/src/components/editor/columns/storage.ts +1 -1
- package/src/components/editor/errors/auto-fix.tsx +138 -32
- package/src/components/editor/errors/fix-mode.ts +20 -0
- package/src/components/editor/inputs/Inputs.styles.ts +1 -1
- package/src/components/editor/navigation/__tests__/clipboard.test.ts +0 -5
- package/src/components/editor/navigation/clipboard.ts +2 -1
- package/src/components/editor/notebook-cell.tsx +20 -7
- package/src/components/editor/output/CalloutOutput.tsx +1 -1
- package/src/components/editor/output/ConsoleOutput.tsx +27 -33
- package/src/components/editor/output/HtmlOutput.tsx +3 -2
- package/src/components/editor/output/JsonOutput.tsx +15 -1
- package/src/components/editor/output/MarimoTracebackOutput.tsx +69 -52
- package/src/components/editor/output/__tests__/HtmlOutput.test.tsx +134 -0
- package/src/components/editor/output/__tests__/json-output.test.ts +43 -0
- package/src/components/editor/output/__tests__/traceback.test.tsx +8 -1
- package/src/components/editor/output/useWrapText.ts +6 -1
- package/src/components/editor/package-alert.tsx +37 -32
- package/src/components/editor/renderers/vertical-layout/vertical-layout-wrapper.tsx +5 -2
- package/src/components/forms/__tests__/form-utils.test.ts +4 -2
- package/src/components/home/state.ts +3 -2
- package/src/components/icons/copy-icon.tsx +11 -5
- package/src/components/scratchpad/scratchpad-history.ts +6 -1
- package/src/components/shortcuts/renderShortcut.tsx +3 -1
- package/src/components/slides/slides-component.tsx +25 -21
- package/src/components/ui/button.tsx +2 -0
- package/src/components/ui/confirmation-button.tsx +85 -0
- package/src/components/ui/context-menu.tsx +14 -4
- package/src/components/ui/dropdown-menu.tsx +14 -4
- package/src/components/ui/fullscreen.tsx +115 -1
- package/src/components/ui/popover.tsx +11 -3
- package/src/components/ui/range-slider.tsx +1 -1
- package/src/components/ui/select.tsx +7 -3
- package/src/components/ui/slider.tsx +1 -1
- package/src/components/ui/switch.tsx +2 -0
- package/src/components/ui/tooltip.tsx +10 -3
- package/src/core/ai/__tests__/staged-cells.test.ts +189 -64
- package/src/core/ai/config.ts +6 -2
- package/src/core/ai/context/providers/__tests__/__snapshots__/cell-output.test.ts.snap +17 -0
- package/src/core/ai/context/providers/__tests__/cell-output.test.ts +194 -10
- package/src/core/ai/context/providers/__tests__/datasource.test.ts +9 -1
- package/src/core/ai/context/providers/cell-output.ts +170 -112
- package/src/core/ai/context/providers/datasource.ts +25 -1
- package/src/core/ai/context/providers/tables.ts +2 -2
- package/src/core/ai/staged-cells.ts +32 -16
- package/src/core/ai/state.ts +8 -4
- package/src/core/ai/tools/__tests__/edit-notebook-tool.test.ts +556 -0
- package/src/core/ai/tools/__tests__/registry.test.ts +41 -8
- package/src/core/ai/tools/__tests__/run-cells-tool.test.ts +450 -0
- package/src/core/ai/tools/__tests__/utils.test.ts +87 -0
- package/src/core/ai/tools/base.ts +109 -6
- package/src/core/ai/tools/edit-notebook-tool.ts +239 -0
- package/src/core/ai/tools/registry.ts +48 -15
- package/src/core/ai/tools/run-cells-tool.ts +233 -0
- package/src/core/ai/tools/sample-tool.ts +53 -15
- package/src/core/ai/tools/utils.ts +23 -0
- package/src/core/cache/requests.ts +5 -0
- package/src/core/cells/__tests__/cells.test.ts +19 -1
- package/src/core/cells/__tests__/session.test.ts +20 -3
- package/src/core/cells/cells.ts +13 -8
- package/src/core/cells/session.ts +1 -1
- package/src/core/codemirror/__tests__/__snapshots__/setup.test.ts.snap +2 -0
- package/src/core/codemirror/__tests__/replace-editor-content.test.ts +336 -0
- package/src/core/codemirror/ai/resources.ts +13 -2
- package/src/core/codemirror/copilot/state.ts +4 -2
- package/src/core/codemirror/find-replace/navigate.ts +2 -2
- package/src/core/codemirror/format.ts +2 -9
- package/src/core/codemirror/language/__tests__/extension.test.ts +10 -2
- package/src/core/codemirror/language/__tests__/sql.test.ts +24 -6
- package/src/core/codemirror/language/languages/markdown.ts +16 -153
- package/src/core/codemirror/language/languages/python.ts +13 -10
- package/src/core/codemirror/language/languages/sql/sql-mode.ts +6 -1
- package/src/core/codemirror/language/languages/sql/sql.ts +43 -306
- package/src/core/codemirror/language/panel/markdown.tsx +2 -1
- package/src/core/codemirror/language/panel/panel.tsx +2 -7
- package/src/core/codemirror/language/utils.ts +3 -8
- package/src/core/codemirror/lsp/__tests__/notebook-lsp.test.ts +21 -14
- package/src/core/codemirror/lsp/federated-lsp.ts +20 -9
- package/src/core/codemirror/lsp/notebook-lsp.ts +35 -29
- package/src/core/codemirror/lsp/transports.ts +7 -13
- package/src/core/codemirror/lsp/types.ts +0 -13
- package/src/core/codemirror/replace-editor-content.ts +87 -0
- package/src/core/config/__tests__/config-schema.test.ts +3 -0
- package/src/core/config/config-schema.ts +12 -1
- package/src/core/config/feature-flag.tsx +2 -4
- package/src/core/errors/__tests__/errors.test.ts +1 -0
- package/src/core/errors/errors.ts +20 -6
- package/src/core/hotkeys/hotkeys.ts +12 -0
- package/src/core/islands/bridge.ts +2 -0
- package/src/core/islands/main.ts +4 -0
- package/src/core/kernel/messages.ts +1 -0
- package/src/core/lsp/__tests__/transport.test.ts +233 -0
- package/src/core/lsp/transport.ts +139 -0
- package/src/core/network/requests-network.ts +14 -0
- package/src/core/network/requests-static.ts +2 -0
- package/src/core/network/requests-toasting.ts +2 -0
- package/src/core/network/types.ts +5 -0
- package/src/core/rtc/state.ts +6 -1
- package/src/core/saving/save-component.tsx +43 -36
- package/src/core/vscode/is-in-vscode.ts +9 -0
- package/src/core/wasm/bridge.ts +2 -0
- package/src/core/wasm/store.ts +1 -1
- package/src/core/websocket/useMarimoWebSocket.tsx +8 -0
- package/src/css/app/Cell.css +31 -0
- package/src/css/app/codemirror-completions.css +1 -1
- package/src/css/globals.css +5 -0
- package/src/custom.d.ts +2 -0
- package/src/hooks/useIframeCapabilities.ts +14 -0
- package/src/hooks/useLocalStorage.ts +1 -1
- package/src/plugins/core/RenderHTML.tsx +65 -5
- package/src/plugins/core/__test__/RenderHTML.test.ts +25 -23
- package/src/plugins/core/__test__/renderHTML-sanitization.test.tsx +131 -0
- package/src/plugins/core/__test__/sanitize.test.ts +465 -0
- package/src/plugins/core/registerReactComponent.tsx +19 -2
- package/src/plugins/core/sanitize.ts +76 -0
- package/src/plugins/impl/DataTablePlugin.tsx +20 -19
- package/src/plugins/impl/FileBrowserPlugin.tsx +1 -3
- package/src/plugins/impl/FileUploadPlugin.tsx +1 -3
- package/src/plugins/impl/__tests__/DateTimePickerPlugin.test.tsx +40 -1
- package/src/plugins/impl/__tests__/DropdownPlugin.test.tsx +6 -0
- package/src/plugins/impl/__tests__/MultiSelectPlugin.test.ts +8 -1
- package/src/plugins/impl/__tests__/NumberPlugin.test.tsx +3 -0
- package/src/plugins/impl/chat/ChatPlugin.tsx +1 -1
- package/src/plugins/impl/chat/chat-ui.tsx +17 -2
- package/src/plugins/impl/chat/types.ts +1 -1
- package/src/plugins/impl/data-frames/DataFramePlugin.tsx +7 -2
- package/src/plugins/impl/plotly/__tests__/parse-from-template.test.ts +17 -0
- package/src/plugins/impl/plotly/parse-from-template.ts +2 -1
- package/src/utils/__tests__/arrays.test.ts +42 -0
- package/src/utils/__tests__/capabilities.test.ts +453 -0
- package/src/utils/__tests__/formatting.test.ts +107 -0
- package/src/utils/__tests__/json-parser.test.ts +13 -0
- package/src/utils/__tests__/local-storage.test.ts +1 -1
- package/src/utils/__tests__/storage.test.ts +21 -21
- package/src/utils/arrays.ts +25 -0
- package/src/utils/capabilities.ts +114 -0
- package/src/utils/copy.ts +6 -0
- package/src/utils/formatting.ts +51 -0
- package/src/utils/json/json-parser.ts +28 -3
- package/src/utils/numbers.ts +2 -2
- package/src/utils/{storage.ts → storage/jotai.ts} +16 -4
- package/src/utils/storage/storage.ts +57 -0
- package/src/utils/{localStorage.ts → storage/typed.ts} +22 -12
- package/dist/any-language-editor-CVFQlioK.js +0 -156
- package/dist/apl-ChlaBfxB.js +0 -4
- package/dist/architecture-O4VJ6CD3-BVeaxUcM.js +0 -21
- package/dist/asciiarmor-CcJmm3l_.js +0 -4
- package/dist/asn1-ThRYxoBE.js +0 -4
- package/dist/assets/__vite-browser-external-Dv_SHu1h.js +0 -1
- package/dist/assets/worker-DVOR9oZG.js +0 -54
- package/dist/brainfuck-CEM0JgDn.js +0 -4
- package/dist/chunk-EXTU4WIE-DECT9AAK.js +0 -14
- package/dist/chunk-S3R3BYOJ-DMQ1yeyq.js +0 -386
- package/dist/classDiagram-KNZD7YFC-BG53O6Jt.js +0 -39
- package/dist/classDiagram-v2-RKCZMP56-BmKILsGU.js +0 -39
- package/dist/clojure-B7RHyE9t.js +0 -4
- package/dist/cmake-TeTMP4I5.js +0 -4
- package/dist/cobol-DI-mxUER.js +0 -4
- package/dist/coffeescript-DHUFLqWp.js +0 -4
- package/dist/commonlisp-SLiUrh1m.js +0 -4
- package/dist/crystal-B4fY1ZfJ.js +0 -4
- package/dist/css-Bdoq3TzK.js +0 -5
- package/dist/cypher-CBU182fp.js +0 -4
- package/dist/d-D8myDZeH.js +0 -4
- package/dist/data-grid-overlay-editor-qNmJk2x0.js +0 -135
- package/dist/diagram-QEK2KX5R-fu8Noi3H.js +0 -245
- package/dist/diff-DJF_UB7H.js +0 -4
- package/dist/dist-52-_pKoy.js +0 -6
- package/dist/dist-6DOMStFn.js +0 -6
- package/dist/dist-B334aW7p.js +0 -10
- package/dist/dist-BOI9lUz-.js +0 -12
- package/dist/dist-C06uhBzF.js +0 -6
- package/dist/dist-CGkpguCB.js +0 -6
- package/dist/dist-CrApzUED.js +0 -6
- package/dist/dist-Dp2GLdCl.js +0 -14
- package/dist/dist-WHFsbMDr.js +0 -6
- package/dist/dist-hyKcTPG9.js +0 -10
- package/dist/dtd-DY8q65lC.js +0 -4
- package/dist/dylan-CBLcjWCi.js +0 -4
- package/dist/ecl-BSXPNfOw.js +0 -4
- package/dist/eiffel-BJf0PQX-.js +0 -4
- package/dist/elm-DWQwPCZS.js +0 -4
- package/dist/erlang-BWBaGZ5e.js +0 -4
- package/dist/error-banner-OQIGTqFR.js +0 -1012
- package/dist/esm-BO9n_s6u.js +0 -26
- package/dist/factor-DT1-MBPl.js +0 -5
- package/dist/forth-D9GDt3FB.js +0 -4
- package/dist/fortran-DHkRhDWw.js +0 -4
- package/dist/gas-7lQEOM0H.js +0 -4
- package/dist/gherkin-BLLyroYi.js +0 -4
- package/dist/gitGraph-ZV4HHKMB-z2v_cInC.js +0 -21
- package/dist/groovy-C-wabwj0.js +0 -4
- package/dist/haskell-DaxVQ_d1.js +0 -4
- package/dist/haxe-C2yLoC7h.js +0 -5
- package/dist/idl-DQBP8i7k.js +0 -4
- package/dist/info-63CPKGFF-GS4w6pCB.js +0 -21
- package/dist/infoDiagram-STP46IZ2-DE9YYPFg.js +0 -44
- package/dist/javascript-DRwFV9r5.js +0 -5
- package/dist/jinja2-CNoIpVmN.js +0 -4
- package/dist/julia-DXDf-GhP.js +0 -4
- package/dist/livescript-S2uhJQx7.js +0 -4
- package/dist/lua-Bvgs0y2G.js +0 -4
- package/dist/mathematica-D2zqfwIg.js +0 -4
- package/dist/mbox-SBcPaDuZ.js +0 -4
- package/dist/mirc-hkQc7sVF.js +0 -4
- package/dist/mllike-DRWPBlr9.js +0 -6
- package/dist/modelica-CO2ROGlP.js +0 -4
- package/dist/mscgen-BpX61bO6.js +0 -6
- package/dist/mumps-BCnFeIn6.js +0 -4
- package/dist/nsis-BaTOxlD1.js +0 -5
- package/dist/ntriples-zEo5BWjr.js +0 -4
- package/dist/octave-BE0RnCM9.js +0 -4
- package/dist/oz-C4_2Ttul.js +0 -4
- package/dist/packet-HUATNLJX-CjHqJIqk.js +0 -21
- package/dist/pascal-Q3jJucpw.js +0 -4
- package/dist/perl-DkXZIWHF.js +0 -4
- package/dist/pie-WTHONI2E-D67gLWtR.js +0 -21
- package/dist/pig-DCgEHdsu.js +0 -4
- package/dist/powershell-3rK_nRRJ.js +0 -236
- package/dist/powershell-Eo2-7MoM.js +0 -4
- package/dist/properties-C0IOX8WR.js +0 -4
- package/dist/protobuf--lGQUSRO.js +0 -4
- package/dist/pug-Cf8AQHMJ.js +0 -5
- package/dist/puppet-D7Z3dTJn.js +0 -4
- package/dist/python-FHIx_i8Y.js +0 -5
- package/dist/q-B7UA1feM.js +0 -4
- package/dist/r-Cc9R2A7N.js +0 -4
- package/dist/radar-NJJJXTRR-C-AZP_Te.js +0 -21
- package/dist/rpm-vhJNlrQ6.js +0 -5
- package/dist/ruby-CVluPY0M.js +0 -4
- package/dist/sas-A8DL8oy3.js +0 -4
- package/dist/scheme-6xHHcSXC.js +0 -4
- package/dist/shell-DHN-e5rf.js +0 -4
- package/dist/sieve-BuQwLY02.js +0 -4
- package/dist/smalltalk-BA4HPg2H.js +0 -4
- package/dist/sparql-Bf4yCuy3.js +0 -4
- package/dist/stateDiagram-v2-UMBNRL4Z-C_0FUzzk.js +0 -38
- package/dist/stex-D-I1cYeE.js +0 -5
- package/dist/stylus-BMeped2l.js +0 -4
- package/dist/swift-lwEdlZoC.js +0 -4
- package/dist/tcl-B03ipeqv.js +0 -4
- package/dist/textile-Cy55fYGC.js +0 -4
- package/dist/toml-BLgrVtfu.js +0 -4
- package/dist/treemap-75Q7IDZK-DTvwfpWt.js +0 -21
- package/dist/troff-g6EjN2O2.js +0 -4
- package/dist/ttcn-Dzvba8jK.js +0 -4
- package/dist/ttcn-cfg-CadG0p1K.js +0 -4
- package/dist/turtle-DkXAMWo9.js +0 -4
- package/dist/vb-C5dCiel8.js +0 -4
- package/dist/vbscript-I4bDEQln.js +0 -4
- package/dist/velocity-mt0fDwFH.js +0 -4
- package/dist/verilog-Dxq3KJkc.js +0 -4
- package/dist/vhdl-Km0QUlV-.js +0 -4
- package/dist/webidl-B3lJ2MRL.js +0 -4
- package/dist/xquery-CcIxNPEe.js +0 -4
- package/dist/yacas-oMa-f-tN.js +0 -4
- package/dist/z80-D03Nvn6l.js +0 -4
- package/src/core/codemirror/language/__tests__/ast.test.ts +0 -124
- package/src/core/codemirror/language/utils/ast.ts +0 -84
- package/src/core/codemirror/language/utils/quotes.ts +0 -18
- /package/dist/{_arrayReduce-CVwxyrBP.js → _arrayReduce-Cd9xQjbl.js} +0 -0
- /package/dist/{_baseSlice-OgpvpOOJ.js → _baseSlice-CE9WsQZm.js} +0 -0
- /package/dist/{_hasUnicode-BgIggCqE.js → _hasUnicode-DkEebvtD.js} +0 -0
- /package/dist/{apl-DZqo8Elt.js → apl-aGhy11IM.js} +0 -0
- /package/dist/{array-aAxy08hN.js → array-DYSXIreg.js} +0 -0
- /package/dist/{asciiarmor-DTzHAIeX.js → asciiarmor-DJKJ3Gkn.js} +0 -0
- /package/dist/{asn1-DrAXKsZH.js → asn1-C6f5IeNs.js} +0 -0
- /package/dist/{asterisk-oF4U3h48.js → asterisk-DB1poX9_.js} +0 -0
- /package/dist/{brainfuck-BYgLey30.js → brainfuck-Ch9vjun0.js} +0 -0
- /package/dist/{chunk-57QY23SG-0TxCfmy_.js → chunk-57QY23SG-BpXU7ph4.js} +0 -0
- /package/dist/{clojure-Bs2M3OUY.js → clojure-B_lpr3zt.js} +0 -0
- /package/dist/{cmake-DpI8vxJN.js → cmake-DaocNF4I.js} +0 -0
- /package/dist/{cobol-BQyrWo72.js → cobol-suTPtt7c.js} +0 -0
- /package/dist/{coffeescript-9ke9UHmw.js → coffeescript-CPLIvtqJ.js} +0 -0
- /package/dist/{colors-Cr_mZ2aH.js → colors-BXlG8Lmz.js} +0 -0
- /package/dist/{common-keywords-BzgeAvH1.js → common-keywords-Bhll7O3b.js} +0 -0
- /package/dist/{commonlisp-DghUdrUH.js → commonlisp-BqM3qFK7.js} +0 -0
- /package/dist/{crystal-DEf_SInh.js → crystal-AsSFu4ke.js} +0 -0
- /package/dist/{css-BzTU9lNO.js → css-Df7Sdeyh.js} +0 -0
- /package/dist/{cypher-a2v0c11S.js → cypher-CaVKL6Gu.js} +0 -0
- /package/dist/{d-SAswny-M.js → d-DCGWK7NQ.js} +0 -0
- /package/dist/{defaultLocale-BAgEOGks.js → defaultLocale-CYgZlqDF.js} +0 -0
- /package/dist/{defaultLocale-471SYAPk.js → defaultLocale-Cto8YOmX.js} +0 -0
- /package/dist/{diff-OJ-xLXcG.js → diff-CsxOM4Tr.js} +0 -0
- /package/dist/{dist-CK8Gj3GX.js → dist-C76MUPD3.js} +0 -0
- /package/dist/{dtd-BsUf-rer.js → dtd-Dwr0Jmks.js} +0 -0
- /package/dist/{duckdb-keywords-B0NOra5o.js → duckdb-keywords-7wAWf848.js} +0 -0
- /package/dist/{dylan-C0ZYngjn.js → dylan-A7-ZBSey.js} +0 -0
- /package/dist/{ebnf-DF1xx0b_.js → ebnf-9_SaGDUz.js} +0 -0
- /package/dist/{ecl-Bsuvoouq.js → ecl-BzJVIQDc.js} +0 -0
- /package/dist/{eiffel-DgfSpLi-.js → eiffel-CO9eC_Op.js} +0 -0
- /package/dist/{elm-GNxDj-5E.js → elm-CVAWj8SB.js} +0 -0
- /package/dist/{emotion-is-prop-valid.esm-BHMWayAG.js → emotion-is-prop-valid.esm-C3Yi5GQt.js} +0 -0
- /package/dist/{erlang-Ds3uY1kL.js → erlang-DWbZP546.js} +0 -0
- /package/dist/{fcl-CqBgSioc.js → fcl-CM9t2iay.js} +0 -0
- /package/dist/{forth-JCaLysGk.js → forth-BTYqUuu3.js} +0 -0
- /package/dist/{fortran-Dc2AoKAl.js → fortran-DgAjHcCq.js} +0 -0
- /package/dist/{gas-Q4Uz82YW.js → gas-BjDSWPZd.js} +0 -0
- /package/dist/{gherkin-Dpxe49sQ.js → gherkin-ClRqqpKv.js} +0 -0
- /package/dist/{groovy-D8mTRCu6.js → groovy-BzNjnc8x.js} +0 -0
- /package/dist/{haskell-2_8cC4wY.js → haskell-DLdk34Jq.js} +0 -0
- /package/dist/{haxe-Bl9zkZlz.js → haxe-l6gaY_IS.js} +0 -0
- /package/dist/{http-DKCqY6yS.js → http-6Qg7z_h2.js} +0 -0
- /package/dist/{idl-Dn-HNfGW.js → idl-hlWT4D26.js} +0 -0
- /package/dist/{init-D6eDd7H0.js → init-tZ42Torz.js} +0 -0
- /package/dist/{jinja2-JjFiAGKk.js → jinja2-DI5k_Er3.js} +0 -0
- /package/dist/{julia-R5wne8eu.js → julia-BvDZDiIT.js} +0 -0
- /package/dist/{livescript-DSwokrYj.js → livescript-2YMQfkfI.js} +0 -0
- /package/dist/{lua-CgXfrp2-.js → lua-DIUrQRfA.js} +0 -0
- /package/dist/{main-Czi9-LVy.js → main-BMTpe7M0.js} +0 -0
- /package/dist/{math-C7wLpe9K.js → math-qsHyz2Eo.js} +0 -0
- /package/dist/{mathematica-BVli92MR.js → mathematica-Dqmg_BwL.js} +0 -0
- /package/dist/{mbox-CMFlocdS.js → mbox-Cng-P-F1.js} +0 -0
- /package/dist/{mirc-BkW04Zpc.js → mirc-CNDqOVhQ.js} +0 -0
- /package/dist/{mllike-DEjvHvNV.js → mllike-C1n2UDyX.js} +0 -0
- /package/dist/{modelica-CxDn-oje.js → modelica-QqQC2pFj.js} +0 -0
- /package/dist/{mscgen-D78wmE-w.js → mscgen-C3fl8uhp.js} +0 -0
- /package/dist/{mumps-Bi0IvPOV.js → mumps-BeCUbMej.js} +0 -0
- /package/dist/{nginx-DErPZFhX.js → nginx-ejv7DsBz.js} +0 -0
- /package/dist/{ntriples-Btyp6wRL.js → ntriples-CUgUpcma.js} +0 -0
- /package/dist/{octave-CZA6-2F8.js → octave-BD652tGl.js} +0 -0
- /package/dist/{oz-Bm6LSNfE.js → oz-DrRsFa0K.js} +0 -0
- /package/dist/{pascal-B4J6a9BH.js → pascal-hpcx9sVn.js} +0 -0
- /package/dist/{path-VDkDgx1I.js → path-Bbv2tLY1.js} +0 -0
- /package/dist/{perl-CzVqxS08.js → perl-DW8XHeFc.js} +0 -0
- /package/dist/{pig-Clh03cnn.js → pig-Cv7Nxbfo.js} +0 -0
- /package/dist/{prop-types-0wNc-99T.js → prop-types-Bd16OEUP.js} +0 -0
- /package/dist/{properties-D7ch1Wyb.js → properties-D-qJDXAM.js} +0 -0
- /package/dist/{protobuf-DrkdrMPK.js → protobuf-B48QZbd3.js} +0 -0
- /package/dist/{puppet-BtZG8zdO.js → puppet-15JDyiY2.js} +0 -0
- /package/dist/{python-B6FKOVIv.js → python-DWkQA94h.js} +0 -0
- /package/dist/{r-Dnvo5-96.js → r-dcNRe_Q8.js} +0 -0
- /package/dist/{range-PcytnUSJ.js → range-CQvYp_qE.js} +0 -0
- /package/dist/{rpm-B1DrgfnX.js → rpm-Djl3Dsf1.js} +0 -0
- /package/dist/{ruby-CelfUg17.js → ruby-Dd2CZTip.js} +0 -0
- /package/dist/{sas-DfSQFMWG.js → sas-DYF5_Iqu.js} +0 -0
- /package/dist/{scheme-BplhaWuO.js → scheme-YtWcji1H.js} +0 -0
- /package/dist/{shell-DqU5OS2c.js → shell-C3uC3Y0Z.js} +0 -0
- /package/dist/{sieve-BE4_IyGa.js → sieve-DHB17sQG.js} +0 -0
- /package/dist/{smalltalk-B_WPL8Nx.js → smalltalk-Y5v1Np3H.js} +0 -0
- /package/dist/{solr-DlJFg7H5.js → solr-DvRJLlRD.js} +0 -0
- /package/dist/{sparql-7XIlcOgW.js → sparql-BEt3GJwM.js} +0 -0
- /package/dist/{spreadsheet-BdZSVwVp.js → spreadsheet-Dp4B9_rc.js} +0 -0
- /package/dist/{sql-CCrq7lfJ.js → sql-DBsUs8nQ.js} +0 -0
- /package/dist/{stex-BiFc8QAu.js → stex-C6-x52ei.js} +0 -0
- /package/dist/{stylus-DlSH9xpH.js → stylus-DroA8via.js} +0 -0
- /package/dist/{swift-e3tMTZgJ.js → swift-DR0x1ESK.js} +0 -0
- /package/dist/{tcl-DfZMC20G.js → tcl-BeuTFc_c.js} +0 -0
- /package/dist/{textile-DaSeca5U.js → textile-C0ikhHN3.js} +0 -0
- /package/dist/{tiddlywiki-dfoiz8pS.js → tiddlywiki-C_2Nvsgu.js} +0 -0
- /package/dist/{tiki-yJbQzhma.js → tiki-CKQlhmQQ.js} +0 -0
- /package/dist/{treemap-BpgMKHv-.js → treemap-BYLUKIzA.js} +0 -0
- /package/dist/{troff-FN_FrCXR.js → troff-DkK0f2ZH.js} +0 -0
- /package/dist/{tslib.es6-DofFyd9S.js → tslib.es6-3ZL768sZ.js} +0 -0
- /package/dist/{ttcn-7_i4HlyB.js → ttcn-Bf8vrg-_.js} +0 -0
- /package/dist/{ttcn-cfg-B46AlBUV.js → ttcn-cfg-DjCKzd95.js} +0 -0
- /package/dist/{turtle-QQfeFveR.js → turtle-SSc84S9m.js} +0 -0
- /package/dist/{vb-DToPVnLa.js → vb-CQ6DC3cL.js} +0 -0
- /package/dist/{vbscript-CtsNaTz4.js → vbscript-Dw0gFssg.js} +0 -0
- /package/dist/{velocity-CAoNe6ns.js → velocity-BvJQyBmj.js} +0 -0
- /package/dist/{verilog-DrDOMiJq.js → verilog-CKGAvQjj.js} +0 -0
- /package/dist/{vhdl-DnO0OEPh.js → vhdl-B40_x6fM.js} +0 -0
- /package/dist/{webidl-Or6d1ZfA.js → webidl-Bi9hczCv.js} +0 -0
- /package/dist/{xquery-CEp_Mcpr.js → xquery-DwWUXvP3.js} +0 -0
- /package/dist/{yacas-DgnYrSlp.js → yacas-ClUs0mmH.js} +0 -0
- /package/dist/{z80-DlG_kyeB.js → z80-DPC4UGzR.js} +0 -0
|
@@ -0,0 +1,239 @@
|
|
|
1
|
+
/* Copyright 2024 Marimo. All rights reserved. */
|
|
2
|
+
|
|
3
|
+
import type { EditorView } from "@codemirror/view";
|
|
4
|
+
import { z } from "zod";
|
|
5
|
+
import { scrollAndHighlightCell } from "@/components/editor/links/cell-link";
|
|
6
|
+
import {
|
|
7
|
+
type CellPosition as NotebookCellPosition,
|
|
8
|
+
type NotebookState,
|
|
9
|
+
notebookAtom,
|
|
10
|
+
} from "@/core/cells/cells";
|
|
11
|
+
import { CellId } from "@/core/cells/ids";
|
|
12
|
+
import { updateEditorCodeFromPython } from "@/core/codemirror/language/utils";
|
|
13
|
+
import type { CellColumnId } from "@/utils/id-tree";
|
|
14
|
+
import { stagedAICellsAtom } from "../staged-cells";
|
|
15
|
+
import {
|
|
16
|
+
type AiTool,
|
|
17
|
+
type ToolDescription,
|
|
18
|
+
ToolExecutionError,
|
|
19
|
+
type ToolNotebookContext,
|
|
20
|
+
type ToolOutputBase,
|
|
21
|
+
toolOutputBaseSchema,
|
|
22
|
+
} from "./base";
|
|
23
|
+
import type { CopilotMode } from "./registry";
|
|
24
|
+
|
|
25
|
+
const description: ToolDescription = {
|
|
26
|
+
baseDescription:
|
|
27
|
+
"Perform editing operations on the current notebook. You should prefer to create new cells unless you need to edit existing cells. Call this tool multiple times to perform multiple edits. Separate code into logical individual cells to take advantage of the notebook's reactive execution model.",
|
|
28
|
+
prerequisites: [
|
|
29
|
+
"If you are updating existing cells, you need the cellIds. If they are not known, call the lightweight_cell_map_tool to find out.",
|
|
30
|
+
],
|
|
31
|
+
additionalInfo: `
|
|
32
|
+
Args:
|
|
33
|
+
edit (object): The editing operation to perform. Must be one of:
|
|
34
|
+
- update_cell: Update the code of an existing cell, pass CellId and the new code.
|
|
35
|
+
- add_cell: Add a new cell to the notebook. The position of the new cell is specified by the position argument.
|
|
36
|
+
Pass "end" to add the new cell at the end of the notebook.
|
|
37
|
+
Pass { cellId: cellId, before: true } to add the new cell before the specified cell. And before: false if after the specified cell.
|
|
38
|
+
Pass { type: "end", columnIndex: number } to add the new cell at the end of a specified column index. The column index is 0-based.
|
|
39
|
+
- delete_cell: Delete an existing cell, pass CellId. For deleting cells, the user needs to accept the deletion to actually delete the cell, so you may still see the cell in the notebook on subsequent edits which is fine.
|
|
40
|
+
|
|
41
|
+
For adding code, use the following guidelines:
|
|
42
|
+
- Markdown cells: use mo.md(f"""{content}""") function to insert content.
|
|
43
|
+
- SQL cells: use mo.sql(f"""{content}""") function to insert content. If a database engine is specified, use mo.sql(f"""{content}""", engine=engine) instead.
|
|
44
|
+
|
|
45
|
+
Returns:
|
|
46
|
+
- A result object containing standard tool metadata.`,
|
|
47
|
+
};
|
|
48
|
+
|
|
49
|
+
type CellPosition =
|
|
50
|
+
| { cellId: CellId; before: boolean }
|
|
51
|
+
| { type: "end"; columnIndex: number }
|
|
52
|
+
| "end";
|
|
53
|
+
|
|
54
|
+
const editNotebookSchema = z.object({
|
|
55
|
+
edit: z.discriminatedUnion("type", [
|
|
56
|
+
z.object({
|
|
57
|
+
type: z.literal("update_cell"),
|
|
58
|
+
cellId: z.string() as unknown as z.ZodType<CellId>,
|
|
59
|
+
code: z.string(),
|
|
60
|
+
}),
|
|
61
|
+
z.object({
|
|
62
|
+
type: z.literal("add_cell"),
|
|
63
|
+
position: z.union([
|
|
64
|
+
z.object({
|
|
65
|
+
cellId: z.string() as unknown as z.ZodType<CellId>,
|
|
66
|
+
before: z.boolean(),
|
|
67
|
+
}),
|
|
68
|
+
z.object({
|
|
69
|
+
type: z.literal("end"),
|
|
70
|
+
columnIndex: z.number(),
|
|
71
|
+
}),
|
|
72
|
+
z.literal("end"),
|
|
73
|
+
]) satisfies z.ZodType<CellPosition>,
|
|
74
|
+
code: z.string(),
|
|
75
|
+
}),
|
|
76
|
+
z.object({
|
|
77
|
+
type: z.literal("delete_cell"),
|
|
78
|
+
cellId: z.string() as unknown as z.ZodType<CellId>,
|
|
79
|
+
}),
|
|
80
|
+
]),
|
|
81
|
+
});
|
|
82
|
+
|
|
83
|
+
type EditNotebookInput = z.infer<typeof editNotebookSchema>;
|
|
84
|
+
type EditOperation = EditNotebookInput["edit"];
|
|
85
|
+
export type EditType = EditOperation["type"];
|
|
86
|
+
|
|
87
|
+
export class EditNotebookTool
|
|
88
|
+
implements AiTool<EditNotebookInput, ToolOutputBase>
|
|
89
|
+
{
|
|
90
|
+
readonly name = "edit_notebook_tool";
|
|
91
|
+
readonly description = description;
|
|
92
|
+
readonly schema = editNotebookSchema;
|
|
93
|
+
readonly outputSchema = toolOutputBaseSchema;
|
|
94
|
+
readonly mode: CopilotMode[] = ["agent"];
|
|
95
|
+
|
|
96
|
+
handler = async (
|
|
97
|
+
{ edit }: EditNotebookInput,
|
|
98
|
+
toolContext: ToolNotebookContext,
|
|
99
|
+
): Promise<ToolOutputBase> => {
|
|
100
|
+
const { addStagedCell, createNewCell, store } = toolContext;
|
|
101
|
+
|
|
102
|
+
switch (edit.type) {
|
|
103
|
+
case "update_cell": {
|
|
104
|
+
const { cellId, code } = edit;
|
|
105
|
+
|
|
106
|
+
const notebook = store.get(notebookAtom);
|
|
107
|
+
this.validateCellIdExists(cellId, notebook);
|
|
108
|
+
const editorView = this.getCellEditorView(cellId, notebook);
|
|
109
|
+
|
|
110
|
+
scrollAndHighlightCell(cellId);
|
|
111
|
+
|
|
112
|
+
// If previous code exists, we don't want to replace it, it means there is a new edit on top of the previous edit
|
|
113
|
+
// Keep the original code
|
|
114
|
+
const stagedCell = store.get(stagedAICellsAtom).get(cellId);
|
|
115
|
+
const currentCellCode = editorView.state.doc.toString();
|
|
116
|
+
const previousCode =
|
|
117
|
+
stagedCell?.type === "update_cell" ||
|
|
118
|
+
stagedCell?.type === "delete_cell"
|
|
119
|
+
? stagedCell.previousCode
|
|
120
|
+
: currentCellCode;
|
|
121
|
+
|
|
122
|
+
addStagedCell({
|
|
123
|
+
cellId,
|
|
124
|
+
edit: { type: "update_cell", previousCode: previousCode },
|
|
125
|
+
});
|
|
126
|
+
|
|
127
|
+
updateEditorCodeFromPython(editorView, code);
|
|
128
|
+
|
|
129
|
+
break;
|
|
130
|
+
}
|
|
131
|
+
case "add_cell": {
|
|
132
|
+
const { position, code } = edit;
|
|
133
|
+
|
|
134
|
+
// By default, add the new cell to the end of the notebook
|
|
135
|
+
let notebookPosition: NotebookCellPosition = "__end__";
|
|
136
|
+
let before = false;
|
|
137
|
+
const newCellId = CellId.create();
|
|
138
|
+
|
|
139
|
+
if (typeof position === "object") {
|
|
140
|
+
const notebook = store.get(notebookAtom);
|
|
141
|
+
if ("cellId" in position) {
|
|
142
|
+
this.validateCellIdExists(position.cellId, notebook);
|
|
143
|
+
notebookPosition = position.cellId;
|
|
144
|
+
before = position.before;
|
|
145
|
+
} else if ("columnIndex" in position) {
|
|
146
|
+
const columnId = this.getColumnId(position.columnIndex, notebook);
|
|
147
|
+
notebookPosition = { type: "__end__", columnId };
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
createNewCell({
|
|
152
|
+
cellId: notebookPosition,
|
|
153
|
+
before,
|
|
154
|
+
code,
|
|
155
|
+
newCellId,
|
|
156
|
+
});
|
|
157
|
+
|
|
158
|
+
addStagedCell({
|
|
159
|
+
cellId: newCellId,
|
|
160
|
+
edit: { type: "add_cell" },
|
|
161
|
+
});
|
|
162
|
+
|
|
163
|
+
// Scroll into view
|
|
164
|
+
scrollAndHighlightCell(newCellId);
|
|
165
|
+
|
|
166
|
+
break;
|
|
167
|
+
}
|
|
168
|
+
case "delete_cell": {
|
|
169
|
+
const { cellId } = edit;
|
|
170
|
+
|
|
171
|
+
const notebook = store.get(notebookAtom);
|
|
172
|
+
this.validateCellIdExists(cellId, notebook);
|
|
173
|
+
|
|
174
|
+
const editorView = this.getCellEditorView(cellId, notebook);
|
|
175
|
+
const currentCellCode = editorView.state.doc.toString();
|
|
176
|
+
|
|
177
|
+
// Add to staged AICells - don't actually delete the cell yet
|
|
178
|
+
addStagedCell({
|
|
179
|
+
cellId,
|
|
180
|
+
edit: { type: "delete_cell", previousCode: currentCellCode },
|
|
181
|
+
});
|
|
182
|
+
|
|
183
|
+
scrollAndHighlightCell(cellId);
|
|
184
|
+
break;
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
return {
|
|
188
|
+
status: "success",
|
|
189
|
+
next_steps: ["If you need to perform more edits, call this tool again."],
|
|
190
|
+
};
|
|
191
|
+
};
|
|
192
|
+
|
|
193
|
+
private validateCellIdExists(cellId: CellId, notebook: NotebookState) {
|
|
194
|
+
const cellIds = notebook.cellIds;
|
|
195
|
+
if (!cellIds.getColumns().some((column) => column.idSet.has(cellId))) {
|
|
196
|
+
throw new ToolExecutionError(
|
|
197
|
+
"Cell not found",
|
|
198
|
+
"CELL_NOT_FOUND",
|
|
199
|
+
false,
|
|
200
|
+
"Check which cells exist in the notebook",
|
|
201
|
+
);
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
private getColumnId(
|
|
206
|
+
columnIndex: number,
|
|
207
|
+
notebook: NotebookState,
|
|
208
|
+
): CellColumnId {
|
|
209
|
+
const cellIds = notebook.cellIds;
|
|
210
|
+
const columns = cellIds.getColumns();
|
|
211
|
+
|
|
212
|
+
if (columnIndex < 0 || columnIndex >= columns.length) {
|
|
213
|
+
throw new ToolExecutionError(
|
|
214
|
+
"Column index is out of range",
|
|
215
|
+
"COLUMN_INDEX_OUT_OF_RANGE",
|
|
216
|
+
true,
|
|
217
|
+
"Choose a column index between 0 and the number of columns in the notebook (0-based)",
|
|
218
|
+
);
|
|
219
|
+
}
|
|
220
|
+
return columns[columnIndex].id;
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
private getCellEditorView(
|
|
224
|
+
cellId: CellId,
|
|
225
|
+
notebook: NotebookState,
|
|
226
|
+
): EditorView {
|
|
227
|
+
const cellHandles = notebook.cellHandles;
|
|
228
|
+
const cellHandle = cellHandles[cellId].current;
|
|
229
|
+
if (!cellHandle?.editorView) {
|
|
230
|
+
throw new ToolExecutionError(
|
|
231
|
+
"Cell editor not found",
|
|
232
|
+
"CELL_EDITOR_NOT_FOUND",
|
|
233
|
+
false,
|
|
234
|
+
"Internal error, ask the user to report this error",
|
|
235
|
+
);
|
|
236
|
+
}
|
|
237
|
+
return cellHandle.editorView;
|
|
238
|
+
}
|
|
239
|
+
}
|
|
@@ -3,14 +3,26 @@
|
|
|
3
3
|
import type { components } from "@marimo-team/marimo-api";
|
|
4
4
|
import { Memoize } from "typescript-memoize";
|
|
5
5
|
import { type ZodObject, z } from "zod";
|
|
6
|
-
import
|
|
7
|
-
|
|
6
|
+
import {
|
|
7
|
+
type AiTool,
|
|
8
|
+
ToolExecutionError,
|
|
9
|
+
type ToolNotebookContext,
|
|
10
|
+
} from "./base";
|
|
11
|
+
import { EditNotebookTool } from "./edit-notebook-tool";
|
|
12
|
+
import { RunStaleCellsTool } from "./run-cells-tool";
|
|
13
|
+
import { formatToolDescription } from "./utils";
|
|
8
14
|
|
|
9
15
|
export type AnyZodObject = ZodObject<z.ZodRawShape>;
|
|
10
16
|
|
|
11
17
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
12
18
|
type StoredTool = AiTool<any, any>;
|
|
13
19
|
|
|
20
|
+
interface InvokeResult<TName> {
|
|
21
|
+
tool_name: TName;
|
|
22
|
+
result: unknown;
|
|
23
|
+
error: string | null;
|
|
24
|
+
}
|
|
25
|
+
|
|
14
26
|
/** should be the same as marimo/_config/config.py > CopilotMode */
|
|
15
27
|
|
|
16
28
|
type ToolDefinition = components["schemas"]["ToolDefinition"];
|
|
@@ -43,7 +55,8 @@ export class FrontendToolRegistry {
|
|
|
43
55
|
async invoke<TName extends string>(
|
|
44
56
|
toolName: TName,
|
|
45
57
|
rawArgs: unknown,
|
|
46
|
-
|
|
58
|
+
toolContext: ToolNotebookContext,
|
|
59
|
+
): Promise<InvokeResult<TName>> {
|
|
47
60
|
const tool = this.getToolOrThrow(toolName);
|
|
48
61
|
const handler = tool.handler;
|
|
49
62
|
const inputSchema = tool.schema;
|
|
@@ -59,7 +72,7 @@ export class FrontendToolRegistry {
|
|
|
59
72
|
const args = inputResponse.data;
|
|
60
73
|
|
|
61
74
|
// Call the handler
|
|
62
|
-
const rawOutput = await handler(args);
|
|
75
|
+
const rawOutput = await handler(args, toolContext);
|
|
63
76
|
|
|
64
77
|
// Parse output
|
|
65
78
|
const response = await outputSchema.safeParseAsync(rawOutput);
|
|
@@ -69,17 +82,37 @@ export class FrontendToolRegistry {
|
|
|
69
82
|
`Tool ${toolName} returned invalid output: ${strError}`,
|
|
70
83
|
);
|
|
71
84
|
}
|
|
72
|
-
const
|
|
73
|
-
return output;
|
|
74
|
-
} catch (error) {
|
|
85
|
+
const result = response.data;
|
|
75
86
|
return {
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
87
|
+
tool_name: toolName,
|
|
88
|
+
result,
|
|
89
|
+
error: null,
|
|
90
|
+
};
|
|
91
|
+
} catch (error) {
|
|
92
|
+
// Handle structured errors
|
|
93
|
+
if (error instanceof ToolExecutionError) {
|
|
94
|
+
return {
|
|
95
|
+
tool_name: toolName,
|
|
96
|
+
result: null,
|
|
97
|
+
error: error.toStructuredString(),
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
// Handle unknown/generic errors
|
|
102
|
+
const genericError = new ToolExecutionError(
|
|
103
|
+
error instanceof Error ? error.message : String(error),
|
|
104
|
+
"TOOL_ERROR",
|
|
105
|
+
false,
|
|
106
|
+
"Check the error message and try again with valid arguments.",
|
|
107
|
+
{
|
|
81
108
|
args: rawArgs,
|
|
109
|
+
errorType: error?.constructor?.name ?? typeof error,
|
|
82
110
|
},
|
|
111
|
+
);
|
|
112
|
+
return {
|
|
113
|
+
tool_name: toolName,
|
|
114
|
+
result: null,
|
|
115
|
+
error: genericError.toStructuredString(),
|
|
83
116
|
};
|
|
84
117
|
}
|
|
85
118
|
}
|
|
@@ -88,7 +121,7 @@ export class FrontendToolRegistry {
|
|
|
88
121
|
getToolSchemas(): FrontendToolDefinition[] {
|
|
89
122
|
return [...this.tools.values()].map((tool) => ({
|
|
90
123
|
name: tool.name,
|
|
91
|
-
description: tool.description,
|
|
124
|
+
description: formatToolDescription(tool.description),
|
|
92
125
|
parameters: z.toJSONSchema(tool.schema),
|
|
93
126
|
source: "frontend",
|
|
94
127
|
mode: tool.mode,
|
|
@@ -97,6 +130,6 @@ export class FrontendToolRegistry {
|
|
|
97
130
|
}
|
|
98
131
|
|
|
99
132
|
export const FRONTEND_TOOL_REGISTRY = new FrontendToolRegistry([
|
|
100
|
-
|
|
101
|
-
|
|
133
|
+
new EditNotebookTool(),
|
|
134
|
+
new RunStaleCellsTool(),
|
|
102
135
|
]);
|
|
@@ -0,0 +1,233 @@
|
|
|
1
|
+
/* Copyright 2024 Marimo. All rights reserved. */
|
|
2
|
+
|
|
3
|
+
import type { FileUIPart } from "ai";
|
|
4
|
+
import { z } from "zod";
|
|
5
|
+
import { runCells } from "@/components/editor/cell/useRunCells";
|
|
6
|
+
import { notebookAtom } from "@/core/cells/cells";
|
|
7
|
+
import type { CellId } from "@/core/cells/ids";
|
|
8
|
+
import { staleCellIds } from "@/core/cells/utils";
|
|
9
|
+
import { type JotaiStore, waitFor } from "@/core/state/jotai";
|
|
10
|
+
import {
|
|
11
|
+
type BaseOutput,
|
|
12
|
+
getCellContextData,
|
|
13
|
+
} from "../context/providers/cell-output";
|
|
14
|
+
import {
|
|
15
|
+
type AiTool,
|
|
16
|
+
type EmptyToolInput,
|
|
17
|
+
type ToolDescription,
|
|
18
|
+
type ToolNotebookContext,
|
|
19
|
+
type ToolOutputBase,
|
|
20
|
+
toolOutputBaseSchema,
|
|
21
|
+
} from "./base";
|
|
22
|
+
import type { CopilotMode } from "./registry";
|
|
23
|
+
|
|
24
|
+
interface CellOutput {
|
|
25
|
+
consoleOutput?: string;
|
|
26
|
+
// consoleAttachments?: FileUIPart[];
|
|
27
|
+
cellOutput?: string;
|
|
28
|
+
// cellAttachments?: FileUIPart[];
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
// Must use Record instead of Map because Map serializes to JSON as {}
|
|
32
|
+
interface RunStaleCellsOutput extends ToolOutputBase {
|
|
33
|
+
cellsToOutput?: Record<CellId, CellOutput | null>;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
const description: ToolDescription = {
|
|
37
|
+
baseDescription:
|
|
38
|
+
"Run cells in the current notebook that are stale. Stale cells are cells that have been edited or newly added. You can run this tool after editing the notebook or when requested. The output of the ran cells will be returned alongside metadata.",
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
const filePartSchema = z.object({
|
|
42
|
+
type: z.literal("file"),
|
|
43
|
+
url: z.string(),
|
|
44
|
+
mediaType: z.string(),
|
|
45
|
+
}) satisfies z.ZodType<FileUIPart>;
|
|
46
|
+
|
|
47
|
+
export class RunStaleCellsTool
|
|
48
|
+
implements AiTool<EmptyToolInput, RunStaleCellsOutput>
|
|
49
|
+
{
|
|
50
|
+
readonly name = "run_stale_cells_tool";
|
|
51
|
+
readonly description = description;
|
|
52
|
+
readonly schema = z.object({});
|
|
53
|
+
readonly outputSchema = toolOutputBaseSchema.extend({
|
|
54
|
+
cellsToOutput: z
|
|
55
|
+
.record(
|
|
56
|
+
z.string(),
|
|
57
|
+
z
|
|
58
|
+
.object({
|
|
59
|
+
consoleOutput: z.string().optional(),
|
|
60
|
+
cellOutput: z.string().optional(),
|
|
61
|
+
consoleAttachments: z.array(filePartSchema).optional(),
|
|
62
|
+
cellAttachments: z.array(filePartSchema).optional(),
|
|
63
|
+
})
|
|
64
|
+
.nullable(),
|
|
65
|
+
)
|
|
66
|
+
.optional(),
|
|
67
|
+
}) satisfies z.ZodType<RunStaleCellsOutput>;
|
|
68
|
+
readonly mode: CopilotMode[] = ["agent"];
|
|
69
|
+
|
|
70
|
+
handler = async (
|
|
71
|
+
_args: EmptyToolInput,
|
|
72
|
+
toolContext: ToolNotebookContext,
|
|
73
|
+
): Promise<RunStaleCellsOutput> => {
|
|
74
|
+
const { prepareForRun, sendRun, store } = toolContext;
|
|
75
|
+
|
|
76
|
+
const notebook = store.get(notebookAtom);
|
|
77
|
+
const staleCells = staleCellIds(notebook);
|
|
78
|
+
|
|
79
|
+
if (staleCells.length === 0) {
|
|
80
|
+
return {
|
|
81
|
+
status: "success",
|
|
82
|
+
message: "No stale cells found.",
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
await runCells({
|
|
87
|
+
cellIds: staleCells,
|
|
88
|
+
sendRun: sendRun,
|
|
89
|
+
prepareForRun,
|
|
90
|
+
notebook,
|
|
91
|
+
});
|
|
92
|
+
|
|
93
|
+
// Wait for all cells to finish executing
|
|
94
|
+
const allCellsFinished = await this.waitForCellsToFinish(store, staleCells);
|
|
95
|
+
if (!allCellsFinished) {
|
|
96
|
+
return {
|
|
97
|
+
status: "success",
|
|
98
|
+
message:
|
|
99
|
+
"No output was returned because some cells have not finished executing",
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
// Get notebook state after cells have finished
|
|
104
|
+
const updatedNotebook = store.get(notebookAtom);
|
|
105
|
+
|
|
106
|
+
const cellsToOutput = new Map<CellId, CellOutput | null>();
|
|
107
|
+
let resultMessage = "";
|
|
108
|
+
|
|
109
|
+
for (const cellId of staleCells) {
|
|
110
|
+
const cellContextData = getCellContextData(cellId, updatedNotebook, {
|
|
111
|
+
includeConsoleOutput: true,
|
|
112
|
+
});
|
|
113
|
+
|
|
114
|
+
let cellOutputString: string | undefined;
|
|
115
|
+
// let cellAttachments: FileUIPart[] | undefined;
|
|
116
|
+
let consoleOutputString: string | undefined;
|
|
117
|
+
// let consoleAttachments: FileUIPart[] | undefined;
|
|
118
|
+
|
|
119
|
+
const cellOutput = cellContextData.cellOutput;
|
|
120
|
+
const consoleOutputs = cellContextData.consoleOutputs;
|
|
121
|
+
if (!cellOutput && !consoleOutputs) {
|
|
122
|
+
// Set null to show no output
|
|
123
|
+
cellsToOutput.set(cellId, null);
|
|
124
|
+
continue;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
if (cellOutput) {
|
|
128
|
+
cellOutputString = this.formatOutputString(cellOutput);
|
|
129
|
+
// cellAttachments = await getAttachmentsForOutputs(
|
|
130
|
+
// [cellOutput],
|
|
131
|
+
// cellId,
|
|
132
|
+
// cellContextData.cellName,
|
|
133
|
+
// );
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
if (consoleOutputs) {
|
|
137
|
+
// consoleAttachments = await getAttachmentsForOutputs(
|
|
138
|
+
// consoleOutputs,
|
|
139
|
+
// cellId,
|
|
140
|
+
// cellContextData.cellName,
|
|
141
|
+
// );
|
|
142
|
+
consoleOutputString = consoleOutputs
|
|
143
|
+
.map((output) => this.formatOutputString(output))
|
|
144
|
+
.join("\n");
|
|
145
|
+
resultMessage +=
|
|
146
|
+
"Console output represents the stdout or stderr of the cell (eg. print statements).";
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
cellsToOutput.set(cellId, {
|
|
150
|
+
cellOutput: cellOutputString,
|
|
151
|
+
consoleOutput: consoleOutputString,
|
|
152
|
+
// cellAttachments: cellAttachments,
|
|
153
|
+
// consoleAttachments: consoleAttachments,
|
|
154
|
+
});
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
if (cellsToOutput.size === 0) {
|
|
158
|
+
return {
|
|
159
|
+
status: "success",
|
|
160
|
+
message: "Stale cells have been run. No output was returned.",
|
|
161
|
+
};
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
return {
|
|
165
|
+
status: "success",
|
|
166
|
+
cellsToOutput: Object.fromEntries(cellsToOutput),
|
|
167
|
+
message: resultMessage === "" ? undefined : resultMessage,
|
|
168
|
+
next_steps: [
|
|
169
|
+
"Review the output of the cells, if you need to make any changes, you can run this tool again, the CellId is the key of the result object if you want to edit the cell.",
|
|
170
|
+
],
|
|
171
|
+
};
|
|
172
|
+
};
|
|
173
|
+
|
|
174
|
+
private formatOutputString(cellOutput: BaseOutput): string {
|
|
175
|
+
let outputString = "";
|
|
176
|
+
const { outputType, processedContent, imageUrl, output } = cellOutput;
|
|
177
|
+
if (outputType === "text") {
|
|
178
|
+
outputString += "Output:\n";
|
|
179
|
+
if (processedContent) {
|
|
180
|
+
outputString += processedContent;
|
|
181
|
+
} else if (typeof output.data === "string") {
|
|
182
|
+
outputString += output.data;
|
|
183
|
+
} else {
|
|
184
|
+
outputString += JSON.stringify(output.data);
|
|
185
|
+
}
|
|
186
|
+
} else if (outputType === "media") {
|
|
187
|
+
outputString += `Media Output: Contains ${output.mimetype} content`;
|
|
188
|
+
if (imageUrl) {
|
|
189
|
+
outputString += `\nImage URL: ${imageUrl}`;
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
return outputString;
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
/**
|
|
196
|
+
* Wait for cells to finish executing (status becomes "idle")
|
|
197
|
+
* Returns true if all cells finished executing, false if the timeout was reached
|
|
198
|
+
*/
|
|
199
|
+
private async waitForCellsToFinish(
|
|
200
|
+
store: JotaiStore,
|
|
201
|
+
cellIds: CellId[],
|
|
202
|
+
timeout = 30_000,
|
|
203
|
+
): Promise<boolean> {
|
|
204
|
+
const checkAllFinished = (
|
|
205
|
+
notebook: ReturnType<typeof notebookAtom.read>,
|
|
206
|
+
) => {
|
|
207
|
+
return cellIds.every((cellId) => {
|
|
208
|
+
const cellRuntime = notebook.cellRuntime[cellId];
|
|
209
|
+
return (
|
|
210
|
+
cellRuntime?.status !== "running" && cellRuntime?.status !== "queued"
|
|
211
|
+
);
|
|
212
|
+
});
|
|
213
|
+
};
|
|
214
|
+
|
|
215
|
+
// If already finished, return immediately
|
|
216
|
+
if (checkAllFinished(store.get(notebookAtom))) {
|
|
217
|
+
return true;
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
// Wait for notebook state changes with timeout
|
|
221
|
+
try {
|
|
222
|
+
await Promise.race([
|
|
223
|
+
waitFor(notebookAtom, checkAllFinished),
|
|
224
|
+
new Promise<never>((_, reject) =>
|
|
225
|
+
setTimeout(() => reject(new Error("timeout")), timeout),
|
|
226
|
+
),
|
|
227
|
+
]);
|
|
228
|
+
return true;
|
|
229
|
+
} catch {
|
|
230
|
+
return false;
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
}
|
|
@@ -1,36 +1,74 @@
|
|
|
1
1
|
/* Copyright 2024 Marimo. All rights reserved. */
|
|
2
2
|
|
|
3
3
|
import { z } from "zod";
|
|
4
|
-
import
|
|
4
|
+
import {
|
|
5
|
+
type AiTool,
|
|
6
|
+
type ToolDescription,
|
|
7
|
+
ToolExecutionError,
|
|
8
|
+
type ToolOutputBase,
|
|
9
|
+
toolOutputBaseSchema,
|
|
10
|
+
} from "./base";
|
|
5
11
|
import type { CopilotMode } from "./registry";
|
|
6
12
|
|
|
7
|
-
const description =
|
|
8
|
-
Test frontend tool that returns a greeting message.
|
|
13
|
+
const description: ToolDescription = {
|
|
14
|
+
baseDescription: "Test frontend tool that returns a greeting message.",
|
|
15
|
+
additionalInfo: `
|
|
16
|
+
Args:
|
|
17
|
+
- name (string): The name to include in the greeting.
|
|
9
18
|
|
|
10
|
-
|
|
11
|
-
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
- { message: string } — The greeting message, e.g., "Hello: Alice".
|
|
15
|
-
`;
|
|
19
|
+
Returns:
|
|
20
|
+
- Output with data containing the greeting message.
|
|
21
|
+
`,
|
|
22
|
+
};
|
|
16
23
|
|
|
17
24
|
interface Input {
|
|
18
25
|
name: string;
|
|
19
26
|
}
|
|
20
27
|
|
|
21
|
-
interface
|
|
22
|
-
|
|
28
|
+
interface GreetingData {
|
|
29
|
+
greeting: string;
|
|
30
|
+
timestamp: string;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
interface Output extends ToolOutputBase {
|
|
34
|
+
data: GreetingData;
|
|
23
35
|
}
|
|
24
36
|
|
|
25
|
-
/** A sample frontend tool that
|
|
37
|
+
/** A sample frontend tool that demonstrates real tool output structure */
|
|
26
38
|
export class TestFrontendTool implements AiTool<Input, Output> {
|
|
27
39
|
readonly name = "test_frontend_tool";
|
|
28
40
|
readonly description = description;
|
|
29
41
|
readonly schema = z.object({ name: z.string() });
|
|
30
|
-
readonly outputSchema =
|
|
42
|
+
readonly outputSchema = toolOutputBaseSchema.extend({
|
|
43
|
+
data: z.object({
|
|
44
|
+
greeting: z.string(),
|
|
45
|
+
timestamp: z.string(),
|
|
46
|
+
}),
|
|
47
|
+
});
|
|
31
48
|
readonly mode: CopilotMode[] = ["ask"];
|
|
32
49
|
|
|
33
|
-
async handler({ name }: Input) {
|
|
34
|
-
|
|
50
|
+
async handler({ name }: Input): Promise<Output> {
|
|
51
|
+
// Example: Validate input and throw ToolExecutionError on invalid data
|
|
52
|
+
if (!name.trim()) {
|
|
53
|
+
throw new ToolExecutionError(
|
|
54
|
+
"Name cannot be empty",
|
|
55
|
+
"INVALID_INPUT",
|
|
56
|
+
false,
|
|
57
|
+
"Please provide a non-empty name",
|
|
58
|
+
{ field: "name", received: name },
|
|
59
|
+
);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
return {
|
|
63
|
+
status: "success",
|
|
64
|
+
data: {
|
|
65
|
+
greeting: `Hello: ${name}`,
|
|
66
|
+
timestamp: new Date().toISOString(),
|
|
67
|
+
},
|
|
68
|
+
next_steps: [
|
|
69
|
+
"You can now proceed with your next task",
|
|
70
|
+
"Try calling another tool if needed",
|
|
71
|
+
],
|
|
72
|
+
};
|
|
35
73
|
}
|
|
36
74
|
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/* Copyright 2024 Marimo. All rights reserved. */
|
|
2
|
+
|
|
3
|
+
import type { ToolDescription } from "./base";
|
|
4
|
+
|
|
5
|
+
export function formatToolDescription(description: ToolDescription): string {
|
|
6
|
+
let result = description.baseDescription;
|
|
7
|
+
if (description.whenToUse) {
|
|
8
|
+
result += `\n\n## When to use:\n- ${description.whenToUse.join("\n- ")}`;
|
|
9
|
+
}
|
|
10
|
+
if (description.avoidIf) {
|
|
11
|
+
result += `\n\n## Avoid if:\n- ${description.avoidIf.join("\n- ")}`;
|
|
12
|
+
}
|
|
13
|
+
if (description.prerequisites) {
|
|
14
|
+
result += `\n\n## Prerequisites:\n- ${description.prerequisites.join("\n- ")}`;
|
|
15
|
+
}
|
|
16
|
+
if (description.sideEffects) {
|
|
17
|
+
result += `\n\n## Side effects:\n- ${description.sideEffects.join("\n- ")}`;
|
|
18
|
+
}
|
|
19
|
+
if (description.additionalInfo) {
|
|
20
|
+
result += `\n\n## Additional info:\n- ${description.additionalInfo}`;
|
|
21
|
+
}
|
|
22
|
+
return result;
|
|
23
|
+
}
|