@marimo-team/frontend 0.25.3-dev81 → 0.25.3-dev85
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.
- package/dist/assets/{CellStatus-DXroYLOP.js → CellStatus-DYRvLOiP.js} +1 -1
- package/dist/assets/{ErrorBoundary-DaQ9THH_.js → ErrorBoundary-BKQo68Df.js} +2 -2
- package/dist/assets/{JsonOutput-VxzHyItt.js → JsonOutput-3NheuQEt.js} +1 -1
- package/dist/assets/{MarimoErrorOutput-D-hLaDA-.js → MarimoErrorOutput-XrTcOYTI.js} +1 -1
- package/dist/assets/{RenderHTML-DjOEZL25.js → RenderHTML-DaVbCAsb.js} +1 -1
- package/dist/assets/{RunButton-CuhNTo5_.js → RunButton-D3ScLvwb.js} +1 -1
- package/dist/assets/{add-cell-with-ai-BbVntTh7.js → add-cell-with-ai-BKk0pvon.js} +1 -1
- package/dist/assets/{add-connection-dialog-Qf63aKV6.js → add-connection-dialog-CNIwGJVL.js} +1 -1
- package/dist/assets/{agent-panel-DMOfF3qF.js → agent-panel-BCCe7-0m.js} +1 -1
- package/dist/assets/{ai-model-dropdown-B15l0R62.js → ai-model-dropdown-prnCk5hq.js} +1 -1
- package/dist/assets/{app-config-button-BIMB8qjD.js → app-config-button-O_yI5nzB.js} +1 -1
- package/dist/assets/{blob-De9GR2s6.js → blob-FjxwDE1i.js} +1 -1
- package/dist/assets/{cell-editor-DFNLDjfX.js → cell-editor-B6Wvf232.js} +32 -11
- package/dist/assets/{cell-link-DR3W2HC7.js → cell-link-D8EbRFJJ.js} +1 -1
- package/dist/assets/{cells-styV7IX8.js → cells-DfF1DLV_.js} +1 -1
- package/dist/assets/{chat-display-BzdYdN39.js → chat-display-BtQI9LeB.js} +1 -1
- package/dist/assets/{chat-panel-De3YzkSF.js → chat-panel-tuUN0wet.js} +1 -1
- package/dist/assets/{chat-ui-NTNapdtP.js → chat-ui-Bb-HxAv4.js} +1 -1
- package/dist/assets/{code-visibility-csc3tgA0.js → code-visibility-ny5n3-GH.js} +1 -1
- package/dist/assets/{column-preview-DkH-oD8f.js → column-preview-BNPxoRnw.js} +1 -1
- package/dist/assets/{command-palette-OOQHBTnr.js → command-palette-CFLLUKbE.js} +1 -1
- package/dist/assets/{common-D7VAS6rd.js → common-D2oGA09G.js} +1 -1
- package/dist/assets/{components-CNmvC781.js → components-1zsrzJ_K.js} +1 -1
- package/dist/assets/config-BWKfkUWA.js +1 -0
- package/dist/assets/{config-BbRbT9Ww.js → config-CP8Y8_R0.js} +1 -1
- package/dist/assets/{datasource-C3yfeDa2.js → datasource-rV_-mqbc.js} +1 -1
- package/dist/assets/{dependency-graph-panel-CjoA6L0w.js → dependency-graph-panel-By-cv0Nw.js} +1 -1
- package/dist/assets/{documentation-panel-DHWFOiG1.js → documentation-panel-DHMjvOPt.js} +1 -1
- package/dist/assets/{download-BrCpRZKN.js → download-CMTzX3rG.js} +1 -1
- package/dist/assets/{edit-page-DafDcIAI.js → edit-page-Bh44QoBu.js} +4 -4
- package/dist/assets/{error-entries-BkEAmmnD.js → error-entries-BGCjRkVy.js} +1 -1
- package/dist/assets/{error-panel-BhTfPA_i.js → error-panel-BDTFHLEt.js} +1 -1
- package/dist/assets/{feedback-button-D9InK87G.js → feedback-button-C-ScLxY2.js} +1 -1
- package/dist/assets/feedback-button-CLRAP9DE.js +1 -0
- package/dist/assets/{file-explorer-panel-BSd_ZbUC.js → file-explorer-panel-CAq2LZFc.js} +1 -1
- package/dist/assets/{file-name-input-RHURglL_.js → file-name-input-DIvrcC82.js} +1 -1
- package/dist/assets/{floating-outline-Cm49rYYe.js → floating-outline-DJnZ45VA.js} +1 -1
- package/dist/assets/{gallery-page-DdMdOtdv.js → gallery-page-CHJD1mdU.js} +1 -1
- package/dist/assets/{glide-data-editor-eiSlEUyR.js → glide-data-editor-BsE9Em-a.js} +1 -1
- package/dist/assets/{home-page-DwWvBB0R.js → home-page-CCbdig5p.js} +1 -1
- package/dist/assets/{hooks-C4GjmtQ-.js → hooks-BPw6SVXo.js} +1 -1
- package/dist/assets/{index-jR_KRDMC.js → index-D2O1B6ZY.js} +7 -7
- package/dist/assets/{layout-Bq7wRzdR.js → layout-NkCTvSyj.js} +3 -3
- package/dist/assets/{logs-panel-CAAk72Gb.js → logs-panel-B34vxRV7.js} +1 -1
- package/dist/assets/{markdown-renderer-CAyCgogC.js → markdown-renderer-CkN_xAjW.js} +1 -1
- package/dist/assets/{name-cell-input-DA8hU9XT.js → name-cell-input-eyYneuGK.js} +1 -1
- package/dist/assets/{outline-panel-Cc5oQ4LL.js → outline-panel-rpjpMDYX.js} +1 -1
- package/dist/assets/{packages-panel-DTfKez6I.js → packages-panel-gXdFgCro.js} +1 -1
- package/dist/assets/{panel-accordion-state-BZHex38W.js → panel-accordion-state-CImIsdc8.js} +1 -1
- package/dist/assets/panels-CiR0Zzhg.js +105 -0
- package/dist/assets/{process-output-CrDc_O1D.js → process-output-BClx23Jv.js} +1 -1
- package/dist/assets/{readonly-code-display-BR-_jUj8.js → readonly-code-display-JC_YsLL_.js} +1 -1
- package/dist/assets/{readonly-python-code-D7jcy9ds.js → readonly-python-code-DeBED4OB.js} +1 -1
- package/dist/assets/{reveal-component-BWu6kkxZ.js → reveal-component-D2xhcDzw.js} +1 -1
- package/dist/assets/{run-page-BJq9MULx.js → run-page-B9Jb5LMt.js} +1 -1
- package/dist/assets/{runtime-details-state-hb7A1jgR.js → runtime-details-state-7JHj3efu.js} +1 -1
- package/dist/assets/{scratchpad-panel-OHQ7Z0RY.js → scratchpad-panel-B_xrdEvJ.js} +1 -1
- package/dist/assets/{session-panel-DmDjaPsN.js → session-panel-DwuCGJU1.js} +1 -1
- package/dist/assets/{snippets-panel-o9KL5jMi.js → snippets-panel-BNjtDbnR.js} +1 -1
- package/dist/assets/{state-BkAqJoW7.js → state-DUP4ToPd.js} +1 -1
- package/dist/assets/{state-Os7LSUUZ.js → state-DhaPGGBO.js} +1 -1
- package/dist/assets/{terminal-BI85khrS.js → terminal-BwLC9HS5.js} +1 -1
- package/dist/assets/{tracing-AsNGuDsh.js → tracing-Ch4LR62-.js} +1 -1
- package/dist/assets/{tracing-panel-CBcmea6L.js → tracing-panel-B8fX4PhX.js} +2 -2
- package/dist/assets/{tree-actions-Cx5EDpA6.js → tree-actions-Zg3Ycse4.js} +1 -1
- package/dist/assets/{useAddCell-uJJYtgwa.js → useAddCell-BX9lq_0J.js} +1 -1
- package/dist/assets/{useBoolean-8wlrTeus.js → useBoolean-WABMLM83.js} +1 -1
- package/dist/assets/{useCellActionButton-CmQ-OcPa.js → useCellActionButton-D7Ruyes-.js} +1 -1
- package/dist/assets/{useDeleteCell-CXgOCDqY.js → useDeleteCell-AbkQI6-c.js} +1 -1
- package/dist/assets/{useDependencyPanelTab-Ch6gm7uM.js → useDependencyPanelTab-B0b2KkvS.js} +1 -1
- package/dist/assets/{useInstallPackage-CYQoMdMQ.js → useInstallPackage-CWcPxSLP.js} +1 -1
- package/dist/assets/{useNotebookActions-CqXa3U6u.js → useNotebookActions-DNuGk3m2.js} +1 -1
- package/dist/assets/{useRunCells-DAfDmOMC.js → useRunCells-CV81rge-.js} +1 -1
- package/dist/assets/{useSplitCell-NLULgcq7.js → useSplitCell-BTwCB3JS.js} +1 -1
- package/dist/assets/{vega-component-BKJU3uaB.js → vega-component-CY6HmM06.js} +1 -1
- package/dist/index.html +24 -24
- package/package.json +1 -1
- package/src/core/host/AGENTS.md +6 -5
- package/src/core/host/connection.ts +1 -40
- package/src/core/runtime/__tests__/createWsUrl.test.ts +77 -7
- package/src/core/runtime/__tests__/runtime.test.ts +13 -5
- package/src/core/runtime/runtime.ts +23 -27
- package/src/core/wasm/bridge.ts +0 -8
- package/src/core/websocket/__tests__/connection-state.test.ts +0 -12
- package/src/core/websocket/connection-state.ts +0 -10
- package/dist/assets/config-BQT0uYUo.js +0 -1
- package/dist/assets/feedback-button-BAcClv7c.js +0 -1
- package/dist/assets/panels-Cnu2Flfw.js +0 -105
- package/dist/assets/ws-BXWY541V.js +0 -22
- package/src/core/host/__tests__/events.test.ts +0 -49
- package/src/core/host/events.ts +0 -68
- package/src/core/websocket/__tests__/createConnectionTransport.test.ts +0 -49
- package/src/core/websocket/transports/__tests__/basic.test.ts +0 -275
- package/src/core/websocket/transports/__tests__/sse.test.ts +0 -352
- package/src/core/websocket/transports/__tests__/transport.test.ts +0 -308
- package/src/core/websocket/transports/__tests__/ws.test.ts +0 -125
- package/src/core/websocket/transports/basic.ts +0 -102
- package/src/core/websocket/transports/create.ts +0 -31
- package/src/core/websocket/transports/sse.ts +0 -320
- package/src/core/websocket/transports/transport.ts +0 -50
- package/src/core/websocket/transports/ws.ts +0 -98
package/dist/index.html
CHANGED
|
@@ -66,7 +66,7 @@
|
|
|
66
66
|
<marimo-server-token data-token="{{ server_token }}" hidden></marimo-server-token>
|
|
67
67
|
<!-- /TODO -->
|
|
68
68
|
<title>{{ title }}</title>
|
|
69
|
-
<script type="module" crossorigin src="./assets/index-
|
|
69
|
+
<script type="module" crossorigin src="./assets/index-D2O1B6ZY.js"></script>
|
|
70
70
|
<link rel="modulepreload" crossorigin href="./assets/rolldown-runtime-B0Z9INg1.js">
|
|
71
71
|
<link rel="modulepreload" crossorigin href="./assets/react-DVplv7_D.js">
|
|
72
72
|
<link rel="modulepreload" crossorigin href="./assets/compiler-runtime-BrajqUja.js">
|
|
@@ -86,7 +86,7 @@
|
|
|
86
86
|
<link rel="modulepreload" crossorigin href="./assets/utils-B4K466FK.js">
|
|
87
87
|
<link rel="modulepreload" crossorigin href="./assets/session-B8Y-GJnS.js">
|
|
88
88
|
<link rel="modulepreload" crossorigin href="./assets/Deferred-CrTnjj37.js">
|
|
89
|
-
<link rel="modulepreload" crossorigin href="./assets/config-
|
|
89
|
+
<link rel="modulepreload" crossorigin href="./assets/config-BWKfkUWA.js">
|
|
90
90
|
<link rel="modulepreload" crossorigin href="./assets/clsx-DB0hHKMi.js">
|
|
91
91
|
<link rel="modulepreload" crossorigin href="./assets/cn-ldLVeaqm.js">
|
|
92
92
|
<link rel="modulepreload" crossorigin href="./assets/jsx-runtime-B74pBk57.js">
|
|
@@ -139,7 +139,7 @@
|
|
|
139
139
|
<link rel="modulepreload" crossorigin href="./assets/useTheme-DLtPc-39.js">
|
|
140
140
|
<link rel="modulepreload" crossorigin href="./assets/useAsyncData-DhhdOGGd.js">
|
|
141
141
|
<link rel="modulepreload" crossorigin href="./assets/purify.es--06brOip.js">
|
|
142
|
-
<link rel="modulepreload" crossorigin href="./assets/cells-
|
|
142
|
+
<link rel="modulepreload" crossorigin href="./assets/cells-DfF1DLV_.js">
|
|
143
143
|
<link rel="modulepreload" crossorigin href="./assets/coerce-DWjFeXOY.js">
|
|
144
144
|
<link rel="modulepreload" crossorigin href="./assets/get-DjNf4SIX.js">
|
|
145
145
|
<link rel="modulepreload" crossorigin href="./assets/_hasPath-BmRQipI0.js">
|
|
@@ -147,47 +147,47 @@
|
|
|
147
147
|
<link rel="modulepreload" crossorigin href="./assets/_baseSet-Bpdo9AvU.js">
|
|
148
148
|
<link rel="modulepreload" crossorigin href="./assets/pick-DKIID_Mo.js">
|
|
149
149
|
<link rel="modulepreload" crossorigin href="./assets/errors-CNsgAw6m.js">
|
|
150
|
-
<link rel="modulepreload" crossorigin href="./assets/config-
|
|
150
|
+
<link rel="modulepreload" crossorigin href="./assets/config-CP8Y8_R0.js">
|
|
151
151
|
<link rel="modulepreload" crossorigin href="./assets/state-C0irhlOZ.js">
|
|
152
152
|
<link rel="modulepreload" crossorigin href="./assets/state-DaWgt-rn.js">
|
|
153
153
|
<link rel="modulepreload" crossorigin href="./assets/LazyAnyLanguageCodeMirror-BPYE76jR.js">
|
|
154
154
|
<link rel="modulepreload" crossorigin href="./assets/copy-KlhazlhB.js">
|
|
155
155
|
<link rel="modulepreload" crossorigin href="./assets/micromark-factory-space-D9Dr-k4J.js">
|
|
156
156
|
<link rel="modulepreload" crossorigin href="./assets/chunk-YOKDWASO-BIpRENEC.js">
|
|
157
|
-
<link rel="modulepreload" crossorigin href="./assets/markdown-renderer-
|
|
157
|
+
<link rel="modulepreload" crossorigin href="./assets/markdown-renderer-CkN_xAjW.js">
|
|
158
158
|
<link rel="modulepreload" crossorigin href="./assets/copy-Djr5m5ac.js">
|
|
159
159
|
<link rel="modulepreload" crossorigin href="./assets/copy-icon-8-a5vovc.js">
|
|
160
|
-
<link rel="modulepreload" crossorigin href="./assets/useRunCells-
|
|
161
|
-
<link rel="modulepreload" crossorigin href="./assets/RenderHTML-
|
|
162
|
-
<link rel="modulepreload" crossorigin href="./assets/blob-
|
|
160
|
+
<link rel="modulepreload" crossorigin href="./assets/useRunCells-CV81rge-.js">
|
|
161
|
+
<link rel="modulepreload" crossorigin href="./assets/RenderHTML-DaVbCAsb.js">
|
|
162
|
+
<link rel="modulepreload" crossorigin href="./assets/blob-FjxwDE1i.js">
|
|
163
163
|
<link rel="modulepreload" crossorigin href="./assets/kbd-pdKBv96t.js">
|
|
164
|
-
<link rel="modulepreload" crossorigin href="./assets/useInstallPackage-
|
|
164
|
+
<link rel="modulepreload" crossorigin href="./assets/useInstallPackage-CWcPxSLP.js">
|
|
165
165
|
<link rel="modulepreload" crossorigin href="./assets/share-BZW3tzEX.js">
|
|
166
166
|
<link rel="modulepreload" crossorigin href="./assets/events-CbeVJ6OD.js">
|
|
167
|
-
<link rel="modulepreload" crossorigin href="./assets/state-
|
|
168
|
-
<link rel="modulepreload" crossorigin href="./assets/ErrorBoundary-
|
|
167
|
+
<link rel="modulepreload" crossorigin href="./assets/state-DUP4ToPd.js">
|
|
168
|
+
<link rel="modulepreload" crossorigin href="./assets/ErrorBoundary-BKQo68Df.js">
|
|
169
169
|
<link rel="modulepreload" crossorigin href="./assets/chevron-right-eAtVhbNZ.js">
|
|
170
170
|
<link rel="modulepreload" crossorigin href="./assets/dropdown-menu-DS6umAnH.js">
|
|
171
171
|
<link rel="modulepreload" crossorigin href="./assets/html-to-image-D_0rd3_B.js">
|
|
172
|
-
<link rel="modulepreload" crossorigin href="./assets/download-
|
|
172
|
+
<link rel="modulepreload" crossorigin href="./assets/download-CMTzX3rG.js">
|
|
173
173
|
<link rel="modulepreload" crossorigin href="./assets/switch-IoWE8PbW.js">
|
|
174
174
|
<link rel="modulepreload" crossorigin href="./assets/tabs-CY8E4r9U.js">
|
|
175
175
|
<link rel="modulepreload" crossorigin href="./assets/table-DG7Ap4H4.js">
|
|
176
176
|
<link rel="modulepreload" crossorigin href="./assets/eye-off-CxVozGAC.js">
|
|
177
177
|
<link rel="modulepreload" crossorigin href="./assets/refresh-cw-Qw1f8Jhy.js">
|
|
178
|
-
<link rel="modulepreload" crossorigin href="./assets/tree-actions-
|
|
178
|
+
<link rel="modulepreload" crossorigin href="./assets/tree-actions-Zg3Ycse4.js">
|
|
179
179
|
<link rel="modulepreload" crossorigin href="./assets/ellipsis-63DyBLHQ.js">
|
|
180
180
|
<link rel="modulepreload" crossorigin href="./assets/external-link-UrX9KO36.js">
|
|
181
181
|
<link rel="modulepreload" crossorigin href="./assets/spinner-DyNE-o8o.js">
|
|
182
182
|
<link rel="modulepreload" crossorigin href="./assets/message-circle-C3rKm8_a.js">
|
|
183
183
|
<link rel="modulepreload" crossorigin href="./assets/hat-glasses-C8RhSVii.js">
|
|
184
184
|
<link rel="modulepreload" crossorigin href="./assets/package-GSoSTiIK.js">
|
|
185
|
-
<link rel="modulepreload" crossorigin href="./assets/datasource-
|
|
186
|
-
<link rel="modulepreload" crossorigin href="./assets/error-entries-
|
|
185
|
+
<link rel="modulepreload" crossorigin href="./assets/datasource-rV_-mqbc.js">
|
|
186
|
+
<link rel="modulepreload" crossorigin href="./assets/error-entries-BGCjRkVy.js">
|
|
187
187
|
<link rel="modulepreload" crossorigin href="./assets/alert-DTaqCu_d.js">
|
|
188
|
-
<link rel="modulepreload" crossorigin href="./assets/state-
|
|
189
|
-
<link rel="modulepreload" crossorigin href="./assets/cell-link-
|
|
190
|
-
<link rel="modulepreload" crossorigin href="./assets/MarimoErrorOutput-
|
|
188
|
+
<link rel="modulepreload" crossorigin href="./assets/state-DhaPGGBO.js">
|
|
189
|
+
<link rel="modulepreload" crossorigin href="./assets/cell-link-D8EbRFJJ.js">
|
|
190
|
+
<link rel="modulepreload" crossorigin href="./assets/MarimoErrorOutput-XrTcOYTI.js">
|
|
191
191
|
<link rel="modulepreload" crossorigin href="./assets/useDateFormatter-DA-62E-Y.js">
|
|
192
192
|
<link rel="modulepreload" crossorigin href="./assets/en-US-Buu61juQ.js">
|
|
193
193
|
<link rel="modulepreload" crossorigin href="./assets/isValid-q_Ad80ug.js">
|
|
@@ -207,13 +207,13 @@
|
|
|
207
207
|
<link rel="modulepreload" crossorigin href="./assets/table-vrvqpuKJ.js">
|
|
208
208
|
<link rel="modulepreload" crossorigin href="./assets/react-resizable-panels.browser.esm-Dbe0MrFr.js">
|
|
209
209
|
<link rel="modulepreload" crossorigin href="./assets/useStateForKey-CGMJQT8x.js">
|
|
210
|
-
<link rel="modulepreload" crossorigin href="./assets/JsonOutput-
|
|
210
|
+
<link rel="modulepreload" crossorigin href="./assets/JsonOutput-3NheuQEt.js">
|
|
211
211
|
<link rel="modulepreload" crossorigin href="./assets/chart-no-axes-column-C4_v6fQW.js">
|
|
212
212
|
<link rel="modulepreload" crossorigin href="./assets/square-function-_W_Lo0P4.js">
|
|
213
213
|
<link rel="modulepreload" crossorigin href="./assets/spec-uCpVvaAR.js">
|
|
214
214
|
<link rel="modulepreload" crossorigin href="./assets/semaphore-BjoL5P0h.js">
|
|
215
215
|
<link rel="modulepreload" crossorigin href="./assets/fileToBase64-BgBraYAr.js">
|
|
216
|
-
<link rel="modulepreload" crossorigin href="./assets/useBoolean-
|
|
216
|
+
<link rel="modulepreload" crossorigin href="./assets/useBoolean-WABMLM83.js">
|
|
217
217
|
<link rel="modulepreload" crossorigin href="./assets/code-xml-SQaZqvcO.js">
|
|
218
218
|
<link rel="modulepreload" crossorigin href="./assets/file-headphone-Dl35U6h3.js">
|
|
219
219
|
<link rel="modulepreload" crossorigin href="./assets/file-BPBVl9pl.js">
|
|
@@ -221,11 +221,11 @@
|
|
|
221
221
|
<link rel="modulepreload" crossorigin href="./assets/file-icons-CdJgUy-I.js">
|
|
222
222
|
<link rel="modulepreload" crossorigin href="./assets/globe-UdPdIbF7.js">
|
|
223
223
|
<link rel="modulepreload" crossorigin href="./assets/esm-CI_o7NhW.js">
|
|
224
|
-
<link rel="modulepreload" crossorigin href="./assets/useAddCell-
|
|
225
|
-
<link rel="modulepreload" crossorigin href="./assets/readonly-python-code-
|
|
224
|
+
<link rel="modulepreload" crossorigin href="./assets/useAddCell-BX9lq_0J.js">
|
|
225
|
+
<link rel="modulepreload" crossorigin href="./assets/readonly-python-code-DeBED4OB.js">
|
|
226
226
|
<link rel="modulepreload" crossorigin href="./assets/data-grid-types-DgHVN_Zz.js">
|
|
227
227
|
<link rel="modulepreload" crossorigin href="./assets/glide-utils-HFqhvWHI.js">
|
|
228
|
-
<link rel="modulepreload" crossorigin href="./assets/column-preview-
|
|
228
|
+
<link rel="modulepreload" crossorigin href="./assets/column-preview-BNPxoRnw.js">
|
|
229
229
|
<link rel="modulepreload" crossorigin href="./assets/square-BPmgQFnh.js">
|
|
230
230
|
<link rel="modulepreload" crossorigin href="./assets/triangle-alert-DmIqR8sY.js">
|
|
231
231
|
<link rel="modulepreload" crossorigin href="./assets/prop-types-Djf4O40e.js">
|
|
@@ -238,7 +238,7 @@
|
|
|
238
238
|
<link rel="modulepreload" crossorigin href="./assets/useDeepCompareMemoize-DFIVN9dn.js">
|
|
239
239
|
<link rel="modulepreload" crossorigin href="./assets/useDelayElapsed-BlsDT4TV.js">
|
|
240
240
|
<link rel="modulepreload" crossorigin href="./assets/pathUtils-DPmlLd-r.js">
|
|
241
|
-
<link rel="modulepreload" crossorigin href="./assets/floating-outline-
|
|
241
|
+
<link rel="modulepreload" crossorigin href="./assets/floating-outline-DJnZ45VA.js">
|
|
242
242
|
<link rel="stylesheet" crossorigin href="./assets/cells-0PFKL3SH.css">
|
|
243
243
|
<link rel="stylesheet" crossorigin href="./assets/markdown-renderer-DjIHoF9Z.css">
|
|
244
244
|
<link rel="stylesheet" crossorigin href="./assets/JsonOutput-B0GmlMnR.css">
|
package/package.json
CHANGED
package/src/core/host/AGENTS.md
CHANGED
|
@@ -5,11 +5,12 @@ Production code may import host modules, `@marimo-team/client`,
|
|
|
5
5
|
`marimo/host-imports`. Tests are exempt.
|
|
6
6
|
|
|
7
7
|
The protocol schemas and types live in `@marimo-team/client/protocol`.
|
|
8
|
-
The native `marimo` event is a marimo extension and is defined in `events.ts`.
|
|
9
8
|
|
|
10
9
|
Define interfaces here and inject application behavior through adapters.
|
|
11
10
|
|
|
12
|
-
`
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
11
|
+
`notebook-client.ts` follows the notebook with `NotebookEvents` from
|
|
12
|
+
`@marimo-team/client`, over a `NotebookTransport` the editor supplies. The
|
|
13
|
+
editor's transports for its session routes live in
|
|
14
|
+
`core/websocket/transports/notebook.ts`. Each kind of object is a `NotebookResource`
|
|
15
|
+
in `resources/` with pure handlers keyed by event name, composed with
|
|
16
|
+
`createNotebookReducer`. The client holds one state atom and exposes derived atoms.
|
|
@@ -37,45 +37,6 @@ export type ConnectionStatus =
|
|
|
37
37
|
|
|
38
38
|
/** The recovery policy for a closed connection. */
|
|
39
39
|
export interface CloseDecision {
|
|
40
|
-
kind: "terminal" | "
|
|
40
|
+
kind: "terminal" | "retry";
|
|
41
41
|
status: ConnectionStatus;
|
|
42
42
|
}
|
|
43
|
-
|
|
44
|
-
export type ConnectionEvent = "open" | "close" | "message" | "error";
|
|
45
|
-
|
|
46
|
-
export interface IConnectionTransportMap {
|
|
47
|
-
open: WebSocketEventMap["open"];
|
|
48
|
-
message: WebSocketEventMap["message"];
|
|
49
|
-
close: WebSocketEventMap["close"];
|
|
50
|
-
error: WebSocketEventMap["error"];
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
export type ConnectionTransportCallback<T extends ConnectionEvent> = (
|
|
54
|
-
data: IConnectionTransportMap[T],
|
|
55
|
-
) => void;
|
|
56
|
-
|
|
57
|
-
/** Transport readiness, using the WebSocket readyState values. */
|
|
58
|
-
export const TransportReadyState = {
|
|
59
|
-
CONNECTING: 0,
|
|
60
|
-
OPEN: 1,
|
|
61
|
-
CLOSING: 2,
|
|
62
|
-
CLOSED: 3,
|
|
63
|
-
} as const;
|
|
64
|
-
|
|
65
|
-
export type TransportReadyState =
|
|
66
|
-
(typeof TransportReadyState)[keyof typeof TransportReadyState];
|
|
67
|
-
|
|
68
|
-
/** A reconnectable source of notebook messages. */
|
|
69
|
-
export interface NotebookTransport {
|
|
70
|
-
reconnect(code?: number | undefined, reason?: string | undefined): void;
|
|
71
|
-
close(): void;
|
|
72
|
-
addEventListener<T extends ConnectionEvent>(
|
|
73
|
-
event: T,
|
|
74
|
-
callback: ConnectionTransportCallback<T>,
|
|
75
|
-
): void;
|
|
76
|
-
removeEventListener<T extends ConnectionEvent>(
|
|
77
|
-
event: T,
|
|
78
|
-
callback: ConnectionTransportCallback<T>,
|
|
79
|
-
): void;
|
|
80
|
-
readyState: TransportReadyState;
|
|
81
|
-
}
|
|
@@ -13,7 +13,9 @@ describe("RuntimeManager.getWsURL", () => {
|
|
|
13
13
|
});
|
|
14
14
|
const sessionId = "1234" as SessionId;
|
|
15
15
|
const url = runtime.getWsURL(sessionId);
|
|
16
|
-
expect(url.toString()).toBe(
|
|
16
|
+
expect(url.toString()).toBe(
|
|
17
|
+
"wss://marimo.app/ws?query_params=&session_id=1234",
|
|
18
|
+
);
|
|
17
19
|
expect(url.searchParams.get(KnownQueryParams.sessionId)).toBe(sessionId);
|
|
18
20
|
});
|
|
19
21
|
|
|
@@ -24,7 +26,9 @@ describe("RuntimeManager.getWsURL", () => {
|
|
|
24
26
|
});
|
|
25
27
|
const sessionId = "1234" as SessionId;
|
|
26
28
|
const url = runtime.getWsURL(sessionId);
|
|
27
|
-
expect(url.toString()).toBe(
|
|
29
|
+
expect(url.toString()).toBe(
|
|
30
|
+
"ws://marimo.app/ws?query_params=&session_id=1234",
|
|
31
|
+
);
|
|
28
32
|
expect(url.searchParams.get(KnownQueryParams.sessionId)).toBe(sessionId);
|
|
29
33
|
});
|
|
30
34
|
|
|
@@ -35,7 +39,9 @@ describe("RuntimeManager.getWsURL", () => {
|
|
|
35
39
|
});
|
|
36
40
|
const sessionId = "1234" as SessionId;
|
|
37
41
|
const url = runtime.getWsURL(sessionId);
|
|
38
|
-
expect(url.toString()).toBe(
|
|
42
|
+
expect(url.toString()).toBe(
|
|
43
|
+
"ws://marimo.app/nested/ws?query_params=&session_id=1234",
|
|
44
|
+
);
|
|
39
45
|
expect(url.searchParams.get(KnownQueryParams.sessionId)).toBe(sessionId);
|
|
40
46
|
});
|
|
41
47
|
|
|
@@ -48,7 +54,7 @@ describe("RuntimeManager.getWsURL", () => {
|
|
|
48
54
|
const sessionId = "1234" as SessionId;
|
|
49
55
|
const url = runtime.getWsURL(sessionId);
|
|
50
56
|
expect(url.toString()).toBe(
|
|
51
|
-
"ws://marimo.app/nested/ws?foo=bar&file=test.py&session_id=1234",
|
|
57
|
+
"ws://marimo.app/nested/ws?foo=bar&file=test.py&query_params=foo%3Dbar%26file%3Dtest.py&session_id=1234",
|
|
52
58
|
);
|
|
53
59
|
expect(url.searchParams.get(KnownQueryParams.sessionId)).toBe(sessionId);
|
|
54
60
|
});
|
|
@@ -62,11 +68,75 @@ describe("RuntimeManager.getWsURL", () => {
|
|
|
62
68
|
const sessionId = "1234" as SessionId;
|
|
63
69
|
const url = runtime.getWsURL(sessionId);
|
|
64
70
|
expect(url.toString()).toBe(
|
|
65
|
-
"ws://marimo.app/ws?file=test.py&
|
|
71
|
+
"ws://marimo.app/ws?file=test.py&query_params=file%3Dtest.py%26search%3Dtest%26other%3Dlast&session_id=1234",
|
|
66
72
|
);
|
|
67
73
|
expect(url.searchParams.get("file")).toBe("test.py");
|
|
68
|
-
expect(url.searchParams.get("
|
|
69
|
-
|
|
74
|
+
expect(url.searchParams.get("query_params")).toBe(
|
|
75
|
+
"file=test.py&search=test&other=last",
|
|
76
|
+
);
|
|
70
77
|
expect(url.searchParams.get(KnownQueryParams.sessionId)).toBe(sessionId);
|
|
71
78
|
});
|
|
72
79
|
});
|
|
80
|
+
|
|
81
|
+
describe.each(["getWsURL", "getSseURL"] as const)(
|
|
82
|
+
"RuntimeManager.%s",
|
|
83
|
+
(method) => {
|
|
84
|
+
it("preserves runtime parameters and repeated page values", () => {
|
|
85
|
+
window.history.pushState({}, "", "/?tag=page-one&tag=page-two");
|
|
86
|
+
const runtime = new RuntimeManager(
|
|
87
|
+
{
|
|
88
|
+
url: `${window.location.origin}/nested?proxy_token=secret&tag=base&base=one&base=two`,
|
|
89
|
+
lazy: true,
|
|
90
|
+
},
|
|
91
|
+
true,
|
|
92
|
+
);
|
|
93
|
+
const url = runtime[method]("session" as SessionId);
|
|
94
|
+
expect([...url.searchParams]).toEqual([
|
|
95
|
+
["proxy_token", "secret"],
|
|
96
|
+
["tag", "base"],
|
|
97
|
+
["base", "one"],
|
|
98
|
+
["base", "two"],
|
|
99
|
+
[
|
|
100
|
+
"query_params",
|
|
101
|
+
"proxy_token=secret&base=one&base=two&tag=page-one&tag=page-two",
|
|
102
|
+
],
|
|
103
|
+
["session_id", "session"],
|
|
104
|
+
]);
|
|
105
|
+
});
|
|
106
|
+
|
|
107
|
+
it("keeps notebook parameters out of the stream options", () => {
|
|
108
|
+
const notebookParams = new URLSearchParams([
|
|
109
|
+
["types", "scatter"],
|
|
110
|
+
["cursor", "page-2"],
|
|
111
|
+
["run_id", "experiment"],
|
|
112
|
+
["query_params", "nested=value&other=1"],
|
|
113
|
+
["tag", "one"],
|
|
114
|
+
["tag", "two"],
|
|
115
|
+
["empty", ""],
|
|
116
|
+
["text", "a+b & café"],
|
|
117
|
+
["file", "test.py"],
|
|
118
|
+
["kiosk", "true"],
|
|
119
|
+
]);
|
|
120
|
+
window.history.pushState(
|
|
121
|
+
{},
|
|
122
|
+
"",
|
|
123
|
+
`/?${notebookParams}&session_id=page-session`,
|
|
124
|
+
);
|
|
125
|
+
const runtime = new RuntimeManager(
|
|
126
|
+
{ url: window.location.origin, lazy: true },
|
|
127
|
+
true,
|
|
128
|
+
);
|
|
129
|
+
const url = runtime[method]("actual-session" as SessionId);
|
|
130
|
+
|
|
131
|
+
expect(Object.fromEntries(url.searchParams)).toEqual({
|
|
132
|
+
file: "test.py",
|
|
133
|
+
kiosk: "true",
|
|
134
|
+
session_id: "actual-session",
|
|
135
|
+
query_params: notebookParams.toString(),
|
|
136
|
+
});
|
|
137
|
+
expect([
|
|
138
|
+
...new URLSearchParams(url.searchParams.get("query_params") ?? ""),
|
|
139
|
+
]).toEqual([...notebookParams]);
|
|
140
|
+
});
|
|
141
|
+
},
|
|
142
|
+
);
|
|
@@ -249,7 +249,8 @@ describe("RuntimeManager", () => {
|
|
|
249
249
|
const url = runtime.getSseURL("s_123" as SessionId);
|
|
250
250
|
|
|
251
251
|
expect(url.searchParams.get("access_token")).toBeNull();
|
|
252
|
-
expect(url.searchParams.get("
|
|
252
|
+
expect(url.searchParams.get("query_params")).toBe("foo=bar");
|
|
253
|
+
expect(url.toString()).not.toContain("page-token");
|
|
253
254
|
} finally {
|
|
254
255
|
window.history.pushState({}, "", original);
|
|
255
256
|
}
|
|
@@ -669,9 +670,16 @@ describe("RuntimeManager", () => {
|
|
|
669
670
|
expect(httpUrl.searchParams.get("base_param")).toBe("existing");
|
|
670
671
|
|
|
671
672
|
// Should preserve all window-level query params (including custom ones)
|
|
672
|
-
expect(
|
|
673
|
-
|
|
674
|
-
|
|
673
|
+
expect(
|
|
674
|
+
Object.fromEntries(
|
|
675
|
+
new URLSearchParams(wsUrl.searchParams.get("query_params") ?? ""),
|
|
676
|
+
),
|
|
677
|
+
).toEqual({
|
|
678
|
+
base_param: "existing",
|
|
679
|
+
custom_param: "value123",
|
|
680
|
+
user_token: "abc",
|
|
681
|
+
theme: "dark",
|
|
682
|
+
});
|
|
675
683
|
expect(httpUrl.searchParams.get("custom_param")).toBe("value123");
|
|
676
684
|
expect(httpUrl.searchParams.get("user_token")).toBe("abc");
|
|
677
685
|
expect(httpUrl.searchParams.get("theme")).toBe("dark");
|
|
@@ -738,7 +746,7 @@ describe("RuntimeManager", () => {
|
|
|
738
746
|
const sessionId = "test" as SessionId;
|
|
739
747
|
|
|
740
748
|
expect(runtime.getWsURL(sessionId).toString()).toMatchInlineSnapshot(
|
|
741
|
-
`"blob:https://example.com/12345678-1234-1234-1234-123456789abc?session_id=test"`,
|
|
749
|
+
`"blob:https://example.com/12345678-1234-1234-1234-123456789abc?query_params=&session_id=test"`,
|
|
742
750
|
);
|
|
743
751
|
expect(Logger.warn).toHaveBeenCalledOnce();
|
|
744
752
|
});
|
|
@@ -128,33 +128,32 @@ export class RuntimeManager {
|
|
|
128
128
|
return asWsUrl(this.appendCrossOriginAuth(url).toString());
|
|
129
129
|
}
|
|
130
130
|
|
|
131
|
-
/**
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
const
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
return searchParams;
|
|
131
|
+
/** Keep notebook page parameters separate from connection options. */
|
|
132
|
+
private getSessionURL(path: string, sessionId: SessionId): URL {
|
|
133
|
+
const url = this.formatHttpURL({ path });
|
|
134
|
+
const notebookParams = new URLSearchParams(this.httpURL.search);
|
|
135
|
+
const pageParams = new URLSearchParams(window.location.search);
|
|
136
|
+
for (const key of pageParams.keys()) {
|
|
137
|
+
notebookParams.delete(key);
|
|
138
|
+
}
|
|
139
|
+
for (const [key, value] of pageParams) {
|
|
140
|
+
notebookParams.append(key, value);
|
|
141
|
+
}
|
|
142
|
+
// These parameters are internal and are not exposed by mo.query_params().
|
|
143
|
+
notebookParams.delete(KnownQueryParams.accessToken);
|
|
144
|
+
notebookParams.delete("refresh_token");
|
|
145
|
+
notebookParams.delete(KnownQueryParams.sessionId);
|
|
146
|
+
url.searchParams.set("query_params", notebookParams.toString());
|
|
147
|
+
url.searchParams.set(KnownQueryParams.sessionId, sessionId);
|
|
148
|
+
return url;
|
|
150
149
|
}
|
|
151
150
|
|
|
152
151
|
/**
|
|
153
152
|
* The WebSocket URL of the runtime.
|
|
154
153
|
*/
|
|
155
154
|
public getWsURL(sessionId: SessionId): URL {
|
|
156
|
-
const
|
|
157
|
-
return this.
|
|
155
|
+
const url = this.getSessionURL("/ws", sessionId);
|
|
156
|
+
return asWsUrl(this.appendCrossOriginAuth(url).toString());
|
|
158
157
|
}
|
|
159
158
|
|
|
160
159
|
/**
|
|
@@ -164,11 +163,7 @@ export class RuntimeManager {
|
|
|
164
163
|
* (see `headers()`) instead of the URL.
|
|
165
164
|
*/
|
|
166
165
|
public getSseURL(sessionId: SessionId): URL {
|
|
167
|
-
const url = this.
|
|
168
|
-
path: "/sse",
|
|
169
|
-
searchParams: this.getSessionSearchParams(sessionId),
|
|
170
|
-
restrictToKnownQueryParams: false,
|
|
171
|
-
});
|
|
166
|
+
const url = this.getSessionURL("/sse", sessionId);
|
|
172
167
|
// The page URL can still carry access_token (merged in from the
|
|
173
168
|
// current page's params, before auth cleanup strips it); never
|
|
174
169
|
// forward it — a token in the URL leaks into proxy/server logs.
|
|
@@ -180,7 +175,8 @@ export class RuntimeManager {
|
|
|
180
175
|
* The WebSocket Sync URL of the runtime, for real-time updates.
|
|
181
176
|
*/
|
|
182
177
|
public getWsSyncURL(sessionId: SessionId): URL {
|
|
183
|
-
|
|
178
|
+
const url = this.getSessionURL("/ws_sync", sessionId);
|
|
179
|
+
return asWsUrl(this.appendCrossOriginAuth(url).toString());
|
|
184
180
|
}
|
|
185
181
|
|
|
186
182
|
/**
|
package/src/core/wasm/bridge.ts
CHANGED
|
@@ -38,8 +38,6 @@ import type {
|
|
|
38
38
|
} from "../network/types";
|
|
39
39
|
import { filenameAtom } from "../saving/file-state";
|
|
40
40
|
import { store } from "../state/jotai";
|
|
41
|
-
import { BasicTransport } from "../websocket/transports/basic";
|
|
42
|
-
import type { IConnectionTransport } from "../websocket/transports/transport";
|
|
43
41
|
import { PyodideRouter } from "./router";
|
|
44
42
|
import { getWorkerRPC } from "./rpc";
|
|
45
43
|
import { getWasmRuntimeConfig } from "./runtime-config";
|
|
@@ -719,12 +717,6 @@ export class PyodideBridge implements RunRequests, EditRequests {
|
|
|
719
717
|
}
|
|
720
718
|
}
|
|
721
719
|
|
|
722
|
-
export function createPyodideConnection(): IConnectionTransport {
|
|
723
|
-
return BasicTransport.withProducerCallback((callback) => {
|
|
724
|
-
PyodideBridge.INSTANCE.attachMessageConsumer(callback);
|
|
725
|
-
});
|
|
726
|
-
}
|
|
727
|
-
|
|
728
720
|
// Compose the worker name. The optional "::controller" suffix tells
|
|
729
721
|
// getController.ts that the host page provides a custom /wasm/controller.js
|
|
730
722
|
// and that the dynamic import should be attempted. Hosts opt in by setting
|
|
@@ -64,16 +64,4 @@ describe("classifyCloseEvent", () => {
|
|
|
64
64
|
});
|
|
65
65
|
});
|
|
66
66
|
});
|
|
67
|
-
|
|
68
|
-
describe("transport exhaustion", () => {
|
|
69
|
-
it("MARIMO_TRANSPORT_EXHAUSTED → gave-up with KERNEL_DISCONNECTED", () => {
|
|
70
|
-
const decision = classify("MARIMO_TRANSPORT_EXHAUSTED");
|
|
71
|
-
expect(decision.kind).toBe("gave-up");
|
|
72
|
-
expect(decision.status).toEqual({
|
|
73
|
-
state: ConnectionState.CLOSED,
|
|
74
|
-
code: WebSocketClosedReason.KERNEL_DISCONNECTED,
|
|
75
|
-
reason: "kernel not found",
|
|
76
|
-
});
|
|
77
|
-
});
|
|
78
|
-
});
|
|
79
67
|
});
|
|
@@ -2,22 +2,12 @@
|
|
|
2
2
|
|
|
3
3
|
import type { CloseDecision } from "../host/connection";
|
|
4
4
|
import { Logger } from "@/utils/Logger";
|
|
5
|
-
import { TRANSPORT_EXHAUSTED_REASON } from "./transports/ws";
|
|
6
5
|
import { ConnectionState, WebSocketClosedReason } from "./types";
|
|
7
6
|
|
|
8
7
|
// Keep server reasons in sync with ws_endpoint.py and ws/*.py.
|
|
9
8
|
// SSE carries the same reasons in close events. Unclassified reasons retry.
|
|
10
9
|
export function classifyCloseEvent(event: { reason?: string }): CloseDecision {
|
|
11
10
|
switch (event.reason) {
|
|
12
|
-
case TRANSPORT_EXHAUSTED_REASON:
|
|
13
|
-
return {
|
|
14
|
-
kind: "gave-up",
|
|
15
|
-
status: {
|
|
16
|
-
state: ConnectionState.CLOSED,
|
|
17
|
-
code: WebSocketClosedReason.KERNEL_DISCONNECTED,
|
|
18
|
-
reason: "kernel not found",
|
|
19
|
-
},
|
|
20
|
-
};
|
|
21
11
|
case "MARIMO_NO_FILE_KEY":
|
|
22
12
|
case "MARIMO_NO_SESSION_ID":
|
|
23
13
|
case "MARIMO_NO_SESSION":
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{a as e,c as t,f as n,l as r,r as i,t as a}from"./useEvent-Dfcbgjhg.js";import{t as o}from"./compiler-runtime-BrajqUja.js";import{g as s}from"./useEventListener-CjDeLqFC.js";import{t as c}from"./invariant-Ci2dTZ72.js";import{i as l,t as u}from"./utils-B4K466FK.js";import{p as d,t as f}from"./session-B8Y-GJnS.js";import{t as p}from"./Deferred-CrTnjj37.js";var m=o();function h(){return typeof document<`u`&&document.querySelector(`marimo-wasm`)!==null}var g=Symbol(``);function _(e,t){return n(e,function(e,n,r){n(this,t(e(this),r))})}function ee(e,t){let n=null,r=new Map,i=new Set,a=i=>{let s;if(t===void 0)s=r.get(i);else for(let[e,n]of r)if(t(e,i)){s=n;break}if(s!==void 0){if(n?.(s[1],i))a.remove(i);else return s[0]}let c=e(i);return r.set(i,[c,Date.now()]),o(`CREATE`,i,c),c},o=(e,t,n)=>{for(let r of i)r({type:e,param:t,atom:n})};return a.unstable_listen=e=>(i.add(e),()=>{i.delete(e)}),a.getParams=()=>r.keys(),a.remove=e=>{if(t===void 0){if(!r.has(e))return;let[t]=r.get(e);r.delete(e),o(`REMOVE`,e,t)}else for(let[n,[i]]of r)if(t(n,e)){r.delete(n),o(`REMOVE`,n,i);break}},a.setShouldRemove=e=>{if(n=e,n)for(let[e,[t,i]]of r)n(i,e)&&(r.delete(e),o(`REMOVE`,e,t))},a}var v=(e,t,n)=>(t.has(n)?t:t.set(n,e())).get(n),y=new WeakMap,te=(e,t,n,r)=>v(e,v(()=>new WeakMap,v(()=>new WeakMap,y,t),n),r);function b(e,t,r=Object.is){return te(()=>{let i=Symbol(),a=([e,n])=>{if(n===i)return t(e);let a=t(e,n);return r(n,a)?n:a},o=n(t=>{let n=t(o),r=t(e);return a([r,n])});return o.init=i,o},e,t,r)}var x=(e,t,n)=>(t.has(n)?t:t.set(n,e())).get(n),ne=new WeakMap,S=(e,t,n)=>x(e,x(()=>new WeakMap,ne,t),n),C={},w=e=>!!e.write,T=e=>typeof e==`function`;function E(e,t){return S(()=>{let r=new WeakMap,i=(o,s)=>{let c=r.get(o);if(c)return c;let l=s&&r.get(s),u=[],d=[];return o.forEach((r,s)=>{let c=t?t(r):s;d[s]=c;let f=l&&l.atomList[l.keyList.indexOf(c)];if(f){u[s]=f;return}let p=t=>{let n=t(a),r=t(e),s=i(r,n?.arr).keyList.indexOf(c);if(s<0||s>=r.length){let e=o[i(o).keyList.indexOf(c)];if(e)return e;throw Error(`splitAtom: index out of bounds for read`)}return r[s]};u[s]=w(e)?n(p,(t,n,r)=>{let o=t(a),s=t(e),l=i(s,o?.arr).keyList.indexOf(c);if(l<0||l>=s.length)throw Error(`splitAtom: index out of bounds for write`);let u=T(r)?r(s[l]):r;Object.is(s[l],u)||n(e,[...s.slice(0,l),u,...s.slice(l+1)])}):n(p)}),c=l&&l.keyList.length===d.length&&l.keyList.every((e,t)=>e===d[t])?l:{arr:o,atomList:u,keyList:d},r.set(o,c),c},a=n(t=>{let n=t(a),r=t(e);return i(r,n?.arr)});a.init=void 0;let o=w(e)?n(e=>e(a).atomList,(t,n,r)=>{switch(r.type){case`remove`:{let i=t(o).indexOf(r.atom);if(i>=0){let r=t(e);n(e,[...r.slice(0,i),...r.slice(i+1)])}break}case`insert`:{let i=r.before?t(o).indexOf(r.before):t(o).length;if(i>=0){let a=t(e);n(e,[...a.slice(0,i),r.value,...a.slice(i)])}break}case`move`:{let i=t(o).indexOf(r.atom),a=r.before?t(o).indexOf(r.before):t(o).length;if(i>=0&&a>=0){let r=t(e);i<a?n(e,[...r.slice(0,i),...r.slice(i+1,a),r[i],...r.slice(a)]):n(e,[...r.slice(0,a),r[i],...r.slice(a,i),...r.slice(i+1)])}break}}}):n(e=>e(a).atomList);return o},e,t||C)}var D=e=>typeof e?.then==`function`;function O(e=()=>{try{return window.localStorage}catch{return}},t){let n,r,i={getItem:(i,a)=>{let o=e=>{if(e||=``,n!==e){try{r=JSON.parse(e,t?.reviver)}catch{return a}n=e}return r},s=e()?.getItem(i)??null;return D(s)?s.then(o):o(s)},setItem:(n,r)=>e()?.setItem(n,JSON.stringify(r,t?.replacer)),removeItem:t=>e()?.removeItem(t)},a=e=>(n,r,i)=>e(n,e=>{let n;try{n=JSON.parse(e||``,t?.reviver)}catch{n=i}r(n)}),o;try{o=e()?.subscribe}catch{}return!o&&typeof window<`u`&&typeof window.addEventListener==`function`&&window.Storage&&(o=(t,n)=>{if(!(e()instanceof window.Storage))return()=>{};let r=r=>{r.storageArea===e()&&r.key===t&&n(r.newValue)};return window.addEventListener(`storage`,r),()=>{window.removeEventListener(`storage`,r)}}),o&&(i.subscribe=a(o)),i}var re=O();function ie(e,t,r=re,i){let a=i?.getOnInit,o=n(a?r.getItem(e,t):t);return o.onMount=n=>(n(r.getItem(e,t)),r.subscribe?.call(r,e,n,t)),n(e=>e(o),(n,i,a)=>{let s=typeof a==`function`?a(n(o)):a;return s===g?(i(o,t),r.removeItem(e)):D(s)?s.then(t=>(i(o,t),r.setItem(e,t))):(i(o,s),r.setItem(e,s))})}var k={NOT_STARTED:`NOT_STARTED`,CONNECTING:`CONNECTING`,OPEN:`OPEN`,CLOSING:`CLOSING`,CLOSED:`CLOSED`},A={KERNEL_DISCONNECTED:`KERNEL_DISCONNECTED`,KERNEL_STARTUP_ERROR:`KERNEL_STARTUP_ERROR`},j=n({state:k.NOT_STARTED}),M=_(null,(e,t)=>t===null?null:{phase:t.phase,logs:t.log_mode===`append`&&e?.phase===t.phase?e.logs+t.logs:t.logs});function N(){return e(j,e=>e.state===k.OPEN)}function P(){return d()?N():Promise.resolve()}var F=n(e=>e(j).state===k.CONNECTING),I=n(e=>e(j).state===k.OPEN),L=n(e=>{let t=e(j);return t.state===k.OPEN||t.state===k.NOT_STARTED});n(e=>e(j).state===k.CLOSED);var R=n(e=>e(j).state===k.NOT_STARTED);function z(e){return e===k.CONNECTING}function B(e){return e===k.OPEN}function V(e){return e===k.CLOSING}function H(e){return e===k.NOT_STARTED}function U(e){return e===k.CLOSED||e===k.CLOSING||e===k.CONNECTING}function ae(e){switch(e){case k.CLOSED:return`App disconnected`;case k.CONNECTING:return`Connecting to a runtime ...`;case k.CLOSING:return`App disconnecting...`;case k.OPEN:return``;case k.NOT_STARTED:return`Click to connect to a runtime`;default:return``}}function W(e){if(typeof e!=`object`||!e||Array.isArray(e))return!1;for(let t of Object.values(e))if(typeof t!=`string`)return!1;return!0}function G(e){if(typeof e!=`object`||!e||Array.isArray(e))return!1;let t=e;return!(!W(t.files)||t.modelNotifications!==void 0&&!Array.isArray(t.modelNotifications))}function K(){let e=typeof window>`u`?void 0:window.__MARIMO_STATIC__;return G(e)?e:void 0}function q(){return K()!==void 0}function J(){let e=K();return c(e!==void 0,`Not a static notebook`),e.files}function oe(){return K()?.modelNotifications}var se=new Set(Object.values(l)),ce=class{initialHealthyCheck=new p;config;lazy;constructor(e,t=!1){this.config=e,this.lazy=t;try{new URL(this.config.url)}catch(e){throw Error(`Invalid runtime URL: ${this.config.url}. ${e instanceof Error?e.message:`Unknown error`}`,{cause:e})}this.lazy||this.init()}get isLazy(){return this.lazy}get httpURL(){return new URL(this.config.url)}get isSameOrigin(){return this.httpURL.origin===window.location.origin}get isServerless(){return h()||u()||q()}formatHttpURL({path:e=``,searchParams:t,restrictToKnownQueryParams:n=!0}){let r=this.httpURL,i=new URLSearchParams(window.location.search);if(t)for(let[e,n]of t.entries())r.searchParams.set(e,n);for(let[e,t]of i.entries())n&&!se.has(e)||r.searchParams.set(e,t);return r.pathname=`${r.pathname.replace(/\/$/,``)}/${e.replace(/^\//,``)}`,r.hash=``,r}appendCrossOriginAuth(e){return!this.isSameOrigin&&this.config.authToken&&e.searchParams.set(l.accessToken,this.config.authToken),e}formatNavigableHttpURL(e,t){let n=this.formatHttpURL({path:e,searchParams:t});return n.searchParams.delete(l.accessToken),this.appendCrossOriginAuth(n)}formatWsURL(e,t){let n=this.formatHttpURL({path:e,searchParams:t,restrictToKnownQueryParams:!1});return le(this.appendCrossOriginAuth(n).toString())}getSessionSearchParams(e){let t=new URL(this.config.url),n=new URLSearchParams(t.search);return new URLSearchParams(window.location.search).forEach((e,t)=>{n.has(t)||n.set(t,e)}),n.set(l.sessionId,e),n}getWsURL(e){let t=this.getSessionSearchParams(e);return this.formatWsURL(`/ws`,t)}getSseURL(e){let t=this.formatHttpURL({path:`/sse`,searchParams:this.getSessionSearchParams(e),restrictToKnownQueryParams:!1});return t.searchParams.delete(l.accessToken),t}getWsSyncURL(e){return this.formatWsURL(`/ws_sync`,this.getSessionSearchParams(e))}getTerminalWsURL(e){let t=this.formatWsURL(`/terminal/ws`);return e&&(t.searchParams.set(`rows`,String(e.rows)),t.searchParams.set(`cols`,String(e.cols))),t}getLSPURL(e){if(e===`copilot`){let t=this.formatWsURL(`/lsp/${e}`),n=t.searchParams.get(l.accessToken);return t.search=``,n&&t.searchParams.set(l.accessToken,n),t}return this.formatWsURL(`/lsp/${e}`)}getAiURL(e){return this.formatHttpURL({path:`/api/ai/${e}`})}healthURL(){return this.formatHttpURL({path:`/health`})}async fetchHealth(){try{return await fetch(this.healthURL().toString())}catch(e){return s.error(`Failed to check health: ${e instanceof Error?e.message:`Unknown error`}`,{cause:e}),null}}async reconcileFromHealth(){if(this.isServerless)return!0;let e=await this.fetchHealth();if(!e)return!1;if(e.redirected){s.debug(`Runtime redirected to ${e.url}`);let t=new URL(e.url);t.pathname=t.pathname.replace(/\/health$/,``),this.config.url=t.toString()}return e.ok&&this.setDOMBaseUri(this.config.url),e.ok}async probeHealth(){return this.isServerless?!0:(await this.fetchHealth())?.ok??!1}setDOMBaseUri(e){e=e.split(`?`,1)[0],e.endsWith(`/`)||(e+=`/`);let t=document.querySelector(`base`);t?t.setAttribute(`href`,e):(t=document.createElement(`base`),t.setAttribute(`href`,e),document.head.append(t))}async init(e){s.debug(`Initializing runtime...`);let t=0;for(;!await this.reconcileFromHealth();){if(t>=25){s.error(`Failed to connect after 25 retries`),this.initialHealthyCheck.reject(Error(`Failed to connect after 25 retries`));return}if(!e?.disableRetryDelay){let e=Math.min(100*1.2**t,2e3);await new Promise(t=>setTimeout(t,e))}t++}s.debug(`Runtime is healthy`),this.initialHealthyCheck.resolve()}async waitForHealthy(){return this.initialHealthyCheck.promise}headers(){let e={"Marimo-Session-Id":f(),"Marimo-Server-Token":this.config.serverToken??``,"x-runtime-url":this.httpURL.toString()};return this.config.authToken&&(e.Authorization=`Bearer ${this.config.authToken}`),e}sessionHeaders(){return{"Marimo-Session-Id":f()}}};function le(e){if(!e.startsWith(`http`)){s.warn(`URL must start with http: ${e}`);let t=new URL(e);return t.protocol=`ws`,t}return new URL(e.replace(/^http/,`ws`))}function ue(){let e=new URL(document.baseURI);return e.search=``,e.hash=``,e.toString()}var Y={lazy:!0,url:ue()},X=n(Y),Z=n(e=>{let t=e(X);return new ce(t,t.lazy)});function Q(){return r(Z)}function de(){let e=(0,m.c)(4),n=Q(),[r,i]=t(j),o;return e[0]!==r.state||e[1]!==n||e[2]!==i?(o=async()=>{H(r.state)?(i({state:k.CONNECTING}),await n.init()):s.log(`Runtime already started or starting...`)},e[0]=r.state,e[1]=n,e[2]=i,e[3]=o):o=e[3],a(o)}function $(){return i.get(Z)}function fe(e){if(e.startsWith(`http`))return new URL(e);let t=$().httpURL.toString();return t.startsWith(`blob:`)&&(t=t.replace(`blob:`,``)),new URL(e,t)}export{b as A,P as C,_ as D,ee as E,h as M,ie as O,N as S,k as T,j as _,de as a,R as b,J as c,V as d,B as f,L as g,H as h,X as i,E as j,O as k,q as l,U as m,fe as n,Q as o,z as p,$ as r,oe as s,Y as t,ae as u,I as v,A as w,M as x,F as y};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{n as e}from"./feedback-button-D9InK87G.js";export{e as FeedbackModal};
|