@marimo-team/islands 0.16.4 → 0.17.0
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/{ConnectedDataExplorerComponent-CCjhPKMy.js → ConnectedDataExplorerComponent-DJEUH6Bb.js} +78 -100
- package/dist/{_baseIsEqual-oN7pRNcM.js → _baseIsEqual-CN4oFUZ4.js} +20 -20
- package/dist/{_basePickBy-CYvzhRjy.js → _basePickBy-CzSvE_-f.js} +3 -3
- package/dist/{_baseProperty-DGUdIBuu.js → _baseProperty-DbbUiyUD.js} +5 -5
- package/dist/{_baseUniq-B5gfSl8S.js → _baseUniq-DwoC-LVO.js} +4 -4
- package/dist/any-language-editor-CEXn1vFs.js +156 -0
- package/dist/apl-DuVfHsPc.js +4 -0
- package/dist/architecture-O4VJ6CD3-lp-opOaL.js +21 -0
- package/dist/{architectureDiagram-W76B3OCA-DkEhipkW.js → architectureDiagram-W76B3OCA-CoBORy6u.js} +34 -34
- package/dist/asciiarmor-qIVWsi4F.js +4 -0
- package/dist/asn1-BjPqARr7.js +4 -0
- package/dist/assets/__vite-browser-external-lX-sn9m2.js +1 -0
- package/dist/assets/worker-vPn7gxWj.js +54 -0
- package/dist/{blockDiagram-QIGZ2CNN-DZOqLMYa.js → blockDiagram-QIGZ2CNN-0yzoLIar.js} +75 -86
- package/dist/brainfuck-DPGTVfkE.js +4 -0
- package/dist/{button-CEcjneWG.js → button-DcnBVpVa.js} +11 -14
- package/dist/{c4Diagram-FPNF74CW-DVaR7c9q.js → c4Diagram-FPNF74CW-CKsIA_DD.js} +27 -51
- package/dist/{channel-Uh0KpgGW.js → channel-3LVvQZcD.js} +1 -1
- package/dist/{check-BK9zDfQk.js → check-D7ifz5op.js} +1 -1
- package/dist/{chunk-3AY6CYHV-Dk2R2-S1.js → chunk-3AY6CYHV-B2C-aVc3.js} +35 -35
- package/dist/{chunk-4BX2VUAB-CqO6zUIz.js → chunk-4BX2VUAB-DEd4VI9L.js} +1 -1
- package/dist/{chunk-4KMFLZZN-CloTfTwP.js → chunk-4KMFLZZN-DnvP3O4K.js} +216 -325
- package/dist/{chunk-55IACEB6-I0rmqTua.js → chunk-55IACEB6-BcCzwOOl.js} +1 -1
- package/dist/{chunk-6OXUPJBA-BuROSTmo.js → chunk-6OXUPJBA-eNAAfJ3Q.js} +7 -7
- package/dist/{chunk-7GE3RBXV-B1-tsIPP.js → chunk-7GE3RBXV-CSAeQvLz.js} +1 -1
- package/dist/{chunk-ABZYJK2D-CLlso8tj.js → chunk-ABZYJK2D-CZcb_1iM.js} +16 -20
- package/dist/{chunk-BN7GFLIU-Db2-FjLn.js → chunk-BN7GFLIU-pBc5O5Rh.js} +1 -1
- package/dist/{chunk-CVBHYZKI-BONeiloK.js → chunk-CVBHYZKI-CivHZg9P.js} +3 -3
- package/dist/{chunk-CXMOBAN2-U9GJSP1d.js → chunk-CXMOBAN2-Dd0E6qb0.js} +46 -54
- package/dist/chunk-EXTU4WIE-GQ2ZWfJo.js +10 -0
- package/dist/{chunk-FMBD7UC4-DyV3BR_I.js → chunk-FMBD7UC4-C6YcisV6.js} +1 -1
- package/dist/{chunk-JA3XYJ7Z-C9A1076P.js → chunk-JA3XYJ7Z-DYeQaT57.js} +21 -25
- package/dist/{chunk-JEIROHC2-BGnFkSVq.js → chunk-JEIROHC2-B-EZMP4V.js} +1 -1
- package/dist/{chunk-K7UQS3LO-033LOsjK.js → chunk-K7UQS3LO-DENzlS-M.js} +7 -7
- package/dist/{chunk-KMC2YHZD-DT4Sq4Ld.js → chunk-KMC2YHZD-SckhHdEh.js} +1 -1
- package/dist/{chunk-QN33PNHL-gs44MZla.js → chunk-QN33PNHL-Cjq5b604.js} +2 -2
- package/dist/{chunk-QYVHNE3D-B8BO1AnT.js → chunk-QYVHNE3D-CNUuivie.js} +3 -4
- package/dist/{chunk-QZHKN3VN-CeN_GkU6.js → chunk-QZHKN3VN-DugEU_bA.js} +1 -1
- package/dist/chunk-S3R3BYOJ-itCT6Vif.js +380 -0
- package/dist/{chunk-T44TD3VJ-BwzD6YE0.js → chunk-T44TD3VJ-BLdfTX8J.js} +1 -1
- package/dist/{chunk-TVAH2DTR-Bi6jpQJQ.js → chunk-TVAH2DTR-BOnwF9d8.js} +7 -8
- package/dist/{chunk-TZMSLE5B-D8klz2H_.js → chunk-TZMSLE5B-DGs66AlL.js} +4 -5
- package/dist/{chunk-WFRQ32O7-CzSwSlN0.js → chunk-WFRQ32O7-CPsipkmJ.js} +1 -1
- package/dist/{chunk-WFWHJNB7-DN_cavM6.js → chunk-WFWHJNB7-Cmed18Pk.js} +1 -1
- package/dist/{chunk-XRWGC2XP-Bb5eGNM2.js → chunk-XRWGC2XP-DH5GDaY8.js} +1 -1
- package/dist/{chunk-ZPAFE4SF-S5UYNb0V.js → chunk-ZPAFE4SF-DPDwaqZm.js} +22 -22
- package/dist/classDiagram-KNZD7YFC-azuS_99k.js +39 -0
- package/dist/classDiagram-v2-RKCZMP56-CQpyQQOR.js +39 -0
- package/dist/{click-outside-container-DE4e7p1p.js → click-outside-container-CL_FkgGY.js} +7 -12
- package/dist/{clike-CxAz4p9E.js → clike-DYfRWWXk.js} +1 -1
- package/dist/{clike-Cg_DBrJ0.js → clike-bzZTreP4.js} +1 -1
- package/dist/clojure-ATksAecl.js +4 -0
- package/dist/{clone-Dk4FkKH0.js → clone-Msbhmn2a.js} +1 -1
- package/dist/cmake-CWylaz2C.js +4 -0
- package/dist/cobol-BiLLCZIQ.js +4 -0
- package/dist/coffeescript-Ca4jipi8.js +4 -0
- package/dist/commonlisp-BwFjyEC7.js +4 -0
- package/dist/{constants-Cjd_3kwd.js → constants-BCOEQoEQ.js} +3 -3
- package/dist/{copy-C5RFg7ok.js → copy-BkZ8PkBM.js} +6 -2
- package/dist/{cose-bilkent-S5V4N54A-B3iOTGu5.js → cose-bilkent-S5V4N54A-BZnbwyVD.js} +20 -20
- package/dist/crystal-BhUsQHbh.js +4 -0
- package/dist/css-Cf4wlIyV.js +5 -0
- package/dist/cypher-Dj8Hzgxa.js +4 -0
- package/dist/{cytoscape.esm-DTDV0Nbj.js → cytoscape.esm-BTpRoPd2.js} +586 -661
- package/dist/d-DZI7tbTy.js +4 -0
- package/dist/{dagre-5GWH7T2D-KM4Z11yT.js → dagre-5GWH7T2D-BGaiSZZO.js} +32 -37
- package/dist/{dagre-B0u1urxE.js → dagre-pyfDIOWJ.js} +57 -76
- package/dist/data-grid-overlay-editor-867aBz0Y.js +133 -0
- package/dist/{diagram-N5W7TBWH-CtO7az4G.js → diagram-N5W7TBWH-CzLE0jZB.js} +35 -51
- package/dist/diagram-QEK2KX5R-AGS60xEZ.js +245 -0
- package/dist/{diagram-S2PKOQOG-CiXElLNQ.js → diagram-S2PKOQOG-BxRoG6yW.js} +28 -28
- package/dist/diff-WQISUHG5.js +4 -0
- package/dist/{dist-CdE2C2In.js → dist-2Ne-33Xy.js} +15 -20
- package/dist/{dist-DKFaZRVk.js → dist-B0YD1aXi.js} +2 -2
- package/dist/{dist-DBhzmFyH.js → dist-B1Dv8Sdk.js} +3 -3
- package/dist/{dist-CGIZPq3J.js → dist-BFkr6kAQ.js} +2 -2
- package/dist/{dist-DL_ci7Yc.js → dist-BL2DSY0P.js} +1 -1
- package/dist/dist-BawZu0ix.js +10 -0
- package/dist/{dist-Bar1QnNM.js → dist-BhVFggab.js} +3 -3
- package/dist/{textile-Cy55fYGC.js → dist-BiOF7987.js} +4 -2
- package/dist/{dist-BQmQQqFH.js → dist-BpzZrRd6.js} +1 -1
- package/dist/{dist-CxD5E6Sh.js → dist-C7zhQ7K0.js} +24 -22
- package/dist/{dist-BqgkUnEN.js → dist-CBhnQKQ4.js} +3 -3
- package/dist/{dist-Dzk1C8l5.js → dist-CId4IPXu.js} +10 -13
- package/dist/{dist-CUnh_3Ii.js → dist-CYhQCVru.js} +2 -2
- package/dist/{dist-BBlFk9ki.js → dist-CZq5-ZyD.js} +1 -1
- package/dist/{dist-elblfNXO.js → dist-Cacac5HV.js} +2 -2
- package/dist/{dist-CChOkSUg.js → dist-CfQHSIQC.js} +3 -3
- package/dist/{dist-JCAky9ND.js → dist-CkvGMBAS.js} +17 -22
- package/dist/dist-Cs3McXEj.js +6 -0
- package/dist/{dist-o7fhJC7U.js → dist-CvyfRaIr.js} +3 -3
- package/dist/{dist-CZfRM7pE.js → dist-D-3fICwh.js} +2 -2
- package/dist/dist-D3aaithT.js +6 -0
- package/dist/{dist-CutXTm8t.js → dist-DBhEu3-F.js} +1 -1
- package/dist/dist-DELcMSpJ.js +6 -0
- package/dist/{dist-C7ASiFxI.js → dist-DMxl6Qbu.js} +273 -263
- package/dist/{dist-CLvpViod.js → dist-DS6nuHYK.js} +2 -3
- package/dist/dist-Dgts3WXd.js +6 -0
- package/dist/{dist--I6Htnlv.js → dist-DlHkZUnY.js} +5 -5
- package/dist/dist-Doiq_KIP.js +15 -0
- package/dist/dist-DtpUiDG_.js +6 -0
- package/dist/{dist-DzOpMdwb.js → dist-NUdHX0XE.js} +4 -4
- package/dist/{dist-C3WYsf4K.js → dist-PGgOcwbF.js} +4 -10
- package/dist/{dist-DNnYAdRE.js → dist-RdxOJbBw.js} +2 -2
- package/dist/{dist-BEvIw5Nh.js → dist-RwqAqkpG.js} +1 -1
- package/dist/dist-ZjnJq_jD.js +10 -0
- package/dist/{dist-CbRkrKrP.js → dist-biZ846D9.js} +5 -5
- package/dist/{dist-DW9er3Zq.js → dist-d5NxvX2s.js} +44 -23
- package/dist/{dist-C3QUag__.js → dist-ivwkJchV.js} +3 -3
- package/dist/dist-mof3iuBu.js +12 -0
- package/dist/{dist-Cib4sGDA.js → dist-reo2kYlN.js} +2 -2
- package/dist/{dist-BZBitvuL.js → dist-wHVprCkn.js} +1 -1
- package/dist/{dist-C5zMs_n5.js → dist-y8uoXYaE.js} +3 -3
- package/dist/{dist-DPF5TTUg.js → dist-z_iuDES7.js} +126 -115
- package/dist/{dockerfile-Dum_1b-5.js → dockerfile-sZMPcXVY.js} +1 -1
- package/dist/dtd-B2M8dhfC.js +4 -0
- package/dist/dylan-CU3Vt8SC.js +4 -0
- package/dist/ecl-B8ESAVq4.js +4 -0
- package/dist/eiffel-DDfMIKeA.js +4 -0
- package/dist/elm-Bj6rj8jf.js +4 -0
- package/dist/{erDiagram-AWTI2OKA-ZTIl9iQO.js → erDiagram-AWTI2OKA-CTxzb-U8.js} +20 -20
- package/dist/erlang-BxyshZUq.js +4 -0
- package/dist/{error-banner-OQIGTqFR.js → error-banner-npbEfanI.js} +13 -13
- package/dist/{esm-DxFkg7a6.js → esm-BdiY4QsX.js} +1528 -1492
- package/dist/{esm-d0g2RsOH.js → esm-CAWW9sum.js} +6 -8
- package/dist/{esm-1_Mp6VD2.js → esm-YY5zh7KV.js} +324 -395
- package/dist/{esm-BO9n_s6u.js → esm-svAVli9f.js} +5 -5
- package/dist/{factor-CdgiDGiu.js → factor-CRFTmP_a.js} +1 -1
- package/dist/factor-CYk6XT8r.js +5 -0
- package/dist/{flowDiagram-PVAE7QVJ-DsbofOzu.js → flowDiagram-PVAE7QVJ-Dck2hiJe.js} +22 -22
- package/dist/{formats-D5C6JAJf.js → formats-BnqXUb1V.js} +13 -17
- package/dist/forth-fcoJkd-f.js +4 -0
- package/dist/fortran-IxZHu4wc.js +4 -0
- package/dist/{fullscreen-D1yTiBlu.js → fullscreen-blsKUrtN.js} +741 -744
- package/dist/{ganttDiagram-OWAHRB6G-FnCH1Yj3.js → ganttDiagram-OWAHRB6G-AWzfzpup.js} +9 -9
- package/dist/gas-B8rmKcim.js +4 -0
- package/dist/gherkin-BTm-jIdJ.js +4 -0
- package/dist/gitGraph-ZV4HHKMB-DFg_OLQb.js +21 -0
- package/dist/{gitGraphDiagram-NY62KEGX-B0wvMNqU.js → gitGraphDiagram-NY62KEGX-GyNboWSV.js} +31 -34
- package/dist/{glide-data-editor-CYfKmSNp.js → glide-data-editor-DHuN8kQ8.js} +1701 -1771
- package/dist/{graphlib-BGmr7CYF.js → graphlib-hb3zmtVD.js} +5 -5
- package/dist/groovy-01kRHFMD.js +4 -0
- package/dist/haskell-B3PhE05w.js +4 -0
- package/dist/haxe-DEoAm8oA.js +5 -0
- package/dist/{hotkeys-yFrUwyJK.js → hotkeys-Ct2T3e9O.js} +4 -7
- package/dist/idl-DsDJU9cV.js +4 -0
- package/dist/info-63CPKGFF-D3DZmDBa.js +21 -0
- package/dist/infoDiagram-STP46IZ2-ec08vi_U.js +44 -0
- package/dist/{isArrayLikeObject-DiDsNamC.js → isArrayLikeObject-BlvK28do.js} +3 -5
- package/dist/{isEmpty-BBG-u1GM.js → isEmpty--odfYjh1.js} +2 -2
- package/dist/{isSymbol-BxF-_8BA.js → isSymbol-Cb1f2HgO.js} +1 -1
- package/dist/{javascript-Dfq1qI35.js → javascript-BfCTmOnk.js} +2 -2
- package/dist/javascript-gwczVhuU.js +5 -0
- package/dist/jinja2-AkZRdFk3.js +4 -0
- package/dist/{journeyDiagram-BIP6EPQ6-B3PotfAW.js → journeyDiagram-BIP6EPQ6-TmXYCUbT.js} +23 -24
- package/dist/julia-_s6qe3bf.js +4 -0
- package/dist/{kanban-definition-6OIFK2YF-BTrQZ3LN.js → kanban-definition-6OIFK2YF-B6ozleHo.js} +15 -15
- package/dist/{katex-dN__NFdn.js → katex-mPzRsXEy.js} +1 -1
- package/dist/{katex-BE4xflfm.js → katex-mkWmhPUh.js} +149 -173
- package/dist/{label-BinTsX-u.js → label-VVRKZmrP.js} +21 -24
- package/dist/{linear-DyTdUIqX.js → linear-iebAbJVD.js} +1 -1
- package/dist/livescript-CwPHQdv5.js +4 -0
- package/dist/{loader-Dijti3y4.js → loader-CM0VALo9.js} +19 -26
- package/dist/lua-s7nRxkCP.js +4 -0
- package/dist/main.js +8234 -8633
- package/dist/{marked.esm-3RjvXPoO.js → marked.esm-DJM8la36.js} +5 -5
- package/dist/mathematica-Ci36yd1q.js +4 -0
- package/dist/mbox-DbOYMNCO.js +4 -0
- package/dist/{memoize-Dq87l1O_.js → memoize-DYoRBSLn.js} +1 -1
- package/dist/{merge-BPDCIm8P.js → merge-BjuR6j_w.js} +1 -1
- package/dist/{mermaid-BlJDcO4M.js → mermaid-YPPMBmhk.js} +58 -76
- package/dist/{mermaid-parser.core-CSFx6MQ7.js → mermaid-parser.core-BLkyTSZj.js} +8 -8
- package/dist/{mhchem-DZ68WS0G.js → mhchem-Dw7wvXtr.js} +1 -1
- package/dist/{min-BzhKOmZo.js → min-B_i2ahn4.js} +7 -7
- package/dist/{mindmap-definition-Q6HEUPPD-9hhnrO1k.js → mindmap-definition-Q6HEUPPD-F6-JnXwq.js} +17 -17
- package/dist/mirc-VmNe8AwF.js +4 -0
- package/dist/mllike-BdD7SJEa.js +6 -0
- package/dist/modelica-BA4VqzC3.js +4 -0
- package/dist/mscgen-DF-5WHJm.js +6 -0
- package/dist/mumps-c_Uia_QN.js +4 -0
- package/dist/{node-sql-parser-13oju30e.js → node-sql-parser-BqKV-TpL.js} +14343 -14351
- package/dist/{now-DVBcRCoE.js → now-CwRqw0nS.js} +1 -1
- package/dist/nsis-BAANGODV.js +5 -0
- package/dist/{nsis-BW6_XagK.js → nsis-BWJEeUyS.js} +1 -1
- package/dist/ntriples-Bslqh2Ki.js +4 -0
- package/dist/{number-overlay-editor-D1YdiOrm.js → number-overlay-editor-CeyruAX4.js} +17 -23
- package/dist/octave-DYn5ltia.js +4 -0
- package/dist/oz-B_N-StZq.js +4 -0
- package/dist/packet-HUATNLJX-CkqjFdAv.js +21 -0
- package/dist/pascal-DU4CtAUu.js +4 -0
- package/dist/perl-Bae6k32u.js +4 -0
- package/dist/pie-WTHONI2E-D0rWwX5P.js +21 -0
- package/dist/{pieDiagram-ADFJNKIX-CSBC0ZgF.js → pieDiagram-ADFJNKIX-C5dSQVCn.js} +28 -28
- package/dist/pig-DSIxUEgX.js +4 -0
- package/dist/powershell-31lcPgIF.js +4 -0
- package/dist/powershell-BZx53Ujw.js +236 -0
- package/dist/properties-lmYbntDG.js +4 -0
- package/dist/protobuf-BTYoCEpV.js +4 -0
- package/dist/pug-DMFM7zzO.js +5 -0
- package/dist/{pug-Bmups_z0.js → pug-PJh82u1M.js} +1 -1
- package/dist/puppet-B0ub07d-.js +4 -0
- package/dist/python-C4jT87Nt.js +5 -0
- package/dist/{q-BzWcnVri.js → q-CMoUHJ5Q.js} +3 -2
- package/dist/q-YbPYlqRI.js +4 -0
- package/dist/{quadrantDiagram-LMRXKWRM-h7nHf8xG.js → quadrantDiagram-LMRXKWRM-DlahxNiy.js} +7 -7
- package/dist/r-OfNu6HAI.js +4 -0
- package/dist/radar-NJJJXTRR-Bxqv4O5a.js +21 -0
- package/dist/{range-CgK0-PEw.js → range-DxfkexCE.js} +3 -3
- package/dist/{react-plotly-BZakcxdv.js → react-plotly-D_IAfR8f.js} +4364 -4705
- package/dist/{requirementDiagram-4UW4RH46-BGEurQYq.js → requirementDiagram-4UW4RH46-DTkinyvU.js} +17 -17
- package/dist/rpm-D_3b5peD.js +5 -0
- package/dist/ruby-CehsJy_T.js +4 -0
- package/dist/{sankeyDiagram-GR3RE2ED-CxeJ_jfl.js → sankeyDiagram-GR3RE2ED-CsLnEnnq.js} +3 -3
- package/dist/sas-DwQHzPoF.js +4 -0
- package/dist/scheme-B6ArxiQu.js +4 -0
- package/dist/{sequenceDiagram-C3RYC4MD-CbFxwyr_.js → sequenceDiagram-C3RYC4MD-BdEOR6SC.js} +20 -30
- package/dist/shell-AHmQgDfc.js +4 -0
- package/dist/sieve-CgodKOcx.js +4 -0
- package/dist/{simple-mode-Cgyya8F-.js → simple-mode-BP3Jd4vf.js} +1 -1
- package/dist/{slides-component-BEyG25AH.js → slides-component-2bbal1YJ.js} +24 -46
- package/dist/smalltalk-BeFzDkbo.js +4 -0
- package/dist/sparql-BWxq-Lnx.js +4 -0
- package/dist/{src-BNNJRxz3.js → src-DZkaBUmt.js} +6 -6
- package/dist/{stateDiagram-KXAO66HF-A61bMf29.js → stateDiagram-KXAO66HF-DQLH2jhP.js} +39 -41
- package/dist/stateDiagram-v2-UMBNRL4Z-D9v8fKjF.js +38 -0
- package/dist/stex-Dvaq0qsm.js +5 -0
- package/dist/style.css +1 -1
- package/dist/stylus-Ge0ofWlZ.js +4 -0
- package/dist/swift-CjQfbVxV.js +4 -0
- package/dist/tcl-CAGDF11K.js +4 -0
- package/dist/textile-CrXreJtf.js +4 -0
- package/dist/{time-D3tzCqJ6.js → time-CFkXkVrt.js} +1 -1
- package/dist/{timeline-definition-XQNQX7LJ-BwdsB7CR.js → timeline-definition-XQNQX7LJ-bToVq14i.js} +4 -5
- package/dist/{timer-D3Zlu9ow.js → timer-CzOhIJuk.js} +2 -2
- package/dist/{toNumber-efKT08hh.js → toNumber-EFF1Z9T1.js} +2 -2
- package/dist/{toString-BvCd3yJc.js → toString-C2mCkasT.js} +2 -2
- package/dist/toml-AdLXKwEi.js +4 -0
- package/dist/{toml-CIUkU1CP.js → toml-eSl4PUAH.js} +6 -2
- package/dist/treemap-75Q7IDZK-Da9Jv6a_.js +21 -0
- package/dist/troff-C-LaM2ex.js +4 -0
- package/dist/ttcn-DTclUi6T.js +4 -0
- package/dist/ttcn-cfg-BtBPbmLX.js +4 -0
- package/dist/turtle-BODDDg5O.js +4 -0
- package/dist/{types-Dcb1hf55.js → types-CRXV0KD5.js} +385 -252
- package/dist/{useAsyncData-DAtPzJzP.js → useAsyncData-uMVTsDI9.js} +1 -1
- package/dist/{useDateFormatter-CiUlIu7v.js → useDateFormatter-Dcz7jstn.js} +6 -6
- package/dist/{useTheme-CmsvrO5o.js → useTheme-NbEx-ZNV.js} +14 -10
- package/dist/vb-Cb1HQHii.js +4 -0
- package/dist/vbscript-CpXOP4wZ.js +4 -0
- package/dist/{vega-component-B3LA6qbm.js → vega-component-hegVmfuS.js} +21 -21
- package/dist/{vega-loader.browser.module-Bi3ttvdj.js → vega-loader.browser.module-DcW8jnKp.js} +1 -2
- package/dist/velocity-Dz0rBQIk.js +4 -0
- package/dist/verilog-6Di9aLKw.js +4 -0
- package/dist/vhdl-BRNesXYc.js +4 -0
- package/dist/webidl-BpRNYIYn.js +4 -0
- package/dist/xquery-DXWcJ7b6.js +4 -0
- package/dist/{xychartDiagram-6GGTOJPD-BJRRi5HC.js → xychartDiagram-6GGTOJPD-C7Bhm_yt.js} +12 -13
- package/dist/yacas-DbSARPz4.js +4 -0
- package/dist/z80-DzslPj_l.js +4 -0
- package/dist/{zod-UPQf9SGn.js → zod-ChY6miG5.js} +71 -81
- package/package.json +12 -12
- package/src/__mocks__/requests.ts +2 -0
- package/src/__tests__/chat-history.test.ts +123 -0
- package/src/components/app-config/ai-config.tsx +23 -0
- package/src/components/app-config/mcp-config.tsx +42 -2
- package/src/components/app-config/user-config-form.tsx +29 -49
- package/src/components/chat/acp/__tests__/context-utils.test.ts +1 -1
- package/src/components/chat/acp/agent-panel.tsx +1 -1
- package/src/components/chat/acp/blocks.tsx +46 -53
- package/src/components/chat/acp/common.tsx +1 -1
- package/src/components/chat/acp/context-utils.ts +1 -1
- package/src/components/chat/acp/session-tabs.tsx +1 -1
- package/src/components/chat/chat-history-popover.tsx +125 -0
- package/src/components/chat/chat-history-utils.ts +69 -0
- package/src/components/chat/chat-panel.tsx +9 -57
- package/src/components/chat/chat-utils.ts +11 -4
- package/src/components/data-table/__tests__/header-items.test.tsx +117 -0
- package/src/components/data-table/column-header.tsx +4 -2
- package/src/components/data-table/columns.tsx +2 -1
- package/src/components/data-table/data-table.tsx +7 -2
- package/src/components/data-table/header-items.tsx +63 -10
- 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 +6 -1
- package/src/components/editor/__tests__/data-attributes.test.tsx +1 -1
- package/src/components/editor/actions/useNotebookActions.tsx +2 -4
- package/src/components/editor/ai/__tests__/completion-utils.test.ts +23 -31
- package/src/components/editor/ai/ai-completion-editor.tsx +135 -5
- package/src/components/editor/ai/completion-handlers.tsx +106 -22
- package/src/components/editor/cell/CreateCellButton.tsx +14 -2
- package/src/components/editor/cell/code/cell-editor.tsx +6 -0
- 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/types.ts +66 -22
- package/src/components/editor/chrome/wrapper/app-chrome.tsx +2 -0
- package/src/components/editor/database/schemas.ts +2 -10
- package/src/components/editor/errors/auto-fix.tsx +138 -32
- package/src/components/editor/errors/fix-mode.ts +15 -0
- package/src/components/editor/navigation/__tests__/clipboard.test.ts +0 -5
- package/src/components/editor/navigation/clipboard.ts +2 -1
- package/src/components/editor/{Cell.tsx → notebook-cell.tsx} +25 -8
- package/src/components/editor/output/ConsoleOutput.tsx +27 -33
- package/src/components/editor/output/JsonOutput.tsx +9 -0
- package/src/components/editor/output/MarimoErrorOutput.tsx +4 -34
- package/src/components/editor/output/MarimoTracebackOutput.tsx +10 -7
- package/src/components/editor/output/__tests__/json-output.test.ts +43 -0
- package/src/components/editor/package-alert.tsx +3 -0
- package/src/components/editor/renderers/{CellArray.tsx → cell-array.tsx} +1 -1
- package/src/components/forms/__tests__/form-utils.test.ts +6 -4
- package/src/components/icons/copy-icon.tsx +11 -5
- package/src/components/mcp/hooks.ts +48 -0
- package/src/components/mcp/mcp-status-indicator.tsx +144 -0
- package/src/components/shortcuts/renderShortcut.tsx +3 -1
- package/src/components/ui/button.tsx +2 -0
- package/src/components/ui/confirmation-button.tsx +85 -0
- package/src/components/ui/number-field.tsx +4 -1
- package/src/components/ui/switch.tsx +2 -0
- package/src/core/ai/context/providers/__tests__/__snapshots__/tables.test.ts.snap +13 -19
- package/src/core/ai/context/providers/__tests__/cell-output.test.ts +0 -1
- package/src/core/ai/context/providers/__tests__/datasource.test.ts +14 -7
- package/src/core/ai/context/providers/__tests__/error.test.ts +24 -15
- package/src/core/ai/context/providers/cell-output.ts +5 -5
- package/src/core/ai/context/providers/common.ts +13 -4
- package/src/core/ai/context/providers/datasource.ts +56 -21
- package/src/core/ai/context/providers/error.ts +3 -4
- package/src/core/ai/context/providers/file.ts +2 -2
- package/src/core/ai/context/providers/tables.ts +36 -8
- package/src/core/ai/context/providers/variable.ts +2 -3
- package/src/core/ai/state.ts +6 -3
- package/src/core/ai/tools/__tests__/registry.test.ts +33 -8
- package/src/core/ai/tools/base.ts +81 -1
- package/src/core/ai/tools/registry.ts +36 -10
- package/src/core/ai/tools/sample-tool.ts +44 -8
- package/src/core/cache/requests.ts +5 -0
- package/src/core/cells/__tests__/cells.test.ts +6 -6
- package/src/core/cells/cells.ts +13 -14
- package/src/core/cells/scrollCellIntoView.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/__tests__/setup.test.ts +1 -0
- package/src/core/codemirror/cm.ts +3 -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__/sql.test.ts +24 -6
- package/src/core/codemirror/language/languages/python.ts +1 -3
- package/src/core/codemirror/language/languages/sql/sql.ts +23 -13
- package/src/core/codemirror/language/panel/panel.tsx +1 -6
- 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/types.ts +0 -13
- package/src/core/codemirror/replace-editor-content.ts +87 -0
- package/src/core/config/__tests__/config-schema.test.ts +5 -0
- package/src/core/config/config-schema.ts +10 -0
- package/src/core/config/feature-flag.tsx +2 -6
- package/src/core/edit-app.tsx +1 -1
- package/src/core/errors/__tests__/errors.test.ts +1 -0
- package/src/core/errors/errors.ts +20 -6
- 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/network/CachingRequestRegistry.ts +2 -2
- 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/saving/save-component.tsx +43 -36
- package/src/core/wasm/bridge.ts +2 -0
- package/src/core/websocket/useMarimoWebSocket.tsx +8 -0
- package/src/css/app/codemirror-completions.css +1 -1
- package/src/custom.d.ts +2 -0
- package/src/plugins/core/registerReactComponent.tsx +5 -1
- package/src/plugins/impl/DataTablePlugin.tsx +19 -19
- package/src/plugins/impl/__tests__/DateTimePickerPlugin.test.tsx +32 -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/stories/cell.stories.tsx +1 -1
- package/src/stories/layout/vertical/one-column.stories.tsx +1 -1
- package/src/utils/__tests__/formatting.test.ts +107 -0
- package/src/utils/__tests__/json-parser.test.ts +13 -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 +24 -1
- 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-BeNtI_tJ.js +0 -1
- package/dist/assets/worker-DnuXpGWN.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/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/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/dist/{apl-DZqo8Elt.js → apl-CEHentF4.js} +0 -0
- /package/dist/{asciiarmor-DTzHAIeX.js → asciiarmor-DURYiCS0.js} +0 -0
- /package/dist/{asn1-DrAXKsZH.js → asn1-ETAiEoXY.js} +0 -0
- /package/dist/{asterisk-oF4U3h48.js → asterisk-DTpbbXPb.js} +0 -0
- /package/dist/{brainfuck-BYgLey30.js → brainfuck-BWQep-SA.js} +0 -0
- /package/dist/{clojure-Bs2M3OUY.js → clojure-BzFapDkA.js} +0 -0
- /package/dist/{cmake-DpI8vxJN.js → cmake-DvlbIC8x.js} +0 -0
- /package/dist/{cobol-BQyrWo72.js → cobol-BrEI4cPR.js} +0 -0
- /package/dist/{coffeescript-9ke9UHmw.js → coffeescript-B6cvu8mO.js} +0 -0
- /package/dist/{common-keywords-BzgeAvH1.js → common-keywords-WqQm7W8t.js} +0 -0
- /package/dist/{commonlisp-DghUdrUH.js → commonlisp-BIT8PQqi.js} +0 -0
- /package/dist/{crystal-DEf_SInh.js → crystal-B_UcPArT.js} +0 -0
- /package/dist/{css-BzTU9lNO.js → css-dHbnt_zl.js} +0 -0
- /package/dist/{cypher-a2v0c11S.js → cypher-Dh3FOpL7.js} +0 -0
- /package/dist/{d-SAswny-M.js → d-CQD1IHee.js} +0 -0
- /package/dist/{diff-OJ-xLXcG.js → diff-CpF_IDx0.js} +0 -0
- /package/dist/{dtd-BsUf-rer.js → dtd-DYoNpy6c.js} +0 -0
- /package/dist/{duckdb-keywords-B0NOra5o.js → duckdb-keywords-CdIsl9L0.js} +0 -0
- /package/dist/{dylan-C0ZYngjn.js → dylan-Bc_2G1E-.js} +0 -0
- /package/dist/{ebnf-DF1xx0b_.js → ebnf-jGVT_YpN.js} +0 -0
- /package/dist/{ecl-Bsuvoouq.js → ecl-UIU-P-Ar.js} +0 -0
- /package/dist/{eiffel-DgfSpLi-.js → eiffel-C90Oyuix.js} +0 -0
- /package/dist/{elm-GNxDj-5E.js → elm-B9fWSySj.js} +0 -0
- /package/dist/{erlang-Ds3uY1kL.js → erlang-Ccff0UAn.js} +0 -0
- /package/dist/{fcl-CqBgSioc.js → fcl-CGR8NxAg.js} +0 -0
- /package/dist/{forth-JCaLysGk.js → forth-U1ROGcBY.js} +0 -0
- /package/dist/{fortran-Dc2AoKAl.js → fortran-3nOkjDmc.js} +0 -0
- /package/dist/{gas-Q4Uz82YW.js → gas-B_4H5FzV.js} +0 -0
- /package/dist/{gherkin-Dpxe49sQ.js → gherkin-B0eru5Uz.js} +0 -0
- /package/dist/{groovy-D8mTRCu6.js → groovy-dqjtZUVf.js} +0 -0
- /package/dist/{haskell-2_8cC4wY.js → haskell-DFzCCQzo.js} +0 -0
- /package/dist/{haxe-Bl9zkZlz.js → haxe-Da8Pj5RT.js} +0 -0
- /package/dist/{http-DKCqY6yS.js → http-1HACL_9s.js} +0 -0
- /package/dist/{idl-Dn-HNfGW.js → idl-D3NXs5iM.js} +0 -0
- /package/dist/{jinja2-JjFiAGKk.js → jinja2-gBHAxUdF.js} +0 -0
- /package/dist/{julia-R5wne8eu.js → julia-bG-6nJ-_.js} +0 -0
- /package/dist/{livescript-DSwokrYj.js → livescript-BlsRC8UJ.js} +0 -0
- /package/dist/{lua-CgXfrp2-.js → lua-BbDC0_5w.js} +0 -0
- /package/dist/{mathematica-BVli92MR.js → mathematica-YZTe3-PF.js} +0 -0
- /package/dist/{mbox-CMFlocdS.js → mbox-CY5idp08.js} +0 -0
- /package/dist/{mirc-BkW04Zpc.js → mirc-CbQuFZKk.js} +0 -0
- /package/dist/{mllike-DEjvHvNV.js → mllike-DsbHMX-5.js} +0 -0
- /package/dist/{modelica-CxDn-oje.js → modelica-CQuvsOQk.js} +0 -0
- /package/dist/{mscgen-D78wmE-w.js → mscgen-LIpBP9VR.js} +0 -0
- /package/dist/{mumps-Bi0IvPOV.js → mumps-Ct5NXoaG.js} +0 -0
- /package/dist/{nginx-DErPZFhX.js → nginx-Dvc62C8z.js} +0 -0
- /package/dist/{ntriples-Btyp6wRL.js → ntriples-jVkxWUuv.js} +0 -0
- /package/dist/{octave-CZA6-2F8.js → octave-jGOImUB0.js} +0 -0
- /package/dist/{oz-Bm6LSNfE.js → oz-Y0FKDMS2.js} +0 -0
- /package/dist/{pascal-B4J6a9BH.js → pascal-BaLtPWWB.js} +0 -0
- /package/dist/{perl-CzVqxS08.js → perl-CjfE0JLo.js} +0 -0
- /package/dist/{pig-Clh03cnn.js → pig-DE4epV99.js} +0 -0
- /package/dist/{properties-D7ch1Wyb.js → properties-CLyCG5C-.js} +0 -0
- /package/dist/{protobuf-DrkdrMPK.js → protobuf-BjBBs_V4.js} +0 -0
- /package/dist/{puppet-BtZG8zdO.js → puppet-ZImLuomA.js} +0 -0
- /package/dist/{python-B6FKOVIv.js → python-C9YN71pR.js} +0 -0
- /package/dist/{r-Dnvo5-96.js → r-DILmKWWW.js} +0 -0
- /package/dist/{rpm-B1DrgfnX.js → rpm-fpIsm1Kr.js} +0 -0
- /package/dist/{ruby-CelfUg17.js → ruby-BuiQI41h.js} +0 -0
- /package/dist/{sas-DfSQFMWG.js → sas-C76sJ1zF.js} +0 -0
- /package/dist/{scheme-BplhaWuO.js → scheme-DHjM-txv.js} +0 -0
- /package/dist/{shell-DqU5OS2c.js → shell--7NmGJ9p.js} +0 -0
- /package/dist/{sieve-BE4_IyGa.js → sieve-DaPvBv1M.js} +0 -0
- /package/dist/{smalltalk-B_WPL8Nx.js → smalltalk-KPvwrjCs.js} +0 -0
- /package/dist/{solr-DlJFg7H5.js → solr-PvZUtEDb.js} +0 -0
- /package/dist/{sparql-7XIlcOgW.js → sparql-CXSUIQer.js} +0 -0
- /package/dist/{spreadsheet-BdZSVwVp.js → spreadsheet-DPJdGPkx.js} +0 -0
- /package/dist/{sql-CCrq7lfJ.js → sql-Dp4ZLSIa.js} +0 -0
- /package/dist/{stex-BiFc8QAu.js → stex-CeXW4zzk.js} +0 -0
- /package/dist/{stylus-DlSH9xpH.js → stylus-BXcmrg9w.js} +0 -0
- /package/dist/{swift-e3tMTZgJ.js → swift-DD8I7hKP.js} +0 -0
- /package/dist/{tcl-DfZMC20G.js → tcl-B9Lp4GtA.js} +0 -0
- /package/dist/{textile-DaSeca5U.js → textile-qdiY0teq.js} +0 -0
- /package/dist/{tiddlywiki-dfoiz8pS.js → tiddlywiki-t32lkubq.js} +0 -0
- /package/dist/{tiki-yJbQzhma.js → tiki-B0qKrSMl.js} +0 -0
- /package/dist/{troff-FN_FrCXR.js → troff-105XJOEu.js} +0 -0
- /package/dist/{ttcn-7_i4HlyB.js → ttcn-1_BxDcM8.js} +0 -0
- /package/dist/{ttcn-cfg-B46AlBUV.js → ttcn-cfg-Cn_XgXiw.js} +0 -0
- /package/dist/{turtle-QQfeFveR.js → turtle-BI6LyfEu.js} +0 -0
- /package/dist/{vb-DToPVnLa.js → vb-BecoBfmr.js} +0 -0
- /package/dist/{vbscript-CtsNaTz4.js → vbscript-De-zpA4i.js} +0 -0
- /package/dist/{velocity-CAoNe6ns.js → velocity-DhlYJTrD.js} +0 -0
- /package/dist/{verilog-DrDOMiJq.js → verilog-BDZgxDOW.js} +0 -0
- /package/dist/{vhdl-DnO0OEPh.js → vhdl-CV0OKTbp.js} +0 -0
- /package/dist/{webidl-Or6d1ZfA.js → webidl-BOM1Fs0O.js} +0 -0
- /package/dist/{xquery-CEp_Mcpr.js → xquery-CltP_CGh.js} +0 -0
- /package/dist/{yacas-DgnYrSlp.js → yacas-Dch4E2Dg.js} +0 -0
- /package/dist/{z80-DlG_kyeB.js → z80-B5Yly27o.js} +0 -0
|
@@ -3,10 +3,14 @@
|
|
|
3
3
|
import type { Completion } from "@codemirror/autocomplete";
|
|
4
4
|
import { createRoot } from "react-dom/client";
|
|
5
5
|
import { dbDisplayName } from "@/components/databases/display";
|
|
6
|
+
import { cellDataAtom } from "@/core/cells/cells";
|
|
7
|
+
import type { CellId } from "@/core/cells/ids";
|
|
8
|
+
import { LanguageAdapters } from "@/core/codemirror/language/LanguageAdapters";
|
|
6
9
|
import { renderDatasourceInfo } from "@/core/codemirror/language/languages/sql/renderers";
|
|
7
10
|
import {
|
|
8
11
|
type ConnectionsMap,
|
|
9
12
|
type DatasetTablesMap,
|
|
13
|
+
dataSourceConnectionsAtom,
|
|
10
14
|
getTableType,
|
|
11
15
|
} from "@/core/datasets/data-source-connections";
|
|
12
16
|
import {
|
|
@@ -14,10 +18,11 @@ import {
|
|
|
14
18
|
INTERNAL_SQL_ENGINES,
|
|
15
19
|
} from "@/core/datasets/engines";
|
|
16
20
|
import type { DataSourceConnection, DataTable } from "@/core/kernel/messages";
|
|
21
|
+
import { store } from "@/core/state/jotai";
|
|
17
22
|
import type { AIContextItem } from "../registry";
|
|
18
23
|
import { AIContextProvider } from "../registry";
|
|
19
24
|
import { contextToXml } from "../utils";
|
|
20
|
-
import { Boosts } from "./common";
|
|
25
|
+
import { Boosts, Sections } from "./common";
|
|
21
26
|
|
|
22
27
|
type NamedDatasource = Omit<
|
|
23
28
|
DataSourceConnection,
|
|
@@ -37,10 +42,12 @@ export interface DatasourceContextItem extends AIContextItem {
|
|
|
37
42
|
};
|
|
38
43
|
}
|
|
39
44
|
|
|
45
|
+
const CONTEXT_TYPE = "datasource";
|
|
46
|
+
|
|
40
47
|
export class DatasourceContextProvider extends AIContextProvider<DatasourceContextItem> {
|
|
41
48
|
readonly title = "Datasource";
|
|
42
49
|
readonly mentionPrefix = "@";
|
|
43
|
-
readonly contextType =
|
|
50
|
+
readonly contextType = CONTEXT_TYPE;
|
|
44
51
|
private connectionsMap: ConnectionsMap;
|
|
45
52
|
private dataframes: DataTable[];
|
|
46
53
|
|
|
@@ -53,24 +60,35 @@ export class DatasourceContextProvider extends AIContextProvider<DatasourceConte
|
|
|
53
60
|
}
|
|
54
61
|
|
|
55
62
|
getItems(): DatasourceContextItem[] {
|
|
56
|
-
return [...this.connectionsMap.values()]
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
63
|
+
return [...this.connectionsMap.values()]
|
|
64
|
+
.map((connection): DatasourceContextItem | null => {
|
|
65
|
+
let description = "Database schema.";
|
|
66
|
+
const data: DatasourceContextItem["data"] = {
|
|
67
|
+
connection: connection,
|
|
68
|
+
};
|
|
69
|
+
|
|
70
|
+
if (INTERNAL_SQL_ENGINES.has(connection.name)) {
|
|
71
|
+
data.tables = this.dataframes;
|
|
72
|
+
description =
|
|
73
|
+
"Database schema and the dataframes that can be queried";
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
// Hide empty datasources
|
|
77
|
+
const hasNoTables =
|
|
78
|
+
connection.databases.length === 0 && (data.tables?.length ?? 0) === 0;
|
|
79
|
+
if (hasNoTables) {
|
|
80
|
+
return null;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
return {
|
|
84
|
+
uri: this.asURI(connection.name),
|
|
85
|
+
name: connection.name,
|
|
86
|
+
description: description,
|
|
87
|
+
type: this.contextType,
|
|
88
|
+
data: data,
|
|
89
|
+
};
|
|
90
|
+
})
|
|
91
|
+
.filter(Boolean);
|
|
74
92
|
}
|
|
75
93
|
|
|
76
94
|
formatContext(item: DatasourceContextItem): string {
|
|
@@ -115,7 +133,7 @@ export class DatasourceContextProvider extends AIContextProvider<DatasourceConte
|
|
|
115
133
|
detail: dbDisplayName(dataConnection.dialect),
|
|
116
134
|
boost: Boosts.MEDIUM,
|
|
117
135
|
type: this.contextType,
|
|
118
|
-
section:
|
|
136
|
+
section: Sections.DATA_SOURCES,
|
|
119
137
|
info: () => {
|
|
120
138
|
const infoContainer = document.createElement("div");
|
|
121
139
|
infoContainer.classList.add("mo-cm-tooltip", "docs-documentation");
|
|
@@ -129,3 +147,20 @@ export class DatasourceContextProvider extends AIContextProvider<DatasourceConte
|
|
|
129
147
|
};
|
|
130
148
|
}
|
|
131
149
|
}
|
|
150
|
+
|
|
151
|
+
export function getDatasourceContext(cellId: CellId): string | null {
|
|
152
|
+
const cellData = store.get(cellDataAtom(cellId));
|
|
153
|
+
const code = cellData?.code;
|
|
154
|
+
if (!code || code.trim() === "") {
|
|
155
|
+
return null;
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
const [_sqlStatement, _, metadata] = LanguageAdapters.sql.transformIn(code);
|
|
159
|
+
const datasourceSchema = store
|
|
160
|
+
.get(dataSourceConnectionsAtom)
|
|
161
|
+
.connectionsMap.get(metadata.engine);
|
|
162
|
+
if (datasourceSchema) {
|
|
163
|
+
return `@${CONTEXT_TYPE}://${datasourceSchema.name}`;
|
|
164
|
+
}
|
|
165
|
+
return null;
|
|
166
|
+
}
|
|
@@ -9,7 +9,7 @@ import { logNever } from "@/utils/assertNever";
|
|
|
9
9
|
import { PluralWord } from "@/utils/pluralize";
|
|
10
10
|
import { type AIContextItem, AIContextProvider } from "../registry";
|
|
11
11
|
import { contextToXml } from "../utils";
|
|
12
|
-
import {
|
|
12
|
+
import { Sections } from "./common";
|
|
13
13
|
|
|
14
14
|
export interface ErrorContextItem extends AIContextItem {
|
|
15
15
|
type: "error";
|
|
@@ -111,10 +111,9 @@ export class ErrorContextProvider extends AIContextProvider<ErrorContextItem> {
|
|
|
111
111
|
label: "@Errors",
|
|
112
112
|
displayLabel: "Errors",
|
|
113
113
|
detail: `${item.data.errors.length} ${errorsTxt.pluralize(item.data.errors.length)}`,
|
|
114
|
-
boost: Boosts.ERROR,
|
|
115
114
|
type: "error",
|
|
116
115
|
apply: "@Errors",
|
|
117
|
-
section:
|
|
116
|
+
section: Sections.ERROR,
|
|
118
117
|
info: () => {
|
|
119
118
|
const infoContainer = document.createElement("div");
|
|
120
119
|
infoContainer.classList.add(
|
|
@@ -150,7 +149,7 @@ export class ErrorContextProvider extends AIContextProvider<ErrorContextItem> {
|
|
|
150
149
|
return {
|
|
151
150
|
label: "Error",
|
|
152
151
|
displayLabel: "Error",
|
|
153
|
-
|
|
152
|
+
section: Sections.ERROR,
|
|
154
153
|
};
|
|
155
154
|
}
|
|
156
155
|
|
|
@@ -15,7 +15,7 @@ import { type Base64String, base64ToDataURL } from "@/utils/json/base64";
|
|
|
15
15
|
import { Logger } from "@/utils/Logger";
|
|
16
16
|
import { type AIContextItem, AIContextProvider } from "../registry";
|
|
17
17
|
import { contextToXml } from "../utils";
|
|
18
|
-
import { Boosts } from "./common";
|
|
18
|
+
import { Boosts, Sections } from "./common";
|
|
19
19
|
export interface FileContextItem extends AIContextItem {
|
|
20
20
|
type: "file";
|
|
21
21
|
data: {
|
|
@@ -190,7 +190,7 @@ export class FileContextProvider extends AIContextProvider<FileContextItem> {
|
|
|
190
190
|
return {
|
|
191
191
|
...this.createBasicCompletion(item),
|
|
192
192
|
type: "file",
|
|
193
|
-
section:
|
|
193
|
+
section: Sections.FILE,
|
|
194
194
|
boost: data.isDirectory ? Boosts.MEDIUM : Boosts.LOW,
|
|
195
195
|
detail: data.path,
|
|
196
196
|
displayLabel: `${icon} ${name}`,
|
|
@@ -9,7 +9,7 @@ import type { DataTable } from "@/core/kernel/messages";
|
|
|
9
9
|
import type { AIContextItem } from "../registry";
|
|
10
10
|
import { AIContextProvider } from "../registry";
|
|
11
11
|
import { contextToXml } from "../utils";
|
|
12
|
-
import { Boosts } from "./common";
|
|
12
|
+
import { Boosts, Sections } from "./common";
|
|
13
13
|
|
|
14
14
|
export interface TableContextItem extends AIContextItem {
|
|
15
15
|
type: "data";
|
|
@@ -38,21 +38,46 @@ export class TableContextProvider extends AIContextProvider<TableContextItem> {
|
|
|
38
38
|
|
|
39
39
|
formatContext(item: TableContextItem): string {
|
|
40
40
|
const { data } = item;
|
|
41
|
-
const { columns, source, num_rows, num_columns, name } =
|
|
41
|
+
const { columns, source, num_rows, num_columns, name, variable_name } =
|
|
42
|
+
data;
|
|
43
|
+
|
|
44
|
+
// Build shape information
|
|
42
45
|
const shape = [
|
|
43
|
-
num_rows
|
|
44
|
-
num_columns
|
|
46
|
+
num_rows != null ? `${num_rows} rows` : undefined,
|
|
47
|
+
num_columns != null ? `${num_columns} columns` : undefined,
|
|
45
48
|
]
|
|
46
49
|
.filter(Boolean)
|
|
47
50
|
.join(", ");
|
|
48
51
|
|
|
49
52
|
let details = "";
|
|
53
|
+
|
|
54
|
+
// Add shape information
|
|
50
55
|
if (shape) {
|
|
51
|
-
details +=
|
|
56
|
+
details += `Shape: ${shape}\n`;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
// Add variable name if available
|
|
60
|
+
if (variable_name) {
|
|
61
|
+
details += `Variable: ${variable_name}\n`;
|
|
52
62
|
}
|
|
53
63
|
|
|
64
|
+
// Add column information with sample values
|
|
54
65
|
if (columns && columns.length > 0) {
|
|
55
|
-
details +=
|
|
66
|
+
details += "Columns:\n";
|
|
67
|
+
for (const col of columns) {
|
|
68
|
+
let columnInfo = ` ${col.name} (${col.type})`;
|
|
69
|
+
|
|
70
|
+
// Add sample values if available
|
|
71
|
+
if (col.sample_values && col.sample_values.length > 0) {
|
|
72
|
+
const samples = col.sample_values
|
|
73
|
+
.slice(0, 3) // Limit to first 3 samples
|
|
74
|
+
.map((val) => (val === null ? "null" : String(val)))
|
|
75
|
+
.join(", ");
|
|
76
|
+
columnInfo += ` - samples: [${samples}]`;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
details += `${columnInfo}\n`;
|
|
80
|
+
}
|
|
56
81
|
}
|
|
57
82
|
|
|
58
83
|
return contextToXml({
|
|
@@ -61,7 +86,7 @@ export class TableContextProvider extends AIContextProvider<TableContextItem> {
|
|
|
61
86
|
name: name,
|
|
62
87
|
source: source ?? "unknown",
|
|
63
88
|
},
|
|
64
|
-
details: details,
|
|
89
|
+
details: details.trim(),
|
|
65
90
|
});
|
|
66
91
|
}
|
|
67
92
|
|
|
@@ -78,7 +103,10 @@ export class TableContextProvider extends AIContextProvider<TableContextItem> {
|
|
|
78
103
|
: Boosts.REMOTE_TABLE,
|
|
79
104
|
type: getTableType(table),
|
|
80
105
|
apply: `@${tableName}`,
|
|
81
|
-
section:
|
|
106
|
+
section: {
|
|
107
|
+
name: getTableType(table) === "dataframe" ? "Dataframe" : "Table",
|
|
108
|
+
rank: Sections.TABLE.rank,
|
|
109
|
+
},
|
|
82
110
|
info: () => this.createTableInfoElement(tableName, table),
|
|
83
111
|
};
|
|
84
112
|
}
|
|
@@ -6,7 +6,7 @@ import type { DatasetTablesMap } from "@/core/datasets/data-source-connections";
|
|
|
6
6
|
import type { Variable, Variables } from "@/core/variables/types";
|
|
7
7
|
import { type AIContextItem, AIContextProvider } from "../registry";
|
|
8
8
|
import { contextToXml } from "../utils";
|
|
9
|
-
import {
|
|
9
|
+
import { Sections } from "./common";
|
|
10
10
|
|
|
11
11
|
export interface VariableContextItem extends AIContextItem {
|
|
12
12
|
type: "variable";
|
|
@@ -58,9 +58,8 @@ export class VariableContextProvider extends AIContextProvider<VariableContextIt
|
|
|
58
58
|
label: `@${variable.name}`,
|
|
59
59
|
displayLabel: variable.name,
|
|
60
60
|
detail: variable.dataType ?? "",
|
|
61
|
-
boost: Boosts.VARIABLE,
|
|
62
61
|
type: this.contextType,
|
|
63
|
-
section:
|
|
62
|
+
section: Sections.VARIABLE,
|
|
64
63
|
info: () => {
|
|
65
64
|
return createVariableInfoElement(variable);
|
|
66
65
|
},
|
package/src/core/ai/state.ts
CHANGED
|
@@ -13,10 +13,13 @@ const KEY = "marimo:ai:chatState:v5";
|
|
|
13
13
|
|
|
14
14
|
export type ChatId = TypedString<"ChatId">;
|
|
15
15
|
|
|
16
|
-
export
|
|
16
|
+
export interface AiCompletionCell {
|
|
17
17
|
cellId: CellId;
|
|
18
18
|
initialPrompt?: string;
|
|
19
|
-
|
|
19
|
+
triggerImmediately?: boolean;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export const aiCompletionCellAtom = atom<AiCompletionCell | null>(null);
|
|
20
23
|
|
|
21
24
|
const INCLUDE_OTHER_CELLS_KEY = "marimo:ai:includeOtherCells";
|
|
22
25
|
export const includeOtherCellsAtom = atomWithStorage<boolean>(
|
|
@@ -86,7 +89,7 @@ export const activeChatAtom = atom(
|
|
|
86
89
|
}
|
|
87
90
|
return state.chats.get(state.activeChatId);
|
|
88
91
|
},
|
|
89
|
-
(
|
|
92
|
+
(_get, set, chatId: ChatId | null) => {
|
|
90
93
|
set(chatStateAtom, (prev) => ({
|
|
91
94
|
...prev,
|
|
92
95
|
activeChatId: chatId,
|
|
@@ -13,18 +13,43 @@ describe("FrontendToolRegistry", () => {
|
|
|
13
13
|
|
|
14
14
|
it("invokes a tool with valid args and validates input/output", async () => {
|
|
15
15
|
const registry = new FrontendToolRegistry([new TestFrontendTool()]);
|
|
16
|
-
const
|
|
17
|
-
|
|
16
|
+
const response = await registry.invoke("test_frontend_tool", {
|
|
17
|
+
name: "Alice",
|
|
18
|
+
});
|
|
19
|
+
|
|
20
|
+
// Check InvokeResult wrapper
|
|
21
|
+
expect(response.tool_name).toBe("test_frontend_tool");
|
|
22
|
+
expect(response.error).toBeNull();
|
|
23
|
+
|
|
24
|
+
// Check the actual tool output
|
|
25
|
+
expect(response.result).toMatchObject({
|
|
26
|
+
status: "success",
|
|
27
|
+
data: {
|
|
28
|
+
greeting: "Hello: Alice",
|
|
29
|
+
},
|
|
30
|
+
next_steps: expect.arrayContaining([expect.any(String)]),
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
// Verify timestamp is present and valid
|
|
34
|
+
const output = response.result as { data: { timestamp: string } };
|
|
35
|
+
expect(output.data.timestamp).toBeDefined();
|
|
36
|
+
expect(typeof output.data.timestamp).toBe("string");
|
|
18
37
|
});
|
|
19
38
|
|
|
20
39
|
it("returns a structured error on invalid args", async () => {
|
|
21
40
|
const registry = new FrontendToolRegistry([new TestFrontendTool()]);
|
|
22
|
-
const
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
expect(
|
|
27
|
-
expect(
|
|
41
|
+
const response = await registry.invoke("test_frontend_tool", {});
|
|
42
|
+
|
|
43
|
+
// Check InvokeResult wrapper
|
|
44
|
+
expect(response.tool_name).toBe("test_frontend_tool");
|
|
45
|
+
expect(response.result).toBeNull();
|
|
46
|
+
expect(response.error).toBeDefined();
|
|
47
|
+
expect(typeof response.error).toBe("string");
|
|
48
|
+
|
|
49
|
+
// Verify error message contains expected prefix
|
|
50
|
+
expect(response.error).toContain("Error invoking tool ToolExecutionError:");
|
|
51
|
+
expect(response.error).toContain('"code":"TOOL_ERROR"');
|
|
52
|
+
expect(response.error).toContain('"is_retryable":false');
|
|
28
53
|
});
|
|
29
54
|
|
|
30
55
|
it("returns tool schemas with expected shape and memoizes the result", () => {
|
|
@@ -1,8 +1,88 @@
|
|
|
1
1
|
/* Copyright 2024 Marimo. All rights reserved. */
|
|
2
2
|
|
|
3
|
-
import
|
|
3
|
+
import { z } from "zod";
|
|
4
4
|
import type { CopilotMode } from "./registry";
|
|
5
5
|
|
|
6
|
+
/**
|
|
7
|
+
* Status value for tool responses, mirroring status value in marimo/_ai/_tools/types.py
|
|
8
|
+
*/
|
|
9
|
+
export type StatusValue = "success" | "error" | "warning";
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Structured error for tool execution failures.
|
|
13
|
+
* Mirrors the ToolExecutionError dataclass from marimo/_ai/_tools/utils/exceptions.py
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* throw new ToolExecutionError(
|
|
17
|
+
* "Failed to fetch data",
|
|
18
|
+
* "FETCH_ERROR",
|
|
19
|
+
* true,
|
|
20
|
+
* "Check your network connection"
|
|
21
|
+
* );
|
|
22
|
+
*/
|
|
23
|
+
export class ToolExecutionError extends Error {
|
|
24
|
+
readonly code: string;
|
|
25
|
+
readonly isRetryable: boolean;
|
|
26
|
+
readonly suggestedFix?: string;
|
|
27
|
+
readonly meta?: Record<string, unknown>;
|
|
28
|
+
|
|
29
|
+
constructor(
|
|
30
|
+
message: string,
|
|
31
|
+
code = "TOOL_ERROR",
|
|
32
|
+
isRetryable = false,
|
|
33
|
+
suggestedFix?: string,
|
|
34
|
+
meta?: Record<string, unknown>,
|
|
35
|
+
) {
|
|
36
|
+
super(message);
|
|
37
|
+
this.name = "ToolExecutionError";
|
|
38
|
+
this.code = code;
|
|
39
|
+
this.isRetryable = isRetryable;
|
|
40
|
+
this.suggestedFix = suggestedFix;
|
|
41
|
+
this.meta = meta;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
toStructuredString(): string {
|
|
45
|
+
const stringError = JSON.stringify({
|
|
46
|
+
message: this.message,
|
|
47
|
+
code: this.code,
|
|
48
|
+
is_retryable: this.isRetryable,
|
|
49
|
+
suggested_fix: this.suggestedFix,
|
|
50
|
+
meta: this.meta ?? {},
|
|
51
|
+
});
|
|
52
|
+
return `Error invoking tool ${this.name}: ${stringError}`;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* Base interface for tool output responses.
|
|
58
|
+
* Mirrors the SuccessResult dataclass from marimo/_ai/_tools/types.py
|
|
59
|
+
*
|
|
60
|
+
* Tool outputs should extend this interface to include standardized
|
|
61
|
+
* metadata like next_steps, messages, and status information.
|
|
62
|
+
*/
|
|
63
|
+
export interface ToolOutputBase {
|
|
64
|
+
status?: StatusValue;
|
|
65
|
+
auth_required?: boolean;
|
|
66
|
+
next_steps?: string[];
|
|
67
|
+
action_url?: string;
|
|
68
|
+
message?: string;
|
|
69
|
+
meta?: Record<string, unknown>;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* Base Zod schema for tool outputs.
|
|
74
|
+
*
|
|
75
|
+
* Tool output schemas should extend this using .extend() to add their specific fields.
|
|
76
|
+
*/
|
|
77
|
+
export const toolOutputBaseSchema = z.object({
|
|
78
|
+
status: z.enum(["success", "error", "warning"]).optional(),
|
|
79
|
+
auth_required: z.boolean().optional(),
|
|
80
|
+
next_steps: z.array(z.string()).optional(),
|
|
81
|
+
action_url: z.string().optional(),
|
|
82
|
+
message: z.string().optional(),
|
|
83
|
+
meta: z.record(z.string(), z.unknown()).optional(),
|
|
84
|
+
});
|
|
85
|
+
|
|
6
86
|
/**
|
|
7
87
|
* Contract for a frontend tool.
|
|
8
88
|
*
|
|
@@ -3,7 +3,7 @@
|
|
|
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 type
|
|
6
|
+
import { type AiTool, ToolExecutionError } from "./base";
|
|
7
7
|
import { TestFrontendTool } from "./sample-tool";
|
|
8
8
|
|
|
9
9
|
export type AnyZodObject = ZodObject<z.ZodRawShape>;
|
|
@@ -11,6 +11,12 @@ export type AnyZodObject = ZodObject<z.ZodRawShape>;
|
|
|
11
11
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
12
12
|
type StoredTool = AiTool<any, any>;
|
|
13
13
|
|
|
14
|
+
interface InvokeResult<TName> {
|
|
15
|
+
tool_name: TName;
|
|
16
|
+
result: unknown;
|
|
17
|
+
error: string | null;
|
|
18
|
+
}
|
|
19
|
+
|
|
14
20
|
/** should be the same as marimo/_config/config.py > CopilotMode */
|
|
15
21
|
|
|
16
22
|
type ToolDefinition = components["schemas"]["ToolDefinition"];
|
|
@@ -43,7 +49,7 @@ export class FrontendToolRegistry {
|
|
|
43
49
|
async invoke<TName extends string>(
|
|
44
50
|
toolName: TName,
|
|
45
51
|
rawArgs: unknown,
|
|
46
|
-
): Promise<
|
|
52
|
+
): Promise<InvokeResult<TName>> {
|
|
47
53
|
const tool = this.getToolOrThrow(toolName);
|
|
48
54
|
const handler = tool.handler;
|
|
49
55
|
const inputSchema = tool.schema;
|
|
@@ -69,17 +75,37 @@ export class FrontendToolRegistry {
|
|
|
69
75
|
`Tool ${toolName} returned invalid output: ${strError}`,
|
|
70
76
|
);
|
|
71
77
|
}
|
|
72
|
-
const
|
|
73
|
-
return output;
|
|
74
|
-
} catch (error) {
|
|
78
|
+
const result = response.data;
|
|
75
79
|
return {
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
80
|
+
tool_name: toolName,
|
|
81
|
+
result,
|
|
82
|
+
error: null,
|
|
83
|
+
};
|
|
84
|
+
} catch (error) {
|
|
85
|
+
// Handle structured errors
|
|
86
|
+
if (error instanceof ToolExecutionError) {
|
|
87
|
+
return {
|
|
88
|
+
tool_name: toolName,
|
|
89
|
+
result: null,
|
|
90
|
+
error: error.toStructuredString(),
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
// Handle unknown/generic errors
|
|
95
|
+
const genericError = new ToolExecutionError(
|
|
96
|
+
error instanceof Error ? error.message : String(error),
|
|
97
|
+
"TOOL_ERROR",
|
|
98
|
+
false,
|
|
99
|
+
"Check the error message and try again with valid arguments.",
|
|
100
|
+
{
|
|
81
101
|
args: rawArgs,
|
|
102
|
+
errorType: error?.constructor?.name ?? typeof error,
|
|
82
103
|
},
|
|
104
|
+
);
|
|
105
|
+
return {
|
|
106
|
+
tool_name: toolName,
|
|
107
|
+
result: null,
|
|
108
|
+
error: genericError.toStructuredString(),
|
|
83
109
|
};
|
|
84
110
|
}
|
|
85
111
|
}
|
|
@@ -1,7 +1,12 @@
|
|
|
1
1
|
/* Copyright 2024 Marimo. All rights reserved. */
|
|
2
2
|
|
|
3
3
|
import { z } from "zod";
|
|
4
|
-
import
|
|
4
|
+
import {
|
|
5
|
+
type AiTool,
|
|
6
|
+
ToolExecutionError,
|
|
7
|
+
type ToolOutputBase,
|
|
8
|
+
toolOutputBaseSchema,
|
|
9
|
+
} from "./base";
|
|
5
10
|
import type { CopilotMode } from "./registry";
|
|
6
11
|
|
|
7
12
|
const description = `
|
|
@@ -11,26 +16,57 @@ Args:
|
|
|
11
16
|
- name (string): The name to include in the greeting.
|
|
12
17
|
|
|
13
18
|
Returns:
|
|
14
|
-
-
|
|
19
|
+
- Output with data containing the greeting message.
|
|
15
20
|
`;
|
|
16
21
|
|
|
17
22
|
interface Input {
|
|
18
23
|
name: string;
|
|
19
24
|
}
|
|
20
25
|
|
|
21
|
-
interface
|
|
22
|
-
|
|
26
|
+
interface GreetingData {
|
|
27
|
+
greeting: string;
|
|
28
|
+
timestamp: string;
|
|
23
29
|
}
|
|
24
30
|
|
|
25
|
-
|
|
31
|
+
interface Output extends ToolOutputBase {
|
|
32
|
+
data: GreetingData;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/** A sample frontend tool that demonstrates real tool output structure */
|
|
26
36
|
export class TestFrontendTool implements AiTool<Input, Output> {
|
|
27
37
|
readonly name = "test_frontend_tool";
|
|
28
38
|
readonly description = description;
|
|
29
39
|
readonly schema = z.object({ name: z.string() });
|
|
30
|
-
readonly outputSchema =
|
|
40
|
+
readonly outputSchema = toolOutputBaseSchema.extend({
|
|
41
|
+
data: z.object({
|
|
42
|
+
greeting: z.string(),
|
|
43
|
+
timestamp: z.string(),
|
|
44
|
+
}),
|
|
45
|
+
});
|
|
31
46
|
readonly mode: CopilotMode[] = ["ask"];
|
|
32
47
|
|
|
33
|
-
async handler({ name }: Input) {
|
|
34
|
-
|
|
48
|
+
async handler({ name }: Input): Promise<Output> {
|
|
49
|
+
// Example: Validate input and throw ToolExecutionError on invalid data
|
|
50
|
+
if (!name.trim()) {
|
|
51
|
+
throw new ToolExecutionError(
|
|
52
|
+
"Name cannot be empty",
|
|
53
|
+
"INVALID_INPUT",
|
|
54
|
+
false,
|
|
55
|
+
"Please provide a non-empty name",
|
|
56
|
+
{ field: "name", received: name },
|
|
57
|
+
);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
return {
|
|
61
|
+
status: "success",
|
|
62
|
+
data: {
|
|
63
|
+
greeting: `Hello: ${name}`,
|
|
64
|
+
timestamp: new Date().toISOString(),
|
|
65
|
+
},
|
|
66
|
+
next_steps: [
|
|
67
|
+
"You can now proceed with your next task",
|
|
68
|
+
"Try calling another tool if needed",
|
|
69
|
+
],
|
|
70
|
+
};
|
|
35
71
|
}
|
|
36
72
|
}
|
|
@@ -12,7 +12,7 @@ import {
|
|
|
12
12
|
it,
|
|
13
13
|
vi,
|
|
14
14
|
} from "vitest";
|
|
15
|
-
import type { CellHandle } from "@/components/editor/
|
|
15
|
+
import type { CellHandle } from "@/components/editor/notebook-cell";
|
|
16
16
|
import { CellId } from "@/core/cells/ids";
|
|
17
17
|
import { foldAllBulk, unfoldAllBulk } from "@/core/codemirror/editing/commands";
|
|
18
18
|
import { adaptiveLanguageConfiguration } from "@/core/codemirror/language/extension";
|
|
@@ -2094,9 +2094,9 @@ describe("cell reducer", () => {
|
|
|
2094
2094
|
`);
|
|
2095
2095
|
});
|
|
2096
2096
|
|
|
2097
|
-
it("can create and update a setup cell", () => {
|
|
2097
|
+
it("can create and noop-update a setup cell", () => {
|
|
2098
2098
|
// Create the setup cell
|
|
2099
|
-
actions.
|
|
2099
|
+
actions.addSetupCellIfDoesntExist({ code: "# Setup code" });
|
|
2100
2100
|
|
|
2101
2101
|
// Check that setup cell was created
|
|
2102
2102
|
expect(state.cellData[SETUP_CELL_ID].id).toBe(SETUP_CELL_ID);
|
|
@@ -2106,17 +2106,17 @@ describe("cell reducer", () => {
|
|
|
2106
2106
|
expect(state.cellIds.inOrderIds).toContain(SETUP_CELL_ID);
|
|
2107
2107
|
|
|
2108
2108
|
// Update the setup cell
|
|
2109
|
-
actions.
|
|
2109
|
+
actions.addSetupCellIfDoesntExist({ code: "# Updated setup code" });
|
|
2110
2110
|
|
|
2111
2111
|
// Check that the same setup cell was updated, not duplicated
|
|
2112
|
-
expect(state.cellData[SETUP_CELL_ID].code).toBe("#
|
|
2112
|
+
expect(state.cellData[SETUP_CELL_ID].code).toBe("# Setup code");
|
|
2113
2113
|
expect(state.cellData[SETUP_CELL_ID].edited).toBe(true);
|
|
2114
2114
|
expect(state.cellIds.inOrderIds).toContain(SETUP_CELL_ID);
|
|
2115
2115
|
});
|
|
2116
2116
|
|
|
2117
2117
|
it("can delete and undelete the setup cell", () => {
|
|
2118
2118
|
// Create the setup cell
|
|
2119
|
-
actions.
|
|
2119
|
+
actions.addSetupCellIfDoesntExist({ code: "# Setup code" });
|
|
2120
2120
|
|
|
2121
2121
|
// Check that setup cell was created
|
|
2122
2122
|
expect(state.cellData[SETUP_CELL_ID].id).toBe(SETUP_CELL_ID);
|