@marimo-team/islands 0.17.0 → 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-blsKUrtN.js → Combination-De9yoNY5.js} +132 -69
- package/dist/{ConnectedDataExplorerComponent-DJEUH6Bb.js → ConnectedDataExplorerComponent-DuvpJOKp.js} +45 -44
- package/dist/{ImageComparisonComponent-D4Tv9QzJ.js → ImageComparisonComponent--etUl2pp.js} +2 -2
- package/dist/{_baseIsEqual-CN4oFUZ4.js → _baseIsEqual-BFlyFUxC.js} +1 -1
- package/dist/{_basePickBy-CzSvE_-f.js → _basePickBy-gCCvtjgp.js} +3 -3
- package/dist/{_baseProperty-DbbUiyUD.js → _baseProperty-BuqBC0Ie.js} +5 -5
- package/dist/{_baseUniq-DwoC-LVO.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-CoBORy6u.js → architectureDiagram-W76B3OCA-CrK99pJi.js} +38 -37
- 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-vPn7gxWj.js → worker-B6tH8gPO.js} +3 -3
- package/dist/{blockDiagram-QIGZ2CNN-0yzoLIar.js → blockDiagram-QIGZ2CNN-BJOEyO6w.js} +47 -46
- package/dist/brainfuck-ClvDI1dq.js +4 -0
- package/dist/{button-DcnBVpVa.js → button-ADXOb_gX.js} +27 -27
- package/dist/{c4Diagram-FPNF74CW-CKsIA_DD.js → c4Diagram-FPNF74CW-7Pz_X9wF.js} +12 -11
- package/dist/{channel-3LVvQZcD.js → channel-X-wRUxX6.js} +1 -1
- package/dist/{check-D7ifz5op.js → check-COlaG7Ss.js} +1 -1
- package/dist/{chunk-3AY6CYHV-B2C-aVc3.js → chunk-3AY6CYHV-BQH2fFpA.js} +10 -10
- package/dist/{chunk-4BX2VUAB-DEd4VI9L.js → chunk-4BX2VUAB-D-QtDCKM.js} +1 -1
- package/dist/{chunk-4KMFLZZN-DnvP3O4K.js → chunk-4KMFLZZN-BirZvvJS.js} +13 -13
- package/dist/{chunk-55IACEB6-BcCzwOOl.js → chunk-55IACEB6-DjtPYZKs.js} +1 -1
- package/dist/{chunk-6OXUPJBA-eNAAfJ3Q.js → chunk-6OXUPJBA-CTnnqlzw.js} +7 -7
- package/dist/{chunk-7GE3RBXV-CSAeQvLz.js → chunk-7GE3RBXV-CT47hCrL.js} +1 -1
- package/dist/{chunk-ABZYJK2D-CZcb_1iM.js → chunk-ABZYJK2D-B6ZsU6SR.js} +484 -1039
- package/dist/{chunk-BN7GFLIU-pBc5O5Rh.js → chunk-BN7GFLIU-DYWEsrG4.js} +1 -1
- package/dist/{chunk-CVBHYZKI-CivHZg9P.js → chunk-CVBHYZKI-BuzDGXz0.js} +1 -1
- package/dist/{chunk-CXMOBAN2-Dd0E6qb0.js → chunk-CXMOBAN2-Bas2S5w1.js} +6 -6
- package/dist/{chunk-EXTU4WIE-GQ2ZWfJo.js → chunk-EXTU4WIE-DXwNSukz.js} +2 -2
- package/dist/{chunk-FMBD7UC4-C6YcisV6.js → chunk-FMBD7UC4-CYKEpuPr.js} +1 -1
- package/dist/{chunk-JA3XYJ7Z-DYeQaT57.js → chunk-JA3XYJ7Z-DcxfkcDC.js} +4 -4
- package/dist/{chunk-JEIROHC2-B-EZMP4V.js → chunk-JEIROHC2-C01ZIcIG.js} +1 -1
- package/dist/{chunk-K7UQS3LO-DENzlS-M.js → chunk-K7UQS3LO-CmbT97MV.js} +7 -7
- package/dist/{chunk-KMC2YHZD-SckhHdEh.js → chunk-KMC2YHZD-D64m-1E1.js} +1 -1
- package/dist/{chunk-QN33PNHL-Cjq5b604.js → chunk-QN33PNHL-DjB0j8Dr.js} +2 -2
- package/dist/{chunk-QYVHNE3D-CNUuivie.js → chunk-QYVHNE3D-VA4W4oxG.js} +2 -2
- package/dist/{chunk-QZHKN3VN-DugEU_bA.js → chunk-QZHKN3VN-KT0fl3Em.js} +1 -1
- package/dist/{chunk-S3R3BYOJ-itCT6Vif.js → chunk-S3R3BYOJ-C5zmcMvn.js} +6 -6
- package/dist/{chunk-T44TD3VJ-BLdfTX8J.js → chunk-T44TD3VJ-BMOgu-Hk.js} +1 -1
- package/dist/{chunk-TVAH2DTR-BOnwF9d8.js → chunk-TVAH2DTR-eKm8SKnH.js} +6 -6
- package/dist/{chunk-TZMSLE5B-DGs66AlL.js → chunk-TZMSLE5B-CQxFRiI2.js} +3 -3
- package/dist/{chunk-WFRQ32O7-CPsipkmJ.js → chunk-WFRQ32O7-Dg51o277.js} +1 -1
- package/dist/{chunk-WFWHJNB7-Cmed18Pk.js → chunk-WFWHJNB7-DVLO98ge.js} +1 -1
- package/dist/{chunk-XRWGC2XP-DH5GDaY8.js → chunk-XRWGC2XP-UNFKdWQh.js} +1 -1
- package/dist/{chunk-ZPAFE4SF-DPDwaqZm.js → chunk-ZPAFE4SF-DbCSwfLK.js} +1 -1
- package/dist/classDiagram-KNZD7YFC-HUFFxNdk.js +40 -0
- package/dist/classDiagram-v2-RKCZMP56-Dw7Acmuf.js +40 -0
- package/dist/{click-outside-container-CL_FkgGY.js → click-outside-container-2BH589Bq.js} +2 -2
- package/dist/{clike-DYfRWWXk.js → clike-CytFO-kN.js} +1 -1
- package/dist/clojure-8GefCgPe.js +4 -0
- package/dist/{clone-Msbhmn2a.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-BCOEQoEQ.js → constants-BaCMVd12.js} +3 -3
- package/dist/{copy-BkZ8PkBM.js → copy-GNcK40wy.js} +2 -2
- package/dist/{cose-bilkent-S5V4N54A-BZnbwyVD.js → cose-bilkent-S5V4N54A-BnvuJG6Y.js} +3 -3
- package/dist/crystal-OdjZZ8bc.js +4 -0
- package/dist/css-DhTxMmL_.js +5 -0
- package/dist/cypher-CgN8E3YI.js +4 -0
- package/dist/d-g41sJcBC.js +4 -0
- package/dist/{dagre-5GWH7T2D-BGaiSZZO.js → dagre-5GWH7T2D-rn7tZYaQ.js} +37 -36
- package/dist/{dagre-pyfDIOWJ.js → dagre-Bghq6VKO.js} +13 -13
- package/dist/{data-grid-overlay-editor-867aBz0Y.js → data-grid-overlay-editor-B4_Caieu.js} +4 -4
- package/dist/{diagram-N5W7TBWH-CzLE0jZB.js → diagram-N5W7TBWH-lbF94o-g.js} +41 -40
- package/dist/{diagram-QEK2KX5R-AGS60xEZ.js → diagram-QEK2KX5R-CKBhSzsO.js} +35 -34
- package/dist/{diagram-S2PKOQOG-BxRoG6yW.js → diagram-S2PKOQOG-161_1f53.js} +35 -34
- package/dist/diff-ViRYYhhg.js +4 -0
- package/dist/{dist-PGgOcwbF.js → dist-28HYzERB.js} +2 -2
- package/dist/{dist-CfQHSIQC.js → dist-4dtbqf8A.js} +3 -3
- package/dist/{dist-CYhQCVru.js → dist-71jYYbWP.js} +2 -2
- package/dist/{dist-Cacac5HV.js → dist-B8Pbw5ln.js} +2 -2
- package/dist/{dist-z_iuDES7.js → dist-BAqp4Vtl.js} +1 -1
- package/dist/{dist-RwqAqkpG.js → dist-BBhmkni2.js} +1 -1
- package/dist/{dist-DMxl6Qbu.js → dist-BNRdMfJH.js} +2 -2
- package/dist/{dist-Doiq_KIP.js → dist-BSyYM1Gi.js} +6 -6
- package/dist/{dist-NUdHX0XE.js → dist-BYHiiJB-.js} +2 -2
- package/dist/{dist-B0YD1aXi.js → dist-B_wjJqqS.js} +2 -2
- package/dist/{dist-DBhEu3-F.js → dist-BaPjLM6s.js} +1 -1
- package/dist/dist-BfJO8Bm9.js +12 -0
- package/dist/{dist-BFkr6kAQ.js → dist-BqdQPWpQ.js} +2 -2
- package/dist/{dist-DlHkZUnY.js → dist-C2IEc8og.js} +5 -5
- package/dist/{dist-DS6nuHYK.js → dist-C9-uHBqC.js} +1 -1
- package/dist/{dist-B1Dv8Sdk.js → dist-CJb8EiFO.js} +3 -3
- package/dist/dist-CLuF3AtO.js +6 -0
- package/dist/{dist-CId4IPXu.js → dist-CNAkUyxv.js} +1 -1
- package/dist/{dist-RdxOJbBw.js → dist-CNvMOZu9.js} +2 -2
- package/dist/{dist-C7zhQ7K0.js → dist-CPNnKuPh.js} +1 -1
- package/dist/{dist-ivwkJchV.js → dist-CTIyD_KU.js} +3 -3
- package/dist/dist-CU04U4NL.js +10 -0
- package/dist/{dist-D-3fICwh.js → dist-CWh5ZwcC.js} +2 -2
- package/dist/{dist-d5NxvX2s.js → dist-CWqB4bg8.js} +3 -3
- package/dist/{dist-biZ846D9.js → dist-CtOeHDJp.js} +5 -5
- package/dist/{dist-BL2DSY0P.js → dist-Cw0F6l-7.js} +1 -1
- package/dist/{dist-wHVprCkn.js → dist-CwZcC4om.js} +1 -1
- package/dist/dist-DNUT6b47.js +6 -0
- package/dist/{dist-CZq5-ZyD.js → dist-Da046MhT.js} +1 -1
- package/dist/{dist-reo2kYlN.js → dist-DaTVdKJa.js} +2 -2
- package/dist/dist-DbAb2sY7.js +6 -0
- package/dist/dist-DiDFQ2Rk.js +6 -0
- package/dist/{dist-BpzZrRd6.js → dist-DlK420ke.js} +1 -1
- package/dist/{dist-CvyfRaIr.js → dist-Drf3cyIW.js} +3 -3
- package/dist/{dist-2Ne-33Xy.js → dist-DxESp2-T.js} +3 -3
- package/dist/{dist-CkvGMBAS.js → dist-DzJem5xc.js} +1 -1
- package/dist/{dist-y8uoXYaE.js → dist-O0zVziwn.js} +3 -3
- package/dist/dist-SNAyAOJ-.js +6 -0
- package/dist/{dist-BhVFggab.js → dist-_4cudra1.js} +3 -3
- package/dist/dist-cbW5xJNV.js +6 -0
- package/dist/dist-h8eGLSbK.js +10 -0
- package/dist/{dist-CBhnQKQ4.js → dist-xLN9qCAp.js} +3 -3
- package/dist/{dockerfile-sZMPcXVY.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-CTxzb-U8.js → erDiagram-AWTI2OKA-BU7Qig7n.js} +30 -29
- package/dist/erlang-pfp22AZM.js +4 -0
- package/dist/error-banner-BAWlXn49.js +1012 -0
- package/dist/{esm-CAWW9sum.js → esm-AtKNNGYO.js} +1 -1
- package/dist/esm-B2pocBPL.js +26 -0
- package/dist/{esm-BdiY4QsX.js → esm-Oo8OvZ6m.js} +110 -110
- package/dist/{esm-YY5zh7KV.js → esm-YVnxJqkD.js} +20 -20
- package/dist/{factor-CRFTmP_a.js → factor-BZnBK3CG.js} +1 -1
- package/dist/factor-CEn53jua.js +5 -0
- package/dist/{flowDiagram-PVAE7QVJ-Dck2hiJe.js → flowDiagram-PVAE7QVJ-JKJebWeY.js} +39 -38
- package/dist/{formats-BnqXUb1V.js → formats-DOEuF6TR.js} +8 -8
- package/dist/forth-CL8vu_y8.js +4 -0
- package/dist/fortran-DsmXkYtE.js +4 -0
- package/dist/{ganttDiagram-OWAHRB6G-AWzfzpup.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-GyNboWSV.js → gitGraphDiagram-NY62KEGX-VEJJBf5L.js} +35 -34
- package/dist/{glide-data-editor-DHuN8kQ8.js → glide-data-editor-Bne10icG.js} +87 -85
- package/dist/{graphlib-hb3zmtVD.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-Ct2T3e9O.js → hotkeys-DVxFjl2s.js} +12 -0
- 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/{isEmpty--odfYjh1.js → isEmpty-Do_v2sls.js} +2 -2
- package/dist/{isSymbol-Cb1f2HgO.js → isSymbol-CtkA8Y0a.js} +1 -1
- package/dist/javascript-QY2BGJeV.js +5 -0
- package/dist/jinja2-Czleq7Sk.js +4 -0
- package/dist/{journeyDiagram-BIP6EPQ6-TmXYCUbT.js → journeyDiagram-BIP6EPQ6-CsgEQgxh.js} +10 -9
- package/dist/julia-Dru3Qi0y.js +4 -0
- package/dist/{kanban-definition-6OIFK2YF-B6ozleHo.js → kanban-definition-6OIFK2YF-Bi8Ete2P.js} +42 -41
- package/dist/{katex-mPzRsXEy.js → katex-C-g3rKKt.js} +1 -1
- package/dist/{label-VVRKZmrP.js → label-BiVIU_wb.js} +245 -243
- package/dist/{line-C6-zz71o.js → line-B7-GoF1m.js} +3 -3
- package/dist/{linear-iebAbJVD.js → linear-DeGGALuc.js} +4 -4
- package/dist/livescript-Dxqi_HLT.js +4 -0
- package/dist/{loader-CM0VALo9.js → loader-BBqwtZWj.js} +3 -3
- package/dist/lua-ByH1cUQZ.js +4 -0
- package/dist/main.js +11785 -11529
- package/dist/mathematica-CWJIFuES.js +4 -0
- package/dist/mbox-qhPIGaUI.js +4 -0
- package/dist/{memoize-DYoRBSLn.js → memoize-D7eDkf3R.js} +1 -1
- package/dist/{merge-BjuR6j_w.js → merge-C_6cGM6o.js} +1 -1
- package/dist/{mermaid-YPPMBmhk.js → mermaid-BmtvsZ2m.js} +323 -321
- package/dist/{mermaid-parser.core-BLkyTSZj.js → mermaid-parser.core-geyG_6o0.js} +8 -8
- package/dist/{mhchem-Dw7wvXtr.js → mhchem-OhAaJ0fA.js} +1 -1
- package/dist/{min-B_i2ahn4.js → min-Dwa_NbP6.js} +7 -7
- package/dist/{mindmap-definition-Q6HEUPPD-F6-JnXwq.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/{now-CwRqw0nS.js → now-DumxsrcX.js} +1 -1
- package/dist/{nsis-BWJEeUyS.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-CeyruAX4.js → number-overlay-editor-D6r-48ka.js} +2 -2
- 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-C5dSQVCn.js → pieDiagram-ADFJNKIX-C3GvPNUL.js} +40 -39
- package/dist/pig-CLBjzQmc.js +4 -0
- package/dist/powershell-B_qvE33J.js +4 -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-PJh82u1M.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-CCVgEip7.js +4 -0
- package/dist/{quadrantDiagram-LMRXKWRM-DlahxNiy.js → quadrantDiagram-LMRXKWRM-DPXwGNVa.js} +8 -7
- package/dist/r-CIdR0Sfs.js +4 -0
- package/dist/radar-NJJJXTRR-0adgjw0u.js +21 -0
- package/dist/{range-DxfkexCE.js → range-CIbLpsrs.js} +3 -3
- package/dist/{react-plotly-D_IAfR8f.js → react-plotly-DYyvxcRD.js} +1 -1
- package/dist/{requirementDiagram-4UW4RH46-DTkinyvU.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-CsLnEnnq.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-BdEOR6SC.js → sequenceDiagram-C3RYC4MD-lbtovKTa.js} +14 -13
- package/dist/shell-D3eXGsHd.js +4 -0
- package/dist/sieve-BdwSFdWJ.js +4 -0
- package/dist/{slides-component-2bbal1YJ.js → slides-component-BoeQU7-s.js} +999 -998
- package/dist/smalltalk-BTYJquCm.js +4 -0
- package/dist/sparql-CYF0g4Cc.js +4 -0
- package/dist/{src-DZkaBUmt.js → src-BTqT1mA1.js} +1 -1
- package/dist/{stateDiagram-KXAO66HF-DQLH2jhP.js → stateDiagram-KXAO66HF-BmbR-Rol.js} +40 -39
- 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-CFkXkVrt.js → time-BB30r1tK.js} +4 -4
- package/dist/{timeline-definition-XQNQX7LJ-bToVq14i.js → timeline-definition-XQNQX7LJ-1mv5caPW.js} +16 -15
- package/dist/{toNumber-EFF1Z9T1.js → toNumber-D3Ystr3y.js} +2 -2
- package/dist/{toString-C2mCkasT.js → toString-CbuxCRDG.js} +2 -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-CRXV0KD5.js → types-BPohCsA7.js} +141 -210
- package/dist/{useAsyncData-uMVTsDI9.js → useAsyncData-DHBqeb9a.js} +3 -2
- package/dist/{useDateFormatter-Dcz7jstn.js → useDateFormatter-BkbjKw83.js} +9 -9
- package/dist/useIframeCapabilities-BEvvwlwt.js +46 -0
- package/dist/{useTheme-NbEx-ZNV.js → useTheme-CnMbo-iq.js} +23 -23
- package/dist/vb-CL7fRwRw.js +4 -0
- package/dist/vbscript-CR2xfxpw.js +4 -0
- package/dist/{vega-component-hegVmfuS.js → vega-component-BfFcXZxw.js} +40 -39
- package/dist/{vega-loader.browser.module-DcW8jnKp.js → vega-loader.browser.module-CFMtdrNw.js} +3 -3
- 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-C7Bhm_yt.js → xychartDiagram-6GGTOJPD-njc-naaw.js} +23 -22
- package/dist/yacas-BbgBReEH.js +4 -0
- package/dist/z80-DPyb8VGz.js +4 -0
- package/package.json +10 -6
- 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 -223
- 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 +5 -1
- package/src/components/chat/markdown-renderer.css +1 -0
- package/src/components/chat/tool-call-accordion.tsx +7 -1
- 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-wrapping/feature.ts +2 -0
- package/src/components/data-table/columns.tsx +10 -2
- package/src/components/data-table/renderers.tsx +3 -2
- package/src/components/editor/Output.tsx +28 -24
- 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 +79 -32
- package/src/components/editor/ai/completion-handlers.tsx +26 -7
- package/src/components/editor/cell/StagedAICell.tsx +81 -12
- package/src/components/editor/cell/code/cell-editor.tsx +2 -3
- package/src/components/editor/cell/useRunCells.ts +62 -30
- package/src/components/editor/chrome/panels/cache-panel.tsx +2 -2
- 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/wrapper/app-chrome.tsx +2 -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/fix-mode.ts +6 -1
- package/src/components/editor/inputs/Inputs.styles.ts +1 -1
- package/src/components/editor/output/CalloutOutput.tsx +1 -1
- package/src/components/editor/output/HtmlOutput.tsx +3 -2
- package/src/components/editor/output/JsonOutput.tsx +6 -1
- package/src/components/editor/output/MarimoTracebackOutput.tsx +59 -45
- package/src/components/editor/output/__tests__/HtmlOutput.test.tsx +134 -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 +34 -32
- package/src/components/editor/renderers/vertical-layout/vertical-layout-wrapper.tsx +5 -2
- package/src/components/home/state.ts +3 -2
- package/src/components/scratchpad/scratchpad-history.ts +6 -1
- package/src/components/slides/slides-component.tsx +25 -21
- package/src/components/ui/confirmation-button.tsx +1 -1
- 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/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/cell-output.ts +170 -112
- 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 +2 -1
- package/src/core/ai/tools/__tests__/edit-notebook-tool.test.ts +556 -0
- package/src/core/ai/tools/__tests__/registry.test.ts +12 -4
- 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 +31 -8
- package/src/core/ai/tools/edit-notebook-tool.ts +239 -0
- package/src/core/ai/tools/registry.ts +13 -6
- package/src/core/ai/tools/run-cells-tool.ts +233 -0
- package/src/core/ai/tools/sample-tool.ts +10 -8
- package/src/core/ai/tools/utils.ts +23 -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 +12 -7
- package/src/core/cells/session.ts +1 -1
- package/src/core/codemirror/ai/resources.ts +13 -2
- package/src/core/codemirror/copilot/state.ts +4 -2
- package/src/core/codemirror/language/__tests__/extension.test.ts +10 -2
- package/src/core/codemirror/language/languages/markdown.ts +16 -153
- package/src/core/codemirror/language/languages/python.ts +12 -7
- package/src/core/codemirror/language/languages/sql/sql-mode.ts +6 -1
- package/src/core/codemirror/language/languages/sql/sql.ts +20 -293
- package/src/core/codemirror/language/panel/markdown.tsx +2 -1
- package/src/core/codemirror/language/panel/panel.tsx +1 -1
- package/src/core/codemirror/lsp/federated-lsp.ts +1 -1
- package/src/core/codemirror/lsp/transports.ts +7 -13
- package/src/core/config/config-schema.ts +4 -1
- package/src/core/hotkeys/hotkeys.ts +12 -0
- package/src/core/lsp/__tests__/transport.test.ts +233 -0
- package/src/core/lsp/transport.ts +139 -0
- package/src/core/rtc/state.ts +6 -1
- package/src/core/vscode/is-in-vscode.ts +9 -0
- package/src/core/wasm/store.ts +1 -1
- package/src/css/app/Cell.css +31 -0
- package/src/css/globals.css +5 -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 +14 -1
- package/src/plugins/core/sanitize.ts +76 -0
- package/src/plugins/impl/DataTablePlugin.tsx +1 -0
- package/src/plugins/impl/FileBrowserPlugin.tsx +1 -3
- package/src/plugins/impl/FileUploadPlugin.tsx +1 -3
- package/src/plugins/impl/__tests__/DateTimePickerPlugin.test.tsx +8 -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/plotly/parse-from-template.ts +1 -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 +13 -13
- 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/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-CEXn1vFs.js +0 -156
- package/dist/apl-DuVfHsPc.js +0 -4
- package/dist/architecture-O4VJ6CD3-lp-opOaL.js +0 -21
- package/dist/asciiarmor-qIVWsi4F.js +0 -4
- package/dist/asn1-BjPqARr7.js +0 -4
- package/dist/assets/__vite-browser-external-lX-sn9m2.js +0 -1
- package/dist/brainfuck-DPGTVfkE.js +0 -4
- package/dist/classDiagram-KNZD7YFC-azuS_99k.js +0 -39
- package/dist/classDiagram-v2-RKCZMP56-CQpyQQOR.js +0 -39
- package/dist/clojure-ATksAecl.js +0 -4
- package/dist/cmake-CWylaz2C.js +0 -4
- package/dist/cobol-BiLLCZIQ.js +0 -4
- package/dist/coffeescript-Ca4jipi8.js +0 -4
- package/dist/commonlisp-BwFjyEC7.js +0 -4
- package/dist/crystal-BhUsQHbh.js +0 -4
- package/dist/css-Cf4wlIyV.js +0 -5
- package/dist/cypher-Dj8Hzgxa.js +0 -4
- package/dist/d-DZI7tbTy.js +0 -4
- package/dist/diff-WQISUHG5.js +0 -4
- package/dist/dist-BawZu0ix.js +0 -10
- package/dist/dist-BiOF7987.js +0 -6
- package/dist/dist-Cs3McXEj.js +0 -6
- package/dist/dist-D3aaithT.js +0 -6
- package/dist/dist-DELcMSpJ.js +0 -6
- package/dist/dist-Dgts3WXd.js +0 -6
- package/dist/dist-DtpUiDG_.js +0 -6
- package/dist/dist-ZjnJq_jD.js +0 -10
- package/dist/dist-mof3iuBu.js +0 -12
- package/dist/dtd-B2M8dhfC.js +0 -4
- package/dist/dylan-CU3Vt8SC.js +0 -4
- package/dist/ecl-B8ESAVq4.js +0 -4
- package/dist/eiffel-DDfMIKeA.js +0 -4
- package/dist/elm-Bj6rj8jf.js +0 -4
- package/dist/erlang-BxyshZUq.js +0 -4
- package/dist/error-banner-npbEfanI.js +0 -1012
- package/dist/esm-svAVli9f.js +0 -26
- package/dist/factor-CYk6XT8r.js +0 -5
- package/dist/forth-fcoJkd-f.js +0 -4
- package/dist/fortran-IxZHu4wc.js +0 -4
- package/dist/gas-B8rmKcim.js +0 -4
- package/dist/gherkin-BTm-jIdJ.js +0 -4
- package/dist/gitGraph-ZV4HHKMB-DFg_OLQb.js +0 -21
- package/dist/groovy-01kRHFMD.js +0 -4
- package/dist/haskell-B3PhE05w.js +0 -4
- package/dist/haxe-DEoAm8oA.js +0 -5
- package/dist/idl-DsDJU9cV.js +0 -4
- package/dist/info-63CPKGFF-D3DZmDBa.js +0 -21
- package/dist/infoDiagram-STP46IZ2-ec08vi_U.js +0 -44
- package/dist/javascript-gwczVhuU.js +0 -5
- package/dist/jinja2-AkZRdFk3.js +0 -4
- package/dist/julia-_s6qe3bf.js +0 -4
- package/dist/livescript-CwPHQdv5.js +0 -4
- package/dist/lua-s7nRxkCP.js +0 -4
- package/dist/mathematica-Ci36yd1q.js +0 -4
- package/dist/mbox-DbOYMNCO.js +0 -4
- package/dist/mirc-VmNe8AwF.js +0 -4
- package/dist/mllike-BdD7SJEa.js +0 -6
- package/dist/modelica-BA4VqzC3.js +0 -4
- package/dist/mscgen-DF-5WHJm.js +0 -6
- package/dist/mumps-c_Uia_QN.js +0 -4
- package/dist/nsis-BAANGODV.js +0 -5
- package/dist/ntriples-Bslqh2Ki.js +0 -4
- package/dist/octave-DYn5ltia.js +0 -4
- package/dist/oz-B_N-StZq.js +0 -4
- package/dist/packet-HUATNLJX-CkqjFdAv.js +0 -21
- package/dist/pascal-DU4CtAUu.js +0 -4
- package/dist/perl-Bae6k32u.js +0 -4
- package/dist/pie-WTHONI2E-D0rWwX5P.js +0 -21
- package/dist/pig-DSIxUEgX.js +0 -4
- package/dist/powershell-31lcPgIF.js +0 -4
- package/dist/properties-lmYbntDG.js +0 -4
- package/dist/protobuf-BTYoCEpV.js +0 -4
- package/dist/pug-DMFM7zzO.js +0 -5
- package/dist/puppet-B0ub07d-.js +0 -4
- package/dist/python-C4jT87Nt.js +0 -5
- package/dist/q-YbPYlqRI.js +0 -4
- package/dist/r-OfNu6HAI.js +0 -4
- package/dist/radar-NJJJXTRR-Bxqv4O5a.js +0 -21
- package/dist/rpm-D_3b5peD.js +0 -5
- package/dist/ruby-CehsJy_T.js +0 -4
- package/dist/sas-DwQHzPoF.js +0 -4
- package/dist/scheme-B6ArxiQu.js +0 -4
- package/dist/shell-AHmQgDfc.js +0 -4
- package/dist/sieve-CgodKOcx.js +0 -4
- package/dist/smalltalk-BeFzDkbo.js +0 -4
- package/dist/sparql-BWxq-Lnx.js +0 -4
- package/dist/stateDiagram-v2-UMBNRL4Z-D9v8fKjF.js +0 -38
- package/dist/stex-Dvaq0qsm.js +0 -5
- package/dist/stylus-Ge0ofWlZ.js +0 -4
- package/dist/swift-CjQfbVxV.js +0 -4
- package/dist/tcl-CAGDF11K.js +0 -4
- package/dist/textile-CrXreJtf.js +0 -4
- package/dist/toml-AdLXKwEi.js +0 -4
- package/dist/treemap-75Q7IDZK-Da9Jv6a_.js +0 -21
- package/dist/troff-C-LaM2ex.js +0 -4
- package/dist/ttcn-DTclUi6T.js +0 -4
- package/dist/ttcn-cfg-BtBPbmLX.js +0 -4
- package/dist/turtle-BODDDg5O.js +0 -4
- package/dist/vb-Cb1HQHii.js +0 -4
- package/dist/vbscript-CpXOP4wZ.js +0 -4
- package/dist/velocity-Dz0rBQIk.js +0 -4
- package/dist/verilog-6Di9aLKw.js +0 -4
- package/dist/vhdl-BRNesXYc.js +0 -4
- package/dist/webidl-BpRNYIYn.js +0 -4
- package/dist/xquery-DXWcJ7b6.js +0 -4
- package/dist/yacas-DbSARPz4.js +0 -4
- package/dist/z80-DzslPj_l.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-CEHentF4.js → apl-aGhy11IM.js} +0 -0
- /package/dist/{array-aAxy08hN.js → array-DYSXIreg.js} +0 -0
- /package/dist/{asciiarmor-DURYiCS0.js → asciiarmor-DJKJ3Gkn.js} +0 -0
- /package/dist/{asn1-ETAiEoXY.js → asn1-C6f5IeNs.js} +0 -0
- /package/dist/{asterisk-DTpbbXPb.js → asterisk-DB1poX9_.js} +0 -0
- /package/dist/{brainfuck-BWQep-SA.js → brainfuck-Ch9vjun0.js} +0 -0
- /package/dist/{chunk-57QY23SG-0TxCfmy_.js → chunk-57QY23SG-BpXU7ph4.js} +0 -0
- /package/dist/{clike-bzZTreP4.js → clike-Bc2PZzZQ.js} +0 -0
- /package/dist/{clojure-BzFapDkA.js → clojure-B_lpr3zt.js} +0 -0
- /package/dist/{cmake-DvlbIC8x.js → cmake-DaocNF4I.js} +0 -0
- /package/dist/{cobol-BrEI4cPR.js → cobol-suTPtt7c.js} +0 -0
- /package/dist/{coffeescript-B6cvu8mO.js → coffeescript-CPLIvtqJ.js} +0 -0
- /package/dist/{colors-Cr_mZ2aH.js → colors-BXlG8Lmz.js} +0 -0
- /package/dist/{common-keywords-WqQm7W8t.js → common-keywords-Bhll7O3b.js} +0 -0
- /package/dist/{commonlisp-BIT8PQqi.js → commonlisp-BqM3qFK7.js} +0 -0
- /package/dist/{crystal-B_UcPArT.js → crystal-AsSFu4ke.js} +0 -0
- /package/dist/{css-dHbnt_zl.js → css-Df7Sdeyh.js} +0 -0
- /package/dist/{cypher-Dh3FOpL7.js → cypher-CaVKL6Gu.js} +0 -0
- /package/dist/{cytoscape.esm-BTpRoPd2.js → cytoscape.esm-BFEMljQI.js} +0 -0
- /package/dist/{d-CQD1IHee.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-CpF_IDx0.js → diff-CsxOM4Tr.js} +0 -0
- /package/dist/{dist-CK8Gj3GX.js → dist-C76MUPD3.js} +0 -0
- /package/dist/{dtd-DYoNpy6c.js → dtd-Dwr0Jmks.js} +0 -0
- /package/dist/{duckdb-keywords-CdIsl9L0.js → duckdb-keywords-7wAWf848.js} +0 -0
- /package/dist/{dylan-Bc_2G1E-.js → dylan-A7-ZBSey.js} +0 -0
- /package/dist/{ebnf-jGVT_YpN.js → ebnf-9_SaGDUz.js} +0 -0
- /package/dist/{ecl-UIU-P-Ar.js → ecl-BzJVIQDc.js} +0 -0
- /package/dist/{eiffel-C90Oyuix.js → eiffel-CO9eC_Op.js} +0 -0
- /package/dist/{elm-B9fWSySj.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-Ccff0UAn.js → erlang-DWbZP546.js} +0 -0
- /package/dist/{fcl-CGR8NxAg.js → fcl-CM9t2iay.js} +0 -0
- /package/dist/{forth-U1ROGcBY.js → forth-BTYqUuu3.js} +0 -0
- /package/dist/{fortran-3nOkjDmc.js → fortran-DgAjHcCq.js} +0 -0
- /package/dist/{gas-B_4H5FzV.js → gas-BjDSWPZd.js} +0 -0
- /package/dist/{gherkin-B0eru5Uz.js → gherkin-ClRqqpKv.js} +0 -0
- /package/dist/{groovy-dqjtZUVf.js → groovy-BzNjnc8x.js} +0 -0
- /package/dist/{haskell-DFzCCQzo.js → haskell-DLdk34Jq.js} +0 -0
- /package/dist/{haxe-Da8Pj5RT.js → haxe-l6gaY_IS.js} +0 -0
- /package/dist/{http-1HACL_9s.js → http-6Qg7z_h2.js} +0 -0
- /package/dist/{idl-D3NXs5iM.js → idl-hlWT4D26.js} +0 -0
- /package/dist/{init-D6eDd7H0.js → init-tZ42Torz.js} +0 -0
- /package/dist/{isArrayLikeObject-BlvK28do.js → isArrayLikeObject-DU5MCuQM.js} +0 -0
- /package/dist/{javascript-BfCTmOnk.js → javascript-DGukg1sB.js} +0 -0
- /package/dist/{jinja2-gBHAxUdF.js → jinja2-DI5k_Er3.js} +0 -0
- /package/dist/{julia-bG-6nJ-_.js → julia-BvDZDiIT.js} +0 -0
- /package/dist/{katex-mkWmhPUh.js → katex-DgfMWJY9.js} +0 -0
- /package/dist/{livescript-BlsRC8UJ.js → livescript-2YMQfkfI.js} +0 -0
- /package/dist/{lua-BbDC0_5w.js → lua-DIUrQRfA.js} +0 -0
- /package/dist/{main-Czi9-LVy.js → main-BMTpe7M0.js} +0 -0
- /package/dist/{marked.esm-DJM8la36.js → marked.esm-DkVwEwtO.js} +0 -0
- /package/dist/{math-C7wLpe9K.js → math-qsHyz2Eo.js} +0 -0
- /package/dist/{mathematica-YZTe3-PF.js → mathematica-Dqmg_BwL.js} +0 -0
- /package/dist/{mbox-CY5idp08.js → mbox-Cng-P-F1.js} +0 -0
- /package/dist/{mirc-CbQuFZKk.js → mirc-CNDqOVhQ.js} +0 -0
- /package/dist/{mllike-DsbHMX-5.js → mllike-C1n2UDyX.js} +0 -0
- /package/dist/{modelica-CQuvsOQk.js → modelica-QqQC2pFj.js} +0 -0
- /package/dist/{mscgen-LIpBP9VR.js → mscgen-C3fl8uhp.js} +0 -0
- /package/dist/{mumps-Ct5NXoaG.js → mumps-BeCUbMej.js} +0 -0
- /package/dist/{nginx-Dvc62C8z.js → nginx-ejv7DsBz.js} +0 -0
- /package/dist/{node-sql-parser-BqKV-TpL.js → node-sql-parser-CoPWN4hn.js} +0 -0
- /package/dist/{ntriples-jVkxWUuv.js → ntriples-CUgUpcma.js} +0 -0
- /package/dist/{octave-jGOImUB0.js → octave-BD652tGl.js} +0 -0
- /package/dist/{oz-Y0FKDMS2.js → oz-DrRsFa0K.js} +0 -0
- /package/dist/{pascal-BaLtPWWB.js → pascal-hpcx9sVn.js} +0 -0
- /package/dist/{path-VDkDgx1I.js → path-Bbv2tLY1.js} +0 -0
- /package/dist/{perl-CjfE0JLo.js → perl-DW8XHeFc.js} +0 -0
- /package/dist/{pig-DE4epV99.js → pig-Cv7Nxbfo.js} +0 -0
- /package/dist/{powershell-BZx53Ujw.js → powershell-Dr7WZMDU.js} +0 -0
- /package/dist/{prop-types-0wNc-99T.js → prop-types-Bd16OEUP.js} +0 -0
- /package/dist/{properties-CLyCG5C-.js → properties-D-qJDXAM.js} +0 -0
- /package/dist/{protobuf-BjBBs_V4.js → protobuf-B48QZbd3.js} +0 -0
- /package/dist/{puppet-ZImLuomA.js → puppet-15JDyiY2.js} +0 -0
- /package/dist/{python-C9YN71pR.js → python-DWkQA94h.js} +0 -0
- /package/dist/{q-CMoUHJ5Q.js → q-BzRpKgfd.js} +0 -0
- /package/dist/{r-DILmKWWW.js → r-dcNRe_Q8.js} +0 -0
- /package/dist/{range-PcytnUSJ.js → range-CQvYp_qE.js} +0 -0
- /package/dist/{rpm-fpIsm1Kr.js → rpm-Djl3Dsf1.js} +0 -0
- /package/dist/{ruby-BuiQI41h.js → ruby-Dd2CZTip.js} +0 -0
- /package/dist/{sas-C76sJ1zF.js → sas-DYF5_Iqu.js} +0 -0
- /package/dist/{scheme-DHjM-txv.js → scheme-YtWcji1H.js} +0 -0
- /package/dist/{shell--7NmGJ9p.js → shell-C3uC3Y0Z.js} +0 -0
- /package/dist/{sieve-DaPvBv1M.js → sieve-DHB17sQG.js} +0 -0
- /package/dist/{simple-mode-BP3Jd4vf.js → simple-mode-BMmwP_vI.js} +0 -0
- /package/dist/{smalltalk-KPvwrjCs.js → smalltalk-Y5v1Np3H.js} +0 -0
- /package/dist/{solr-PvZUtEDb.js → solr-DvRJLlRD.js} +0 -0
- /package/dist/{sparql-CXSUIQer.js → sparql-BEt3GJwM.js} +0 -0
- /package/dist/{spreadsheet-DPJdGPkx.js → spreadsheet-Dp4B9_rc.js} +0 -0
- /package/dist/{sql-Dp4ZLSIa.js → sql-DBsUs8nQ.js} +0 -0
- /package/dist/{stex-CeXW4zzk.js → stex-C6-x52ei.js} +0 -0
- /package/dist/{stylus-BXcmrg9w.js → stylus-DroA8via.js} +0 -0
- /package/dist/{swift-DD8I7hKP.js → swift-DR0x1ESK.js} +0 -0
- /package/dist/{tcl-B9Lp4GtA.js → tcl-BeuTFc_c.js} +0 -0
- /package/dist/{textile-qdiY0teq.js → textile-C0ikhHN3.js} +0 -0
- /package/dist/{tiddlywiki-t32lkubq.js → tiddlywiki-C_2Nvsgu.js} +0 -0
- /package/dist/{tiki-B0qKrSMl.js → tiki-CKQlhmQQ.js} +0 -0
- /package/dist/{timer-CzOhIJuk.js → timer-CcUhugb0.js} +0 -0
- /package/dist/{toml-eSl4PUAH.js → toml-BqNUJWRI.js} +0 -0
- /package/dist/{treemap-BpgMKHv-.js → treemap-BYLUKIzA.js} +0 -0
- /package/dist/{troff-105XJOEu.js → troff-DkK0f2ZH.js} +0 -0
- /package/dist/{tslib.es6-DofFyd9S.js → tslib.es6-3ZL768sZ.js} +0 -0
- /package/dist/{ttcn-1_BxDcM8.js → ttcn-Bf8vrg-_.js} +0 -0
- /package/dist/{ttcn-cfg-Cn_XgXiw.js → ttcn-cfg-DjCKzd95.js} +0 -0
- /package/dist/{turtle-BI6LyfEu.js → turtle-SSc84S9m.js} +0 -0
- /package/dist/{vb-BecoBfmr.js → vb-CQ6DC3cL.js} +0 -0
- /package/dist/{vbscript-De-zpA4i.js → vbscript-Dw0gFssg.js} +0 -0
- /package/dist/{velocity-DhlYJTrD.js → velocity-BvJQyBmj.js} +0 -0
- /package/dist/{verilog-BDZgxDOW.js → verilog-CKGAvQjj.js} +0 -0
- /package/dist/{vhdl-CV0OKTbp.js → vhdl-B40_x6fM.js} +0 -0
- /package/dist/{webidl-BOM1Fs0O.js → webidl-Bi9hczCv.js} +0 -0
- /package/dist/{xquery-CltP_CGh.js → xquery-DwWUXvP3.js} +0 -0
- /package/dist/{yacas-Dch4E2Dg.js → yacas-ClUs0mmH.js} +0 -0
- /package/dist/{z80-B5Yly27o.js → z80-DPC4UGzR.js} +0 -0
- /package/dist/{zod-ChY6miG5.js → zod-mAEs2ITo.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,8 +3,14 @@
|
|
|
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
|
|
|
@@ -49,6 +55,7 @@ export class FrontendToolRegistry {
|
|
|
49
55
|
async invoke<TName extends string>(
|
|
50
56
|
toolName: TName,
|
|
51
57
|
rawArgs: unknown,
|
|
58
|
+
toolContext: ToolNotebookContext,
|
|
52
59
|
): Promise<InvokeResult<TName>> {
|
|
53
60
|
const tool = this.getToolOrThrow(toolName);
|
|
54
61
|
const handler = tool.handler;
|
|
@@ -65,7 +72,7 @@ export class FrontendToolRegistry {
|
|
|
65
72
|
const args = inputResponse.data;
|
|
66
73
|
|
|
67
74
|
// Call the handler
|
|
68
|
-
const rawOutput = await handler(args);
|
|
75
|
+
const rawOutput = await handler(args, toolContext);
|
|
69
76
|
|
|
70
77
|
// Parse output
|
|
71
78
|
const response = await outputSchema.safeParseAsync(rawOutput);
|
|
@@ -114,7 +121,7 @@ export class FrontendToolRegistry {
|
|
|
114
121
|
getToolSchemas(): FrontendToolDefinition[] {
|
|
115
122
|
return [...this.tools.values()].map((tool) => ({
|
|
116
123
|
name: tool.name,
|
|
117
|
-
description: tool.description,
|
|
124
|
+
description: formatToolDescription(tool.description),
|
|
118
125
|
parameters: z.toJSONSchema(tool.schema),
|
|
119
126
|
source: "frontend",
|
|
120
127
|
mode: tool.mode,
|
|
@@ -123,6 +130,6 @@ export class FrontendToolRegistry {
|
|
|
123
130
|
}
|
|
124
131
|
|
|
125
132
|
export const FRONTEND_TOOL_REGISTRY = new FrontendToolRegistry([
|
|
126
|
-
|
|
127
|
-
|
|
133
|
+
new EditNotebookTool(),
|
|
134
|
+
new RunStaleCellsTool(),
|
|
128
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
|
+
}
|
|
@@ -3,21 +3,23 @@
|
|
|
3
3
|
import { z } from "zod";
|
|
4
4
|
import {
|
|
5
5
|
type AiTool,
|
|
6
|
+
type ToolDescription,
|
|
6
7
|
ToolExecutionError,
|
|
7
8
|
type ToolOutputBase,
|
|
8
9
|
toolOutputBaseSchema,
|
|
9
10
|
} from "./base";
|
|
10
11
|
import type { CopilotMode } from "./registry";
|
|
11
12
|
|
|
12
|
-
const description =
|
|
13
|
-
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.
|
|
14
18
|
|
|
15
|
-
|
|
16
|
-
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
- Output with data containing the greeting message.
|
|
20
|
-
`;
|
|
19
|
+
Returns:
|
|
20
|
+
- Output with data containing the greeting message.
|
|
21
|
+
`,
|
|
22
|
+
};
|
|
21
23
|
|
|
22
24
|
interface Input {
|
|
23
25
|
name: string;
|
|
@@ -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
|
+
}
|
|
@@ -2109,7 +2109,7 @@ describe("cell reducer", () => {
|
|
|
2109
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("# Updated 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
|
});
|
|
@@ -2143,6 +2143,24 @@ describe("cell reducer", () => {
|
|
|
2143
2143
|
expect(state.cellIds.inOrderIds).toContain(SETUP_CELL_ID);
|
|
2144
2144
|
});
|
|
2145
2145
|
|
|
2146
|
+
it("can delete and then create a new setup cell", () => {
|
|
2147
|
+
// Create the setup cell
|
|
2148
|
+
actions.addSetupCellIfDoesntExist({ code: "# Setup code" });
|
|
2149
|
+
|
|
2150
|
+
// Delete the setup cell
|
|
2151
|
+
actions.deleteCell({ cellId: SETUP_CELL_ID });
|
|
2152
|
+
|
|
2153
|
+
// Create a new setup cell
|
|
2154
|
+
actions.addSetupCellIfDoesntExist({ code: "# New code" });
|
|
2155
|
+
|
|
2156
|
+
// Check that the new setup cell was created
|
|
2157
|
+
expect(state.cellData[SETUP_CELL_ID].id).toBe(SETUP_CELL_ID);
|
|
2158
|
+
expect(state.cellData[SETUP_CELL_ID].name).toBe("setup");
|
|
2159
|
+
expect(state.cellData[SETUP_CELL_ID].code).toBe("# New code");
|
|
2160
|
+
expect(state.cellData[SETUP_CELL_ID].edited).toBe(true);
|
|
2161
|
+
expect(state.cellIds.inOrderIds).toContain(SETUP_CELL_ID);
|
|
2162
|
+
});
|
|
2163
|
+
|
|
2146
2164
|
it("can clear all outputs", () => {
|
|
2147
2165
|
// Add a cell and give it output
|
|
2148
2166
|
actions.createNewCell({
|
|
@@ -210,8 +210,18 @@ describe("notebookStateFromSession", () => {
|
|
|
210
210
|
|
|
211
211
|
it("handles console outputs in session cell", () => {
|
|
212
212
|
const consoleOutputs = [
|
|
213
|
-
{
|
|
214
|
-
|
|
213
|
+
{
|
|
214
|
+
type: "stream",
|
|
215
|
+
name: "stdout",
|
|
216
|
+
text: "Hello stdout",
|
|
217
|
+
mimetype: "text/plain",
|
|
218
|
+
} as const,
|
|
219
|
+
{
|
|
220
|
+
type: "stream",
|
|
221
|
+
name: "stderr",
|
|
222
|
+
text: "Hello stderr",
|
|
223
|
+
mimetype: "text/plain",
|
|
224
|
+
} as const,
|
|
215
225
|
];
|
|
216
226
|
const session = createSession([
|
|
217
227
|
createSessionCell("cell-1", [], consoleOutputs),
|
|
@@ -356,7 +366,14 @@ describe("notebookStateFromSession", () => {
|
|
|
356
366
|
createSessionCell(
|
|
357
367
|
"cell-1",
|
|
358
368
|
[],
|
|
359
|
-
[
|
|
369
|
+
[
|
|
370
|
+
{
|
|
371
|
+
type: "stream",
|
|
372
|
+
name: "stdout",
|
|
373
|
+
text: "output",
|
|
374
|
+
mimetype: "text/plain",
|
|
375
|
+
},
|
|
376
|
+
],
|
|
360
377
|
),
|
|
361
378
|
]);
|
|
362
379
|
const notebook = createNotebook([
|
package/src/core/cells/cells.ts
CHANGED
|
@@ -145,13 +145,18 @@ export function initialNotebookState(): NotebookState {
|
|
|
145
145
|
});
|
|
146
146
|
}
|
|
147
147
|
|
|
148
|
+
/** The target cell ID to create a new cell relative to. Can be:
|
|
149
|
+
* - A CellId string for an existing cell
|
|
150
|
+
* - "__end__" to append at the end of the first column
|
|
151
|
+
* - {type: "__end__", columnId} to append at the end of a specific column
|
|
152
|
+
*/
|
|
153
|
+
export type CellPosition =
|
|
154
|
+
| CellId
|
|
155
|
+
| "__end__"
|
|
156
|
+
| { type: "__end__"; columnId: CellColumnId };
|
|
157
|
+
|
|
148
158
|
export interface CreateNewCellAction {
|
|
149
|
-
|
|
150
|
-
* - A CellId string for an existing cell
|
|
151
|
-
* - "__end__" to append at the end of the first column
|
|
152
|
-
* - {type: "__end__", columnId} to append at the end of a specific column
|
|
153
|
-
*/
|
|
154
|
-
cellId: CellId | "__end__" | { type: "__end__"; columnId: CellColumnId };
|
|
159
|
+
cellId: CellPosition;
|
|
155
160
|
/** Whether to insert before (true) or after (false) the target cell */
|
|
156
161
|
before: boolean;
|
|
157
162
|
/** Initial code content for the new cell */
|
|
@@ -1331,7 +1336,7 @@ const {
|
|
|
1331
1336
|
}
|
|
1332
1337
|
|
|
1333
1338
|
// First check if setup cell already exists
|
|
1334
|
-
if (SETUP_CELL_ID in state.
|
|
1339
|
+
if (SETUP_CELL_ID in state.cellIds) {
|
|
1335
1340
|
// Just focus on the existing setup cell
|
|
1336
1341
|
return {
|
|
1337
1342
|
...state,
|
|
@@ -229,7 +229,7 @@ function createCellRuntimeFromSession(
|
|
|
229
229
|
return {
|
|
230
230
|
channel: consoleOutput.name === "stderr" ? "stderr" : "stdout",
|
|
231
231
|
data: consoleOutput.text,
|
|
232
|
-
mimetype: "text/plain",
|
|
232
|
+
mimetype: consoleOutput.mimetype ?? "text/plain",
|
|
233
233
|
timestamp: DEFAULT_TIMESTAMP,
|
|
234
234
|
};
|
|
235
235
|
}),
|