Skip to content

llmtrim 0.1.12

Choose a tag to compare

@github-actions github-actions released this 15 Jun 19:26
· 17 commits to main since this release

Added

  • Logo-faithful terminal motifs in the shared UI. The ui design system speaks the
    logo's "trim the wool, same sheep" story in one voice: a wordmark banner
    (‹‹ llmtrim ››), the shear before→after metaphor on the savings axes
    (108.8M ─✂─▶ 34.8M), a hero accent style, and a sparkline. monitor's hero carries
    the ✓ same answers, smaller bill promise, and monitor --daily/--weekly/--monthly and
    update lead with the wordmark.
  • Redesigned status dashboard. A single dominant hero figure in a clean box — the
    real, cache-discounted dollars that came off the bill — with the promise
    (✓ same answers, smaller bill) beneath it, the input savings drawn with the shear metaphor
    (108.8M ─✂─▶ 34.8M), and a new 7-DAY TREND sparkline of daily tokens saved. The header
    collapses to one calm strip (‹‹ llmtrim ›› ● running · … ✓ healthy) when healthy, expanding
    to per-link warnings only when degraded. The savings bars fill with the accent (the win grows
    the solid block), and the BY MODEL table is sorted by $ saved with a light header rule.
    The added-latency footer and every honesty caveat are preserved.

Changed

  • The LLMTRIM_CAPTURE_DIR corpus is now size-capped. Capture wrote one JSON per
    request with no ceiling, so a long-lived daemon could fill the disk (which then starves
    the daemon's own pidfile and ledger writes). It now evicts the oldest *.json captures
    once they exceed LLMTRIM_CAPTURE_MAX_MB (default 1024; set 0 to disable). The sweep
    counts only top-level capture files (any other files you keep in the dir are left alone)
    and runs on a background thread, so it never blocks request handling.

Fixed

  • status --watch no longer drifts on terminals narrower than its longest line. The
    in-place repaint assumed one logical line per screen row, so a soft-wrapped line (e.g. a
    daemon warning) left stale rows. Lines are now truncated to the terminal width (ANSI-aware)
    before the repaint; the full text still prints in the one-shot status.
  • llmtrim update now prints the correct npm upgrade command. It printed
    npm update -g @llmtrim/cli, which npm treats as a no-op for a globally installed package
    already on a satisfying version; it now prints npm install -g @llmtrim/cli@latest.
  • llmtrim update on a Homebrew install now prints a command that works. The Homebrew
    arm told you to run brew upgrade llmtrim, but the formula is tapped as
    fkiene/tap/llmtrim. On a machine that never added the tap, that errors with "no
    available formula named llmtrim" and you stay on the old binary. It now prints the
    tap-qualified, idempotent form (brew tap fkiene/tap then
    brew upgrade fkiene/tap/llmtrim).
  • status no longer reports "stopped" while the proxy is serving. Health was decided
    from the pidfile alone, so a daemon whose pidfile went missing (e.g. lost to a full disk)
    showed the loud "stopped — LLM calls will fail" banner even though the proxy was still
    live on the wired port. status now probes that port directly: a proxy answering with no
    pidfile reads as running-but-degraded (llmtrim can't confirm it owns the listener, so it
    flags "no pidfile … re-run llmtrim setup") instead of the false "stopped". The
    supervised daemon also re-records its own pidfile on restart, so a transient loss
    self-heals.
  • llmtrim autostart no longer hardcodes the default port. Run with no --port, the
    command wrote the default port into the login entry regardless of the port your daemon
    and HTTPS_PROXY were actually on, so a reboot could bring the interceptor up on a port
    the environment wasn't wired to (LLM calls then fail until re-fixed). It now resolves the
    port the same way setup/start do — explicit --port, else the running daemon, else
    the configured env — and only falls back to the default when nothing is pinned.
  • uninstall's closing message now names the leftover env vars and gives a remedy that
    works.
    It said only "open a new shell", which never told you what was left behind and
    read as optional. It now spells out that the current shell still has HTTPS_PROXY,
    HTTP_PROXY, and NODE_EXTRA_CA_CERTS exported (the exact set setup writes) and that
    clearing them means a new shell or unset HTTPS_PROXY HTTP_PROXY NODE_EXTRA_CA_CERTS
    not re-sourcing the profile, which leaves an already-exported var set.