@marimo-team/islands 0.25.3-dev221 → 0.25.3-dev223
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/{ErrorBoundary-B5GJid5Z.js → ErrorBoundary-BToheQV2.js} +1 -1
- package/dist/{code-visibility-CYzEUXNB.js → code-visibility-CO0hOr56.js} +1 -1
- package/dist/{common-CbUT6FYs.js → common-CV0669k1.js} +1 -1
- package/dist/{data-grid-overlay-editor-30GRNiqG.js → data-grid-overlay-editor-CwDPMtXI.js} +1 -1
- package/dist/{feedback-button-r2frGdMW.js → feedback-button-RB_OfVUt.js} +2 -2
- package/dist/{glide-data-editor-Dnne6LfS.js → glide-data-editor-B2h5fYfH.js} +3 -3
- package/dist/{globals-BnVQfyqL.js → globals-YR9OeOwq.js} +1 -1
- package/dist/main.js +4206 -4206
- package/dist/{number-overlay-editor-CpnDV4Mb.js → number-overlay-editor-BY4yYxfZ.js} +1 -1
- package/dist/{reveal-component-Bu044POK.js → reveal-component-GiGQpBMz.js} +2 -2
- package/dist/style.css +1 -1
- package/package.json +1 -1
- package/src/components/app-config/ai-config.tsx +148 -147
- package/src/components/app-config/app-config-button.tsx +6 -5
- package/src/components/app-config/common.tsx +7 -9
- package/src/components/app-config/data-form.tsx +112 -113
- package/src/components/app-config/mcp-config.tsx +30 -53
- package/src/components/app-config/user-config-form.css +91 -0
- package/src/components/app-config/user-config-form.tsx +236 -298
- package/src/components/editor/actions/__tests__/pair-with-agent-modal.test.tsx +9 -5
- package/src/components/editor/actions/__tests__/pair-with-agent.test.tsx +3 -3
- package/src/components/editor/actions/pair-with-agent-modal.tsx +5 -5
- package/src/components/editor/actions/pair-with-agent.tsx +10 -7
- package/src/core/cells/__tests__/session.test.ts +4 -4
- package/src/core/cells/session.ts +1 -1
- package/src/core/meta/__tests__/code-visibility.test.tsx +1 -1
- package/src/core/notebook/document/__tests__/fixtures.ts +1 -1
- package/src/core/notebook/document/__tests__/test-host.ts +4 -4
|
@@ -102,11 +102,14 @@ describe("PairWithAgentModal", () => {
|
|
|
102
102
|
expect(
|
|
103
103
|
panel.textContent?.includes("Agent connections require OpenCode 2.x"),
|
|
104
104
|
).toBe(tab === "OpenCode");
|
|
105
|
-
expect(
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
105
|
+
expect(
|
|
106
|
+
within(panel).getByText(
|
|
107
|
+
tab === "Other Agents"
|
|
108
|
+
? "Copy this prompt into your agent"
|
|
109
|
+
: "Run in your terminal",
|
|
110
|
+
{ exact: true },
|
|
111
|
+
),
|
|
112
|
+
).toBeInTheDocument();
|
|
110
113
|
fireEvent.click(
|
|
111
114
|
within(panel).getByRole("button", {
|
|
112
115
|
name: tab === "Other Agents" ? "Copy prompt" : "Copy command",
|
|
@@ -364,6 +367,7 @@ describe("PairWithAgentModal", () => {
|
|
|
364
367
|
});
|
|
365
368
|
|
|
366
369
|
const panel = screen.getByRole("tabpanel");
|
|
370
|
+
expect(panel).toHaveTextContent("1. Run in your terminal");
|
|
367
371
|
expect(panel).toHaveTextContent("2. Paste when prompted for a token");
|
|
368
372
|
expect(panel).not.toHaveTextContent("secret-token");
|
|
369
373
|
fireEvent.click(
|
|
@@ -60,18 +60,18 @@ describe("PairWithAgent", () => {
|
|
|
60
60
|
).toBeVisible();
|
|
61
61
|
expect(
|
|
62
62
|
screen.getByRole("button", {
|
|
63
|
-
name: "
|
|
63
|
+
name: "Set up pairing",
|
|
64
64
|
}),
|
|
65
65
|
).toBeVisible();
|
|
66
66
|
});
|
|
67
67
|
|
|
68
|
-
it("opens the pairing dialog from the banner
|
|
68
|
+
it("opens the pairing dialog from the banner button", () => {
|
|
69
69
|
stubTokenFetch();
|
|
70
70
|
render(<PairWithAgentBanner />, { wrapper });
|
|
71
71
|
|
|
72
72
|
fireEvent.click(
|
|
73
73
|
screen.getByRole("button", {
|
|
74
|
-
name: "
|
|
74
|
+
name: "Set up pairing",
|
|
75
75
|
}),
|
|
76
76
|
);
|
|
77
77
|
|
|
@@ -118,7 +118,7 @@ export const PairWithAgentModal: React.FC<{
|
|
|
118
118
|
<DialogHeader>
|
|
119
119
|
<DialogTitle>Pair an agent</DialogTitle>
|
|
120
120
|
<DialogDescription>
|
|
121
|
-
Use an AI coding agent to pair
|
|
121
|
+
Use an AI coding agent to pair program on this notebook.{" "}
|
|
122
122
|
<a
|
|
123
123
|
href="https://links.marimo.app/marimo-pair"
|
|
124
124
|
target="_blank"
|
|
@@ -159,7 +159,7 @@ export const PairWithAgentModal: React.FC<{
|
|
|
159
159
|
className="mt-4 flex flex-col gap-4"
|
|
160
160
|
>
|
|
161
161
|
<Step
|
|
162
|
-
index={1}
|
|
162
|
+
index={hasToken ? 1 : undefined}
|
|
163
163
|
title="Run in your terminal"
|
|
164
164
|
hint={
|
|
165
165
|
hostEnabled && tab === "opencode"
|
|
@@ -191,7 +191,6 @@ export const PairWithAgentModal: React.FC<{
|
|
|
191
191
|
|
|
192
192
|
<TabsContent value="prompt" className="mt-4 flex flex-col gap-4">
|
|
193
193
|
<Step
|
|
194
|
-
index={1}
|
|
195
194
|
title="Copy this prompt into your agent"
|
|
196
195
|
hint={
|
|
197
196
|
hasToken
|
|
@@ -224,7 +223,7 @@ export const PairWithAgentModal: React.FC<{
|
|
|
224
223
|
};
|
|
225
224
|
|
|
226
225
|
const Step: React.FC<{
|
|
227
|
-
index
|
|
226
|
+
index?: number;
|
|
228
227
|
title: string;
|
|
229
228
|
hint?: string;
|
|
230
229
|
children: React.ReactNode;
|
|
@@ -232,7 +231,8 @@ const Step: React.FC<{
|
|
|
232
231
|
<div className="flex flex-col gap-2">
|
|
233
232
|
<div className="flex items-baseline gap-2">
|
|
234
233
|
<span className="text-sm font-medium">
|
|
235
|
-
{index}.
|
|
234
|
+
{index !== undefined && `${index}. `}
|
|
235
|
+
{title}
|
|
236
236
|
</span>
|
|
237
237
|
{hint && <span className="text-xs text-muted-foreground">{hint}</span>}
|
|
238
238
|
</div>
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/* Copyright 2026 Marimo. All rights reserved. */
|
|
2
2
|
|
|
3
|
-
import { BotIcon } from "lucide-react";
|
|
3
|
+
import { ArrowUpRightIcon, BotIcon } from "lucide-react";
|
|
4
4
|
import React from "react";
|
|
5
5
|
import { AiProviderIcon } from "@/components/ai/ai-provider-icon";
|
|
6
6
|
import { useImperativeModal } from "@/components/modal/ImperativeModal";
|
|
@@ -72,7 +72,7 @@ export const PairWithAgentBanner: React.FC<{
|
|
|
72
72
|
return (
|
|
73
73
|
<div
|
|
74
74
|
className={cn(
|
|
75
|
-
"rounded-lg border border-
|
|
75
|
+
"rounded-lg border border-border bg-muted/30 p-3",
|
|
76
76
|
className,
|
|
77
77
|
)}
|
|
78
78
|
>
|
|
@@ -103,18 +103,21 @@ export const PairWithAgentBanner: React.FC<{
|
|
|
103
103
|
</fieldset>
|
|
104
104
|
</div>
|
|
105
105
|
<div className="mt-1 text-xs leading-relaxed">
|
|
106
|
-
<p
|
|
106
|
+
<p>
|
|
107
107
|
Pair your coding agent with this notebook to edit and run cells,
|
|
108
108
|
inspect variables, and more, straight from your agent's CLI or user
|
|
109
109
|
interface.
|
|
110
110
|
</p>
|
|
111
|
-
<
|
|
111
|
+
<Button
|
|
112
112
|
type="button"
|
|
113
|
+
variant="outline"
|
|
114
|
+
size="xs"
|
|
113
115
|
onClick={openPairWithAgentModal}
|
|
114
|
-
className="
|
|
116
|
+
className="mt-3 gap-1"
|
|
115
117
|
>
|
|
116
|
-
|
|
117
|
-
|
|
118
|
+
Set up pairing
|
|
119
|
+
<ArrowUpRightIcon className="size-3.5" aria-hidden={true} />
|
|
120
|
+
</Button>
|
|
118
121
|
</div>
|
|
119
122
|
</div>
|
|
120
123
|
);
|
|
@@ -434,7 +434,7 @@ describe("readExport", () => {
|
|
|
434
434
|
expand_output: false,
|
|
435
435
|
},
|
|
436
436
|
etag: `embedded:${CELL_1}`,
|
|
437
|
-
|
|
437
|
+
code_fingerprint: `embedded:${CELL_1}:code`,
|
|
438
438
|
version: 1,
|
|
439
439
|
});
|
|
440
440
|
});
|
|
@@ -501,7 +501,7 @@ describe("readExport", () => {
|
|
|
501
501
|
expand_output: false,
|
|
502
502
|
},
|
|
503
503
|
etag: `embedded:${CELL_1}`,
|
|
504
|
-
|
|
504
|
+
code_fingerprint: `embedded:${CELL_1}:code`,
|
|
505
505
|
version: 1,
|
|
506
506
|
});
|
|
507
507
|
});
|
|
@@ -540,7 +540,7 @@ describe("readExport", () => {
|
|
|
540
540
|
expand_output: false,
|
|
541
541
|
},
|
|
542
542
|
etag: `embedded:${SETUP_CELL_ID}`,
|
|
543
|
-
|
|
543
|
+
code_fingerprint: `embedded:${SETUP_CELL_ID}:code`,
|
|
544
544
|
version: 1,
|
|
545
545
|
});
|
|
546
546
|
});
|
|
@@ -588,7 +588,7 @@ describe("readExport", () => {
|
|
|
588
588
|
expand_output: false,
|
|
589
589
|
},
|
|
590
590
|
etag: `embedded:${CELL_1}`,
|
|
591
|
-
|
|
591
|
+
code_fingerprint: `embedded:${CELL_1}:code`,
|
|
592
592
|
version: 1,
|
|
593
593
|
});
|
|
594
594
|
// Null result means no output.
|
|
@@ -179,7 +179,7 @@ function cellRecord(cellId: CellId, cell: NotebookCell): Protocol.Cell {
|
|
|
179
179
|
expand_output: cell.config?.expand_output ?? false,
|
|
180
180
|
},
|
|
181
181
|
etag: `${EMBEDDED}:${cellId}`,
|
|
182
|
-
|
|
182
|
+
code_fingerprint: cell.code_hash ?? `${EMBEDDED}:${cellId}:code`,
|
|
183
183
|
version: 1,
|
|
184
184
|
};
|
|
185
185
|
}
|
|
@@ -28,17 +28,17 @@ function record(
|
|
|
28
28
|
const cell = Protocol.CellInput.parse(input);
|
|
29
29
|
const config = Protocol.CellConfigInput.parse(cell.config ?? {});
|
|
30
30
|
const code = cell.code.replace(/\r\n?/g, "\n");
|
|
31
|
-
const
|
|
31
|
+
const codeFingerprint = hash(code);
|
|
32
32
|
return {
|
|
33
33
|
id: cell.id,
|
|
34
34
|
notebook_id: notebookId,
|
|
35
35
|
name: cell.name,
|
|
36
36
|
code,
|
|
37
37
|
config,
|
|
38
|
-
|
|
38
|
+
code_fingerprint: codeFingerprint,
|
|
39
39
|
etag: hash(
|
|
40
40
|
[
|
|
41
|
-
|
|
41
|
+
codeFingerprint,
|
|
42
42
|
cell.name,
|
|
43
43
|
...[
|
|
44
44
|
config.column,
|
|
@@ -203,7 +203,7 @@ export function createTestHost(initial: Document) {
|
|
|
203
203
|
? null
|
|
204
204
|
: {
|
|
205
205
|
etag: cell.etag,
|
|
206
|
-
|
|
206
|
+
code_fingerprint: cell.code_fingerprint,
|
|
207
207
|
version: cell.version,
|
|
208
208
|
};
|
|
209
209
|
}
|