@marimo-team/frontend 0.22.1-dev34 → 0.22.1-dev39
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-DKyVv7Zj.js → CellStatus-Cf0Jlrcs.js} +1 -1
- package/dist/assets/{ConnectedDataExplorerComponent-BUc9LHJJ.js → ConnectedDataExplorerComponent-DUxaLoL7.js} +1 -1
- package/dist/assets/{JsonOutput-D1i8P1dG.js → JsonOutput-IpD2GLtO.js} +2 -2
- package/dist/assets/{MarimoErrorOutput-RmM7djc-.js → MarimoErrorOutput-dTNCLY-Q.js} +1 -1
- package/dist/assets/{Plot-C7NE7pEx.js → Plot-BAM1jEAz.js} +72 -72
- package/dist/assets/{RenderHTML-Bmn77an6.js → RenderHTML-C5GEp4ca.js} +1 -1
- package/dist/assets/{add-cell-with-ai-RyZ9Xe2b.js → add-cell-with-ai-C0J3LyiV.js} +1 -1
- package/dist/assets/{add-connection-dialog-ogwy8tvS.js → add-connection-dialog-C42PDYI7.js} +1 -1
- package/dist/assets/{agent-panel-BHLkHj7k.js → agent-panel-CH-jHjEl.js} +1 -1
- package/dist/assets/{ai-model-dropdown-Dnf-CxbP.js → ai-model-dropdown-D14GiszF.js} +1 -1
- package/dist/assets/{app-config-button-D1Z_xsvC.js → app-config-button-v-557oRb.js} +1 -1
- package/dist/assets/{cell-editor-_GDTh-4a.js → cell-editor-Dd6UaL1A.js} +2 -2
- package/dist/assets/{cell-link-D4UrIH9w.js → cell-link-Cimoe3Fv.js} +1 -1
- package/dist/assets/{cells-ArUhhHls.js → cells-CcsG9Aum.js} +1 -1
- package/dist/assets/{chat-display-YmFjOXkV.js → chat-display-hfpeXiYe.js} +1 -1
- package/dist/assets/{chat-panel-B76rxYTh.js → chat-panel-DxT370nA.js} +1 -1
- package/dist/assets/{chat-ui-BitNq1z6.js → chat-ui-Dv4y0-td.js} +1 -1
- package/dist/assets/{column-preview-NDhbeu0E.js → column-preview-ZSErTRFA.js} +1 -1
- package/dist/assets/{command-palette-uJxkhle4.js → command-palette-CjF_cblG.js} +1 -1
- package/dist/assets/{common-CRBlPqv5.js → common-BZK7spst.js} +1 -1
- package/dist/assets/{components-DwGcJvMB.js → components-D2OlyENc.js} +1 -1
- package/dist/assets/{components-BfHGr__b.js → components-DpxyscxU.js} +1 -1
- package/dist/assets/{datasource-D9e37ifa.js → datasource-D9nfSxKS.js} +1 -1
- package/dist/assets/{dependency-graph-panel-BBmN-Vc7.js → dependency-graph-panel-5MbMtFss.js} +1 -1
- package/dist/assets/{documentation-panel-Dm2xtsTq.js → documentation-panel-DPdXS3YO.js} +1 -1
- package/dist/assets/{download-7EtMZf2Y.js → download-BFQaUFKI.js} +1 -1
- package/dist/assets/{edit-page-Cr_DnrkM.js → edit-page-CMd8_Psc.js} +4 -4
- package/dist/assets/{error-panel-C3-vTzaH.js → error-panel-DV8jpRsf.js} +1 -1
- package/dist/assets/{file-explorer-panel-g9KppC7Y.js → file-explorer-panel-Dr_ZNDk3.js} +1 -1
- package/dist/assets/{file-icons-JXAG6vK-.js → file-icons-DSJsG_mI.js} +1 -1
- package/dist/assets/{floating-outline-B6Qyid7Q.js → floating-outline-Cfa1ESSb.js} +1 -1
- package/dist/assets/{focus-DCN0oEe0.js → focus-C5u0JQUq.js} +1 -1
- package/dist/assets/{form-BVnQnVQ2.js → form-3ZUGKch9.js} +1 -1
- package/dist/assets/glide-data-editor-a3qLDl-r.js +132 -0
- package/dist/assets/{home-page-Bg02jazh.js → home-page-BrqppCUS.js} +1 -1
- package/dist/assets/{hooks-zQJ9iU_R.js → hooks-CHE17GG1.js} +1 -1
- package/dist/assets/{html-to-image-C5XSE7QT.js → html-to-image-BRbQwG7G.js} +1 -1
- package/dist/assets/{index-BaQAJwyb.css → index-BkdonYlq.css} +1 -1
- package/dist/assets/index-Bt8G6SSE.js +42 -0
- package/dist/assets/{kiosk-mode-CriCUOI1.js → kiosk-mode-Cu86-jaD.js} +1 -1
- package/dist/assets/{layout-Cudicm29.js → layout-B-lTkLKA.js} +1 -1
- package/dist/assets/{logs-panel-CoWO9c8s.js → logs-panel-CNVgwoHO.js} +1 -1
- package/dist/assets/{markdown-renderer-CyUc0f8D.js → markdown-renderer-B91NzmVT.js} +1 -1
- package/dist/assets/{name-cell-input-DeM6upjB.js → name-cell-input-hsV_b1Op.js} +1 -1
- package/dist/assets/{outline-panel-C4P3wA7Z.js → outline-panel-C3jvSnZF.js} +1 -1
- package/dist/assets/{packages-panel-DnrjjQDF.js → packages-panel-0_Z5vM7i.js} +1 -1
- package/dist/assets/{panels-BCRqI88j.js → panels-uc8QhzpO.js} +1 -1
- package/dist/assets/{process-output-e_aMblRk.js → process-output-CsvKn_Mr.js} +1 -1
- package/dist/assets/{readonly-python-code-CVgh88Tn.js → readonly-python-code-oFCRG7Wt.js} +1 -1
- package/dist/assets/{run-page-C-ySBXLo.js → run-page-DKCqiq_f.js} +1 -1
- package/dist/assets/{scratchpad-panel-C5Pogi1P.js → scratchpad-panel-ChHLgDv_.js} +1 -1
- package/dist/assets/{session-panel-DEsnZWks.js → session-panel-CPKKt31q.js} +1 -1
- package/dist/assets/{snippets-panel-DQgE3W8I.js → snippets-panel-CDqEDwpY.js} +1 -1
- package/dist/assets/{spec-CBbUxOvL.js → spec-CFx2bitO.js} +1 -1
- package/dist/assets/{state-pGNeffyB.js → state-BBVlYaRC.js} +1 -1
- package/dist/assets/{state-CV8Wy3e4.js → state-C93JW11U.js} +1 -1
- package/dist/assets/{textarea-DqzNK0s9.js → textarea-DJEKmYtw.js} +1 -1
- package/dist/assets/{tracing-BUFVOmZw.js → tracing-CLWi5jD3.js} +1 -1
- package/dist/assets/{tracing-panel-BsLloPWd.js → tracing-panel-ksnvVrMH.js} +2 -2
- package/dist/assets/{useAddCell-cC7JUC0q.js → useAddCell-mJ1PkF-E.js} +1 -1
- package/dist/assets/{useCellActionButton-BiYBXHfb.js → useCellActionButton-4HWj1rt3.js} +1 -1
- package/dist/assets/{useDeleteCell-D2p4Dz0U.js → useDeleteCell-B0OAS0ly.js} +1 -1
- package/dist/assets/{useDependencyPanelTab-c5-eXlcr.js → useDependencyPanelTab-BuZ0fgAR.js} +1 -1
- package/dist/assets/useLifecycle-N3bfh_O1.js +1 -0
- package/dist/assets/useNotebookActions-DuHUqtII.js +1 -0
- package/dist/assets/{useRunCells-DgBY-vh9.js → useRunCells-Du76UV1R.js} +1 -1
- package/dist/assets/{useSplitCell-SS0kKwVk.js → useSplitCell-CeL7eJq1.js} +1 -1
- package/dist/index.html +25 -25
- package/package.json +1 -1
- package/src/__mocks__/common.ts +4 -4
- package/src/components/chat/acp/agent-panel.tsx +2 -2
- package/src/components/data-table/__tests__/columns.test.tsx +7 -7
- package/src/components/data-table/cell-hover-template/types.ts +1 -1
- package/src/components/data-table/cell-hover-text/types.ts +1 -1
- package/src/components/data-table/cell-selection/__tests__/feature.test.ts +1 -1
- package/src/components/data-table/cell-selection/types.ts +1 -1
- package/src/components/data-table/cell-styling/types.ts +1 -1
- package/src/components/data-table/charts/chart-spec/altair-generator.ts +2 -2
- package/src/components/data-table/column-formatting/types.ts +2 -2
- package/src/components/data-table/column-summary/legacy-chart-spec.ts +1 -1
- package/src/components/data-table/column-wrapping/types.ts +1 -1
- package/src/components/data-table/copy-column/types.ts +1 -1
- package/src/components/data-table/data-table.tsx +12 -12
- package/src/components/data-table/focus-row/types.ts +1 -1
- package/src/components/data-table/loading-table.tsx +1 -1
- package/src/components/data-table/range-focus/__tests__/atoms.test.ts +2 -2
- package/src/components/data-table/range-focus/atoms.ts +2 -2
- package/src/components/dependency-graph/dependency-graph-tree.tsx +1 -1
- package/src/components/editor/__tests__/dynamic-favicon.test.tsx +1 -1
- package/src/components/editor/actions/pair-with-agent-modal.tsx +142 -0
- package/src/components/editor/actions/useNotebookActions.tsx +10 -0
- package/src/components/editor/ai/ai-completion-editor.tsx +1 -1
- package/src/components/editor/app-container.tsx +1 -1
- package/src/components/editor/chrome/panels/empty-state.tsx +1 -0
- package/src/components/editor/controls/keyboard-shortcuts.tsx +1 -1
- package/src/components/editor/navigation/__tests__/navigation.test.ts +1 -1
- package/src/components/editor/navigation/navigation.ts +1 -1
- package/src/components/editor/notebook-cell.tsx +1 -1
- package/src/components/editor/output/JsonOutput.tsx +4 -4
- package/src/components/editor/output/ansi-reduce.ts +2 -2
- package/src/components/editor/output/console/ConsoleOutput.tsx +1 -1
- package/src/components/editor/renderers/cells-renderer.tsx +1 -1
- package/src/components/editor/renderers/grid-layout/grid-layout.tsx +1 -1
- package/src/components/editor/renderers/plugins.ts +1 -1
- package/src/components/editor/renderers/slides-layout/types.ts +2 -2
- package/src/components/editor/renderers/vertical-layout/__tests__/useFocusFirstEditor.test.ts +2 -2
- package/src/components/editor/renderers/vertical-layout/__tests__/vertical-layout.test.ts +1 -1
- package/src/components/find-replace/find-replace.tsx +3 -1
- package/src/components/forms/form.tsx +1 -1
- package/src/components/forms/options.ts +1 -1
- package/src/components/static-html/static-banner.tsx +2 -2
- package/src/components/terminal/terminal.tsx +4 -4
- package/src/components/ui/button.tsx +1 -1
- package/src/components/ui/command.tsx +1 -1
- package/src/core/ai/context/providers/__tests__/datasource.test.ts +1 -1
- package/src/core/ai/context/providers/__tests__/error.test.ts +1 -1
- package/src/core/ai/context/providers/__tests__/variable.test.ts +1 -1
- package/src/core/ai/context/registry.ts +2 -2
- package/src/core/ai/tools/registry.ts +1 -1
- package/src/core/cells/__tests__/cells.test.ts +2 -2
- package/src/core/cells/__tests__/scrollCellIntoView.test.ts +1 -1
- package/src/core/cells/__tests__/session.test.ts +1 -1
- package/src/core/cells/__tests__/utils.test.ts +1 -1
- package/src/core/cells/cells.ts +1 -1
- package/src/core/cells/ids.ts +1 -1
- package/src/core/codemirror/ai/request.ts +1 -1
- package/src/core/codemirror/copilot/__tests__/language-server.test.ts +1 -1
- package/src/core/codemirror/copilot/__tests__/transport.test.ts +1 -1
- package/src/core/codemirror/copilot/language-server.ts +1 -1
- package/src/core/codemirror/copilot/types.ts +1 -1
- package/src/core/codemirror/facet.ts +1 -1
- package/src/core/codemirror/language/__tests__/sql.test.ts +4 -4
- package/src/core/codemirror/language/languages/sql/completion-builder.ts +1 -1
- package/src/core/codemirror/language/metadata.ts +1 -1
- package/src/core/codemirror/language/types.ts +1 -1
- package/src/core/codemirror/lsp/__tests__/notebook-lsp.test.ts +1 -1
- package/src/core/codemirror/lsp/notebook-lsp.ts +1 -1
- package/src/core/codemirror/misc/__tests__/dnd.test.ts +1 -1
- package/src/core/codemirror/rtc/loro/awareness.ts +1 -1
- package/src/core/config/feature-flag.tsx +1 -1
- package/src/core/dom/outline.ts +1 -1
- package/src/core/export/__tests__/hooks.test.ts +1 -1
- package/src/core/hotkeys/__tests__/hotkeys.test.ts +1 -1
- package/src/core/hotkeys/shortcuts.ts +1 -1
- package/src/core/islands/__tests__/bridge.test.ts +2 -2
- package/src/core/islands/bridge.ts +2 -2
- package/src/core/islands/components/output-wrapper.tsx +1 -1
- package/src/core/islands/parse.ts +1 -1
- package/src/core/lsp/__tests__/transport.test.ts +1 -1
- package/src/core/network/DeferredRequestRegistry.ts +1 -1
- package/src/core/network/__tests__/requests-network.test.ts +1 -1
- package/src/core/network/api.ts +2 -2
- package/src/core/network/requests-lazy.ts +1 -1
- package/src/core/network/requests-toasting.tsx +1 -1
- package/src/core/static/files.ts +1 -1
- package/src/core/vscode/vscode-bindings.ts +1 -1
- package/src/core/wasm/bridge.ts +3 -3
- package/src/core/wasm/worker/tracer.ts +1 -1
- package/src/core/websocket/useWebSocket.tsx +2 -2
- package/src/css/globals.css +37 -61
- package/src/custom.d.ts +1 -1
- package/src/hooks/__tests__/useDuplicateShortcuts.test.ts +2 -2
- package/src/hooks/debug.ts +3 -3
- package/src/hooks/useDebounce.ts +1 -1
- package/src/hooks/useEventListener.ts +1 -1
- package/src/hooks/useHotkey.ts +1 -1
- package/src/hooks/useLifecycle.ts +2 -2
- package/src/hooks/useNonce.ts +1 -1
- package/src/hooks/useResizeObserver.ts +2 -2
- package/src/main.tsx +1 -1
- package/src/plugins/core/RenderHTML.tsx +3 -3
- package/src/plugins/core/__test__/registerReactComponent.test.ts +1 -1
- package/src/plugins/core/registerReactComponent.tsx +4 -4
- package/src/plugins/core/rpc.ts +1 -1
- package/src/plugins/impl/DataTablePlugin.tsx +1 -1
- package/src/plugins/impl/FileBrowserPlugin.tsx +1 -1
- package/src/plugins/impl/FormPlugin.tsx +1 -1
- package/src/plugins/impl/__tests__/MatrixPlugin.test.tsx +1 -1
- package/src/plugins/impl/anywidget/AnyWidgetPlugin.tsx +1 -1
- package/src/plugins/impl/anywidget/model.ts +1 -1
- package/src/plugins/impl/anywidget/types.ts +2 -2
- package/src/plugins/impl/anywidget/widget-binding.ts +1 -1
- package/src/plugins/impl/chat/ChatPlugin.tsx +1 -1
- package/src/plugins/impl/chat/chat-ui.tsx +1 -1
- package/src/plugins/impl/data-editor/glide-data-editor.tsx +1 -1
- package/src/plugins/impl/data-explorer/ConnectedDataExplorerComponent.tsx +2 -2
- package/src/plugins/impl/data-explorer/components/query-form.tsx +1 -1
- package/src/plugins/impl/data-explorer/functions/function.ts +1 -1
- package/src/plugins/impl/data-explorer/queries/types.ts +1 -1
- package/src/plugins/impl/data-frames/DataFramePlugin.tsx +1 -1
- package/src/plugins/impl/data-frames/forms/renderers.tsx +1 -1
- package/src/plugins/impl/data-frames/utils/operators.ts +1 -1
- package/src/plugins/impl/matplotlib/MatplotlibPlugin.tsx +1 -1
- package/src/plugins/impl/mpl-interactive/MplInteractivePlugin.tsx +1 -1
- package/src/plugins/impl/panel/PanelPlugin.tsx +2 -2
- package/src/plugins/impl/plotly/Plot.tsx +3 -3
- package/src/plugins/impl/plotly/PlotlyPlugin.tsx +62 -44
- package/src/plugins/impl/plotly/__tests__/PlotlyPlugin.test.tsx +114 -0
- package/src/plugins/impl/plotly/__tests__/selection.test.ts +158 -196
- package/src/plugins/impl/plotly/selection.ts +274 -56
- package/src/plugins/impl/vega/batched.ts +1 -1
- package/src/plugins/impl/vega/make-selectable.ts +1 -1
- package/src/plugins/impl/vega/types.ts +1 -1
- package/src/plugins/layout/DownloadPlugin.tsx +1 -1
- package/src/plugins/layout/LazyPlugin.tsx +1 -1
- package/src/plugins/layout/RoutesPlugin.tsx +1 -1
- package/src/plugins/layout/mermaid/mermaid.tsx +1 -1
- package/src/plugins/plugins.ts +1 -1
- package/src/stories/data-explorer.stories.tsx +1 -1
- package/src/stories/dataframe.stories.tsx +1 -1
- package/src/stories/editor.stories.tsx +1 -1
- package/src/stories/select.stories.tsx +1 -1
- package/src/stories/switchable-multi-select.stories.tsx +1 -1
- package/src/utils/Logger.ts +1 -1
- package/src/utils/__tests__/arrays.test.ts +1 -1
- package/src/utils/__tests__/blob.test.ts +1 -1
- package/src/utils/__tests__/dates.test.ts +1 -1
- package/src/utils/__tests__/errors.test.ts +1 -1
- package/src/utils/__tests__/objects.test.ts +3 -3
- package/src/utils/__tests__/waitForWs.test.ts +1 -1
- package/src/utils/arrays.ts +1 -1
- package/src/utils/assertNever.ts +1 -1
- package/src/utils/batch-requests.ts +2 -2
- package/src/utils/createReducer.ts +2 -2
- package/src/utils/id-tree.tsx +2 -2
- package/src/utils/idle.ts +1 -1
- package/src/utils/invariant.ts +1 -2
- package/src/utils/maps.ts +1 -1
- package/src/utils/math.ts +0 -1
- package/src/utils/multi-map.ts +1 -1
- package/src/utils/objects.ts +1 -1
- package/src/utils/once.ts +2 -2
- package/src/utils/staticImplements.ts +1 -1
- package/src/utils/storage/jotai.ts +1 -1
- package/src/utils/tracer.ts +2 -2
- package/dist/assets/glide-data-editor-CDqunAkw.js +0 -132
- package/dist/assets/index-KI45dku7.js +0 -35
- package/dist/assets/useLifecycle-D202VvPd.js +0 -1
- package/dist/assets/useNotebookActions-Bb4xxjuJ.js +0 -1
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
/* Copyright 2026 Marimo. All rights reserved. */
|
|
2
|
+
|
|
3
|
+
import { useAtomValue } from "jotai";
|
|
4
|
+
import { CheckIcon, CopyIcon } from "lucide-react";
|
|
5
|
+
import React, { useState } from "react";
|
|
6
|
+
import { Button } from "@/components/ui/button";
|
|
7
|
+
import {
|
|
8
|
+
DialogContent,
|
|
9
|
+
DialogDescription,
|
|
10
|
+
DialogFooter,
|
|
11
|
+
DialogHeader,
|
|
12
|
+
DialogTitle,
|
|
13
|
+
} from "@/components/ui/dialog";
|
|
14
|
+
import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs";
|
|
15
|
+
import { runtimeConfigAtom } from "@/core/runtime/config";
|
|
16
|
+
import { copyToClipboard } from "@/utils/copy";
|
|
17
|
+
import { Events } from "@/utils/events";
|
|
18
|
+
import { Tooltip } from "@/components/ui/tooltip";
|
|
19
|
+
import type { RuntimeConfig } from "@/core/runtime/types";
|
|
20
|
+
|
|
21
|
+
type AgentTab = "claude" | "codex" | "opencode";
|
|
22
|
+
|
|
23
|
+
function buildRemoteUrl(config: RuntimeConfig) {
|
|
24
|
+
const url = new URL(config.url);
|
|
25
|
+
if (config.authToken) {
|
|
26
|
+
url.searchParams.set("auth", config.authToken);
|
|
27
|
+
}
|
|
28
|
+
return url.toString();
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
function getPromptCommand(agent: AgentTab, remoteUrl: string): string {
|
|
32
|
+
const command = import.meta.env.DEV ? "uv run marimo" : "uvx marimo@latest";
|
|
33
|
+
const base = `${command} pair prompt --url '${remoteUrl}'`;
|
|
34
|
+
switch (agent) {
|
|
35
|
+
case "claude":
|
|
36
|
+
return `claude "$(${base} --claude)"`;
|
|
37
|
+
case "codex":
|
|
38
|
+
return `codex "$(${base} --codex)"`;
|
|
39
|
+
case "opencode":
|
|
40
|
+
return `opencode "$(${base} --opencode)"`;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
const SKILL_INSTALL = "npx skills add marimo-team/marimo-pair";
|
|
45
|
+
|
|
46
|
+
export const PairWithAgentModal: React.FC<{
|
|
47
|
+
onClose: () => void;
|
|
48
|
+
}> = ({ onClose }) => {
|
|
49
|
+
const [activeTab, setActiveTab] = useState<AgentTab>("claude");
|
|
50
|
+
const runtimeConfig = useAtomValue(runtimeConfigAtom);
|
|
51
|
+
const remoteUrl = buildRemoteUrl(runtimeConfig);
|
|
52
|
+
const promptCommand = getPromptCommand(activeTab, remoteUrl);
|
|
53
|
+
|
|
54
|
+
return (
|
|
55
|
+
<DialogContent className="sm:max-w-lg">
|
|
56
|
+
<DialogHeader>
|
|
57
|
+
<DialogTitle>Pair with an agent</DialogTitle>
|
|
58
|
+
<DialogDescription>
|
|
59
|
+
Use an AI coding agent to pair-program on this notebook.{" "}
|
|
60
|
+
<a
|
|
61
|
+
href="https://links.marimo.app/marimo-pair"
|
|
62
|
+
target="_blank"
|
|
63
|
+
rel="noopener noreferrer"
|
|
64
|
+
className="underline"
|
|
65
|
+
>
|
|
66
|
+
Learn more
|
|
67
|
+
</a>
|
|
68
|
+
.
|
|
69
|
+
</DialogDescription>
|
|
70
|
+
</DialogHeader>
|
|
71
|
+
|
|
72
|
+
<div className="flex flex-col gap-4 py-2">
|
|
73
|
+
<div className="flex flex-col gap-2">
|
|
74
|
+
<span className="text-sm font-medium">1. Install the skill</span>
|
|
75
|
+
<CommandBlock command={SKILL_INSTALL} />
|
|
76
|
+
</div>
|
|
77
|
+
|
|
78
|
+
<div className="flex flex-col gap-2">
|
|
79
|
+
<span className="text-sm font-medium">2. Run in your terminal</span>
|
|
80
|
+
<Tabs
|
|
81
|
+
value={activeTab}
|
|
82
|
+
onValueChange={(v) => setActiveTab(v as AgentTab)}
|
|
83
|
+
>
|
|
84
|
+
<TabsList className="w-full">
|
|
85
|
+
<TabsTrigger value="claude" className="flex-1">
|
|
86
|
+
Claude
|
|
87
|
+
</TabsTrigger>
|
|
88
|
+
<TabsTrigger value="codex" className="flex-1">
|
|
89
|
+
Codex
|
|
90
|
+
</TabsTrigger>
|
|
91
|
+
<TabsTrigger value="opencode" className="flex-1">
|
|
92
|
+
OpenCode
|
|
93
|
+
</TabsTrigger>
|
|
94
|
+
</TabsList>
|
|
95
|
+
|
|
96
|
+
<TabsContent value="claude" className="mt-3">
|
|
97
|
+
<CommandBlock command={promptCommand} />
|
|
98
|
+
</TabsContent>
|
|
99
|
+
<TabsContent value="codex" className="mt-3">
|
|
100
|
+
<CommandBlock command={promptCommand} />
|
|
101
|
+
</TabsContent>
|
|
102
|
+
<TabsContent value="opencode" className="mt-3">
|
|
103
|
+
<CommandBlock command={promptCommand} />
|
|
104
|
+
</TabsContent>
|
|
105
|
+
</Tabs>
|
|
106
|
+
</div>
|
|
107
|
+
</div>
|
|
108
|
+
|
|
109
|
+
<DialogFooter>
|
|
110
|
+
<Button variant="secondary" onClick={onClose}>
|
|
111
|
+
Close
|
|
112
|
+
</Button>
|
|
113
|
+
</DialogFooter>
|
|
114
|
+
</DialogContent>
|
|
115
|
+
);
|
|
116
|
+
};
|
|
117
|
+
|
|
118
|
+
const CommandBlock: React.FC<{ command: string }> = ({ command }) => {
|
|
119
|
+
const [copied, setCopied] = useState(false);
|
|
120
|
+
|
|
121
|
+
const copy = Events.stopPropagation(async (e) => {
|
|
122
|
+
e.preventDefault();
|
|
123
|
+
await copyToClipboard(command);
|
|
124
|
+
setCopied(true);
|
|
125
|
+
setTimeout(() => setCopied(false), 2000);
|
|
126
|
+
});
|
|
127
|
+
|
|
128
|
+
return (
|
|
129
|
+
<div className="flex items-center gap-2 rounded-md bg-muted px-3 py-2 font-mono text-xs">
|
|
130
|
+
<code className="flex-1 select-all break-words">{command}</code>
|
|
131
|
+
<Tooltip content="Copied!" open={copied}>
|
|
132
|
+
<Button onClick={copy} size="xs" variant="ghost">
|
|
133
|
+
{copied ? (
|
|
134
|
+
<CheckIcon size={14} strokeWidth={1.5} />
|
|
135
|
+
) : (
|
|
136
|
+
<CopyIcon size={14} strokeWidth={1.5} />
|
|
137
|
+
)}
|
|
138
|
+
</Button>
|
|
139
|
+
</Tooltip>
|
|
140
|
+
</div>
|
|
141
|
+
);
|
|
142
|
+
};
|
|
@@ -36,6 +36,7 @@ import {
|
|
|
36
36
|
PresentationIcon,
|
|
37
37
|
SettingsIcon,
|
|
38
38
|
Share2Icon,
|
|
39
|
+
SparklesIcon,
|
|
39
40
|
Undo2Icon,
|
|
40
41
|
XCircleIcon,
|
|
41
42
|
YoutubeIcon,
|
|
@@ -45,6 +46,7 @@ import { settingDialogAtom } from "@/components/app-config/state";
|
|
|
45
46
|
import { MarkdownIcon } from "@/components/editor/cell/code/icons";
|
|
46
47
|
import { useImperativeModal } from "@/components/modal/ImperativeModal";
|
|
47
48
|
import { renderShortcut } from "@/components/shortcuts/renderShortcut";
|
|
49
|
+
import { PairWithAgentModal } from "@/components/editor/actions/pair-with-agent-modal";
|
|
48
50
|
import { ShareStaticNotebookModal } from "@/components/static-html/share-modal";
|
|
49
51
|
import { toast } from "@/components/ui/use-toast";
|
|
50
52
|
import {
|
|
@@ -343,6 +345,14 @@ export function useNotebookActions() {
|
|
|
343
345
|
],
|
|
344
346
|
},
|
|
345
347
|
|
|
348
|
+
{
|
|
349
|
+
icon: <SparklesIcon size={14} strokeWidth={1.5} />,
|
|
350
|
+
label: "Pair with an agent",
|
|
351
|
+
handle: async () => {
|
|
352
|
+
openModal(<PairWithAgentModal onClose={closeModal} />);
|
|
353
|
+
},
|
|
354
|
+
},
|
|
355
|
+
|
|
346
356
|
{
|
|
347
357
|
icon: <Share2Icon size={14} strokeWidth={1.5} />,
|
|
348
358
|
label: "Share",
|
|
@@ -156,7 +156,7 @@ export const AiCompletionEditor: React.FC<Props> = ({
|
|
|
156
156
|
// Use complete to pass the prompt directly, else input might be empty
|
|
157
157
|
complete(initialPrompt);
|
|
158
158
|
}
|
|
159
|
-
//
|
|
159
|
+
// oxlint-disable-next-line react-hooks/exhaustive-deps
|
|
160
160
|
}, [triggerImmediately]);
|
|
161
161
|
|
|
162
162
|
// Focus the input
|
|
@@ -31,7 +31,7 @@ export const AppContainer: React.FC<PropsWithChildren<Props>> = ({
|
|
|
31
31
|
<StatusOverlay connection={connection} isRunning={isRunning} />
|
|
32
32
|
<PyodideLoader>
|
|
33
33
|
<WrappedWithSidebar>
|
|
34
|
-
{/**
|
|
34
|
+
{/** oxlint-ignore-next-line -- ID is used by other components to grab the DOM element */}
|
|
35
35
|
<div
|
|
36
36
|
id="App"
|
|
37
37
|
data-config-width={width}
|
|
@@ -18,6 +18,7 @@ export const PanelEmptyState = ({
|
|
|
18
18
|
<div className="mx-6 my-6 flex flex-col gap-2">
|
|
19
19
|
<div className="flex flex-row gap-2 items-center">
|
|
20
20
|
{icon &&
|
|
21
|
+
// oxlint-disable-next-line react/no-clone-element
|
|
21
22
|
React.cloneElement(icon, {
|
|
22
23
|
className: "text-accent-foreground flex-shrink-0",
|
|
23
24
|
})}
|
|
@@ -90,7 +90,7 @@ export const KeyboardShortcuts: React.FC = () => {
|
|
|
90
90
|
},
|
|
91
91
|
};
|
|
92
92
|
|
|
93
|
-
//
|
|
93
|
+
// oxlint-disable-next-line typescript/no-dynamic-delete
|
|
94
94
|
delete newConfig.keymap.overrides[editingShortcut];
|
|
95
95
|
|
|
96
96
|
setEditingShortcut(null);
|
|
@@ -134,7 +134,7 @@ const mockRequestClient = MockRequestClient.create();
|
|
|
134
134
|
// Helper to setup selection
|
|
135
135
|
const setupSelection = () => {
|
|
136
136
|
const { reducer, cellSelectionAtom } = selectionTesting;
|
|
137
|
-
//
|
|
137
|
+
// oxlint-disable-next-line typescript/no-explicit-any
|
|
138
138
|
const dispatch = (action: any) => {
|
|
139
139
|
store.set(cellSelectionAtom, (prev: CellSelectionState) =>
|
|
140
140
|
reducer(prev, action),
|
|
@@ -614,7 +614,7 @@ export function useCellNavigationProps(
|
|
|
614
614
|
if (isShortcutPressed(shortcut as HotkeyAction, evt)) {
|
|
615
615
|
// If the handler is a function, it's a single-cell handler
|
|
616
616
|
// and we only operate on the currently focused cell.
|
|
617
|
-
if (handler
|
|
617
|
+
if (typeof handler === "function") {
|
|
618
618
|
const success = handler(cellId);
|
|
619
619
|
if (success) {
|
|
620
620
|
evt.preventDefault();
|
|
@@ -46,7 +46,7 @@ interface Props {
|
|
|
46
46
|
valueTypes?: "json" | "python";
|
|
47
47
|
}
|
|
48
48
|
|
|
49
|
-
//
|
|
49
|
+
// oxlint-disable-next-line typescript/no-explicit-any
|
|
50
50
|
const CopyButton: React.FC<DataItemProps<any>> = ({ value }) => {
|
|
51
51
|
const skipCopy =
|
|
52
52
|
typeof value === "string" &&
|
|
@@ -83,13 +83,13 @@ const CopyButton: React.FC<DataItemProps<any>> = ({ value }) => {
|
|
|
83
83
|
);
|
|
84
84
|
};
|
|
85
85
|
|
|
86
|
-
//
|
|
86
|
+
// oxlint-disable-next-line typescript/no-explicit-any
|
|
87
87
|
const JSONCopyButton: React.FC<DataItemProps<any>> = (props) => {
|
|
88
88
|
// if
|
|
89
89
|
return <CopyButton {...props} value={JSON.stringify(props.value, null, 2)} />;
|
|
90
90
|
};
|
|
91
91
|
|
|
92
|
-
//
|
|
92
|
+
// oxlint-disable-next-line typescript/no-explicit-any
|
|
93
93
|
const PyCopyButton: React.FC<DataItemProps<any>> = (props) => {
|
|
94
94
|
return <CopyButton {...props} value={getCopyValue(props.value)} />;
|
|
95
95
|
};
|
|
@@ -233,7 +233,7 @@ const LEAF_RENDERERS: Record<string, LeafRenderer> = {
|
|
|
233
233
|
},
|
|
234
234
|
};
|
|
235
235
|
|
|
236
|
-
//
|
|
236
|
+
// oxlint-disable-next-line typescript/no-explicit-any
|
|
237
237
|
const MIME_TYPES: DataType<any>[] = Object.entries(LEAF_RENDERERS).map(
|
|
238
238
|
([leafType, render]) => ({
|
|
239
239
|
is: (value) => typeof value === "string" && value.startsWith(leafType),
|
|
@@ -13,7 +13,7 @@ export interface Cursor {
|
|
|
13
13
|
export class TerminalBuffer {
|
|
14
14
|
private lines: string[] = [""];
|
|
15
15
|
private cursor: Cursor = { row: 0, col: 0 };
|
|
16
|
-
//
|
|
16
|
+
// oxlint-ignore-next-line no-control-regex -- Needed for ANSI escape sequence parsing
|
|
17
17
|
private static readonly ESCAPE_REGEX = /\u001B\[([0-9;]*)([A-DJKH])/u;
|
|
18
18
|
|
|
19
19
|
/** Ensure the internal lines array is large enough. */
|
|
@@ -185,7 +185,7 @@ export class TerminalBuffer {
|
|
|
185
185
|
*/
|
|
186
186
|
export class AnsiParser {
|
|
187
187
|
// Matches both CSI sequences (ESC[...letter) and other escape sequences like character set selection (ESC(B)
|
|
188
|
-
//
|
|
188
|
+
// oxlint-ignore-next-line no-control-regex -- Needed for ANSI parsing
|
|
189
189
|
private ESC_REGEX = /\u001B(?:\[[0-9;]*[A-Za-z]|\([0-9A-Za-z])/gu;
|
|
190
190
|
|
|
191
191
|
parse(input: string): { type: "text" | "escape"; value: string }[] {
|
|
@@ -234,7 +234,7 @@ const ConsoleOutputInternal = (props: Props): React.ReactNode => {
|
|
|
234
234
|
data-testid="console-output-area"
|
|
235
235
|
ref={ref}
|
|
236
236
|
{...selectAllProps}
|
|
237
|
-
//
|
|
237
|
+
// oxlint-ignore-next-line jsx-a11y/no-noninteractive-tabindex -- Needed to capture keypress events
|
|
238
238
|
tabIndex={0}
|
|
239
239
|
className={cn(
|
|
240
240
|
"console-output-area overflow-hidden rounded-b-lg flex flex-col-reverse w-full gap-1 focus:outline-hidden",
|
|
@@ -69,7 +69,7 @@ CellsRenderer.displayName = "CellsRenderer";
|
|
|
69
69
|
interface PluginCellRendererProps extends PropsWithChildren<Props> {
|
|
70
70
|
appConfig: AppConfig;
|
|
71
71
|
mode: AppMode;
|
|
72
|
-
//
|
|
72
|
+
// oxlint-disable-next-line typescript/no-explicit-any
|
|
73
73
|
plugin: ICellRendererPlugin<any, any>;
|
|
74
74
|
layoutData: Partial<Record<LayoutType, LayoutData>>;
|
|
75
75
|
finalLayout: LayoutType;
|
|
@@ -329,7 +329,7 @@ export const GridLayoutRenderer: React.FC<Props> = ({
|
|
|
329
329
|
<div
|
|
330
330
|
key={cell.id}
|
|
331
331
|
draggable={true}
|
|
332
|
-
//
|
|
332
|
+
// oxlint-disable-next-line react/no-unknown-property
|
|
333
333
|
unselectable="on"
|
|
334
334
|
data-cell-id={cell.id}
|
|
335
335
|
// Firefox requires some kind of initialization which we can do by adding this attribute
|
|
@@ -7,7 +7,7 @@ import type { ICellRendererPlugin, LayoutType } from "./types";
|
|
|
7
7
|
import { VerticalLayoutPlugin } from "./vertical-layout/vertical-layout";
|
|
8
8
|
|
|
9
9
|
// If more renderers are added, we may want to consider lazy loading them.
|
|
10
|
-
//
|
|
10
|
+
// oxlint-disable-next-line typescript/no-explicit-any
|
|
11
11
|
export const cellRendererPlugins: ICellRendererPlugin<any, any>[] = [
|
|
12
12
|
GridLayoutPlugin,
|
|
13
13
|
SlidesLayoutPlugin,
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
/* Copyright 2026 Marimo. All rights reserved. */
|
|
2
|
-
/*
|
|
2
|
+
/* oxlint-disable typescript/no-empty-object-type */
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
5
|
* The serialized form of a slides layout.
|
|
6
6
|
* This must be backwards-compatible as it is stored on the user's disk.
|
|
7
7
|
*/
|
|
8
|
-
//
|
|
8
|
+
// oxlint-disable-next-line typescript/consistent-type-definitions
|
|
9
9
|
export type SerializedSlidesLayout = {};
|
|
10
10
|
|
|
11
11
|
export interface SlidesLayout extends SerializedSlidesLayout {
|
package/src/components/editor/renderers/vertical-layout/__tests__/useFocusFirstEditor.test.ts
CHANGED
|
@@ -110,9 +110,9 @@ describe("useFocusFirstEditor", () => {
|
|
|
110
110
|
expect(querySelectorSpy).toHaveBeenCalledWith(
|
|
111
111
|
'[data-cell-name="testCell"]',
|
|
112
112
|
);
|
|
113
|
-
//
|
|
113
|
+
// oxlint-disable-next-line typescript/unbound-method
|
|
114
114
|
expect(mockElement.scrollIntoView).toHaveBeenCalled();
|
|
115
|
-
//
|
|
115
|
+
// oxlint-disable-next-line typescript/unbound-method
|
|
116
116
|
expect(mockElement.focus).toHaveBeenCalled();
|
|
117
117
|
expect(mockEditor.focus).toHaveBeenCalled();
|
|
118
118
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/* Copyright 2026 Marimo. All rights reserved. */
|
|
2
|
-
/*
|
|
2
|
+
/* oxlint-disable typescript/no-explicit-any */
|
|
3
3
|
import { describe, expect, it } from "vitest";
|
|
4
4
|
import type { OutputMessage } from "@/core/kernel/messages";
|
|
5
5
|
import { groupCellsByColumn, shouldHideCode } from "../vertical-layout";
|
|
@@ -221,7 +221,9 @@ export const FindReplace: React.FC = () => {
|
|
|
221
221
|
variant="outline"
|
|
222
222
|
className="h-6 text-xs"
|
|
223
223
|
onClick={() => {
|
|
224
|
-
replaceNext()
|
|
224
|
+
if (replaceNext()) {
|
|
225
|
+
resetMatches();
|
|
226
|
+
}
|
|
225
227
|
}}
|
|
226
228
|
disabled={state.findText === ""}
|
|
227
229
|
>
|
|
@@ -35,7 +35,7 @@ export interface FieldOptions {
|
|
|
35
35
|
optionRegex?: string;
|
|
36
36
|
}
|
|
37
37
|
|
|
38
|
-
//
|
|
38
|
+
// oxlint-disable-next-line typescript/no-redeclare
|
|
39
39
|
export const FieldOptions = {
|
|
40
40
|
of(options: FieldOptions): string {
|
|
41
41
|
return JSON.stringify(options);
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/* Copyright 2026 Marimo. All rights reserved. */
|
|
2
|
-
/*
|
|
3
|
-
/*
|
|
2
|
+
/* oxlint-disable react/jsx-no-comment-textnodes */
|
|
3
|
+
/* oxlint-disable react/jsx-no-target-blank */
|
|
4
4
|
|
|
5
5
|
import { useAtomValue } from "jotai";
|
|
6
6
|
import { CopyIcon, DownloadIcon } from "lucide-react";
|
|
@@ -143,7 +143,7 @@ const TerminalComponent: React.FC<TerminalComponentProps> = ({
|
|
|
143
143
|
const terminalRef = useRef<HTMLDivElement>(null);
|
|
144
144
|
const wsRef = useRef<WebSocket | null>(null);
|
|
145
145
|
|
|
146
|
-
//
|
|
146
|
+
// oxlint-disable-next-line react/hook-use-state
|
|
147
147
|
const [{ terminal, fitAddon, searchAddon }] = useState(() => {
|
|
148
148
|
// Create a new terminal instance
|
|
149
149
|
const term = new Terminal({
|
|
@@ -300,7 +300,7 @@ const TerminalComponent: React.FC<TerminalComponentProps> = ({
|
|
|
300
300
|
return () => {
|
|
301
301
|
// noop
|
|
302
302
|
};
|
|
303
|
-
//
|
|
303
|
+
// oxlint-disable-next-line react-hooks/exhaustive-deps
|
|
304
304
|
}, [initialized]);
|
|
305
305
|
|
|
306
306
|
// Process pending commands when terminal is ready
|
|
@@ -335,7 +335,7 @@ const TerminalComponent: React.FC<TerminalComponentProps> = ({
|
|
|
335
335
|
}
|
|
336
336
|
|
|
337
337
|
return;
|
|
338
|
-
//
|
|
338
|
+
// oxlint-disable-next-line react-hooks/exhaustive-deps
|
|
339
339
|
}, [visible]);
|
|
340
340
|
|
|
341
341
|
// On mount
|
|
@@ -373,7 +373,7 @@ const TerminalComponent: React.FC<TerminalComponentProps> = ({
|
|
|
373
373
|
return () => {
|
|
374
374
|
abortController.abort();
|
|
375
375
|
};
|
|
376
|
-
//
|
|
376
|
+
// oxlint-disable-next-line react-hooks/exhaustive-deps
|
|
377
377
|
}, []);
|
|
378
378
|
|
|
379
379
|
return (
|
|
@@ -108,7 +108,7 @@ const Button = React.forwardRef<HTMLButtonElement, ButtonProps>(
|
|
|
108
108
|
|
|
109
109
|
React.useImperativeHandle(
|
|
110
110
|
ref,
|
|
111
|
-
//
|
|
111
|
+
// oxlint-disable-next-line typescript/non-nullable-type-assertion-style
|
|
112
112
|
() => buttonRef.current as HTMLButtonElement,
|
|
113
113
|
);
|
|
114
114
|
|
|
@@ -61,7 +61,7 @@ const CommandInput = React.forwardRef<
|
|
|
61
61
|
>(({ className, icon, rootClassName, ...props }, ref) => (
|
|
62
62
|
<div
|
|
63
63
|
className={cn("flex items-center border-b px-3", rootClassName)}
|
|
64
|
-
//
|
|
64
|
+
// oxlint-disable-next-line react/no-unknown-property
|
|
65
65
|
cmdk-input-wrapper=""
|
|
66
66
|
>
|
|
67
67
|
{icon === null ? null : (
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/* Copyright 2026 Marimo. All rights reserved. */
|
|
2
|
-
/*
|
|
2
|
+
/* oxlint-disable typescript/no-explicit-any */
|
|
3
3
|
|
|
4
4
|
import { beforeEach, describe, expect, it } from "vitest";
|
|
5
5
|
import { cellId, variableName } from "@/__tests__/branded";
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/* Copyright 2026 Marimo. All rights reserved. */
|
|
2
|
-
/*
|
|
2
|
+
/* oxlint-disable typescript/no-explicit-any */
|
|
3
3
|
|
|
4
4
|
import { describe, expect, it, vi } from "vitest";
|
|
5
5
|
import { cellId, variableName } from "@/__tests__/branded";
|
|
@@ -98,7 +98,7 @@ export abstract class AIContextProvider<
|
|
|
98
98
|
* Registry for managing different AI context providers
|
|
99
99
|
*/
|
|
100
100
|
export class AIContextRegistry<T extends AIContextItem> {
|
|
101
|
-
//
|
|
101
|
+
// oxlint-disable-next-line typescript/no-explicit-any
|
|
102
102
|
private providers = new Set<AIContextProvider<any>>();
|
|
103
103
|
|
|
104
104
|
/**
|
|
@@ -106,7 +106,7 @@ export class AIContextRegistry<T extends AIContextItem> {
|
|
|
106
106
|
*/
|
|
107
107
|
register<U extends AIContextItem>(
|
|
108
108
|
provider: AIContextProvider<U>,
|
|
109
|
-
//
|
|
109
|
+
// oxlint-disable-next-line typescript/prefer-return-this-type
|
|
110
110
|
): AIContextRegistry<U | T> {
|
|
111
111
|
this.providers.add(provider);
|
|
112
112
|
return this;
|
|
@@ -14,7 +14,7 @@ import { formatToolDescription } from "./utils";
|
|
|
14
14
|
|
|
15
15
|
export type AnyZodObject = ZodObject<z.ZodRawShape>;
|
|
16
16
|
|
|
17
|
-
//
|
|
17
|
+
// oxlint-disable-next-line typescript/no-explicit-any
|
|
18
18
|
type StoredTool = AiTool<any, any>;
|
|
19
19
|
|
|
20
20
|
interface InvokeResult<TName> {
|
|
@@ -45,7 +45,7 @@ vi.mock("@/core/codemirror/editing/commands", () => ({
|
|
|
45
45
|
vi.mock("../scrollCellIntoView", async (importOriginal) => {
|
|
46
46
|
const actual = await importOriginal();
|
|
47
47
|
return {
|
|
48
|
-
//
|
|
48
|
+
// oxlint-disable-next-line typescript/no-explicit-any
|
|
49
49
|
...(actual as any),
|
|
50
50
|
scrollToTop: vi.fn(),
|
|
51
51
|
scrollToBottom: vi.fn(),
|
|
@@ -1023,7 +1023,7 @@ describe("cell reducer", () => {
|
|
|
1023
1023
|
});
|
|
1024
1024
|
cell = cells[0];
|
|
1025
1025
|
expect(cell.status).toBe("idle");
|
|
1026
|
-
//
|
|
1026
|
+
// oxlint-disable-next-line typescript/no-explicit-any no-unsafe-optional-chaining
|
|
1027
1027
|
expect((cell.output?.data as any)[0].msg).toBe(
|
|
1028
1028
|
"This cell wasn't run because an ancestor was stopped with `mo.stop`: ",
|
|
1029
1029
|
);
|
|
@@ -40,7 +40,7 @@ describe("scrollCellIntoView", () => {
|
|
|
40
40
|
|
|
41
41
|
it("should scroll active line when editor has focus", () => {
|
|
42
42
|
const mockEditor = { hasFocus: true };
|
|
43
|
-
//
|
|
43
|
+
// oxlint-disable-next-line typescript/no-explicit-any
|
|
44
44
|
mockGetCellEditorView.mockReturnValue(mockEditor as any);
|
|
45
45
|
|
|
46
46
|
scrollCellIntoView(cid);
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/* Copyright 2026 Marimo. All rights reserved. */
|
|
2
2
|
|
|
3
3
|
import type * as api from "@marimo-team/marimo-api";
|
|
4
|
-
/*
|
|
4
|
+
/* oxlint-disable typescript/no-explicit-any */
|
|
5
5
|
import { beforeEach, describe, expect, it, vi } from "vitest";
|
|
6
6
|
import { Mocks } from "@/__mocks__/common";
|
|
7
7
|
import { cellId } from "@/__tests__/branded";
|
package/src/core/cells/cells.ts
CHANGED
|
@@ -80,7 +80,7 @@ export interface NotebookState {
|
|
|
80
80
|
*/
|
|
81
81
|
history: {
|
|
82
82
|
name: string;
|
|
83
|
-
//
|
|
83
|
+
// oxlint-disable-next-line typescript/no-explicit-any
|
|
84
84
|
serializedEditorState: any;
|
|
85
85
|
column: CellColumnId;
|
|
86
86
|
index: CellIndex;
|
package/src/core/cells/ids.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/* Copyright 2026 Marimo. All rights reserved. */
|
|
2
|
-
/*
|
|
2
|
+
/* oxlint-disable typescript/no-redeclare */
|
|
3
3
|
|
|
4
4
|
import type { components } from "@marimo-team/marimo-api";
|
|
5
5
|
import { OBJECT_ID_ATTR } from "@/core/dom/ui-element-constants";
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/* Copyright 2026 Marimo. All rights reserved. */
|
|
2
|
-
/*
|
|
2
|
+
/* oxlint-disable typescript/no-explicit-any */
|
|
3
3
|
|
|
4
4
|
import { Transport } from "@open-rpc/client-js/build/transports/Transport";
|
|
5
5
|
import { beforeEach, describe, expect, it, vi } from "vitest";
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/* Copyright 2026 Marimo. All rights reserved. */
|
|
2
|
-
/*
|
|
2
|
+
/* oxlint-disable typescript/no-explicit-any */
|
|
3
3
|
|
|
4
4
|
import { WebSocketTransport } from "@open-rpc/client-js";
|
|
5
5
|
import { beforeEach, describe, expect, it, vi } from "vitest";
|
|
@@ -121,7 +121,7 @@ export class CopilotLanguageServerClient extends LanguageServerClient {
|
|
|
121
121
|
).request(method, params);
|
|
122
122
|
}
|
|
123
123
|
|
|
124
|
-
//
|
|
124
|
+
// oxlint-disable-next-line typescript/no-explicit-any
|
|
125
125
|
override async notify(method: any, params: any): Promise<any> {
|
|
126
126
|
logger.debug("#notify", method, params);
|
|
127
127
|
return super.notify(method, params);
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/* Copyright 2026 Marimo. All rights reserved. */
|
|
2
|
-
/*
|
|
2
|
+
/* oxlint-disable typescript/no-empty-object-type */
|
|
3
3
|
|
|
4
4
|
export interface GitHubCopilotSignInInitiateResult {
|
|
5
5
|
verificationUri: string; // https://github.com/login/device
|