@marimo-team/islands 0.17.8 → 0.18.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.
Files changed (604) hide show
  1. package/dist/Combination-DN9sfYvo.js +2569 -0
  2. package/dist/{ConnectedDataExplorerComponent-WbiFXhKG.js → ConnectedDataExplorerComponent-Dhlx78se.js} +53 -53
  3. package/dist/angular-html-BQrFNFXr.js +7 -0
  4. package/dist/{angular-html-DOnHLneR.js → angular-html-NuAgzn7W.js} +1 -1
  5. package/dist/{angular-ts-ClZ_D57Q.js → angular-ts-DqCVY0oX.js} +5 -5
  6. package/dist/{any-language-editor-YPQMljy9.js → any-language-editor-C8uMYHwj.js} +16 -16
  7. package/dist/{apl-BQW_2HeZ.js → apl-CqAdrzTc.js} +6 -6
  8. package/dist/{arc-DqQgmHse.js → arc-JJltOFJh.js} +2 -2
  9. package/dist/{architecture-O4VJ6CD3-BAmYZukJ.js → architecture-O4VJ6CD3-D7BH29FP.js} +3 -3
  10. package/dist/{architectureDiagram-W76B3OCA-6PSfeg_h.js → architectureDiagram-W76B3OCA-BXXl3wYv.js} +22 -22
  11. package/dist/assets/__vite-browser-external-CSegkGa0.js +1 -0
  12. package/dist/assets/{worker-BrDpRi2I.js → worker-CiT2i-Vo.js} +2 -2
  13. package/dist/{astro-B_6-YJyf.js → astro-BhYIwlT9.js} +6 -6
  14. package/dist/{blade-J--jW6Qd.js → blade-C_4Ocghp.js} +8 -8
  15. package/dist/{blockDiagram-QIGZ2CNN-BBAMkEiZ.js → blockDiagram-QIGZ2CNN-BEJ-ovZ-.js} +16 -16
  16. package/dist/{bsl-DwRO_vPO.js → bsl-Cam9acj0.js} +1 -1
  17. package/dist/{button-Hye6-2X8.js → button-Css_i-3R.js} +73 -71
  18. package/dist/c-DYGEdS-r.js +4 -0
  19. package/dist/{c4Diagram-FPNF74CW-H3kajU-4.js → c4Diagram-FPNF74CW-Bec_XtUS.js} +8 -8
  20. package/dist/{cairo-C5YwJoRd.js → cairo-DzTxWLx8.js} +1 -1
  21. package/dist/{channel-DO61Dn1s.js → channel-SHZ3pH5W.js} +1 -1
  22. package/dist/{chunk-3AY6CYHV-PGaWKUmM.js → chunk-3AY6CYHV-CY56r15D.js} +10 -10
  23. package/dist/{chunk-4BX2VUAB-C2wFBih6.js → chunk-4BX2VUAB-DakkmKa6.js} +1 -1
  24. package/dist/{chunk-4KMFLZZN-BLk4DGEy.js → chunk-4KMFLZZN-PjonQa4P.js} +1 -1
  25. package/dist/{chunk-55IACEB6-DQd6AZ1u.js → chunk-55IACEB6-lM9AcPFI.js} +1 -1
  26. package/dist/{chunk-6OXUPJBA-KTKvUtax.js → chunk-6OXUPJBA-CtytfqPH.js} +7 -7
  27. package/dist/{chunk-7GE3RBXV-2QiFkaHl.js → chunk-7GE3RBXV-Ch2VFfx5.js} +1 -1
  28. package/dist/{chunk-ABZYJK2D-plHo87kc.js → chunk-ABZYJK2D-ChhHEVnH.js} +2 -2
  29. package/dist/{chunk-BN7GFLIU-D4EEpMya.js → chunk-BN7GFLIU-4gH4skZE.js} +1 -1
  30. package/dist/{chunk-CVBHYZKI-nBM-9qrT.js → chunk-CVBHYZKI-CvLGu9Zl.js} +1 -1
  31. package/dist/{chunk-CXMOBAN2-DQYc62lB.js → chunk-CXMOBAN2-DmuTyIC5.js} +6 -6
  32. package/dist/{chunk-EXTU4WIE-CzYdpCHC.js → chunk-EXTU4WIE-5gY1kHy6.js} +2 -2
  33. package/dist/{chunk-FMBD7UC4-5CTTj0Jv.js → chunk-FMBD7UC4-CktmbpHj.js} +1 -1
  34. package/dist/{chunk-JA3XYJ7Z-iN-ePWJa.js → chunk-JA3XYJ7Z-DoOh1zwr.js} +4 -4
  35. package/dist/{chunk-JEIROHC2-DJN5-Qfh.js → chunk-JEIROHC2-BxiaYL-E.js} +1 -1
  36. package/dist/{chunk-K7UQS3LO-BFLlfdsi.js → chunk-K7UQS3LO-jAauQP9f.js} +7 -7
  37. package/dist/{chunk-KMC2YHZD-BvIjRiOn.js → chunk-KMC2YHZD-DStgMcLU.js} +1 -1
  38. package/dist/{chunk-QN33PNHL-Brd7yTp3.js → chunk-QN33PNHL-a6Utqqtp.js} +2 -2
  39. package/dist/{chunk-QYVHNE3D-2JcHbPf-.js → chunk-QYVHNE3D-Di-okNtj.js} +2 -2
  40. package/dist/{chunk-QZHKN3VN-uMYxkooq.js → chunk-QZHKN3VN-uG0W9XCn.js} +1 -1
  41. package/dist/{chunk-S3R3BYOJ-F8AD9lHs.js → chunk-S3R3BYOJ-D8svDLcB.js} +4 -4
  42. package/dist/{chunk-T44TD3VJ-BuOpBf-m.js → chunk-T44TD3VJ-C5NCytxJ.js} +1 -1
  43. package/dist/{chunk-TVAH2DTR-CnMJAbv2.js → chunk-TVAH2DTR-CXLr85J9.js} +6 -6
  44. package/dist/{chunk-TZMSLE5B-FgoUBce3.js → chunk-TZMSLE5B-1E_YfHMJ.js} +3 -3
  45. package/dist/{chunk-WFRQ32O7-XYO_3xAi.js → chunk-WFRQ32O7-BKSf4yCO.js} +1 -1
  46. package/dist/{chunk-WFWHJNB7-CO2PO-xj.js → chunk-WFWHJNB7-B1Zzkj_f.js} +1 -1
  47. package/dist/{chunk-XRWGC2XP-NEUwjXBT.js → chunk-XRWGC2XP-Bo8DlVQO.js} +1 -1
  48. package/dist/{chunk-ZPAFE4SF-CyeNhdPx.js → chunk-ZPAFE4SF-CmteRP75.js} +1 -1
  49. package/dist/classDiagram-KNZD7YFC-ZbE61oE0.js +40 -0
  50. package/dist/classDiagram-v2-RKCZMP56-BqhgFvho.js +40 -0
  51. package/dist/cmake-l0t4JJ7s.js +4 -0
  52. package/dist/{cobol-lK28EtZf.js → cobol-DJP1EK1j.js} +4 -4
  53. package/dist/{coffee-BSXLyDD2.js → coffee-CC5nEIi9.js} +1 -1
  54. package/dist/{cose-bilkent-S5V4N54A-Cj0MgFkf.js → cose-bilkent-S5V4N54A-DKXAkYs4.js} +3 -3
  55. package/dist/cpp-ANCO5onE.js +8 -0
  56. package/dist/{cpp-BChLOGjC.js → cpp-D9LYqqPp.js} +3 -3
  57. package/dist/{crystal-CO99xfcp.js → crystal-BRqcx7ej.js} +6 -6
  58. package/dist/csharp-Bz76NQ_J.js +4 -0
  59. package/dist/css-DAuWdYvT.js +4 -0
  60. package/dist/{dagre-5GWH7T2D-CfnBQe48.js → dagre-5GWH7T2D-NKT9rsKF.js} +17 -17
  61. package/dist/{data-grid-overlay-editor-Bcf9kFFc.js → data-grid-overlay-editor-awitGObA.js} +2 -2
  62. package/dist/{diagram-N5W7TBWH-04TOCf2a.js → diagram-N5W7TBWH-D7Lb6iTv.js} +24 -24
  63. package/dist/{diagram-QEK2KX5R-CUipzemR.js → diagram-QEK2KX5R-BGNlTTAr.js} +19 -19
  64. package/dist/{diagram-S2PKOQOG-ei2iw-oI.js → diagram-S2PKOQOG-DArsBfLb.js} +19 -19
  65. package/dist/diff-C7LSwbp8.js +4 -0
  66. package/dist/{dist-cqkd3NiL.js → dist-6NgnwCMd.js} +3 -3
  67. package/dist/{dist-CqazJcfk.js → dist-BDVas7u0.js} +1 -1
  68. package/dist/{dist-CGt0X2sV.js → dist-BeL8NYBI.js} +2 -2
  69. package/dist/dist-BhEY2Z_n.js +14 -0
  70. package/dist/{dist-R4ZaAXGr.js → dist-BkgFFOsz.js} +2 -2
  71. package/dist/{dist-v-r4jaY5.js → dist-BoehQujB.js} +1 -1
  72. package/dist/{dist-D7XZ_tXQ.js → dist-C2nw9RHE.js} +1 -1
  73. package/dist/{dist-BGDtO7aZ.js → dist-CAS8F-hC.js} +1 -1
  74. package/dist/{dist-s1LnJ5PG.js → dist-CS4N5B_G.js} +1 -1
  75. package/dist/{dist-B4S8pyFo.js → dist-Cc9Qz-U4.js} +3 -3
  76. package/dist/{dist-4FDGlo3i.js → dist-CljL8T10.js} +4 -4
  77. package/dist/dist-Cud0QD8Y.js +10 -0
  78. package/dist/{dist-Bi6qs7up.js → dist-D9rISDoI.js} +1 -1
  79. package/dist/dist-D9t6fT6i.js +10 -0
  80. package/dist/{dist-CTSMnLwu.js → dist-DC47GA46.js} +805 -643
  81. package/dist/{dist-D0KS-m2t.js → dist-Dh6pWjSH.js} +2 -2
  82. package/dist/{dist-DtSssmhN.js → dist-DlI9v2Hh.js} +2 -2
  83. package/dist/{dist-CSq74zEj.js → dist-DyXVT1vy.js} +1 -1
  84. package/dist/{dist-DO00gdpV.js → dist-TdQLXZKo.js} +3 -3
  85. package/dist/{dist-B9WB0SFB.js → dist-WvPZl2Sl.js} +1 -1
  86. package/dist/{dist-B4jO5BUT.js → dist-q94GwumS.js} +1 -1
  87. package/dist/{dist-CmEIe_wJ.js → dist-qGG7RM7P.js} +4 -4
  88. package/dist/{edge-BTCHQnL0.js → edge-DeFsqb1i.js} +5 -5
  89. package/dist/{elixir-CCIwO0SA.js → elixir-BGD3Ym80.js} +3 -3
  90. package/dist/{elm-Bd8GMb2w.js → elm-sXxjAPfa.js} +2 -2
  91. package/dist/{erDiagram-AWTI2OKA-DOO75nhy.js → erDiagram-AWTI2OKA-Dd30FpUG.js} +21 -21
  92. package/dist/{erb-C2XKicEJ.js → erb-CVVq1SHo.js} +19 -19
  93. package/dist/{erlang-BWIWBPfK.js → erlang-CoJZUhS4.js} +1 -1
  94. package/dist/{error-banner-BqE1uF21.js → error-banner-DDDPnVZA.js} +126 -124
  95. package/dist/esm-BC9Qw9UQ.js +4056 -0
  96. package/dist/{esm-hR1r0nyt.js → esm-DDjaZl5x.js} +14 -14
  97. package/dist/{flowDiagram-PVAE7QVJ-AUJeRwR9.js → flowDiagram-PVAE7QVJ-Dfo2-D8K.js} +23 -23
  98. package/dist/{formats-dvT8nDgH.js → formats-DClgE90A.js} +41 -21
  99. package/dist/{fortran-fixed-form-DOH2AovA.js → fortran-fixed-form-DUVqo01t.js} +1 -1
  100. package/dist/{fortran-free-form-DWQ7SFTN.js → fortran-free-form-e6UrnOjF.js} +1 -1
  101. package/dist/{fsharp-GbWUX1wo.js → fsharp-8cm272ry.js} +1 -1
  102. package/dist/{ganttDiagram-OWAHRB6G-d9HlXS4A.js → ganttDiagram-OWAHRB6G-CE9rMeMb.js} +10 -10
  103. package/dist/{gdresource-DJQ1WGjU.js → gdresource-ClFnPq3a.js} +2 -2
  104. package/dist/gdscript-B0LZbOIR.js +4 -0
  105. package/dist/gdshader-DFrJP5ei.js +4 -0
  106. package/dist/{git-commit-73gQ2jal.js → git-commit-BYaLl5ls.js} +1 -1
  107. package/dist/{git-rebase-tezkvplk.js → git-rebase-8n1RW6UD.js} +1 -1
  108. package/dist/{gitGraph-ZV4HHKMB-4c_I6adP.js → gitGraph-ZV4HHKMB-DGIos9rl.js} +3 -3
  109. package/dist/{gitGraphDiagram-NY62KEGX-BdOzqIF7.js → gitGraphDiagram-NY62KEGX-DJjzf0dH.js} +19 -19
  110. package/dist/{glide-data-editor-B26PhZvE.js → glide-data-editor-CdlLXwb-.js} +94 -94
  111. package/dist/{glimmer-js-B4yN_cyX.js → glimmer-js-Dai0PeIS.js} +4 -4
  112. package/dist/{glimmer-ts-BFwzJYHf.js → glimmer-ts-D_TjaTpy.js} +4 -4
  113. package/dist/glsl-CxEuvrWH.js +5 -0
  114. package/dist/{glsl-Da3zbemV.js → glsl-CyGXCGI2.js} +1 -1
  115. package/dist/go-DdqSEUJy.js +4 -0
  116. package/dist/{graphql-DHCTQXG8.js → graphql-B1Dx1rcM.js} +4 -4
  117. package/dist/graphql-cxjxtpev.js +8 -0
  118. package/dist/{hack-Bq2SPMdZ.js → hack-DaQhTJ_x.js} +4 -4
  119. package/dist/{haml-DKOqVKa_.js → haml-Bp5GoYpB.js} +2 -2
  120. package/dist/haml-CiyF8Brn.js +6 -0
  121. package/dist/{handlebars-lWgxxMwE.js → handlebars-ChGgzSRK.js} +4 -4
  122. package/dist/haxe-DCTL_FCo.js +4 -0
  123. package/dist/hlsl-Bfx4Ir_v.js +4 -0
  124. package/dist/{html-CHICwrWt.js → html-C4wWoZph.js} +2 -2
  125. package/dist/html-CEOIAVhY.js +6 -0
  126. package/dist/{html-derivative-BvtUczEO.js → html-derivative-BBqlL-a4.js} +1 -1
  127. package/dist/{html-derivative-PpMnWy1w.js → html-derivative-COo0pM2g.js} +4 -4
  128. package/dist/{http-CL7ORkDb.js → http-BBZ3n4Nc.js} +9 -9
  129. package/dist/{hxml-dX0MdapH.js → hxml-B3WEmVIR.js} +1 -1
  130. package/dist/{info-63CPKGFF-Bz8ia4ds.js → info-63CPKGFF-BJRf7NSB.js} +3 -3
  131. package/dist/{infoDiagram-STP46IZ2-2N5rOSVf.js → infoDiagram-STP46IZ2-wRiL7RAF.js} +15 -15
  132. package/dist/java-Dg_uLDO2.js +4 -0
  133. package/dist/javascript-UdF6t51O.js +4 -0
  134. package/dist/{jinja-DsZfQ7_N.js → jinja-DIY5F3JL.js} +3 -3
  135. package/dist/{jison-BspgGSu_.js → jison-NvMl7ZRB.js} +1 -1
  136. package/dist/{journeyDiagram-BIP6EPQ6-AkLtiVmB.js → journeyDiagram-BIP6EPQ6-xE-QKfW3.js} +9 -9
  137. package/dist/json-DhGO17Us.js +4 -0
  138. package/dist/jsx-BnWl0sfU.js +4 -0
  139. package/dist/{julia-B_C4JiTM.js → julia-B99Wf6ks.js} +8 -8
  140. package/dist/{kanban-definition-6OIFK2YF-Crxg_HOg.js → kanban-definition-6OIFK2YF-xTM_lSKu.js} +15 -15
  141. package/dist/{katex-CTMLv-Xd.js → katex-_B79i9h_.js} +1 -1
  142. package/dist/{label-D3LNCORf.js → label-DboGLjGa.js} +234 -203
  143. package/dist/{latex-DoiWAlAQ.js → latex-CZecqbCK.js} +2 -2
  144. package/dist/less-DZgWnAzP.js +4 -0
  145. package/dist/{line-DBxDZ2GZ.js → line-Bm50ongk.js} +3 -3
  146. package/dist/{linear-B8XR-NVr.js → linear-CUCOukde.js} +2 -2
  147. package/dist/{liquid-Bv5Ox8yg.js → liquid-CBTCQ-BA.js} +4 -4
  148. package/dist/{lua-BKJ_BAEH.js → lua-BAo0xbXr.js} +1 -1
  149. package/dist/lua-C4LdLFQB.js +5 -0
  150. package/dist/main.js +9322 -8755
  151. package/dist/markdown-DmoiORob.js +4 -0
  152. package/dist/{marko-DEzr-2oj.js → marko-aJY3NB2u.js} +4 -4
  153. package/dist/{mdc-GC7qNQda.js → mdc-DUOD_AOa.js} +6 -6
  154. package/dist/{mermaid-Dl3ywmV2.js → mermaid-DKh-bxRG.js} +24 -24
  155. package/dist/{mermaid-parser.core-C5kJ8cMb.js → mermaid-parser.core-BkBK5D-D.js} +8 -8
  156. package/dist/mermaid.core-BlYN1aB0.js +31 -0
  157. package/dist/{mermaid.core-2hDUD3tS.js → mermaid.core-DhviAB-E.js} +35 -35
  158. package/dist/{mhchem-ydsvRuzJ.js → mhchem-BLvV19Q1.js} +1 -1
  159. package/dist/{mindmap-definition-Q6HEUPPD-u3xALYXy.js → mindmap-definition-Q6HEUPPD-DhGkxCFl.js} +20 -20
  160. package/dist/{nginx-WYx0kjQD.js → nginx-C4wBmtSL.js} +2 -2
  161. package/dist/{nim-B59jjkdb.js → nim-7HUrH4-G.js} +8 -8
  162. package/dist/{number-overlay-editor-BJoc-iTp.js → number-overlay-editor-B7JKtSXW.js} +1 -1
  163. package/dist/{ordinal-DncHRC0c.js → ordinal-CgAjEHLv.js} +1 -1
  164. package/dist/{packet-HUATNLJX-DZeFAkmI.js → packet-HUATNLJX-COt0WQbt.js} +3 -3
  165. package/dist/{perl-BWXWNd9p.js → perl-DcIsham4.js} +6 -6
  166. package/dist/{php-B2IAnMDw.js → php-BMhhkMnI.js} +6 -6
  167. package/dist/php-BgNggqvM.js +11 -0
  168. package/dist/{pie-WTHONI2E-CcN2FpmZ.js → pie-WTHONI2E-7VABasD6.js} +3 -3
  169. package/dist/{pieDiagram-ADFJNKIX-B40sMFEq.js → pieDiagram-ADFJNKIX-CV46TPgr.js} +24 -24
  170. package/dist/postcss-BV0gPaAN.js +4 -0
  171. package/dist/{pug-jCrWgXoo.js → pug-C7hWP9pb.js} +3 -3
  172. package/dist/python-DrIYjHcK.js +4 -0
  173. package/dist/{qml-BvryPJl6.js → qml-4wNHxISd.js} +1 -1
  174. package/dist/{quadrantDiagram-LMRXKWRM-C-qFDzwP.js → quadrantDiagram-LMRXKWRM-0ohBNHBM.js} +5 -5
  175. package/dist/r-bWdZZY4p.js +4 -0
  176. package/dist/{radar-NJJJXTRR-DgOJ0Ctc.js → radar-NJJJXTRR-DEeA59xM.js} +3 -3
  177. package/dist/{razor-BsW9JZIF.js → razor-kE6VSkUw.js} +4 -4
  178. package/dist/react-vega-BFAvc6S7.js +25 -0
  179. package/dist/{react-vega-ypEMYp9o.js → react-vega-L8_x6Wjr.js} +50 -23
  180. package/dist/regexp-Du19WMsH.js +4 -0
  181. package/dist/{requirementDiagram-4UW4RH46-Cl_mIh_y.js → requirementDiagram-4UW4RH46-DSnND54_.js} +20 -20
  182. package/dist/{rst-CRU76Z1W.js → rst-CjWaqJB3.js} +22 -22
  183. package/dist/{ruby-9gRRZYzM.js → ruby-CX211_l4.js} +12 -12
  184. package/dist/ruby-Dsch-4qr.js +22 -0
  185. package/dist/{sankeyDiagram-GR3RE2ED-Dm9k3dHY.js → sankeyDiagram-GR3RE2ED-C4jd7w5x.js} +6 -6
  186. package/dist/{sas-BDTaEI61.js → sas-Bso79j2d.js} +1 -1
  187. package/dist/{scss-B1u4Hrbb.js → scss-B2x0kI7c.js} +1 -1
  188. package/dist/scss-BHcIhkao.js +5 -0
  189. package/dist/sdbl-CiVVvobW.js +4 -0
  190. package/dist/{sequenceDiagram-C3RYC4MD-DmU9oc42.js → sequenceDiagram-C3RYC4MD-4cYnu6yf.js} +10 -10
  191. package/dist/{shaderlab-Bm5WmYK9.js → shaderlab-B4l4__9m.js} +1 -1
  192. package/dist/shellscript-Carvxcyf.js +4 -0
  193. package/dist/{shellsession-CN-wC7WL.js → shellsession-D-krdWsh.js} +1 -1
  194. package/dist/{slides-component-CZksIptv.js → slides-component-Cm9g-y7F.js} +1 -1
  195. package/dist/{soy-CeMP2PMh.js → soy-wFhS-Vjb.js} +3 -3
  196. package/dist/{sparql-M76X2Hg1.js → sparql-D6Kv-L3I.js} +1 -1
  197. package/dist/{spec-qDDGe5hl.js → spec-B7BWIiD8.js} +3 -3
  198. package/dist/sql-CVP77J2a.js +4 -0
  199. package/dist/{src-CePha-_O.js → src-DopHipf8.js} +1 -1
  200. package/dist/{stata-BH7l4VD7.js → stata-1fehkWpU.js} +1 -1
  201. package/dist/{stateDiagram-KXAO66HF-D_SUaMYR.js → stateDiagram-KXAO66HF-Cq-ezNe-.js} +21 -21
  202. package/dist/stateDiagram-v2-UMBNRL4Z-QxkaR8xk.js +39 -0
  203. package/dist/{step-zYP-E-fB.js → step-Bixovd6W.js} +1 -1
  204. package/dist/stex-IzMc-wiJ.js +5 -0
  205. package/dist/style.css +1 -2
  206. package/dist/stylus-BTQe34gF.js +4 -0
  207. package/dist/{svelte-TwcowgfT.js → svelte-DZNFxgw8.js} +4 -4
  208. package/dist/{templ-BpG-MhQv.js → templ-unaxtPDu.js} +3 -3
  209. package/dist/tex-B02KkJuq.js +5 -0
  210. package/dist/{tex-CBM64lBG.js → tex-WcClzGDl.js} +1 -1
  211. package/dist/{time-DRnNkqSS.js → time-D5kvxFYj.js} +2 -2
  212. package/dist/{timeline-definition-XQNQX7LJ-BgkB1JzD.js → timeline-definition-XQNQX7LJ-HouMBLkR.js} +6 -6
  213. package/dist/{treemap-75Q7IDZK-CGM2jb5Y.js → treemap-75Q7IDZK-rIabFN59.js} +3 -3
  214. package/dist/{ts-tags-CywVDBFD.js → ts-tags-Dw16jybl.js} +9 -9
  215. package/dist/tsx-2o7mnE6q.js +4 -0
  216. package/dist/turtle-CDidgplC.js +4 -0
  217. package/dist/{twig-DKvQCGZl.js → twig-CTY0fjwf.js} +23 -23
  218. package/dist/{types-2eTEqSwS.js → types-8-7JTTaW.js} +176 -175
  219. package/dist/typescript-Z3djoets.js +4 -0
  220. package/dist/{useAsyncData-6gisQ4pR.js → useAsyncData-_ejUTnFA.js} +1 -1
  221. package/dist/{useTheme-B-2frT0L.js → useTheme-Cpx27F7Z.js} +5 -2
  222. package/dist/{vega-component-C-bCSv1b.js → vega-component-r6NkLfxM.js} +213 -212
  223. package/dist/{vue-CUZawI_b.js → vue-BjZgU5Nz.js} +6 -6
  224. package/dist/vue-DhUZPDmo.js +10 -0
  225. package/dist/{vue-html-Bx7_HmU0.js → vue-html-C4EmFqJx.js} +7 -7
  226. package/dist/{vue-vine-9w78JPDc.js → vue-vine-DrjIj56i.js} +11 -11
  227. package/dist/{xml-CEIIhUsl.js → xml-BgKyT7dU.js} +1 -1
  228. package/dist/xml-C7KksLEJ.js +5 -0
  229. package/dist/{xsl-BynZr4Sw.js → xsl-9daNus4h.js} +2 -2
  230. package/dist/{xychartDiagram-6GGTOJPD-u5660hzT.js → xychartDiagram-6GGTOJPD-DkDWjoGr.js} +16 -16
  231. package/dist/yaml-zmBXofFy.js +4 -0
  232. package/package.json +8 -8
  233. package/src/components/chat/acp/blocks.tsx +1 -1
  234. package/src/components/chat/chat-panel.tsx +7 -3
  235. package/src/components/chat/reasoning-accordion.tsx +1 -1
  236. package/src/components/data-table/TableActions.tsx +18 -14
  237. package/src/components/data-table/__tests__/columns.test.tsx +143 -1
  238. package/src/components/data-table/__tests__/url-detector.test.tsx +92 -1
  239. package/src/components/data-table/columns.tsx +34 -17
  240. package/src/components/data-table/data-table.tsx +3 -0
  241. package/src/components/data-table/download-actions.tsx +16 -8
  242. package/src/components/data-table/row-viewer-panel/row-viewer.tsx +5 -5
  243. package/src/components/data-table/url-detector.tsx +43 -0
  244. package/src/components/datasources/utils.ts +7 -0
  245. package/src/components/editor/ai/ai-completion-editor.tsx +6 -3
  246. package/src/components/editor/cell/CreateCellButton.tsx +98 -88
  247. package/src/components/editor/chrome/panels/packages-panel.tsx +3 -1
  248. package/src/components/editor/chrome/types.ts +7 -0
  249. package/src/components/editor/file-tree/__tests__/file-expolorer.test.ts +179 -0
  250. package/src/components/editor/file-tree/file-explorer.tsx +71 -1
  251. package/src/components/editor/notebook-cell.tsx +27 -25
  252. package/src/components/editor/output/__tests__/ansi-reduce.test.ts +8 -0
  253. package/src/components/editor/output/ansi-reduce.ts +7 -4
  254. package/src/components/editor/renderers/grid-layout/grid-layout.tsx +35 -3
  255. package/src/components/pages/home-page.tsx +8 -3
  256. package/src/components/ui/table.tsx +1 -1
  257. package/src/core/ai/tools/__tests__/edit-notebook-tool.test.ts +156 -10
  258. package/src/core/ai/tools/__tests__/registry.test.ts +41 -3
  259. package/src/core/ai/tools/edit-notebook-tool.ts +86 -45
  260. package/src/core/ai/tools/registry.ts +5 -2
  261. package/src/core/cells/__tests__/logs.test.ts +371 -0
  262. package/src/core/cells/__tests__/session.test.ts +0 -9
  263. package/src/core/cells/logs.ts +16 -5
  264. package/src/core/cells/session.ts +0 -1
  265. package/src/core/codemirror/__tests__/format.test.ts +28 -2
  266. package/src/core/codemirror/copilot/client.ts +21 -1
  267. package/src/core/codemirror/copilot/copilot-config.tsx +29 -1
  268. package/src/core/codemirror/editing/commands.ts +4 -3
  269. package/src/core/codemirror/format.ts +105 -7
  270. package/src/core/codemirror/language/languages/sql/completion-store.ts +1 -1
  271. package/src/core/codemirror/language/languages/sql/sql.ts +8 -1
  272. package/src/core/codemirror/language/languages/sql/utils.ts +15 -0
  273. package/src/core/codemirror/language/panel/panel.tsx +1 -1
  274. package/src/core/config/__tests__/config-schema.test.ts +2 -0
  275. package/src/core/config/config-schema.ts +4 -3
  276. package/src/core/packages/__tests__/package-input-utils.test.ts +93 -0
  277. package/src/core/packages/package-input-utils.ts +36 -0
  278. package/src/core/websocket/useMarimoWebSocket.tsx +1 -1
  279. package/src/css/app/Cell.css +6 -1
  280. package/src/css/md.css +5 -0
  281. package/src/plugins/core/__test__/sanitize.test.ts +1 -1
  282. package/src/plugins/core/sanitize.ts +3 -1
  283. package/src/plugins/impl/DataTablePlugin.tsx +10 -1
  284. package/src/plugins/impl/DateTimePickerPlugin.tsx +3 -1
  285. package/src/plugins/impl/__tests__/DateTimePickerPlugin.test.tsx +3 -0
  286. package/src/plugins/impl/chat/ChatPlugin.tsx +1 -0
  287. package/src/plugins/impl/chat/chat-ui.tsx +140 -10
  288. package/src/plugins/impl/common/error-banner.tsx +7 -3
  289. package/src/plugins/impl/data-frames/DataFramePlugin.tsx +1 -0
  290. package/src/plugins/impl/vega/VegaPlugin.tsx +1 -0
  291. package/src/plugins/impl/vega/vega-component.tsx +26 -5
  292. package/src/plugins/layout/NavigationMenuPlugin.tsx +14 -3
  293. package/src/plugins/layout/ProgressPlugin.tsx +8 -5
  294. package/src/plugins/layout/StatPlugin.tsx +11 -4
  295. package/src/plugins/layout/__test__/ProgressPlugin.test.ts +37 -21
  296. package/src/utils/__tests__/urls.test.ts +165 -1
  297. package/src/utils/urls.ts +120 -0
  298. package/src/utils/vitals.ts +1 -1
  299. package/dist/Combination-BH_L276x.js +0 -2503
  300. package/dist/angular-html-BcsYKZNy.js +0 -7
  301. package/dist/assets/__vite-browser-external-BTNiCQ6O.js +0 -1
  302. package/dist/c-RhvfrIXd.js +0 -4
  303. package/dist/classDiagram-KNZD7YFC-BwfV2ECJ.js +0 -40
  304. package/dist/classDiagram-v2-RKCZMP56-CdtBTwGN.js +0 -40
  305. package/dist/cmake-Dv9WBQ8F.js +0 -4
  306. package/dist/cpp-De3HlDQp.js +0 -8
  307. package/dist/csharp-DONDYcLD.js +0 -4
  308. package/dist/css-KrVDDZJI.js +0 -4
  309. package/dist/diff-C_xoFltE.js +0 -4
  310. package/dist/dist-C_ywAD_6.js +0 -10
  311. package/dist/dist-Umyw8yf9.js +0 -10
  312. package/dist/download-Bb5BCMXq.js +0 -145
  313. package/dist/esm-Cjo4c4Vw.js +0 -2188
  314. package/dist/gdscript-CCtCxlxC.js +0 -4
  315. package/dist/gdshader-DRsZz2Lo.js +0 -4
  316. package/dist/glsl-Bpd55IJK.js +0 -5
  317. package/dist/go-BZbX8CmG.js +0 -4
  318. package/dist/graphql-C3W9lZa9.js +0 -8
  319. package/dist/haml-0dNTXdjh.js +0 -6
  320. package/dist/haxe-D67WIBdi.js +0 -4
  321. package/dist/hlsl-A_Yq2Muj.js +0 -4
  322. package/dist/html-C6ObPTU5.js +0 -6
  323. package/dist/java-BFakZb2S.js +0 -4
  324. package/dist/javascript-B8ZNE_3R.js +0 -4
  325. package/dist/json-CVwA-VKM.js +0 -4
  326. package/dist/jsx-TsEBgZMR.js +0 -4
  327. package/dist/less-R7I1oHvn.js +0 -4
  328. package/dist/lua-CdOJTa1m.js +0 -5
  329. package/dist/markdown-Czm489_C.js +0 -4
  330. package/dist/mermaid.core-D5NqLRbX.js +0 -31
  331. package/dist/php-B2RrCM5T.js +0 -11
  332. package/dist/postcss-CK8yd697.js +0 -4
  333. package/dist/python-BAyuw8wl.js +0 -4
  334. package/dist/r-CMKGyVVD.js +0 -4
  335. package/dist/react-vega-BIDT9Ttp.js +0 -25
  336. package/dist/regexp-C-NGZx14.js +0 -4
  337. package/dist/ruby-DC1LiM9o.js +0 -22
  338. package/dist/scss-9LDy_1oh.js +0 -5
  339. package/dist/sdbl-Cauk10zS.js +0 -4
  340. package/dist/shellscript-DPV_oGnY.js +0 -4
  341. package/dist/sql-BuUisnb3.js +0 -4
  342. package/dist/stateDiagram-v2-UMBNRL4Z-DdAPrjTz.js +0 -39
  343. package/dist/stex-BPCIi6ix.js +0 -5
  344. package/dist/stylus-BzfQ5p6U.js +0 -4
  345. package/dist/tex-DKaqHjWi.js +0 -5
  346. package/dist/tsx-CAS2Oalp.js +0 -4
  347. package/dist/turtle-Dqog6asB.js +0 -4
  348. package/dist/typescript-DHHJAsKz.js +0 -4
  349. package/dist/vue-DiyvUvuo.js +0 -10
  350. package/dist/xml-wE_-A0vH.js +0 -5
  351. package/dist/yaml-5htSumZI.js +0 -4
  352. /package/dist/{ImageComparisonComponent-DTO3nRq-.js → ImageComparisonComponent-CXBJ7S4z.js} +0 -0
  353. /package/dist/{abap-Cnc1m8d-.js → abap-I2cGjSH1.js} +0 -0
  354. /package/dist/{actionscript-3-g8zBgLKw.js → actionscript-3-DL1yGs6S.js} +0 -0
  355. /package/dist/{ada-MlSLvfsc.js → ada-BkGUMHAC.js} +0 -0
  356. /package/dist/{andromeeda-CkQePh6_.js → andromeeda-BWSHGuDt.js} +0 -0
  357. /package/dist/{apache-Cp-BBvQI.js → apache-DRnLyMnR.js} +0 -0
  358. /package/dist/{apex-CID9_iW1.js → apex-CA0TS4zn.js} +0 -0
  359. /package/dist/{applescript-Bv6vEFim.js → applescript-B8vB3y-q.js} +0 -0
  360. /package/dist/{ara-l5FvBxcT.js → ara-C0et56O5.js} +0 -0
  361. /package/dist/{array-lX94FrxB.js → array-vD2Vw0bk.js} +0 -0
  362. /package/dist/{asciidoc-BpLzRCLD.js → asciidoc-a6FHzc0d.js} +0 -0
  363. /package/dist/{asm-CxMfzk9G.js → asm-3DPfbryP.js} +0 -0
  364. /package/dist/{asterisk-Cbdk9I7-.js → asterisk-CbqErmo8.js} +0 -0
  365. /package/dist/{aurora-x-BmJfZyvk.js → aurora-x-Cq0GoPAm.js} +0 -0
  366. /package/dist/{awk-DZbdMF01.js → awk-GgrsjT7w.js} +0 -0
  367. /package/dist/{ayu-dark-Ce21p_3j.js → ayu-dark-BOgp0yX0.js} +0 -0
  368. /package/dist/{ballerina-6WMbs5Nh.js → ballerina-DErPOQth.js} +0 -0
  369. /package/dist/{bat-D70SunD8.js → bat-CkhnPpIS.js} +0 -0
  370. /package/dist/{beancount-DtkuCj7H.js → beancount-Rkl6N3Po.js} +0 -0
  371. /package/dist/{berry-DbfHEJGk.js → berry-C0cFa9Eb.js} +0 -0
  372. /package/dist/{bibtex-Cl9qlt9d.js → bibtex-PErECouH.js} +0 -0
  373. /package/dist/{bicep-0zpjixSE.js → bicep-B9tJFYg8.js} +0 -0
  374. /package/dist/{c-0VtUNZe8.js → c-xZK3SMJX.js} +0 -0
  375. /package/dist/{cadence-D2-Gq0t7.js → cadence-D2lNr2F0.js} +0 -0
  376. /package/dist/{catppuccin-frappe-DFz6L_QP.js → catppuccin-frappe-CEY1tx7K.js} +0 -0
  377. /package/dist/{catppuccin-latte-DSTm5iMg.js → catppuccin-latte-BjeOZATb.js} +0 -0
  378. /package/dist/{catppuccin-macchiato-D5cPlFDN.js → catppuccin-macchiato-HTrdL1Py.js} +0 -0
  379. /package/dist/{catppuccin-mocha-BBVxciDI.js → catppuccin-mocha-DaNBfKBN.js} +0 -0
  380. /package/dist/{chunk-57QY23SG-B6p-8LKm.js → chunk-57QY23SG-CtPsoWDn.js} +0 -0
  381. /package/dist/{clarity-CTtLMvQr.js → clarity-Di3YnyD4.js} +0 -0
  382. /package/dist/{click-outside-container-CR-VHaIe.js → click-outside-container-DnKND-Y5.js} +0 -0
  383. /package/dist/{clojure-CQ_s11PN.js → clojure-BaI1cLwf.js} +0 -0
  384. /package/dist/{cmake-DF99YgK0.js → cmake-Ct5KlIlx.js} +0 -0
  385. /package/dist/{codeowners-CRbICvXw.js → codeowners-B47SmYv4.js} +0 -0
  386. /package/dist/{codeql-DzUBsQZ9.js → codeql-C-RyBs2A.js} +0 -0
  387. /package/dist/{colors-C2w3uhVQ.js → colors-c_1kHhMM.js} +0 -0
  388. /package/dist/{common-keywords-D7noiVjl.js → common-keywords-qG52oQhe.js} +0 -0
  389. /package/dist/{common-lisp-CkedN1Bk.js → common-lisp-BEkqGRVt.js} +0 -0
  390. /package/dist/{coq-B7OBnzDw.js → coq-BMELwi0x.js} +0 -0
  391. /package/dist/{csharp-nXluFhrZ.js → csharp-D8kGQl5L.js} +0 -0
  392. /package/dist/{css-CPr1yM7G.js → css-D91D9ZFJ.js} +0 -0
  393. /package/dist/{csv-BTyvW9Dm.js → csv-DsiEeqZB.js} +0 -0
  394. /package/dist/{cue-CtcusocM.js → cue-Bd4pPCrb.js} +0 -0
  395. /package/dist/{cypher-BCo9_Gxf.js → cypher-CY6X1_fR.js} +0 -0
  396. /package/dist/{cytoscape.esm-CeO110wc.js → cytoscape.esm-D3qnLru1.js} +0 -0
  397. /package/dist/{d-qe1Yx8Pk.js → d-Dq3ZvYXH.js} +0 -0
  398. /package/dist/{dark-plus-COhL9N0K.js → dark-plus-DAkssByr.js} +0 -0
  399. /package/dist/{dart-C-zwBpkD.js → dart-CRwsUVcK.js} +0 -0
  400. /package/dist/{dax-9HVn3jKI.js → dax-yCcjIsFY.js} +0 -0
  401. /package/dist/{desktop-DcOWBslk.js → desktop-F3trsLZp.js} +0 -0
  402. /package/dist/{diff-0HrJYevs.js → diff-oSoYkmE6.js} +0 -0
  403. /package/dist/{dist-Ck_uei4a.js → dist-BEBl1fVc.js} +0 -0
  404. /package/dist/{dist-BOoOMWpw.js → dist-L1A29jng.js} +0 -0
  405. /package/dist/{dist-CFOn9U6a.js → dist-RsSoJ-Ow.js} +0 -0
  406. /package/dist/{dist-BLj2WRAk.js → dist-WgdRzo73.js} +0 -0
  407. /package/dist/{dist-Dndqm_ya.js → dist-_HymStvo.js} +0 -0
  408. /package/dist/{dist-B9BklWGT.js → dist-zlCh7zB9.js} +0 -0
  409. /package/dist/{docker-oHtI3hEB.js → docker-CzW3fUnV.js} +0 -0
  410. /package/dist/{dockerfile-DSCH583m.js → dockerfile-TsgC6Bmm.js} +0 -0
  411. /package/dist/{dotenv-sY_xnKYe.js → dotenv-C5RAv6mV.js} +0 -0
  412. /package/dist/{dracula-Bh9RLqOx.js → dracula-0J2lfdjD.js} +0 -0
  413. /package/dist/{dracula-soft-Cvp6b01Z.js → dracula-soft-CZX9ZgRW.js} +0 -0
  414. /package/dist/{dream-maker-6snTsD3J.js → dream-maker-D668Dv7O.js} +0 -0
  415. /package/dist/{duckdb-keywords-BCq77yXm.js → duckdb-keywords-DHIKlX_6.js} +0 -0
  416. /package/dist/{ebnf-BnX_o_Yq.js → ebnf-spWsoNeW.js} +0 -0
  417. /package/dist/{emacs-lisp-C6oq3DLk.js → emacs-lisp-9r6Oy_vR.js} +0 -0
  418. /package/dist/{everforest-dark-BYBypIqM.js → everforest-dark-BV3p6ZTT.js} +0 -0
  419. /package/dist/{everforest-light-D4mfI1FM.js → everforest-light-D4viDjQH.js} +0 -0
  420. /package/dist/{fcl-DDKjgNry.js → fcl-DOHQxani.js} +0 -0
  421. /package/dist/{fennel-C4o5c4mv.js → fennel-DdgItcQL.js} +0 -0
  422. /package/dist/{fish-BD9AkN7o.js → fish-Dah-0_yV.js} +0 -0
  423. /package/dist/{fluent-eCvhADRq.js → fluent-Dkmhuwpv.js} +0 -0
  424. /package/dist/{fortran-free-form-CuTQJQMN.js → fortran-free-form-DNLybXh-.js} +0 -0
  425. /package/dist/{gdscript-B40Spm2S.js → gdscript-DtYBhJ1b.js} +0 -0
  426. /package/dist/{gdshader-BZSmNWVa.js → gdshader-BV2VMgVk.js} +0 -0
  427. /package/dist/{genie-Cy_D8EWg.js → genie-BFMUrkvN.js} +0 -0
  428. /package/dist/{gherkin-ct-w1STV.js → gherkin-DppeDWDv.js} +0 -0
  429. /package/dist/{github-dark-CbIY86Wd.js → github-dark-D29L3HCC.js} +0 -0
  430. /package/dist/{github-dark-default-BlPRzuGs.js → github-dark-default-n3il8rgM.js} +0 -0
  431. /package/dist/{github-dark-dimmed-CwyHPTp3.js → github-dark-dimmed-oz4y0Wki.js} +0 -0
  432. /package/dist/{github-dark-high-contrast-Ch3E28Ga.js → github-dark-high-contrast-By7F7Fv0.js} +0 -0
  433. /package/dist/{github-light-BM3RayZ2.js → github-light-CWUlQb3u.js} +0 -0
  434. /package/dist/{github-light-default-BWhIdJf6.js → github-light-default-BffED7Ak.js} +0 -0
  435. /package/dist/{github-light-high-contrast-CKsJGAYi.js → github-light-high-contrast-Pu6OZUhP.js} +0 -0
  436. /package/dist/{gleam-Cwu_dIV7.js → gleam-BUcDYi_k.js} +0 -0
  437. /package/dist/{gnuplot-W2uzVV04.js → gnuplot-C1MgslgQ.js} +0 -0
  438. /package/dist/{go-C0N7iCwo.js → go-CYZiZRxy.js} +0 -0
  439. /package/dist/{groovy-BCFsp4zc.js → groovy-ClTIQGUH.js} +0 -0
  440. /package/dist/{gruvbox-dark-hard-DMFH1kAD.js → gruvbox-dark-hard-Bp86g2V_.js} +0 -0
  441. /package/dist/{gruvbox-dark-medium-DiHZEQva.js → gruvbox-dark-medium-BK2iIEfy.js} +0 -0
  442. /package/dist/{gruvbox-dark-soft-De9URWso.js → gruvbox-dark-soft-B_0xgXvI.js} +0 -0
  443. /package/dist/{gruvbox-light-hard-DzokvGK_.js → gruvbox-light-hard-DBlpi77o.js} +0 -0
  444. /package/dist/{gruvbox-light-medium-C4psEnS5.js → gruvbox-light-medium-CAccdTaF.js} +0 -0
  445. /package/dist/{gruvbox-light-soft-DL0f_6un.js → gruvbox-light-soft-DcO-EcR5.js} +0 -0
  446. /package/dist/{haskell-CDLvQWXZ.js → haskell-A1vUYtej.js} +0 -0
  447. /package/dist/{haxe-CLjmCvGB.js → haxe-DnHFv-TV.js} +0 -0
  448. /package/dist/{hcl-COL_PBAE.js → hcl-CU6j-Xhf.js} +0 -0
  449. /package/dist/{hjson-DkR4GFDO.js → hjson-ClOjKSoB.js} +0 -0
  450. /package/dist/{hlsl-BJKnqnDQ.js → hlsl-Q52_rKUP.js} +0 -0
  451. /package/dist/{houston-DYwZabvW.js → houston-DGG5Ln2h.js} +0 -0
  452. /package/dist/{http-2MVb-dsB.js → http-BgHOhKz2.js} +0 -0
  453. /package/dist/{hy-OsbjMwY0.js → hy-Bja9Numd.js} +0 -0
  454. /package/dist/{imba-Ddkaio98.js → imba-HOr9EX5j.js} +0 -0
  455. /package/dist/{ini-CNrkD-OZ.js → ini-EvmYJ-83.js} +0 -0
  456. /package/dist/{init-BU4YGOOg.js → init-BsH2JjGd.js} +0 -0
  457. /package/dist/{java-Ci6qXyg1.js → java-91iGU5ap.js} +0 -0
  458. /package/dist/{javascript-URuDoMWW.js → javascript-CPeJGbMe.js} +0 -0
  459. /package/dist/{json-DX7TV6Gi.js → json-N0VDmGwx.js} +0 -0
  460. /package/dist/{json5-Djp3uvi3.js → json5-BC1TPZZb.js} +0 -0
  461. /package/dist/{jsonc-XlYTIqzR.js → jsonc-B88-mC9I.js} +0 -0
  462. /package/dist/{jsonl-GwfHzMab.js → jsonl-CXu8ax4T.js} +0 -0
  463. /package/dist/{jsonnet-CPv7P6JN.js → jsonnet-0HtPQpiV.js} +0 -0
  464. /package/dist/{jssm-DdbAawAp.js → jssm-Bk3koTsK.js} +0 -0
  465. /package/dist/{jsx-DkGuBjr4.js → jsx-Cbdt0xgS.js} +0 -0
  466. /package/dist/{kanagawa-dragon-Vs6U6z1S.js → kanagawa-dragon-6wkRCL1O.js} +0 -0
  467. /package/dist/{kanagawa-lotus-Buvs3lt0.js → kanagawa-lotus-21R5pwns.js} +0 -0
  468. /package/dist/{kanagawa-wave-Bj2TElAo.js → kanagawa-wave-DvIMpnk3.js} +0 -0
  469. /package/dist/{katex-DHhoxnpM.js → katex-Cymo3Ugt.js} +0 -0
  470. /package/dist/{kotlin-Cpc_0A7a.js → kotlin-Brxn_vmg.js} +0 -0
  471. /package/dist/{kusto-Co9wVBCz.js → kusto-CLSwwyw9.js} +0 -0
  472. /package/dist/{laserwave-Ca61-FAH.js → laserwave-D2HyGZu4.js} +0 -0
  473. /package/dist/{lean-C0Aa7Fsj.js → lean-C7cjnnxn.js} +0 -0
  474. /package/dist/{less-_PXFbiQM.js → less-Db3q8KJ4.js} +0 -0
  475. /package/dist/{light-plus-5ex0bkO5.js → light-plus-C2C7fw4Z.js} +0 -0
  476. /package/dist/{llvm-BbKHoWwP.js → llvm-DAIyCtJL.js} +0 -0
  477. /package/dist/{log-CAfpKA3d.js → log-vTaTH8PJ.js} +0 -0
  478. /package/dist/{logo-_JZv2_m7.js → logo-D9tY6FNo.js} +0 -0
  479. /package/dist/{luau-By4kXsmQ.js → luau-IjR5-Ywl.js} +0 -0
  480. /package/dist/{main-BeKMoTBP.js → main-CRpnHr48.js} +0 -0
  481. /package/dist/{make-BRzozWYB.js → make-Cu-cnuA_.js} +0 -0
  482. /package/dist/{markdown-DBlXv3d9.js → markdown-C5F3cvct.js} +0 -0
  483. /package/dist/{marked.esm-CqJtK50L.js → marked.esm-DpOvkPbZ.js} +0 -0
  484. /package/dist/{material-theme-UdvytYzK.js → material-theme-DC62_X77.js} +0 -0
  485. /package/dist/{material-theme-darker-ifWxjE_M.js → material-theme-darker-ZdvrV-zE.js} +0 -0
  486. /package/dist/{material-theme-lighter-BJMt_hpe.js → material-theme-lighter-CjF6eqam.js} +0 -0
  487. /package/dist/{material-theme-ocean-DBLAtuvq.js → material-theme-ocean-B1OEP8g-.js} +0 -0
  488. /package/dist/{material-theme-palenight-D_bLdV4c.js → material-theme-palenight-DG7XKA0s.js} +0 -0
  489. /package/dist/{math-B9kWnSVt.js → math-kvEWD7RZ.js} +0 -0
  490. /package/dist/{matlab-SZvC4TdD.js → matlab-Bkgl6cmi.js} +0 -0
  491. /package/dist/{mdx-FGsuIggU.js → mdx-B3dxoxO_.js} +0 -0
  492. /package/dist/{mermaid-Bq_9A0K_.js → mermaid-Vk73zc_P.js} +0 -0
  493. /package/dist/{min-dark-CXAX-ZXK.js → min-dark-BXnwqHsA.js} +0 -0
  494. /package/dist/{min-light-BCnp1thB.js → min-light-t8HWsGPD.js} +0 -0
  495. /package/dist/{mipsasm-B5qmQK6W.js → mipsasm-DM3DsUwR.js} +0 -0
  496. /package/dist/{mojo-GIDM7_y7.js → mojo-CgJHtiXY.js} +0 -0
  497. /package/dist/{monokai-DL7jaPcf.js → monokai-CRI7M-ed.js} +0 -0
  498. /package/dist/{move-DRJvkv3E.js → move-DQHQ0ily.js} +0 -0
  499. /package/dist/{narrat-v6fb47Is.js → narrat-UVO3rS1B.js} +0 -0
  500. /package/dist/{nextflow-C602gAKa.js → nextflow-DrtHoX7E.js} +0 -0
  501. /package/dist/{nginx-xAcu9XCN.js → nginx-DJ7UgEOR.js} +0 -0
  502. /package/dist/{night-owl-Q-U_lEu6.js → night-owl-Ci5d2mya.js} +0 -0
  503. /package/dist/{nix-BRjH373I.js → nix-Cgk0qZB-.js} +0 -0
  504. /package/dist/{nord-CRIAyay1.js → nord-D3dA8PCc.js} +0 -0
  505. /package/dist/{nushell-5Ddvrppp.js → nushell-smo4Ehcx.js} +0 -0
  506. /package/dist/{objective-c-zrea_Ajz.js → objective-c-CVuojEvS.js} +0 -0
  507. /package/dist/{objective-cpp-BMgGRJTH.js → objective-cpp-Bpp59CkK.js} +0 -0
  508. /package/dist/{ocaml-Cc5CTR8t.js → ocaml-DYQwODYU.js} +0 -0
  509. /package/dist/{one-dark-pro-cEF3x_tc.js → one-dark-pro-CdYrsWA6.js} +0 -0
  510. /package/dist/{one-light-B0buW1FQ.js → one-light-B0fXewxa.js} +0 -0
  511. /package/dist/{pascal-C5MhYtdx.js → pascal-G_r9auPk.js} +0 -0
  512. /package/dist/{path-B-wCTTNY.js → path-DIzMdTua.js} +0 -0
  513. /package/dist/{plastic-4xY83A97.js → plastic-CC7C-r0m.js} +0 -0
  514. /package/dist/{plsql-DiS5vMuw.js → plsql-DmZBDDMQ.js} +0 -0
  515. /package/dist/{po-CE5EllyY.js → po-Bdl0SmZa.js} +0 -0
  516. /package/dist/{poimandres-C02cLu8D.js → poimandres-BPoRyzO_.js} +0 -0
  517. /package/dist/{polar-NxJPG_A1.js → polar-DdEuU550.js} +0 -0
  518. /package/dist/{postcss-BKFdDTSc.js → postcss-DgtXUb_w.js} +0 -0
  519. /package/dist/{powerquery-ClOwEHrw.js → powerquery-D5rcV1b7.js} +0 -0
  520. /package/dist/{powershell-DtnsETbd.js → powershell-CreFd35r.js} +0 -0
  521. /package/dist/{prisma-DQRqqd02.js → prisma-BSSS_9KD.js} +0 -0
  522. /package/dist/{prolog-BXwR1iEr.js → prolog-Cxq7ex3-.js} +0 -0
  523. /package/dist/{proto-DbdCTNJQ.js → proto-Di89JUpw.js} +0 -0
  524. /package/dist/{puppet-C0fmEeZ8.js → puppet-D-8yt0A2.js} +0 -0
  525. /package/dist/{purescript-DCzClV2L.js → purescript-Dsyys8lw.js} +0 -0
  526. /package/dist/{python-C9XsBnIS.js → python-DyJn0gY6.js} +0 -0
  527. /package/dist/{qmldir-BgPLvM_B.js → qmldir-Djlda7Cs.js} +0 -0
  528. /package/dist/{qss-DH_QKtyV.js → qss-DtDj95Ib.js} +0 -0
  529. /package/dist/{r-CE7tet3U.js → r-9vHvMbjq.js} +0 -0
  530. /package/dist/{racket-BXFuJ8S4.js → racket-BQnOONmJ.js} +0 -0
  531. /package/dist/{raku-BV2f5Bfp.js → raku-DZArQH1C.js} +0 -0
  532. /package/dist/{react-plotly-BSDG5040.js → react-plotly-B8bzf42j.js} +0 -0
  533. /package/dist/{red-NReit8D_.js → red-DdIrZaxO.js} +0 -0
  534. /package/dist/{reg-y78MnffL.js → reg-CM_FOY35.js} +0 -0
  535. /package/dist/{regexp-BkaqnlX1.js → regexp-Dh_KbmYB.js} +0 -0
  536. /package/dist/{rel-ChUSBGxs.js → rel-Cf8vFh7G.js} +0 -0
  537. /package/dist/{riscv-Cw3bJM3f.js → riscv-DFLesDmH.js} +0 -0
  538. /package/dist/{rose-pine-C_LOz2fx.js → rose-pine-C6TQipgc.js} +0 -0
  539. /package/dist/{rose-pine-dawn-DAyopyJp.js → rose-pine-dawn-DUw8_6c0.js} +0 -0
  540. /package/dist/{rose-pine-moon-D65s7ycF.js → rose-pine-moon-5rpZhuOi.js} +0 -0
  541. /package/dist/{rust-CNYdgIe2.js → rust-CLaTh4j5.js} +0 -0
  542. /package/dist/{sass-CTLsc-He.js → sass-DXaowKfb.js} +0 -0
  543. /package/dist/{scala-DAvnmlLT.js → scala-BwYNCkHH.js} +0 -0
  544. /package/dist/{scheme-BQ8akAiY.js → scheme-Cwv1j_5J.js} +0 -0
  545. /package/dist/{sdbl-BqdEdxub.js → sdbl-ZWGgjiIv.js} +0 -0
  546. /package/dist/{shellscript-SX0nv4lc.js → shellscript-CHtXIYYk.js} +0 -0
  547. /package/dist/{slack-dark-DP48wn3J.js → slack-dark-CEL96wwz.js} +0 -0
  548. /package/dist/{slack-ochin-JvZjQMr4.js → slack-ochin-Ih8BUTjo.js} +0 -0
  549. /package/dist/{smalltalk-Cd_zoqRt.js → smalltalk-Bz_Wq6O1.js} +0 -0
  550. /package/dist/{snazzy-light-Dn5RlLOZ.js → snazzy-light-BtCbn8qt.js} +0 -0
  551. /package/dist/{solarized-dark-juR81_fw.js → solarized-dark-2ncbM9MD.js} +0 -0
  552. /package/dist/{solarized-light-U1mjAkaE.js → solarized-light-Bw0RlZC7.js} +0 -0
  553. /package/dist/{solidity-DfzZ5d-O.js → solidity-Dl1Szhqk.js} +0 -0
  554. /package/dist/{solr-CNZE5yrI.js → solr-Kwz1kGU1.js} +0 -0
  555. /package/dist/{splunk-K8fn70fG.js → splunk-D_aQa7Wj.js} +0 -0
  556. /package/dist/{spreadsheet-DQPJGjZQ.js → spreadsheet-D6FABxcn.js} +0 -0
  557. /package/dist/{sql-CAF6o9lq.js → sql-Bl2dBUIk.js} +0 -0
  558. /package/dist/{sql-DRtPaiem.js → sql-ZN4U_4B1.js} +0 -0
  559. /package/dist/{ssh-config-BXqbrXDi.js → ssh-config-BZDNWhA1.js} +0 -0
  560. /package/dist/{stex-D1sWhacG.js → stex-B5cVJDuZ.js} +0 -0
  561. /package/dist/{stylus-C_YQrfMD.js → stylus-ByL4A079.js} +0 -0
  562. /package/dist/{swift-Ceo6tYUp.js → swift-scoJKQVi.js} +0 -0
  563. /package/dist/{synthwave-84-CHXFapSW.js → synthwave-84-DKtuD_wy.js} +0 -0
  564. /package/dist/{system-verilog-D4CJAYbc.js → system-verilog-Bv-1IX35.js} +0 -0
  565. /package/dist/{systemd-CHq8PvwE.js → systemd-BzGxwp-W.js} +0 -0
  566. /package/dist/{talonscript-D6aZJv_Q.js → talonscript-BSbePVqO.js} +0 -0
  567. /package/dist/{tasl-BWmlUeU7.js → tasl-BA3aDFU3.js} +0 -0
  568. /package/dist/{tcl-C3YCHzLh.js → tcl-BAw9Lg69.js} +0 -0
  569. /package/dist/{terraform-y7dSvHa7.js → terraform-D50En-Co.js} +0 -0
  570. /package/dist/{tiddlywiki-DotFbxlj.js → tiddlywiki-Bl1_jWGY.js} +0 -0
  571. /package/dist/{tiki-cZC65BMY.js → tiki-BDy2Aqau.js} +0 -0
  572. /package/dist/{timer--XD4eQXe.js → timer-Dde4NBPL.js} +0 -0
  573. /package/dist/{tokyo-night-A0-IVocs.js → tokyo-night-DXO9qP_t.js} +0 -0
  574. /package/dist/{toml-OrfgdRYt.js → toml-Cubg1uUB.js} +0 -0
  575. /package/dist/{treemap-BjIqNFzX.js → treemap-BLQ6nYXt.js} +0 -0
  576. /package/dist/{tsv-B2Hf1H8S.js → tsv-vZzoqqJp.js} +0 -0
  577. /package/dist/{tsx-DGPbtVdN.js → tsx-LnCcyy2E.js} +0 -0
  578. /package/dist/{turtle-DsNtk6IM.js → turtle-CMwgyTdm.js} +0 -0
  579. /package/dist/{typescript-CCzz7yCV.js → typescript-B5rt_l9e.js} +0 -0
  580. /package/dist/{typespec-DUIO3iAy.js → typespec-CkLBOALm.js} +0 -0
  581. /package/dist/{typst-CzQn6sYd.js → typst-C-inGA8y.js} +0 -0
  582. /package/dist/{v-DDSEES9z.js → v-CFTQQNNR.js} +0 -0
  583. /package/dist/{vala-Cbu40xKX.js → vala-CEP8R4Sr.js} +0 -0
  584. /package/dist/{vb-DtlqoV5V.js → vb-LCy_gAYP.js} +0 -0
  585. /package/dist/{verilog-CCzhlD5Z.js → verilog-CjetHjeY.js} +0 -0
  586. /package/dist/{vesper-DJTKEjYY.js → vesper-C1ptU1oI.js} +0 -0
  587. /package/dist/{vhdl-DDdF26gx.js → vhdl-BwoGC9LM.js} +0 -0
  588. /package/dist/{viml-Csgqqvxa.js → viml-CydZIHfP.js} +0 -0
  589. /package/dist/{vitesse-black-B_9_MY9n.js → vitesse-black-C-p75DbZ.js} +0 -0
  590. /package/dist/{vitesse-dark-5oLbBBDP.js → vitesse-dark-Ai-v_ovz.js} +0 -0
  591. /package/dist/{vitesse-light-DY7aCeME.js → vitesse-light-DQ9NGEHC.js} +0 -0
  592. /package/dist/{vyper-CJCjsleu.js → vyper-BF3ELXiG.js} +0 -0
  593. /package/dist/{wasm-DtNse08w.js → wasm-OjKRvUGa.js} +0 -0
  594. /package/dist/{wasm-BSZ3My3r.js → wasm-sMdbPauS.js} +0 -0
  595. /package/dist/{wenyan-BvPQ-H9y.js → wenyan-jAkt3eQa.js} +0 -0
  596. /package/dist/{wgsl-B65N7iDC.js → wgsl-C164tHZL.js} +0 -0
  597. /package/dist/{wikitext-BIFkMlQo.js → wikitext-DVNWOcXh.js} +0 -0
  598. /package/dist/{wit-DP8045yv.js → wit-BiebwFst.js} +0 -0
  599. /package/dist/{wolfram-DHmulSSf.js → wolfram-Dej0TMYQ.js} +0 -0
  600. /package/dist/{yaml-BW6YUxU4.js → yaml-D1dcMKz3.js} +0 -0
  601. /package/dist/{zenscript-CkfsSip8.js → zenscript-DR8tpung.js} +0 -0
  602. /package/dist/{zig-DxQnpavN.js → zig-DqxNCCzt.js} +0 -0
  603. /package/src/components/{chat → markdown}/markdown-renderer.css +0 -0
  604. /package/src/components/{chat → markdown}/markdown-renderer.tsx +0 -0
@@ -1,9 +1,14 @@
1
1
  /* Copyright 2024 Marimo. All rights reserved. */
2
2
 
3
3
  import { describe, expect, it } from "vitest";
4
- import { FrontendToolRegistry } from "../registry";
4
+ import { COPILOT_MODES } from "@/core/config/config-schema";
5
+ import { FRONTEND_TOOL_REGISTRY, FrontendToolRegistry } from "../registry";
5
6
  import { TestFrontendTool } from "../sample-tool";
6
7
 
8
+ // Tools that have these keys in their parameters are likely not supported by Google
9
+ // So we should be careful to add these types of schemas
10
+ const INVALID_KEYS_IN_SCHEMA_PARAMS = new Set(["anyOf", "oneOf"]);
11
+
7
12
  describe("FrontendToolRegistry", () => {
8
13
  it("registers tools via constructor and supports has()", () => {
9
14
  const registry = new FrontendToolRegistry([new TestFrontendTool()]);
@@ -63,7 +68,7 @@ describe("FrontendToolRegistry", () => {
63
68
  it("returns tool schemas with expected shape and memoizes the result", () => {
64
69
  const registry = new FrontendToolRegistry([new TestFrontendTool()]);
65
70
 
66
- const schemas1 = registry.getToolSchemas();
71
+ const schemas1 = registry.getToolSchemas("ask");
67
72
  expect(Array.isArray(schemas1)).toBe(true);
68
73
  expect(schemas1.length).toBe(1);
69
74
 
@@ -80,7 +85,40 @@ describe("FrontendToolRegistry", () => {
80
85
  expect(properties && typeof properties === "object").toBe(true);
81
86
  expect("name" in (properties ?? {})).toBe(true);
82
87
 
83
- const schemas2 = registry.getToolSchemas();
88
+ const schemas2 = registry.getToolSchemas("ask");
84
89
  expect(schemas2).toBe(schemas1);
90
+
91
+ // Should not include tools for other modes
92
+ const schemas3 = registry.getToolSchemas("agent");
93
+ expect(schemas3.length).toBe(0);
94
+ });
95
+
96
+ it("tool schemas should not contain invalid keys", () => {
97
+ const registry = FRONTEND_TOOL_REGISTRY;
98
+
99
+ function hasInvalidKeys(obj: unknown): boolean {
100
+ if (obj && typeof obj === "object") {
101
+ for (const [key, value] of Object.entries(obj)) {
102
+ if (INVALID_KEYS_IN_SCHEMA_PARAMS.has(key)) {
103
+ return true;
104
+ }
105
+ if (
106
+ typeof value === "object" &&
107
+ value !== null &&
108
+ hasInvalidKeys(value)
109
+ ) {
110
+ return true;
111
+ }
112
+ }
113
+ }
114
+ return false;
115
+ }
116
+
117
+ for (const mode of COPILOT_MODES) {
118
+ const schemas = registry.getToolSchemas(mode);
119
+ for (const schema of schemas) {
120
+ expect(hasInvalidKeys(schema.parameters)).toBe(false);
121
+ }
122
+ }
85
123
  });
86
124
  });
@@ -30,13 +30,22 @@ const description: ToolDescription = {
30
30
  ],
31
31
  additionalInfo: `
32
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 is specified by the position object with a "type" field:
36
- { type: "notebook_end" } - Add at the end of the notebook
37
- { type: "relative", cellId: "...", before: true } - Add before the specified cell (before: false for after)
38
- { type: "column_end", columnIndex: 0 } - Add at the end of a specific column (0-based index)
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.
33
+ edit (object): The editing operation to perform with the following structure:
34
+ - type: One of "update_cell", "add_cell", or "delete_cell"
35
+ - code (string, optional): Required for "update_cell" and "add_cell" operations. The code content for the cell.
36
+ - position (object): Always present, with the following structure:
37
+ - type: One of "relative", "column_end", or "notebook_end". Not needed for "delete_cell" or "update_cell" operations.
38
+ - cellId (string, optional): Required for "update_cell", "delete_cell", and "add_cell" with "relative" position type
39
+ - columnIndex (number, optional): Required for "add_cell" with "column_end" position type (0-based index)
40
+ - before (boolean, optional): Required for "add_cell" with "relative" position type (true to add before, false to add after)
41
+
42
+ Operation types:
43
+ - update_cell: Update the code of an existing cell. Requires: code, position.cellId
44
+ - add_cell: Add a new cell to the notebook. Requires: code, and position based on position.type:
45
+ - position.type "notebook_end": Add at the end of the notebook (no additional position fields needed)
46
+ - position.type "relative": Add relative to an existing cell. Requires: position.cellId, position.before
47
+ - position.type "column_end": Add at the end of a specific column. Requires: position.columnIndex
48
+ - delete_cell: Delete an existing cell. Requires: position.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
49
 
41
50
  For adding code, use the following guidelines:
42
51
  - Markdown cells: use mo.md(f"""{content}""") function to insert content.
@@ -46,41 +55,17 @@ const description: ToolDescription = {
46
55
  - A result object containing standard tool metadata.`,
47
56
  };
48
57
 
49
- type CellPosition =
50
- | { type: "relative"; cellId: CellId; before: boolean }
51
- | { type: "column_end"; columnIndex: number }
52
- | { type: "notebook_end" };
53
-
54
58
  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.discriminatedUnion("type", [
64
- z.object({
65
- type: z.literal("relative"),
66
- cellId: z.string() as unknown as z.ZodType<CellId>,
67
- before: z.boolean(),
68
- }),
69
- z.object({
70
- type: z.literal("column_end"),
71
- columnIndex: z.number(),
72
- }),
73
- z.object({
74
- type: z.literal("notebook_end"),
75
- }),
76
- ]) satisfies z.ZodType<CellPosition>,
77
- code: z.string(),
59
+ edit: z.object({
60
+ type: z.enum(["update_cell", "add_cell", "delete_cell"]),
61
+ code: z.string().optional(),
62
+ position: z.object({
63
+ type: z.enum(["relative", "column_end", "notebook_end"]).optional(),
64
+ cellId: z.string().optional(),
65
+ columnIndex: z.number().optional(),
66
+ before: z.boolean().optional(),
78
67
  }),
79
- z.object({
80
- type: z.literal("delete_cell"),
81
- cellId: z.string() as unknown as z.ZodType<CellId>,
82
- }),
83
- ]),
68
+ }),
84
69
  });
85
70
 
86
71
  type EditNotebookInput = z.infer<typeof editNotebookSchema>;
@@ -104,7 +89,24 @@ export class EditNotebookTool
104
89
 
105
90
  switch (edit.type) {
106
91
  case "update_cell": {
107
- const { cellId, code } = edit;
92
+ const { position, code } = edit;
93
+ const cellId = position.cellId as CellId;
94
+
95
+ if (!cellId) {
96
+ throw new ToolExecutionError(
97
+ "Cell ID is required for update_cell",
98
+ "CELL_ID_REQUIRED_FOR_UPDATE_CELL",
99
+ true,
100
+ "Provide a cell ID to update",
101
+ );
102
+ } else if (!code) {
103
+ throw new ToolExecutionError(
104
+ "Code is required for update_cell",
105
+ "CODE_REQUIRED_FOR_UPDATE_CELL",
106
+ true,
107
+ "Provide the new code to update the cell",
108
+ );
109
+ }
108
110
 
109
111
  const notebook = store.get(notebookAtom);
110
112
  this.validateCellIdExists(cellId, notebook);
@@ -144,12 +146,41 @@ export class EditNotebookTool
144
146
  const notebook = store.get(notebookAtom);
145
147
 
146
148
  switch (position.type) {
147
- case "relative":
148
- this.validateCellIdExists(position.cellId, notebook);
149
- notebookPosition = position.cellId;
149
+ case "relative": {
150
+ const cellId = position.cellId as CellId;
151
+ if (!cellId) {
152
+ throw new ToolExecutionError(
153
+ "Cell ID is required for add_cell with relative position",
154
+ "TOOL_ERROR",
155
+ true,
156
+ "Provide a cell ID to add the cell before",
157
+ );
158
+ }
159
+
160
+ if (position.before === undefined) {
161
+ throw new ToolExecutionError(
162
+ "Before is required for add_cell with relative position",
163
+ "TOOL_ERROR",
164
+ true,
165
+ `Provide a boolean value for before, true to add before cell ${cellId}, false to add after the cell`,
166
+ );
167
+ }
168
+
169
+ this.validateCellIdExists(cellId, notebook);
170
+ notebookPosition = cellId;
150
171
  before = position.before;
151
172
  break;
173
+ }
152
174
  case "column_end": {
175
+ if (!position.columnIndex) {
176
+ throw new ToolExecutionError(
177
+ "Column index is required for add_cell with column_end position",
178
+ "TOOL_ERROR",
179
+ true,
180
+ "Provide a column index to add the cell at the end of",
181
+ );
182
+ }
183
+
153
184
  const columnId = this.getColumnId(position.columnIndex, notebook);
154
185
  notebookPosition = { type: "__end__", columnId };
155
186
  break;
@@ -177,7 +208,17 @@ export class EditNotebookTool
177
208
  break;
178
209
  }
179
210
  case "delete_cell": {
180
- const { cellId } = edit;
211
+ const { position } = edit;
212
+ const cellId = position.cellId as CellId;
213
+
214
+ if (!cellId) {
215
+ throw new ToolExecutionError(
216
+ "Cell ID is required for delete_cell",
217
+ "CELL_ID_REQUIRED_FOR_DELETE_CELL",
218
+ true,
219
+ "Provide a cell ID to delete",
220
+ );
221
+ }
181
222
 
182
223
  const notebook = store.get(notebookAtom);
183
224
  this.validateCellIdExists(cellId, notebook);
@@ -123,8 +123,11 @@ export class FrontendToolRegistry {
123
123
  }
124
124
 
125
125
  @Memoize()
126
- getToolSchemas(): FrontendToolDefinition[] {
127
- return [...this.tools.values()].map((tool) => ({
126
+ getToolSchemas(mode: CopilotMode): FrontendToolDefinition[] {
127
+ const tools = [...this.tools.values()].filter((tool) =>
128
+ tool.mode.includes(mode),
129
+ );
130
+ return tools.map((tool) => ({
128
131
  name: tool.name,
129
132
  description: formatToolDescription(tool.description),
130
133
  parameters: z.toJSONSchema(tool.schema),
@@ -0,0 +1,371 @@
1
+ /* Copyright 2024 Marimo. All rights reserved. */
2
+
3
+ import { afterEach, beforeEach, describe, expect, test, vi } from "vitest";
4
+ import type { CellMessage } from "../../kernel/messages";
5
+ import { formatLogTimestamp, getCellLogsForMessage } from "../logs";
6
+
7
+ describe("getCellLogsForMessage", () => {
8
+ beforeEach(() => {
9
+ // Mock console.log to avoid cluttering test output
10
+ vi.spyOn(console, "log").mockImplementation(() => {
11
+ // no-op
12
+ });
13
+ });
14
+
15
+ afterEach(() => {
16
+ vi.restoreAllMocks();
17
+ });
18
+
19
+ test("handles text/plain MIME type on stdout", () => {
20
+ const cellMessage: CellMessage = {
21
+ cell_id: "cell-1",
22
+ console: [
23
+ {
24
+ mimetype: "text/plain",
25
+ channel: "stdout",
26
+ data: "Hello, World!",
27
+ timestamp: 1_234_567_890,
28
+ },
29
+ ],
30
+ output: null,
31
+ status: "idle",
32
+ stale_inputs: null,
33
+ timestamp: 0,
34
+ };
35
+
36
+ const logs = getCellLogsForMessage(cellMessage);
37
+
38
+ expect(logs).toHaveLength(1);
39
+ expect(logs[0]).toEqual({
40
+ timestamp: 1_234_567_890,
41
+ level: "stdout",
42
+ message: "Hello, World!",
43
+ cellId: "cell-1",
44
+ });
45
+ });
46
+
47
+ test("handles text/plain MIME type on stderr", () => {
48
+ const cellMessage: CellMessage = {
49
+ cell_id: "cell-2",
50
+ console: [
51
+ {
52
+ mimetype: "text/plain",
53
+ channel: "stderr",
54
+ data: "Error occurred",
55
+ timestamp: 1_234_567_890,
56
+ },
57
+ ],
58
+ output: null,
59
+ status: "idle",
60
+ stale_inputs: null,
61
+ timestamp: 0,
62
+ };
63
+
64
+ const logs = getCellLogsForMessage(cellMessage);
65
+
66
+ expect(logs).toHaveLength(1);
67
+ expect(logs[0]).toEqual({
68
+ timestamp: 1_234_567_890,
69
+ level: "stderr",
70
+ message: "Error occurred",
71
+ cellId: "cell-2",
72
+ });
73
+ });
74
+
75
+ test("handles text/html MIME type and strips HTML tags", () => {
76
+ const cellMessage: CellMessage = {
77
+ cell_id: "cell-3",
78
+ console: [
79
+ {
80
+ mimetype: "text/html",
81
+ channel: "stdout",
82
+ data: '<span style="color: red;">Error: Something went wrong</span>',
83
+ timestamp: 1_234_567_890,
84
+ },
85
+ ],
86
+ output: null,
87
+ status: "idle",
88
+ stale_inputs: null,
89
+ timestamp: 0,
90
+ };
91
+
92
+ const logs = getCellLogsForMessage(cellMessage);
93
+
94
+ expect(logs).toHaveLength(1);
95
+ expect(logs[0]).toEqual({
96
+ timestamp: 1_234_567_890,
97
+ level: "stdout",
98
+ message: "Error: Something went wrong",
99
+ cellId: "cell-3",
100
+ });
101
+ });
102
+
103
+ test("handles text/html MIME type on stderr", () => {
104
+ const cellMessage: CellMessage = {
105
+ cell_id: "cell-4",
106
+ console: [
107
+ {
108
+ mimetype: "text/html",
109
+ channel: "stderr",
110
+ data: "<div><strong>Critical Error:</strong> System failure</div>",
111
+ timestamp: 1_234_567_890,
112
+ },
113
+ ],
114
+ output: null,
115
+ status: "idle",
116
+ stale_inputs: null,
117
+ timestamp: 0,
118
+ };
119
+
120
+ const logs = getCellLogsForMessage(cellMessage);
121
+
122
+ expect(logs).toHaveLength(1);
123
+ expect(logs[0]).toEqual({
124
+ timestamp: 1_234_567_890,
125
+ level: "stderr",
126
+ message: "Critical Error: System failure",
127
+ cellId: "cell-4",
128
+ });
129
+ });
130
+
131
+ test("handles application/vnd.marimo+traceback MIME type and strips HTML", () => {
132
+ const cellMessage: CellMessage = {
133
+ cell_id: "cell-5",
134
+ console: [
135
+ {
136
+ mimetype: "application/vnd.marimo+traceback",
137
+ channel: "marimo-error",
138
+ data: '<div class="traceback"><span style="color: red;">Traceback (most recent call last):</span><pre> File "test.py", line 1</pre></div>',
139
+ timestamp: 1_234_567_890,
140
+ },
141
+ ],
142
+ output: null,
143
+ status: "idle",
144
+ stale_inputs: null,
145
+ timestamp: 0,
146
+ };
147
+
148
+ const logs = getCellLogsForMessage(cellMessage);
149
+
150
+ expect(logs).toHaveLength(1);
151
+ expect(logs[0].level).toBe("stderr"); // marimo-error should be treated as stderr
152
+ expect(logs[0].message).toContain("Traceback (most recent call last):");
153
+ expect(logs[0].message).toContain('File "test.py", line 1');
154
+ expect(logs[0].cellId).toBe("cell-5");
155
+ });
156
+
157
+ test("handles multiple console outputs with different MIME types", () => {
158
+ const cellMessage: CellMessage = {
159
+ cell_id: "cell-7",
160
+ console: [
161
+ {
162
+ mimetype: "text/plain",
163
+ channel: "stdout",
164
+ data: "Plain text output",
165
+ timestamp: 1_234_567_890,
166
+ },
167
+ {
168
+ mimetype: "text/html",
169
+ channel: "stdout",
170
+ data: "<span>HTML output</span>",
171
+ timestamp: 1_234_567_891,
172
+ },
173
+ {
174
+ mimetype: "application/vnd.marimo+traceback",
175
+ channel: "stderr",
176
+ data: "<div>Traceback error</div>",
177
+ timestamp: 1_234_567_892,
178
+ },
179
+ ],
180
+ output: null,
181
+ status: "idle",
182
+ stale_inputs: null,
183
+ timestamp: 0,
184
+ };
185
+
186
+ const logs = getCellLogsForMessage(cellMessage);
187
+
188
+ expect(logs).toHaveLength(3);
189
+ expect(logs[0].message).toBe("Plain text output");
190
+ expect(logs[1].message).toBe("HTML output");
191
+ expect(logs[2].message).toBe("Traceback error");
192
+ });
193
+
194
+ test("uses Date.now() when timestamp is missing", () => {
195
+ const now = Date.now();
196
+ vi.spyOn(Date, "now").mockReturnValue(now);
197
+
198
+ const cellMessage: CellMessage = {
199
+ cell_id: "cell-8",
200
+ console: [
201
+ {
202
+ mimetype: "text/plain",
203
+ channel: "stdout",
204
+ data: "No timestamp",
205
+ // timestamp is undefined
206
+ },
207
+ ],
208
+ output: null,
209
+ status: "idle",
210
+ stale_inputs: null,
211
+ timestamp: 0,
212
+ };
213
+
214
+ const logs = getCellLogsForMessage(cellMessage);
215
+
216
+ expect(logs).toHaveLength(1);
217
+ expect(logs[0].timestamp).toBe(now);
218
+ });
219
+
220
+ test("ignores unsupported MIME types", () => {
221
+ const cellMessage: CellMessage = {
222
+ cell_id: "cell-9",
223
+ console: [
224
+ {
225
+ mimetype: "application/json",
226
+ channel: "stdout",
227
+ data: '{"key": "value"}',
228
+ timestamp: 1_234_567_890,
229
+ },
230
+ ],
231
+ output: null,
232
+ status: "idle",
233
+ stale_inputs: null,
234
+ timestamp: 0,
235
+ };
236
+
237
+ const logs = getCellLogsForMessage(cellMessage);
238
+
239
+ expect(logs).toHaveLength(0);
240
+ });
241
+
242
+ test("ignores non-logging channels", () => {
243
+ const cellMessage: CellMessage = {
244
+ cell_id: "cell-10",
245
+ console: [
246
+ {
247
+ mimetype: "text/plain",
248
+ channel: "pdb" as unknown as "stdout", // Non-logging channel
249
+ data: "Should be ignored",
250
+ timestamp: 1_234_567_890,
251
+ },
252
+ ],
253
+ output: null,
254
+ status: "idle",
255
+ stale_inputs: null,
256
+ timestamp: 0,
257
+ };
258
+
259
+ const logs = getCellLogsForMessage(cellMessage);
260
+
261
+ expect(logs).toHaveLength(0);
262
+ });
263
+
264
+ test("returns empty array when console is null", () => {
265
+ const cellMessage: CellMessage = {
266
+ cell_id: "cell-11",
267
+ console: null as unknown as CellMessage["console"],
268
+ output: null,
269
+ status: "idle",
270
+ stale_inputs: null,
271
+ timestamp: 0,
272
+ };
273
+
274
+ const logs = getCellLogsForMessage(cellMessage);
275
+
276
+ expect(logs).toHaveLength(0);
277
+ });
278
+
279
+ test("handles complex HTML with nested elements in text/html", () => {
280
+ const cellMessage: CellMessage = {
281
+ cell_id: "cell-12",
282
+ console: [
283
+ {
284
+ mimetype: "text/html",
285
+ channel: "stdout",
286
+ data: "<div><span>Nested</span> <strong>HTML</strong> <em>content</em></div>",
287
+ timestamp: 1_234_567_890,
288
+ },
289
+ ],
290
+ output: null,
291
+ status: "idle",
292
+ stale_inputs: null,
293
+ timestamp: 0,
294
+ };
295
+
296
+ const logs = getCellLogsForMessage(cellMessage);
297
+
298
+ expect(logs).toHaveLength(1);
299
+ expect(logs[0].message).toBe("Nested HTML content");
300
+ });
301
+
302
+ test("handles marimo-error channel as stderr level", () => {
303
+ const cellMessage: CellMessage = {
304
+ cell_id: "cell-13",
305
+ console: [
306
+ {
307
+ mimetype: "text/plain",
308
+ channel: "marimo-error",
309
+ data: "Internal error",
310
+ timestamp: 1_234_567_890,
311
+ },
312
+ ],
313
+ output: null,
314
+ status: "idle",
315
+ stale_inputs: null,
316
+ timestamp: 0,
317
+ };
318
+
319
+ const logs = getCellLogsForMessage(cellMessage);
320
+
321
+ expect(logs).toHaveLength(1);
322
+ expect(logs[0].level).toBe("stderr");
323
+ });
324
+ });
325
+
326
+ describe("formatLogTimestamp", () => {
327
+ test("formats unix timestamp correctly", () => {
328
+ // January 1, 2024, 12:00:00 PM UTC
329
+ const timestamp = 1_704_110_400;
330
+ const result = formatLogTimestamp(timestamp);
331
+
332
+ // The result depends on the timezone, so we just check it's not empty
333
+ // and contains expected time format elements
334
+ expect(result).toBeTruthy();
335
+ expect(result).toMatch(/\d+:\d+:\d+/); // Should contain time format
336
+ });
337
+
338
+ test("formats timestamp with AM/PM notation", () => {
339
+ const timestamp = 1_704_110_400; // Noon
340
+ const result = formatLogTimestamp(timestamp);
341
+
342
+ // Should contain AM or PM
343
+ expect(result).toMatch(/AM|PM/);
344
+ });
345
+
346
+ test("returns 'Invalid Date' for invalid timestamp", () => {
347
+ const invalidTimestamp = Number.NaN;
348
+ const result = formatLogTimestamp(invalidTimestamp);
349
+
350
+ expect(result).toBe("Invalid Date");
351
+ });
352
+
353
+ test("handles edge case: zero timestamp", () => {
354
+ const timestamp = 0; // Unix epoch
355
+ const result = formatLogTimestamp(timestamp);
356
+
357
+ // Should format successfully (Jan 1, 1970)
358
+ expect(result).toBeTruthy();
359
+ expect(result).toMatch(/\d+:\d+:\d+/);
360
+ });
361
+
362
+ test("handles recent timestamp", () => {
363
+ // Use a recent timestamp (seconds since epoch)
364
+ const timestamp = Math.floor(Date.now() / 1000);
365
+ const result = formatLogTimestamp(timestamp);
366
+
367
+ expect(result).toBeTruthy();
368
+ expect(result).toMatch(/\d+:\d+:\d+/);
369
+ expect(result).toMatch(/AM|PM/);
370
+ });
371
+ });
@@ -446,9 +446,6 @@ describe("notebookStateFromSession", () => {
446
446
  const session = createSession([]);
447
447
  const result = notebookStateFromSession(session, null);
448
448
 
449
- expect(Logger.warn).toHaveBeenCalledWith(
450
- "Session and notebook must have at least one cell",
451
- );
452
449
  expect(result).toBeNull();
453
450
  });
454
451
 
@@ -456,9 +453,6 @@ describe("notebookStateFromSession", () => {
456
453
  const notebook = createNotebook([]);
457
454
  const result = notebookStateFromSession(null, notebook);
458
455
 
459
- expect(Logger.warn).toHaveBeenCalledWith(
460
- "Session and notebook must have at least one cell",
461
- );
462
456
  expect(result).toBeNull();
463
457
  });
464
458
 
@@ -467,9 +461,6 @@ describe("notebookStateFromSession", () => {
467
461
  const notebook = createNotebook([]);
468
462
  const result = notebookStateFromSession(session, notebook);
469
463
 
470
- expect(Logger.warn).toHaveBeenCalledWith(
471
- "Session and notebook must have at least one cell",
472
- );
473
464
  expect(result).toBeNull();
474
465
  });
475
466
  });