Skip to content

lantern 0.1.5

Choose a tag to compare

@ianclemence ianclemence released this 29 Sep 06:45
· 19 commits to main since this release

lantern 0.1.5

A conversational terminal over the assessment flow — and assessments are no
longer blocked by the disk floor.

lantern chat

The same pipeline as run and ask, behind a screen. The transcript stays in
the terminal's own scrollback (no alternate buffer, so the terminal's native
scrolling reaches every previous message) while a ten-row viewport at the
bottom holds the status line, the live activity trail and the input:

 example.com |example.com recon|deepseek-flash |idle
 › Check TLS and headers, defensive only
   Enter send · Esc abort · / commands · ^C quit
  • / palette — /target /scope /roles /offensive /dry-run /steps /flows /clear /quit, filtered as you type, Tab completes, an exactly typed name
    wins over the highlighted row, and commands that need arguments stay
    composed instead of erroring on an empty one.
  • Live progress — the flow reports plan, role starts, each tool call and
    role finishes as they happen; the status line carries the running role, the
    step count and elapsed time.
  • Inline approval — active testing requested while the session does not
    allow it raises a card instead of a wall of text: 1 allows it for this
    flow only, 2 (or Esc, which is deny-by-inaction) keeps reconnaissance.
    The session grant is recorded on the per-flow config, so the runtime's own
    check agrees with the card.
  • Steering — a line typed while a flow runs joins the working set and
    cross-role memory at the next step boundary, so the roles still to run act
    on it.
  • Abort — Esc or Ctrl-C sets a flag the runtime checks per model step and
    per tool call. The flow reports aborted, keeps what it finished, and the
    stored report says aborted too rather than completed.

Nothing here is trusted either: without a terminal chat refuses and names
ask; there is still no prompt that can hang; roles cannot stop for questions
in chat (the UI owns stdin), so flows run non-interactively by design.

The disk floor guards provisioning, not work

The 20% free-space floor refused run, ask and chat on machines that were
already configured. Past setup, commands are bounded by the data-root and log
caps, so the floor was blocking work over unrelated disk usage.

It now guards the one step that can actually consume gigabytes —
lantern setup, which downloads packages and builds john from source. The
refusal names setup for the same reason. Reports stay informational:
lantern doctor still prints UNDER THE FLOOR, every startup line still
prints the numbers, and lantern gc still relieves the pressure.

Dependencies

The terminal is ratatui + crossterm (+ unicode-width), which is the Rust
counterpart of the framework this screen was modelled on. No new build tooling
enters the aarch64 build: no cmake, no ring, no bundled libclang.

Verified

  • 234 tests pass, 1 ignored (the live NVD query), 0 warnings — up from 227
    at 0.1.4. Seven new: composer editing on char boundaries, history, palette
    matching and picking, approval keys, line wrapping, plus a runtime test for
    progress events and one for abort semantics.
  • Driven through a real pty that answers cursor-position queries like an
    emulator: intent card, live trail, approval allow-once, Esc mid-flow
    ending in flow flw_… aborted with an aborted row and report in SQLite,
    and a clean session end. A real bug surfaced this way — the session grant
    was not reaching the runtime's process-level check, so a correctly allowed
    flow still warned about --offensive; fixed before release.
  • Floor behaviour verified at 5.21 GB free against the 6.16 GB floor:
    setup refuses naming itself, while run, ask and chat start, complete
    and write their reports.
  • Binary: 8,939,992 bytes (the screen added ~262 KB over the 0.1.4 asset's
    8,612,232). lantern doctor exits in 36–41 ms.
  • run --dry-run measured 0.29–0.94 s idle and up to 15 s while this host was
    loaded (load average 4.8 on four cores) — the spread is the host, not the
    binary, and it is stated here rather than averaged away.
  • No warnings across cargo check --workspace --all-targets, and no line
    added in this window exceeds the project's 100-column style.

Upgrade

git pull
cargo build --release          # ~/.cargo/bin/cargo if it is not on PATH
./target/release/lantern doctor

No database schema change: chat adds a flow status (aborted) and reads the
options already stored, so flows recorded on 0.1.0–0.1.4 still render. No new
required variables, and no change to run or ask flags.

Attached: lantern-v0.1.5-aarch64-linux-gnu (8,939,992 bytes), built on Debian
13 / glibc 2.41 / aarch64. For anything else, build from source as above.