Skip to content

Commit ea13e4a

Browse files
committed
feat: show files panel for in-browser code execution
1 parent e07f859 commit ea13e4a

3 files changed

Lines changed: 10 additions & 3 deletions

File tree

src/lib/components/chat/ChatControls.svelte

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
settings,
2121
showFileNavPath,
2222
selectedTerminalId,
23+
pyodideActive,
2324
user
2425
} from '$lib/stores';
2526
@@ -76,7 +77,8 @@
7677
(($terminalServers ?? []).some((t) => t.id && t.id === $selectedTerminalId) ||
7778
$user?.role === 'admin' ||
7879
($user?.permissions?.features?.direct_tool_servers ?? true))) ||
79-
(codeInterpreterEnabled && $config?.code?.interpreter_engine !== 'jupyter');
80+
(codeInterpreterEnabled && $config?.code?.interpreter_engine !== 'jupyter') ||
81+
$pyodideActive;
8082
$: showOverviewTab = hasMessages;
8183
8284
// Tab fallback: if active tab becomes hidden, switch to next available
@@ -375,7 +377,7 @@
375377
/>
376378
{:else if activeTab === 'files' && $selectedTerminalId}
377379
<FileNav onAttach={handleTerminalAttach} {chatId} />
378-
{:else if activeTab === 'files' && codeInterpreterEnabled}
380+
{:else if activeTab === 'files' && (codeInterpreterEnabled || $pyodideActive)}
379381
<PyodideFileNav />
380382
{:else}
381383
<Controls embed={true} {models} bind:chatFiles bind:params />
@@ -526,7 +528,7 @@
526528
/>
527529
{:else if activeTab === 'files' && $selectedTerminalId}
528530
<FileNav onAttach={handleTerminalAttach} overlay={dragged} {chatId} />
529-
{:else if activeTab === 'files' && codeInterpreterEnabled}
531+
{:else if activeTab === 'files' && (codeInterpreterEnabled || $pyodideActive)}
530532
<PyodideFileNav overlay={dragged} />
531533
{:else}
532534
<Controls embed={true} {models} bind:chatFiles bind:params />

src/lib/stores/index.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,8 @@ export const terminalServers = writable([]);
7878

7979
// Persistent Pyodide worker for code interpreter FS
8080
export const pyodideWorker: Writable<Worker | null> = writable(null);
81+
// Decouples the Files panel from the code-interpreter toggle.
82+
export const pyodideActive = writable(false);
8183

8284
export const banners: Writable<Banner[]> = writable([]);
8385

src/routes/+layout.svelte

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
showFileNavPath,
3838
showFileNavDir,
3939
pyodideWorker,
40+
pyodideActive,
4041
desktopEvent
4142
} from '$lib/stores';
4243
import { getFileContentById } from '$lib/apis/files';
@@ -266,6 +267,7 @@
266267
].filter(Boolean);
267268
268269
const worker = getOrCreateWorker();
270+
pyodideActive.set(true);
269271
270272
// Fetch file content from the server and prepare for the worker
271273
let filePayloads = [];
@@ -353,6 +355,7 @@
353355
);
354356
}
355357
358+
window.dispatchEvent(new Event('pyodide:files')); // IDBFS may have changed — refresh the Files panel.
356359
executing = false;
357360
};
358361

0 commit comments

Comments
 (0)