Headline: the chat scroll rewrite lands. Ink 5.2 → 7.0.2 / React 18.3 → 19.2, the cell-diff renderer is retired, and reasonix code / reasonix chat default to alt-screen with row-precision virtual scroll. PgUp / PgDn / mouse wheel scroll history; an empty prompt + ↑ also scrolls (Ctrl+P / Ctrl+N still recalls prompt history). When scrolled away from bottom, the prompt hides and a 📖 reading history — End / PgDn to return hint appears. Resize-ghost dividers and <Static>-related scroll-yank artifacts are gone with the renderer that produced them. --no-alt-screen keeps the legacy in-shell-scrollback behavior.
web_search gains a configurable backend — Mojeek stays the default, but /web-search-engine searxng <url> switches to a self-hosted SearXNG instance for users whose network blocks Mojeek. And the MCP filesystem sandbox now fails with an actionable mkdir -p '<path>' hint instead of a raw Node stack when the configured directory doesn't exist; the wizard offers to create it inline at config time.
Features
- feat(ui): row-precision virtual scroll on Ink 7 + React 19 (PR #380) —
<Static>retired (incompatible with alt-screen reflow);React.memo(CardRenderer)+ reference-stable cards skip the reconciler on unchanged history.useChatScrolldrives outeroverflow=hidden+ innermarginTop=-Nslide;useBoxMetricsclamps bounds and auto-pins on new content.Appowns PgUp/PgDn/End/wheel; PromptInput hands off ↑/↓ on empty buffer when pinned + idle. Ticker migrated to Ink 7's shareduseAnimation. - feat(web): configurable
web_searchbackend with SearXNG support (PR #338) —/web-search-engineshows / switches the active engine; URL persisted to~/.reasonix/config.json. Mojeek remains default; original Mojeek path preserved assearchMojeek(). Protocol auto-normalizes (localhost:8080→http://...); unreachable SearXNG endpoint surfaces an install hint instead of a raw fetch error.
Bug fixes
- fix(mcp): preflight the filesystem sandbox directory (#362, PR #379) — missing dirs throw
MCP filesystem sandbox '<path>' does not exist — create it with: mkdir -p '<path>'instead of a raw Node stack from insidenpx's child. Wizard adds inline[Y] create / [N] enter different pathconfirm so bad config never reaches disk. Spawn-time path deliberately does not auto-mkdir — by then the user may not remember writing the config. - fix(readme): website URLs corrected from
/reasonix/to/DeepSeek-Reasonix/(PR #375).
Chores
- chore(issue-template): bug template asks for shell + terminal; model-id examples track current DeepSeek lineup (PR #378).
Install
```bash
npm install -g reasonix@0.30.3
or
bunx reasonix@0.30.3 code
```
Full Changelog: v0.30.2...v0.30.3