@marimo-team/islands 0.15.2 → 0.15.4

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 (211) hide show
  1. package/dist/{ConnectedDataExplorerComponent-C39nQwtD.js → ConnectedDataExplorerComponent-B68gXlbY.js} +323 -328
  2. package/dist/{ImageComparisonComponent-BhkiyswP.js → ImageComparisonComponent-Cw1oA8Tn.js} +13 -13
  3. package/dist/{_baseUniq-DdHL34FO.js → _baseUniq-CQrhBg_9.js} +67 -67
  4. package/dist/any-language-editor-pzUl6lxp.js +27 -0
  5. package/dist/{arc-BXrety1g.js → arc-BOhn-m2C.js} +1 -1
  6. package/dist/{architectureDiagram-KFL7JDKH-BMy6ywCF.js → architectureDiagram-W76B3OCA-DdYf2VnU.js} +144 -144
  7. package/dist/assets/{worker-COGufAQn.js → worker-BcG8m3h5.js} +33 -29
  8. package/dist/asterisk-DS281yxp.js +271 -0
  9. package/dist/{blockDiagram-ZYB65J3Q-DYT2-nlI.js → blockDiagram-QIGZ2CNN-DmmYotkP.js} +10 -10
  10. package/dist/{c4Diagram-AAMF2YG6-ZiQzioe6.js → c4Diagram-FPNF74CW-Dyz4zMHJ.js} +8 -8
  11. package/dist/{channel-CeuXqUAU.js → channel-CCL8jXAe.js} +1 -1
  12. package/dist/{chunk-ANTBXLJU-BvYnIrdq.js → chunk-4BX2VUAB-BfKwWLfJ.js} +1 -1
  13. package/dist/{chunk-WVR4S24B-DXj8yaUk.js → chunk-55IACEB6-CFQU7zSp.js} +1 -1
  14. package/dist/{chunk-GLLZNHP4-CyFsosAe.js → chunk-FMBD7UC4-DDjZzUcl.js} +1 -1
  15. package/dist/{chunk-JBRWN2VN-DA_EEhy2.js → chunk-K7UQS3LO-nBRjBU1H.js} +117 -117
  16. package/dist/{chunk-NRVI72HA-BYx2jMlI.js → chunk-QN33PNHL-B-g8sJzl.js} +1 -1
  17. package/dist/{chunk-FHKO5MBM-DfCztBk8.js → chunk-QZHKN3VN-B7QSJS3J.js} +1 -1
  18. package/dist/{chunk-LXBSTHXV-Se7vdY6J.js → chunk-TVAH2DTR-pGXll4d1.js} +7 -7
  19. package/dist/{chunk-OMD6QJNC-CqgcPMgL.js → chunk-TZMSLE5B-Dx9h-1mv.js} +1 -1
  20. package/dist/{classDiagram-v2-QTMF73CY-B19A3G1l.js → classDiagram-KNZD7YFC-BXryI7DY.js} +2 -2
  21. package/dist/{classDiagram-3BZAVTQC-B19A3G1l.js → classDiagram-v2-RKCZMP56-BXryI7DY.js} +2 -2
  22. package/dist/{clone-78au0tn1.js → clone-DqwV7ges.js} +1 -1
  23. package/dist/cose-bilkent-S5V4N54A-Di6FNMXz.js +2609 -0
  24. package/dist/{cytoscape.esm-BYnVVhJX.js → cytoscape.esm-DfdJODL8.js} +34 -34
  25. package/dist/{dagre-2BBEFEWP-BfEn3ZUV.js → dagre-5GWH7T2D-BTZPMTey.js} +6 -6
  26. package/dist/{data-grid-overlay-editor-CH_qLkV2.js → data-grid-overlay-editor-ryatXXby.js} +11 -11
  27. package/dist/{diagram-4IRLE6MV-CL8xidnG.js → diagram-N5W7TBWH-D79_zdOu.js} +59 -60
  28. package/dist/{diagram-RP2FKANI-B1BPcUew.js → diagram-QEK2KX5R-DX2A_SD0.js} +15 -15
  29. package/dist/{diagram-GUPCWM2R-CZ5cfqlq.js → diagram-S2PKOQOG-DM6VMTrJ.js} +10 -10
  30. package/dist/dockerfile-BoowzQlp.js +194 -0
  31. package/dist/ebnf-DUPDuY4r.js +78 -0
  32. package/dist/{erDiagram-HZWUO2LU-BEAIww50.js → erDiagram-AWTI2OKA-BBirxtlI.js} +8 -8
  33. package/dist/fcl-CPC2WYrI.js +103 -0
  34. package/dist/{flowDiagram-THRYKUMA-Czs2UAI2.js → flowDiagram-PVAE7QVJ-DyVweEMs.js} +9 -9
  35. package/dist/{ganttDiagram-WV7ZQ7D5-ByYIAVFO.js → ganttDiagram-OWAHRB6G-DTB7FX7r.js} +34 -34
  36. package/dist/{gitGraphDiagram-OJR772UL-BcpDsiyB.js → gitGraphDiagram-NY62KEGX-BrbIb5pD.js} +4 -4
  37. package/dist/{glide-data-editor-CmN6FVyi.js → glide-data-editor-DhMX4nmM.js} +33 -33
  38. package/dist/{graph-77W6heli.js → graph-CuLSrclI.js} +3 -3
  39. package/dist/http-D9LttvKF.js +44 -0
  40. package/dist/{index-BOojn38D.js → index-BNgdUQ2e.js} +7711 -7711
  41. package/dist/index-DIy6LHLJ.js +98 -0
  42. package/dist/{index-CmozKMxx.js → index-Df2dsx1t.js} +6 -6
  43. package/dist/{index-pBmAzQJl.js → index-MCx5v1x0.js} +2 -2
  44. package/dist/{index-Bfk9dnyS.js → index-cz_xaKvT.js} +33090 -32892
  45. package/dist/{infoDiagram-6WOFNB3A-CfzLHHVP.js → infoDiagram-STP46IZ2-CCBHc7-K.js} +2 -2
  46. package/dist/{journeyDiagram-FFXJYRFH-ndAcpkGn.js → journeyDiagram-BIP6EPQ6-LhGSj54j.js} +24 -26
  47. package/dist/{kanban-definition-KOZQBZVT-DcQYzNvc.js → kanban-definition-6OIFK2YF-aegTMFS6.js} +14 -14
  48. package/dist/{layout-XySVHJgD.js → layout-BEARWMhl.js} +81 -81
  49. package/dist/{linear-PbooOqg7.js → linear-fbJq6cdO.js} +35 -35
  50. package/dist/{main-B5yML0bw.js → main-HerZgEhd.js} +76533 -69945
  51. package/dist/main.js +1 -1
  52. package/dist/{mermaid-Cg5IX6Nv.js → mermaid-DxPYK0KX.js} +6160 -7493
  53. package/dist/min-DBJkhObB.js +80 -0
  54. package/dist/mindmap-definition-Q6HEUPPD-A3Fh5XDZ.js +785 -0
  55. package/dist/nginx-zDPm3Z74.js +89 -0
  56. package/dist/{number-overlay-editor-DUhfZqtP.js → number-overlay-editor-USMrY6k3.js} +19 -19
  57. package/dist/{pieDiagram-DBDJKBY4-DTOlNsja.js → pieDiagram-ADFJNKIX-Q9uFlCV0.js} +17 -17
  58. package/dist/{quadrantDiagram-YPSRARAO-BX2d8VS-.js → quadrantDiagram-LMRXKWRM-BuPh-qpK.js} +6 -6
  59. package/dist/{react-plotly-Dcyw-3Sa.js → react-plotly-HSqJPRfa.js} +3577 -3577
  60. package/dist/{requirementDiagram-EGVEC5DT-D1T5u-wG.js → requirementDiagram-4UW4RH46-CHROYNU_.js} +7 -7
  61. package/dist/{sankeyDiagram-HRAUVNP4-G6xDfnp-.js → sankeyDiagram-GR3RE2ED-DkUqHP2d.js} +5 -5
  62. package/dist/sequenceDiagram-C3RYC4MD-YoPTMplP.js +2519 -0
  63. package/dist/{slides-component-BJLlPJSr.js → slides-component-D7CHSR00.js} +66 -66
  64. package/dist/solr-BNlsLglM.js +41 -0
  65. package/dist/spreadsheet-C-cy4P5N.js +49 -0
  66. package/dist/{stateDiagram-UUKSUZ4H-CYXbjaom.js → stateDiagram-KXAO66HF-DEN00mVU.js} +5 -5
  67. package/dist/{stateDiagram-v2-EYPG3UTE-Br1HYKT6.js → stateDiagram-v2-UMBNRL4Z-DlQqSUAa.js} +2 -2
  68. package/dist/style.css +1 -1
  69. package/dist/tiddlywiki-5wqsXtSk.js +155 -0
  70. package/dist/tiki-__Kn3CeS.js +181 -0
  71. package/dist/{time-B9SZnSen.js → time-BtVcKqeD.js} +58 -58
  72. package/dist/{timeline-definition-3HZDQTIS-DeK_ZRD0.js → timeline-definition-XQNQX7LJ-DEteLt8D.js} +10 -12
  73. package/dist/{timer-BYwnU4DF.js → timer-B0-z63CM.js} +16 -16
  74. package/dist/{treemap-75Q7IDZK-CKP4vV_0.js → treemap-75Q7IDZK-8S6podme.js} +14 -14
  75. package/dist/{vega-component-CpgdqX2d.js → vega-component-D35L45kI.js} +30 -30
  76. package/dist/{xychartDiagram-FDP5SA34-AMEPsx_R.js → xychartDiagram-6GGTOJPD-DKwGThyy.js} +7 -7
  77. package/package.json +44 -41
  78. package/src/__mocks__/notebook.ts +3 -0
  79. package/src/__mocks__/requests.ts +3 -0
  80. package/src/__tests__/__snapshots__/CellStatus.test.tsx.snap +12 -12
  81. package/src/__tests__/chat-utils.test.ts +26 -211
  82. package/src/components/ai/ai-model-dropdown.tsx +25 -9
  83. package/src/components/ai/ai-provider-icon.tsx +5 -1
  84. package/src/components/app-config/ai-config.tsx +7 -0
  85. package/src/components/chat/acp/__tests__/__snapshots__/prompt.test.ts.snap +304 -0
  86. package/src/components/chat/acp/__tests__/atoms.test.ts +56 -0
  87. package/src/components/chat/acp/__tests__/prompt.test.ts +12 -0
  88. package/src/components/chat/acp/__tests__/state.test.ts +621 -0
  89. package/src/components/chat/acp/agent-docs.tsx +78 -0
  90. package/src/components/chat/acp/agent-panel.css +23 -0
  91. package/src/components/chat/acp/agent-panel.tsx +715 -0
  92. package/src/components/chat/acp/agent-selector.tsx +138 -0
  93. package/src/components/chat/acp/blocks.tsx +664 -0
  94. package/src/components/chat/acp/common.tsx +198 -0
  95. package/src/components/chat/acp/prompt.ts +284 -0
  96. package/src/components/chat/acp/scroll-to-bottom-button.tsx +50 -0
  97. package/src/components/chat/acp/session-tabs.tsx +138 -0
  98. package/src/components/chat/acp/state.ts +263 -0
  99. package/src/components/chat/acp/thread.tsx +121 -0
  100. package/src/components/chat/acp/types.ts +63 -0
  101. package/src/components/chat/acp/utils.ts +45 -0
  102. package/src/components/chat/chat-components.tsx +71 -0
  103. package/src/components/chat/chat-panel.tsx +481 -291
  104. package/src/components/chat/chat-utils.ts +50 -0
  105. package/src/components/chat/markdown-renderer.tsx +3 -7
  106. package/src/components/chat/tool-call-accordion.tsx +6 -6
  107. package/src/components/datasources/__tests__/utils.test.ts +6 -0
  108. package/src/components/datasources/column-preview.tsx +1 -3
  109. package/src/components/editor/actions/useNotebookActions.tsx +1 -1
  110. package/src/components/editor/ai/add-cell-with-ai.tsx +20 -15
  111. package/src/components/editor/ai/ai-completion-editor.tsx +22 -3
  112. package/src/components/editor/ai/completion-handlers.tsx +2 -4
  113. package/src/components/editor/ai/completion-utils.ts +85 -11
  114. package/src/components/editor/alerts/startup-logs-alert.tsx +72 -0
  115. package/src/components/editor/chrome/panels/datasources-panel.tsx +3 -1
  116. package/src/components/editor/chrome/panels/dependency-graph-panel.tsx +3 -1
  117. package/src/components/editor/chrome/panels/documentation-panel.tsx +3 -1
  118. package/src/components/editor/chrome/panels/error-panel.tsx +3 -1
  119. package/src/components/editor/chrome/panels/file-explorer-panel.tsx +3 -1
  120. package/src/components/editor/chrome/panels/logs-panel.tsx +3 -1
  121. package/src/components/editor/chrome/panels/outline-panel.tsx +3 -1
  122. package/src/components/editor/chrome/panels/packages-panel.tsx +4 -2
  123. package/src/components/editor/chrome/panels/scratchpad-panel.tsx +3 -1
  124. package/src/components/editor/chrome/panels/secrets-panel.tsx +3 -1
  125. package/src/components/editor/chrome/panels/snippets-panel.tsx +3 -1
  126. package/src/components/editor/chrome/panels/tracing-panel.tsx +3 -1
  127. package/src/components/editor/chrome/panels/variable-panel.tsx +3 -1
  128. package/src/components/editor/chrome/types.ts +10 -0
  129. package/src/components/editor/chrome/wrapper/app-chrome.tsx +55 -31
  130. package/src/components/editor/controls/command-palette-button.tsx +1 -1
  131. package/src/components/editor/controls/command-palette.tsx +5 -4
  132. package/src/components/editor/controls/state.ts +4 -0
  133. package/src/components/editor/package-alert.tsx +108 -58
  134. package/src/components/editor/renderers/CellArray.tsx +2 -0
  135. package/src/components/editor/renderers/vertical-layout/vertical-layout.tsx +0 -1
  136. package/src/components/pages/edit-page.tsx +7 -3
  137. package/src/core/ai/chat-utils.ts +26 -43
  138. package/src/core/ai/config.ts +1 -1
  139. package/src/core/ai/context/__tests__/registry.test.ts +277 -3
  140. package/src/core/ai/context/context.ts +11 -1
  141. package/src/core/ai/context/providers/__tests__/cell-output.test.ts +378 -0
  142. package/src/core/ai/context/providers/__tests__/error.test.ts +3 -2
  143. package/src/core/ai/context/providers/__tests__/file.test.ts +119 -0
  144. package/src/core/ai/context/providers/cell-output.ts +349 -0
  145. package/src/core/ai/context/providers/common.ts +5 -1
  146. package/src/core/ai/context/providers/file.ts +287 -0
  147. package/src/core/ai/context/registry.ts +79 -0
  148. package/src/core/ai/state.ts +22 -5
  149. package/src/core/alerts/state.ts +71 -3
  150. package/src/core/cells/cell.ts +2 -2
  151. package/src/core/cells/cells.ts +1 -1
  152. package/src/core/cells/logs.ts +1 -1
  153. package/src/core/cells/runs.ts +6 -5
  154. package/src/core/codemirror/ai/resources.ts +47 -5
  155. package/src/core/codemirror/ai/state.ts +12 -0
  156. package/src/core/codemirror/language/__tests__/sql.test.ts +45 -0
  157. package/src/core/codemirror/markdown/__tests__/commands.test.ts +1 -0
  158. package/src/core/codemirror/theme/dark.ts +1 -1
  159. package/src/core/config/capabilities.ts +1 -1
  160. package/src/core/config/feature-flag.tsx +2 -0
  161. package/src/core/datasets/__tests__/data-source.test.ts +24 -0
  162. package/src/core/errors/__tests__/errors.test.ts +2 -0
  163. package/src/core/islands/bridge.ts +1 -0
  164. package/src/core/islands/main.ts +1 -0
  165. package/src/core/kernel/messages.ts +12 -6
  166. package/src/core/layout/layout.ts +3 -3
  167. package/src/core/network/requests-network.ts +8 -0
  168. package/src/core/network/requests-static.ts +1 -0
  169. package/src/core/network/requests-toasting.ts +1 -0
  170. package/src/core/network/types.ts +4 -1
  171. package/src/core/wasm/bridge.ts +18 -2
  172. package/src/core/wasm/worker/bootstrap.ts +3 -1
  173. package/src/core/wasm/worker/getMarimoWheel.ts +3 -8
  174. package/src/core/wasm/worker/types.ts +3 -0
  175. package/src/core/websocket/useMarimoWebSocket.tsx +7 -1
  176. package/src/css/app/Cell.css +42 -21
  177. package/src/css/app/codemirror.css +5 -1
  178. package/src/css/globals.css +3 -0
  179. package/src/css/md.css +1 -1
  180. package/src/plugins/impl/MicrophonePlugin.tsx +2 -2
  181. package/src/plugins/impl/chat/ChatPlugin.tsx +2 -9
  182. package/src/plugins/impl/chat/chat-ui.tsx +129 -110
  183. package/src/plugins/impl/chat/types.ts +5 -8
  184. package/src/plugins/impl/code/__tests__/language.test.ts +15 -0
  185. package/src/plugins/impl/code/any-language-editor.tsx +11 -8
  186. package/src/plugins/impl/vega/vega.css +121 -0
  187. package/src/plugins/layout/MimeRenderPlugin.tsx +3 -6
  188. package/src/stories/cell.stories.tsx +6 -0
  189. package/src/stories/layout/vertical/one-column.stories.tsx +215 -0
  190. package/src/theme/useTheme.ts +11 -6
  191. package/src/utils/Logger.ts +5 -6
  192. package/src/utils/__tests__/blob.test.ts +37 -0
  193. package/src/utils/arrays.ts +13 -0
  194. package/src/utils/fileToBase64.ts +21 -6
  195. package/src/utils/json/base64.ts +5 -2
  196. package/src/utils/numbers.ts +9 -7
  197. package/dist/any-language-editor-DC5170DQ.js +0 -45
  198. package/dist/asn1-jKiBa2Ya.js +0 -95
  199. package/dist/clojure-CCKyeQKf.js +0 -800
  200. package/dist/css-BkF-NPzE.js +0 -1553
  201. package/dist/index-5ZH_qS8j.js +0 -288
  202. package/dist/index-U4yn89qO.js +0 -341
  203. package/dist/javascript-C2yteZeJ.js +0 -691
  204. package/dist/min-DS5Jz-hg.js +0 -80
  205. package/dist/mindmap-definition-LNHGMQRG-0aOVaMR8.js +0 -3234
  206. package/dist/mllike-BSnXJBGA.js +0 -272
  207. package/dist/pug-CwAQJzGR.js +0 -248
  208. package/dist/python-BkR3uSy8.js +0 -313
  209. package/dist/rpm-IznJm2Xc.js +0 -57
  210. package/dist/sequenceDiagram-WFGC7UMF-DMhHzllb.js +0 -2284
  211. package/dist/ttcn-cfg-Bac_acMi.js +0 -88
@@ -258,6 +258,9 @@ describe("add table list", () => {
258
258
  {
259
259
  name: "table1",
260
260
  columns: [],
261
+ num_columns: 0,
262
+ num_rows: 0,
263
+ variable_name: null,
261
264
  source: "",
262
265
  source_type: "local",
263
266
  type: "table",
@@ -286,6 +289,9 @@ describe("add table list", () => {
286
289
  {
287
290
  name: "table2",
288
291
  columns: [],
292
+ num_columns: 0,
293
+ num_rows: 0,
294
+ variable_name: null,
289
295
  source: "",
290
296
  source_type: "local",
291
297
  type: "table",
@@ -303,6 +309,9 @@ describe("add table list", () => {
303
309
  {
304
310
  name: "table1",
305
311
  columns: [],
312
+ num_columns: 0,
313
+ num_rows: 0,
314
+ variable_name: null,
306
315
  source: "",
307
316
  source_type: "local",
308
317
  type: "table",
@@ -323,6 +332,9 @@ describe("add table list", () => {
323
332
  {
324
333
  name: "table2",
325
334
  columns: [],
335
+ num_columns: 0,
336
+ num_rows: 0,
337
+ variable_name: null,
326
338
  source: "",
327
339
  source_type: "local",
328
340
  type: "table",
@@ -387,6 +399,9 @@ describe("add table", () => {
387
399
  source: "",
388
400
  source_type: "local",
389
401
  type: "table",
402
+ num_columns: 0,
403
+ num_rows: 0,
404
+ variable_name: null,
390
405
  };
391
406
  const newState = addTable(table, {
392
407
  engine: "conn1" as ConnectionName,
@@ -410,6 +425,9 @@ describe("add table", () => {
410
425
  const table: DataTable = {
411
426
  name: "table1",
412
427
  columns: [],
428
+ num_columns: 0,
429
+ num_rows: 0,
430
+ variable_name: null,
413
431
  source: "",
414
432
  source_type: "local",
415
433
  type: "table",
@@ -428,6 +446,9 @@ describe("add table", () => {
428
446
  source: "new_source",
429
447
  source_type: "local",
430
448
  type: "table",
449
+ num_columns: 0,
450
+ num_rows: 0,
451
+ variable_name: null,
431
452
  };
432
453
 
433
454
  const updatedState = addTable(updatedTable, sqlTableContext);
@@ -444,6 +465,9 @@ describe("add table", () => {
444
465
  const table: DataTable = {
445
466
  name: "table2",
446
467
  columns: [],
468
+ num_columns: 0,
469
+ num_rows: 0,
470
+ variable_name: null,
447
471
  source: "",
448
472
  source_type: "local",
449
473
  type: "table",
@@ -34,6 +34,7 @@ describe("getAutoFixes", () => {
34
34
  type: "exception",
35
35
  exception_type: "NameError",
36
36
  msg: "name 'np' is not defined",
37
+ raising_cell: null,
37
38
  };
38
39
 
39
40
  const fixes = getAutoFixes(error);
@@ -46,6 +47,7 @@ describe("getAutoFixes", () => {
46
47
  type: "exception",
47
48
  exception_type: "NameError",
48
49
  msg: "name 'unknown_module' is not defined",
50
+ raising_cell: null,
49
51
  };
50
52
 
51
53
  expect(getAutoFixes(error)).toHaveLength(0);
@@ -155,6 +155,7 @@ export class IslandsPyodideBridge implements RunRequests, EditRequests {
155
155
  previewDataSourceConnection = throwNotImplemented;
156
156
  openFile = throwNotImplemented;
157
157
  sendListFiles = throwNotImplemented;
158
+ sendSearchFiles = throwNotImplemented;
158
159
  sendPdb = throwNotImplemented;
159
160
  sendCreateFileOrFolder = throwNotImplemented;
160
161
  sendDeleteFileOrFolder = throwNotImplemented;
@@ -120,6 +120,7 @@ export async function initialize() {
120
120
  case "datasets":
121
121
  case "data-source-connections":
122
122
  case "secret-keys-result":
123
+ case "startup-logs":
123
124
  // Unsupported
124
125
  return;
125
126
  case "kernel-ready":
@@ -2,7 +2,7 @@
2
2
  import type { components } from "@marimo-team/marimo-api";
3
3
 
4
4
  export type schemas = components["schemas"];
5
- export type DataType = schemas["DataType"];
5
+ export type DataType = schemas["KnownUnions"]["data_type"];
6
6
  export const DATA_TYPES = [
7
7
  "string",
8
8
  "boolean",
@@ -21,7 +21,11 @@ export type Database = schemas["Database"];
21
21
  export type DatabaseSchema = schemas["Schema"];
22
22
  export type DataSourceConnection = schemas["DataSourceConnection"];
23
23
  export type OutputChannel = schemas["CellChannel"];
24
- export type MarimoError = schemas["Error"];
24
+ export type CellOutput = schemas["CellOutput"];
25
+ export type MarimoError = Extract<
26
+ CellOutput["data"],
27
+ Array<{ type: string }>
28
+ >[number];
25
29
  export type OutputMessage = schemas["CellOutput"];
26
30
  export type CompletionOption = schemas["CompletionResult"]["options"][0];
27
31
  export type CompletionResultMessage = OperationMessageData<"completion-result">;
@@ -35,20 +39,22 @@ export type SQLTablePreview = OperationMessageData<"sql-table-preview">;
35
39
  export type SQLTableListPreview =
36
40
  OperationMessageData<"sql-table-list-preview">;
37
41
  export type SecretKeysResult = OperationMessageData<"secret-keys-result">;
42
+ export type StartupLogs = OperationMessageData<"startup-logs">;
43
+ export type MessageOperation = schemas["KnownUnions"]["operation"];
38
44
 
39
- export type OperationMessageType = schemas["MessageOperation"]["name"];
45
+ export type OperationMessageType = MessageOperation["op"];
40
46
  export type OperationMessage = {
41
47
  [Type in OperationMessageType]: {
42
48
  op: Type;
43
- data: Omit<Extract<schemas["MessageOperation"], { name: Type }>, "name">;
49
+ data: Omit<Extract<MessageOperation, { op: Type }>, "op">;
44
50
  };
45
51
  }[OperationMessageType];
46
52
 
47
53
  export type CellMessage = OperationMessageData<"cell-op">;
48
54
 
49
55
  export type OperationMessageData<T extends OperationMessageType> = Omit<
50
- Extract<schemas["MessageOperation"], { name: T }>,
51
- "name"
56
+ Extract<MessageOperation, { op: T }>,
57
+ "op"
52
58
  >;
53
59
 
54
60
  export type Capabilities = OperationMessageData<"kernel-ready">["capabilities"];
@@ -77,11 +77,11 @@ export function getSerializedLayout() {
77
77
 
78
78
  // Vertical layout has no data, as it is the default.
79
79
  if (selectedLayout === "vertical") {
80
- return undefined;
80
+ return null;
81
81
  }
82
82
 
83
83
  if (layoutData === undefined) {
84
- return undefined;
84
+ return null;
85
85
  }
86
86
 
87
87
  const data = layoutData[selectedLayout];
@@ -90,7 +90,7 @@ export function getSerializedLayout() {
90
90
  );
91
91
  if (plugin === undefined) {
92
92
  Logger.error(`Unknown layout type: ${selectedLayout}`);
93
- return undefined;
93
+ return null;
94
94
  }
95
95
  return {
96
96
  type: selectedLayout,
@@ -235,6 +235,14 @@ export function createNetworkRequests(): EditRequests & RunRequests {
235
235
  })
236
236
  .then(handleResponse);
237
237
  },
238
+ sendSearchFiles: async (request) => {
239
+ await waitForConnectionOpen();
240
+ return getClient()
241
+ .POST("/api/files/search", {
242
+ body: request,
243
+ })
244
+ .then(handleResponse);
245
+ },
238
246
  sendCreateFileOrFolder: async (request) => {
239
247
  await waitForConnectionOpen();
240
248
  return getClient()
@@ -60,6 +60,7 @@ export function createStaticRequests(): EditRequests & RunRequests {
60
60
  openFile: throwNotInEditMode,
61
61
  getUsageStats: throwNotInEditMode,
62
62
  sendListFiles: throwNotInEditMode,
63
+ sendSearchFiles: throwNotInEditMode,
63
64
  sendPdb: throwNotInEditMode,
64
65
  sendCreateFileOrFolder: throwNotInEditMode,
65
66
  sendDeleteFileOrFolder: throwNotInEditMode,
@@ -38,6 +38,7 @@ export function createErrorToastingRequests(
38
38
  openFile: "Failed to open file",
39
39
  getUsageStats: "", // No toast
40
40
  sendListFiles: "Failed to list files",
41
+ sendSearchFiles: "Failed to search files",
41
42
  sendPdb: "Failed to start debug session",
42
43
  sendCreateFileOrFolder: "Failed to create file or folder",
43
44
  sendDeleteFileOrFolder: "Failed to delete file or folder",
@@ -14,7 +14,7 @@ export type CellConfig = schemas["CellConfig"];
14
14
  * idle: not running.
15
15
  * disabled-transitively: disabled because an ancestor was disabled.
16
16
  */
17
- export type RuntimeState = schemas["RuntimeState"];
17
+ export type RuntimeState = schemas["CellOp"]["status"];
18
18
  export type CodeCompletionRequest = schemas["CodeCompletionRequest"];
19
19
  export type DeleteCellRequest = schemas["DeleteCellRequest"];
20
20
  export type ExecuteMultipleRequest = schemas["ExecuteMultipleRequest"];
@@ -32,6 +32,8 @@ export type FileDetailsResponse = schemas["FileDetailsResponse"];
32
32
  export type FileInfo = schemas["FileInfo"];
33
33
  export type FileListRequest = schemas["FileListRequest"];
34
34
  export type FileListResponse = schemas["FileListResponse"];
35
+ export type FileSearchRequest = schemas["FileSearchRequest"];
36
+ export type FileSearchResponse = schemas["FileSearchResponse"];
35
37
  export type FileMoveRequest = schemas["FileMoveRequest"];
36
38
  export type FileMoveResponse = schemas["FileMoveResponse"];
37
39
  export type FileUpdateRequest = schemas["FileUpdateRequest"];
@@ -144,6 +146,7 @@ export interface EditRequests {
144
146
  sendPdb: (request: PdbRequest) => Promise<null>;
145
147
  // File explorer requests
146
148
  sendListFiles: (request: FileListRequest) => Promise<FileListResponse>;
149
+ sendSearchFiles: (request: FileSearchRequest) => Promise<FileSearchResponse>;
147
150
  sendCreateFileOrFolder: (
148
151
  request: FileCreateRequest,
149
152
  ) => Promise<FileCreateResponse>;
@@ -21,6 +21,7 @@ import type {
21
21
  FileDetailsResponse,
22
22
  FileListResponse,
23
23
  FileMoveResponse,
24
+ FileSearchResponse,
24
25
  FileUpdateResponse,
25
26
  FormatResponse,
26
27
  RunRequests,
@@ -373,6 +374,14 @@ export class PyodideBridge implements RunRequests, EditRequests {
373
374
  return response as FileListResponse;
374
375
  };
375
376
 
377
+ sendSearchFiles: EditRequests["sendSearchFiles"] = async (request) => {
378
+ const response = await this.rpc.proxy.request.bridge({
379
+ functionName: "search_files",
380
+ payload: request,
381
+ });
382
+ return response as FileSearchResponse;
383
+ };
384
+
376
385
  sendComponentValues: RunRequests["sendComponentValues"] = async (request) => {
377
386
  await this.putControlRequest({
378
387
  ...request,
@@ -514,9 +523,16 @@ export class PyodideBridge implements RunRequests, EditRequests {
514
523
  return response;
515
524
  };
516
525
 
517
- getDependencyTree = async () => {
526
+ getDependencyTree: EditRequests["getDependencyTree"] = async () => {
518
527
  // WASM doesn't support dependency trees yet
519
- return { tree: undefined };
528
+ return {
529
+ tree: {
530
+ dependencies: [],
531
+ name: "",
532
+ tags: [],
533
+ version: null,
534
+ },
535
+ };
520
536
  };
521
537
 
522
538
  listSecretKeys: EditRequests["listSecretKeys"] = async (request) => {
@@ -6,6 +6,7 @@ import type { JsonString } from "@/utils/json/base64";
6
6
  import { invariant } from "../../../utils/invariant";
7
7
  import { Logger } from "../../../utils/Logger";
8
8
  import { WasmFileSystem } from "./fs";
9
+ import { getMarimoWheel } from "./getMarimoWheel";
9
10
  import { t } from "./tracer";
10
11
  import type { SerializedBridge, WasmController } from "./types";
11
12
 
@@ -57,7 +58,8 @@ export class DefaultWasmController implements WasmController {
57
58
  // Perf: These get loaded while pyodide is being bootstrapped
58
59
  packages: [
59
60
  "micropip",
60
- "marimo-base",
61
+ "msgspec",
62
+ getMarimoWheel(opts.version),
61
63
  "Markdown",
62
64
  "pymdown-extensions",
63
65
  "narwhals",
@@ -1,15 +1,10 @@
1
1
  /* Copyright 2024 Marimo. All rights reserved. */
2
+
2
3
  export function getMarimoWheel(version: string) {
3
- if (!version) {
4
- return "marimo-base>=0.9.0";
5
- }
6
- if (version === "local") {
4
+ if (import.meta.env.DEV && import.meta.env.VITE_MARIMO_VERSION) {
7
5
  return `http://localhost:8000/dist/marimo-${
8
6
  import.meta.env.VITE_MARIMO_VERSION
9
7
  }-py3-none-any.whl`;
10
8
  }
11
- if (version === "latest") {
12
- return "marimo-base";
13
- }
14
- return `marimo-base==${version}`;
9
+ return "marimo-base";
15
10
  }
@@ -16,6 +16,8 @@ import type {
16
16
  FileListResponse,
17
17
  FileMoveRequest,
18
18
  FileMoveResponse,
19
+ FileSearchRequest,
20
+ FileSearchResponse,
19
21
  FileUpdateRequest,
20
22
  FileUpdateResponse,
21
23
  FormatRequest,
@@ -72,6 +74,7 @@ export interface RawBridge {
72
74
  save_user_config(request: SaveUserConfigurationRequest): Promise<null>;
73
75
  rename_file(request: string): Promise<string>;
74
76
  list_files(request: FileListRequest): Promise<FileListResponse>;
77
+ search_files(request: FileSearchRequest): Promise<FileSearchResponse>;
75
78
  file_details(request: { path: string }): Promise<FileDetailsResponse>;
76
79
  create_file_or_directory(
77
80
  request: FileCreateRequest,
@@ -79,7 +79,7 @@ export function useMarimoWebSocket(opts: {
79
79
  const { setLayoutData } = useLayoutActions();
80
80
  const [connection, setConnection] = useAtom(connectionAtom);
81
81
  const { addBanner } = useBannersActions();
82
- const { addPackageAlert } = useAlertActions();
82
+ const { addPackageAlert, addStartupLog } = useAlertActions();
83
83
  const setKioskMode = useSetAtom(kioskModeAtom);
84
84
  const setCapabilities = useSetAtom(capabilitiesAtom);
85
85
  const runtimeManager = useRuntimeManager();
@@ -204,6 +204,12 @@ export function useMarimoWebSocket(opts: {
204
204
  kind: "installing",
205
205
  });
206
206
  return;
207
+ case "startup-logs":
208
+ addStartupLog({
209
+ content: msg.data.content,
210
+ status: msg.data.status,
211
+ });
212
+ return;
207
213
  case "query-params-append":
208
214
  queryParamHandlers.append(msg.data);
209
215
  return;
@@ -18,8 +18,8 @@
18
18
 
19
19
  &:focus-visible {
20
20
  /* focus-visible outlines the entire cell body in black, but the cell's
21
- * body is an irregular shape because of pseudo-elements that extend
22
- * its hit-box / hover area. */
21
+ * body is an irregular shape because of pseudo-elements that extend
22
+ * its hit-box / hover area. */
23
23
  outline: none;
24
24
  }
25
25
 
@@ -28,16 +28,19 @@
28
28
  }
29
29
 
30
30
  /* Hover z-index is higher than focus-within z-index
31
- * This is because you may hover for tooltip docs while
32
- * not focused in another cell.
33
- */
31
+ * This is because you may hover for tooltip docs while
32
+ * not focused in another cell.
33
+ */
34
+
34
35
  &:hover {
35
36
  z-index: 30;
36
37
  }
37
38
 
38
39
  /* Interactive */
40
+
39
41
  &.interactive {
40
42
  /* Only restrain output length in edit mode. */
43
+
41
44
  .output-area,
42
45
  .console-output-area {
43
46
  max-height: 610px;
@@ -45,6 +48,7 @@
45
48
  }
46
49
 
47
50
  /* Special case for particular components */
51
+
48
52
  .output-area:has(> .output > marimo-ui-element > marimo-table) {
49
53
  max-height: none;
50
54
  overflow: hidden;
@@ -71,14 +75,14 @@
71
75
  @apply shadow-lg-solid shadow-shade;
72
76
 
73
77
  /* a little bit of motion
74
- *
75
- * Note: we use left/top instead of transform because transform creates a new
76
- * stacking context and makes completion tooltip appear below surrounding
77
- * cells/outputs. See
78
- *
79
- * https://stackoverflow.com/questions/20851452/z-index-is-canceled-by-setting-transformrotate,
80
- * https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Positioning/Understanding_z_index/The_stacking_context
81
- * */
78
+ *
79
+ * Note: we use left/top instead of transform because transform creates a new
80
+ * stacking context and makes completion tooltip appear below surrounding
81
+ * cells/outputs. See
82
+ *
83
+ * https://stackoverflow.com/questions/20851452/z-index-is-canceled-by-setting-transformrotate,
84
+ * https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Positioning/Understanding_z_index/The_stacking_context
85
+ * */
82
86
  left: -1px;
83
87
  top: -1px;
84
88
  }
@@ -97,6 +101,7 @@
97
101
  }
98
102
 
99
103
  /* Stale styles for Cell */
104
+
100
105
  &.stale,
101
106
  &.disabled.stale {
102
107
  .output-area,
@@ -108,6 +113,7 @@
108
113
  }
109
114
 
110
115
  /* Disabled styles for Cell */
116
+
111
117
  &.disabled,
112
118
  &.disabled.has-error,
113
119
  &.disabled:hover,
@@ -127,6 +133,7 @@
127
133
  }
128
134
 
129
135
  /* Error styles for Cell, less precedence than needs run */
136
+
130
137
  &.has-error,
131
138
  &.error-outline {
132
139
  outline: 1px solid var(--red-4);
@@ -149,6 +156,7 @@
149
156
  }
150
157
 
151
158
  /* Needs Run */
159
+
152
160
  &.needs-run {
153
161
  /* TODO(akshayka): Can give this an outline to make more visible. */
154
162
  outline: none;
@@ -174,6 +182,7 @@
174
182
  }
175
183
 
176
184
  /* Focus state */
185
+
177
186
  &.focus-outline {
178
187
  transition: all 0.6s;
179
188
  border-color: var(--blue-8) !important;
@@ -183,21 +192,28 @@
183
192
  }
184
193
 
185
194
  /* Published - when its just the output */
195
+
186
196
  &.published {
187
197
  border: none;
188
198
  box-shadow: none;
189
199
 
190
200
  .output-area {
191
201
  /* flow-root interferes with margin collapsing, but appears to be unneeded
192
- * when cell outlines are hidden; clear:both is sufficient.
193
- *
194
- * if developers just use css-grid instead of float, this won't matter.
195
- * */
202
+ * when cell outlines are hidden; clear:both is sufficient.
203
+ *
204
+ * if developers just use css-grid instead of float, this won't matter.
205
+ * */
196
206
  display: block;
197
207
  padding-top: 0;
198
208
  padding-bottom: 0;
199
209
  border: none;
200
210
  box-shadow: none;
211
+
212
+ /*
213
+ do not restrict the dimensions when outlines are hidden,
214
+ otherwise text with a scrollbar w/o a container looks weird
215
+ */
216
+ overflow: visible;
201
217
  }
202
218
 
203
219
  &:hover {
@@ -211,6 +227,7 @@
211
227
  }
212
228
 
213
229
  /* Borderless styles for Cell */
230
+
214
231
  &.borderless {
215
232
  border-color: transparent;
216
233
  box-shadow: none;
@@ -220,6 +237,7 @@
220
237
  }
221
238
 
222
239
  /* Apply the original styles */
240
+
223
241
  &:hover {
224
242
  border: 1px solid var(--gray-4);
225
243
  @apply shadow-sm-solid shadow-shade;
@@ -227,6 +245,7 @@
227
245
  }
228
246
 
229
247
  /* -------------------------- Shoulders/Buttons ---------------------------- */
248
+
230
249
  .shoulder-right {
231
250
  display: inline-flex;
232
251
  flex-direction: column;
@@ -259,6 +278,7 @@
259
278
  }
260
279
 
261
280
  /* Apply the original styles */
281
+
262
282
  &:hover {
263
283
  border: 1px solid var(--gray-4);
264
284
  @apply shadow-sm-solid shadow-shade;
@@ -268,6 +288,7 @@
268
288
 
269
289
  #App.disconnected {
270
290
  /* Background determined by disconnected gradient/noise. */
291
+
271
292
  .marimo-cell,
272
293
  .console-output-area,
273
294
  .cm .cm-gutters,
@@ -278,6 +299,7 @@
278
299
  }
279
300
 
280
301
  /* Hide when disconnected. */
302
+
281
303
  .cell-running-icon,
282
304
  .cell-queued-icon,
283
305
  .elapsed-time {
@@ -306,6 +328,7 @@
306
328
  }
307
329
 
308
330
  /* expand the hover area left and right */
331
+
309
332
  &::before,
310
333
  &::after {
311
334
  content: "";
@@ -400,13 +423,11 @@
400
423
  padding: 1rem;
401
424
 
402
425
  /* Prevent floated elements from extending out of the output areas and into
403
- * the editor. */
426
+ * the editor. */
404
427
  clear: both;
405
428
  display: flow-root;
406
429
 
407
- /* TODO: Find a way to accommodate large elements, ideally in a way that
408
- * doesn't break margin collapse. Setting overflow (eg, overflow: auto)
409
- * breaks margin collapse. */
430
+ overflow: auto;
410
431
  }
411
432
 
412
433
  .marimo-output-stale,
@@ -67,7 +67,7 @@
67
67
  /* -- Panels -- */
68
68
 
69
69
  .cm .cm-panels {
70
- background: transparent;
70
+ background-color: var(--cm-background);
71
71
  color: var(--sky-11);
72
72
  font-weight: 700;
73
73
 
@@ -75,6 +75,10 @@
75
75
  margin-right: 30px;
76
76
 
77
77
  @apply text-xs;
78
+
79
+ &.cm-panels-bottom {
80
+ border-top: 1px solid var(--border);
81
+ }
78
82
  }
79
83
 
80
84
  /* -- Linting -- */
@@ -103,6 +103,9 @@
103
103
  hsl(0deg 0% 50% / 60%)
104
104
  );
105
105
  --base-shadow-opacity: 5%;
106
+
107
+ /* Codemirror editor */
108
+ --cm-background: light-dark(var(--background), #282c34);
106
109
  }
107
110
 
108
111
  .dark,
package/src/css/md.css CHANGED
@@ -268,7 +268,7 @@ button .prose.prose {
268
268
  }
269
269
 
270
270
  .prose span.critic::after {
271
- content: "\ab\00a0";
271
+ content: "ab\00a0";
272
272
  border-left: none;
273
273
  border-top-right-radius: 3px;
274
274
  border-bottom-right-radius: 3px;
@@ -5,7 +5,7 @@ import { z } from "zod";
5
5
  import { AudioRecorder } from "@/components/audio/audio-recorder";
6
6
  import { useAudioRecorder } from "@/hooks/useAudioRecorder";
7
7
  import type { IPlugin, IPluginProps } from "@/plugins/types";
8
- import { blobToBase64 } from "@/utils/fileToBase64";
8
+ import { blobToString } from "@/utils/fileToBase64";
9
9
  import { Labeled } from "./common/labeled";
10
10
 
11
11
  /**
@@ -33,7 +33,7 @@ const Microphone = ({ setValue, data }: IPluginProps<Value, Data>) => {
33
33
  const { start, stop, pauseResume, recordingStatus, recordingTime, allowed } =
34
34
  useAudioRecorder({
35
35
  onDone: async (file) => {
36
- const base64 = await blobToBase64(file);
36
+ const base64 = await blobToString(file, "base64");
37
37
  setValue(base64);
38
38
  },
39
39
  });
@@ -41,6 +41,7 @@ export const ChatPlugin = createPlugin<{ messages: ChatMessage[] }>(
41
41
  z.object({
42
42
  role: z.enum(["system", "user", "assistant"]),
43
43
  content: z.string(),
44
+ parts: z.array(z.any()),
44
45
  }),
45
46
  ),
46
47
  }),
@@ -56,15 +57,7 @@ export const ChatPlugin = createPlugin<{ messages: ChatMessage[] }>(
56
57
  z.object({
57
58
  role: z.enum(["system", "user", "assistant"]),
58
59
  content: z.string(),
59
- attachments: z
60
- .array(
61
- z.object({
62
- name: z.string().optional(),
63
- contentType: z.string().optional(),
64
- url: z.string(),
65
- }),
66
- )
67
- .optional(),
60
+ parts: z.array(z.any()),
68
61
  }),
69
62
  ),
70
63
  config: z.object({