From 725d40f935e2be790cd0c0b8141dab90dd3c2aed Mon Sep 17 00:00:00 2001 From: Diego Imbert Date: Fri, 4 Sep 2026 12:08:22 +0200 Subject: [PATCH] perf: hand the flow editor's content to the AI session it opens Co-Authored-By: Claude Opus 5 (1M context) Claude-Session: https://claude.ai/code/session_01KcyBRxE8j3ujCYkum9KrC4 --- .../src/lib/components/FlowBuilder.svelte | 19 ++++++- .../sessions/OpenInSessionButton.svelte | 6 +++ .../components/sessions/editorSeed.svelte.ts | 35 +++++++++++++ .../sessions/sessionRuntime.svelte.ts | 51 +++++++++++++++++++ .../sessions/sessionSwitch.svelte.ts | 17 +++++-- .../components/sessions/sessionSwitch.test.ts | 5 +- .../sessions/useUserDraftSync.svelte.ts | 6 +++ 7 files changed, 133 insertions(+), 6 deletions(-) create mode 100644 frontend/src/lib/components/sessions/editorSeed.svelte.ts diff --git a/frontend/src/lib/components/FlowBuilder.svelte b/frontend/src/lib/components/FlowBuilder.svelte index 52af60d7a7..c5ef4ac8ca 100644 --- a/frontend/src/lib/components/FlowBuilder.svelte +++ b/frontend/src/lib/components/FlowBuilder.svelte @@ -116,6 +116,7 @@ import { isCloudHosted } from '$lib/cloud' import { UserDraft } from '$lib/userDraft.svelte' import { setOpenInSessionHandoff } from './sessions/openInSessionContext' + import { captureEditorSeed, type EditorSeed } from './sessions/editorSeed.svelte' let { initialPath = $bindable(''), @@ -736,12 +737,28 @@ // falling back to `$pathStore` in drawer mounts that carry no storage path. const sessionTargetPath = $derived(liveEditorDraftStoragePath || $pathStore) + // Hand the session the flow as this editor holds it, so its preview mounts on + // content instead of re-fetching (and rebuilding every step's schema) what is + // already on screen. Best-effort: no seed simply loads as before. + function seedForSession(): EditorSeed | undefined { + if (!sessionTargetPath || !opWorkspace) return undefined + return captureEditorSeed({ + kind: 'flow', + path: sessionTargetPath, + workspace: opWorkspace, + flow: flowStore.val, + flowState: flowStateStore.val, + saved: savedFlow + }) + } + const sessionOpen = $derived( sessionTargetPath ? { target: { kind: 'flow' as const, path: sessionTargetPath }, workspaceId: opWorkspace ?? undefined, - beforeOpen: persistDraftForSession + beforeOpen: persistDraftForSession, + seed: seedForSession } : undefined ) diff --git a/frontend/src/lib/components/sessions/OpenInSessionButton.svelte b/frontend/src/lib/components/sessions/OpenInSessionButton.svelte index 03ce21589e..090e353a8c 100644 --- a/frontend/src/lib/components/sessions/OpenInSessionButton.svelte +++ b/frontend/src/lib/components/sessions/OpenInSessionButton.svelte @@ -1,5 +1,6 @@