Repository navigation
Svelte app with OpenMS WebAssembly, running entirely on the user's machine - #411
t0mdavid-m wants to merge 3 commits into
Conversation
A Svelte single-page app (frontend/) and a FastAPI server bound to 127.0.0.1 (server/) that reproduce the template's pages and the TOPP Workflow Framework, running entirely on the user's machine. The server reuses ParameterManager, FileManager, Logger and tasks.execute_workflow, so workflows run their unchanged execution() and workspaces are shared with the Streamlit app. The isotope pattern and fragmentation logic moves into src/ so both frontends use it. frontend/PARITY.md tracks feature parity. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01FQ2PLCaTnA3oG5uyMXNU1U
Insight's Python bridge and Vue bundle run unchanged. server/insight.py runs a dashboard function with Streamlit's session state, rerun and component call replaced, looping until the components settle as Streamlit's reruns would. InsightView.svelte loads the bundle in an iframe per component and speaks the Streamlit component protocol to it. The example workflow's results page gains an Insight feature table linked to an intensity plot. openms-insight stays optional. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01FQ2PLCaTnA3oG5uyMXNU1U
|
Failing checks on 228aa60:
All three fail the same way as on 564a544. The client gets Why it is not this PR's: the failures follow the GitHub runner image, not the commit.
Each run, the jobs that land on the new image fail and the others pass, so the failure seems to move between jobs. This PR doesn't touch any of the files the failing check depends on:
I expect main to fail the same way once its kind jobs get the 20261018 image. The likely cause is that image's kernel NFS client running against the Ganesha server in Fix: none exists yet. It belongs in a separate change to the storage setup or CI, not in this PR. I'll re-run the failed jobs once when the run completes. They only go green if they land on the older image. Generated by Claude Code |
Replace the Python server with the OpenMS WebAssembly build (as prose-web): an engine Web Worker, workspaces in the browser's file system, the workflow framework, tools and steps in TypeScript, and an optional Share button that uploads a workspace to share-server/share.py. Adds a local launcher with the isolation headers, Node tests on the module and a Node-only CI job. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01FQ2PLCaTnA3oG5uyMXNU1U
Requested by Tom · project thread
Before: the template offered only the Streamlit app, which needs a Python server with pyOpenMS and the TOPP tools.
After:
frontend/is a Svelte single-page app that runs OpenMS itself in the browser as WebAssembly, the way prose-web does. There is no backend. Workspaces live in the browser's storage, and workflows run on the user's machine. Data leaves the machine only when the user clicks Share workspace. That button is optional: it uploads the workspace (input files only if a box is ticked) toshare-server/share.pyand returns a link that opens a copy.How:
@openms/openms-wasm-mtpackage is fetched and checksum-pinned onnpm install. It runs in a module Web Worker, and each workflow run gets its own worker, so Stop terminates that worker.params.jsonformat, so presets and exported workspace ZIPs carry over between the two apps.WorkflowSpec,getFiles,runTool,runStep, the three log files and the outcome markers) mirrorsWorkflowManager.src/Workflow.py:FeatureFinderMetabois built on MTD, EPD and FFM.frontend/serve.pyserves the build on localhost with the COOP/COEP headers that threads need. On other hosts a service worker adds those headers.server/,requirements-svelte.txt,tests/svelte/) is removed.svelte-check, vitest on the WebAssembly module (including the example workflow end to end), and the build.Run it:
cd frontend && npm install && npm run build && python3 serve.py. Parity status is infrontend/PARITY.md, and the guide is indocs/svelte_app.md.Known gaps:
🤖 Generated with Claude Code
https://claude.ai/code/session_01FQ2PLCaTnA3oG5uyMXNU1U