@marimo-team/islands 0.25.1-dev3 → 0.25.1-dev31

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 (270) hide show
  1. package/dist/{ConnectedDataExplorerComponent-KVhjDMSe.js → ConnectedDataExplorerComponent-CwMXfDQR.js} +3 -3
  2. package/dist/{ErrorBoundary-Darui-8r.js → ErrorBoundary-C1YoBc7T.js} +1 -1
  3. package/dist/{ImageComparisonComponent-Dlm5aWnH.js → ImageComparisonComponent-Cpfz30OZ.js} +51 -52
  4. package/dist/{abnfDiagram-VCTEODGH-CpN0FRda.js → abnfDiagram-VCTEODGH-AFhOQTt8.js} +3 -3
  5. package/dist/{architectureDiagram-5GKGNRK7-DDyj5SRB.js → architectureDiagram-5GKGNRK7-BngksAAQ.js} +5 -5
  6. package/dist/{blockDiagram-I7D4REHJ-BbXEXJRu.js → blockDiagram-I7D4REHJ-CvBmppdy.js} +9 -9
  7. package/dist/{c4Diagram-7LVT6UL2-DcLsbQmR.js → c4Diagram-7LVT6UL2-EceL4_jH.js} +7 -7
  8. package/dist/{cells-B5-y5EY3.js → cells-Cksce8br.js} +2 -2
  9. package/dist/{channel-B5XnTarr.js → channel-z7HZXHwv.js} +1 -1
  10. package/dist/{chat-ui-HJZsTl7o.js → chat-ui-ruucqBTA.js} +4 -4
  11. package/dist/{chunk-4HAMMTFA-D2qv8E0X.js → chunk-4HAMMTFA-BPTTOOC5.js} +5 -5
  12. package/dist/{chunk-75Z2AOVW-5_HsvXwr.js → chunk-75Z2AOVW-C4AOleKf.js} +1 -1
  13. package/dist/{chunk-DU6HZSFF-BUgAHvnM.js → chunk-DU6HZSFF-1TwWR6gh.js} +1 -1
  14. package/dist/{chunk-F27PBJKO-DHmYWZXr.js → chunk-F27PBJKO-DMI1PBe4.js} +1 -1
  15. package/dist/{chunk-GMAD6QVW-Czynz8aA.js → chunk-GMAD6QVW-vStrMz2P.js} +3 -3
  16. package/dist/{chunk-GVQU2GXP-yQEdulRS.js → chunk-GVQU2GXP-2HwWgs4u.js} +2 -2
  17. package/dist/{chunk-IMKFNOWR-BfwTebD0.js → chunk-IMKFNOWR-UOVZuZVn.js} +5 -5
  18. package/dist/{chunk-L3NEJ4N5-DwRWnDDK.js → chunk-L3NEJ4N5-RhC7i0I2.js} +5 -5
  19. package/dist/{chunk-OSK3NFVY-BBKU_Ign.js → chunk-OSK3NFVY-CZV09N-U.js} +6 -6
  20. package/dist/{chunk-P2QGCYS3-C0iGU29N.js → chunk-P2QGCYS3-0TAWai9C.js} +1 -1
  21. package/dist/{chunk-POPQ4Y6H-BCbS3Ozc.js → chunk-POPQ4Y6H-Cc3_56GX.js} +1 -1
  22. package/dist/{chunk-PWAF6VOD-CTFCL0jI.js → chunk-PWAF6VOD-lNxB9k8z.js} +1 -1
  23. package/dist/{chunk-SHT3W25Y-BspJEJ5H.js → chunk-SHT3W25Y-CrEPyWy1.js} +7 -7
  24. package/dist/{chunk-SVP7TREG-DX3rFNTe.js → chunk-SVP7TREG-uIyyySp6.js} +2 -2
  25. package/dist/{chunk-TICWLB2K-fVF7Uujg.js → chunk-TICWLB2K-DdXM3eg6.js} +5 -5
  26. package/dist/classDiagram-ZZMXUADV-BiATbBE4.js +30 -0
  27. package/dist/classDiagram-v2-VYDZK3BY-JnH97GYw.js +30 -0
  28. package/dist/{code-visibility-XNQy26fz.js → code-visibility-DsnycPAk.js} +2 -2
  29. package/dist/{common-Dv0F_kZT.js → common-CECP1OPr.js} +13 -13
  30. package/dist/{cynefinDiagram-5FMLGOSQ-CFQrqzSX.js → cynefinDiagram-5FMLGOSQ-zknaAsGy.js} +3 -3
  31. package/dist/{dagre-GXQ25YYZ-xHNAUTyG.js → dagre-GXQ25YYZ-BhMOoMGJ.js} +10 -10
  32. package/dist/{data-grid-overlay-editor-DWIhnG5k.js → data-grid-overlay-editor-DUdHcA0T.js} +1 -1
  33. package/dist/{diagram-S7CK7UJ4-Bt1rPbAx.js → diagram-S7CK7UJ4-V5-Z-EDY.js} +4 -4
  34. package/dist/{diagram-UQ7AKVKN-D1sq5FoZ.js → diagram-UQ7AKVKN-qw8AjDal.js} +3 -3
  35. package/dist/{diagram-VSXAHHWV-BKpmG23x.js → diagram-VSXAHHWV-CR7BJygZ.js} +2 -2
  36. package/dist/{diagram-VX7I27RA-BMwGFVD6.js → diagram-VX7I27RA-DfuqFb1E.js} +5 -5
  37. package/dist/{diagram-Z3DM3KII--KLDR9Pl.js → diagram-Z3DM3KII-DpWwlYZB.js} +3 -3
  38. package/dist/{dist-BaHjhkpZ.js → dist-CcyKTBTF.js} +1 -1
  39. package/dist/{ebnfDiagram-PWID7BFC-WnG4cvSQ.js → ebnfDiagram-PWID7BFC-C20OnNMZ.js} +3 -3
  40. package/dist/{erDiagram-RLTQ6QDP-DhzKiYHc.js → erDiagram-RLTQ6QDP-DBXLWO9v.js} +12 -12
  41. package/dist/{error-entries-Bkbpx0T0.js → error-entries-CvCFdpY2.js} +1 -1
  42. package/dist/{feedback-button-CxEesO_y.js → feedback-button-C2nIVez1.js} +4 -4
  43. package/dist/flowDiagram-HODETNUW-DL52nMkt.js +16 -0
  44. package/dist/{formats-C8rLgZT9.js → formats-Cl_67ghI.js} +1 -1
  45. package/dist/{ganttDiagram-EL5Y4UJY-DbzEBLbl.js → ganttDiagram-EL5Y4UJY-cRRaDt88.js} +2 -2
  46. package/dist/{gitGraphDiagram-WWUBYQGX-BMf0iKi1.js → gitGraphDiagram-WWUBYQGX-Pox5k9-Y.js} +2 -2
  47. package/dist/{glide-data-editor-BlF9ryAS.js → glide-data-editor-BFA_zCBA.js} +3 -3
  48. package/dist/{globals-BJZNFyuG.js → globals-Coud3OTE.js} +1 -1
  49. package/dist/{html-to-image-BAgJOlSW.js → html-to-image-CcfkLMrx.js} +2 -2
  50. package/dist/{infoDiagram-27XIBGKW-BagtCX_5.js → infoDiagram-27XIBGKW-ntpxMfrq.js} +2 -2
  51. package/dist/{ishikawaDiagram-5VMMS53U-DByDehYy.js → ishikawaDiagram-5VMMS53U-BllIlHE5.js} +3 -3
  52. package/dist/{journeyDiagram-3NMN7TZE-D2LcKDUO.js → journeyDiagram-3NMN7TZE-EPJDPlt0.js} +2 -2
  53. package/dist/{kanban-definition-UXKFOSKX-BxwkbBI_.js → kanban-definition-UXKFOSKX-GYtNMjtS.js} +9 -9
  54. package/dist/{katex-C6D4cX_N.js → katex-BNCmKUol.js} +983 -1120
  55. package/dist/{loader-D2W4oM-3.js → loader-DEZSzvma.js} +253 -248
  56. package/dist/main.js +57 -55
  57. package/dist/{mermaid-DPNuhemn.js → mermaid-Dnzoxjt1.js} +49 -49
  58. package/dist/{mhchem-DWCF06w9.js → mhchem-BEc7A1or.js} +1 -1
  59. package/dist/{mindmap-definition-YA3MSWOX-Cgvojw3y.js → mindmap-definition-YA3MSWOX-Cth76xgH.js} +11 -11
  60. package/dist/{number-overlay-editor-B2xhX-SU.js → number-overlay-editor-BqXXyn5W.js} +1 -1
  61. package/dist/{pegDiagram-XKGWAZYB-DahHhYyN.js → pegDiagram-XKGWAZYB-Cu4uOXii.js} +3 -3
  62. package/dist/{pieDiagram-E7YTZNPT-CCtX0oCK.js → pieDiagram-E7YTZNPT-Bh3eDa9s.js} +3 -3
  63. package/dist/{process-output-zDX4jbhd.js → process-output-C6apL85F.js} +2 -2
  64. package/dist/{quadrantDiagram-AXDQQJYC-DftINo6g.js → quadrantDiagram-AXDQQJYC--kqzFC3w.js} +1 -1
  65. package/dist/{railroadDiagram-O6MQD6OU-Du5NsPUb.js → railroadDiagram-O6MQD6OU-DG-M6Rnc.js} +3 -3
  66. package/dist/{react-vega-5AcMW8gG.js → react-vega-ewj7q_U5.js} +1 -1
  67. package/dist/{requirementDiagram-BXWQKSXE-0pmmxL6_.js → requirementDiagram-BXWQKSXE-DCwsThh0.js} +11 -11
  68. package/dist/{reveal-component-eMtW_LdF.js → reveal-component-_6L78d9I.js} +3 -3
  69. package/dist/{sankeyDiagram-P5KCCOFB-CDKR5TJH.js → sankeyDiagram-P5KCCOFB-BdzhT0BM.js} +1 -1
  70. package/dist/{sequenceDiagram-WJ2MYXX4-DB-ChWwU.js → sequenceDiagram-WJ2MYXX4-CbXB1_PU.js} +4 -4
  71. package/dist/{stateDiagram-D77RDMKH-orN6AwMx.js → stateDiagram-D77RDMKH-A-Zf3Sb2.js} +13 -13
  72. package/dist/stateDiagram-v2-MP3YSRHH-D9YMnUGx.js +30 -0
  73. package/dist/style.css +1 -1
  74. package/dist/{swimlanes-42K2YHIH-BkSDcqDT.js → swimlanes-42K2YHIH-B_pMf0J4.js} +10 -10
  75. package/dist/swimlanesDiagram-VR7AAH4N-Ctgy-yGP.js +30 -0
  76. package/dist/{timeline-definition-24CTP7MA-BuqJUIRZ.js → timeline-definition-24CTP7MA-DTXFjTTM.js} +3 -3
  77. package/dist/{vega-component-CNf5gcrm.js → vega-component-tFOzgarw.js} +4 -4
  78. package/dist/{vega-embed-container-CbnTccZi.js → vega-embed-container-sSR5hAsy.js} +2 -2
  79. package/dist/{vega-loader.browser-D95WfUcj.js → vega-loader.browser-DNST6uVf.js} +2 -2
  80. package/dist/{vennDiagram-4TSXK5OY-CTUlJ2PK.js → vennDiagram-4TSXK5OY-BPHjZo0R.js} +3 -3
  81. package/dist/{wardleyDiagram-VM6X3IG4-3evLUb0M.js → wardleyDiagram-VM6X3IG4-6fTLYBuD.js} +3 -3
  82. package/dist/{xychartDiagram-S5SC5T6Z-DL2E3K8-.js → xychartDiagram-S5SC5T6Z-BYjwjrzE.js} +5 -5
  83. package/package.json +1 -2
  84. package/src/__mocks__/common.ts +3 -3
  85. package/src/__tests__/CellStatus.test.tsx +1 -1
  86. package/src/__tests__/setup.ts +7 -7
  87. package/src/components/app-config/ai-config.tsx +2 -0
  88. package/src/components/app-config/optional-features.tsx +1 -1
  89. package/src/components/chat/chat-panel.tsx +19 -8
  90. package/src/components/data-table/charts/__tests__/chart-panel.test.tsx +286 -0
  91. package/src/components/data-table/charts/charts.tsx +26 -13
  92. package/src/components/data-table/column-summary/chart-spec-model.tsx +4 -4
  93. package/src/components/dependency-graph/elements.ts +2 -2
  94. package/src/components/editor/__tests__/package-alert.test.tsx +140 -0
  95. package/src/components/editor/actions/__tests__/pair-with-agent.test.tsx +107 -0
  96. package/src/components/editor/actions/pair-with-agent.tsx +119 -0
  97. package/src/components/editor/actions/useNotebookActions.tsx +2 -1
  98. package/src/components/editor/ai/add-cell-with-ai.tsx +2 -0
  99. package/src/components/editor/ai/staged-cell-submission.ts +2 -2
  100. package/src/components/editor/ai/transport/chat-transport.tsx +1 -1
  101. package/src/components/editor/chrome/components/contribute-snippet-button.tsx +6 -1
  102. package/src/components/editor/connections/database/as-code.ts +44 -44
  103. package/src/components/editor/connections/storage/as-code.ts +3 -3
  104. package/src/components/editor/file-tree/requesting-tree.tsx +16 -13
  105. package/src/components/editor/navigation/clipboard.ts +2 -2
  106. package/src/components/editor/notebook-cell.tsx +2 -2
  107. package/src/components/editor/output/MarimoTracebackOutput.tsx +1 -1
  108. package/src/components/editor/output/VideoOutput.tsx +1 -1
  109. package/src/components/editor/output/ansi-reduce.ts +21 -17
  110. package/src/components/editor/output/console/text-rendering.tsx +3 -1
  111. package/src/components/editor/package-alert.tsx +20 -7
  112. package/src/components/home/components.tsx +1 -0
  113. package/src/components/pages/run-page.tsx +1 -0
  114. package/src/components/slides/__tests__/minimap-actions.test.tsx +7 -7
  115. package/src/components/slides/__tests__/minimap.test.ts +12 -12
  116. package/src/components/slides/__tests__/slide-scroll-hint.test.tsx +8 -8
  117. package/src/components/static-html/share-modal.tsx +2 -1
  118. package/src/components/static-html/static-banner.tsx +2 -2
  119. package/src/components/ui/links.tsx +6 -1
  120. package/src/components/ui/typography.tsx +16 -8
  121. package/src/core/ai/context/__tests__/registry.test.ts +31 -28
  122. package/src/core/ai/context/providers/cell-output.ts +8 -8
  123. package/src/core/ai/context/providers/datasource.ts +10 -7
  124. package/src/core/ai/context/providers/error.ts +7 -7
  125. package/src/core/ai/context/providers/file.ts +8 -8
  126. package/src/core/ai/context/providers/tables.ts +7 -7
  127. package/src/core/ai/context/providers/variable.ts +7 -7
  128. package/src/core/ai/context/registry.ts +18 -18
  129. package/src/core/ai/ids/ids.ts +5 -5
  130. package/src/core/ai/model-registry.ts +12 -9
  131. package/src/core/ai/staged-cells.ts +6 -6
  132. package/src/core/ai/tools/base.ts +6 -6
  133. package/src/core/ai/tools/edit-notebook-tool.ts +6 -6
  134. package/src/core/ai/tools/registry.ts +4 -4
  135. package/src/core/ai/tools/run-cells-tool.ts +7 -7
  136. package/src/core/ai/tools/sample-tool.ts +6 -6
  137. package/src/core/codemirror/cells/debugger-decorations.ts +13 -7
  138. package/src/core/codemirror/cells/line-timing-decorations.ts +9 -9
  139. package/src/core/codemirror/cells/traceback-decorations.ts +7 -4
  140. package/src/core/codemirror/code-lens/extension.ts +13 -13
  141. package/src/core/codemirror/copilot/__tests__/language-server.test.ts +6 -6
  142. package/src/core/codemirror/copilot/__tests__/transport.test.ts +12 -12
  143. package/src/core/codemirror/copilot/language-server.ts +13 -13
  144. package/src/core/codemirror/copilot/transport.ts +1 -1
  145. package/src/core/codemirror/find-replace/search-highlight.ts +5 -5
  146. package/src/core/codemirror/go-to-definition/underline.ts +3 -3
  147. package/src/core/codemirror/keymaps/vim.ts +3 -3
  148. package/src/core/codemirror/language/languages/markdown.ts +8 -8
  149. package/src/core/codemirror/language/languages/python.ts +7 -7
  150. package/src/core/codemirror/language/languages/sql/completion-builder.ts +5 -5
  151. package/src/core/codemirror/language/languages/sql/completion-store.ts +4 -4
  152. package/src/core/codemirror/language/languages/sql/sql.ts +21 -21
  153. package/src/core/codemirror/lsp/__tests__/transports.test.ts +10 -10
  154. package/src/core/codemirror/lsp/federated-lsp.ts +29 -27
  155. package/src/core/codemirror/lsp/notebook-lsp.ts +21 -21
  156. package/src/core/codemirror/misc/__tests__/dnd.test.ts +10 -10
  157. package/src/core/codemirror/misc/__tests__/paste.test.ts +7 -4
  158. package/src/core/codemirror/reactive-references/extension.ts +3 -3
  159. package/src/core/codemirror/rtc/loro/awareness.ts +12 -12
  160. package/src/core/codemirror/rtc/loro/sync.ts +5 -5
  161. package/src/core/codemirror/vim/cursor-visibility.ts +3 -3
  162. package/src/core/dom/ui-element.ts +5 -5
  163. package/src/core/dom/uiregistry.ts +10 -10
  164. package/src/core/hotkeys/hotkeys.ts +9 -9
  165. package/src/core/islands/__tests__/bridge.test.ts +4 -4
  166. package/src/core/islands/__tests__/test-utils.tsx +4 -4
  167. package/src/core/islands/bridge.ts +85 -82
  168. package/src/core/islands/components/web-components.tsx +7 -7
  169. package/src/core/islands/worker/__tests__/controller.test.ts +1 -1
  170. package/src/core/islands/worker/controller.ts +6 -3
  171. package/src/core/islands/worker-factory.ts +2 -2
  172. package/src/core/kernel/RuntimeState.ts +4 -4
  173. package/src/core/lsp/__tests__/transport.test.ts +19 -19
  174. package/src/core/lsp/transport.ts +5 -5
  175. package/src/core/network/CachingRequestRegistry.ts +2 -2
  176. package/src/core/network/DeferredRequestRegistry.ts +4 -4
  177. package/src/core/runtime/runtime.ts +25 -20
  178. package/src/core/static/virtual-file-tracker.ts +5 -5
  179. package/src/core/wasm/__tests__/bridge.test.ts +2 -2
  180. package/src/core/wasm/bridge.ts +130 -126
  181. package/src/core/wasm/router.ts +5 -5
  182. package/src/core/wasm/store.ts +4 -4
  183. package/src/core/wasm/worker/bootstrap.ts +8 -5
  184. package/src/core/wasm/worker/message-buffer.ts +3 -3
  185. package/src/core/websocket/transports/__tests__/ws.test.ts +8 -8
  186. package/src/core/websocket/transports/basic.ts +15 -8
  187. package/src/core/websocket/transports/sse.ts +7 -7
  188. package/src/core/websocket/transports/transport.ts +3 -3
  189. package/src/core/websocket/transports/ws.ts +9 -7
  190. package/src/css/globals.css +18 -21
  191. package/src/css/katex.min.css +260 -241
  192. package/src/hooks/__tests__/useOverflowDetection.test.tsx +5 -5
  193. package/src/hooks/__tests__/useResizeObserver.test.tsx +12 -12
  194. package/src/plugins/core/registerReactComponent.tsx +5 -5
  195. package/src/plugins/core/sidebar-element.tsx +2 -2
  196. package/src/plugins/impl/ButtonPlugin.tsx +3 -3
  197. package/src/plugins/impl/CheckboxPlugin.tsx +3 -3
  198. package/src/plugins/impl/CodeEditorPlugin.tsx +3 -3
  199. package/src/plugins/impl/DatePickerPlugin.tsx +3 -3
  200. package/src/plugins/impl/DateRangePlugin.tsx +3 -3
  201. package/src/plugins/impl/DateTimePickerPlugin.tsx +3 -3
  202. package/src/plugins/impl/DictPlugin.tsx +3 -3
  203. package/src/plugins/impl/DropdownPlugin.tsx +3 -3
  204. package/src/plugins/impl/FileUploadPlugin.tsx +3 -3
  205. package/src/plugins/impl/MatrixPlugin.tsx +4 -4
  206. package/src/plugins/impl/MicrophonePlugin.tsx +3 -3
  207. package/src/plugins/impl/MultiselectPlugin.tsx +3 -3
  208. package/src/plugins/impl/NumberPlugin.tsx +3 -3
  209. package/src/plugins/impl/RadioPlugin.tsx +3 -3
  210. package/src/plugins/impl/RangeSliderPlugin.tsx +3 -3
  211. package/src/plugins/impl/RefreshPlugin.tsx +3 -3
  212. package/src/plugins/impl/SliderPlugin.tsx +3 -3
  213. package/src/plugins/impl/SwitchPlugin.tsx +3 -3
  214. package/src/plugins/impl/TabsPlugin.tsx +3 -3
  215. package/src/plugins/impl/TextAreaPlugin.tsx +3 -3
  216. package/src/plugins/impl/TextInputPlugin.tsx +3 -3
  217. package/src/plugins/impl/__tests__/MatrixPlugin.test.tsx +2 -2
  218. package/src/plugins/impl/anywidget/model.ts +10 -10
  219. package/src/plugins/impl/anywidget/registry.ts +12 -9
  220. package/src/plugins/impl/anywidget/runtime.ts +11 -9
  221. package/src/plugins/impl/anywidget/widget-binding.ts +6 -6
  222. package/src/plugins/impl/image-comparison/ImageComparisonComponent.tsx +7 -6
  223. package/src/plugins/impl/matplotlib/MatplotlibPlugin.tsx +3 -3
  224. package/src/plugins/impl/matplotlib/__tests__/matplotlib-renderer.test.ts +2 -2
  225. package/src/plugins/impl/matplotlib/matplotlib-renderer.ts +2 -2
  226. package/src/plugins/impl/mpl-interactive/mpl-websocket-shim.ts +10 -10
  227. package/src/plugins/impl/panel/utils.ts +5 -5
  228. package/src/plugins/impl/plotly/PlotlyPlugin.tsx +3 -3
  229. package/src/plugins/impl/vega/VegaPlugin.tsx +3 -3
  230. package/src/plugins/impl/vega/__tests__/use-vega-container-remeasure.test.ts +7 -7
  231. package/src/plugins/impl/vega/__tests__/utils.test.ts +16 -1
  232. package/src/plugins/impl/vega/__tests__/vega.test.ts +37 -0
  233. package/src/plugins/impl/vega/loader.ts +23 -1
  234. package/src/plugins/impl/vega/utils.ts +5 -4
  235. package/src/plugins/layout/AccordionPlugin.tsx +3 -3
  236. package/src/plugins/layout/CalloutPlugin.tsx +3 -3
  237. package/src/plugins/layout/ImageComparisonPlugin.tsx +5 -3
  238. package/src/plugins/layout/JsonOutputPlugin.tsx +3 -3
  239. package/src/plugins/layout/MimeRenderPlugin.tsx +3 -3
  240. package/src/plugins/layout/NavigationMenuPlugin.tsx +3 -3
  241. package/src/plugins/layout/OutlinePlugin.tsx +3 -3
  242. package/src/plugins/layout/ProgressPlugin.tsx +3 -3
  243. package/src/plugins/layout/RoutesPlugin.tsx +6 -8
  244. package/src/plugins/layout/StatPlugin.tsx +3 -3
  245. package/src/plugins/layout/TexPlugin.tsx +3 -3
  246. package/src/plugins/layout/carousel/CarouselPlugin.tsx +4 -4
  247. package/src/plugins/layout/mermaid/MermaidPlugin.tsx +3 -3
  248. package/src/utils/Deferred.ts +6 -6
  249. package/src/utils/async-capture-tracker.ts +10 -7
  250. package/src/utils/errors.ts +5 -5
  251. package/src/utils/id-tree.tsx +83 -80
  252. package/src/utils/lru.ts +1 -1
  253. package/src/utils/multi-map.ts +14 -12
  254. package/src/utils/paths.ts +6 -6
  255. package/src/utils/pluralize.ts +3 -3
  256. package/src/utils/progress.ts +6 -6
  257. package/src/utils/python-poet/poet.ts +14 -14
  258. package/src/utils/routes.ts +4 -2
  259. package/src/utils/semaphore.ts +6 -6
  260. package/src/utils/storage/storage.ts +6 -6
  261. package/src/utils/storage/typed.ts +16 -12
  262. package/src/utils/time.ts +9 -9
  263. package/src/utils/timed-cache.ts +4 -4
  264. package/src/utils/tracer.ts +9 -6
  265. package/dist/classDiagram-ZZMXUADV-Fe-V14Sc.js +0 -30
  266. package/dist/classDiagram-v2-VYDZK3BY-xTDg7lOs.js +0 -30
  267. package/dist/flowDiagram-HODETNUW-6dMdB8pR.js +0 -16
  268. package/dist/katex-DFBiSucW.js +0 -21840
  269. package/dist/stateDiagram-v2-MP3YSRHH-o05_rJN8.js +0 -30
  270. package/dist/swimlanesDiagram-VR7AAH4N-D_nFQfRc.js +0 -30
@@ -1,6 +1,7 @@
1
1
  /* Copyright 2026 Marimo. All rights reserved. */
2
2
 
3
3
  import { zodResolver } from "@hookform/resolvers/zod";
4
+ import { useAtomValue } from "jotai";
4
5
  import {
5
6
  BoxIcon,
6
7
  CheckIcon,
@@ -34,6 +35,7 @@ import {
34
35
  import { useResolvedMarimoConfig } from "@/core/config/config";
35
36
  import type { PackageOperationStatus } from "@/core/kernel/messages";
36
37
  import { useRequestClient } from "@/core/network/requests";
38
+ import { sandboxAtom } from "@/core/packages/sandbox-state";
37
39
  import { RESTART_REQUIRED_DESCRIPTION } from "@/core/packages/toast-components";
38
40
  import { isWasm } from "@/core/wasm/utils";
39
41
  import { usePackageMetadata } from "@/hooks/usePackageMetadata";
@@ -104,6 +106,7 @@ export const PackageAlert: React.FC = () => {
104
106
  const { packageAlert } = useAlerts();
105
107
  const { clearPackageAlert } = useAlertActions();
106
108
  const [userConfig] = useResolvedMarimoConfig();
109
+ const sandbox = useAtomValue(sandboxAtom);
107
110
  const [desiredPackageVersions, setDesiredPackageVersions] = useState<
108
111
  Record<string, string>
109
112
  >({});
@@ -132,8 +135,14 @@ export const PackageAlert: React.FC = () => {
132
135
  return null;
133
136
  }
134
137
 
138
+ const sandboxPackageManager =
139
+ packageAlert.source === "server" ? null : sandbox?.backend;
140
+ const packageManager =
141
+ sandboxPackageManager ?? userConfig.package_management.manager;
135
142
  const doesSupportVersioning =
136
- userConfig.package_management.manager !== "pixi";
143
+ packageAlert.source === "server" ||
144
+ sandbox !== null ||
145
+ packageManager !== "pixi";
137
146
 
138
147
  if (isMissingPackageAlert(packageAlert)) {
139
148
  return (
@@ -207,7 +216,7 @@ export const PackageAlert: React.FC = () => {
207
216
  {packageAlert.isolated ? (
208
217
  <>
209
218
  <InstallPackagesButton
210
- manager={userConfig.package_management.manager}
219
+ manager={packageManager}
211
220
  packages={packageAlert.packages.map((pkg) => {
212
221
  const parsed = parsePackageSpecifier(pkg);
213
222
  const currentExtras =
@@ -219,10 +228,12 @@ export const PackageAlert: React.FC = () => {
219
228
  source={packageAlert.source}
220
229
  />
221
230
 
222
- {!isWasm() && (
231
+ {!isWasm() && packageAlert.source !== "server" && (
223
232
  <>
224
233
  <span className="px-2 text-sm">with</span>{" "}
225
- <PackageManagerForm />
234
+ <PackageManagerForm
235
+ fixedManager={sandboxPackageManager ?? undefined}
236
+ />
226
237
  </>
227
238
  )}
228
239
  </>
@@ -449,7 +460,9 @@ const InstallPackagesButton = ({
449
460
  );
450
461
  };
451
462
 
452
- const PackageManagerForm: React.FC = () => {
463
+ const PackageManagerForm: React.FC<{
464
+ fixedManager?: PackageManagerName;
465
+ }> = ({ fixedManager }) => {
453
466
  const [config, setConfig] = useResolvedMarimoConfig();
454
467
  const { saveUserConfig } = useRequestClient();
455
468
 
@@ -490,8 +503,8 @@ const PackageManagerForm: React.FC = () => {
490
503
  <NativeSelect
491
504
  data-testid="install-package-manager-select"
492
505
  onChange={(e) => field.onChange(e.target.value)}
493
- value={field.value}
494
- disabled={field.disabled}
506
+ value={fixedManager ?? field.value}
507
+ disabled={fixedManager !== undefined || field.disabled}
495
508
  className="inline-flex mr-2"
496
509
  >
497
510
  {PackageManagerNames.map((option) => (
@@ -170,6 +170,7 @@ export const ResourceLinks: React.FC = () => {
170
170
  key={resource.title}
171
171
  href={resource.url}
172
172
  target="_blank"
173
+ rel="noreferrer"
173
174
  aria-label={`${resource.title}: ${resource.description}`}
174
175
  className="flex items-start gap-3 py-3 px-3 rounded-lg border hover:bg-accent/20 transition-colors shadow-xs"
175
176
  >
@@ -50,6 +50,7 @@ const Watermark = () => {
50
50
  <a
51
51
  href={Constants.githubPage}
52
52
  target="_blank"
53
+ rel="noreferrer"
53
54
  className="text-sm text-(--grass-11) font-bold tracking-wide transition-colors bg-(--grass-4) hover:bg-(--grass-5) border-t border-l border-(--grass-8) px-3 py-1 rounded-tl-md flex items-center gap-2"
54
55
  >
55
56
  <span>made with marimo</span>
@@ -46,21 +46,21 @@ beforeAll(() => {
46
46
  };
47
47
  }
48
48
  global.IntersectionObserver ??= class {
49
- observe() {
49
+ public observe() {
50
50
  /* noop */
51
51
  }
52
- unobserve() {
52
+ public unobserve() {
53
53
  /* noop */
54
54
  }
55
- disconnect() {
55
+ public disconnect() {
56
56
  /* noop */
57
57
  }
58
- takeRecords() {
58
+ public takeRecords() {
59
59
  return [];
60
60
  }
61
- root = null;
62
- rootMargin = "";
63
- thresholds = [];
61
+ public root = null;
62
+ public rootMargin = "";
63
+ public thresholds = [];
64
64
  } as unknown as typeof IntersectionObserver;
65
65
  });
66
66
 
@@ -42,28 +42,28 @@ describe("useVisibleCellIds", () => {
42
42
  mutationObserveSpy = vi.fn();
43
43
 
44
44
  global.IntersectionObserver = class MockIntersectionObserver {
45
- constructor(
45
+ public constructor(
46
46
  callback: IntersectionObserverCallback,
47
47
  _options?: IntersectionObserverInit,
48
48
  ) {
49
49
  intersectionCallback = callback;
50
50
  }
51
- observe = observeSpy;
52
- unobserve = vi.fn();
53
- disconnect = intersectionDisconnectSpy;
54
- root = null;
55
- rootMargin = "";
56
- thresholds = [0];
57
- takeRecords = vi.fn(() => []);
51
+ public observe = observeSpy;
52
+ public unobserve = vi.fn();
53
+ public disconnect = intersectionDisconnectSpy;
54
+ public root = null;
55
+ public rootMargin = "";
56
+ public thresholds = [0];
57
+ public takeRecords = vi.fn(() => []);
58
58
  } as unknown as typeof IntersectionObserver;
59
59
 
60
60
  global.MutationObserver = class MockMutationObserver {
61
- constructor(callback: MutationCallback) {
61
+ public constructor(callback: MutationCallback) {
62
62
  mutationCallback = callback;
63
63
  }
64
- observe = mutationObserveSpy;
65
- disconnect = mutationDisconnectSpy;
66
- takeRecords = vi.fn(() => []);
64
+ public observe = mutationObserveSpy;
65
+ public disconnect = mutationDisconnectSpy;
66
+ public takeRecords = vi.fn(() => []);
67
67
  } as unknown as typeof MutationObserver;
68
68
  });
69
69
 
@@ -76,12 +76,12 @@ describe("SlideScrollContainer", () => {
76
76
  vi.stubGlobal(
77
77
  "ResizeObserver",
78
78
  class MockResizeObserver {
79
- callback: ResizeObserverCallback;
80
- observe = vi.fn();
81
- unobserve = vi.fn();
82
- disconnect = vi.fn();
79
+ public callback: ResizeObserverCallback;
80
+ public observe = vi.fn();
81
+ public unobserve = vi.fn();
82
+ public disconnect = vi.fn();
83
83
 
84
- constructor(callback: ResizeObserverCallback) {
84
+ public constructor(callback: ResizeObserverCallback) {
85
85
  this.callback = callback;
86
86
  resizeObservers.push(this);
87
87
  }
@@ -90,9 +90,9 @@ describe("SlideScrollContainer", () => {
90
90
  vi.stubGlobal(
91
91
  "MutationObserver",
92
92
  class MockMutationObserver {
93
- observe = vi.fn();
94
- disconnect = vi.fn();
95
- takeRecords = vi.fn(() => []);
93
+ public observe = vi.fn();
94
+ public disconnect = vi.fn();
95
+ public takeRecords = vi.fn(() => []);
96
96
  },
97
97
  );
98
98
  });
@@ -74,6 +74,7 @@ export const ShareStaticNotebookModal: React.FC<{
74
74
  <a
75
75
  href={Constants.issuesPage}
76
76
  target="_blank"
77
+ rel="noreferrer"
77
78
  className="underline"
78
79
  >
79
80
  GitHub
@@ -102,7 +103,7 @@ export const ShareStaticNotebookModal: React.FC<{
102
103
  <DialogDescription>
103
104
  You can publish a static, non-interactive version of this notebook
104
105
  to the public web. We will create a link for you that lives on{" "}
105
- <a href={BASE_URL} target="_blank">
106
+ <a href={BASE_URL} target="_blank" rel="noreferrer">
106
107
  {BASE_URL}
107
108
  </a>
108
109
  .
@@ -1,6 +1,4 @@
1
1
  /* Copyright 2026 Marimo. All rights reserved. */
2
- /* oxlint-disable react/jsx-no-comment-textnodes */
3
- /* oxlint-disable react/jsx-no-target-blank */
4
2
 
5
3
  import { useAtomValue } from "jotai";
6
4
  import { CopyIcon, DownloadIcon } from "lucide-react";
@@ -49,6 +47,7 @@ export const StaticBanner: React.FC = () => {
49
47
  <a
50
48
  href={Constants.githubPage}
51
49
  target="_blank"
50
+ rel="noreferrer"
52
51
  className="text-(--sky-11) font-medium underline"
53
52
  >
54
53
  marimo
@@ -93,6 +92,7 @@ const StaticBannerDialog = ({ code }: { code: string }) => {
93
92
  <a
94
93
  href={Constants.githubPage}
95
94
  target="_blank"
95
+ rel="noreferrer"
96
96
  className="text-(--sky-11) hover:underline font-medium"
97
97
  >
98
98
  marimo
@@ -21,7 +21,12 @@ export const ExternalLink = ({
21
21
  children: React.ReactNode;
22
22
  }) => {
23
23
  return (
24
- <a href={href} target="_blank" className="text-link hover:underline">
24
+ <a
25
+ href={href}
26
+ target="_blank"
27
+ rel="noreferrer"
28
+ className="text-link hover:underline"
29
+ >
25
30
  {children}
26
31
  </a>
27
32
  );
@@ -5,7 +5,7 @@ import { cn } from "@/utils/cn";
5
5
  const H1 = React.forwardRef<
6
6
  HTMLHeadingElement,
7
7
  React.ComponentPropsWithoutRef<"h1">
8
- >(({ className, ...props }, ref) => {
8
+ >(({ className, children, ...props }, ref) => {
9
9
  return (
10
10
  <h1
11
11
  className={cn(
@@ -14,7 +14,9 @@ const H1 = React.forwardRef<
14
14
  )}
15
15
  ref={ref}
16
16
  {...props}
17
- />
17
+ >
18
+ {children}
19
+ </h1>
18
20
  );
19
21
  });
20
22
  H1.displayName = "H1";
@@ -22,7 +24,7 @@ H1.displayName = "H1";
22
24
  const H2 = React.forwardRef<
23
25
  HTMLHeadingElement,
24
26
  React.ComponentPropsWithoutRef<"h2">
25
- >(({ className, ...props }, ref) => {
27
+ >(({ className, children, ...props }, ref) => {
26
28
  return (
27
29
  <h2
28
30
  className={cn(
@@ -31,7 +33,9 @@ const H2 = React.forwardRef<
31
33
  )}
32
34
  ref={ref}
33
35
  {...props}
34
- />
36
+ >
37
+ {children}
38
+ </h2>
35
39
  );
36
40
  });
37
41
  H2.displayName = "H2";
@@ -39,7 +43,7 @@ H2.displayName = "H2";
39
43
  const H3 = React.forwardRef<
40
44
  HTMLHeadingElement,
41
45
  React.ComponentPropsWithoutRef<"h3">
42
- >(({ className, ...props }, ref) => {
46
+ >(({ className, children, ...props }, ref) => {
43
47
  return (
44
48
  <h3
45
49
  className={cn(
@@ -48,7 +52,9 @@ const H3 = React.forwardRef<
48
52
  )}
49
53
  ref={ref}
50
54
  {...props}
51
- />
55
+ >
56
+ {children}
57
+ </h3>
52
58
  );
53
59
  });
54
60
  H3.displayName = "H3";
@@ -56,7 +62,7 @@ H3.displayName = "H3";
56
62
  const H4 = React.forwardRef<
57
63
  HTMLHeadingElement,
58
64
  React.ComponentPropsWithoutRef<"h4">
59
- >(({ className, ...props }, ref) => {
65
+ >(({ className, children, ...props }, ref) => {
60
66
  return (
61
67
  <h4
62
68
  className={cn(
@@ -65,7 +71,9 @@ const H4 = React.forwardRef<
65
71
  )}
66
72
  ref={ref}
67
73
  {...props}
68
- />
74
+ >
75
+ {children}
76
+ </h4>
69
77
  );
70
78
  });
71
79
  H4.displayName = "H4";
@@ -44,9 +44,9 @@ const mockAttachment2: FileUIPart = {
44
44
 
45
45
  // Concrete implementation of AIContextProvider for testing
46
46
  class MockContextProvider extends AIContextProvider<MockContextItem> {
47
- readonly title = "Mock Items";
48
- readonly mentionPrefix = "@";
49
- readonly contextType = "mock";
47
+ public readonly title = "Mock Items";
48
+ public readonly mentionPrefix = "@";
49
+ public readonly contextType = "mock";
50
50
 
51
51
  private items: MockContextItem[] = [
52
52
  {
@@ -72,57 +72,60 @@ class MockContextProvider extends AIContextProvider<MockContextItem> {
72
72
  },
73
73
  ];
74
74
 
75
- getItems(): MockContextItem[] {
75
+ public getItems(): MockContextItem[] {
76
76
  return this.items;
77
77
  }
78
78
 
79
- formatContext(item: MockContextItem): string {
79
+ public formatContext(item: MockContextItem): string {
80
80
  return `Mock: ${item.name} (${item.data.value})`;
81
81
  }
82
82
 
83
- formatCompletion(item: MockContextItem): Completion {
83
+ public formatCompletion(item: MockContextItem): Completion {
84
84
  return this.createBasicCompletion(item);
85
85
  }
86
86
 
87
87
  // Method to add items for testing
88
- addItem(item: MockContextItem): void {
88
+ public addItem(item: MockContextItem): void {
89
89
  this.items.push(item);
90
90
  }
91
91
 
92
92
  // Method to clear items for testing
93
- clearItems(): void {
93
+ public clearItems(): void {
94
94
  this.items = [];
95
95
  }
96
96
  }
97
97
 
98
98
  // Test provider that supports attachments
99
99
  class AttachmentContextProvider extends AIContextProvider<MockContextItem> {
100
- readonly title = "Attachment Items";
101
- readonly mentionPrefix = "@";
102
- readonly contextType = "attachment";
100
+ public readonly title = "Attachment Items";
101
+ public readonly mentionPrefix = "@";
102
+ public readonly contextType = "attachment";
103
103
 
104
104
  private items: MockContextItem[];
105
105
  private attachments: FileUIPart[];
106
106
 
107
- constructor(items: MockContextItem[] = [], attachments: FileUIPart[] = []) {
107
+ public constructor(
108
+ items: MockContextItem[] = [],
109
+ attachments: FileUIPart[] = [],
110
+ ) {
108
111
  super();
109
112
  this.items = items;
110
113
  this.attachments = attachments;
111
114
  }
112
115
 
113
- getItems(): MockContextItem[] {
116
+ public getItems(): MockContextItem[] {
114
117
  return this.items;
115
118
  }
116
119
 
117
- formatContext(item: MockContextItem): string {
120
+ public formatContext(item: MockContextItem): string {
118
121
  return `Attachment: ${item.name} (${item.data.value})`;
119
122
  }
120
123
 
121
- formatCompletion(item: MockContextItem): Completion {
124
+ public formatCompletion(item: MockContextItem): Completion {
122
125
  return this.createBasicCompletion(item);
123
126
  }
124
127
 
125
- override async getAttachments(
128
+ public override async getAttachments(
126
129
  items: MockContextItem[],
127
130
  ): Promise<FileUIPart[]> {
128
131
  // Return attachments for items that need them
@@ -142,9 +145,9 @@ interface FileContextItem extends AIContextItem {
142
145
 
143
146
  // Another mock provider with different prefix and type
144
147
  class FileContextProvider extends AIContextProvider<FileContextItem> {
145
- readonly title = "Files";
146
- readonly mentionPrefix = "@";
147
- readonly contextType = "file";
148
+ public readonly title = "Files";
149
+ public readonly mentionPrefix = "@";
150
+ public readonly contextType = "file";
148
151
 
149
152
  private items: FileContextItem[] = [
150
153
  {
@@ -163,26 +166,26 @@ class FileContextProvider extends AIContextProvider<FileContextItem> {
163
166
  },
164
167
  ];
165
168
 
166
- getItems(): FileContextItem[] {
169
+ public getItems(): FileContextItem[] {
167
170
  return this.items;
168
171
  }
169
172
 
170
- formatCompletion(item: FileContextItem): Completion {
173
+ public formatCompletion(item: FileContextItem): Completion {
171
174
  return this.createBasicCompletion(item);
172
175
  }
173
176
 
174
- formatContext(item: FileContextItem): string {
177
+ public formatContext(item: FileContextItem): string {
175
178
  return `File: ${item.uri}\nDescription: ${item.description}`;
176
179
  }
177
180
  }
178
181
 
179
182
  // Second mock provider with the same context type as MockContextProvider
180
183
  class SecondaryMockProvider extends AIContextProvider<MockContextItem> {
181
- readonly title = "Secondary Mock Items";
182
- readonly mentionPrefix = "@";
183
- readonly contextType = "mock";
184
+ public readonly title = "Secondary Mock Items";
185
+ public readonly mentionPrefix = "@";
186
+ public readonly contextType = "mock";
184
187
 
185
- getItems(): MockContextItem[] {
188
+ public getItems(): MockContextItem[] {
186
189
  return [
187
190
  {
188
191
  type: "mock",
@@ -194,11 +197,11 @@ class SecondaryMockProvider extends AIContextProvider<MockContextItem> {
194
197
  ];
195
198
  }
196
199
 
197
- formatContext(item: MockContextItem): string {
200
+ public formatContext(item: MockContextItem): string {
198
201
  return `Secondary: ${item.name}`;
199
202
  }
200
203
 
201
- formatCompletion(item: MockContextItem): Completion {
204
+ public formatCompletion(item: MockContextItem): Completion {
202
205
  return this.createBasicCompletion(item);
203
206
  }
204
207
  }
@@ -80,16 +80,16 @@ function isMediaMimetype(
80
80
  }
81
81
 
82
82
  export class CellOutputContextProvider extends AIContextProvider<CellOutputContextItem> {
83
- readonly title = "Cell Outputs";
84
- readonly mentionPrefix = "@";
85
- readonly contextType = "cell-output";
83
+ public readonly title = "Cell Outputs";
84
+ public readonly mentionPrefix = "@";
85
+ public readonly contextType = "cell-output";
86
86
  private store: JotaiStore;
87
- constructor(store: JotaiStore) {
87
+ public constructor(store: JotaiStore) {
88
88
  super();
89
89
  this.store = store;
90
90
  }
91
91
 
92
- getItems(): CellOutputContextItem[] {
92
+ public getItems(): CellOutputContextItem[] {
93
93
  const notebook = this.store.get(notebookAtom);
94
94
  const items: CellOutputContextItem[] = [];
95
95
 
@@ -116,7 +116,7 @@ export class CellOutputContextProvider extends AIContextProvider<CellOutputConte
116
116
  return items;
117
117
  }
118
118
 
119
- formatCompletion(item: CellOutputContextItem): Completion {
119
+ public formatCompletion(item: CellOutputContextItem): Completion {
120
120
  const { cellOutput: data, cellName, cellCode } = item.data;
121
121
 
122
122
  return {
@@ -224,7 +224,7 @@ export class CellOutputContextProvider extends AIContextProvider<CellOutputConte
224
224
  };
225
225
  }
226
226
 
227
- formatContext(item: CellOutputContextItem): string {
227
+ public formatContext(item: CellOutputContextItem): string {
228
228
  const { cellOutput: data, cellName, cellId, cellCode } = item.data;
229
229
 
230
230
  const contextData = {
@@ -253,7 +253,7 @@ export class CellOutputContextProvider extends AIContextProvider<CellOutputConte
253
253
  }
254
254
 
255
255
  /** Get attachments for cell output items that have shouldDownloadImage=true */
256
- override async getAttachments(
256
+ public override async getAttachments(
257
257
  items: CellOutputContextItem[],
258
258
  ): Promise<FileUIPart[]> {
259
259
  const cellId = items[0].data.cellId;
@@ -46,13 +46,16 @@ export interface DatasourceContextItem extends AIContextItem {
46
46
  const CONTEXT_TYPE = "datasource";
47
47
 
48
48
  export class DatasourceContextProvider extends AIContextProvider<DatasourceContextItem> {
49
- readonly title = "Datasource";
50
- readonly mentionPrefix = "@";
51
- readonly contextType = CONTEXT_TYPE;
49
+ public readonly title = "Datasource";
50
+ public readonly mentionPrefix = "@";
51
+ public readonly contextType = CONTEXT_TYPE;
52
52
  private connectionsMap: ConnectionsMap;
53
53
  private dataframes: DataTable[];
54
54
 
55
- constructor(connectionsMap: ConnectionsMap, tablesMap: DatasetTablesMap) {
55
+ public constructor(
56
+ connectionsMap: ConnectionsMap,
57
+ tablesMap: DatasetTablesMap,
58
+ ) {
56
59
  super();
57
60
  this.connectionsMap = connectionsMap;
58
61
  this.dataframes = [...tablesMap.values()].filter(
@@ -60,7 +63,7 @@ export class DatasourceContextProvider extends AIContextProvider<DatasourceConte
60
63
  );
61
64
  }
62
65
 
63
- getItems(): DatasourceContextItem[] {
66
+ public getItems(): DatasourceContextItem[] {
64
67
  return [...this.connectionsMap.values()]
65
68
  .map((connection): DatasourceContextItem | null => {
66
69
  let description = "Database schema.";
@@ -92,7 +95,7 @@ export class DatasourceContextProvider extends AIContextProvider<DatasourceConte
92
95
  .filter(Boolean);
93
96
  }
94
97
 
95
- formatContext(item: DatasourceContextItem): string {
98
+ public formatContext(item: DatasourceContextItem): string {
96
99
  const data = item.data;
97
100
  // Remove certain fields that are not needed in the context
98
101
  const { name, display_name, source, ...filteredDatasource } =
@@ -117,7 +120,7 @@ export class DatasourceContextProvider extends AIContextProvider<DatasourceConte
117
120
  });
118
121
  }
119
122
 
120
- formatCompletion(item: DatasourceContextItem): Completion {
123
+ public formatCompletion(item: DatasourceContextItem): Completion {
121
124
  const datasource = item.data;
122
125
 
123
126
  const dataConnection = datasource.connection;
@@ -95,17 +95,17 @@ function errorContextName(entry: CellErrorEntry): string {
95
95
 
96
96
  const errorsTxt = new PluralWord("error", "errors");
97
97
  export class ErrorContextProvider extends AIContextProvider<ErrorContextItem> {
98
- readonly title = "Errors";
99
- readonly mentionPrefix = "@";
100
- readonly contextType = "error";
98
+ public readonly title = "Errors";
99
+ public readonly mentionPrefix = "@";
100
+ public readonly contextType = "error";
101
101
  private store: JotaiStore;
102
102
 
103
- constructor(store: JotaiStore) {
103
+ public constructor(store: JotaiStore) {
104
104
  super();
105
105
  this.store = store;
106
106
  }
107
107
 
108
- getItems(): ErrorContextItem[] {
108
+ public getItems(): ErrorContextItem[] {
109
109
  const errors = getCellErrorEntries(this.store);
110
110
 
111
111
  if (errors.length === 0) {
@@ -141,7 +141,7 @@ export class ErrorContextProvider extends AIContextProvider<ErrorContextItem> {
141
141
  return items;
142
142
  }
143
143
 
144
- formatCompletion(item: ErrorContextItem): Completion {
144
+ public formatCompletion(item: ErrorContextItem): Completion {
145
145
  if (item.data.type === "all-errors") {
146
146
  const errorCount = item.data.errors.length;
147
147
  return {
@@ -201,7 +201,7 @@ export class ErrorContextProvider extends AIContextProvider<ErrorContextItem> {
201
201
  };
202
202
  }
203
203
 
204
- formatContext(item: ErrorContextItem): string {
204
+ public formatContext(item: ErrorContextItem): string {
205
205
  const entries =
206
206
  item.data.type === "all-errors" ? item.data.errors : [item.data.error];
207
207
 
@@ -38,14 +38,14 @@ const DEFAULT_FILE_SEARCH_CONFIG: FileSearchConfig = {
38
38
  };
39
39
 
40
40
  export class FileContextProvider extends AIContextProvider<FileContextItem> {
41
- readonly title = "Files";
42
- readonly mentionPrefix = "#";
43
- readonly contextType = "file";
41
+ public readonly title = "Files";
42
+ public readonly mentionPrefix = "#";
43
+ public readonly contextType = "file";
44
44
 
45
45
  private apiRequests: EditRequests & RunRequests;
46
46
  private config: FileSearchConfig;
47
47
 
48
- constructor(
48
+ public constructor(
49
49
  apiRequests: EditRequests & RunRequests,
50
50
  config: FileSearchConfig = DEFAULT_FILE_SEARCH_CONFIG,
51
51
  ) {
@@ -58,7 +58,7 @@ export class FileContextProvider extends AIContextProvider<FileContextItem> {
58
58
  * Create a dynamic completion source for file mentions
59
59
  * This bypasses the standard registry system to enable dynamic searching
60
60
  */
61
- createCompletionSource(): CompletionSource {
61
+ public createCompletionSource(): CompletionSource {
62
62
  return async (
63
63
  context: CompletionContext,
64
64
  ): Promise<CompletionResult | null> => {
@@ -176,13 +176,13 @@ export class FileContextProvider extends AIContextProvider<FileContextItem> {
176
176
  }
177
177
  }
178
178
 
179
- getItems(): FileContextItem[] {
179
+ public getItems(): FileContextItem[] {
180
180
  // Files are fetched dynamically, so return empty array
181
181
  // This provider relies on dynamic fetching via createCompletionSource()
182
182
  return [];
183
183
  }
184
184
 
185
- formatCompletion(item: FileContextItem): Completion {
185
+ public formatCompletion(item: FileContextItem): Completion {
186
186
  const { data, name } = item;
187
187
  const icon = data.isDirectory ? "📁" : "📄";
188
188
 
@@ -254,7 +254,7 @@ export class FileContextProvider extends AIContextProvider<FileContextItem> {
254
254
  };
255
255
  }
256
256
 
257
- formatContext(item: FileContextItem): string {
257
+ public formatContext(item: FileContextItem): string {
258
258
  const { data, name } = item;
259
259
  return contextToXml({
260
260
  type: this.contextType,