@marimo-team/islands 0.16.5 → 0.17.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (681) hide show
  1. package/dist/{fullscreen-D1yTiBlu.js → Combination-De9yoNY5.js} +855 -795
  2. package/dist/{ConnectedDataExplorerComponent-D96i9G-X.js → ConnectedDataExplorerComponent-DuvpJOKp.js} +102 -123
  3. package/dist/{ImageComparisonComponent-D4Tv9QzJ.js → ImageComparisonComponent--etUl2pp.js} +2 -2
  4. package/dist/{_baseIsEqual-oN7pRNcM.js → _baseIsEqual-BFlyFUxC.js} +20 -20
  5. package/dist/{_basePickBy-CYvzhRjy.js → _basePickBy-gCCvtjgp.js} +3 -3
  6. package/dist/{_baseProperty-DGUdIBuu.js → _baseProperty-BuqBC0Ie.js} +5 -5
  7. package/dist/{_baseUniq-B5gfSl8S.js → _baseUniq-CKN9mEDq.js} +5 -5
  8. package/dist/any-language-editor-Du2Q_6IK.js +156 -0
  9. package/dist/apl-CUm2DGqh.js +4 -0
  10. package/dist/{arc-B1iVbHTB.js → arc-C_O2hc-b.js} +2 -2
  11. package/dist/architecture-O4VJ6CD3-PFw3eFBY.js +21 -0
  12. package/dist/{architectureDiagram-W76B3OCA-DkEhipkW.js → architectureDiagram-W76B3OCA-CrK99pJi.js} +41 -40
  13. package/dist/asciiarmor-lqJ78U01.js +4 -0
  14. package/dist/asn1-CjwpSTlW.js +4 -0
  15. package/dist/assets/__vite-browser-external-DHoMWs4M.js +1 -0
  16. package/dist/assets/worker-B6tH8gPO.js +54 -0
  17. package/dist/{blockDiagram-QIGZ2CNN-DZOqLMYa.js → blockDiagram-QIGZ2CNN-BJOEyO6w.js} +101 -111
  18. package/dist/brainfuck-ClvDI1dq.js +4 -0
  19. package/dist/{button-CEcjneWG.js → button-ADXOb_gX.js} +37 -40
  20. package/dist/{c4Diagram-FPNF74CW-DVaR7c9q.js → c4Diagram-FPNF74CW-7Pz_X9wF.js} +31 -54
  21. package/dist/{channel-Uh0KpgGW.js → channel-X-wRUxX6.js} +1 -1
  22. package/dist/{check-BK9zDfQk.js → check-COlaG7Ss.js} +1 -1
  23. package/dist/{chunk-3AY6CYHV-Dk2R2-S1.js → chunk-3AY6CYHV-BQH2fFpA.js} +37 -37
  24. package/dist/{chunk-4BX2VUAB-CqO6zUIz.js → chunk-4BX2VUAB-D-QtDCKM.js} +1 -1
  25. package/dist/{chunk-4KMFLZZN-CloTfTwP.js → chunk-4KMFLZZN-BirZvvJS.js} +220 -329
  26. package/dist/{chunk-55IACEB6-I0rmqTua.js → chunk-55IACEB6-DjtPYZKs.js} +1 -1
  27. package/dist/{chunk-6OXUPJBA-BuROSTmo.js → chunk-6OXUPJBA-CTnnqlzw.js} +7 -7
  28. package/dist/{chunk-7GE3RBXV-B1-tsIPP.js → chunk-7GE3RBXV-CT47hCrL.js} +1 -1
  29. package/dist/{chunk-ABZYJK2D-CLlso8tj.js → chunk-ABZYJK2D-B6ZsU6SR.js} +484 -1043
  30. package/dist/{chunk-BN7GFLIU-Db2-FjLn.js → chunk-BN7GFLIU-DYWEsrG4.js} +1 -1
  31. package/dist/{chunk-CVBHYZKI-BONeiloK.js → chunk-CVBHYZKI-BuzDGXz0.js} +3 -3
  32. package/dist/{chunk-CXMOBAN2-U9GJSP1d.js → chunk-CXMOBAN2-Bas2S5w1.js} +46 -54
  33. package/dist/chunk-EXTU4WIE-DXwNSukz.js +10 -0
  34. package/dist/{chunk-FMBD7UC4-DyV3BR_I.js → chunk-FMBD7UC4-CYKEpuPr.js} +1 -1
  35. package/dist/{chunk-JA3XYJ7Z-C9A1076P.js → chunk-JA3XYJ7Z-DcxfkcDC.js} +21 -25
  36. package/dist/{chunk-JEIROHC2-BGnFkSVq.js → chunk-JEIROHC2-C01ZIcIG.js} +1 -1
  37. package/dist/{chunk-K7UQS3LO-033LOsjK.js → chunk-K7UQS3LO-CmbT97MV.js} +7 -7
  38. package/dist/{chunk-KMC2YHZD-DT4Sq4Ld.js → chunk-KMC2YHZD-D64m-1E1.js} +1 -1
  39. package/dist/{chunk-QN33PNHL-gs44MZla.js → chunk-QN33PNHL-DjB0j8Dr.js} +2 -2
  40. package/dist/{chunk-QYVHNE3D-B8BO1AnT.js → chunk-QYVHNE3D-VA4W4oxG.js} +3 -4
  41. package/dist/{chunk-QZHKN3VN-CeN_GkU6.js → chunk-QZHKN3VN-KT0fl3Em.js} +1 -1
  42. package/dist/chunk-S3R3BYOJ-C5zmcMvn.js +380 -0
  43. package/dist/{chunk-T44TD3VJ-BwzD6YE0.js → chunk-T44TD3VJ-BMOgu-Hk.js} +1 -1
  44. package/dist/{chunk-TVAH2DTR-Bi6jpQJQ.js → chunk-TVAH2DTR-eKm8SKnH.js} +7 -8
  45. package/dist/{chunk-TZMSLE5B-D8klz2H_.js → chunk-TZMSLE5B-CQxFRiI2.js} +5 -6
  46. package/dist/{chunk-WFRQ32O7-CzSwSlN0.js → chunk-WFRQ32O7-Dg51o277.js} +1 -1
  47. package/dist/{chunk-WFWHJNB7-DN_cavM6.js → chunk-WFWHJNB7-DVLO98ge.js} +1 -1
  48. package/dist/{chunk-XRWGC2XP-Bb5eGNM2.js → chunk-XRWGC2XP-UNFKdWQh.js} +1 -1
  49. package/dist/{chunk-ZPAFE4SF-S5UYNb0V.js → chunk-ZPAFE4SF-DbCSwfLK.js} +22 -22
  50. package/dist/classDiagram-KNZD7YFC-HUFFxNdk.js +40 -0
  51. package/dist/classDiagram-v2-RKCZMP56-Dw7Acmuf.js +40 -0
  52. package/dist/{click-outside-container-DE4e7p1p.js → click-outside-container-2BH589Bq.js} +9 -14
  53. package/dist/{clike-Cg_DBrJ0.js → clike-Bc2PZzZQ.js} +1 -1
  54. package/dist/{clike-CxAz4p9E.js → clike-CytFO-kN.js} +1 -1
  55. package/dist/clojure-8GefCgPe.js +4 -0
  56. package/dist/{clone-Dk4FkKH0.js → clone-CCgVUJ6x.js} +1 -1
  57. package/dist/cmake-yAhT9H0F.js +4 -0
  58. package/dist/cobol-BmltueOY.js +4 -0
  59. package/dist/coffeescript-C7KEQBcH.js +4 -0
  60. package/dist/commonlisp-CNbiJRU-.js +4 -0
  61. package/dist/{constants-Cjd_3kwd.js → constants-BaCMVd12.js} +3 -3
  62. package/dist/{copy-C5RFg7ok.js → copy-GNcK40wy.js} +6 -2
  63. package/dist/{cose-bilkent-S5V4N54A-B3iOTGu5.js → cose-bilkent-S5V4N54A-BnvuJG6Y.js} +20 -20
  64. package/dist/crystal-OdjZZ8bc.js +4 -0
  65. package/dist/css-DhTxMmL_.js +5 -0
  66. package/dist/cypher-CgN8E3YI.js +4 -0
  67. package/dist/{cytoscape.esm-DTDV0Nbj.js → cytoscape.esm-BFEMljQI.js} +586 -661
  68. package/dist/d-g41sJcBC.js +4 -0
  69. package/dist/{dagre-5GWH7T2D-KM4Z11yT.js → dagre-5GWH7T2D-rn7tZYaQ.js} +41 -45
  70. package/dist/{dagre-B0u1urxE.js → dagre-Bghq6VKO.js} +58 -77
  71. package/dist/data-grid-overlay-editor-B4_Caieu.js +133 -0
  72. package/dist/{diagram-N5W7TBWH-CtO7az4G.js → diagram-N5W7TBWH-lbF94o-g.js} +46 -61
  73. package/dist/diagram-QEK2KX5R-CKBhSzsO.js +246 -0
  74. package/dist/{diagram-S2PKOQOG-CiXElLNQ.js → diagram-S2PKOQOG-161_1f53.js} +35 -34
  75. package/dist/diff-ViRYYhhg.js +4 -0
  76. package/dist/{dist-C3WYsf4K.js → dist-28HYzERB.js} +4 -10
  77. package/dist/{dist-CChOkSUg.js → dist-4dtbqf8A.js} +3 -3
  78. package/dist/{dist-CUnh_3Ii.js → dist-71jYYbWP.js} +2 -2
  79. package/dist/{dist-elblfNXO.js → dist-B8Pbw5ln.js} +2 -2
  80. package/dist/{dist-DPF5TTUg.js → dist-BAqp4Vtl.js} +126 -115
  81. package/dist/{dist-BEvIw5Nh.js → dist-BBhmkni2.js} +1 -1
  82. package/dist/{dist-C7ASiFxI.js → dist-BNRdMfJH.js} +273 -263
  83. package/dist/dist-BSyYM1Gi.js +15 -0
  84. package/dist/{dist-DzOpMdwb.js → dist-BYHiiJB-.js} +4 -4
  85. package/dist/{dist-DKFaZRVk.js → dist-B_wjJqqS.js} +2 -2
  86. package/dist/{dist-CutXTm8t.js → dist-BaPjLM6s.js} +1 -1
  87. package/dist/dist-BfJO8Bm9.js +12 -0
  88. package/dist/{dist-CGIZPq3J.js → dist-BqdQPWpQ.js} +2 -2
  89. package/dist/{dist--I6Htnlv.js → dist-C2IEc8og.js} +5 -5
  90. package/dist/{dist-CLvpViod.js → dist-C9-uHBqC.js} +2 -3
  91. package/dist/{dist-DBhzmFyH.js → dist-CJb8EiFO.js} +3 -3
  92. package/dist/dist-CLuF3AtO.js +6 -0
  93. package/dist/{dist-Dzk1C8l5.js → dist-CNAkUyxv.js} +11 -14
  94. package/dist/{dist-DNnYAdRE.js → dist-CNvMOZu9.js} +2 -2
  95. package/dist/{dist-CxD5E6Sh.js → dist-CPNnKuPh.js} +24 -22
  96. package/dist/{dist-C3QUag__.js → dist-CTIyD_KU.js} +3 -3
  97. package/dist/dist-CU04U4NL.js +10 -0
  98. package/dist/{dist-CZfRM7pE.js → dist-CWh5ZwcC.js} +2 -2
  99. package/dist/{dist-DW9er3Zq.js → dist-CWqB4bg8.js} +44 -23
  100. package/dist/{dist-CbRkrKrP.js → dist-CtOeHDJp.js} +5 -5
  101. package/dist/{dist-DL_ci7Yc.js → dist-Cw0F6l-7.js} +1 -1
  102. package/dist/{dist-BZBitvuL.js → dist-CwZcC4om.js} +1 -1
  103. package/dist/dist-DNUT6b47.js +6 -0
  104. package/dist/{dist-BBlFk9ki.js → dist-Da046MhT.js} +1 -1
  105. package/dist/{dist-Cib4sGDA.js → dist-DaTVdKJa.js} +2 -2
  106. package/dist/dist-DbAb2sY7.js +6 -0
  107. package/dist/dist-DiDFQ2Rk.js +6 -0
  108. package/dist/{dist-BQmQQqFH.js → dist-DlK420ke.js} +1 -1
  109. package/dist/{dist-o7fhJC7U.js → dist-Drf3cyIW.js} +3 -3
  110. package/dist/{dist-CdE2C2In.js → dist-DxESp2-T.js} +15 -20
  111. package/dist/{dist-JCAky9ND.js → dist-DzJem5xc.js} +17 -22
  112. package/dist/{dist-C5zMs_n5.js → dist-O0zVziwn.js} +3 -3
  113. package/dist/dist-SNAyAOJ-.js +6 -0
  114. package/dist/{dist-Bar1QnNM.js → dist-_4cudra1.js} +3 -3
  115. package/dist/dist-cbW5xJNV.js +6 -0
  116. package/dist/dist-h8eGLSbK.js +10 -0
  117. package/dist/{dist-BqgkUnEN.js → dist-xLN9qCAp.js} +3 -3
  118. package/dist/{dockerfile-Dum_1b-5.js → dockerfile-Cmlcqk35.js} +1 -1
  119. package/dist/dtd-RplB6hDg.js +4 -0
  120. package/dist/dylan-BX8KJufP.js +4 -0
  121. package/dist/ecl-CWtLaNMH.js +4 -0
  122. package/dist/eiffel-C-mlZPMn.js +4 -0
  123. package/dist/elm-CWp06vcb.js +4 -0
  124. package/dist/{erDiagram-AWTI2OKA-ZTIl9iQO.js → erDiagram-AWTI2OKA-BU7Qig7n.js} +32 -31
  125. package/dist/erlang-pfp22AZM.js +4 -0
  126. package/dist/error-banner-BAWlXn49.js +1012 -0
  127. package/dist/{esm-d0g2RsOH.js → esm-AtKNNGYO.js} +7 -9
  128. package/dist/esm-B2pocBPL.js +26 -0
  129. package/dist/{esm-DxFkg7a6.js → esm-Oo8OvZ6m.js} +1529 -1493
  130. package/dist/{esm-1_Mp6VD2.js → esm-YVnxJqkD.js} +340 -411
  131. package/dist/{factor-CdgiDGiu.js → factor-BZnBK3CG.js} +1 -1
  132. package/dist/factor-CEn53jua.js +5 -0
  133. package/dist/{flowDiagram-PVAE7QVJ-DsbofOzu.js → flowDiagram-PVAE7QVJ-JKJebWeY.js} +41 -40
  134. package/dist/{formats-ChrNdVdJ.js → formats-DOEuF6TR.js} +15 -19
  135. package/dist/forth-CL8vu_y8.js +4 -0
  136. package/dist/fortran-DsmXkYtE.js +4 -0
  137. package/dist/{ganttDiagram-OWAHRB6G-FnCH1Yj3.js → ganttDiagram-OWAHRB6G-BvWRfg05.js} +17 -16
  138. package/dist/gas-mYt9Rtlx.js +4 -0
  139. package/dist/gherkin-DHNCKBNj.js +4 -0
  140. package/dist/gitGraph-ZV4HHKMB-Cpd6k0O8.js +21 -0
  141. package/dist/{gitGraphDiagram-NY62KEGX-B0wvMNqU.js → gitGraphDiagram-NY62KEGX-VEJJBf5L.js} +38 -40
  142. package/dist/{glide-data-editor-D_kEsT07.js → glide-data-editor-Bne10icG.js} +1703 -1771
  143. package/dist/{graphlib-BGmr7CYF.js → graphlib-DRS8CrjA.js} +5 -5
  144. package/dist/groovy-DzRtOS5a.js +4 -0
  145. package/dist/haskell-Bl9iT_Mp.js +4 -0
  146. package/dist/haxe-DqA0ED6k.js +5 -0
  147. package/dist/{hotkeys-yFrUwyJK.js → hotkeys-DVxFjl2s.js} +16 -7
  148. package/dist/idl-WU2hil4i.js +4 -0
  149. package/dist/info-63CPKGFF-CG-xzUJo.js +21 -0
  150. package/dist/infoDiagram-STP46IZ2-zoRBGoup.js +45 -0
  151. package/dist/invariant-D3JoRb4I.js +6 -0
  152. package/dist/{isArrayLikeObject-DiDsNamC.js → isArrayLikeObject-DU5MCuQM.js} +3 -5
  153. package/dist/{isEmpty-BBG-u1GM.js → isEmpty-Do_v2sls.js} +2 -2
  154. package/dist/{isSymbol-BxF-_8BA.js → isSymbol-CtkA8Y0a.js} +1 -1
  155. package/dist/{javascript-Dfq1qI35.js → javascript-DGukg1sB.js} +2 -2
  156. package/dist/javascript-QY2BGJeV.js +5 -0
  157. package/dist/jinja2-Czleq7Sk.js +4 -0
  158. package/dist/{journeyDiagram-BIP6EPQ6-B3PotfAW.js → journeyDiagram-BIP6EPQ6-CsgEQgxh.js} +28 -28
  159. package/dist/julia-Dru3Qi0y.js +4 -0
  160. package/dist/{kanban-definition-6OIFK2YF-BTrQZ3LN.js → kanban-definition-6OIFK2YF-Bi8Ete2P.js} +42 -41
  161. package/dist/{katex-dN__NFdn.js → katex-C-g3rKKt.js} +1 -1
  162. package/dist/{katex-BE4xflfm.js → katex-DgfMWJY9.js} +149 -173
  163. package/dist/{label-BinTsX-u.js → label-BiVIU_wb.js} +252 -253
  164. package/dist/{line-C6-zz71o.js → line-B7-GoF1m.js} +3 -3
  165. package/dist/{linear-DyTdUIqX.js → linear-DeGGALuc.js} +4 -4
  166. package/dist/livescript-Dxqi_HLT.js +4 -0
  167. package/dist/{loader-Dijti3y4.js → loader-BBqwtZWj.js} +19 -26
  168. package/dist/lua-ByH1cUQZ.js +4 -0
  169. package/dist/main.js +17025 -17039
  170. package/dist/{marked.esm-3RjvXPoO.js → marked.esm-DkVwEwtO.js} +5 -5
  171. package/dist/mathematica-CWJIFuES.js +4 -0
  172. package/dist/mbox-qhPIGaUI.js +4 -0
  173. package/dist/{memoize-Dq87l1O_.js → memoize-D7eDkf3R.js} +1 -1
  174. package/dist/{merge-BPDCIm8P.js → merge-C_6cGM6o.js} +1 -1
  175. package/dist/{mermaid-MWiyXDcI.js → mermaid-BmtvsZ2m.js} +323 -339
  176. package/dist/{mermaid-parser.core-CSFx6MQ7.js → mermaid-parser.core-geyG_6o0.js} +8 -8
  177. package/dist/{mhchem-DZ68WS0G.js → mhchem-OhAaJ0fA.js} +1 -1
  178. package/dist/{min-BzhKOmZo.js → min-Dwa_NbP6.js} +7 -7
  179. package/dist/{mindmap-definition-Q6HEUPPD-9hhnrO1k.js → mindmap-definition-Q6HEUPPD-B-wmX1oG.js} +29 -28
  180. package/dist/mirc-yYcXhXBY.js +4 -0
  181. package/dist/mllike-BfT_Nl9x.js +6 -0
  182. package/dist/modelica-lVDtz1Rm.js +4 -0
  183. package/dist/mscgen-DvwdD1QJ.js +6 -0
  184. package/dist/mumps-BiY3GwKd.js +4 -0
  185. package/dist/{node-sql-parser-13oju30e.js → node-sql-parser-CoPWN4hn.js} +14343 -14351
  186. package/dist/{now-DVBcRCoE.js → now-DumxsrcX.js} +1 -1
  187. package/dist/{nsis-BW6_XagK.js → nsis-D4bLR_Y1.js} +1 -1
  188. package/dist/nsis-Dk18Sq_4.js +5 -0
  189. package/dist/ntriples-Cj-8VqKF.js +4 -0
  190. package/dist/{number-overlay-editor-D1YdiOrm.js → number-overlay-editor-D6r-48ka.js} +18 -24
  191. package/dist/octave-BgFAaYjU.js +4 -0
  192. package/dist/once-3OSMKEsL.js +74 -0
  193. package/dist/{ordinal-BXk5xAj2.js → ordinal-DpEbSVPc.js} +1 -1
  194. package/dist/oz-IsEG1I1m.js +4 -0
  195. package/dist/packet-HUATNLJX-Cafuo3IG.js +21 -0
  196. package/dist/pascal-BVf7FtIE.js +4 -0
  197. package/dist/perl-BM0-y4mZ.js +4 -0
  198. package/dist/pie-WTHONI2E-BE0pHBwB.js +21 -0
  199. package/dist/{pieDiagram-ADFJNKIX-CSBC0ZgF.js → pieDiagram-ADFJNKIX-C3GvPNUL.js} +40 -39
  200. package/dist/pig-CLBjzQmc.js +4 -0
  201. package/dist/powershell-B_qvE33J.js +4 -0
  202. package/dist/powershell-Dr7WZMDU.js +236 -0
  203. package/dist/{precisionRound-DbP73hkf.js → precisionRound-7YYJq2rW.js} +1 -1
  204. package/dist/properties-CUTpsH2y.js +4 -0
  205. package/dist/protobuf-DqCP8a-0.js +4 -0
  206. package/dist/pug-BvexKkw4.js +5 -0
  207. package/dist/{pug-Bmups_z0.js → pug-Dv3gE36O.js} +1 -1
  208. package/dist/puppet-CoIi0R3f.js +4 -0
  209. package/dist/purify.es-CrfFzTyi.js +536 -0
  210. package/dist/python-C-11-YMh.js +5 -0
  211. package/dist/{q-BzWcnVri.js → q-BzRpKgfd.js} +3 -2
  212. package/dist/q-CCVgEip7.js +4 -0
  213. package/dist/{quadrantDiagram-LMRXKWRM-h7nHf8xG.js → quadrantDiagram-LMRXKWRM-DPXwGNVa.js} +11 -10
  214. package/dist/r-CIdR0Sfs.js +4 -0
  215. package/dist/radar-NJJJXTRR-0adgjw0u.js +21 -0
  216. package/dist/{range-CgK0-PEw.js → range-CIbLpsrs.js} +3 -3
  217. package/dist/{react-plotly-BZakcxdv.js → react-plotly-DYyvxcRD.js} +4365 -4706
  218. package/dist/{requirementDiagram-4UW4RH46-BGEurQYq.js → requirementDiagram-4UW4RH46-Cs3Hqnm0.js} +24 -23
  219. package/dist/rpm-Dwvm039g.js +5 -0
  220. package/dist/ruby-DpTnO5gb.js +4 -0
  221. package/dist/{sankeyDiagram-GR3RE2ED-CxeJ_jfl.js → sankeyDiagram-GR3RE2ED-Be1d_Xf7.js} +7 -6
  222. package/dist/sas-CK9boxgv.js +4 -0
  223. package/dist/scheme-Y1aYL-Qq.js +4 -0
  224. package/dist/{sequenceDiagram-C3RYC4MD-CbFxwyr_.js → sequenceDiagram-C3RYC4MD-lbtovKTa.js} +24 -33
  225. package/dist/shell-D3eXGsHd.js +4 -0
  226. package/dist/sieve-BdwSFdWJ.js +4 -0
  227. package/dist/{simple-mode-Cgyya8F-.js → simple-mode-BMmwP_vI.js} +1 -1
  228. package/dist/{slides-component-BEyG25AH.js → slides-component-BoeQU7-s.js} +1012 -1033
  229. package/dist/smalltalk-BTYJquCm.js +4 -0
  230. package/dist/sparql-CYF0g4Cc.js +4 -0
  231. package/dist/{src-BNNJRxz3.js → src-BTqT1mA1.js} +6 -6
  232. package/dist/{stateDiagram-KXAO66HF-A61bMf29.js → stateDiagram-KXAO66HF-BmbR-Rol.js} +48 -49
  233. package/dist/stateDiagram-v2-UMBNRL4Z-DdJ7qVWc.js +39 -0
  234. package/dist/{step-IHYrujTc.js → step-2RJrMSSG.js} +1 -1
  235. package/dist/stex-CyWhoWHt.js +5 -0
  236. package/dist/style.css +1 -1
  237. package/dist/stylus-BBiKaI2h.js +4 -0
  238. package/dist/swift-COb15qFR.js +4 -0
  239. package/dist/tcl-Jik1LXu9.js +4 -0
  240. package/dist/textile-BFHPD3wr.js +4 -0
  241. package/dist/{time-D3tzCqJ6.js → time-BB30r1tK.js} +4 -4
  242. package/dist/{timeline-definition-XQNQX7LJ-BwdsB7CR.js → timeline-definition-XQNQX7LJ-1mv5caPW.js} +17 -17
  243. package/dist/{timer-D3Zlu9ow.js → timer-CcUhugb0.js} +2 -2
  244. package/dist/{toNumber-efKT08hh.js → toNumber-D3Ystr3y.js} +2 -2
  245. package/dist/{toString-BvCd3yJc.js → toString-CbuxCRDG.js} +2 -2
  246. package/dist/{toml-CIUkU1CP.js → toml-BqNUJWRI.js} +6 -2
  247. package/dist/toml-Brp9fBXs.js +4 -0
  248. package/dist/treemap-75Q7IDZK-CyBT8_Wh.js +21 -0
  249. package/dist/troff-CcZRW4vg.js +4 -0
  250. package/dist/ttcn-Bz_6ifRd.js +4 -0
  251. package/dist/ttcn-cfg-v-yi2rKc.js +4 -0
  252. package/dist/turtle-CDOsZYhB.js +4 -0
  253. package/dist/{types-1X1uZB4y.js → types-BPohCsA7.js} +198 -278
  254. package/dist/{useAsyncData-C4IqQK0g.js → useAsyncData-DHBqeb9a.js} +3 -2
  255. package/dist/{useDateFormatter-BCsBqetx.js → useDateFormatter-BkbjKw83.js} +9 -9
  256. package/dist/useIframeCapabilities-BEvvwlwt.js +46 -0
  257. package/dist/{useTheme-C2pgJzDH.js → useTheme-CnMbo-iq.js} +32 -29
  258. package/dist/vb-CL7fRwRw.js +4 -0
  259. package/dist/vbscript-CR2xfxpw.js +4 -0
  260. package/dist/{vega-component-Cv4J8CHz.js → vega-component-BfFcXZxw.js} +40 -39
  261. package/dist/{vega-loader.browser.module-Bi3ttvdj.js → vega-loader.browser.module-CFMtdrNw.js} +4 -5
  262. package/dist/velocity-CfuZoxPt.js +4 -0
  263. package/dist/verilog-CySTkzw_.js +4 -0
  264. package/dist/vhdl-Dvcd8KHW.js +4 -0
  265. package/dist/webidl-tbJt7sKk.js +4 -0
  266. package/dist/xquery-DJQVztyc.js +4 -0
  267. package/dist/{xychartDiagram-6GGTOJPD-BJRRi5HC.js → xychartDiagram-6GGTOJPD-njc-naaw.js} +24 -24
  268. package/dist/yacas-BbgBReEH.js +4 -0
  269. package/dist/z80-DPyb8VGz.js +4 -0
  270. package/dist/{zod-UPQf9SGn.js → zod-mAEs2ITo.js} +71 -81
  271. package/package.json +21 -17
  272. package/src/__mocks__/requests.ts +2 -0
  273. package/src/components/app-config/ai-config.tsx +1 -3
  274. package/src/components/app-config/common.tsx +14 -0
  275. package/src/components/app-config/data-form.tsx +282 -0
  276. package/src/components/app-config/user-config-form.tsx +36 -219
  277. package/src/components/chat/acp/__tests__/state.test.ts +75 -2
  278. package/src/components/chat/acp/agent-panel.tsx +143 -89
  279. package/src/components/chat/acp/blocks.tsx +77 -34
  280. package/src/components/chat/acp/state.ts +5 -1
  281. package/src/components/chat/acp/thread.tsx +12 -1
  282. package/src/components/chat/chat-panel.tsx +38 -5
  283. package/src/components/chat/chat-utils.ts +16 -5
  284. package/src/components/chat/markdown-renderer.css +1 -0
  285. package/src/components/chat/tool-call-accordion.tsx +7 -1
  286. package/src/components/data-table/__tests__/header-items.test.tsx +117 -0
  287. package/src/components/data-table/charts/__tests__/storage.test.ts +12 -6
  288. package/src/components/data-table/charts/charts.tsx +8 -2
  289. package/src/components/data-table/charts/storage.ts +1 -1
  290. package/src/components/data-table/column-header.tsx +4 -2
  291. package/src/components/data-table/column-wrapping/feature.ts +2 -0
  292. package/src/components/data-table/columns.tsx +12 -3
  293. package/src/components/data-table/data-table.tsx +7 -2
  294. package/src/components/data-table/header-items.tsx +63 -10
  295. package/src/components/data-table/renderers.tsx +3 -2
  296. package/src/components/dependency-graph/custom-node.tsx +11 -11
  297. package/src/components/dependency-graph/elements.ts +9 -4
  298. package/src/components/dependency-graph/panels.tsx +6 -4
  299. package/src/components/editor/Output.tsx +34 -25
  300. package/src/components/editor/actions/useCellActionButton.tsx +20 -4
  301. package/src/components/editor/ai/add-cell-with-ai.tsx +17 -3
  302. package/src/components/editor/ai/ai-completion-editor.tsx +203 -26
  303. package/src/components/editor/ai/completion-handlers.tsx +126 -23
  304. package/src/components/editor/cell/StagedAICell.tsx +81 -12
  305. package/src/components/editor/cell/code/cell-editor.tsx +6 -2
  306. package/src/components/editor/cell/useRunCells.ts +62 -30
  307. package/src/components/editor/chrome/panels/cache-panel.tsx +216 -0
  308. package/src/components/editor/chrome/panels/empty-state.tsx +3 -1
  309. package/src/components/editor/chrome/panels/packages-panel.tsx +1 -1
  310. package/src/components/editor/chrome/state.ts +1 -1
  311. package/src/components/editor/chrome/types.ts +66 -22
  312. package/src/components/editor/chrome/wrapper/app-chrome.tsx +4 -0
  313. package/src/components/editor/chrome/wrapper/minimap.tsx +2 -0
  314. package/src/components/editor/chrome/wrapper/pending-ai-cells.tsx +108 -0
  315. package/src/components/editor/chrome/wrapper/sidebar.tsx +1 -1
  316. package/src/components/editor/code/readonly-diff.tsx +49 -0
  317. package/src/components/editor/columns/storage.ts +1 -1
  318. package/src/components/editor/errors/auto-fix.tsx +138 -32
  319. package/src/components/editor/errors/fix-mode.ts +20 -0
  320. package/src/components/editor/inputs/Inputs.styles.ts +1 -1
  321. package/src/components/editor/navigation/__tests__/clipboard.test.ts +0 -5
  322. package/src/components/editor/navigation/clipboard.ts +2 -1
  323. package/src/components/editor/notebook-cell.tsx +20 -7
  324. package/src/components/editor/output/CalloutOutput.tsx +1 -1
  325. package/src/components/editor/output/ConsoleOutput.tsx +27 -33
  326. package/src/components/editor/output/HtmlOutput.tsx +3 -2
  327. package/src/components/editor/output/JsonOutput.tsx +15 -1
  328. package/src/components/editor/output/MarimoTracebackOutput.tsx +69 -52
  329. package/src/components/editor/output/__tests__/HtmlOutput.test.tsx +134 -0
  330. package/src/components/editor/output/__tests__/json-output.test.ts +43 -0
  331. package/src/components/editor/output/__tests__/traceback.test.tsx +8 -1
  332. package/src/components/editor/output/useWrapText.ts +6 -1
  333. package/src/components/editor/package-alert.tsx +37 -32
  334. package/src/components/editor/renderers/vertical-layout/vertical-layout-wrapper.tsx +5 -2
  335. package/src/components/forms/__tests__/form-utils.test.ts +4 -2
  336. package/src/components/home/state.ts +3 -2
  337. package/src/components/icons/copy-icon.tsx +11 -5
  338. package/src/components/scratchpad/scratchpad-history.ts +6 -1
  339. package/src/components/shortcuts/renderShortcut.tsx +3 -1
  340. package/src/components/slides/slides-component.tsx +25 -21
  341. package/src/components/ui/button.tsx +2 -0
  342. package/src/components/ui/confirmation-button.tsx +85 -0
  343. package/src/components/ui/context-menu.tsx +14 -4
  344. package/src/components/ui/dropdown-menu.tsx +14 -4
  345. package/src/components/ui/fullscreen.tsx +115 -1
  346. package/src/components/ui/popover.tsx +11 -3
  347. package/src/components/ui/range-slider.tsx +1 -1
  348. package/src/components/ui/select.tsx +7 -3
  349. package/src/components/ui/slider.tsx +1 -1
  350. package/src/components/ui/switch.tsx +2 -0
  351. package/src/components/ui/tooltip.tsx +10 -3
  352. package/src/core/ai/__tests__/staged-cells.test.ts +189 -64
  353. package/src/core/ai/config.ts +6 -2
  354. package/src/core/ai/context/providers/__tests__/__snapshots__/cell-output.test.ts.snap +17 -0
  355. package/src/core/ai/context/providers/__tests__/cell-output.test.ts +194 -10
  356. package/src/core/ai/context/providers/__tests__/datasource.test.ts +9 -1
  357. package/src/core/ai/context/providers/cell-output.ts +170 -112
  358. package/src/core/ai/context/providers/datasource.ts +25 -1
  359. package/src/core/ai/context/providers/tables.ts +2 -2
  360. package/src/core/ai/staged-cells.ts +32 -16
  361. package/src/core/ai/state.ts +8 -4
  362. package/src/core/ai/tools/__tests__/edit-notebook-tool.test.ts +556 -0
  363. package/src/core/ai/tools/__tests__/registry.test.ts +41 -8
  364. package/src/core/ai/tools/__tests__/run-cells-tool.test.ts +450 -0
  365. package/src/core/ai/tools/__tests__/utils.test.ts +87 -0
  366. package/src/core/ai/tools/base.ts +109 -6
  367. package/src/core/ai/tools/edit-notebook-tool.ts +239 -0
  368. package/src/core/ai/tools/registry.ts +48 -15
  369. package/src/core/ai/tools/run-cells-tool.ts +233 -0
  370. package/src/core/ai/tools/sample-tool.ts +53 -15
  371. package/src/core/ai/tools/utils.ts +23 -0
  372. package/src/core/cache/requests.ts +5 -0
  373. package/src/core/cells/__tests__/cells.test.ts +19 -1
  374. package/src/core/cells/__tests__/session.test.ts +20 -3
  375. package/src/core/cells/cells.ts +13 -8
  376. package/src/core/cells/session.ts +1 -1
  377. package/src/core/codemirror/__tests__/__snapshots__/setup.test.ts.snap +2 -0
  378. package/src/core/codemirror/__tests__/replace-editor-content.test.ts +336 -0
  379. package/src/core/codemirror/ai/resources.ts +13 -2
  380. package/src/core/codemirror/copilot/state.ts +4 -2
  381. package/src/core/codemirror/find-replace/navigate.ts +2 -2
  382. package/src/core/codemirror/format.ts +2 -9
  383. package/src/core/codemirror/language/__tests__/extension.test.ts +10 -2
  384. package/src/core/codemirror/language/__tests__/sql.test.ts +24 -6
  385. package/src/core/codemirror/language/languages/markdown.ts +16 -153
  386. package/src/core/codemirror/language/languages/python.ts +13 -10
  387. package/src/core/codemirror/language/languages/sql/sql-mode.ts +6 -1
  388. package/src/core/codemirror/language/languages/sql/sql.ts +43 -306
  389. package/src/core/codemirror/language/panel/markdown.tsx +2 -1
  390. package/src/core/codemirror/language/panel/panel.tsx +2 -7
  391. package/src/core/codemirror/language/utils.ts +3 -8
  392. package/src/core/codemirror/lsp/__tests__/notebook-lsp.test.ts +21 -14
  393. package/src/core/codemirror/lsp/federated-lsp.ts +20 -9
  394. package/src/core/codemirror/lsp/notebook-lsp.ts +35 -29
  395. package/src/core/codemirror/lsp/transports.ts +7 -13
  396. package/src/core/codemirror/lsp/types.ts +0 -13
  397. package/src/core/codemirror/replace-editor-content.ts +87 -0
  398. package/src/core/config/__tests__/config-schema.test.ts +3 -0
  399. package/src/core/config/config-schema.ts +12 -1
  400. package/src/core/config/feature-flag.tsx +2 -4
  401. package/src/core/errors/__tests__/errors.test.ts +1 -0
  402. package/src/core/errors/errors.ts +20 -6
  403. package/src/core/hotkeys/hotkeys.ts +12 -0
  404. package/src/core/islands/bridge.ts +2 -0
  405. package/src/core/islands/main.ts +4 -0
  406. package/src/core/kernel/messages.ts +1 -0
  407. package/src/core/lsp/__tests__/transport.test.ts +233 -0
  408. package/src/core/lsp/transport.ts +139 -0
  409. package/src/core/network/requests-network.ts +14 -0
  410. package/src/core/network/requests-static.ts +2 -0
  411. package/src/core/network/requests-toasting.ts +2 -0
  412. package/src/core/network/types.ts +5 -0
  413. package/src/core/rtc/state.ts +6 -1
  414. package/src/core/saving/save-component.tsx +43 -36
  415. package/src/core/vscode/is-in-vscode.ts +9 -0
  416. package/src/core/wasm/bridge.ts +2 -0
  417. package/src/core/wasm/store.ts +1 -1
  418. package/src/core/websocket/useMarimoWebSocket.tsx +8 -0
  419. package/src/css/app/Cell.css +31 -0
  420. package/src/css/app/codemirror-completions.css +1 -1
  421. package/src/css/globals.css +5 -0
  422. package/src/custom.d.ts +2 -0
  423. package/src/hooks/useIframeCapabilities.ts +14 -0
  424. package/src/hooks/useLocalStorage.ts +1 -1
  425. package/src/plugins/core/RenderHTML.tsx +65 -5
  426. package/src/plugins/core/__test__/RenderHTML.test.ts +25 -23
  427. package/src/plugins/core/__test__/renderHTML-sanitization.test.tsx +131 -0
  428. package/src/plugins/core/__test__/sanitize.test.ts +465 -0
  429. package/src/plugins/core/registerReactComponent.tsx +19 -2
  430. package/src/plugins/core/sanitize.ts +76 -0
  431. package/src/plugins/impl/DataTablePlugin.tsx +20 -19
  432. package/src/plugins/impl/FileBrowserPlugin.tsx +1 -3
  433. package/src/plugins/impl/FileUploadPlugin.tsx +1 -3
  434. package/src/plugins/impl/__tests__/DateTimePickerPlugin.test.tsx +40 -1
  435. package/src/plugins/impl/__tests__/DropdownPlugin.test.tsx +6 -0
  436. package/src/plugins/impl/__tests__/MultiSelectPlugin.test.ts +8 -1
  437. package/src/plugins/impl/__tests__/NumberPlugin.test.tsx +3 -0
  438. package/src/plugins/impl/chat/ChatPlugin.tsx +1 -1
  439. package/src/plugins/impl/chat/chat-ui.tsx +17 -2
  440. package/src/plugins/impl/chat/types.ts +1 -1
  441. package/src/plugins/impl/data-frames/DataFramePlugin.tsx +7 -2
  442. package/src/plugins/impl/plotly/__tests__/parse-from-template.test.ts +17 -0
  443. package/src/plugins/impl/plotly/parse-from-template.ts +2 -1
  444. package/src/utils/__tests__/arrays.test.ts +42 -0
  445. package/src/utils/__tests__/capabilities.test.ts +453 -0
  446. package/src/utils/__tests__/formatting.test.ts +107 -0
  447. package/src/utils/__tests__/json-parser.test.ts +13 -0
  448. package/src/utils/__tests__/local-storage.test.ts +1 -1
  449. package/src/utils/__tests__/storage.test.ts +21 -21
  450. package/src/utils/arrays.ts +25 -0
  451. package/src/utils/capabilities.ts +114 -0
  452. package/src/utils/copy.ts +6 -0
  453. package/src/utils/formatting.ts +51 -0
  454. package/src/utils/json/json-parser.ts +28 -3
  455. package/src/utils/numbers.ts +2 -2
  456. package/src/utils/{storage.ts → storage/jotai.ts} +16 -4
  457. package/src/utils/storage/storage.ts +57 -0
  458. package/src/utils/{localStorage.ts → storage/typed.ts} +22 -12
  459. package/dist/any-language-editor-CVFQlioK.js +0 -156
  460. package/dist/apl-ChlaBfxB.js +0 -4
  461. package/dist/architecture-O4VJ6CD3-BVeaxUcM.js +0 -21
  462. package/dist/asciiarmor-CcJmm3l_.js +0 -4
  463. package/dist/asn1-ThRYxoBE.js +0 -4
  464. package/dist/assets/__vite-browser-external-Dv_SHu1h.js +0 -1
  465. package/dist/assets/worker-DVOR9oZG.js +0 -54
  466. package/dist/brainfuck-CEM0JgDn.js +0 -4
  467. package/dist/chunk-EXTU4WIE-DECT9AAK.js +0 -14
  468. package/dist/chunk-S3R3BYOJ-DMQ1yeyq.js +0 -386
  469. package/dist/classDiagram-KNZD7YFC-BG53O6Jt.js +0 -39
  470. package/dist/classDiagram-v2-RKCZMP56-BmKILsGU.js +0 -39
  471. package/dist/clojure-B7RHyE9t.js +0 -4
  472. package/dist/cmake-TeTMP4I5.js +0 -4
  473. package/dist/cobol-DI-mxUER.js +0 -4
  474. package/dist/coffeescript-DHUFLqWp.js +0 -4
  475. package/dist/commonlisp-SLiUrh1m.js +0 -4
  476. package/dist/crystal-B4fY1ZfJ.js +0 -4
  477. package/dist/css-Bdoq3TzK.js +0 -5
  478. package/dist/cypher-CBU182fp.js +0 -4
  479. package/dist/d-D8myDZeH.js +0 -4
  480. package/dist/data-grid-overlay-editor-qNmJk2x0.js +0 -135
  481. package/dist/diagram-QEK2KX5R-fu8Noi3H.js +0 -245
  482. package/dist/diff-DJF_UB7H.js +0 -4
  483. package/dist/dist-52-_pKoy.js +0 -6
  484. package/dist/dist-6DOMStFn.js +0 -6
  485. package/dist/dist-B334aW7p.js +0 -10
  486. package/dist/dist-BOI9lUz-.js +0 -12
  487. package/dist/dist-C06uhBzF.js +0 -6
  488. package/dist/dist-CGkpguCB.js +0 -6
  489. package/dist/dist-CrApzUED.js +0 -6
  490. package/dist/dist-Dp2GLdCl.js +0 -14
  491. package/dist/dist-WHFsbMDr.js +0 -6
  492. package/dist/dist-hyKcTPG9.js +0 -10
  493. package/dist/dtd-DY8q65lC.js +0 -4
  494. package/dist/dylan-CBLcjWCi.js +0 -4
  495. package/dist/ecl-BSXPNfOw.js +0 -4
  496. package/dist/eiffel-BJf0PQX-.js +0 -4
  497. package/dist/elm-DWQwPCZS.js +0 -4
  498. package/dist/erlang-BWBaGZ5e.js +0 -4
  499. package/dist/error-banner-OQIGTqFR.js +0 -1012
  500. package/dist/esm-BO9n_s6u.js +0 -26
  501. package/dist/factor-DT1-MBPl.js +0 -5
  502. package/dist/forth-D9GDt3FB.js +0 -4
  503. package/dist/fortran-DHkRhDWw.js +0 -4
  504. package/dist/gas-7lQEOM0H.js +0 -4
  505. package/dist/gherkin-BLLyroYi.js +0 -4
  506. package/dist/gitGraph-ZV4HHKMB-z2v_cInC.js +0 -21
  507. package/dist/groovy-C-wabwj0.js +0 -4
  508. package/dist/haskell-DaxVQ_d1.js +0 -4
  509. package/dist/haxe-C2yLoC7h.js +0 -5
  510. package/dist/idl-DQBP8i7k.js +0 -4
  511. package/dist/info-63CPKGFF-GS4w6pCB.js +0 -21
  512. package/dist/infoDiagram-STP46IZ2-DE9YYPFg.js +0 -44
  513. package/dist/javascript-DRwFV9r5.js +0 -5
  514. package/dist/jinja2-CNoIpVmN.js +0 -4
  515. package/dist/julia-DXDf-GhP.js +0 -4
  516. package/dist/livescript-S2uhJQx7.js +0 -4
  517. package/dist/lua-Bvgs0y2G.js +0 -4
  518. package/dist/mathematica-D2zqfwIg.js +0 -4
  519. package/dist/mbox-SBcPaDuZ.js +0 -4
  520. package/dist/mirc-hkQc7sVF.js +0 -4
  521. package/dist/mllike-DRWPBlr9.js +0 -6
  522. package/dist/modelica-CO2ROGlP.js +0 -4
  523. package/dist/mscgen-BpX61bO6.js +0 -6
  524. package/dist/mumps-BCnFeIn6.js +0 -4
  525. package/dist/nsis-BaTOxlD1.js +0 -5
  526. package/dist/ntriples-zEo5BWjr.js +0 -4
  527. package/dist/octave-BE0RnCM9.js +0 -4
  528. package/dist/oz-C4_2Ttul.js +0 -4
  529. package/dist/packet-HUATNLJX-CjHqJIqk.js +0 -21
  530. package/dist/pascal-Q3jJucpw.js +0 -4
  531. package/dist/perl-DkXZIWHF.js +0 -4
  532. package/dist/pie-WTHONI2E-D67gLWtR.js +0 -21
  533. package/dist/pig-DCgEHdsu.js +0 -4
  534. package/dist/powershell-3rK_nRRJ.js +0 -236
  535. package/dist/powershell-Eo2-7MoM.js +0 -4
  536. package/dist/properties-C0IOX8WR.js +0 -4
  537. package/dist/protobuf--lGQUSRO.js +0 -4
  538. package/dist/pug-Cf8AQHMJ.js +0 -5
  539. package/dist/puppet-D7Z3dTJn.js +0 -4
  540. package/dist/python-FHIx_i8Y.js +0 -5
  541. package/dist/q-B7UA1feM.js +0 -4
  542. package/dist/r-Cc9R2A7N.js +0 -4
  543. package/dist/radar-NJJJXTRR-C-AZP_Te.js +0 -21
  544. package/dist/rpm-vhJNlrQ6.js +0 -5
  545. package/dist/ruby-CVluPY0M.js +0 -4
  546. package/dist/sas-A8DL8oy3.js +0 -4
  547. package/dist/scheme-6xHHcSXC.js +0 -4
  548. package/dist/shell-DHN-e5rf.js +0 -4
  549. package/dist/sieve-BuQwLY02.js +0 -4
  550. package/dist/smalltalk-BA4HPg2H.js +0 -4
  551. package/dist/sparql-Bf4yCuy3.js +0 -4
  552. package/dist/stateDiagram-v2-UMBNRL4Z-C_0FUzzk.js +0 -38
  553. package/dist/stex-D-I1cYeE.js +0 -5
  554. package/dist/stylus-BMeped2l.js +0 -4
  555. package/dist/swift-lwEdlZoC.js +0 -4
  556. package/dist/tcl-B03ipeqv.js +0 -4
  557. package/dist/textile-Cy55fYGC.js +0 -4
  558. package/dist/toml-BLgrVtfu.js +0 -4
  559. package/dist/treemap-75Q7IDZK-DTvwfpWt.js +0 -21
  560. package/dist/troff-g6EjN2O2.js +0 -4
  561. package/dist/ttcn-Dzvba8jK.js +0 -4
  562. package/dist/ttcn-cfg-CadG0p1K.js +0 -4
  563. package/dist/turtle-DkXAMWo9.js +0 -4
  564. package/dist/vb-C5dCiel8.js +0 -4
  565. package/dist/vbscript-I4bDEQln.js +0 -4
  566. package/dist/velocity-mt0fDwFH.js +0 -4
  567. package/dist/verilog-Dxq3KJkc.js +0 -4
  568. package/dist/vhdl-Km0QUlV-.js +0 -4
  569. package/dist/webidl-B3lJ2MRL.js +0 -4
  570. package/dist/xquery-CcIxNPEe.js +0 -4
  571. package/dist/yacas-oMa-f-tN.js +0 -4
  572. package/dist/z80-D03Nvn6l.js +0 -4
  573. package/src/core/codemirror/language/__tests__/ast.test.ts +0 -124
  574. package/src/core/codemirror/language/utils/ast.ts +0 -84
  575. package/src/core/codemirror/language/utils/quotes.ts +0 -18
  576. /package/dist/{_arrayReduce-CVwxyrBP.js → _arrayReduce-Cd9xQjbl.js} +0 -0
  577. /package/dist/{_baseSlice-OgpvpOOJ.js → _baseSlice-CE9WsQZm.js} +0 -0
  578. /package/dist/{_hasUnicode-BgIggCqE.js → _hasUnicode-DkEebvtD.js} +0 -0
  579. /package/dist/{apl-DZqo8Elt.js → apl-aGhy11IM.js} +0 -0
  580. /package/dist/{array-aAxy08hN.js → array-DYSXIreg.js} +0 -0
  581. /package/dist/{asciiarmor-DTzHAIeX.js → asciiarmor-DJKJ3Gkn.js} +0 -0
  582. /package/dist/{asn1-DrAXKsZH.js → asn1-C6f5IeNs.js} +0 -0
  583. /package/dist/{asterisk-oF4U3h48.js → asterisk-DB1poX9_.js} +0 -0
  584. /package/dist/{brainfuck-BYgLey30.js → brainfuck-Ch9vjun0.js} +0 -0
  585. /package/dist/{chunk-57QY23SG-0TxCfmy_.js → chunk-57QY23SG-BpXU7ph4.js} +0 -0
  586. /package/dist/{clojure-Bs2M3OUY.js → clojure-B_lpr3zt.js} +0 -0
  587. /package/dist/{cmake-DpI8vxJN.js → cmake-DaocNF4I.js} +0 -0
  588. /package/dist/{cobol-BQyrWo72.js → cobol-suTPtt7c.js} +0 -0
  589. /package/dist/{coffeescript-9ke9UHmw.js → coffeescript-CPLIvtqJ.js} +0 -0
  590. /package/dist/{colors-Cr_mZ2aH.js → colors-BXlG8Lmz.js} +0 -0
  591. /package/dist/{common-keywords-BzgeAvH1.js → common-keywords-Bhll7O3b.js} +0 -0
  592. /package/dist/{commonlisp-DghUdrUH.js → commonlisp-BqM3qFK7.js} +0 -0
  593. /package/dist/{crystal-DEf_SInh.js → crystal-AsSFu4ke.js} +0 -0
  594. /package/dist/{css-BzTU9lNO.js → css-Df7Sdeyh.js} +0 -0
  595. /package/dist/{cypher-a2v0c11S.js → cypher-CaVKL6Gu.js} +0 -0
  596. /package/dist/{d-SAswny-M.js → d-DCGWK7NQ.js} +0 -0
  597. /package/dist/{defaultLocale-BAgEOGks.js → defaultLocale-CYgZlqDF.js} +0 -0
  598. /package/dist/{defaultLocale-471SYAPk.js → defaultLocale-Cto8YOmX.js} +0 -0
  599. /package/dist/{diff-OJ-xLXcG.js → diff-CsxOM4Tr.js} +0 -0
  600. /package/dist/{dist-CK8Gj3GX.js → dist-C76MUPD3.js} +0 -0
  601. /package/dist/{dtd-BsUf-rer.js → dtd-Dwr0Jmks.js} +0 -0
  602. /package/dist/{duckdb-keywords-B0NOra5o.js → duckdb-keywords-7wAWf848.js} +0 -0
  603. /package/dist/{dylan-C0ZYngjn.js → dylan-A7-ZBSey.js} +0 -0
  604. /package/dist/{ebnf-DF1xx0b_.js → ebnf-9_SaGDUz.js} +0 -0
  605. /package/dist/{ecl-Bsuvoouq.js → ecl-BzJVIQDc.js} +0 -0
  606. /package/dist/{eiffel-DgfSpLi-.js → eiffel-CO9eC_Op.js} +0 -0
  607. /package/dist/{elm-GNxDj-5E.js → elm-CVAWj8SB.js} +0 -0
  608. /package/dist/{emotion-is-prop-valid.esm-BHMWayAG.js → emotion-is-prop-valid.esm-C3Yi5GQt.js} +0 -0
  609. /package/dist/{erlang-Ds3uY1kL.js → erlang-DWbZP546.js} +0 -0
  610. /package/dist/{fcl-CqBgSioc.js → fcl-CM9t2iay.js} +0 -0
  611. /package/dist/{forth-JCaLysGk.js → forth-BTYqUuu3.js} +0 -0
  612. /package/dist/{fortran-Dc2AoKAl.js → fortran-DgAjHcCq.js} +0 -0
  613. /package/dist/{gas-Q4Uz82YW.js → gas-BjDSWPZd.js} +0 -0
  614. /package/dist/{gherkin-Dpxe49sQ.js → gherkin-ClRqqpKv.js} +0 -0
  615. /package/dist/{groovy-D8mTRCu6.js → groovy-BzNjnc8x.js} +0 -0
  616. /package/dist/{haskell-2_8cC4wY.js → haskell-DLdk34Jq.js} +0 -0
  617. /package/dist/{haxe-Bl9zkZlz.js → haxe-l6gaY_IS.js} +0 -0
  618. /package/dist/{http-DKCqY6yS.js → http-6Qg7z_h2.js} +0 -0
  619. /package/dist/{idl-Dn-HNfGW.js → idl-hlWT4D26.js} +0 -0
  620. /package/dist/{init-D6eDd7H0.js → init-tZ42Torz.js} +0 -0
  621. /package/dist/{jinja2-JjFiAGKk.js → jinja2-DI5k_Er3.js} +0 -0
  622. /package/dist/{julia-R5wne8eu.js → julia-BvDZDiIT.js} +0 -0
  623. /package/dist/{livescript-DSwokrYj.js → livescript-2YMQfkfI.js} +0 -0
  624. /package/dist/{lua-CgXfrp2-.js → lua-DIUrQRfA.js} +0 -0
  625. /package/dist/{main-Czi9-LVy.js → main-BMTpe7M0.js} +0 -0
  626. /package/dist/{math-C7wLpe9K.js → math-qsHyz2Eo.js} +0 -0
  627. /package/dist/{mathematica-BVli92MR.js → mathematica-Dqmg_BwL.js} +0 -0
  628. /package/dist/{mbox-CMFlocdS.js → mbox-Cng-P-F1.js} +0 -0
  629. /package/dist/{mirc-BkW04Zpc.js → mirc-CNDqOVhQ.js} +0 -0
  630. /package/dist/{mllike-DEjvHvNV.js → mllike-C1n2UDyX.js} +0 -0
  631. /package/dist/{modelica-CxDn-oje.js → modelica-QqQC2pFj.js} +0 -0
  632. /package/dist/{mscgen-D78wmE-w.js → mscgen-C3fl8uhp.js} +0 -0
  633. /package/dist/{mumps-Bi0IvPOV.js → mumps-BeCUbMej.js} +0 -0
  634. /package/dist/{nginx-DErPZFhX.js → nginx-ejv7DsBz.js} +0 -0
  635. /package/dist/{ntriples-Btyp6wRL.js → ntriples-CUgUpcma.js} +0 -0
  636. /package/dist/{octave-CZA6-2F8.js → octave-BD652tGl.js} +0 -0
  637. /package/dist/{oz-Bm6LSNfE.js → oz-DrRsFa0K.js} +0 -0
  638. /package/dist/{pascal-B4J6a9BH.js → pascal-hpcx9sVn.js} +0 -0
  639. /package/dist/{path-VDkDgx1I.js → path-Bbv2tLY1.js} +0 -0
  640. /package/dist/{perl-CzVqxS08.js → perl-DW8XHeFc.js} +0 -0
  641. /package/dist/{pig-Clh03cnn.js → pig-Cv7Nxbfo.js} +0 -0
  642. /package/dist/{prop-types-0wNc-99T.js → prop-types-Bd16OEUP.js} +0 -0
  643. /package/dist/{properties-D7ch1Wyb.js → properties-D-qJDXAM.js} +0 -0
  644. /package/dist/{protobuf-DrkdrMPK.js → protobuf-B48QZbd3.js} +0 -0
  645. /package/dist/{puppet-BtZG8zdO.js → puppet-15JDyiY2.js} +0 -0
  646. /package/dist/{python-B6FKOVIv.js → python-DWkQA94h.js} +0 -0
  647. /package/dist/{r-Dnvo5-96.js → r-dcNRe_Q8.js} +0 -0
  648. /package/dist/{range-PcytnUSJ.js → range-CQvYp_qE.js} +0 -0
  649. /package/dist/{rpm-B1DrgfnX.js → rpm-Djl3Dsf1.js} +0 -0
  650. /package/dist/{ruby-CelfUg17.js → ruby-Dd2CZTip.js} +0 -0
  651. /package/dist/{sas-DfSQFMWG.js → sas-DYF5_Iqu.js} +0 -0
  652. /package/dist/{scheme-BplhaWuO.js → scheme-YtWcji1H.js} +0 -0
  653. /package/dist/{shell-DqU5OS2c.js → shell-C3uC3Y0Z.js} +0 -0
  654. /package/dist/{sieve-BE4_IyGa.js → sieve-DHB17sQG.js} +0 -0
  655. /package/dist/{smalltalk-B_WPL8Nx.js → smalltalk-Y5v1Np3H.js} +0 -0
  656. /package/dist/{solr-DlJFg7H5.js → solr-DvRJLlRD.js} +0 -0
  657. /package/dist/{sparql-7XIlcOgW.js → sparql-BEt3GJwM.js} +0 -0
  658. /package/dist/{spreadsheet-BdZSVwVp.js → spreadsheet-Dp4B9_rc.js} +0 -0
  659. /package/dist/{sql-CCrq7lfJ.js → sql-DBsUs8nQ.js} +0 -0
  660. /package/dist/{stex-BiFc8QAu.js → stex-C6-x52ei.js} +0 -0
  661. /package/dist/{stylus-DlSH9xpH.js → stylus-DroA8via.js} +0 -0
  662. /package/dist/{swift-e3tMTZgJ.js → swift-DR0x1ESK.js} +0 -0
  663. /package/dist/{tcl-DfZMC20G.js → tcl-BeuTFc_c.js} +0 -0
  664. /package/dist/{textile-DaSeca5U.js → textile-C0ikhHN3.js} +0 -0
  665. /package/dist/{tiddlywiki-dfoiz8pS.js → tiddlywiki-C_2Nvsgu.js} +0 -0
  666. /package/dist/{tiki-yJbQzhma.js → tiki-CKQlhmQQ.js} +0 -0
  667. /package/dist/{treemap-BpgMKHv-.js → treemap-BYLUKIzA.js} +0 -0
  668. /package/dist/{troff-FN_FrCXR.js → troff-DkK0f2ZH.js} +0 -0
  669. /package/dist/{tslib.es6-DofFyd9S.js → tslib.es6-3ZL768sZ.js} +0 -0
  670. /package/dist/{ttcn-7_i4HlyB.js → ttcn-Bf8vrg-_.js} +0 -0
  671. /package/dist/{ttcn-cfg-B46AlBUV.js → ttcn-cfg-DjCKzd95.js} +0 -0
  672. /package/dist/{turtle-QQfeFveR.js → turtle-SSc84S9m.js} +0 -0
  673. /package/dist/{vb-DToPVnLa.js → vb-CQ6DC3cL.js} +0 -0
  674. /package/dist/{vbscript-CtsNaTz4.js → vbscript-Dw0gFssg.js} +0 -0
  675. /package/dist/{velocity-CAoNe6ns.js → velocity-BvJQyBmj.js} +0 -0
  676. /package/dist/{verilog-DrDOMiJq.js → verilog-CKGAvQjj.js} +0 -0
  677. /package/dist/{vhdl-DnO0OEPh.js → vhdl-B40_x6fM.js} +0 -0
  678. /package/dist/{webidl-Or6d1ZfA.js → webidl-Bi9hczCv.js} +0 -0
  679. /package/dist/{xquery-CEp_Mcpr.js → xquery-DwWUXvP3.js} +0 -0
  680. /package/dist/{yacas-DgnYrSlp.js → yacas-ClUs0mmH.js} +0 -0
  681. /package/dist/{z80-DlG_kyeB.js → z80-DPC4UGzR.js} +0 -0
@@ -2,6 +2,7 @@
2
2
  /* eslint-disable @typescript-eslint/no-explicit-any */
3
3
 
4
4
  import { beforeEach, describe, expect, it } from "vitest";
5
+ import type { CellId } from "@/core/cells/ids";
5
6
  import type {
6
7
  ConnectionsMap,
7
8
  DatasetTablesMap,
@@ -9,7 +10,7 @@ import type {
9
10
  import { DUCKDB_ENGINE } from "@/core/datasets/engines";
10
11
  import type { DataSourceConnection, DataTable } from "@/core/kernel/messages";
11
12
  import { Boosts, Sections } from "../common";
12
- import { DatasourceContextProvider } from "../datasource";
13
+ import { DatasourceContextProvider, getDatasourceContext } from "../datasource";
13
14
 
14
15
  // Mock data for testing
15
16
  const createMockDataSourceConnection = (
@@ -630,3 +631,10 @@ describe("DatasourceContextProvider", () => {
630
631
  });
631
632
  });
632
633
  });
634
+
635
+ describe("getDatasourceContext", () => {
636
+ it("should return null if no cell ID is found", () => {
637
+ const context = getDatasourceContext("1" as CellId);
638
+ expect(context).toBeNull();
639
+ });
640
+ });
@@ -3,7 +3,7 @@
3
3
  import type { Completion } from "@codemirror/autocomplete";
4
4
  import type { FileUIPart } from "ai";
5
5
  import { toPng } from "html-to-image";
6
- import { notebookAtom } from "@/core/cells/cells";
6
+ import { type NotebookState, notebookAtom } from "@/core/cells/cells";
7
7
  import { type CellId, CellOutputId } from "@/core/cells/ids";
8
8
  import { displayCellName } from "@/core/cells/names";
9
9
  import { isOutputEmpty } from "@/core/cells/outputs";
@@ -15,18 +15,33 @@ import { type AIContextItem, AIContextProvider } from "../registry";
15
15
  import { contextToXml } from "../utils";
16
16
  import { Boosts, Sections } from "./common";
17
17
 
18
+ export interface BaseOutput {
19
+ processedContent?: string;
20
+ imageUrl?: string;
21
+ shouldDownloadImage?: boolean;
22
+ output: OutputMessage;
23
+ outputType: "text" | "media";
24
+ }
25
+
26
+ export interface CellOutputData {
27
+ cellId: CellId;
28
+ cellName: string;
29
+ cellCode: string;
30
+ cellOutput?: BaseOutput;
31
+ consoleOutputs?: BaseOutput[];
32
+ }
33
+
34
+ // For the context provider
35
+ // Currently, we enforce that cellOutput is present.
36
+ interface CellOutputContextData
37
+ extends CellOutputData,
38
+ Record<string, unknown> {
39
+ cellOutput: BaseOutput;
40
+ }
41
+
18
42
  export interface CellOutputContextItem extends AIContextItem {
19
43
  type: "cell-output";
20
- data: {
21
- cellId: CellId;
22
- cellName: string;
23
- cellCode: string;
24
- output: OutputMessage;
25
- outputType: "text" | "media";
26
- processedContent?: string;
27
- imageUrl?: string;
28
- shouldDownloadImage?: boolean;
29
- };
44
+ data: CellOutputContextData;
30
45
  }
31
46
 
32
47
  function isMediaMimetype(
@@ -79,69 +94,23 @@ export class CellOutputContextProvider extends AIContextProvider<CellOutputConte
79
94
  const notebook = this.store.get(notebookAtom);
80
95
  const items: CellOutputContextItem[] = [];
81
96
 
82
- for (const [cellIndex, cellId] of notebook.cellIds.inOrderIds.entries()) {
83
- const cellRuntime = notebook.cellRuntime[cellId];
97
+ for (const cellId of notebook.cellIds.inOrderIds) {
98
+ const cellContextData = getCellContextData(cellId, notebook);
99
+ const cellOutput = cellContextData.cellOutput;
84
100
 
85
- // Filter to only cells with output
86
- if (!cellRuntime?.output || isOutputEmpty(cellRuntime.output)) {
101
+ // Skip cells with no output
102
+ if (!cellOutput) {
87
103
  continue;
88
104
  }
89
105
 
90
- const cellData = notebook.cellData[cellId];
91
- const output = cellRuntime.output;
92
- const mimetype = output.mimetype;
93
-
94
- // Determine output type
95
- const isMedia = isMediaMimetype(mimetype, String(output.data));
96
- const outputType = isMedia ? "media" : "text";
97
-
98
- const cellName = displayCellName(cellData.name, cellIndex);
99
-
100
- let processedContent: string | undefined;
101
- let imageUrl: string | undefined;
102
- let shouldDownloadImage = false;
103
-
104
- // Process text content
105
- if (outputType === "text" && typeof output.data === "string") {
106
- processedContent =
107
- mimetype === "text/html"
108
- ? parseHtmlContent(output.data)
109
- : output.data;
110
- }
111
-
112
- // Process media content - for now, we'll just note that it's media
113
- if (outputType === "media") {
114
- if (
115
- typeof output.data === "string" &&
116
- output.data.startsWith("data:")
117
- ) {
118
- imageUrl = output.data; // Data URL
119
- } else if (
120
- typeof output.data === "string" &&
121
- output.data.startsWith("http")
122
- ) {
123
- imageUrl = output.data; // External URL
124
- } else {
125
- // Download the image from the DOM element
126
- shouldDownloadImage = true;
127
- }
128
- }
106
+ const mimetype = cellOutput.output.mimetype || "unknown";
129
107
 
130
108
  items.push({
131
109
  uri: this.asURI(cellId),
132
- name: cellName,
110
+ name: cellContextData.cellName,
133
111
  type: this.contextType,
134
- description: `Cell output (${mimetype || "unknown"})`,
135
- data: {
136
- cellId,
137
- cellName,
138
- cellCode: cellData?.code || "",
139
- output,
140
- outputType,
141
- processedContent,
142
- imageUrl,
143
- shouldDownloadImage,
144
- },
112
+ description: `Cell output (${mimetype})`,
113
+ data: { ...cellContextData, cellOutput },
145
114
  });
146
115
  }
147
116
 
@@ -149,16 +118,16 @@ export class CellOutputContextProvider extends AIContextProvider<CellOutputConte
149
118
  }
150
119
 
151
120
  formatCompletion(item: CellOutputContextItem): Completion {
152
- const { data } = item;
121
+ const { cellOutput: data, cellName, cellCode } = item.data;
153
122
 
154
123
  return {
155
- label: `@${data.cellName}`,
156
- displayLabel: data.cellName,
124
+ label: `@${cellName}`,
125
+ displayLabel: cellName,
157
126
  detail: `${data.outputType} output`,
158
127
  boost: data.outputType === "media" ? Boosts.HIGH : Boosts.MEDIUM,
159
128
  type: this.contextType,
160
129
  section: Sections.CELL_OUTPUT,
161
- apply: `@${data.cellName}`,
130
+ apply: `@${cellName}`,
162
131
  info: () => {
163
132
  const infoContainer = document.createElement("div");
164
133
  infoContainer.classList.add(
@@ -176,7 +145,7 @@ export class CellOutputContextProvider extends AIContextProvider<CellOutputConte
176
145
 
177
146
  const nameDiv = document.createElement("div");
178
147
  nameDiv.classList.add("font-bold", "text-base");
179
- nameDiv.textContent = data.cellName;
148
+ nameDiv.textContent = cellName;
180
149
  headerDiv.append(nameDiv);
181
150
 
182
151
  const descriptionDiv = document.createElement("div");
@@ -186,7 +155,7 @@ export class CellOutputContextProvider extends AIContextProvider<CellOutputConte
186
155
  infoContainer.append(headerDiv);
187
156
 
188
157
  // Show cell code preview
189
- if (data.cellCode) {
158
+ if (cellCode) {
190
159
  const codeHeaderDiv = document.createElement("div");
191
160
  codeHeaderDiv.classList.add(
192
161
  "text-xs",
@@ -207,8 +176,7 @@ export class CellOutputContextProvider extends AIContextProvider<CellOutputConte
207
176
  "overflow-y-auto",
208
177
  );
209
178
  codeDiv.textContent =
210
- data.cellCode.slice(0, 200) +
211
- (data.cellCode.length > 200 ? "..." : "");
179
+ cellCode.slice(0, 200) + (cellCode.length > 200 ? "..." : "");
212
180
  infoContainer.append(codeDiv);
213
181
  }
214
182
 
@@ -258,16 +226,16 @@ export class CellOutputContextProvider extends AIContextProvider<CellOutputConte
258
226
  }
259
227
 
260
228
  formatContext(item: CellOutputContextItem): string {
261
- const { data } = item;
229
+ const { cellOutput: data, cellName, cellId, cellCode } = item.data;
262
230
 
263
231
  const contextData = {
264
- name: data.cellName,
265
- cellId: data.cellId,
232
+ name: cellName,
233
+ cellId: cellId,
266
234
  outputType: data.outputType,
267
235
  mimetype: data.output.mimetype,
268
236
  } as const;
269
237
 
270
- let details = `Cell Code:\n${data.cellCode}\n\n`;
238
+ let details = `Cell Code:\n${cellCode}\n\n`;
271
239
 
272
240
  if (data.outputType === "text" && data.processedContent) {
273
241
  details += `Output:\n${data.processedContent}`;
@@ -289,45 +257,135 @@ export class CellOutputContextProvider extends AIContextProvider<CellOutputConte
289
257
  override async getAttachments(
290
258
  items: CellOutputContextItem[],
291
259
  ): Promise<FileUIPart[]> {
292
- // Filter items that need image downloading
293
- const itemsNeedingDownload = items.filter(
294
- (item) =>
295
- item.data.shouldDownloadImage && item.data.outputType === "media",
296
- );
260
+ const cellId = items[0].data.cellId;
261
+ const cellName = items[0].data.cellName;
262
+ const cellOutputs = items.map((item) => item.data.cellOutput);
297
263
 
298
- if (itemsNeedingDownload.length === 0) {
264
+ return getAttachmentsForOutputs(cellOutputs, cellId, cellName);
265
+ }
266
+ }
267
+
268
+ export async function getAttachmentsForOutputs(
269
+ data: BaseOutput[],
270
+ cellId: CellId,
271
+ cellName: string,
272
+ ): Promise<FileUIPart[]> {
273
+ // Filter items that need image downloading
274
+ const itemsNeedingDownload = data.filter(
275
+ (item) => item.shouldDownloadImage && item.outputType === "media",
276
+ );
277
+
278
+ if (itemsNeedingDownload.length === 0) {
279
+ return [];
280
+ }
281
+
282
+ // Prepare download requests
283
+ const downloadRequests = itemsNeedingDownload.flatMap((item) => {
284
+ const outputElement = document.getElementById(CellOutputId.create(cellId));
285
+ if (!outputElement) {
286
+ Logger.warn(`Output element not found for cell ${cellId}`);
299
287
  return [];
300
288
  }
289
+ return {
290
+ cellId: cellId,
291
+ cellName: cellName,
292
+ mimetype: item.output.mimetype,
293
+ element: outputElement,
294
+ };
295
+ });
296
+
297
+ try {
298
+ return await Promise.all(
299
+ downloadRequests.map(async (item) => ({
300
+ type: "file",
301
+ filename: `${cellName}-output-screenshot`,
302
+ mediaType: "image/png",
303
+ url: await toPng(item.element),
304
+ })),
305
+ );
306
+ } catch (error) {
307
+ Logger.error("Error downloading cell output images:", error);
308
+ return [];
309
+ }
310
+ }
301
311
 
302
- // Prepare download requests
303
- const downloadRequests = itemsNeedingDownload.flatMap((item) => {
304
- const outputElement = document.getElementById(
305
- CellOutputId.create(item.data.cellId),
306
- );
307
- if (!outputElement) {
308
- Logger.warn(`Output element not found for cell ${item.data.cellId}`);
309
- return [];
310
- }
311
- return {
312
- cellId: item.data.cellId,
313
- cellName: item.data.cellName,
314
- mimetype: item.data.output.mimetype,
315
- element: outputElement,
316
- };
317
- });
312
+ function getBaseOutput(output: OutputMessage): BaseOutput | null {
313
+ if (isOutputEmpty(output)) {
314
+ return null;
315
+ }
318
316
 
319
- try {
320
- return await Promise.all(
321
- downloadRequests.map(async (item) => ({
322
- type: "file",
323
- filename: `${item.cellName}-output-screenshot`,
324
- mediaType: "image/png",
325
- url: await toPng(item.element),
326
- })),
327
- );
328
- } catch (error) {
329
- Logger.error("Error downloading cell output images:", error);
330
- return [];
317
+ const mimetype = output.mimetype;
318
+
319
+ // Determine output type
320
+ const isMedia = isMediaMimetype(mimetype, String(output.data));
321
+ const outputType = isMedia ? "media" : "text";
322
+
323
+ let processedContent: string | undefined;
324
+ let imageUrl: string | undefined;
325
+ let shouldDownloadImage = false;
326
+
327
+ // Process text content
328
+ if (outputType === "text" && typeof output.data === "string") {
329
+ processedContent =
330
+ mimetype === "text/html" ? parseHtmlContent(output.data) : output.data;
331
+ }
332
+
333
+ // Process media content - for now, we'll just note that it's media
334
+ if (outputType === "media") {
335
+ if (typeof output.data === "string" && output.data.startsWith("data:")) {
336
+ imageUrl = output.data; // Data URL
337
+ } else if (
338
+ typeof output.data === "string" &&
339
+ output.data.startsWith("http")
340
+ ) {
341
+ imageUrl = output.data; // External URL
342
+ } else {
343
+ // Download the image from the DOM element
344
+ shouldDownloadImage = true;
331
345
  }
332
346
  }
347
+
348
+ return {
349
+ processedContent,
350
+ imageUrl,
351
+ shouldDownloadImage,
352
+ outputType,
353
+ output,
354
+ };
355
+ }
356
+
357
+ export function getCellContextData(
358
+ cellId: CellId,
359
+ notebook: NotebookState,
360
+ opts?: {
361
+ includeConsoleOutput: boolean;
362
+ },
363
+ ): CellOutputData {
364
+ const { includeConsoleOutput = false } = opts || {};
365
+ const cellRuntime = notebook.cellRuntime[cellId];
366
+
367
+ const cellData = notebook.cellData[cellId];
368
+ const cellIndex = notebook.cellIds.inOrderIds.indexOf(cellId);
369
+ const cellName = displayCellName(cellData.name, cellIndex);
370
+
371
+ let consoleOutputs: BaseOutput[] | undefined;
372
+ if (includeConsoleOutput) {
373
+ consoleOutputs = cellRuntime.consoleOutputs
374
+ .map((output) => getBaseOutput(output))
375
+ .filter((output) => output !== null);
376
+ }
377
+
378
+ let cellOutput: BaseOutput | undefined;
379
+ const rawCellOutput = cellRuntime.output;
380
+ if (rawCellOutput && !isOutputEmpty(rawCellOutput)) {
381
+ cellOutput = getBaseOutput(rawCellOutput) ?? undefined;
382
+ }
383
+
384
+ return {
385
+ cellId,
386
+ cellName,
387
+ cellCode: cellData.code,
388
+ cellOutput,
389
+ consoleOutputs,
390
+ };
333
391
  }
@@ -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,6 +18,7 @@ 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";
@@ -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 = "datasource";
50
+ readonly contextType = CONTEXT_TYPE;
44
51
  private connectionsMap: ConnectionsMap;
45
52
  private dataframes: DataTable[];
46
53
 
@@ -140,3 +147,20 @@ export class DatasourceContextProvider extends AIContextProvider<DatasourceConte
140
147
  };
141
148
  }
142
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
+ }
@@ -43,8 +43,8 @@ export class TableContextProvider extends AIContextProvider<TableContextItem> {
43
43
 
44
44
  // Build shape information
45
45
  const shape = [
46
- num_rows != null ? `${num_rows} rows` : undefined,
47
- num_columns != null ? `${num_columns} columns` : undefined,
46
+ num_rows == null ? undefined : `${num_rows} rows`,
47
+ num_columns == null ? undefined : `${num_columns} columns`,
48
48
  ]
49
49
  .filter(Boolean)
50
50
  .join(", ");
@@ -13,21 +13,30 @@ import { Logger } from "@/utils/Logger";
13
13
  import { maybeAddMarimoImport } from "../cells/add-missing-import";
14
14
  import {
15
15
  type CreateNewCellAction,
16
- cellHandleAtom,
16
+ getCellEditorView,
17
17
  useCellActions,
18
18
  } from "../cells/cells";
19
19
  import type { LanguageAdapterType } from "../codemirror/language/types";
20
20
  import { updateEditorCodeFromPython } from "../codemirror/language/utils";
21
21
  import type { JotaiStore } from "../state/jotai";
22
+ import type { EditType } from "./tools/edit-notebook-tool";
22
23
 
23
24
  /**
24
25
  * Cells that are staged for AI completion
25
- * They function similarly to cells in the notebook, but they can be deleted or accepted by the user.
26
- * We only track one set of staged cells at a time.
26
+ * They function similarly to cells in the notebook, but they can be accepted or rejected by the user.
27
+ * We track edited, new and deleted cells.
28
+ * And we only track one set of staged cells at a time.
27
29
  */
28
30
 
29
- const initialState = (): Set<CellId> => {
30
- return new Set();
31
+ export type Edit =
32
+ | { type: Extract<EditType, "update_cell">; previousCode: string }
33
+ | { type: Extract<EditType, "add_cell"> }
34
+ | { type: Extract<EditType, "delete_cell">; previousCode: string };
35
+
36
+ export type StagedAICells = Map<CellId, Edit>;
37
+
38
+ const initialState = (): StagedAICells => {
39
+ return new Map();
31
40
  };
32
41
 
33
42
  const {
@@ -36,18 +45,26 @@ const {
36
45
  createActions,
37
46
  reducer,
38
47
  } = createReducerAndAtoms(initialState, {
39
- addStagedCell: (state, action: { cellId: CellId }) => {
40
- const { cellId } = action;
41
- return new Set([...state, cellId]);
48
+ addStagedCell: (state, action: { cellId: CellId; edit: Edit }) => {
49
+ const { cellId, edit } = action;
50
+ return new Map([...state, [cellId, edit]]);
42
51
  },
43
52
  removeStagedCell: (state, cellId: CellId) => {
44
- return new Set([...state].filter((id) => id !== cellId));
53
+ const newState = new Map(state);
54
+ newState.delete(cellId);
55
+ return newState;
45
56
  },
46
57
  clearStagedCells: () => {
47
58
  return initialState();
48
59
  },
49
60
  });
50
61
 
62
+ export {
63
+ useStagedAICellsActions,
64
+ createActions as createStagedAICellsActions,
65
+ reducer as stagedAICellsReducer,
66
+ };
67
+
51
68
  interface UpdateStagedCellAction {
52
69
  cellId: CellId;
53
70
  code: string;
@@ -67,7 +84,7 @@ export function useStagedCells(store: JotaiStore) {
67
84
 
68
85
  const createStagedCell = (code: string): CellId => {
69
86
  const newCellId = CellId.create();
70
- addStagedCell({ cellId: newCellId });
87
+ addStagedCell({ cellId: newCellId, edit: { type: "add_cell" } });
71
88
  createNewCell({
72
89
  cellId: "__end__",
73
90
  code,
@@ -86,8 +103,7 @@ export function useStagedCells(store: JotaiStore) {
86
103
  return;
87
104
  }
88
105
 
89
- const cellHandle = store.get(cellHandleAtom(cellId));
90
- const editorView = cellHandle?.current?.editorViewOrNull;
106
+ const editorView = getCellEditorView(cellId);
91
107
  if (!editorView) {
92
108
  Logger.error("Editor for this cell not found", { cellId });
93
109
  return;
@@ -105,7 +121,7 @@ export function useStagedCells(store: JotaiStore) {
105
121
  // Delete all staged cells and the corresponding cells in the notebook.
106
122
  const deleteAllStagedCells = () => {
107
123
  const stagedAICells = store.get(stagedAICellsAtom);
108
- for (const cellId of stagedAICells) {
124
+ for (const cellId of stagedAICells.keys()) {
109
125
  deleteCellCallback({ cellId });
110
126
  }
111
127
  clearStagedCells();
@@ -175,14 +191,14 @@ class CellCreationStream {
175
191
 
176
192
  private onCreateCell: (code: string) => CellId;
177
193
  private onUpdateCell: (opts: UpdateStagedCellAction) => void;
178
- private addStagedCell: (payload: { cellId: CellId }) => void;
194
+ private addStagedCell: (payload: { cellId: CellId; edit: Edit }) => void;
179
195
  private createNewCell: (opts: CreateNewCellAction) => void;
180
196
  private hasMarimoImport = false;
181
197
 
182
198
  constructor(
183
199
  onCreateCell: (code: string) => CellId,
184
200
  onUpdateCell: (opts: UpdateStagedCellAction) => void,
185
- addStagedCell: (payload: { cellId: CellId }) => void,
201
+ addStagedCell: (payload: { cellId: CellId; edit: Edit }) => void,
186
202
  createNewCell: (opts: CreateNewCellAction) => void,
187
203
  ) {
188
204
  this.onCreateCell = onCreateCell;
@@ -229,7 +245,7 @@ class CellCreationStream {
229
245
  before: true,
230
246
  });
231
247
  if (cellId) {
232
- this.addStagedCell({ cellId });
248
+ this.addStagedCell({ cellId, edit: { type: "add_cell" } });
233
249
  }
234
250
  this.hasMarimoImport = true;
235
251
  }
@@ -5,7 +5,7 @@ import type { FileUIPart } from "ai";
5
5
  import { atom } from "jotai";
6
6
  import { atomWithStorage } from "jotai/utils";
7
7
  import { uniqueBy } from "@/utils/arrays";
8
- import { adaptForLocalStorage } from "@/utils/storage";
8
+ import { adaptForLocalStorage, jotaiJsonStorage } from "@/utils/storage/jotai";
9
9
  import type { TypedString } from "@/utils/typed";
10
10
  import type { CellId } from "../cells/ids";
11
11
 
@@ -13,15 +13,19 @@ const KEY = "marimo:ai:chatState:v5";
13
13
 
14
14
  export type ChatId = TypedString<"ChatId">;
15
15
 
16
- export const aiCompletionCellAtom = atom<{
16
+ export interface AiCompletionCell {
17
17
  cellId: CellId;
18
18
  initialPrompt?: string;
19
- } | null>(null);
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>(
23
26
  INCLUDE_OTHER_CELLS_KEY,
24
27
  true,
28
+ jotaiJsonStorage,
25
29
  );
26
30
 
27
31
  export interface Message {
@@ -86,7 +90,7 @@ export const activeChatAtom = atom(
86
90
  }
87
91
  return state.chats.get(state.activeChatId);
88
92
  },
89
- (get, set, chatId: ChatId | null) => {
93
+ (_get, set, chatId: ChatId | null) => {
90
94
  set(chatStateAtom, (prev) => ({
91
95
  ...prev,
92
96
  activeChatId: chatId,