Skip to content

BioRouter v1.80.0

Choose a tag to compare

@Broccolito Broccolito released this 04 Jun 18:26

BioRouter v1.80.0 Release Notes

Release Date: June 2026
Repository: github.com/BaranziniLab/BioRouter

A major feature release. The headline is Knowledge — personal, LLM-maintained knowledge bases backed by markdown trees and full git history. Drop a PDF, a URL, a DOCX, or pasted notes into a base and an agent reads it, classifies its credibility (peer-reviewed vs. preprint vs. web), writes structured pages with [[cross-links]], and commits the change. You get a force-directed graph of how sources connect, a change log you can roll any page back through, and the ability to bring a base into chat as grounded context. Everything is local on disk and self-contained — no new external binaries, no network services beyond the credibility lookups.

Downloads

Platform File Install
macOS (Apple Silicon) BioRouter-1.80.0-arm64.dmg Open the DMG and drag BioRouter.app to /Applications
macOS (Intel) BioRouter-1.80.0-x64.dmg Open the DMG and drag BioRouter.app to /Applications
Windows (x64) BioRouter-win32-x64-1.80.0.zip Unzip and run BioRouter.exe
Linux Ubuntu / Pop!_OS (x64) biorouter_1.80.0_amd64.deb sudo dpkg -i biorouter_1.80.0_amd64.deb
Linux Fedora / RHEL (x64) BioRouter-1.80.0-1.x86_64.rpm sudo rpm -i BioRouter-1.80.0-1.x86_64.rpm

What's New

Knowledge — personal, agent-maintained knowledge bases

A new top-level Knowledge section in the sidebar (between Skills and Settings). A knowledge base is a folder of markdown pages plus a hidden git repo, living at ~/.config/biorouter/knowledge/<kb-id>/. You never have to hand-edit it — an agent does the writing — but because it's plain markdown under git, you can read, diff, and restore everything yourself.

Ingest anything. The ingest panel accepts files (drag-and-drop or picker), pasted text (with URLs auto-extracted into chips), and folders. Supported source conversions:

  • PDF → markdown via pdf-extract, with an LLM-assisted fallback for hard layouts
  • HTML → markdown with title extraction and lossy-UTF-8-safe decoding
  • DOCX → markdown with Heading 1/2/3 mapping
  • CSV → markdown tables
  • URLs → fetched with content-type detection, then converted by the matching path
  • Plain text / notes → stored as-is, with any embedded URLs pulled out as separate sources

Credibility classification. Every source is graded through a ladder: identifier extraction (DOI / arXiv / PMID / ISBN) → Crossref → OpenAlex → host-pattern matching → a peer-reviewed publisher allow-list → an agentic fallback that reasons about the source when the deterministic steps are inconclusive. Retracted works are detected (Crossref) and flagged. You can always reclassify or manually override a source's credibility.

Agent-driven digestion. Ingest, query, and lint run as macros on top of a bounded sub-agent loop with explicit step and time budgets and a cancel button. The agent reads sources, searches the base (BM25 over pages and raw sources), writes pages with frontmatter, appends to the change log, and emits [[knowledge-link]] markers — all committed as a single atomic git transaction so a macro either lands completely or not at all.

Graph view. A force-directed graph (react-force-graph-2d + d3-force) renders the base: nodes are pages and sources colored by credibility, edges are the [[…]] cross-references the agent emits (Obsidian-style [[target|alias]] links are supported). Click a node for an inline preview of its page body; retracted sources get a distinct badge. Hovering dims unrelated nodes so you can trace a neighborhood.

Change log + time travel. A change-log drawer lists every commit with filter chips, a preview of what changed, and a one-click restore that reverts a page (or the whole base) to any prior state — backed directly by git, not a bespoke undo stack.

Use it in chat. A KB chip in the chat bottom menu binds the active base to the conversation, and a /knowledge slash command inserts a templated prompt scoped to that base. The active-KB selection is persisted across MCP-server processes and synced across sessions via GET/POST /knowledge/active, and is scoped per chat session so different windows can focus different bases.

Portable. Export a base to a single .brkb archive and import it elsewhere. Import is hardened against ZIP-slip path traversal (see What's Fixed).

The feature is exposed two ways: as a built-in knowledge MCP extension (so the agent can operate on bases through tools) and as HTTP routes under /knowledge/* on biorouterd (with SSE-streamed macro progress) that back the desktop UI.

Self-contained build — no new binaries

The Knowledge feature ships entirely inside the existing biorouter and biorouterd binaries. The biorouter-mcp crate that houses it is a library, compiled in — not a separate executable. Git operations use a statically vendored libgit2 (git2 with vendored-libgit2), so no system git is required at runtime. The packaged app therefore gains the full Knowledge capability without adding a single new bundled binary or external dependency.

What's Fixed

ZIP-slip hardening in .brkb import

.brkb import now validates every archive entry's destination path before writing, preventing a crafted archive from escaping the target directory and writing arbitrary files elsewhere on disk (a CVE-class arbitrary-file-write).

Amazon Bedrock tool-call pairing

Two fixes to how the Knowledge sub-agent's tool calls round-trip through the provider layer for Bedrock:

  • tool_use_id is now preserved through the Completer → Provider message conversion, so tool results pair with their originating tool call.
  • Multiple tool results produced in a single turn are bundled into one user message, matching Bedrock's expected request shape.

Legacy base migration + stale graph cache

Entering a macro now migrates a legacy schema.md to the current template and refreshes a stale graph cache, so older bases pick up the current behavior (including the [[link]]-emission rules that make graph edges appear) without a manual rebuild.

Knowledge ingest robustness

  • Path/folder ingestion moved fully into the backend, with correct backend URL resolution.
  • HTML conversion decodes lossily so non-UTF-8 pages no longer abort ingestion; digest-stream errors are surfaced instead of silently dropping the stream.
  • read_page is allowed on raw/* paths (writes remain restricted) so the graph node preview can show original source text.
  • Renaming a base updates its folder ids so links and the graph stay consistent.

Desktop UI polish

  • IngestModelPicker is a real dropdown of your configured models and stays aligned with provider settings.
  • The Digest button renders correctly (no black-on-black) and fits the "Digesting…" label.
  • SSE auth uses window.electron.getSecretKey() directly, fixing intermittent HTTP 401s on the ingest stream.
  • A pre-flight model check and a Stop button were added to the digestion progress view.
  • KBSelectorPalette guards empty slugs and surfaces createBase errors; the ChangeLogDrawer close button now actually closes; PasteTextBox uses contrast-safe color tokens.

Upgrading

No manual migration needed. Replace your existing installation with the new package for your platform.

  • macOS: open the new DMG and drag BioRouter.app to /Applications, overwriting the existing copy
  • Linux: sudo dpkg -i biorouter_1.80.0_amd64.deb or sudo rpm -U BioRouter-1.80.0-1.x86_64.rpm
  • Windows: unzip and replace the existing installation folder

Existing sessions and configuration are unaffected. The first time you open the Knowledge section, no bases exist yet — create one from the KB selector palette (⌘K-style) and ingest your first source. Legacy bases created during prerelease testing are migrated automatically on first macro use.

Changes Since v1.76.1

The bulk of this release is the Knowledge feature, developed across six plans plus a hardening pass. Highlights:

Backend foundation

  • feat(knowledge): per-KB markdown store + git wrapper (commit/log, begin/commit-squash/abort txns, preview & restore)
  • feat(knowledge): page CRUD with frontmatter split + safe path resolution; raw source storage with sha256 + slug ids
  • feat(knowledge): conversion for HTML / PDF / DOCX / CSV / URL fetch / pasted-text URL extraction
  • feat(knowledge): credibility ladder — DOI/arXiv/PMID/ISBN → Crossref → OpenAlex → host pattern → publisher allow-list → agentic fallback; retraction detection
  • feat(knowledge): node/edge graph derivation from [[links]] with cache; rebuild after create + add_raw_source

Macros + sub-agent loop

  • feat(knowledge): bounded SubAgent loop with tool dispatch, step/time bounds, and cancel
  • feat(knowledge): kb_ingest_source / kb_query / kb_lint macros (txn-atomic commit)
  • feat(knowledge): BM25 search, per-KB tokio Mutex for concurrent-write safety, active-KB state

HTTP routes + portability

  • feat(server): /knowledge router — bases, page CRUD, raw (file/url/text), history/preview/restore, graph, reclassify/override
  • feat(server): SSE-streamed ingest/query/lint macro routes + GET/POST /knowledge/active
  • feat(knowledge): .brkb zip export/import + ProviderCompleter adapter; OpenAPI + regenerated TS client
  • fix(knowledge): prevent ZIP slip in brkb::import (CVE-class arbitrary file write)

Desktop UI

  • feat(ui): Knowledge sidebar route, KnowledgeContext, ⌘K KBSelector palette, ingest panel (dropzone / paste / staged list)
  • feat(ui): useIngestStream SSE hook + DispatchProgress with pre-flight model check and Stop button
  • feat(ui): ForceGraph canvas (credibility colors, hover dimming, retracted badge), NodePreview, ChangeLogDrawer with restore
  • feat(ui): chat-side KB chip + /knowledge slash command; active-KB synced across sessions and MCP processes

Hardening

  • fix(knowledge): Bedrock tool_use_id pairing (preserve id through Completer→Provider; bundle multi-results)
  • fix(knowledge): migrate legacy schema.md + refresh stale graph cache on macro entry
  • fix(knowledge): Obsidian-style [[target|alias]] wiki-links; allow read_page on raw/*; lossy UTF-8 HTML decode
  • fix(knowledge): move path ingestion into backend; scope active bases per chat session; rename updates folder ids
  • chore(knowledge): register knowledge in BUILTIN_EXTENSIONS; git2 vendored-libgit2 (self-contained, no system git)
  • chore(release): bump to 1.80.0

UCSF BioRouter is developed by the Baranzini Lab at the University of California, San Francisco.