Split the web terminal into its own Fileglancer app - #15
Merged
Conversation
mkitti
force-pushed
the
web-terminal-https
branch
from
August 29, 2026 01:39
6196ec0 to
9d3bca8
Compare
Moves terminal-https/terminal-podman-https out of the root runnables.yaml into a new terminal/runnables.yaml, so Fileglancer offers "Marimo AI Sandbox" and "Marimo AI Sandbox - Web Terminal" as two independently addable apps instead of bundling the terminal option into the Marimo app's card. Fileglancer discovers every runnables.yaml in a cloned repo and treats each as its own app (confirmed by reading fileglancer's own apps/manifest.py _find_manifests_in_repo and the frontend's multi-app AddAppDialog) -- no separate repo needed. Runnable names now also state the backend explicitly (Apptainer/Podman) per request, e.g. "Start Web Terminal (Apptainer, HTTPS)" instead of just "Start Web Terminal (HTTPS)", for consistency with the already-explicit "(Podman, HTTPS)" variant. One real gotcha found and fixed while building this: Fileglancer runs a job from the directory containing whichever manifest it came from (a manifest at terminal/runnables.yaml means the job's cwd is $FG_WORK_DIR/repo/terminal, not the repo root), and `pixi run <path>` for a path that isn't a declared pixi *task* name resolves that path against the caller's cwd, not the pixi workspace root (verified directly against pixi's own behavior -- this is a real, confirmed distinction: declared tasks like "terminal-https" itself DO run with paths resolved against the workspace root, but a bare script path like "container/terminal-wrap.sh" does not). So terminal/runnables.yaml's command fields use "../container/terminal-wrap.sh", not "container/terminal-wrap.sh" -- the existing root-level runnables never needed this since their manifest already lives at the repo root. Verified end-to-end: `pixi run --environment https ../container/terminal-wrap.sh ...` from within terminal/ (exactly what Fileglancer's generated job script does) correctly finds and runs the wrapper, which correctly finds and runs ttyd inside the sandbox. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
mkitti
force-pushed
the
split-terminal-app
branch
from
August 29, 2026 01:39
5973eeb to
f590bd9
Compare
Fileglancer jobs cd to $FG_WORK_DIR/repo (the repo root), never into the directory containing the manifest that defined them, even when that manifest lives in a subdirectory (terminal/runnables.yaml here). The manual `../container/terminal-wrap.sh` path was based on a wrong assumption about this, verified only by hand-testing cwd from terminal/ directly rather than an actual Fileglancer job. Confirmed live: fileglancer job 162 failed with "No such file or directory" launching '../container/terminal-wrap.sh'. Fix to the same repo-root-relative path the root runnables.yaml already uses for https-wrap.sh.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Stacked on #14 (which is stacked on #13, #12, #11).
Summary
terminal-https/terminal-podman-httpsout of the rootrunnables.yamlinto a newterminal/runnables.yaml, so Fileglancer offers "Marimo AI Sandbox" and "Marimo AI Sandbox - Web Terminal" as two independently addable apps instead of one bundled card. Confirmed directly against Fileglancer's own source (apps/manifest.py's_find_manifests_in_repo, the frontend's multi-appAddAppDialog): it discovers everyrunnables.yamlin a cloned repo and treats each as its own app -- no separate repo needed.A real gotcha found and fixed while building this
Fileglancer runs a job from the directory containing whichever manifest it came from -- a manifest at
terminal/runnables.yamlmeans the job's cwd is$FG_WORK_DIR/repo/terminal, not the repo root. Andpixi run <path>for a path that isn't a declared pixi task name resolves that path against the caller's cwd, not the pixi workspace root -- verified directly: a declared task (e.g.terminal-httpsitself) runs with itscmdstring's relative paths resolved against the workspace root, but a bare ad-hoc script path (container/terminal-wrap.sh) does not. Soterminal/runnables.yaml'scommand:fields use../container/terminal-wrap.sh, notcontainer/terminal-wrap.sh-- the existing root-level runnables never needed this since their manifest already lives at the repo root.Verification
pixi run --environment https ../container/terminal-wrap.sh ...run directly from withinterminal/(exactly what Fileglancer's generated job script does) -- confirmed it correctly finds and runs the wrapper, which correctly finds and runsttydinside the sandbox.yaml.safe_load).Test plan
python3 -c "import yaml; yaml.safe_load(...)"on bothrunnables.yamlandterminal/runnables.yamlterminal/runnables.yaml's exact command form, invoked from withinterminal/, against the real image🤖 Generated with Claude Code