# Changelog All notable changes to finrod are documented here. Format: [Keep a Changelog](https://keepachangelog.com/en/1.1.0/). Versioning: [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ## [Unreleased] ### Added - Vim bindings in the input via CodeMirror 6 + `@replit/codemirror-vim` (loaded from esm.sh, no build step). Supports `i`/`Esc`, `hjkl`, word/line motions, `dd`/`yy`/`p`, undo/redo, `/` search, `:` command line. Auto-disabled on touch devices (detected via `(pointer: coarse)`) where modal editing fights the virtual keyboard. ## [0.1.0] - 2026-06-09 First release. Stateless translator UI that proxies streaming requests to Ollama on radagast. ### Added - FastAPI backend with three endpoints: - `GET /api/models` — filtered (`gemma,aya` by default) list from Ollama's `/api/tags` - `POST /api/translate` — streams Ollama's NDJSON `/api/generate` response back to the browser - `GET /api/loaded` — proxies Ollama's `/api/ps` for the currently-loaded model - `GET /healthz` — for Kubernetes probes - Single-page UI: - Source / target / model dropdowns (30+ languages, "Auto-detect" source) - Token-by-token streaming into the output pane with a blinking caret - Live status line: spinner while waiting for first token, pulsing dot during streaming, elapsed time and token count - Glowing border on the output pane during streaming - Loaded-model indicator (`● ` prefix in dropdown, "Hot: … — unloads in Xm" status line); refreshes on page load, on translation completion, and 500 ms after typing pauses - ⌘/Ctrl-Enter to translate from the input - Dark mode, inline SVG favicon (Star of Fëanor) - Dockerfile: two-stage `uv` build, slim Python 3.13 runtime - `build.sh`: multi-arch (amd64 + arm64) manual push to Scaleway, tags `:latest`, `:`, and `:` - Cluster deploy via the `valinor` repo at `apps/finrod/` (bjw-s app-template, internal-only ingress at `finrod.jpnadas.xyz`) ### Fixed - Lock against public PyPI explicitly — the workstation's global `uv` config had pointed `uv.lock` sources at the dexterenergy private artifact registry, which 401'd inside Docker