@marimo-team/islands 0.16.4 → 0.17.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (589) hide show
  1. package/dist/{ConnectedDataExplorerComponent-CCjhPKMy.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-D5C6JAJf.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-CYfKmSNp.js → glide-data-editor-DHuN8kQ8.js} +1701 -1771
  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 +8234 -8633
  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-BlJDcO4M.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-Dcb1hf55.js → types-CRXV0KD5.js} +385 -252
  245. package/dist/{useAsyncData-DAtPzJzP.js → useAsyncData-uMVTsDI9.js} +1 -1
  246. package/dist/{useDateFormatter-CiUlIu7v.js → useDateFormatter-Dcz7jstn.js} +6 -6
  247. package/dist/{useTheme-CmsvrO5o.js → useTheme-NbEx-ZNV.js} +14 -10
  248. package/dist/vb-Cb1HQHii.js +4 -0
  249. package/dist/vbscript-CpXOP4wZ.js +4 -0
  250. package/dist/{vega-component-B3LA6qbm.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/__tests__/chat-history.test.ts +123 -0
  264. package/src/components/app-config/ai-config.tsx +23 -0
  265. package/src/components/app-config/mcp-config.tsx +42 -2
  266. package/src/components/app-config/user-config-form.tsx +29 -49
  267. package/src/components/chat/acp/__tests__/context-utils.test.ts +1 -1
  268. package/src/components/chat/acp/agent-panel.tsx +1 -1
  269. package/src/components/chat/acp/blocks.tsx +46 -53
  270. package/src/components/chat/acp/common.tsx +1 -1
  271. package/src/components/chat/acp/context-utils.ts +1 -1
  272. package/src/components/chat/acp/session-tabs.tsx +1 -1
  273. package/src/components/chat/chat-history-popover.tsx +125 -0
  274. package/src/components/chat/chat-history-utils.ts +69 -0
  275. package/src/components/chat/chat-panel.tsx +9 -57
  276. package/src/components/chat/chat-utils.ts +11 -4
  277. package/src/components/data-table/__tests__/header-items.test.tsx +117 -0
  278. package/src/components/data-table/column-header.tsx +4 -2
  279. package/src/components/data-table/columns.tsx +2 -1
  280. package/src/components/data-table/data-table.tsx +7 -2
  281. package/src/components/data-table/header-items.tsx +63 -10
  282. package/src/components/dependency-graph/custom-node.tsx +11 -11
  283. package/src/components/dependency-graph/elements.ts +9 -4
  284. package/src/components/dependency-graph/panels.tsx +6 -4
  285. package/src/components/editor/Output.tsx +6 -1
  286. package/src/components/editor/__tests__/data-attributes.test.tsx +1 -1
  287. package/src/components/editor/actions/useNotebookActions.tsx +2 -4
  288. package/src/components/editor/ai/__tests__/completion-utils.test.ts +23 -31
  289. package/src/components/editor/ai/ai-completion-editor.tsx +135 -5
  290. package/src/components/editor/ai/completion-handlers.tsx +106 -22
  291. package/src/components/editor/cell/CreateCellButton.tsx +14 -2
  292. package/src/components/editor/cell/code/cell-editor.tsx +6 -0
  293. package/src/components/editor/chrome/panels/cache-panel.tsx +216 -0
  294. package/src/components/editor/chrome/panels/empty-state.tsx +3 -1
  295. package/src/components/editor/chrome/types.ts +66 -22
  296. package/src/components/editor/chrome/wrapper/app-chrome.tsx +2 -0
  297. package/src/components/editor/database/schemas.ts +2 -10
  298. package/src/components/editor/errors/auto-fix.tsx +138 -32
  299. package/src/components/editor/errors/fix-mode.ts +15 -0
  300. package/src/components/editor/navigation/__tests__/clipboard.test.ts +0 -5
  301. package/src/components/editor/navigation/clipboard.ts +2 -1
  302. package/src/components/editor/{Cell.tsx → notebook-cell.tsx} +25 -8
  303. package/src/components/editor/output/ConsoleOutput.tsx +27 -33
  304. package/src/components/editor/output/JsonOutput.tsx +9 -0
  305. package/src/components/editor/output/MarimoErrorOutput.tsx +4 -34
  306. package/src/components/editor/output/MarimoTracebackOutput.tsx +10 -7
  307. package/src/components/editor/output/__tests__/json-output.test.ts +43 -0
  308. package/src/components/editor/package-alert.tsx +3 -0
  309. package/src/components/editor/renderers/{CellArray.tsx → cell-array.tsx} +1 -1
  310. package/src/components/forms/__tests__/form-utils.test.ts +6 -4
  311. package/src/components/icons/copy-icon.tsx +11 -5
  312. package/src/components/mcp/hooks.ts +48 -0
  313. package/src/components/mcp/mcp-status-indicator.tsx +144 -0
  314. package/src/components/shortcuts/renderShortcut.tsx +3 -1
  315. package/src/components/ui/button.tsx +2 -0
  316. package/src/components/ui/confirmation-button.tsx +85 -0
  317. package/src/components/ui/number-field.tsx +4 -1
  318. package/src/components/ui/switch.tsx +2 -0
  319. package/src/core/ai/context/providers/__tests__/__snapshots__/tables.test.ts.snap +13 -19
  320. package/src/core/ai/context/providers/__tests__/cell-output.test.ts +0 -1
  321. package/src/core/ai/context/providers/__tests__/datasource.test.ts +14 -7
  322. package/src/core/ai/context/providers/__tests__/error.test.ts +24 -15
  323. package/src/core/ai/context/providers/cell-output.ts +5 -5
  324. package/src/core/ai/context/providers/common.ts +13 -4
  325. package/src/core/ai/context/providers/datasource.ts +56 -21
  326. package/src/core/ai/context/providers/error.ts +3 -4
  327. package/src/core/ai/context/providers/file.ts +2 -2
  328. package/src/core/ai/context/providers/tables.ts +36 -8
  329. package/src/core/ai/context/providers/variable.ts +2 -3
  330. package/src/core/ai/state.ts +6 -3
  331. package/src/core/ai/tools/__tests__/registry.test.ts +33 -8
  332. package/src/core/ai/tools/base.ts +81 -1
  333. package/src/core/ai/tools/registry.ts +36 -10
  334. package/src/core/ai/tools/sample-tool.ts +44 -8
  335. package/src/core/cache/requests.ts +5 -0
  336. package/src/core/cells/__tests__/cells.test.ts +6 -6
  337. package/src/core/cells/cells.ts +13 -14
  338. package/src/core/cells/scrollCellIntoView.ts +1 -1
  339. package/src/core/codemirror/__tests__/__snapshots__/setup.test.ts.snap +2 -0
  340. package/src/core/codemirror/__tests__/replace-editor-content.test.ts +336 -0
  341. package/src/core/codemirror/__tests__/setup.test.ts +1 -0
  342. package/src/core/codemirror/cm.ts +3 -2
  343. package/src/core/codemirror/find-replace/navigate.ts +2 -2
  344. package/src/core/codemirror/format.ts +2 -9
  345. package/src/core/codemirror/language/__tests__/sql.test.ts +24 -6
  346. package/src/core/codemirror/language/languages/python.ts +1 -3
  347. package/src/core/codemirror/language/languages/sql/sql.ts +23 -13
  348. package/src/core/codemirror/language/panel/panel.tsx +1 -6
  349. package/src/core/codemirror/language/utils.ts +3 -8
  350. package/src/core/codemirror/lsp/__tests__/notebook-lsp.test.ts +21 -14
  351. package/src/core/codemirror/lsp/federated-lsp.ts +20 -9
  352. package/src/core/codemirror/lsp/notebook-lsp.ts +35 -29
  353. package/src/core/codemirror/lsp/types.ts +0 -13
  354. package/src/core/codemirror/replace-editor-content.ts +87 -0
  355. package/src/core/config/__tests__/config-schema.test.ts +5 -0
  356. package/src/core/config/config-schema.ts +10 -0
  357. package/src/core/config/feature-flag.tsx +2 -6
  358. package/src/core/edit-app.tsx +1 -1
  359. package/src/core/errors/__tests__/errors.test.ts +1 -0
  360. package/src/core/errors/errors.ts +20 -6
  361. package/src/core/islands/bridge.ts +2 -0
  362. package/src/core/islands/main.ts +4 -0
  363. package/src/core/kernel/messages.ts +1 -0
  364. package/src/core/network/CachingRequestRegistry.ts +2 -2
  365. package/src/core/network/requests-network.ts +14 -0
  366. package/src/core/network/requests-static.ts +2 -0
  367. package/src/core/network/requests-toasting.ts +2 -0
  368. package/src/core/network/types.ts +5 -0
  369. package/src/core/saving/save-component.tsx +43 -36
  370. package/src/core/wasm/bridge.ts +2 -0
  371. package/src/core/websocket/useMarimoWebSocket.tsx +8 -0
  372. package/src/css/app/codemirror-completions.css +1 -1
  373. package/src/custom.d.ts +2 -0
  374. package/src/plugins/core/registerReactComponent.tsx +5 -1
  375. package/src/plugins/impl/DataTablePlugin.tsx +19 -19
  376. package/src/plugins/impl/__tests__/DateTimePickerPlugin.test.tsx +32 -0
  377. package/src/plugins/impl/chat/ChatPlugin.tsx +1 -1
  378. package/src/plugins/impl/chat/chat-ui.tsx +17 -2
  379. package/src/plugins/impl/chat/types.ts +1 -1
  380. package/src/plugins/impl/data-frames/DataFramePlugin.tsx +7 -2
  381. package/src/plugins/impl/plotly/__tests__/parse-from-template.test.ts +17 -0
  382. package/src/plugins/impl/plotly/parse-from-template.ts +2 -1
  383. package/src/stories/cell.stories.tsx +1 -1
  384. package/src/stories/layout/vertical/one-column.stories.tsx +1 -1
  385. package/src/utils/__tests__/formatting.test.ts +107 -0
  386. package/src/utils/__tests__/json-parser.test.ts +13 -0
  387. package/src/utils/copy.ts +6 -0
  388. package/src/utils/formatting.ts +51 -0
  389. package/src/utils/json/json-parser.ts +28 -3
  390. package/src/utils/numbers.ts +24 -1
  391. package/dist/any-language-editor-CVFQlioK.js +0 -156
  392. package/dist/apl-ChlaBfxB.js +0 -4
  393. package/dist/architecture-O4VJ6CD3-BVeaxUcM.js +0 -21
  394. package/dist/asciiarmor-CcJmm3l_.js +0 -4
  395. package/dist/asn1-ThRYxoBE.js +0 -4
  396. package/dist/assets/__vite-browser-external-BeNtI_tJ.js +0 -1
  397. package/dist/assets/worker-DnuXpGWN.js +0 -54
  398. package/dist/brainfuck-CEM0JgDn.js +0 -4
  399. package/dist/chunk-EXTU4WIE-DECT9AAK.js +0 -14
  400. package/dist/chunk-S3R3BYOJ-DMQ1yeyq.js +0 -386
  401. package/dist/classDiagram-KNZD7YFC-BG53O6Jt.js +0 -39
  402. package/dist/classDiagram-v2-RKCZMP56-BmKILsGU.js +0 -39
  403. package/dist/clojure-B7RHyE9t.js +0 -4
  404. package/dist/cmake-TeTMP4I5.js +0 -4
  405. package/dist/cobol-DI-mxUER.js +0 -4
  406. package/dist/coffeescript-DHUFLqWp.js +0 -4
  407. package/dist/commonlisp-SLiUrh1m.js +0 -4
  408. package/dist/crystal-B4fY1ZfJ.js +0 -4
  409. package/dist/css-Bdoq3TzK.js +0 -5
  410. package/dist/cypher-CBU182fp.js +0 -4
  411. package/dist/d-D8myDZeH.js +0 -4
  412. package/dist/data-grid-overlay-editor-qNmJk2x0.js +0 -135
  413. package/dist/diagram-QEK2KX5R-fu8Noi3H.js +0 -245
  414. package/dist/diff-DJF_UB7H.js +0 -4
  415. package/dist/dist-52-_pKoy.js +0 -6
  416. package/dist/dist-6DOMStFn.js +0 -6
  417. package/dist/dist-B334aW7p.js +0 -10
  418. package/dist/dist-BOI9lUz-.js +0 -12
  419. package/dist/dist-C06uhBzF.js +0 -6
  420. package/dist/dist-CGkpguCB.js +0 -6
  421. package/dist/dist-CrApzUED.js +0 -6
  422. package/dist/dist-Dp2GLdCl.js +0 -14
  423. package/dist/dist-WHFsbMDr.js +0 -6
  424. package/dist/dist-hyKcTPG9.js +0 -10
  425. package/dist/dtd-DY8q65lC.js +0 -4
  426. package/dist/dylan-CBLcjWCi.js +0 -4
  427. package/dist/ecl-BSXPNfOw.js +0 -4
  428. package/dist/eiffel-BJf0PQX-.js +0 -4
  429. package/dist/elm-DWQwPCZS.js +0 -4
  430. package/dist/erlang-BWBaGZ5e.js +0 -4
  431. package/dist/factor-DT1-MBPl.js +0 -5
  432. package/dist/forth-D9GDt3FB.js +0 -4
  433. package/dist/fortran-DHkRhDWw.js +0 -4
  434. package/dist/gas-7lQEOM0H.js +0 -4
  435. package/dist/gherkin-BLLyroYi.js +0 -4
  436. package/dist/gitGraph-ZV4HHKMB-z2v_cInC.js +0 -21
  437. package/dist/groovy-C-wabwj0.js +0 -4
  438. package/dist/haskell-DaxVQ_d1.js +0 -4
  439. package/dist/haxe-C2yLoC7h.js +0 -5
  440. package/dist/idl-DQBP8i7k.js +0 -4
  441. package/dist/info-63CPKGFF-GS4w6pCB.js +0 -21
  442. package/dist/infoDiagram-STP46IZ2-DE9YYPFg.js +0 -44
  443. package/dist/javascript-DRwFV9r5.js +0 -5
  444. package/dist/jinja2-CNoIpVmN.js +0 -4
  445. package/dist/julia-DXDf-GhP.js +0 -4
  446. package/dist/livescript-S2uhJQx7.js +0 -4
  447. package/dist/lua-Bvgs0y2G.js +0 -4
  448. package/dist/mathematica-D2zqfwIg.js +0 -4
  449. package/dist/mbox-SBcPaDuZ.js +0 -4
  450. package/dist/mirc-hkQc7sVF.js +0 -4
  451. package/dist/mllike-DRWPBlr9.js +0 -6
  452. package/dist/modelica-CO2ROGlP.js +0 -4
  453. package/dist/mscgen-BpX61bO6.js +0 -6
  454. package/dist/mumps-BCnFeIn6.js +0 -4
  455. package/dist/nsis-BaTOxlD1.js +0 -5
  456. package/dist/ntriples-zEo5BWjr.js +0 -4
  457. package/dist/octave-BE0RnCM9.js +0 -4
  458. package/dist/oz-C4_2Ttul.js +0 -4
  459. package/dist/packet-HUATNLJX-CjHqJIqk.js +0 -21
  460. package/dist/pascal-Q3jJucpw.js +0 -4
  461. package/dist/perl-DkXZIWHF.js +0 -4
  462. package/dist/pie-WTHONI2E-D67gLWtR.js +0 -21
  463. package/dist/pig-DCgEHdsu.js +0 -4
  464. package/dist/powershell-3rK_nRRJ.js +0 -236
  465. package/dist/powershell-Eo2-7MoM.js +0 -4
  466. package/dist/properties-C0IOX8WR.js +0 -4
  467. package/dist/protobuf--lGQUSRO.js +0 -4
  468. package/dist/pug-Cf8AQHMJ.js +0 -5
  469. package/dist/puppet-D7Z3dTJn.js +0 -4
  470. package/dist/python-FHIx_i8Y.js +0 -5
  471. package/dist/q-B7UA1feM.js +0 -4
  472. package/dist/r-Cc9R2A7N.js +0 -4
  473. package/dist/radar-NJJJXTRR-C-AZP_Te.js +0 -21
  474. package/dist/rpm-vhJNlrQ6.js +0 -5
  475. package/dist/ruby-CVluPY0M.js +0 -4
  476. package/dist/sas-A8DL8oy3.js +0 -4
  477. package/dist/scheme-6xHHcSXC.js +0 -4
  478. package/dist/shell-DHN-e5rf.js +0 -4
  479. package/dist/sieve-BuQwLY02.js +0 -4
  480. package/dist/smalltalk-BA4HPg2H.js +0 -4
  481. package/dist/sparql-Bf4yCuy3.js +0 -4
  482. package/dist/stateDiagram-v2-UMBNRL4Z-C_0FUzzk.js +0 -38
  483. package/dist/stex-D-I1cYeE.js +0 -5
  484. package/dist/stylus-BMeped2l.js +0 -4
  485. package/dist/swift-lwEdlZoC.js +0 -4
  486. package/dist/tcl-B03ipeqv.js +0 -4
  487. package/dist/toml-BLgrVtfu.js +0 -4
  488. package/dist/treemap-75Q7IDZK-DTvwfpWt.js +0 -21
  489. package/dist/troff-g6EjN2O2.js +0 -4
  490. package/dist/ttcn-Dzvba8jK.js +0 -4
  491. package/dist/ttcn-cfg-CadG0p1K.js +0 -4
  492. package/dist/turtle-DkXAMWo9.js +0 -4
  493. package/dist/vb-C5dCiel8.js +0 -4
  494. package/dist/vbscript-I4bDEQln.js +0 -4
  495. package/dist/velocity-mt0fDwFH.js +0 -4
  496. package/dist/verilog-Dxq3KJkc.js +0 -4
  497. package/dist/vhdl-Km0QUlV-.js +0 -4
  498. package/dist/webidl-B3lJ2MRL.js +0 -4
  499. package/dist/xquery-CcIxNPEe.js +0 -4
  500. package/dist/yacas-oMa-f-tN.js +0 -4
  501. package/dist/z80-D03Nvn6l.js +0 -4
  502. /package/dist/{apl-DZqo8Elt.js → apl-CEHentF4.js} +0 -0
  503. /package/dist/{asciiarmor-DTzHAIeX.js → asciiarmor-DURYiCS0.js} +0 -0
  504. /package/dist/{asn1-DrAXKsZH.js → asn1-ETAiEoXY.js} +0 -0
  505. /package/dist/{asterisk-oF4U3h48.js → asterisk-DTpbbXPb.js} +0 -0
  506. /package/dist/{brainfuck-BYgLey30.js → brainfuck-BWQep-SA.js} +0 -0
  507. /package/dist/{clojure-Bs2M3OUY.js → clojure-BzFapDkA.js} +0 -0
  508. /package/dist/{cmake-DpI8vxJN.js → cmake-DvlbIC8x.js} +0 -0
  509. /package/dist/{cobol-BQyrWo72.js → cobol-BrEI4cPR.js} +0 -0
  510. /package/dist/{coffeescript-9ke9UHmw.js → coffeescript-B6cvu8mO.js} +0 -0
  511. /package/dist/{common-keywords-BzgeAvH1.js → common-keywords-WqQm7W8t.js} +0 -0
  512. /package/dist/{commonlisp-DghUdrUH.js → commonlisp-BIT8PQqi.js} +0 -0
  513. /package/dist/{crystal-DEf_SInh.js → crystal-B_UcPArT.js} +0 -0
  514. /package/dist/{css-BzTU9lNO.js → css-dHbnt_zl.js} +0 -0
  515. /package/dist/{cypher-a2v0c11S.js → cypher-Dh3FOpL7.js} +0 -0
  516. /package/dist/{d-SAswny-M.js → d-CQD1IHee.js} +0 -0
  517. /package/dist/{diff-OJ-xLXcG.js → diff-CpF_IDx0.js} +0 -0
  518. /package/dist/{dtd-BsUf-rer.js → dtd-DYoNpy6c.js} +0 -0
  519. /package/dist/{duckdb-keywords-B0NOra5o.js → duckdb-keywords-CdIsl9L0.js} +0 -0
  520. /package/dist/{dylan-C0ZYngjn.js → dylan-Bc_2G1E-.js} +0 -0
  521. /package/dist/{ebnf-DF1xx0b_.js → ebnf-jGVT_YpN.js} +0 -0
  522. /package/dist/{ecl-Bsuvoouq.js → ecl-UIU-P-Ar.js} +0 -0
  523. /package/dist/{eiffel-DgfSpLi-.js → eiffel-C90Oyuix.js} +0 -0
  524. /package/dist/{elm-GNxDj-5E.js → elm-B9fWSySj.js} +0 -0
  525. /package/dist/{erlang-Ds3uY1kL.js → erlang-Ccff0UAn.js} +0 -0
  526. /package/dist/{fcl-CqBgSioc.js → fcl-CGR8NxAg.js} +0 -0
  527. /package/dist/{forth-JCaLysGk.js → forth-U1ROGcBY.js} +0 -0
  528. /package/dist/{fortran-Dc2AoKAl.js → fortran-3nOkjDmc.js} +0 -0
  529. /package/dist/{gas-Q4Uz82YW.js → gas-B_4H5FzV.js} +0 -0
  530. /package/dist/{gherkin-Dpxe49sQ.js → gherkin-B0eru5Uz.js} +0 -0
  531. /package/dist/{groovy-D8mTRCu6.js → groovy-dqjtZUVf.js} +0 -0
  532. /package/dist/{haskell-2_8cC4wY.js → haskell-DFzCCQzo.js} +0 -0
  533. /package/dist/{haxe-Bl9zkZlz.js → haxe-Da8Pj5RT.js} +0 -0
  534. /package/dist/{http-DKCqY6yS.js → http-1HACL_9s.js} +0 -0
  535. /package/dist/{idl-Dn-HNfGW.js → idl-D3NXs5iM.js} +0 -0
  536. /package/dist/{jinja2-JjFiAGKk.js → jinja2-gBHAxUdF.js} +0 -0
  537. /package/dist/{julia-R5wne8eu.js → julia-bG-6nJ-_.js} +0 -0
  538. /package/dist/{livescript-DSwokrYj.js → livescript-BlsRC8UJ.js} +0 -0
  539. /package/dist/{lua-CgXfrp2-.js → lua-BbDC0_5w.js} +0 -0
  540. /package/dist/{mathematica-BVli92MR.js → mathematica-YZTe3-PF.js} +0 -0
  541. /package/dist/{mbox-CMFlocdS.js → mbox-CY5idp08.js} +0 -0
  542. /package/dist/{mirc-BkW04Zpc.js → mirc-CbQuFZKk.js} +0 -0
  543. /package/dist/{mllike-DEjvHvNV.js → mllike-DsbHMX-5.js} +0 -0
  544. /package/dist/{modelica-CxDn-oje.js → modelica-CQuvsOQk.js} +0 -0
  545. /package/dist/{mscgen-D78wmE-w.js → mscgen-LIpBP9VR.js} +0 -0
  546. /package/dist/{mumps-Bi0IvPOV.js → mumps-Ct5NXoaG.js} +0 -0
  547. /package/dist/{nginx-DErPZFhX.js → nginx-Dvc62C8z.js} +0 -0
  548. /package/dist/{ntriples-Btyp6wRL.js → ntriples-jVkxWUuv.js} +0 -0
  549. /package/dist/{octave-CZA6-2F8.js → octave-jGOImUB0.js} +0 -0
  550. /package/dist/{oz-Bm6LSNfE.js → oz-Y0FKDMS2.js} +0 -0
  551. /package/dist/{pascal-B4J6a9BH.js → pascal-BaLtPWWB.js} +0 -0
  552. /package/dist/{perl-CzVqxS08.js → perl-CjfE0JLo.js} +0 -0
  553. /package/dist/{pig-Clh03cnn.js → pig-DE4epV99.js} +0 -0
  554. /package/dist/{properties-D7ch1Wyb.js → properties-CLyCG5C-.js} +0 -0
  555. /package/dist/{protobuf-DrkdrMPK.js → protobuf-BjBBs_V4.js} +0 -0
  556. /package/dist/{puppet-BtZG8zdO.js → puppet-ZImLuomA.js} +0 -0
  557. /package/dist/{python-B6FKOVIv.js → python-C9YN71pR.js} +0 -0
  558. /package/dist/{r-Dnvo5-96.js → r-DILmKWWW.js} +0 -0
  559. /package/dist/{rpm-B1DrgfnX.js → rpm-fpIsm1Kr.js} +0 -0
  560. /package/dist/{ruby-CelfUg17.js → ruby-BuiQI41h.js} +0 -0
  561. /package/dist/{sas-DfSQFMWG.js → sas-C76sJ1zF.js} +0 -0
  562. /package/dist/{scheme-BplhaWuO.js → scheme-DHjM-txv.js} +0 -0
  563. /package/dist/{shell-DqU5OS2c.js → shell--7NmGJ9p.js} +0 -0
  564. /package/dist/{sieve-BE4_IyGa.js → sieve-DaPvBv1M.js} +0 -0
  565. /package/dist/{smalltalk-B_WPL8Nx.js → smalltalk-KPvwrjCs.js} +0 -0
  566. /package/dist/{solr-DlJFg7H5.js → solr-PvZUtEDb.js} +0 -0
  567. /package/dist/{sparql-7XIlcOgW.js → sparql-CXSUIQer.js} +0 -0
  568. /package/dist/{spreadsheet-BdZSVwVp.js → spreadsheet-DPJdGPkx.js} +0 -0
  569. /package/dist/{sql-CCrq7lfJ.js → sql-Dp4ZLSIa.js} +0 -0
  570. /package/dist/{stex-BiFc8QAu.js → stex-CeXW4zzk.js} +0 -0
  571. /package/dist/{stylus-DlSH9xpH.js → stylus-BXcmrg9w.js} +0 -0
  572. /package/dist/{swift-e3tMTZgJ.js → swift-DD8I7hKP.js} +0 -0
  573. /package/dist/{tcl-DfZMC20G.js → tcl-B9Lp4GtA.js} +0 -0
  574. /package/dist/{textile-DaSeca5U.js → textile-qdiY0teq.js} +0 -0
  575. /package/dist/{tiddlywiki-dfoiz8pS.js → tiddlywiki-t32lkubq.js} +0 -0
  576. /package/dist/{tiki-yJbQzhma.js → tiki-B0qKrSMl.js} +0 -0
  577. /package/dist/{troff-FN_FrCXR.js → troff-105XJOEu.js} +0 -0
  578. /package/dist/{ttcn-7_i4HlyB.js → ttcn-1_BxDcM8.js} +0 -0
  579. /package/dist/{ttcn-cfg-B46AlBUV.js → ttcn-cfg-Cn_XgXiw.js} +0 -0
  580. /package/dist/{turtle-QQfeFveR.js → turtle-BI6LyfEu.js} +0 -0
  581. /package/dist/{vb-DToPVnLa.js → vb-BecoBfmr.js} +0 -0
  582. /package/dist/{vbscript-CtsNaTz4.js → vbscript-De-zpA4i.js} +0 -0
  583. /package/dist/{velocity-CAoNe6ns.js → velocity-DhlYJTrD.js} +0 -0
  584. /package/dist/{verilog-DrDOMiJq.js → verilog-BDZgxDOW.js} +0 -0
  585. /package/dist/{vhdl-DnO0OEPh.js → vhdl-CV0OKTbp.js} +0 -0
  586. /package/dist/{webidl-Or6d1ZfA.js → webidl-BOM1Fs0O.js} +0 -0
  587. /package/dist/{xquery-CEp_Mcpr.js → xquery-CltP_CGh.js} +0 -0
  588. /package/dist/{yacas-DgnYrSlp.js → yacas-Dch4E2Dg.js} +0 -0
  589. /package/dist/{z80-DlG_kyeB.js → z80-B5Yly27o.js} +0 -0
@@ -3,10 +3,14 @@
3
3
  import type { Completion } from "@codemirror/autocomplete";
4
4
  import { createRoot } from "react-dom/client";
5
5
  import { dbDisplayName } from "@/components/databases/display";
6
+ import { cellDataAtom } from "@/core/cells/cells";
7
+ import type { CellId } from "@/core/cells/ids";
8
+ import { LanguageAdapters } from "@/core/codemirror/language/LanguageAdapters";
6
9
  import { renderDatasourceInfo } from "@/core/codemirror/language/languages/sql/renderers";
7
10
  import {
8
11
  type ConnectionsMap,
9
12
  type DatasetTablesMap,
13
+ dataSourceConnectionsAtom,
10
14
  getTableType,
11
15
  } from "@/core/datasets/data-source-connections";
12
16
  import {
@@ -14,10 +18,11 @@ import {
14
18
  INTERNAL_SQL_ENGINES,
15
19
  } from "@/core/datasets/engines";
16
20
  import type { DataSourceConnection, DataTable } from "@/core/kernel/messages";
21
+ import { store } from "@/core/state/jotai";
17
22
  import type { AIContextItem } from "../registry";
18
23
  import { AIContextProvider } from "../registry";
19
24
  import { contextToXml } from "../utils";
20
- import { Boosts } from "./common";
25
+ import { Boosts, Sections } from "./common";
21
26
 
22
27
  type NamedDatasource = Omit<
23
28
  DataSourceConnection,
@@ -37,10 +42,12 @@ export interface DatasourceContextItem extends AIContextItem {
37
42
  };
38
43
  }
39
44
 
45
+ const CONTEXT_TYPE = "datasource";
46
+
40
47
  export class DatasourceContextProvider extends AIContextProvider<DatasourceContextItem> {
41
48
  readonly title = "Datasource";
42
49
  readonly mentionPrefix = "@";
43
- readonly contextType = "datasource";
50
+ readonly contextType = CONTEXT_TYPE;
44
51
  private connectionsMap: ConnectionsMap;
45
52
  private dataframes: DataTable[];
46
53
 
@@ -53,24 +60,35 @@ export class DatasourceContextProvider extends AIContextProvider<DatasourceConte
53
60
  }
54
61
 
55
62
  getItems(): DatasourceContextItem[] {
56
- return [...this.connectionsMap.values()].map((connection) => {
57
- let description = "Database schema.";
58
- const data: DatasourceContextItem["data"] = {
59
- connection: connection,
60
- };
61
- if (INTERNAL_SQL_ENGINES.has(connection.name)) {
62
- data.tables = this.dataframes;
63
- description = "Database schema and the dataframes that can be queried";
64
- }
65
-
66
- return {
67
- uri: this.asURI(connection.name),
68
- name: connection.name,
69
- description: description,
70
- type: this.contextType,
71
- data: data,
72
- };
73
- });
63
+ return [...this.connectionsMap.values()]
64
+ .map((connection): DatasourceContextItem | null => {
65
+ let description = "Database schema.";
66
+ const data: DatasourceContextItem["data"] = {
67
+ connection: connection,
68
+ };
69
+
70
+ if (INTERNAL_SQL_ENGINES.has(connection.name)) {
71
+ data.tables = this.dataframes;
72
+ description =
73
+ "Database schema and the dataframes that can be queried";
74
+ }
75
+
76
+ // Hide empty datasources
77
+ const hasNoTables =
78
+ connection.databases.length === 0 && (data.tables?.length ?? 0) === 0;
79
+ if (hasNoTables) {
80
+ return null;
81
+ }
82
+
83
+ return {
84
+ uri: this.asURI(connection.name),
85
+ name: connection.name,
86
+ description: description,
87
+ type: this.contextType,
88
+ data: data,
89
+ };
90
+ })
91
+ .filter(Boolean);
74
92
  }
75
93
 
76
94
  formatContext(item: DatasourceContextItem): string {
@@ -115,7 +133,7 @@ export class DatasourceContextProvider extends AIContextProvider<DatasourceConte
115
133
  detail: dbDisplayName(dataConnection.dialect),
116
134
  boost: Boosts.MEDIUM,
117
135
  type: this.contextType,
118
- section: "Data Sources",
136
+ section: Sections.DATA_SOURCES,
119
137
  info: () => {
120
138
  const infoContainer = document.createElement("div");
121
139
  infoContainer.classList.add("mo-cm-tooltip", "docs-documentation");
@@ -129,3 +147,20 @@ export class DatasourceContextProvider extends AIContextProvider<DatasourceConte
129
147
  };
130
148
  }
131
149
  }
150
+
151
+ export function getDatasourceContext(cellId: CellId): string | null {
152
+ const cellData = store.get(cellDataAtom(cellId));
153
+ const code = cellData?.code;
154
+ if (!code || code.trim() === "") {
155
+ return null;
156
+ }
157
+
158
+ const [_sqlStatement, _, metadata] = LanguageAdapters.sql.transformIn(code);
159
+ const datasourceSchema = store
160
+ .get(dataSourceConnectionsAtom)
161
+ .connectionsMap.get(metadata.engine);
162
+ if (datasourceSchema) {
163
+ return `@${CONTEXT_TYPE}://${datasourceSchema.name}`;
164
+ }
165
+ return null;
166
+ }
@@ -9,7 +9,7 @@ import { logNever } from "@/utils/assertNever";
9
9
  import { PluralWord } from "@/utils/pluralize";
10
10
  import { type AIContextItem, AIContextProvider } from "../registry";
11
11
  import { contextToXml } from "../utils";
12
- import { Boosts } from "./common";
12
+ import { Sections } from "./common";
13
13
 
14
14
  export interface ErrorContextItem extends AIContextItem {
15
15
  type: "error";
@@ -111,10 +111,9 @@ export class ErrorContextProvider extends AIContextProvider<ErrorContextItem> {
111
111
  label: "@Errors",
112
112
  displayLabel: "Errors",
113
113
  detail: `${item.data.errors.length} ${errorsTxt.pluralize(item.data.errors.length)}`,
114
- boost: Boosts.ERROR,
115
114
  type: "error",
116
115
  apply: "@Errors",
117
- section: "Errors",
116
+ section: Sections.ERROR,
118
117
  info: () => {
119
118
  const infoContainer = document.createElement("div");
120
119
  infoContainer.classList.add(
@@ -150,7 +149,7 @@ export class ErrorContextProvider extends AIContextProvider<ErrorContextItem> {
150
149
  return {
151
150
  label: "Error",
152
151
  displayLabel: "Error",
153
- boost: Boosts.ERROR,
152
+ section: Sections.ERROR,
154
153
  };
155
154
  }
156
155
 
@@ -15,7 +15,7 @@ import { type Base64String, base64ToDataURL } from "@/utils/json/base64";
15
15
  import { Logger } from "@/utils/Logger";
16
16
  import { type AIContextItem, AIContextProvider } from "../registry";
17
17
  import { contextToXml } from "../utils";
18
- import { Boosts } from "./common";
18
+ import { Boosts, Sections } from "./common";
19
19
  export interface FileContextItem extends AIContextItem {
20
20
  type: "file";
21
21
  data: {
@@ -190,7 +190,7 @@ export class FileContextProvider extends AIContextProvider<FileContextItem> {
190
190
  return {
191
191
  ...this.createBasicCompletion(item),
192
192
  type: "file",
193
- section: "File",
193
+ section: Sections.FILE,
194
194
  boost: data.isDirectory ? Boosts.MEDIUM : Boosts.LOW,
195
195
  detail: data.path,
196
196
  displayLabel: `${icon} ${name}`,
@@ -9,7 +9,7 @@ import type { DataTable } from "@/core/kernel/messages";
9
9
  import type { AIContextItem } from "../registry";
10
10
  import { AIContextProvider } from "../registry";
11
11
  import { contextToXml } from "../utils";
12
- import { Boosts } from "./common";
12
+ import { Boosts, Sections } from "./common";
13
13
 
14
14
  export interface TableContextItem extends AIContextItem {
15
15
  type: "data";
@@ -38,21 +38,46 @@ export class TableContextProvider extends AIContextProvider<TableContextItem> {
38
38
 
39
39
  formatContext(item: TableContextItem): string {
40
40
  const { data } = item;
41
- const { columns, source, num_rows, num_columns, name } = data;
41
+ const { columns, source, num_rows, num_columns, name, variable_name } =
42
+ data;
43
+
44
+ // Build shape information
42
45
  const shape = [
43
- num_rows == null ? undefined : `${num_rows} rows`,
44
- num_columns == null ? undefined : `${num_columns} columns`,
46
+ num_rows != null ? `${num_rows} rows` : undefined,
47
+ num_columns != null ? `${num_columns} columns` : undefined,
45
48
  ]
46
49
  .filter(Boolean)
47
50
  .join(", ");
48
51
 
49
52
  let details = "";
53
+
54
+ // Add shape information
50
55
  if (shape) {
51
- details += `\nShape: ${shape}`;
56
+ details += `Shape: ${shape}\n`;
57
+ }
58
+
59
+ // Add variable name if available
60
+ if (variable_name) {
61
+ details += `Variable: ${variable_name}\n`;
52
62
  }
53
63
 
64
+ // Add column information with sample values
54
65
  if (columns && columns.length > 0) {
55
- details += `\nColumns:\n${columns.map((col) => ` - ${col.name}: ${col.type}`).join("\n")}`;
66
+ details += "Columns:\n";
67
+ for (const col of columns) {
68
+ let columnInfo = ` ${col.name} (${col.type})`;
69
+
70
+ // Add sample values if available
71
+ if (col.sample_values && col.sample_values.length > 0) {
72
+ const samples = col.sample_values
73
+ .slice(0, 3) // Limit to first 3 samples
74
+ .map((val) => (val === null ? "null" : String(val)))
75
+ .join(", ");
76
+ columnInfo += ` - samples: [${samples}]`;
77
+ }
78
+
79
+ details += `${columnInfo}\n`;
80
+ }
56
81
  }
57
82
 
58
83
  return contextToXml({
@@ -61,7 +86,7 @@ export class TableContextProvider extends AIContextProvider<TableContextItem> {
61
86
  name: name,
62
87
  source: source ?? "unknown",
63
88
  },
64
- details: details,
89
+ details: details.trim(),
65
90
  });
66
91
  }
67
92
 
@@ -78,7 +103,10 @@ export class TableContextProvider extends AIContextProvider<TableContextItem> {
78
103
  : Boosts.REMOTE_TABLE,
79
104
  type: getTableType(table),
80
105
  apply: `@${tableName}`,
81
- section: getTableType(table) === "dataframe" ? "Dataframe" : "Table",
106
+ section: {
107
+ name: getTableType(table) === "dataframe" ? "Dataframe" : "Table",
108
+ rank: Sections.TABLE.rank,
109
+ },
82
110
  info: () => this.createTableInfoElement(tableName, table),
83
111
  };
84
112
  }
@@ -6,7 +6,7 @@ import type { DatasetTablesMap } from "@/core/datasets/data-source-connections";
6
6
  import type { Variable, Variables } from "@/core/variables/types";
7
7
  import { type AIContextItem, AIContextProvider } from "../registry";
8
8
  import { contextToXml } from "../utils";
9
- import { Boosts } from "./common";
9
+ import { Sections } from "./common";
10
10
 
11
11
  export interface VariableContextItem extends AIContextItem {
12
12
  type: "variable";
@@ -58,9 +58,8 @@ export class VariableContextProvider extends AIContextProvider<VariableContextIt
58
58
  label: `@${variable.name}`,
59
59
  displayLabel: variable.name,
60
60
  detail: variable.dataType ?? "",
61
- boost: Boosts.VARIABLE,
62
61
  type: this.contextType,
63
- section: "Variable",
62
+ section: Sections.VARIABLE,
64
63
  info: () => {
65
64
  return createVariableInfoElement(variable);
66
65
  },
@@ -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);
@@ -12,7 +12,7 @@ import {
12
12
  it,
13
13
  vi,
14
14
  } from "vitest";
15
- import type { CellHandle } from "@/components/editor/Cell";
15
+ import type { CellHandle } from "@/components/editor/notebook-cell";
16
16
  import { CellId } from "@/core/cells/ids";
17
17
  import { foldAllBulk, unfoldAllBulk } from "@/core/codemirror/editing/commands";
18
18
  import { adaptiveLanguageConfiguration } from "@/core/codemirror/language/extension";
@@ -2094,9 +2094,9 @@ describe("cell reducer", () => {
2094
2094
  `);
2095
2095
  });
2096
2096
 
2097
- it("can create and update a setup cell", () => {
2097
+ it("can create and noop-update a setup cell", () => {
2098
2098
  // Create the setup cell
2099
- actions.upsertSetupCell({ code: "# Setup code" });
2099
+ actions.addSetupCellIfDoesntExist({ code: "# Setup code" });
2100
2100
 
2101
2101
  // Check that setup cell was created
2102
2102
  expect(state.cellData[SETUP_CELL_ID].id).toBe(SETUP_CELL_ID);
@@ -2106,17 +2106,17 @@ describe("cell reducer", () => {
2106
2106
  expect(state.cellIds.inOrderIds).toContain(SETUP_CELL_ID);
2107
2107
 
2108
2108
  // Update the setup cell
2109
- actions.upsertSetupCell({ code: "# Updated setup code" });
2109
+ actions.addSetupCellIfDoesntExist({ code: "# Updated setup code" });
2110
2110
 
2111
2111
  // Check that the same setup cell was updated, not duplicated
2112
- expect(state.cellData[SETUP_CELL_ID].code).toBe("# Updated setup code");
2112
+ expect(state.cellData[SETUP_CELL_ID].code).toBe("# Setup code");
2113
2113
  expect(state.cellData[SETUP_CELL_ID].edited).toBe(true);
2114
2114
  expect(state.cellIds.inOrderIds).toContain(SETUP_CELL_ID);
2115
2115
  });
2116
2116
 
2117
2117
  it("can delete and undelete the setup cell", () => {
2118
2118
  // Create the setup cell
2119
- actions.upsertSetupCell({ code: "# Setup code" });
2119
+ actions.addSetupCellIfDoesntExist({ code: "# Setup code" });
2120
2120
 
2121
2121
  // Check that setup cell was created
2122
2122
  expect(state.cellData[SETUP_CELL_ID].id).toBe(SETUP_CELL_ID);