@marimo-team/islands 0.16.5 → 0.17.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (549) hide show
  1. package/dist/{ConnectedDataExplorerComponent-D96i9G-X.js → ConnectedDataExplorerComponent-DJEUH6Bb.js} +78 -100
  2. package/dist/{_baseIsEqual-oN7pRNcM.js → _baseIsEqual-CN4oFUZ4.js} +20 -20
  3. package/dist/{_basePickBy-CYvzhRjy.js → _basePickBy-CzSvE_-f.js} +3 -3
  4. package/dist/{_baseProperty-DGUdIBuu.js → _baseProperty-DbbUiyUD.js} +5 -5
  5. package/dist/{_baseUniq-B5gfSl8S.js → _baseUniq-DwoC-LVO.js} +4 -4
  6. package/dist/any-language-editor-CEXn1vFs.js +156 -0
  7. package/dist/apl-DuVfHsPc.js +4 -0
  8. package/dist/architecture-O4VJ6CD3-lp-opOaL.js +21 -0
  9. package/dist/{architectureDiagram-W76B3OCA-DkEhipkW.js → architectureDiagram-W76B3OCA-CoBORy6u.js} +34 -34
  10. package/dist/asciiarmor-qIVWsi4F.js +4 -0
  11. package/dist/asn1-BjPqARr7.js +4 -0
  12. package/dist/assets/__vite-browser-external-lX-sn9m2.js +1 -0
  13. package/dist/assets/worker-vPn7gxWj.js +54 -0
  14. package/dist/{blockDiagram-QIGZ2CNN-DZOqLMYa.js → blockDiagram-QIGZ2CNN-0yzoLIar.js} +75 -86
  15. package/dist/brainfuck-DPGTVfkE.js +4 -0
  16. package/dist/{button-CEcjneWG.js → button-DcnBVpVa.js} +11 -14
  17. package/dist/{c4Diagram-FPNF74CW-DVaR7c9q.js → c4Diagram-FPNF74CW-CKsIA_DD.js} +27 -51
  18. package/dist/{channel-Uh0KpgGW.js → channel-3LVvQZcD.js} +1 -1
  19. package/dist/{check-BK9zDfQk.js → check-D7ifz5op.js} +1 -1
  20. package/dist/{chunk-3AY6CYHV-Dk2R2-S1.js → chunk-3AY6CYHV-B2C-aVc3.js} +35 -35
  21. package/dist/{chunk-4BX2VUAB-CqO6zUIz.js → chunk-4BX2VUAB-DEd4VI9L.js} +1 -1
  22. package/dist/{chunk-4KMFLZZN-CloTfTwP.js → chunk-4KMFLZZN-DnvP3O4K.js} +216 -325
  23. package/dist/{chunk-55IACEB6-I0rmqTua.js → chunk-55IACEB6-BcCzwOOl.js} +1 -1
  24. package/dist/{chunk-6OXUPJBA-BuROSTmo.js → chunk-6OXUPJBA-eNAAfJ3Q.js} +7 -7
  25. package/dist/{chunk-7GE3RBXV-B1-tsIPP.js → chunk-7GE3RBXV-CSAeQvLz.js} +1 -1
  26. package/dist/{chunk-ABZYJK2D-CLlso8tj.js → chunk-ABZYJK2D-CZcb_1iM.js} +16 -20
  27. package/dist/{chunk-BN7GFLIU-Db2-FjLn.js → chunk-BN7GFLIU-pBc5O5Rh.js} +1 -1
  28. package/dist/{chunk-CVBHYZKI-BONeiloK.js → chunk-CVBHYZKI-CivHZg9P.js} +3 -3
  29. package/dist/{chunk-CXMOBAN2-U9GJSP1d.js → chunk-CXMOBAN2-Dd0E6qb0.js} +46 -54
  30. package/dist/chunk-EXTU4WIE-GQ2ZWfJo.js +10 -0
  31. package/dist/{chunk-FMBD7UC4-DyV3BR_I.js → chunk-FMBD7UC4-C6YcisV6.js} +1 -1
  32. package/dist/{chunk-JA3XYJ7Z-C9A1076P.js → chunk-JA3XYJ7Z-DYeQaT57.js} +21 -25
  33. package/dist/{chunk-JEIROHC2-BGnFkSVq.js → chunk-JEIROHC2-B-EZMP4V.js} +1 -1
  34. package/dist/{chunk-K7UQS3LO-033LOsjK.js → chunk-K7UQS3LO-DENzlS-M.js} +7 -7
  35. package/dist/{chunk-KMC2YHZD-DT4Sq4Ld.js → chunk-KMC2YHZD-SckhHdEh.js} +1 -1
  36. package/dist/{chunk-QN33PNHL-gs44MZla.js → chunk-QN33PNHL-Cjq5b604.js} +2 -2
  37. package/dist/{chunk-QYVHNE3D-B8BO1AnT.js → chunk-QYVHNE3D-CNUuivie.js} +3 -4
  38. package/dist/{chunk-QZHKN3VN-CeN_GkU6.js → chunk-QZHKN3VN-DugEU_bA.js} +1 -1
  39. package/dist/chunk-S3R3BYOJ-itCT6Vif.js +380 -0
  40. package/dist/{chunk-T44TD3VJ-BwzD6YE0.js → chunk-T44TD3VJ-BLdfTX8J.js} +1 -1
  41. package/dist/{chunk-TVAH2DTR-Bi6jpQJQ.js → chunk-TVAH2DTR-BOnwF9d8.js} +7 -8
  42. package/dist/{chunk-TZMSLE5B-D8klz2H_.js → chunk-TZMSLE5B-DGs66AlL.js} +4 -5
  43. package/dist/{chunk-WFRQ32O7-CzSwSlN0.js → chunk-WFRQ32O7-CPsipkmJ.js} +1 -1
  44. package/dist/{chunk-WFWHJNB7-DN_cavM6.js → chunk-WFWHJNB7-Cmed18Pk.js} +1 -1
  45. package/dist/{chunk-XRWGC2XP-Bb5eGNM2.js → chunk-XRWGC2XP-DH5GDaY8.js} +1 -1
  46. package/dist/{chunk-ZPAFE4SF-S5UYNb0V.js → chunk-ZPAFE4SF-DPDwaqZm.js} +22 -22
  47. package/dist/classDiagram-KNZD7YFC-azuS_99k.js +39 -0
  48. package/dist/classDiagram-v2-RKCZMP56-CQpyQQOR.js +39 -0
  49. package/dist/{click-outside-container-DE4e7p1p.js → click-outside-container-CL_FkgGY.js} +7 -12
  50. package/dist/{clike-CxAz4p9E.js → clike-DYfRWWXk.js} +1 -1
  51. package/dist/{clike-Cg_DBrJ0.js → clike-bzZTreP4.js} +1 -1
  52. package/dist/clojure-ATksAecl.js +4 -0
  53. package/dist/{clone-Dk4FkKH0.js → clone-Msbhmn2a.js} +1 -1
  54. package/dist/cmake-CWylaz2C.js +4 -0
  55. package/dist/cobol-BiLLCZIQ.js +4 -0
  56. package/dist/coffeescript-Ca4jipi8.js +4 -0
  57. package/dist/commonlisp-BwFjyEC7.js +4 -0
  58. package/dist/{constants-Cjd_3kwd.js → constants-BCOEQoEQ.js} +3 -3
  59. package/dist/{copy-C5RFg7ok.js → copy-BkZ8PkBM.js} +6 -2
  60. package/dist/{cose-bilkent-S5V4N54A-B3iOTGu5.js → cose-bilkent-S5V4N54A-BZnbwyVD.js} +20 -20
  61. package/dist/crystal-BhUsQHbh.js +4 -0
  62. package/dist/css-Cf4wlIyV.js +5 -0
  63. package/dist/cypher-Dj8Hzgxa.js +4 -0
  64. package/dist/{cytoscape.esm-DTDV0Nbj.js → cytoscape.esm-BTpRoPd2.js} +586 -661
  65. package/dist/d-DZI7tbTy.js +4 -0
  66. package/dist/{dagre-5GWH7T2D-KM4Z11yT.js → dagre-5GWH7T2D-BGaiSZZO.js} +32 -37
  67. package/dist/{dagre-B0u1urxE.js → dagre-pyfDIOWJ.js} +57 -76
  68. package/dist/data-grid-overlay-editor-867aBz0Y.js +133 -0
  69. package/dist/{diagram-N5W7TBWH-CtO7az4G.js → diagram-N5W7TBWH-CzLE0jZB.js} +35 -51
  70. package/dist/diagram-QEK2KX5R-AGS60xEZ.js +245 -0
  71. package/dist/{diagram-S2PKOQOG-CiXElLNQ.js → diagram-S2PKOQOG-BxRoG6yW.js} +28 -28
  72. package/dist/diff-WQISUHG5.js +4 -0
  73. package/dist/{dist-CdE2C2In.js → dist-2Ne-33Xy.js} +15 -20
  74. package/dist/{dist-DKFaZRVk.js → dist-B0YD1aXi.js} +2 -2
  75. package/dist/{dist-DBhzmFyH.js → dist-B1Dv8Sdk.js} +3 -3
  76. package/dist/{dist-CGIZPq3J.js → dist-BFkr6kAQ.js} +2 -2
  77. package/dist/{dist-DL_ci7Yc.js → dist-BL2DSY0P.js} +1 -1
  78. package/dist/dist-BawZu0ix.js +10 -0
  79. package/dist/{dist-Bar1QnNM.js → dist-BhVFggab.js} +3 -3
  80. package/dist/{textile-Cy55fYGC.js → dist-BiOF7987.js} +4 -2
  81. package/dist/{dist-BQmQQqFH.js → dist-BpzZrRd6.js} +1 -1
  82. package/dist/{dist-CxD5E6Sh.js → dist-C7zhQ7K0.js} +24 -22
  83. package/dist/{dist-BqgkUnEN.js → dist-CBhnQKQ4.js} +3 -3
  84. package/dist/{dist-Dzk1C8l5.js → dist-CId4IPXu.js} +10 -13
  85. package/dist/{dist-CUnh_3Ii.js → dist-CYhQCVru.js} +2 -2
  86. package/dist/{dist-BBlFk9ki.js → dist-CZq5-ZyD.js} +1 -1
  87. package/dist/{dist-elblfNXO.js → dist-Cacac5HV.js} +2 -2
  88. package/dist/{dist-CChOkSUg.js → dist-CfQHSIQC.js} +3 -3
  89. package/dist/{dist-JCAky9ND.js → dist-CkvGMBAS.js} +17 -22
  90. package/dist/dist-Cs3McXEj.js +6 -0
  91. package/dist/{dist-o7fhJC7U.js → dist-CvyfRaIr.js} +3 -3
  92. package/dist/{dist-CZfRM7pE.js → dist-D-3fICwh.js} +2 -2
  93. package/dist/dist-D3aaithT.js +6 -0
  94. package/dist/{dist-CutXTm8t.js → dist-DBhEu3-F.js} +1 -1
  95. package/dist/dist-DELcMSpJ.js +6 -0
  96. package/dist/{dist-C7ASiFxI.js → dist-DMxl6Qbu.js} +273 -263
  97. package/dist/{dist-CLvpViod.js → dist-DS6nuHYK.js} +2 -3
  98. package/dist/dist-Dgts3WXd.js +6 -0
  99. package/dist/{dist--I6Htnlv.js → dist-DlHkZUnY.js} +5 -5
  100. package/dist/dist-Doiq_KIP.js +15 -0
  101. package/dist/dist-DtpUiDG_.js +6 -0
  102. package/dist/{dist-DzOpMdwb.js → dist-NUdHX0XE.js} +4 -4
  103. package/dist/{dist-C3WYsf4K.js → dist-PGgOcwbF.js} +4 -10
  104. package/dist/{dist-DNnYAdRE.js → dist-RdxOJbBw.js} +2 -2
  105. package/dist/{dist-BEvIw5Nh.js → dist-RwqAqkpG.js} +1 -1
  106. package/dist/dist-ZjnJq_jD.js +10 -0
  107. package/dist/{dist-CbRkrKrP.js → dist-biZ846D9.js} +5 -5
  108. package/dist/{dist-DW9er3Zq.js → dist-d5NxvX2s.js} +44 -23
  109. package/dist/{dist-C3QUag__.js → dist-ivwkJchV.js} +3 -3
  110. package/dist/dist-mof3iuBu.js +12 -0
  111. package/dist/{dist-Cib4sGDA.js → dist-reo2kYlN.js} +2 -2
  112. package/dist/{dist-BZBitvuL.js → dist-wHVprCkn.js} +1 -1
  113. package/dist/{dist-C5zMs_n5.js → dist-y8uoXYaE.js} +3 -3
  114. package/dist/{dist-DPF5TTUg.js → dist-z_iuDES7.js} +126 -115
  115. package/dist/{dockerfile-Dum_1b-5.js → dockerfile-sZMPcXVY.js} +1 -1
  116. package/dist/dtd-B2M8dhfC.js +4 -0
  117. package/dist/dylan-CU3Vt8SC.js +4 -0
  118. package/dist/ecl-B8ESAVq4.js +4 -0
  119. package/dist/eiffel-DDfMIKeA.js +4 -0
  120. package/dist/elm-Bj6rj8jf.js +4 -0
  121. package/dist/{erDiagram-AWTI2OKA-ZTIl9iQO.js → erDiagram-AWTI2OKA-CTxzb-U8.js} +20 -20
  122. package/dist/erlang-BxyshZUq.js +4 -0
  123. package/dist/{error-banner-OQIGTqFR.js → error-banner-npbEfanI.js} +13 -13
  124. package/dist/{esm-DxFkg7a6.js → esm-BdiY4QsX.js} +1528 -1492
  125. package/dist/{esm-d0g2RsOH.js → esm-CAWW9sum.js} +6 -8
  126. package/dist/{esm-1_Mp6VD2.js → esm-YY5zh7KV.js} +324 -395
  127. package/dist/{esm-BO9n_s6u.js → esm-svAVli9f.js} +5 -5
  128. package/dist/{factor-CdgiDGiu.js → factor-CRFTmP_a.js} +1 -1
  129. package/dist/factor-CYk6XT8r.js +5 -0
  130. package/dist/{flowDiagram-PVAE7QVJ-DsbofOzu.js → flowDiagram-PVAE7QVJ-Dck2hiJe.js} +22 -22
  131. package/dist/{formats-ChrNdVdJ.js → formats-BnqXUb1V.js} +13 -17
  132. package/dist/forth-fcoJkd-f.js +4 -0
  133. package/dist/fortran-IxZHu4wc.js +4 -0
  134. package/dist/{fullscreen-D1yTiBlu.js → fullscreen-blsKUrtN.js} +741 -744
  135. package/dist/{ganttDiagram-OWAHRB6G-FnCH1Yj3.js → ganttDiagram-OWAHRB6G-AWzfzpup.js} +9 -9
  136. package/dist/gas-B8rmKcim.js +4 -0
  137. package/dist/gherkin-BTm-jIdJ.js +4 -0
  138. package/dist/gitGraph-ZV4HHKMB-DFg_OLQb.js +21 -0
  139. package/dist/{gitGraphDiagram-NY62KEGX-B0wvMNqU.js → gitGraphDiagram-NY62KEGX-GyNboWSV.js} +31 -34
  140. package/dist/{glide-data-editor-D_kEsT07.js → glide-data-editor-DHuN8kQ8.js} +1650 -1720
  141. package/dist/{graphlib-BGmr7CYF.js → graphlib-hb3zmtVD.js} +5 -5
  142. package/dist/groovy-01kRHFMD.js +4 -0
  143. package/dist/haskell-B3PhE05w.js +4 -0
  144. package/dist/haxe-DEoAm8oA.js +5 -0
  145. package/dist/{hotkeys-yFrUwyJK.js → hotkeys-Ct2T3e9O.js} +4 -7
  146. package/dist/idl-DsDJU9cV.js +4 -0
  147. package/dist/info-63CPKGFF-D3DZmDBa.js +21 -0
  148. package/dist/infoDiagram-STP46IZ2-ec08vi_U.js +44 -0
  149. package/dist/{isArrayLikeObject-DiDsNamC.js → isArrayLikeObject-BlvK28do.js} +3 -5
  150. package/dist/{isEmpty-BBG-u1GM.js → isEmpty--odfYjh1.js} +2 -2
  151. package/dist/{isSymbol-BxF-_8BA.js → isSymbol-Cb1f2HgO.js} +1 -1
  152. package/dist/{javascript-Dfq1qI35.js → javascript-BfCTmOnk.js} +2 -2
  153. package/dist/javascript-gwczVhuU.js +5 -0
  154. package/dist/jinja2-AkZRdFk3.js +4 -0
  155. package/dist/{journeyDiagram-BIP6EPQ6-B3PotfAW.js → journeyDiagram-BIP6EPQ6-TmXYCUbT.js} +23 -24
  156. package/dist/julia-_s6qe3bf.js +4 -0
  157. package/dist/{kanban-definition-6OIFK2YF-BTrQZ3LN.js → kanban-definition-6OIFK2YF-B6ozleHo.js} +15 -15
  158. package/dist/{katex-dN__NFdn.js → katex-mPzRsXEy.js} +1 -1
  159. package/dist/{katex-BE4xflfm.js → katex-mkWmhPUh.js} +149 -173
  160. package/dist/{label-BinTsX-u.js → label-VVRKZmrP.js} +21 -24
  161. package/dist/{linear-DyTdUIqX.js → linear-iebAbJVD.js} +1 -1
  162. package/dist/livescript-CwPHQdv5.js +4 -0
  163. package/dist/{loader-Dijti3y4.js → loader-CM0VALo9.js} +19 -26
  164. package/dist/lua-s7nRxkCP.js +4 -0
  165. package/dist/main.js +8161 -8431
  166. package/dist/{marked.esm-3RjvXPoO.js → marked.esm-DJM8la36.js} +5 -5
  167. package/dist/mathematica-Ci36yd1q.js +4 -0
  168. package/dist/mbox-DbOYMNCO.js +4 -0
  169. package/dist/{memoize-Dq87l1O_.js → memoize-DYoRBSLn.js} +1 -1
  170. package/dist/{merge-BPDCIm8P.js → merge-BjuR6j_w.js} +1 -1
  171. package/dist/{mermaid-MWiyXDcI.js → mermaid-YPPMBmhk.js} +58 -76
  172. package/dist/{mermaid-parser.core-CSFx6MQ7.js → mermaid-parser.core-BLkyTSZj.js} +8 -8
  173. package/dist/{mhchem-DZ68WS0G.js → mhchem-Dw7wvXtr.js} +1 -1
  174. package/dist/{min-BzhKOmZo.js → min-B_i2ahn4.js} +7 -7
  175. package/dist/{mindmap-definition-Q6HEUPPD-9hhnrO1k.js → mindmap-definition-Q6HEUPPD-F6-JnXwq.js} +17 -17
  176. package/dist/mirc-VmNe8AwF.js +4 -0
  177. package/dist/mllike-BdD7SJEa.js +6 -0
  178. package/dist/modelica-BA4VqzC3.js +4 -0
  179. package/dist/mscgen-DF-5WHJm.js +6 -0
  180. package/dist/mumps-c_Uia_QN.js +4 -0
  181. package/dist/{node-sql-parser-13oju30e.js → node-sql-parser-BqKV-TpL.js} +14343 -14351
  182. package/dist/{now-DVBcRCoE.js → now-CwRqw0nS.js} +1 -1
  183. package/dist/nsis-BAANGODV.js +5 -0
  184. package/dist/{nsis-BW6_XagK.js → nsis-BWJEeUyS.js} +1 -1
  185. package/dist/ntriples-Bslqh2Ki.js +4 -0
  186. package/dist/{number-overlay-editor-D1YdiOrm.js → number-overlay-editor-CeyruAX4.js} +17 -23
  187. package/dist/octave-DYn5ltia.js +4 -0
  188. package/dist/oz-B_N-StZq.js +4 -0
  189. package/dist/packet-HUATNLJX-CkqjFdAv.js +21 -0
  190. package/dist/pascal-DU4CtAUu.js +4 -0
  191. package/dist/perl-Bae6k32u.js +4 -0
  192. package/dist/pie-WTHONI2E-D0rWwX5P.js +21 -0
  193. package/dist/{pieDiagram-ADFJNKIX-CSBC0ZgF.js → pieDiagram-ADFJNKIX-C5dSQVCn.js} +28 -28
  194. package/dist/pig-DSIxUEgX.js +4 -0
  195. package/dist/powershell-31lcPgIF.js +4 -0
  196. package/dist/powershell-BZx53Ujw.js +236 -0
  197. package/dist/properties-lmYbntDG.js +4 -0
  198. package/dist/protobuf-BTYoCEpV.js +4 -0
  199. package/dist/pug-DMFM7zzO.js +5 -0
  200. package/dist/{pug-Bmups_z0.js → pug-PJh82u1M.js} +1 -1
  201. package/dist/puppet-B0ub07d-.js +4 -0
  202. package/dist/python-C4jT87Nt.js +5 -0
  203. package/dist/{q-BzWcnVri.js → q-CMoUHJ5Q.js} +3 -2
  204. package/dist/q-YbPYlqRI.js +4 -0
  205. package/dist/{quadrantDiagram-LMRXKWRM-h7nHf8xG.js → quadrantDiagram-LMRXKWRM-DlahxNiy.js} +7 -7
  206. package/dist/r-OfNu6HAI.js +4 -0
  207. package/dist/radar-NJJJXTRR-Bxqv4O5a.js +21 -0
  208. package/dist/{range-CgK0-PEw.js → range-DxfkexCE.js} +3 -3
  209. package/dist/{react-plotly-BZakcxdv.js → react-plotly-D_IAfR8f.js} +4364 -4705
  210. package/dist/{requirementDiagram-4UW4RH46-BGEurQYq.js → requirementDiagram-4UW4RH46-DTkinyvU.js} +17 -17
  211. package/dist/rpm-D_3b5peD.js +5 -0
  212. package/dist/ruby-CehsJy_T.js +4 -0
  213. package/dist/{sankeyDiagram-GR3RE2ED-CxeJ_jfl.js → sankeyDiagram-GR3RE2ED-CsLnEnnq.js} +3 -3
  214. package/dist/sas-DwQHzPoF.js +4 -0
  215. package/dist/scheme-B6ArxiQu.js +4 -0
  216. package/dist/{sequenceDiagram-C3RYC4MD-CbFxwyr_.js → sequenceDiagram-C3RYC4MD-BdEOR6SC.js} +20 -30
  217. package/dist/shell-AHmQgDfc.js +4 -0
  218. package/dist/sieve-CgodKOcx.js +4 -0
  219. package/dist/{simple-mode-Cgyya8F-.js → simple-mode-BP3Jd4vf.js} +1 -1
  220. package/dist/{slides-component-BEyG25AH.js → slides-component-2bbal1YJ.js} +24 -46
  221. package/dist/smalltalk-BeFzDkbo.js +4 -0
  222. package/dist/sparql-BWxq-Lnx.js +4 -0
  223. package/dist/{src-BNNJRxz3.js → src-DZkaBUmt.js} +6 -6
  224. package/dist/{stateDiagram-KXAO66HF-A61bMf29.js → stateDiagram-KXAO66HF-DQLH2jhP.js} +39 -41
  225. package/dist/stateDiagram-v2-UMBNRL4Z-D9v8fKjF.js +38 -0
  226. package/dist/stex-Dvaq0qsm.js +5 -0
  227. package/dist/style.css +1 -1
  228. package/dist/stylus-Ge0ofWlZ.js +4 -0
  229. package/dist/swift-CjQfbVxV.js +4 -0
  230. package/dist/tcl-CAGDF11K.js +4 -0
  231. package/dist/textile-CrXreJtf.js +4 -0
  232. package/dist/{time-D3tzCqJ6.js → time-CFkXkVrt.js} +1 -1
  233. package/dist/{timeline-definition-XQNQX7LJ-BwdsB7CR.js → timeline-definition-XQNQX7LJ-bToVq14i.js} +4 -5
  234. package/dist/{timer-D3Zlu9ow.js → timer-CzOhIJuk.js} +2 -2
  235. package/dist/{toNumber-efKT08hh.js → toNumber-EFF1Z9T1.js} +2 -2
  236. package/dist/{toString-BvCd3yJc.js → toString-C2mCkasT.js} +2 -2
  237. package/dist/toml-AdLXKwEi.js +4 -0
  238. package/dist/{toml-CIUkU1CP.js → toml-eSl4PUAH.js} +6 -2
  239. package/dist/treemap-75Q7IDZK-Da9Jv6a_.js +21 -0
  240. package/dist/troff-C-LaM2ex.js +4 -0
  241. package/dist/ttcn-DTclUi6T.js +4 -0
  242. package/dist/ttcn-cfg-BtBPbmLX.js +4 -0
  243. package/dist/turtle-BODDDg5O.js +4 -0
  244. package/dist/{types-1X1uZB4y.js → types-CRXV0KD5.js} +84 -95
  245. package/dist/{useAsyncData-C4IqQK0g.js → useAsyncData-uMVTsDI9.js} +1 -1
  246. package/dist/{useDateFormatter-BCsBqetx.js → useDateFormatter-Dcz7jstn.js} +6 -6
  247. package/dist/{useTheme-C2pgJzDH.js → useTheme-NbEx-ZNV.js} +13 -10
  248. package/dist/vb-Cb1HQHii.js +4 -0
  249. package/dist/vbscript-CpXOP4wZ.js +4 -0
  250. package/dist/{vega-component-Cv4J8CHz.js → vega-component-hegVmfuS.js} +21 -21
  251. package/dist/{vega-loader.browser.module-Bi3ttvdj.js → vega-loader.browser.module-DcW8jnKp.js} +1 -2
  252. package/dist/velocity-Dz0rBQIk.js +4 -0
  253. package/dist/verilog-6Di9aLKw.js +4 -0
  254. package/dist/vhdl-BRNesXYc.js +4 -0
  255. package/dist/webidl-BpRNYIYn.js +4 -0
  256. package/dist/xquery-DXWcJ7b6.js +4 -0
  257. package/dist/{xychartDiagram-6GGTOJPD-BJRRi5HC.js → xychartDiagram-6GGTOJPD-C7Bhm_yt.js} +12 -13
  258. package/dist/yacas-DbSARPz4.js +4 -0
  259. package/dist/z80-DzslPj_l.js +4 -0
  260. package/dist/{zod-UPQf9SGn.js → zod-ChY6miG5.js} +71 -81
  261. package/package.json +12 -12
  262. package/src/__mocks__/requests.ts +2 -0
  263. package/src/components/app-config/user-config-form.tsx +29 -25
  264. package/src/components/chat/chat-utils.ts +11 -4
  265. package/src/components/data-table/__tests__/header-items.test.tsx +117 -0
  266. package/src/components/data-table/column-header.tsx +4 -2
  267. package/src/components/data-table/columns.tsx +2 -1
  268. package/src/components/data-table/data-table.tsx +7 -2
  269. package/src/components/data-table/header-items.tsx +63 -10
  270. package/src/components/dependency-graph/custom-node.tsx +11 -11
  271. package/src/components/dependency-graph/elements.ts +9 -4
  272. package/src/components/dependency-graph/panels.tsx +6 -4
  273. package/src/components/editor/Output.tsx +6 -1
  274. package/src/components/editor/ai/ai-completion-editor.tsx +135 -5
  275. package/src/components/editor/ai/completion-handlers.tsx +106 -22
  276. package/src/components/editor/cell/code/cell-editor.tsx +5 -0
  277. package/src/components/editor/chrome/panels/cache-panel.tsx +216 -0
  278. package/src/components/editor/chrome/panels/empty-state.tsx +3 -1
  279. package/src/components/editor/chrome/types.ts +66 -22
  280. package/src/components/editor/chrome/wrapper/app-chrome.tsx +2 -0
  281. package/src/components/editor/errors/auto-fix.tsx +138 -32
  282. package/src/components/editor/errors/fix-mode.ts +15 -0
  283. package/src/components/editor/navigation/__tests__/clipboard.test.ts +0 -5
  284. package/src/components/editor/navigation/clipboard.ts +2 -1
  285. package/src/components/editor/notebook-cell.tsx +20 -7
  286. package/src/components/editor/output/ConsoleOutput.tsx +27 -33
  287. package/src/components/editor/output/JsonOutput.tsx +9 -0
  288. package/src/components/editor/output/MarimoTracebackOutput.tsx +10 -7
  289. package/src/components/editor/output/__tests__/json-output.test.ts +43 -0
  290. package/src/components/editor/package-alert.tsx +3 -0
  291. package/src/components/forms/__tests__/form-utils.test.ts +4 -2
  292. package/src/components/icons/copy-icon.tsx +11 -5
  293. package/src/components/shortcuts/renderShortcut.tsx +3 -1
  294. package/src/components/ui/button.tsx +2 -0
  295. package/src/components/ui/confirmation-button.tsx +85 -0
  296. package/src/components/ui/switch.tsx +2 -0
  297. package/src/core/ai/context/providers/__tests__/datasource.test.ts +9 -1
  298. package/src/core/ai/context/providers/datasource.ts +25 -1
  299. package/src/core/ai/state.ts +6 -3
  300. package/src/core/ai/tools/__tests__/registry.test.ts +33 -8
  301. package/src/core/ai/tools/base.ts +81 -1
  302. package/src/core/ai/tools/registry.ts +36 -10
  303. package/src/core/ai/tools/sample-tool.ts +44 -8
  304. package/src/core/cache/requests.ts +5 -0
  305. package/src/core/cells/cells.ts +1 -1
  306. package/src/core/codemirror/__tests__/__snapshots__/setup.test.ts.snap +2 -0
  307. package/src/core/codemirror/__tests__/replace-editor-content.test.ts +336 -0
  308. package/src/core/codemirror/find-replace/navigate.ts +2 -2
  309. package/src/core/codemirror/format.ts +2 -9
  310. package/src/core/codemirror/language/__tests__/sql.test.ts +24 -6
  311. package/src/core/codemirror/language/languages/python.ts +1 -3
  312. package/src/core/codemirror/language/languages/sql/sql.ts +23 -13
  313. package/src/core/codemirror/language/panel/panel.tsx +1 -6
  314. package/src/core/codemirror/language/utils.ts +3 -8
  315. package/src/core/codemirror/lsp/__tests__/notebook-lsp.test.ts +21 -14
  316. package/src/core/codemirror/lsp/federated-lsp.ts +20 -9
  317. package/src/core/codemirror/lsp/notebook-lsp.ts +35 -29
  318. package/src/core/codemirror/lsp/types.ts +0 -13
  319. package/src/core/codemirror/replace-editor-content.ts +87 -0
  320. package/src/core/config/__tests__/config-schema.test.ts +3 -0
  321. package/src/core/config/config-schema.ts +8 -0
  322. package/src/core/config/feature-flag.tsx +2 -4
  323. package/src/core/errors/__tests__/errors.test.ts +1 -0
  324. package/src/core/errors/errors.ts +20 -6
  325. package/src/core/islands/bridge.ts +2 -0
  326. package/src/core/islands/main.ts +4 -0
  327. package/src/core/kernel/messages.ts +1 -0
  328. package/src/core/network/requests-network.ts +14 -0
  329. package/src/core/network/requests-static.ts +2 -0
  330. package/src/core/network/requests-toasting.ts +2 -0
  331. package/src/core/network/types.ts +5 -0
  332. package/src/core/saving/save-component.tsx +43 -36
  333. package/src/core/wasm/bridge.ts +2 -0
  334. package/src/core/websocket/useMarimoWebSocket.tsx +8 -0
  335. package/src/css/app/codemirror-completions.css +1 -1
  336. package/src/custom.d.ts +2 -0
  337. package/src/plugins/core/registerReactComponent.tsx +5 -1
  338. package/src/plugins/impl/DataTablePlugin.tsx +19 -19
  339. package/src/plugins/impl/__tests__/DateTimePickerPlugin.test.tsx +32 -0
  340. package/src/plugins/impl/chat/ChatPlugin.tsx +1 -1
  341. package/src/plugins/impl/chat/chat-ui.tsx +17 -2
  342. package/src/plugins/impl/chat/types.ts +1 -1
  343. package/src/plugins/impl/data-frames/DataFramePlugin.tsx +7 -2
  344. package/src/plugins/impl/plotly/__tests__/parse-from-template.test.ts +17 -0
  345. package/src/plugins/impl/plotly/parse-from-template.ts +2 -1
  346. package/src/utils/__tests__/formatting.test.ts +107 -0
  347. package/src/utils/__tests__/json-parser.test.ts +13 -0
  348. package/src/utils/copy.ts +6 -0
  349. package/src/utils/formatting.ts +51 -0
  350. package/src/utils/json/json-parser.ts +28 -3
  351. package/dist/any-language-editor-CVFQlioK.js +0 -156
  352. package/dist/apl-ChlaBfxB.js +0 -4
  353. package/dist/architecture-O4VJ6CD3-BVeaxUcM.js +0 -21
  354. package/dist/asciiarmor-CcJmm3l_.js +0 -4
  355. package/dist/asn1-ThRYxoBE.js +0 -4
  356. package/dist/assets/__vite-browser-external-Dv_SHu1h.js +0 -1
  357. package/dist/assets/worker-DVOR9oZG.js +0 -54
  358. package/dist/brainfuck-CEM0JgDn.js +0 -4
  359. package/dist/chunk-EXTU4WIE-DECT9AAK.js +0 -14
  360. package/dist/chunk-S3R3BYOJ-DMQ1yeyq.js +0 -386
  361. package/dist/classDiagram-KNZD7YFC-BG53O6Jt.js +0 -39
  362. package/dist/classDiagram-v2-RKCZMP56-BmKILsGU.js +0 -39
  363. package/dist/clojure-B7RHyE9t.js +0 -4
  364. package/dist/cmake-TeTMP4I5.js +0 -4
  365. package/dist/cobol-DI-mxUER.js +0 -4
  366. package/dist/coffeescript-DHUFLqWp.js +0 -4
  367. package/dist/commonlisp-SLiUrh1m.js +0 -4
  368. package/dist/crystal-B4fY1ZfJ.js +0 -4
  369. package/dist/css-Bdoq3TzK.js +0 -5
  370. package/dist/cypher-CBU182fp.js +0 -4
  371. package/dist/d-D8myDZeH.js +0 -4
  372. package/dist/data-grid-overlay-editor-qNmJk2x0.js +0 -135
  373. package/dist/diagram-QEK2KX5R-fu8Noi3H.js +0 -245
  374. package/dist/diff-DJF_UB7H.js +0 -4
  375. package/dist/dist-52-_pKoy.js +0 -6
  376. package/dist/dist-6DOMStFn.js +0 -6
  377. package/dist/dist-B334aW7p.js +0 -10
  378. package/dist/dist-BOI9lUz-.js +0 -12
  379. package/dist/dist-C06uhBzF.js +0 -6
  380. package/dist/dist-CGkpguCB.js +0 -6
  381. package/dist/dist-CrApzUED.js +0 -6
  382. package/dist/dist-Dp2GLdCl.js +0 -14
  383. package/dist/dist-WHFsbMDr.js +0 -6
  384. package/dist/dist-hyKcTPG9.js +0 -10
  385. package/dist/dtd-DY8q65lC.js +0 -4
  386. package/dist/dylan-CBLcjWCi.js +0 -4
  387. package/dist/ecl-BSXPNfOw.js +0 -4
  388. package/dist/eiffel-BJf0PQX-.js +0 -4
  389. package/dist/elm-DWQwPCZS.js +0 -4
  390. package/dist/erlang-BWBaGZ5e.js +0 -4
  391. package/dist/factor-DT1-MBPl.js +0 -5
  392. package/dist/forth-D9GDt3FB.js +0 -4
  393. package/dist/fortran-DHkRhDWw.js +0 -4
  394. package/dist/gas-7lQEOM0H.js +0 -4
  395. package/dist/gherkin-BLLyroYi.js +0 -4
  396. package/dist/gitGraph-ZV4HHKMB-z2v_cInC.js +0 -21
  397. package/dist/groovy-C-wabwj0.js +0 -4
  398. package/dist/haskell-DaxVQ_d1.js +0 -4
  399. package/dist/haxe-C2yLoC7h.js +0 -5
  400. package/dist/idl-DQBP8i7k.js +0 -4
  401. package/dist/info-63CPKGFF-GS4w6pCB.js +0 -21
  402. package/dist/infoDiagram-STP46IZ2-DE9YYPFg.js +0 -44
  403. package/dist/javascript-DRwFV9r5.js +0 -5
  404. package/dist/jinja2-CNoIpVmN.js +0 -4
  405. package/dist/julia-DXDf-GhP.js +0 -4
  406. package/dist/livescript-S2uhJQx7.js +0 -4
  407. package/dist/lua-Bvgs0y2G.js +0 -4
  408. package/dist/mathematica-D2zqfwIg.js +0 -4
  409. package/dist/mbox-SBcPaDuZ.js +0 -4
  410. package/dist/mirc-hkQc7sVF.js +0 -4
  411. package/dist/mllike-DRWPBlr9.js +0 -6
  412. package/dist/modelica-CO2ROGlP.js +0 -4
  413. package/dist/mscgen-BpX61bO6.js +0 -6
  414. package/dist/mumps-BCnFeIn6.js +0 -4
  415. package/dist/nsis-BaTOxlD1.js +0 -5
  416. package/dist/ntriples-zEo5BWjr.js +0 -4
  417. package/dist/octave-BE0RnCM9.js +0 -4
  418. package/dist/oz-C4_2Ttul.js +0 -4
  419. package/dist/packet-HUATNLJX-CjHqJIqk.js +0 -21
  420. package/dist/pascal-Q3jJucpw.js +0 -4
  421. package/dist/perl-DkXZIWHF.js +0 -4
  422. package/dist/pie-WTHONI2E-D67gLWtR.js +0 -21
  423. package/dist/pig-DCgEHdsu.js +0 -4
  424. package/dist/powershell-3rK_nRRJ.js +0 -236
  425. package/dist/powershell-Eo2-7MoM.js +0 -4
  426. package/dist/properties-C0IOX8WR.js +0 -4
  427. package/dist/protobuf--lGQUSRO.js +0 -4
  428. package/dist/pug-Cf8AQHMJ.js +0 -5
  429. package/dist/puppet-D7Z3dTJn.js +0 -4
  430. package/dist/python-FHIx_i8Y.js +0 -5
  431. package/dist/q-B7UA1feM.js +0 -4
  432. package/dist/r-Cc9R2A7N.js +0 -4
  433. package/dist/radar-NJJJXTRR-C-AZP_Te.js +0 -21
  434. package/dist/rpm-vhJNlrQ6.js +0 -5
  435. package/dist/ruby-CVluPY0M.js +0 -4
  436. package/dist/sas-A8DL8oy3.js +0 -4
  437. package/dist/scheme-6xHHcSXC.js +0 -4
  438. package/dist/shell-DHN-e5rf.js +0 -4
  439. package/dist/sieve-BuQwLY02.js +0 -4
  440. package/dist/smalltalk-BA4HPg2H.js +0 -4
  441. package/dist/sparql-Bf4yCuy3.js +0 -4
  442. package/dist/stateDiagram-v2-UMBNRL4Z-C_0FUzzk.js +0 -38
  443. package/dist/stex-D-I1cYeE.js +0 -5
  444. package/dist/stylus-BMeped2l.js +0 -4
  445. package/dist/swift-lwEdlZoC.js +0 -4
  446. package/dist/tcl-B03ipeqv.js +0 -4
  447. package/dist/toml-BLgrVtfu.js +0 -4
  448. package/dist/treemap-75Q7IDZK-DTvwfpWt.js +0 -21
  449. package/dist/troff-g6EjN2O2.js +0 -4
  450. package/dist/ttcn-Dzvba8jK.js +0 -4
  451. package/dist/ttcn-cfg-CadG0p1K.js +0 -4
  452. package/dist/turtle-DkXAMWo9.js +0 -4
  453. package/dist/vb-C5dCiel8.js +0 -4
  454. package/dist/vbscript-I4bDEQln.js +0 -4
  455. package/dist/velocity-mt0fDwFH.js +0 -4
  456. package/dist/verilog-Dxq3KJkc.js +0 -4
  457. package/dist/vhdl-Km0QUlV-.js +0 -4
  458. package/dist/webidl-B3lJ2MRL.js +0 -4
  459. package/dist/xquery-CcIxNPEe.js +0 -4
  460. package/dist/yacas-oMa-f-tN.js +0 -4
  461. package/dist/z80-D03Nvn6l.js +0 -4
  462. /package/dist/{apl-DZqo8Elt.js → apl-CEHentF4.js} +0 -0
  463. /package/dist/{asciiarmor-DTzHAIeX.js → asciiarmor-DURYiCS0.js} +0 -0
  464. /package/dist/{asn1-DrAXKsZH.js → asn1-ETAiEoXY.js} +0 -0
  465. /package/dist/{asterisk-oF4U3h48.js → asterisk-DTpbbXPb.js} +0 -0
  466. /package/dist/{brainfuck-BYgLey30.js → brainfuck-BWQep-SA.js} +0 -0
  467. /package/dist/{clojure-Bs2M3OUY.js → clojure-BzFapDkA.js} +0 -0
  468. /package/dist/{cmake-DpI8vxJN.js → cmake-DvlbIC8x.js} +0 -0
  469. /package/dist/{cobol-BQyrWo72.js → cobol-BrEI4cPR.js} +0 -0
  470. /package/dist/{coffeescript-9ke9UHmw.js → coffeescript-B6cvu8mO.js} +0 -0
  471. /package/dist/{common-keywords-BzgeAvH1.js → common-keywords-WqQm7W8t.js} +0 -0
  472. /package/dist/{commonlisp-DghUdrUH.js → commonlisp-BIT8PQqi.js} +0 -0
  473. /package/dist/{crystal-DEf_SInh.js → crystal-B_UcPArT.js} +0 -0
  474. /package/dist/{css-BzTU9lNO.js → css-dHbnt_zl.js} +0 -0
  475. /package/dist/{cypher-a2v0c11S.js → cypher-Dh3FOpL7.js} +0 -0
  476. /package/dist/{d-SAswny-M.js → d-CQD1IHee.js} +0 -0
  477. /package/dist/{diff-OJ-xLXcG.js → diff-CpF_IDx0.js} +0 -0
  478. /package/dist/{dtd-BsUf-rer.js → dtd-DYoNpy6c.js} +0 -0
  479. /package/dist/{duckdb-keywords-B0NOra5o.js → duckdb-keywords-CdIsl9L0.js} +0 -0
  480. /package/dist/{dylan-C0ZYngjn.js → dylan-Bc_2G1E-.js} +0 -0
  481. /package/dist/{ebnf-DF1xx0b_.js → ebnf-jGVT_YpN.js} +0 -0
  482. /package/dist/{ecl-Bsuvoouq.js → ecl-UIU-P-Ar.js} +0 -0
  483. /package/dist/{eiffel-DgfSpLi-.js → eiffel-C90Oyuix.js} +0 -0
  484. /package/dist/{elm-GNxDj-5E.js → elm-B9fWSySj.js} +0 -0
  485. /package/dist/{erlang-Ds3uY1kL.js → erlang-Ccff0UAn.js} +0 -0
  486. /package/dist/{fcl-CqBgSioc.js → fcl-CGR8NxAg.js} +0 -0
  487. /package/dist/{forth-JCaLysGk.js → forth-U1ROGcBY.js} +0 -0
  488. /package/dist/{fortran-Dc2AoKAl.js → fortran-3nOkjDmc.js} +0 -0
  489. /package/dist/{gas-Q4Uz82YW.js → gas-B_4H5FzV.js} +0 -0
  490. /package/dist/{gherkin-Dpxe49sQ.js → gherkin-B0eru5Uz.js} +0 -0
  491. /package/dist/{groovy-D8mTRCu6.js → groovy-dqjtZUVf.js} +0 -0
  492. /package/dist/{haskell-2_8cC4wY.js → haskell-DFzCCQzo.js} +0 -0
  493. /package/dist/{haxe-Bl9zkZlz.js → haxe-Da8Pj5RT.js} +0 -0
  494. /package/dist/{http-DKCqY6yS.js → http-1HACL_9s.js} +0 -0
  495. /package/dist/{idl-Dn-HNfGW.js → idl-D3NXs5iM.js} +0 -0
  496. /package/dist/{jinja2-JjFiAGKk.js → jinja2-gBHAxUdF.js} +0 -0
  497. /package/dist/{julia-R5wne8eu.js → julia-bG-6nJ-_.js} +0 -0
  498. /package/dist/{livescript-DSwokrYj.js → livescript-BlsRC8UJ.js} +0 -0
  499. /package/dist/{lua-CgXfrp2-.js → lua-BbDC0_5w.js} +0 -0
  500. /package/dist/{mathematica-BVli92MR.js → mathematica-YZTe3-PF.js} +0 -0
  501. /package/dist/{mbox-CMFlocdS.js → mbox-CY5idp08.js} +0 -0
  502. /package/dist/{mirc-BkW04Zpc.js → mirc-CbQuFZKk.js} +0 -0
  503. /package/dist/{mllike-DEjvHvNV.js → mllike-DsbHMX-5.js} +0 -0
  504. /package/dist/{modelica-CxDn-oje.js → modelica-CQuvsOQk.js} +0 -0
  505. /package/dist/{mscgen-D78wmE-w.js → mscgen-LIpBP9VR.js} +0 -0
  506. /package/dist/{mumps-Bi0IvPOV.js → mumps-Ct5NXoaG.js} +0 -0
  507. /package/dist/{nginx-DErPZFhX.js → nginx-Dvc62C8z.js} +0 -0
  508. /package/dist/{ntriples-Btyp6wRL.js → ntriples-jVkxWUuv.js} +0 -0
  509. /package/dist/{octave-CZA6-2F8.js → octave-jGOImUB0.js} +0 -0
  510. /package/dist/{oz-Bm6LSNfE.js → oz-Y0FKDMS2.js} +0 -0
  511. /package/dist/{pascal-B4J6a9BH.js → pascal-BaLtPWWB.js} +0 -0
  512. /package/dist/{perl-CzVqxS08.js → perl-CjfE0JLo.js} +0 -0
  513. /package/dist/{pig-Clh03cnn.js → pig-DE4epV99.js} +0 -0
  514. /package/dist/{properties-D7ch1Wyb.js → properties-CLyCG5C-.js} +0 -0
  515. /package/dist/{protobuf-DrkdrMPK.js → protobuf-BjBBs_V4.js} +0 -0
  516. /package/dist/{puppet-BtZG8zdO.js → puppet-ZImLuomA.js} +0 -0
  517. /package/dist/{python-B6FKOVIv.js → python-C9YN71pR.js} +0 -0
  518. /package/dist/{r-Dnvo5-96.js → r-DILmKWWW.js} +0 -0
  519. /package/dist/{rpm-B1DrgfnX.js → rpm-fpIsm1Kr.js} +0 -0
  520. /package/dist/{ruby-CelfUg17.js → ruby-BuiQI41h.js} +0 -0
  521. /package/dist/{sas-DfSQFMWG.js → sas-C76sJ1zF.js} +0 -0
  522. /package/dist/{scheme-BplhaWuO.js → scheme-DHjM-txv.js} +0 -0
  523. /package/dist/{shell-DqU5OS2c.js → shell--7NmGJ9p.js} +0 -0
  524. /package/dist/{sieve-BE4_IyGa.js → sieve-DaPvBv1M.js} +0 -0
  525. /package/dist/{smalltalk-B_WPL8Nx.js → smalltalk-KPvwrjCs.js} +0 -0
  526. /package/dist/{solr-DlJFg7H5.js → solr-PvZUtEDb.js} +0 -0
  527. /package/dist/{sparql-7XIlcOgW.js → sparql-CXSUIQer.js} +0 -0
  528. /package/dist/{spreadsheet-BdZSVwVp.js → spreadsheet-DPJdGPkx.js} +0 -0
  529. /package/dist/{sql-CCrq7lfJ.js → sql-Dp4ZLSIa.js} +0 -0
  530. /package/dist/{stex-BiFc8QAu.js → stex-CeXW4zzk.js} +0 -0
  531. /package/dist/{stylus-DlSH9xpH.js → stylus-BXcmrg9w.js} +0 -0
  532. /package/dist/{swift-e3tMTZgJ.js → swift-DD8I7hKP.js} +0 -0
  533. /package/dist/{tcl-DfZMC20G.js → tcl-B9Lp4GtA.js} +0 -0
  534. /package/dist/{textile-DaSeca5U.js → textile-qdiY0teq.js} +0 -0
  535. /package/dist/{tiddlywiki-dfoiz8pS.js → tiddlywiki-t32lkubq.js} +0 -0
  536. /package/dist/{tiki-yJbQzhma.js → tiki-B0qKrSMl.js} +0 -0
  537. /package/dist/{troff-FN_FrCXR.js → troff-105XJOEu.js} +0 -0
  538. /package/dist/{ttcn-7_i4HlyB.js → ttcn-1_BxDcM8.js} +0 -0
  539. /package/dist/{ttcn-cfg-B46AlBUV.js → ttcn-cfg-Cn_XgXiw.js} +0 -0
  540. /package/dist/{turtle-QQfeFveR.js → turtle-BI6LyfEu.js} +0 -0
  541. /package/dist/{vb-DToPVnLa.js → vb-BecoBfmr.js} +0 -0
  542. /package/dist/{vbscript-CtsNaTz4.js → vbscript-De-zpA4i.js} +0 -0
  543. /package/dist/{velocity-CAoNe6ns.js → velocity-DhlYJTrD.js} +0 -0
  544. /package/dist/{verilog-DrDOMiJq.js → verilog-BDZgxDOW.js} +0 -0
  545. /package/dist/{vhdl-DnO0OEPh.js → vhdl-CV0OKTbp.js} +0 -0
  546. /package/dist/{webidl-Or6d1ZfA.js → webidl-BOM1Fs0O.js} +0 -0
  547. /package/dist/{xquery-CEp_Mcpr.js → xquery-CltP_CGh.js} +0 -0
  548. /package/dist/{yacas-DgnYrSlp.js → yacas-Dch4E2Dg.js} +0 -0
  549. /package/dist/{z80-DlG_kyeB.js → z80-B5Yly27o.js} +0 -0
@@ -218,6 +218,49 @@ describe("getCopyValue", () => {
218
218
  `,
219
219
  );
220
220
  });
221
+
222
+ it("should handle bigint", () => {
223
+ const bigint = String(BigInt(2 ** 64));
224
+ const value = `text/plain+bigint:${bigint}`;
225
+ const result = getCopyValue(value);
226
+ expect(result).toMatchInlineSnapshot(`"18446744073709551616"`);
227
+
228
+ const nestedBigInt = {
229
+ key1: bigint, // this will be just a string
230
+ key2: `text/plain+bigint:${bigint}`, // this will convert to number
231
+ key3: true,
232
+ };
233
+ const nestedResult = getCopyValue(nestedBigInt);
234
+ expect(nestedResult).toMatchInlineSnapshot(
235
+ `
236
+ "{
237
+ "key1": "18446744073709551616",
238
+ "key2": 18446744073709551616,
239
+ "key3": True
240
+ }"
241
+ `,
242
+ );
243
+
244
+ const bigintRaw = BigInt(2 ** 64);
245
+ const bigintRawResult = getCopyValue(bigintRaw);
246
+ expect(bigintRawResult).toMatchInlineSnapshot(`"18446744073709551616"`);
247
+
248
+ const nestedBigIntRaw = {
249
+ key1: bigintRaw, // raw number
250
+ key2: `text/plain+bigint:${bigintRaw}`,
251
+ key3: true,
252
+ };
253
+ const nestedBigIntRawResult = getCopyValue(nestedBigIntRaw);
254
+ expect(nestedBigIntRawResult).toMatchInlineSnapshot(
255
+ `
256
+ "{
257
+ "key1": 18446744073709551616,
258
+ "key2": 18446744073709551616,
259
+ "key3": True
260
+ }"
261
+ `,
262
+ );
263
+ });
221
264
  });
222
265
 
223
266
  describe("determineMaxDisplayLength", () => {
@@ -463,6 +463,7 @@ const ExtrasSelector: React.FC<ExtrasSelectorProps> = ({
463
463
  <button
464
464
  className="hover:bg-muted/50 rounded text-sm px-1 transition-colors border border-muted-foreground/30 hover:border-muted-foreground/60 min-w-0 flex-1 truncate text-left"
465
465
  title={`Selected extras: ${selectedExtras.join(", ")}`}
466
+ type="button"
466
467
  >
467
468
  {selectedExtras.join(",")}
468
469
  </button>
@@ -523,6 +524,7 @@ const ExtrasSelector: React.FC<ExtrasSelectorProps> = ({
523
524
  !canSelectExtras && "opacity-50 cursor-not-allowed",
524
525
  )}
525
526
  title={canSelectExtras ? "Add extras" : "Loading extras..."}
527
+ type="button"
526
528
  >
527
529
  <PlusIcon className="w-3 h-3 shrink-0" />
528
530
  </button>
@@ -619,6 +621,7 @@ const StreamingLogsViewer: React.FC<StreamingLogsViewerProps> = ({
619
621
  <button
620
622
  onClick={() => setIsExpanded(!isExpanded)}
621
623
  className="flex items-center gap-2 text-sm font-medium text-muted-foreground hover:text-foreground transition-colors"
624
+ type="button"
622
625
  >
623
626
  {isExpanded ? (
624
627
  <ChevronDownIcon className="w-4 h-4" />
@@ -189,7 +189,8 @@ describe("getDefaults", () => {
189
189
  const schema = z.object({
190
190
  map: z.map(z.string(), z.number()).default(new Map([["a", 1]])),
191
191
  });
192
- const result = getDefaults(schema) as { map: Map<string, number> };
192
+ const defaults = getDefaults(schema);
193
+ const result = defaults as { map: Map<string, number> };
193
194
  expect(result.map instanceof Map).toBe(true);
194
195
  expect([...result.map.entries()]).toEqual([["a", 1]]);
195
196
  });
@@ -198,7 +199,8 @@ describe("getDefaults", () => {
198
199
  const schema = z.object({
199
200
  set: z.set(z.string()).default(new Set(["a", "b"])),
200
201
  });
201
- const result = getDefaults(schema) as { set: Set<string> };
202
+ const defaults = getDefaults(schema);
203
+ const result = defaults as { set: Set<string> };
202
204
  expect(result.set instanceof Set).toBe(true);
203
205
  expect([...result.set]).toEqual(["a", "b"]);
204
206
  });
@@ -9,10 +9,11 @@ import { Tooltip } from "../ui/tooltip";
9
9
  import { toast } from "../ui/use-toast";
10
10
 
11
11
  interface Props {
12
- value: string | (() => string);
12
+ value: string | ((event: React.MouseEvent) => string);
13
13
  className?: string;
14
- tooltip?: string | false;
14
+ tooltip?: React.ReactNode | false;
15
15
  toastTitle?: string;
16
+ ariaLabel?: string;
16
17
  }
17
18
 
18
19
  export const CopyClipboardIcon: React.FC<Props> = ({
@@ -20,11 +21,12 @@ export const CopyClipboardIcon: React.FC<Props> = ({
20
21
  className,
21
22
  tooltip,
22
23
  toastTitle,
24
+ ariaLabel,
23
25
  }) => {
24
26
  const [isCopied, setIsCopied] = useState(false);
25
27
 
26
- const handleCopy = Events.stopPropagation(async () => {
27
- const valueToCopy = typeof value === "function" ? value() : value;
28
+ const handleCopy = Events.stopPropagation(async (event: React.MouseEvent) => {
29
+ const valueToCopy = typeof value === "function" ? value(event) : value;
28
30
  await copyToClipboard(valueToCopy).then(() => {
29
31
  setIsCopied(true);
30
32
  setTimeout(() => setIsCopied(false), 2000);
@@ -35,7 +37,11 @@ export const CopyClipboardIcon: React.FC<Props> = ({
35
37
  });
36
38
 
37
39
  const button = (
38
- <button type="button" onClick={handleCopy} aria-label="Copy to clipboard">
40
+ <button
41
+ type="button"
42
+ onClick={handleCopy}
43
+ aria-label={ariaLabel ?? "Copy to clipboard"}
44
+ >
39
45
  {isCopied ? (
40
46
  <CheckIcon className={cn(className, "text-(--grass-11)")} />
41
47
  ) : (
@@ -102,7 +102,9 @@ export const MinimalHotkeys: React.FC<{
102
102
  );
103
103
  };
104
104
 
105
- function prettyPrintHotkey(key: string): [label: string, symbol?: string] {
105
+ export function prettyPrintHotkey(
106
+ key: string,
107
+ ): [label: string, symbol?: string] {
106
108
  const platform = isPlatformMac() ? "mac" : "default";
107
109
 
108
110
  const lowerKey = key.toLowerCase();
@@ -70,6 +70,8 @@ const buttonVariants = cva(
70
70
  link: "underline-offset-4 hover:underline text-link",
71
71
  linkDestructive:
72
72
  "underline-offset-4 hover:underline text-destructive underline-destructive",
73
+ outlineDestructive:
74
+ "border border-destructive text-destructive hover:bg-destructive/10",
73
75
  },
74
76
  size: {
75
77
  default: "h-10 py-2 px-4",
@@ -0,0 +1,85 @@
1
+ /* Copyright 2024 Marimo. All rights reserved. */
2
+
3
+ import React from "react";
4
+ import {
5
+ AlertDialog,
6
+ AlertDialogAction,
7
+ AlertDialogCancel,
8
+ AlertDialogContent,
9
+ AlertDialogDescription,
10
+ AlertDialogDestructiveAction,
11
+ AlertDialogFooter,
12
+ AlertDialogHeader,
13
+ AlertDialogTitle,
14
+ AlertDialogTrigger,
15
+ } from "./alert-dialog";
16
+
17
+ interface ConfirmationButtonProps {
18
+ /**
19
+ * The button element to trigger the confirmation dialog
20
+ */
21
+ children: React.ReactElement;
22
+ /**
23
+ * Title of the confirmation dialog
24
+ */
25
+ title: string;
26
+ /**
27
+ * Description/message of the confirmation dialog
28
+ */
29
+ description: string;
30
+ /**
31
+ * Callback when the user confirms the action
32
+ */
33
+ onConfirm: () => void;
34
+ /**
35
+ * Text for the confirm button (default: "Continue")
36
+ */
37
+ confirmText?: string;
38
+ /**
39
+ * Text for the cancel button (default: "Cancel")
40
+ */
41
+ cancelText?: string;
42
+ /**
43
+ * Whether to use destructive styling for the confirm button
44
+ */
45
+ destructive?: boolean;
46
+ }
47
+
48
+ export const ConfirmationButton: React.FC<ConfirmationButtonProps> = ({
49
+ children,
50
+ title,
51
+ description,
52
+ onConfirm,
53
+ confirmText = "Continue",
54
+ cancelText = "Cancel",
55
+ destructive = false,
56
+ }) => {
57
+ const [open, setOpen] = React.useState(false);
58
+
59
+ const handleConfirm = () => {
60
+ onConfirm();
61
+ setOpen(false);
62
+ };
63
+
64
+ const ActionComponent = destructive
65
+ ? AlertDialogDestructiveAction
66
+ : AlertDialogAction;
67
+
68
+ return (
69
+ <AlertDialog open={open} onOpenChange={setOpen}>
70
+ <AlertDialogTrigger asChild>{children}</AlertDialogTrigger>
71
+ <AlertDialogContent>
72
+ <AlertDialogHeader>
73
+ <AlertDialogTitle>{title}</AlertDialogTitle>
74
+ <AlertDialogDescription>{description}</AlertDialogDescription>
75
+ </AlertDialogHeader>
76
+ <AlertDialogFooter>
77
+ <AlertDialogCancel>{cancelText}</AlertDialogCancel>
78
+ <ActionComponent onClick={handleConfirm}>
79
+ {confirmText}
80
+ </ActionComponent>
81
+ </AlertDialogFooter>
82
+ </AlertDialogContent>
83
+ </AlertDialog>
84
+ );
85
+ };
@@ -12,6 +12,7 @@ const switchVariants = cva(
12
12
  size: {
13
13
  default: "h-6 w-11 mb-1",
14
14
  sm: "h-4.5 w-8.5",
15
+ xs: "h-4 w-7",
15
16
  },
16
17
  },
17
18
  defaultVariants: {
@@ -28,6 +29,7 @@ const switchThumbVariants = cva(
28
29
  default:
29
30
  "h-5 w-5 data-[state=checked]:translate-x-5 data-[state=unchecked]:translate-x-0",
30
31
  sm: "h-3.5 w-3.5 data-[state=checked]:translate-x-4 data-[state=unchecked]:translate-x-0",
32
+ xs: "h-3 w-3 data-[state=checked]:translate-x-3 data-[state=unchecked]:translate-x-0",
31
33
  },
32
34
  },
33
35
  defaultVariants: {
@@ -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,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
+ }
@@ -13,10 +13,13 @@ 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>(
@@ -86,7 +89,7 @@ export const activeChatAtom = atom(
86
89
  }
87
90
  return state.chats.get(state.activeChatId);
88
91
  },
89
- (get, set, chatId: ChatId | null) => {
92
+ (_get, set, chatId: ChatId | null) => {
90
93
  set(chatStateAtom, (prev) => ({
91
94
  ...prev,
92
95
  activeChatId: chatId,
@@ -13,18 +13,43 @@ describe("FrontendToolRegistry", () => {
13
13
 
14
14
  it("invokes a tool with valid args and validates input/output", async () => {
15
15
  const registry = new FrontendToolRegistry([new TestFrontendTool()]);
16
- const ok = await registry.invoke("test_frontend_tool", { name: "Alice" });
17
- expect(ok).toEqual({ message: "Hello: Alice" });
16
+ const response = await registry.invoke("test_frontend_tool", {
17
+ name: "Alice",
18
+ });
19
+
20
+ // Check InvokeResult wrapper
21
+ expect(response.tool_name).toBe("test_frontend_tool");
22
+ expect(response.error).toBeNull();
23
+
24
+ // Check the actual tool output
25
+ expect(response.result).toMatchObject({
26
+ status: "success",
27
+ data: {
28
+ greeting: "Hello: Alice",
29
+ },
30
+ next_steps: expect.arrayContaining([expect.any(String)]),
31
+ });
32
+
33
+ // Verify timestamp is present and valid
34
+ const output = response.result as { data: { timestamp: string } };
35
+ expect(output.data.timestamp).toBeDefined();
36
+ expect(typeof output.data.timestamp).toBe("string");
18
37
  });
19
38
 
20
39
  it("returns a structured error on invalid args", async () => {
21
40
  const registry = new FrontendToolRegistry([new TestFrontendTool()]);
22
- const err = (await registry.invoke("test_frontend_tool", {})) as Record<
23
- string,
24
- unknown
25
- >;
26
- expect(err.status).toBe("error");
27
- expect(err.code).toBe("TOOL_ERROR");
41
+ const response = await registry.invoke("test_frontend_tool", {});
42
+
43
+ // Check InvokeResult wrapper
44
+ expect(response.tool_name).toBe("test_frontend_tool");
45
+ expect(response.result).toBeNull();
46
+ expect(response.error).toBeDefined();
47
+ expect(typeof response.error).toBe("string");
48
+
49
+ // Verify error message contains expected prefix
50
+ expect(response.error).toContain("Error invoking tool ToolExecutionError:");
51
+ expect(response.error).toContain('"code":"TOOL_ERROR"');
52
+ expect(response.error).toContain('"is_retryable":false');
28
53
  });
29
54
 
30
55
  it("returns tool schemas with expected shape and memoizes the result", () => {
@@ -1,8 +1,88 @@
1
1
  /* Copyright 2024 Marimo. All rights reserved. */
2
2
 
3
- import type { z } from "zod";
3
+ import { z } from "zod";
4
4
  import type { CopilotMode } from "./registry";
5
5
 
6
+ /**
7
+ * Status value for tool responses, mirroring status value in marimo/_ai/_tools/types.py
8
+ */
9
+ export type StatusValue = "success" | "error" | "warning";
10
+
11
+ /**
12
+ * Structured error for tool execution failures.
13
+ * Mirrors the ToolExecutionError dataclass from marimo/_ai/_tools/utils/exceptions.py
14
+ *
15
+ * @example
16
+ * throw new ToolExecutionError(
17
+ * "Failed to fetch data",
18
+ * "FETCH_ERROR",
19
+ * true,
20
+ * "Check your network connection"
21
+ * );
22
+ */
23
+ export class ToolExecutionError extends Error {
24
+ readonly code: string;
25
+ readonly isRetryable: boolean;
26
+ readonly suggestedFix?: string;
27
+ readonly meta?: Record<string, unknown>;
28
+
29
+ constructor(
30
+ message: string,
31
+ code = "TOOL_ERROR",
32
+ isRetryable = false,
33
+ suggestedFix?: string,
34
+ meta?: Record<string, unknown>,
35
+ ) {
36
+ super(message);
37
+ this.name = "ToolExecutionError";
38
+ this.code = code;
39
+ this.isRetryable = isRetryable;
40
+ this.suggestedFix = suggestedFix;
41
+ this.meta = meta;
42
+ }
43
+
44
+ toStructuredString(): string {
45
+ const stringError = JSON.stringify({
46
+ message: this.message,
47
+ code: this.code,
48
+ is_retryable: this.isRetryable,
49
+ suggested_fix: this.suggestedFix,
50
+ meta: this.meta ?? {},
51
+ });
52
+ return `Error invoking tool ${this.name}: ${stringError}`;
53
+ }
54
+ }
55
+
56
+ /**
57
+ * Base interface for tool output responses.
58
+ * Mirrors the SuccessResult dataclass from marimo/_ai/_tools/types.py
59
+ *
60
+ * Tool outputs should extend this interface to include standardized
61
+ * metadata like next_steps, messages, and status information.
62
+ */
63
+ export interface ToolOutputBase {
64
+ status?: StatusValue;
65
+ auth_required?: boolean;
66
+ next_steps?: string[];
67
+ action_url?: string;
68
+ message?: string;
69
+ meta?: Record<string, unknown>;
70
+ }
71
+
72
+ /**
73
+ * Base Zod schema for tool outputs.
74
+ *
75
+ * Tool output schemas should extend this using .extend() to add their specific fields.
76
+ */
77
+ export const toolOutputBaseSchema = z.object({
78
+ status: z.enum(["success", "error", "warning"]).optional(),
79
+ auth_required: z.boolean().optional(),
80
+ next_steps: z.array(z.string()).optional(),
81
+ action_url: z.string().optional(),
82
+ message: z.string().optional(),
83
+ meta: z.record(z.string(), z.unknown()).optional(),
84
+ });
85
+
6
86
  /**
7
87
  * Contract for a frontend tool.
8
88
  *
@@ -3,7 +3,7 @@
3
3
  import type { components } from "@marimo-team/marimo-api";
4
4
  import { Memoize } from "typescript-memoize";
5
5
  import { type ZodObject, z } from "zod";
6
- import type { AiTool } from "./base";
6
+ import { type AiTool, ToolExecutionError } from "./base";
7
7
  import { TestFrontendTool } from "./sample-tool";
8
8
 
9
9
  export type AnyZodObject = ZodObject<z.ZodRawShape>;
@@ -11,6 +11,12 @@ export type AnyZodObject = ZodObject<z.ZodRawShape>;
11
11
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
12
12
  type StoredTool = AiTool<any, any>;
13
13
 
14
+ interface InvokeResult<TName> {
15
+ tool_name: TName;
16
+ result: unknown;
17
+ error: string | null;
18
+ }
19
+
14
20
  /** should be the same as marimo/_config/config.py > CopilotMode */
15
21
 
16
22
  type ToolDefinition = components["schemas"]["ToolDefinition"];
@@ -43,7 +49,7 @@ export class FrontendToolRegistry {
43
49
  async invoke<TName extends string>(
44
50
  toolName: TName,
45
51
  rawArgs: unknown,
46
- ): Promise<unknown> {
52
+ ): Promise<InvokeResult<TName>> {
47
53
  const tool = this.getToolOrThrow(toolName);
48
54
  const handler = tool.handler;
49
55
  const inputSchema = tool.schema;
@@ -69,17 +75,37 @@ export class FrontendToolRegistry {
69
75
  `Tool ${toolName} returned invalid output: ${strError}`,
70
76
  );
71
77
  }
72
- const output = response.data;
73
- return output;
74
- } catch (error) {
78
+ const result = response.data;
75
79
  return {
76
- status: "error",
77
- code: "TOOL_ERROR",
78
- message: error instanceof Error ? error.message : String(error),
79
- suggestedFix: "Try again with valid arguments.",
80
- meta: {
80
+ tool_name: toolName,
81
+ result,
82
+ error: null,
83
+ };
84
+ } catch (error) {
85
+ // Handle structured errors
86
+ if (error instanceof ToolExecutionError) {
87
+ return {
88
+ tool_name: toolName,
89
+ result: null,
90
+ error: error.toStructuredString(),
91
+ };
92
+ }
93
+
94
+ // Handle unknown/generic errors
95
+ const genericError = new ToolExecutionError(
96
+ error instanceof Error ? error.message : String(error),
97
+ "TOOL_ERROR",
98
+ false,
99
+ "Check the error message and try again with valid arguments.",
100
+ {
81
101
  args: rawArgs,
102
+ errorType: error?.constructor?.name ?? typeof error,
82
103
  },
104
+ );
105
+ return {
106
+ tool_name: toolName,
107
+ result: null,
108
+ error: genericError.toStructuredString(),
83
109
  };
84
110
  }
85
111
  }
@@ -1,7 +1,12 @@
1
1
  /* Copyright 2024 Marimo. All rights reserved. */
2
2
 
3
3
  import { z } from "zod";
4
- import type { AiTool } from "./base";
4
+ import {
5
+ type AiTool,
6
+ ToolExecutionError,
7
+ type ToolOutputBase,
8
+ toolOutputBaseSchema,
9
+ } from "./base";
5
10
  import type { CopilotMode } from "./registry";
6
11
 
7
12
  const description = `
@@ -11,26 +16,57 @@ Args:
11
16
  - name (string): The name to include in the greeting.
12
17
 
13
18
  Returns:
14
- - { message: string } The greeting message, e.g., "Hello: Alice".
19
+ - Output with data containing the greeting message.
15
20
  `;
16
21
 
17
22
  interface Input {
18
23
  name: string;
19
24
  }
20
25
 
21
- interface Output {
22
- message: string;
26
+ interface GreetingData {
27
+ greeting: string;
28
+ timestamp: string;
23
29
  }
24
30
 
25
- /** A sample frontend tool that returns "hello world" */
31
+ interface Output extends ToolOutputBase {
32
+ data: GreetingData;
33
+ }
34
+
35
+ /** A sample frontend tool that demonstrates real tool output structure */
26
36
  export class TestFrontendTool implements AiTool<Input, Output> {
27
37
  readonly name = "test_frontend_tool";
28
38
  readonly description = description;
29
39
  readonly schema = z.object({ name: z.string() });
30
- readonly outputSchema = z.object({ message: z.string() });
40
+ readonly outputSchema = toolOutputBaseSchema.extend({
41
+ data: z.object({
42
+ greeting: z.string(),
43
+ timestamp: z.string(),
44
+ }),
45
+ });
31
46
  readonly mode: CopilotMode[] = ["ask"];
32
47
 
33
- async handler({ name }: Input) {
34
- return { message: `Hello: ${name}` };
48
+ async handler({ name }: Input): Promise<Output> {
49
+ // Example: Validate input and throw ToolExecutionError on invalid data
50
+ if (!name.trim()) {
51
+ throw new ToolExecutionError(
52
+ "Name cannot be empty",
53
+ "INVALID_INPUT",
54
+ false,
55
+ "Please provide a non-empty name",
56
+ { field: "name", received: name },
57
+ );
58
+ }
59
+
60
+ return {
61
+ status: "success",
62
+ data: {
63
+ greeting: `Hello: ${name}`,
64
+ timestamp: new Date().toISOString(),
65
+ },
66
+ next_steps: [
67
+ "You can now proceed with your next task",
68
+ "Try calling another tool if needed",
69
+ ],
70
+ };
35
71
  }
36
72
  }
@@ -0,0 +1,5 @@
1
+ /* Copyright 2024 Marimo. All rights reserved. */
2
+ import { atom } from "jotai";
3
+ import type { CacheInfoFetched } from "../kernel/messages";
4
+
5
+ export const cacheInfoAtom = atom<CacheInfoFetched | null>(null);