CHANGELOG.md
Rama main · réplica de lectura del repositorio original.
# Changelog
## Unreleased
### Fixes
- **Big Ollama models no longer fail with "command timed out".** Starting a
model that wasn't downloaded yet ran `ollama pull` with a fixed 30-minute
limit, so a 20 GB model on an ordinary connection (about 4 MB/s needs over an
hour) was stopped partway through. The pull now runs until it finishes and
only gives up if Ollama writes nothing new for 10 minutes ("download stalled
… start it again to resume"; Ollama keeps what it already has), with a
12-hour upper bound.
### Changes
- **Source control in Connectors: GitHub.** Click **Sign in with GitHub**, enter
the code RigSpark shows on github.com (it opens for you), and every chat session can list and read issues and open pull requests;
add local repository folders and it can commit there, and push a new branch
(never `main` or `master`) so it can open a pull request. RigSpark talks to
`api.github.com` itself (no MCP server to install). The token is kept in an
owner-only file and sent only to GitHub. Reads ask once per session; pull
requests, commits and pushes ask every time, and commits carry RigSpark's trailers.
GitLab, Bitbucket and Azure DevOps are listed as coming soon.
- **Commits made through RigSpark are marked.** Coding agents started with
`rigspark connect` (Claude Code, Codex, OpenCode) and the OpenCode chat harness
add two trailers to every commit:
`Co-Authored-By: rigspark-community-<model> <353924278+rigspark[bot]@users.noreply.github.com>`
and `Signed-off-by: Rigspark <noreply@rigspark.ai>`. 353924278 is the
`rigspark[bot]` account, so GitHub shows the RigSpark app as co-author. Git's hooks path is set for the agent process
only; the repository's own hooks still run first, and no git config is edited.
`git commit --no-verify` skips hooks and so skips the trailers. Agents set up by
hand (Pi, Hermes, OpenClaw, Cline) are not covered.
## 3.1.3 (2026-11-10)
### Fixes
- **Ollama models whose published manifest lists the wrong config size now start.**
Ollama's registry serves `qwen3-coder:30b` with a config entry listing 539 bytes
for a 542-byte blob whose digest is correct; the installed-model check refused it.
A small config is now accepted on its digest; weights and every other layer still
need both digest and size to match.
### Tests
- New tests pin security rules that mutation testing showed no test checked:
tool-approval limits, the artifact lock, catalog download redirects and size
limits, workspace path rules, and the catalog checks on Ollama manifests
(layer counts, vision projector pins and blob sizes).
## 3.1.2 (2026-11-10)
RigSpark now lives at <https://github.com/rigspark/rigspark>. 3.1.1 reached
crates.io, but its downloads and desktop update were never published, so
3.1.2 is the first app release with the 3.1.1 changes below.
### Changes
- **New home: `rigspark/rigspark`.** Update checks, the desktop updater,
catalog updates, model requests and every link now use the new address.
Container images from this release are at `ghcr.io/rigspark/rigspark`.
Apps older than 3.1.2 may stop showing "Update to …" on their own; use
Runtime › Check for updates in the desktop app, or download 3.1.2 from the
releases page.
### Fixes
- A test that compared a path with forward slashes failed on Windows and
stopped the 3.1.1 release.
## 3.1.1 (2026-11-10)
### Features
- **Calmer screens: details on demand.** Runtime now shows the memory bar
and the runtimes you have; the hardware table, the fine print and runtimes
that aren't installed sit behind "Machine details", "N more not installed"
and "How RigSpark keeps everything local". Voice engines this machine can't
run are left out. Model rows show size only (quant, context and source are
in the model's detail panel), page intros are one short line, and the chat
footer drops the harness and an empty context count.
- **RigSpark sets up ComfyUI and mlx-audio itself.** Pictures, video and voice
no longer ask you to install Python tools or set `RIGSPARK_COMFYUI_DIR`. The
first time you generate a picture or video (or choose Set up on an mlx-audio
voice), RigSpark asks once, then installs a pinned ComfyUI 0.38.2 or
mlx-audio 0.6.4 into its own folder with uv, every download checked against
a SHA-256 pin. After that it finds, starts and stops ComfyUI on its own, on a
loopback port. An existing ComfyUI (a server on 8188 or `~/ComfyUI`) and a
system mlx-audio are still used as they are. New routes:
`GET /api/generation/engines` and
`POST /api/generation/engines/{comfyui|mlx-audio}/install`.
### Changes
- **First-run notice order.** The notice now opens with the user's
responsibilities (outputs, model licences, local data), then the warranty
disclaimer and the name and logo terms, and closes with the licence line.
- **Terms of Use.** New `TERMS.md` with the full RigSpark Community Terms of
Use, also readable in the app from the first-run notice. Existing users see
the notice again once.
### Fixes
- **Deleting and renaming chats works in the desktop app.** The Mac app's
WebKit view has no handler for the browser's `confirm()` and `prompt()`, so
they returned "no" without showing anything: Delete and Rename did nothing,
and so did Install update and starting a model with custom context, KV cache
or parallel slots. These now use the workspace's own dialog in the app and
the browser alike. A delete that fails says so, and the chat list refreshes
either way.
## 3.1.0 (2026-11-09)
### Features
- **First-run notice.** The GUI and desktop app open with a short notice that
states, in bold, the MIT licence terms, the "as is" warranty disclaimer,
that each model's licence and every generated output are the user's
responsibility, that the licence covers the code and not the RigSpark name
or logo, and that data stays on the device. It is shown until confirmed and
can be reopened from Runtime › Terms and licences.
- **Image chat makes the shape you need, in several versions.** The
composer's Image mode picks thumbnail (16:9), wallpaper (9:16) or square and
1, 2 or 4 versions, each on its own seed; keep a seed to steer one picture.
Results download, copy to the clipboard, or go to a connected app (Canva,
Figma, a file store) through the chat and its approvals; RigSpark does not
re-implement editors. Generation jobs and `rigspark generate --aspect` take
`square`, `landscape` or `portrait` and report their seed; time per picture
is measured, never estimated.
- **Voice in the workspace (Community Edition).** Models gains a **Voice**
tab: a curated catalog of speak models (kokoro-82m, chatterbox via
mlx-audio on Apple Silicon) and listen models (Whisper large-v3-turbo q8_0,
small q8_0 and base.en via whisper.cpp, pinned and SHA-256 verified), each
with a memory-only fit and its licence. Chat can speak replies, read any
reply aloud, take dictation from the microphone, and a new **Voice** mode
writes a script with the text model and reads it, or reads your exact
text, with an inline player and WAV download. Any loopback server with
OpenAI's audio endpoints can be attached instead.
- **Runtime view revamp.** A live memory bar shows what voice models take
next to everything else, voice engines show their state, endpoint and stop
control, and voice settings cover spoken replies, microphone, audio output
and attaching a server.
### Changes
- **A quieter composer.** Reply mode (Text, Image, Video, Voice), image shape
and versions, voice options and Speak replies now sit behind the **+**
button. A non-text mode shows as one chip ("Image · Thumbnail 16:9 · 4
versions") that reopens the menu, with × back to text.
- **Menu bar icon** is a one-hood macOS template image that follows light and
dark menu bars, so RigSpark and RigSpark Crew are easy to tell apart. The
Dock icon is unchanged.
- **Contributor guide.** `CONTRIBUTING.md` and a pull request template cover
the MIT licence of contributions, DCO sign-off, setup, the checks CI runs and
the house rules.
## 3.0.9 (2026-11-09)
### Fixes
- **llama.cpp chat no longer gives up after 30 seconds.** A reply that first
reads a long prompt (an agent's repo rules, tools and files) while other
requests share the server could take longer than 30 s, and every such call
failed as a transport error. Chat now gets 120 s, the same as the local
harness allows a whole call; embeddings keep 30 s.
- **llama.cpp chat sends `temperature`.** It was accepted and then dropped.
### Features
- **Agents can use tools on llama.cpp.** Chat sends the tool list and the
history's tool calls and results in OpenAI's shape (with `tool_call_id`s),
and returns the model's tool calls (arguments as a JSON string or object).
Before, llama.cpp chat sent only each message's text, so an agent with tools
never got a tool call back.
- **`ChatInput.max_tokens` caps a reply's length**: `max_tokens` on
llama.cpp, `num_predict` on Ollama. Unset keeps each server's default.
## 3.0.8 (2026-11-08)
### Features
- **llama.cpp replies carry the server's own timings.** `ChatResult.timings`
holds what llama-server measured for that reply: prompt and generated tokens,
their milliseconds, cached prompt tokens and speculative draft tokens
accepted. `prompt_tokens_per_second()` and `generated_tokens_per_second()`
give exact speeds, with no client-side estimate. Other backends leave it
empty.
- **KV slots can be saved, restored and erased.** A llama.cpp server rigspark
starts gets a private `kv-slots/` directory beside its state file
(`--slot-save-path`). `ChatInput.slot` pins a request to a slot (`id_slot`,
with prompt caching), and `kv_slot_with_config` saves a slot's KV cache to a
named file, restores it into any slot, or erases it. That frees a slot during
a long pause such as a tool call and brings the conversation back without
re-reading the prompt.
- Slot names are 1 to 64 letters, digits, `-` or `_`; slots are 0 to 15.
- The server is re-identified before and after each slot action, as for chat.
### Changes
- **The website moved to its own repository.** The www.rigspark.si source
(`site/`) and its Pages deploy now live in the private `rigspark-web` repo,
with their history. The brand kit the README, GUI and design kit use moved
from `site/brand/` to `assets/brand/`.
- `cargo catalog-site` now takes `--output` and `--site` explicitly and is
run by rigspark-web's daily catalog sync, not by catalog admission here.
- The site checks (download links, FAQ structured data, canonical URL,
catalog counts) run in rigspark-web's CI.
### Fixes
- **Stopping a model server no longer gives up while it shuts down.** After the
stop signal, an identity probe can fail briefly while the server exits (seen
on macOS with Ollama). `rigspark up` and `down` used to stop with "process
identity unavailable after signal" and keep a stale record, even though the
server then exited. Now they keep waiting: up to 3 s for a clean exit (model
servers unload weights) before forcing.
- Still fails closed: a process is only signalled, and only force-stopped,
after its identity matches the one RigSpark started.
- If nothing listens any more and the recorded process is gone, or its PID
now belongs to another program, the server counts as already stopped.
## 3.0.7 (2026-11-05)
### Features
- **Signed and notarized Mac app.** `RigSpark_aarch64.dmg` and
`RigSpark_x86_64.dmg` are signed with a Developer ID, use the Hardened
Runtime and are notarized and stapled by Apple, so macOS opens them without
the "Open Anyway" step.
- The bundled `llama-server` is signed with the same identity.
- Tagged releases fail instead of shipping an unsigned dmg when the signing
or notarization secrets are missing; see
[docs/references/macos-signing.md](docs/references/macos-signing.md).
## 3.0.6 (2026-10-31)
### Features
- **Windows installer.** Releases include `RigSpark_x64-setup.exe`, the desktop
app as a per-user NSIS installer with no admin prompt. The download section
on the site offers it to Windows visitors.
- It bundles a CPU-only (AVX2) `llama-server` built from the same pinned
llama.cpp commit, with a static C runtime, so the starter model runs
without installing anything else.
- While that bundled build serves llama.cpp, model advice ignores discrete
GPUs, so verdicts reflect how it actually runs.
- Before uploading, the release job installs it silently and checks that
the app and `llama-server.exe` were installed and that `llama-server.exe`
runs.
- In-app updates cover Windows: `latest.json` gains `windows-x86_64`.
## 3.0.5 (2026-10-31)
### Features
- **Ready to run after install.** The Mac app bundles a `llama-server` built
from pinned llama.cpp v0.8.0 (Metal, no other dependencies), so a model runs
without installing Ollama or llama.cpp.
- A user-installed llama.cpp still takes precedence over the bundled one.
- On first launch the chat screen offers a starter model that runs well on
this machine (Qwen3 8B, 4B or smaller), with one **Download & start**
click. On llama.cpp it starts at an 8K context.
- `qwen3:4b` and `qwen3:8b` gain pinned official Qwen GGUF sources, with
cited records in `docs/references/catalog-corrections.json`.
- **Launch at login is on by default** after the first launch, starting in the
menu bar. Turn it off in **Tools**.
### Fixes
- **The Mac app is no longer reported as damaged.** Release bundles are now
sealed with an ad-hoc signature, and the release job verifies the seal with
`codesign --verify --deep --strict`. macOS asks once to approve the
un-notarized app (**Open Anyway**) instead of refusing to open it.
## 3.0.4 (2026-10-31)
### Features
- **Mac desktop app.** Releases include `RigSpark_aarch64.dmg` (Apple Silicon)
and `RigSpark_x86_64.dmg` (Intel). They are unsigned and not yet notarized,
so on first launch Control-click the app and choose Open.
- RigSpark stays in the menu bar when its window closes, and can launch at
login.
- In-app updates install only after their signature is verified against the
key built into the app.
- When opened from Finder, it finds runtimes in `/opt/homebrew/bin` and
`/usr/local/bin`.
- **Add from Hugging Face.** `rigspark add` and the **Add from Hugging Face**
button at the top right of Models search GGUF repositories and list every
single-file quantization with a fit verdict.
- The chosen quantization is pinned to its commit and SHA-256 in a local
catalog (`~/.rigspark/catalog/local.json`) and marked *added by you*.
- It runs on llama.cpp or Ollama with the usual fail-closed digest check.
- Only repositories with a recognized open-weight license are accepted.
- **Speculative decoding** on llama.cpp: models with a catalog drafter use it
by default (`qwen3:0.6b` for Qwen3 14B, 30B-A3B and 32B).
- The drafter's SHA-256 is verified, and its memory is reserved before the
fit check.
- `--speculative auto|draft|ngram|off` overrides the default.
- Catalog schema v4 adds the optional `drafter` field; catalogs without
drafters are still published as v3.
- **Parallel slots.** `--parallel N` runs concurrent requests: one unified KV
pool on llama.cpp, and `OLLAMA_NUM_PARALLEL` on Ollama, with memory sized
per slot.
- **`rigspark bench`** measures the active server with fixed, versioned
prompts: time to first token, prefill and decode tok/s, draft acceptance,
and combined throughput across concurrent requests. Figures the runtime
does not report show as `unknown`.
- **`rigspark connect <agent>`** starts Claude Code, Codex or OpenCode against
the active server without editing their config files, and prints setup
steps for Pi, Hermes, OpenClaw and Cline.
- **GUI.**
- A **Coding agents** panel in Tools.
- **Speculative** and **Parallel slots** settings under Fit settings.
- In the desktop app, the theme follows the macOS appearance until you
choose one.
### Fixes
- **New models reach users again.** The weekly model-admission job had failed
since Oct 12, because a test hard-coded a date that went stale once the job
re-stamped the catalog.
- **Upgrading uses the newer catalog.** A newer catalog bundled with an
upgrade now replaces an older downloaded one, instead of staying pinned to
the last `catalog --update`.
- **A gone model server no longer blocks you.** After a reboot or a daemon
exit, `up`, `switch` and `down` clear its stale record instead of refusing
to continue. No running process is ever signalled. Chat errors now name
the cause and the next step.
- **Ollama 0.40+.** rigspark reads Ollama's new content-addressed manifest
store (`manifests-v2`) and the upstream manifest digest Ollama now reports.
A linked blob must hash to its address, and an embedded digest is trusted
only when its blob verifies.
- **Start catches models the runtime can't run.** After switching to an
Ollama model, rigspark loads it once, so a runtime that cannot run it (for
example an unknown architecture) fails at start with Ollama's reason
instead of on the first chat.
- **Safer context defaults.** A model whose memory at a given context can't be
sized now starts at 8K, instead of a percentage of its maximum or a runtime
default that fills free memory. llama.cpp accepts an explicit context
window.
- **Chat memory without an embedding model.** Chat no longer drops the
conversation when `nomic-embed-text` is missing or unreachable: the turn
and facts are saved, and chat explains how to enable recall search.
- **Download progress** shows the file's real size instead of the limit used
to check it.
- **Command-line fixes.**
- `rigspark bench` and `rigspark connect` no longer panic.
- `connect --dry-run` is accepted.
- The Homebrew `PATH` fallback applies only to the desktop app.
- **Dialog.** Escape closes Add from Hugging Face even after focus has left
the dialog.
## 3.0.3 (2026-10-16)
### Generation
- Enable Ming Image 0.1 Design INT8 for UI/UX mockups in the CLI and browser GUI.
The verified pairing uses the 19.51 GB INT8 text encoder (25.94 GB total weights),
not the smaller W4A8 fit-only estimate. Other Ming variants remain fit-only.
Real generation and inline GUI preview passed on a 36 GiB Apple Silicon Mac with
ComfyUI 0.38.0. CUDA and peak inference memory remain uncertified; generated
lettering may be garbled. The default image model is unchanged.
- Accept native ComfyUI single-choice COMBO capability schemas while rejecting
malformed options and unsupported multiselect inputs before downloading weights.
- Retry failed download-resume requests within the existing bounded retry budget,
preserving exact range, commit, size, and final SHA-256 verification.
- Website and README show a real locally generated Ming UI/UX example.
### Fixes
- GUI: on narrow screens a long conversation could make the whole page
scrollable, adding blank space under the chat and stopping the reply from
following new text. The screen-reader-only "You"/"Assistant" labels now stay
inside their message.
### CI
- Desktop verification runs on `main` again (it only targeted retired migration
branches), uses the same `--test-threads=2` as CI, and finds ChromeDriver even
when the runner image doesn't set `CHROMEWEBDRIVER`.
- Browser journeys retry clicks on list items that were re-rendered, and the
narrow-screen scroll checks use the chat's real scroller.
## 3.0.2 - 2026-10-09
### Support the project
- `brew install` now ends with a short note: if Sparky helps you, please
consider sponsoring the project at <https://buymeacoffee.com/shashanksw9>.
Cargo can't print messages after an install, so `rigspark --help` ends with
the same note. The README, guide and site link to it too, and the repository
shows a Sponsor button.
### Fixes
- GUI: the "Skills this agent loads" checkboxes in the Library agent editor no
longer stretch to half the row and squeeze each skill name onto several lines.
### Tests
- The `gui_launcher` process tests no longer time out under parallel load on
macOS.
### Docs
- The guide's agents/skills and connectors recordings show the 3.0 interface.
## 3.0.1 - 2026-10-09
### Licensing
- Release archives now include `fonts.OFL.txt`, the SIL Open Font License 1.1
for the Inter and JetBrains Mono fonts that `rigspark-gui` has embedded since
3.0.0. `THIRD-PARTY.md` lists both fonts with their versions and upstreams.
- Correct the copyright notices in the font license shipped with the GUI and
the site: they named Bricolage Grotesque instead of the fonts RigSpark
actually ships (Inter 4.001 and JetBrains Mono 2.211).
### Tests
- The full-catalog ranking test no longer depends on the CI runner's live
memory. Route tests check the limit bounds, and the full-catalog properties
are checked against fixed hardware.
## 3.0.0 - 2026-10-08
### A redesigned workspace
`rigspark gui` and the desktop app have a new, minimal interface. Every feature
is still there, but each control now appears where and when you need it.
- **Model chip.** One chip in the top bar holds the model, runtime, harness, and
agent pickers, the endpoint/turns/context status, and Refresh.
- **Inspector.** Live RAM/CPU/disk/latency, the latest call's token usage, and
hardware move into a panel you open from the top bar, with ⌘I, or by clicking
Sparky.
- **Sparky status companion.** The sidebar's Sparky and memory ring follow real
RAM pressure (*All good*, *Getting busy*, *Memory is tight*). When telemetry
is unavailable it says *Metrics offline* instead of guessing.
- **Chat.** A 3D Sparky welcome with suggestion pills; a composer **+** menu for
context, skills, and the system prompt; a Text/Image/Video switch; an agent
chip; and a round Send button. Sparky is the assistant's avatar.
- **Models.** A ranked list with a Sparky face per verdict, search, and
*All / Runs well / Slow / Won't fit* filters. A memory bar appears only when
both required and usable memory are known. Context window, KV cache, and fit
toggles move into a **Fit settings** popover, and the per-model runtime
picker appears on hover.
- **Full catalog.** Models now loads the whole ranked catalog (up to 1,000
entries; 253 today) instead of the top 100, so search and filters reach every
model. The top results are unchanged.
- **Connectors.** An empty state with Filesystem, Git, and Custom templates that
open a pre-filled *Add connector* sheet. The JSON editor is a collapsible
section.
- **Library.** Agents and Skills are tabs, with starter templates that pre-fill
the form.
- **Runtime.** System Settings-style grouped lists for this machine and the
inference runtimes. No hardware score is shown, because none is sourced.
- **Light and dark themes**, remembered across launches; ⌘1–⌘5 switch views and
Esc closes popovers and sheets.
- Refreshing an empty chat keeps the welcome instead of a blank pane.
### Desktop app
- New app icon from the Sparky brand kit, with transparent corners.
- The window opens on the dark workspace colour instead of flashing white.
### Site
- The site's model count now comes from the shipped catalog (253 models, up
from a hand-written 69). `cargo catalog-site` stamps it into the page, so the
weekly admission keeps it current, and CI fails if it drifts.
- **Ask Sparky** now takes your graphics (Apple Silicon, NVIDIA, AMD/Intel, or
CPU only), memory or VRAM, and free disk. It applies the CLI's own fit rule,
marks downloads that won't fit on disk as *no*, and shows estimated tok/s only
for hardware classes with sourced bandwidth data, otherwise *unknown*. Model
sizes and hardware classes are generated from the catalog and `perf.json`
instead of being typed into the page; across 1,008 combinations the preview
matches `rigspark can-run` exactly.
### Breaking changes
- The GUI layout and markup changed. Element IDs used by the app's own scripts
are kept, but anything that automates the old layout (for example, expecting
the model pickers, fit controls, or metrics to be visible without opening
their popover or panel) needs updating.
- `/static/mascot-avatar.jpg` and `/static/mascot-welcome.jpg` are removed.
Brand assets are now served from `/static/brand/` and fonts from
`/static/fonts/`. SVGs are served with a sandboxed Content-Security-Policy.
## 2.4.0 - 2026-10-08
### Image and video models
- Pick the active Text, Image, and Video model in separate Models tabs; Chat
generates with the selected image or video model directly. The separate
Create view is retired, ComfyUI is detected automatically, and finished
images and videos have a Download action.
- Run FLUX.1 schnell FP16 through ComfyUI's official split workflow (UNET,
T5, CLIP-L, and VAE as separate pinned files). The previous single-file
entry could not load, because that file holds only the diffusion model.
- Add a Wan 2.1 T2V 1.3B BF16 variant, and lengthen Wan videos from 33 to 49
frames (about 3 seconds at 16 fps).
- Add Qwen-Image and Wan 2.2 TI2V-5B built-in workflows, following ComfyUI's
official example graphs.
- Skip re-hashing cached weights that are unchanged since their last full
SHA-256 check (same device, inode, size, mtime, and ctime). Any change still
forces a full hash; Windows and whole-second filesystems always re-hash.
### Catalog
- Admit the latest open local models every week. Text models are admitted only
when every fact comes from the shipped artifact; image and video releases
without a built-in workflow are fit-only and labelled *workflow coming*.
Auto-admitted entries are marked *auto-sourced*, and unsourced facts stay
`unknown`.
- Filter by recency with `--month 1|2|3` on `recommend` and `catalog`, `m` in
the terminal UI, and "Released in" in the GUI.
- Add review-gated weekly image and video enrichment from Hugging Face,
including current LFS metadata (`lfs.sha256`).
- Cut `recommend`, `can-run`, and `catalog` startup to about 10 ms by
compiling validation patterns once instead of per model.
### Distribution and docs
- Publish a multi-platform container image (`ghcr.io/shashankswe2020-ux/rigspark`)
built from the verified release archives. Linux release binaries need glibc
2.39 or newer.
- Rewrite the README and site around Sparky.
## 2.3.0 - 2026-10-05
### Local image and video generation
- Add a curated, offline generation catalog with FLUX.1 schnell (image) and
Wan 2.1 T2V 1.3B (video), both Apache-2.0, pinned to Hugging Face commits
with SHA-256 digests. `rigspark catalog --generation` shows a memory-only fit
verdict; generation speed is reported as `unknown`.
- Add `rigspark generate image|video` for an existing local ComfyUI install:
verified weight install, built-in workflows from the official examples,
loopback-only, no credentials, and a fail-closed allowlist that keeps paid
Partner/API nodes unreachable. Outputs are never overwritten.
- Generate from the terminal UI (`rigspark generate --tui`), from the GUI Create
view, or straight from chat with the new Text · Image · Video toggle.
- Use the euler sampler for Wan on Apple MPS, where the official uni_pc sampler
produced corrupt video in live testing.
- Unload the previous workflow's models through ComfyUI's `/free` when
switching between image and video on Apple Silicon (shared memory), or on
discrete GPUs when free memory is below the next model's weights.
- Resume interrupted multi-gigabyte downloads with HTTP Range while keeping the
final SHA-256 and size checks fail-closed.
### Terminal UI
- Replace the model list with a sortable table (rank, quant, memory need,
verdict, tok/s, score) that drops low-priority columns on narrow terminals;
add verdict filters, fuzzy name search with highlighted matches, a memory fit
gauge, side-by-side comparison, and copy of the model id, `rigspark up`
command, or a 72-column shareable card over OSC 52.
- Stream chat replies with lightweight markdown, scrollback, copy of the last
reply, and locally measured first-output and total time.
- Show `up`, `switch`, and `down` progress as a stage checklist with elapsed
time; unfinished stages stay unconfirmed.
- Add mouse support (opt out with `RIGSPARK_NO_MOUSE`), scrollbars,
synchronized output, and `RIGSPARK_THEME` light and high-contrast palettes.
## 2.2.0 - 2026-10-02
### Catalog quality and automation
- Add source-backed catalog enrichment proposals with bounded official metadata
collection, optional extraction, explicit human review, and separate evidence
promotion, model admission, and signing steps.
- Require independently sourced 90% release-quality gates and preserve audit,
discovery, tag-inventory, and Hugging Face evidence for reproducible review.
- Make weekly catalog refreshes resumable and diagnosable with cursor-based
batches, deterministic observations, bounded rejection reasons, pending-review
protection, and visible partial failures without relaxing publication gates.
### Models and advice
- Add Bonsai and Qwen3.5 catalog entries with pinned provenance and honest GUI
advice. Uncalibrated binary throughput remains `unknown`.
- Distinguish newly installed and already-current signed catalog updates in the
GUI, and keep success or failure feedback visible after an update attempt.
### Chat rendering
- Render TeX offline with pinned KaTeX assets while preserving the existing
sanitized Markdown boundary.
- Harden rich-response rendering for malformed and unsafe content, preserve
Unicode boundaries in streamed fixture responses, and align response timing
metadata with rendered output.
### Distribution
- Align generated Homebrew formula metadata with release archives.
## 2.1.0 - 2026-09-30
### Independently Updated Catalogs
- `rigspark catalog --update` explicitly downloads and activates a signed model
catalog without replacing the application. Advice stays offline.
- `rigspark catalog --status` and the Models view expose snapshot provenance;
the GUI has an explicit update action with non-destructive failure handling.
- Ed25519 verification, bounded HTTPS downloads, atomic shared cache activation,
revision rollback checks, and verified previous/bundled fallback protect updates.
- Provision the production public key and protected catalog-only publication
workflow. The channel must be published before live updates are available.
### Qwen 3.6 and Projector Integrity
- Add `qwen3.6:35b` (35B total / 3B active) with sourced model and vision-projector
sizes/digests. Hybrid KV geometry and unsourced benchmark proxy remain unknown.
- Count projector weights in enrichment sizing and pin projector identity/size
during Ollama pull and context activation. Invalid pins fail before acquisition.
- Add optional `projectors` metadata to catalog quantizations. Older strict
readers reject this extension instead of ignoring integrity requirements.
## 2.0.0 - 2026-09-30
### Breaking: renamed to RigSpark
- The primary executable is now `rigspark`; `llmup` stays as a compatibility
alias. Crates publish as `rigspark-cli`, `rigspark-gui`, `rigspark-core`,
`rigspark-runtime` and `rigspark-crossterm`, replacing the `llmup-*` crates.
- Environment variables use the `RIGSPARK_` prefix, including `RIGSPARK_HOME`.
Stop running servers, then move your data directory to `~/.rigspark` or point
`RIGSPARK_HOME` at it. Nothing is moved or deleted automatically.
- The desktop bundle identifier is now `org.rigspark.desktop`, so operating
system permissions may need to be approved again.
- Release archives are named `rigspark-<target>`.
### KV cache profiles
- `--kv-cache` sizes advice at a chosen KV cache type (`fp16`, `q8_0`, `q4_0`),
and `up`/`switch` apply the cache profile to owned launches.
- The browser GUI adds a KV cache selector with offline re-sizing.
### Fixes
- The browser GUI keeps its recommendation JSON unchanged unless a KV cache type
is chosen, matching `can-run`.
## 1.0.2 - 2026-09-28
### Fixes
- Tool-using chat works again with Ollama 0.32 and newer. Ollama now adds an
`id` and an `index` to each tool call; rigspark rejected those fields, so
chat with MCP connectors or agent tools either failed outright or silently
dropped every tool call and returned an empty reply.
## 1.0.1 - 2026-09-27
### Install
- Every tagged release now ships verified prebuilt archives for macOS (Apple
Silicon, Intel), Linux (x64, ARM64) and Windows (x64) with a `SHA256SUMS` file.
Install with `brew install shashankswe2020-ux/tap/rigspark` or
`cargo binstall rigspark-cli rigspark-gui`.
### Planning and hardware profiles
- `llmup plan <model>` shows every execution path (GPU, multi-GPU, CPU offload,
unified memory, CPU) with fit, memory shortfall and throughput basis. Paths
split across devices report speed as `unknown` rather than an estimate.
- `--hardware <profile.json>` evaluates `recommend`, `can-run`, `doctor`,
`catalog` and `plan` against a saved hardware profile.
- Unified memory is detected from memory topology (NVIDIA shared-memory SoCs and
AMD APUs), not only Apple Silicon.
### Fixes
- `llmup down --forget` clears a stale pointer to an attached server whose daemon
restarted; previously `up`, `down` and `doctor` failed until `state.json` was
edited by hand. Owned servers are still never cleared without stopping them.
- `llmup gui` stops its browser host when the terminal closes, and the host
handles `SIGTERM` and `SIGHUP` gracefully, so GUI-started Ollama daemons are no
longer orphaned.
- The GUI never sends connector environment values (such as API secrets) to the
browser; the config editor shows placeholders and keeps saved values.
- GUI model start failures show the real reason instead of `invalid request`.
- GUI sizes are labelled GiB/MiB/KiB to match their binary units, the chat turn
count refreshes when switching chats, and per-message tok/s covers decode time
only and is omitted when a reply is too short to estimate.
## 1.0.0 - 2026-09-26
### Native Rust release
- `rigspark` is now a native Rust application. The TypeScript sources, npm
package, Electron shell, and every Node.js build, test and CI dependency are
retired; `cargo native-retirement` fails if any return.
- Install from crates.io: `cargo install rigspark-cli --locked --bin llmup --bin rigspark`
and `cargo install rigspark-gui --locked`. The npm package receives no further
releases; commands, flags, JSON output and `~/.rigspark` state are unchanged.
- Measured against the published 0.11.4 on an Apple M4 Max: startup is about 24×
faster (5.8 ms vs 139.6 ms), advice commands 1.4–1.7× faster, and peak memory
falls from about 72 MiB to 15 MiB. Advice JSON is equivalent.
- The curated dataset moved to `crates/rigspark-core/data/` and the vendored browser
libraries to `crates/rigspark-gui/vendor/` so they ship inside the published crates.
- The bounded-input crossterm patch is published as `rigspark-crossterm`; Ratatui
keeps upstream crossterm for rendering only, and a test pins that all terminal
input goes through the patched parser.
### Fixes found during the migration
- Hardware detection no longer times out on macOS: free disk space comes from
`statvfs` instead of a purgeable-space query that could take 30+ seconds.
- Auto-selection and `doctor` never choose attach-only LM Studio as the default.
- MLX model directories that name a custom loader (`model_file`) are rejected.
- Windows LM Studio executables are trusted regardless of path prefix, separator
or case differences.
- `switch` and `down` reject a `--backend` or `RIGSPARK_BACKEND` that conflicts
with the active server instead of ignoring it.
- Provider text after an SSE `[DONE]` terminator is no longer shown.
- Memory stores readable by group or other users now fail closed.
### CI
- All workflows run without Node-backed actions: an exact-revision `git fetch`
replaces checkout, Pages publishes the `gh-pages` branch, and the backlog
workflow uses `gh project item-add`. The Node TUI compatibility matrix is removed.
- Browser client unit suites (run reducer, SSE framing, Markdown policy,
calculator template, live telemetry) now run in real Chrome through WebDriver.
## 0.11.4 - 2026-09-17
### Development Tooling
- Upgraded Vitest and V8 coverage to 5.0.1 and refreshed vulnerable transitive
development dependencies. Root and desktop dependency audits report no known
vulnerabilities at release preparation.
- Development tests now require Node.js 22.12+; built CLI runtime compatibility
remains Node.js 18+. CI runs build/test tooling on Node 22 before checking the
built CLI on the existing Node 18/20/22/24 matrix.
- Added backend validation and failure-path tests, keeping the existing coverage
thresholds intact under the updated coverage engine.
### Model Selection and Context
- Added `--bypass` to `up` and `switch` for explicit estimated-fit overrides,
while retaining weight integrity, disk, loopback, and process-ownership checks.
- Added installed Ollama model comparisons through `recommend --installed` and
`can-run --installed`, with exact tags, custom ports, context sizing, and an
optional known-fit filter. Missing KV geometry and throughput remain unknown.
- Added `can-run --context` and runtime context configuration for Ollama. Context
variants preserve the original model tag and are used by CLI and desktop chat;
`ls` reports the runtime tag for OpenCode and other OpenAI-compatible clients.
- Added desktop installed-model selection, 64K/custom context controls, fit
filtering, and explicit bypass confirmation. Starting from either catalog
cards or model details now carries the displayed context into activation.
### Integrity and Compatibility
- Verify uncatalogued installed models against their local manifests and every
referenced blob, preserving catalog digest or size-floor checks when available.
Local content integrity is explicitly distinguished from catalog provenance.
- Preserve externally owned Ollama daemons and reject changed process identity
or model manifests before recording activation. Switching models clears stale
context-variant metadata.
- Keep ordinary advice deterministic and offline, and preserve side-effect-free
launch-module imports through shared context validation.
## 0.11.3 - 2026-09-03
**OpenCode harness with visible tool activity, plus a create-workspace surface.**
### Chat Panel and OpenCode Harness
- Added the `opencode` chat harness. It drives the OpenCode CLI in JSON mode
through a shell-free child process, streams its `text` events, and now
surfaces `tool_use` and `reasoning` events as inline markdown blockquotes
(e.g. `🔧 \`write\` · path`, `🔧 \`bash\` · command`) so the panel shows the
model's actual tool loop instead of only the final answer. Bare model IDs
are normalized to `ollama/<id>` and an inline local Ollama provider is
injected when the target is Ollama, so a workspace-selected local model just
works.
- Fail-closed by default: `permission: "deny"`, `share: "disabled"`,
`autoupdate: false`, `snapshot: false`, `shell: false`. Setting the env var
`RIGSPARK_OPENCODE_UNRESTRICTED=1` explicitly opts a local machine into
OpenCode's full tool loop (`permission: "allow"`, `share: "auto"`,
`autoupdate: true`, `snapshot: true`). This is not the default and must be
set on the machine — the shipped registry remains deny-by-default.
- Added output caps (1 MiB prompt / 16 MiB stdout), typed cancellation,
malformed-event and non-zero-exit fail-closed handling, and 11 harness tests.
### Workspace
- Added `POST /api/workspace/root/create` and `WorkspaceService.createRoot()`
so the browser panel can create an approved workspace root explicitly,
behind the existing per-launch token and exact-origin checks. Existing
registration semantics, canonicalization, and denylist behavior are
unchanged.
- Added a built-in calculator template in the workspace picker: propose,
review through the existing reviewed-edit path, and open in a sandboxed
same-origin preview iframe (no model-generated code is ever loaded here).
The runtime uses a CSP-safe recursive-descent evaluator, not `eval`.
### Backend Capabilities
- Added an explicit `supported | unsupported | unknown` embedding-layer offload
capability to backend adapters. Current backends report `unknown` until
runtime support can be observed without inference.
### Model Selection
- Prefer a recognized higher-precision quantization when multiple fitting
variants have the same measured memory footprint. Unknown quantization
formats remain ordered by measured size without fabricated quality estimates.
## 0.11.2 - 2026-09-01
**Broader model coverage with an auditable catalog pipeline.**
### Model Catalog
- Added the official `gemma4:e4b-it-qat` Ollama artifact with its verified model
digest, exact weight size, 128K context cap, and QAT Q4 metadata. Context
memory remains explicitly unknown until Gemma 4 hybrid-attention KV geometry
is curated.
- Added curated Ollama entries for Gemma 3n E2B/E4B, Qwen3
0.6B/1.7B/4B, and Phi-4 Mini 3.8B, including verified model-layer sizes and
digests. Unsupported KV-cache geometry remains explicitly unknown.
- Added a weekly upstream repository coverage audit that reconciles one GitHub
issue with missing discovery candidates. It never auto-admits models, and it
cannot detect missing variants inside an already-covered repository because
Ollama does not expose a public tag-enumeration endpoint.
- Added catalog overview and enrichment-process documentation to the README and
project site.
## 0.11.1 - 2026-08-30
**Readable, secure Markdown responses in the local AI workspace.**
### New Features
- Assistant responses now render sanitized GitHub-Flavored Markdown with
headings, nested and task lists, blockquotes, tables, links, code fences,
language labels, and persistent Copy/HTML Preview actions.
- Streaming output is frame-batched, converges to the same final DOM regardless
of token fragmentation, and follows only while the reader remains near the
bottom.
- Replaced the connector demo with two real, explicitly approved WHOOP tool
calls and an actual-value health briefing.
### Security and Accessibility
- Added GUI-specific multiline sanitization without weakening terminal output
sanitization, plus strict Marked/DOMPurify tag, attribute, link, and image
policies.
- Added a deny-by-default CSP, no-store handling for token-bearing HTML,
MIME/referrer/frame/permissions hardening, and scriptless artifact previews.
- Upgraded the desktop packaging toolchain to `electron-builder@26.15.3`,
removing the critical/high archive and credential-redirect advisories in the
previous builder dependency graph.
- Added semantic browser coverage, stable accessible names, keyboard focus,
concise streaming announcements, hostile-input tests, and responsive checks
down to 320 px.
## 0.11.0 - 2026-08-30
**Model performance intelligence and a complete local AI workspace.**
### New Features
- **Dedicated model performance view.** Selecting a catalog model now opens a
complete performance dossier with the composite recommendation score and all
five score dimensions, estimated throughput and provenance, memory and
context/KV-cache evidence, model metadata, capabilities, supported runtimes,
quantization sizing and integrity state, and catalog sources. Unknown values
remain explicitly unknown.
- **Durable chat workspace.** Browser and desktop chat now support bounded,
owner-only multi-session history with create, search, rename, archive, delete,
export, and restart recovery.
- **Reliable run lifecycle.** Server-owned run IDs, stop/cancellation
propagation, terminal-state guards, durable failures, retry, and fragmented
SSE handling prevent duplicate or late completions.
- **Explicit workspace context.** Users can select a bounded workspace, attach
files or line ranges, paste terminal output or diagnostics, and include
read-only Git status/diffs. The context ledger records hashes, sizes,
truncation, and inclusion decisions.
- **Safe tools and edits.** MCP calls expose locally classified risk, redacted
arguments/results, and approval decisions. Model edits remain inert proposals
until diff review and hash-guarded apply; stale or conflicting files fail
closed.
- **Native folder selection.** The hardened Electron shell exposes one narrow,
sandbox-safe directory chooser bridge without granting renderer filesystem
access.
- **Docker distribution.** A digest-pinned, non-root, multi-platform CLI image
is published to GitHub Container Registry for `linux/amd64` and
`linux/arm64`, with immutable release tags and `latest`.
### Security and Privacy
- Workspace roots require explicit user selection and remain containment- and
symlink-checked; reads are bounded and mutations are revision/hash guarded.
- Sending workspace context to a cloud harness requires a visible disclosure
decision before any content leaves the machine.
- The GUI and desktop Runtime Host remain loopback-only with strict Host,
Origin, content-type, and capability checks.
### Documentation and Validation
- README and site now lead with the model performance view and provide npm,
native desktop, and Docker installation choices.
- Added deterministic browser and Electron journeys for chat, sessions,
cancellation, context, tools, edits, accessibility, and responsive model
details.
- Added client reducer and arbitrary-fragment SSE tests plus expanded GUI,
workspace-policy, session-store, and release-packaging coverage.
## 0.10.0 - 2026-08-27
**Intel Arc/Xe GPU detection.**
### New Features
- **Intel GPU detection.** Hardware detection now recognizes Intel Arc (discrete)
and Xe (integrated) GPUs. A discrete Arc's dedicated VRAM counts toward fit and
the yes/slow/no verdict; integrated Xe stays conservative (shared memory isn't
credited). With no sourced Intel performance profile, throughput stays
`unknown` rather than guessing (honesty gate). (#223)
### Fixes
- macOS desktop app is ad-hoc signed so Apple Silicon no longer reports it as
“damaged”.
- Desktop installers (macOS / Windows / Linux) now attach to the published
GitHub Release on every release.
- Site: OS-aware installer bar with a platform dropdown and per-OS icons.
## 0.9.1 - 2026-08-27
**Desktop app icon, one-click installers, and a green release pipeline.**
### New Features
- **Desktop app icon.** The Electron app and site now use the brand silver
diamond mark (matching the GUI rail), wired into the window, the macOS Dock,
and electron-builder for all platforms.
- **Direct desktop downloads.** The site's Desktop section links straight to the
packaged installers (macOS `.dmg`, Windows `.exe`, Linux `.AppImage`).
- **Release CI builds installers.** The release workflow now builds and publishes
the desktop installers for macOS, Windows, and Linux on every tagged release.
### Fixes
- Make the release workflow pass reliably: build before test so dist-dependent
tests have `dist/bin.js`, poll for a stable rendered frame in TUI tests to end
first-paint races on slower CI runners, and refresh the noninteractive goldens.
## 0.9.0 - 2026-08-27
**Agentic browser workspace: connectors, agents & skills, tools, and inline graphs.**
### New Features
- **MCP connectors.** Attach Model Context Protocol servers to the workspace —
local `stdio` commands or loopback HTTP/SSE only. Add, enable, disable, and
remove connectors; each connector's tools become available to the chat, which
the model calls in an agentic tool loop.
- **Agents & skills library.** Author reusable **agents** (persona / system
prompts) and **skills** (instruction blocks), stored locally as markdown with
YAML frontmatter (the Claude Code / Codex convention). Full create / edit /
enable / disable / delete. An agent can bundle the skills it always loads, and
any skill can be toggled per message; the selection is composed into a single
system prompt server-side.
- **Inline images & graphs in chat.** The chat panel now renders generated
images and graphs inline, served from a validated, loopback-only artifacts
endpoint (`GET /api/images/:name`) — basename-only, image-extension allowlist,
no traversal.
- **Backend picker in the workspace.** Recommendation cards expose a per-model
runtime selector so every backend (Ollama, llama.cpp, MLX, LM Studio) is
reachable directly from the browser, not just the auto-selected default.
### Fixes
- **MLX executable check** now recognizes macOS framework Python
(`.../Python.framework/.../Python`), so MLX chat works on Homebrew Python
instead of being rejected as an unapproved backend executable.
- **Local chat harness** captures the live listener process identity, so
fail-closed inference works for attached backends (e.g. LM Studio) instead of
refusing to run without process/model-path identity.
- The Runtime pill in the chat header reflects the active backend instead of the
dropdown default.
### Catalog
- Added small, fast validation models to the catalog and bootstrap sources
(`qwen2.5:0.5b` across Ollama/HF/GGUF and `qwen2.5:0.5b-mlx`).
### Documentation
- Recorded new workspace demos (agents + skills + tools solving and plotting a
quadratic with an inline graph, and the MCP connector lifecycle) and refreshed
the site and README with the current UI.
## 0.8.1 - 2026-08-26
**Browser GUI bug fixes.**
### Fixes
- Made the Session sidebar functional: the "Current session" button now reloads
chat history and switches to the chat view (was dead, non-functional UI).
- Removed misleading static "Previous run"/"Memory" placeholders that had no
backing store.
- The turn count now refreshes after a successful chat instead of going stale
until a manual refresh.
- The status strip reflects the real active-model endpoint instead of a
hardcoded `127.0.0.1:11434`; `/api/models/active` now owns the active-model
card, fixing a race that could overwrite it with the session placeholder.
## 0.8.0 - 2026-08-26
**In-browser model management + neobrutalist site redesign.**
### New Features
- The browser GUI can now manage models end to end: pick a recommended model for
your hardware or start one directly, then chat — all driven by the same
`recommend`, `up`, and `ls` engine as the CLI.
- Added a `GuiModelManager` bridge with `GET /api/models/recommended`,
`GET /api/models/active`, and `POST /api/models/up` routes. Requests are
Zod-validated and models are brought online through the verified `up`
lifecycle (integrity checks and active-server state included).
- The Models view surfaces the same yes/slow/no verdicts and est. tok/s as the
CLI, with a Start button that serves a chosen model on `127.0.0.1`.
### Documentation
- Recorded a real browser GUI demo GIF and Models-view screenshot; added a
Browser GUI section to the README.
- Redesigned the marketing site with a neobrutalist theme (thick borders, hard
offset shadows, cream paper, colored icon tiles) documenting every feature,
the full 11-command surface, and the new Browser GUI.
### Validation
- Added GUI model-management unit coverage and server route tests.
- Verified with the project’s full typecheck, lint, build, and test gates.
## 0.7.0 - 2026-08-26
**Browser GUI + pluggable chat harness adapters.**
### New Features
- Added a loopback-only browser GUI for interactive chat sessions.
- Added a pluggable chat harness registry for `local`, `claude`, `openai`, and `openai-compatible` providers.
- `llmup gui` now starts a browser-backed local/cloud chat server with safe host validation and JSON output mode.
- `llmup chat --harness <name>` routes non-local prompts through the selected provider without disturbing the default local backend path.
- Cloud harness availability checks fail closed when required credentials or runtime configuration are missing.
### Validation
- Added harness unit coverage, GUI server coverage, and chat regression tests for the non-local harness path.
- Verified the feature with the project’s full test, typecheck, build, and lint gates.
- Refreshed the release demo assets to match the current command surface.
## 0.6.1 - 2026-08-10
**Documentation patch.**
- Add real TUI screenshots and end-to-end demo GIF recorded with vhs
- Replace HTML `<pre>` mockups with actual terminal captures
- Include VHS tape files for reproducible re-recording (`assets/*.tape`)
## 0.6.0 - 2026-08-10
**Terminal User Interface (TUI) — Release Candidate.**
This release adds a full interactive terminal UI that activates automatically in
capable terminals (TTY ≥60×16) and degrades gracefully to plain text elsewhere.
### New Features
- **Interactive TUI** with Ink 5 + React 18 rendering to stderr:
- **Recommend screen** — searchable, scrollable model list with selection,
marking, comparison, and detail overlays.
- **Doctor dashboard** — box-drawn diagnostics, backend version table, AI
Hardware Score axes.
- **Catalog browser** — search, filter, refresh diff, and model details.
- **Lifecycle progress** — real-time staged pull/verify/serve with Ctrl+C
cancellation and partial-state compensation.
- **Chat screen** — multi-line input (Ctrl+J), streaming responses, draft
validation (32 KiB / 8192 graphemes / 256 lines), session summary on exit.
- **Model picker** — keyboard-navigable model selection for switch/migrate.
- **`ls` card** — active server status with auto-exit for implicit TUI.
- **Accessible mode** (`--accessible`) — cooked line-oriented fallback for
screen readers. Never enters raw mode or writes cursor-control sequences.
- **Mode auto-selection** — visual / accessible / plain chosen by terminal
capabilities, environment, and user flags.
- **Cancellation model** — signals trigger a 30-second cleanup timeout with
compensation (partial state cleared, cursor restored, raw mode exited).
Second signal forces immediate exit with documented exit codes.
- **Session ownership** — terminal resources (raw mode, cursor, resize listener,
stdin pause/resume) are tracked and restored on any exit path.
- **Performance budgets** — cold-start regression ≤20 ms p90, TUI module load
≤150 ms p90, tarball increase ≤250 KiB, install increase ≤15 MiB.
- **Terminal hygiene guarantees** — no stuck raw mode, no hidden cursor, no
orphan processes (proven by automated smoke tests).
### Infrastructure
- 23 new TUI test files (337 assertions) covering screens, session, keys,
cancellation, chat limits, lifecycle, model picker, and budget gates.
- TUI-specific CI workflow (`tui-compatibility.yml`) with runtime-proof,
package-budget, and dependency-policy jobs across macOS/Linux/Windows ×
Node 18/20/22/24.
- `tui:package-budget`, `tui:runtime-budget`, and `tui:dependency-policy`
scripts enforce performance gates in CI and locally.
- Total test count: **1459 tests** across **87 files**, all passing.
### Dependencies Added
- `ink` ^5.2.1, `react` ^18.3.1 (lazy-imported; zero cost on non-TUI paths)
## 0.5.0 - 2026-08-08
Phase 2 llama.cpp production hardening after real-process smoke testing.
- Replaced invalid GGUF catalog coordinates with verified Hugging Face commit,
filename, size, and LFS SHA-256 metadata; self-managed weights now require a
digest and are never served after an unverified pull.
- Bounded and serialized direct downloads with cancellation, byte ceilings,
progress, redirect/SSRF validation, stale-part cleanup, owner-only cache
permissions, symlink refusal, and atomic verified promotion.
- Chat and migration now use the active loopback endpoint and canonical runtime
model alias instead of hard-coded ports/Ollama ids.
- llama.cpp attach/spawn/stop now bind HTTP identity to the expected model path,
alias, listening address, PID, canonical executable, and process start time.
- Fixed repeated/cross-backend `up`, single-model `switch`, backend preference
precedence, persistent log-pipe deadlocks, and stale-state cleanup.
- Real Ollama smoke testing fixed macOS listener identity for `ollama serve` and
implemented the advertised embedding capability with trusted-endpoint checks,
bounded requests/responses, timeout/cancellation, and strict vector validation.
- Added the Apple-Silicon MLX backend (audited `mlx-lm==0.31.3`) with platform gating,
loopback-only lifecycle, process-bound inference, bounded OpenAI-compatible
chat, per-session bearer authentication, browser-origin/content-type/body-size
guards, custom-code refusal, vector-less embedding fallback, and fail-closed multi-file repository
acquisition from a pinned per-file SHA-256/size manifest. Direct-adapter real
smoke passed pull/cache→serve→inference→stop with SmolLM2 360M on a custom
port; catalog/CLI MLX smoke remains gated on curated MLX source data.
- Completed Phase 3 backend selection: MLX is auto-preferred only on Apple
Silicon, is omitted from non-Apple `recommend`/`can-run` servability output,
and remains honesty-gated to unknown throughput because no cited MLX
efficiency scalar is shipped.
- Added the attach-only LM Studio backend for GGUF and Apple-Silicon MLX models.
It discovers downloaded models through bounded, schema-validated `lms` JSON,
verifies locatable GGUFs against catalog SHA-256, names any unavoidable
delegated-integrity boundary, and never auto-selects or owns the LM Studio
process. Attach/readiness/chat/embedding are bound to the exact trusted
executable, PID, process start, model identifier, and delegated model path.
Real LM Studio 0.4.20+1 smoke passed exact marker chat and 768-dimensional
embeddings on a custom loopback port.
## 0.4.1 - 2026-08-07
Bug fix: `--version` now reports the actual installed version.
- `rigspark --version` was printing a hard-coded `0.3.2` string that had
drifted from the real package version. The CLI now reads the version from the
bundled `package.json` at runtime, so it always matches the installed release
and can never drift again.
## 0.4.0 - 2026-08-07
Pluggable backends (foundation) — the advisor now understands that a model can be
served by more than one runtime, and surfaces which backends apply. Ollama
remains the sole servable backend in this release; the new flags are informational.
- `doctor` gains a **Backends** section: each known backend (`ollama`,
`llamacpp`, `mlx`, `lmstudio`) with its installed/version status and the
default. Detection is offline and best-effort — an absent backend reports
cleanly rather than erroring.
- `recommend` and `can-run` now surface a **`backends`** list per model and a
**`throughputBackend`** field in `--json`, pinned to `ollama` by default so
advice stays deterministic and byte-identical regardless of what is installed.
- `recommend`/`can-run` gain **`--backend <name>`** to scope the throughput
estimate to a specific runtime; `recommend` gains opt-in
**`--available-backends`** to filter to models servable by an installed
backend. The default advice path never probes installation and never drops
models — unsourced `(class, backend)` pairs report `unknown` (honesty gate).
- The model catalog now accepts **`gguf`** and **`mlx`** sources alongside
`ollama`, and memory capture is vector-less when the active backend cannot
embed (no fabricated vectors). Internal: backend registry, capability
descriptors, intent-split selection, fail-closed user config, and a state
schema v2 (with v1→v2 migration) now underpin all commands.
## 0.3.2 - 2026-08-06
Docs: the README now includes visual aids so command output is easier to grasp.
- Added Mermaid diagrams — a command lifecycle flowchart and a `yes / slow / no`
verdict decision tree — plus `xychart-beta` performance graphs for estimated
throughput (tok/s) and the AI Hardware Score breakdown. No code changes.
## 0.3.1 - 2026-08-06
Bug fix: `up` no longer fails for models without a recorded catalog digest.
- The size-only integrity fallback previously required the downloaded weights to
match the catalog's approximate `diskBytes` **exactly**. Because that figure is
a rough estimate — real Ollama pulls routinely differ, and are often larger —
`up` (and `switch`) failed with a spurious `size mismatch` for any model that
lacks a recorded SHA-256. The fallback is now a plausibility floor: it rejects
only grossly-truncated/empty downloads (below half the estimate) while
tolerating benign differences. The strict digest path — and Ollama's own
manifest verification during `pull` — are unchanged, so integrity is preserved.
## 0.3.0 - 2026-08-06
Context-window sizing — `recommend` now understands how much context each model
can actually hold on your machine, and how a target window changes the ranking.
- `recommend` gains **`--context <tokens>`**: re-ranks the catalog with the KV
cache sized at your chosen window (fp16), so models that no longer fit at that
context drop out or fall to `slow` with a `context-bound` reason.
- `recommend` gains **`--max-context`**: reports the largest context each model
can hold on your hardware, bounded by either the model geometry or your memory
(`boundBy: model | hardware`).
- `--context` and `--max-context` are mutually exclusive; both surface in
`--json` alongside a `kvPrecision: "fp16"` field. Unknown geometry reports
`unknown` rather than a fabricated number (honesty gate).
- Site adds a full command reference; README revamped with real per-command
terminal output.
## 0.2.0 - 2026-08-06
Local AI Hardware Advisor (v1.0) — the tool now tells you not just what fits, but
how well it will run, with no pricing data or maintenance liability.
- `doctor` now reports an **AI Hardware Score** (0–100) and your **primary
bottleneck** (VRAM / RAM / compute / storage); `--json` includes both.
- New **`can-run <model>`** command: a single `yes | slow | no` verdict with the
binding reason and an estimated tok/s range. Exits non-zero only for `no`, so
it is scriptable (`rigspark can-run <model> && rigspark up <model>`).
- `recommend` gains a **Verdict** (✓ yes / ⚠️ slow / ❌ no) and **Est. tok/s**
column; `--json` gains `verdict` and `estTokPerSec` per row.
- Added a memory-bandwidth **throughput estimator** (roofline model) backed by a
curated, cited hardware performance dataset (`data/perf.json`). Throughput is
always a range; hardware with no profile reports `unknown` rather than a
fabricated number (honesty gate).
- Ranking order and existing command behavior are unchanged.
## 0.1.0 - 2026-08-05
- Initial public release of rigspark.
- Added hardware-aware model recommendation and local install/serve flows.
- Added chat, migrate, ls, catalog, and doctor commands.
- Added a curated model catalog with weekly refresh automation hooks.