Repository navigation
v0.4.0 — The terminal client
The terminal client: use LayerSmith from a jumphost, a laptop or an admin server, through the same API as the web UI.
New
layersmith, a terminal client for a LayerSmith server. A separate, pure-Python package (Python 3.9+) that runs on any machine that can reach the server over HTTP(S). It needs no container runtime, no LayerSmith server installation, no access to the container host and no docker exec.
- Interactive interface - run
layersmithfor a keyboard-driven TUI: dashboard, projects with the selected project's details and the live log of its latest build, the image and LLM training wizards, builds, scans, exports, settings and a connection page with a read-onlydoctor. It works at 80x24, needs no special font, and every status is a word as well as a colour (NO_COLORis honoured). - Command line for scripts - the web UI's functions as commands (
projects,build,builds,export,bundle,scan,scans,training,settings, ...), with--json, JSON Lines for followed jobs, documented exit codes, no prompts without a terminal and--yesfor destructive actions. - Remote by design - local files are uploaded through the API; downloads stream to the client machine and are checked against the SHA256 the server recorded before they get their name. Builds keep running when the client quits or the SSH session drops;
layersmith builds wait <id>re-attaches. A change whose answer was lost is never repeated automatically. - Network - TLS is always verified (an internal CA is supported with
ca_cert), redirects and HTML login pages are errors rather than answers, and HTTP Basic or client certificates work for an authenticating proxy in front of LayerSmith. LayerSmith itself still has no logins, by design.
Install from the files attached to this release - the wheel, or the offline archive with every dependency for Python 3.9-3.13:
curl -LO https://github.com/r0lfi/layersmith/releases/download/v0.4.0/layersmith-client-0.4.0-offline.tar.gz
tar -xzf layersmith-client-0.4.0-offline.tar.gz && cd layersmith-client-0.4.0-offline
sha256sum -c SHA256SUMS
pipx install --pip-args="--no-index --find-links=$PWD/wheelhouse" layersmith-client
layersmith config set server https://layersmith.example.org
layersmith doctorThe client is not on PyPI. Guide: docs/client.md; what it covers of the web UI: docs/client-features.md.
API additions
All additive; existing clients are unaffected.
GET /api/builds/{id}/log?offset=N(or?tail=N) returns a slice of a build log by byte offset, so a client can resume without fetching the whole log again./api/healthlistsapi_features./api/settingsreports the upload, file-count and build-contextlimitsthe server enforces.
The client also works against a 0.3.x server; it then follows logs through the part of the log the server returns with a build, and layersmith doctor says so.
Verified for this release
- The client test suite (CLI, the TUI headless, and the CLI against the real API with a fake build runtime) on Python 3.9, 3.12 and 3.13 in CI; the backend suite and frontend build as before.
- The offline archive installed with networking disabled on Python 3.9 to 3.13 (venv) and with pipx.
- End to end from a separate client container with no server code, data or runtime socket, against a server doing real Podman builds: configure, create a project with an uploaded file, build from the CLI, follow it in the TUI, quit mid-build, re-attach by id, download the archive and air-gap bundle, checksums matching.
Not verified: the TUI in specific terminal emulators beyond headless rendering, a real scanner from the client (findings filters and SBOM download), recording a GPU report, and macOS.
Upgrading
No database change.
docker compose pull && docker compose up -dFull changelog: v0.3.1...v0.4.0
