Releases: Korrnals/bathys
Release list
v0.14.1 — Hotfix: pymupdf in core dependencies
v0.14.1 — Hotfix: pymupdf in core dependencies
A pinpoint hotfix, caught during live verification of a fresh install.
Fixed
pymupdfwas missing from dependencies: the PDF text layer has been a core feature since v0.9, but the dependency was optional and never declared — a clean install broke PDF reading, with the tool pointing to "pip install pymupdf".pymupdf>=1.24is now in the core dependencies.
QA audit status
No new audit was run for this patch release. The previous full pass (v0.13.0, independent pre-release audit): 14 live checks through the real pipeline — 11 PASS / 3 PARTIAL / 0 FAIL, verdict "ready for release".
Assets
This release ships the package builds: bathys-0.14.1-py3-none-any.whl and bathys-0.14.1.tar.gz.
Install: pip install bathys==0.14.1
Changelog: CHANGELOG.md
Backlog Closed
v0.14.0 — Backlog Closed
Both MINOR findings of the v0.13.0 QA audit are resolved.
Added
- Junk-gate in
web_search(QA MINOR): meaningless queries no longer flood the context with username echoes ("Qwjk Qwjk", x.com/qwjk). Rule v4: a hit is valid if it covers ≥50% of the meaningful query terms in title+snippet (the URL is excluded — echoes live there as false positives); when everything is filtered out, an honestNo resultsis returned (the empty-result retry path, F-101, gets its chance). Live: gibberish → No results ✓; EN/RU/short-title/niche-library queries — no false positives (5/5). The iterations that led to Rule v4 are recorded as a lesson: username echoes live in the title, the snippet and the URL alike — a plain "no term" check never holds; the coverage threshold is what does. - Definitional markers in
source_check(QA MINOR): "X is a/are/was/является Y" — the most common form of direct confirmation — no longer falls through to UNCLEAR: copulas added to the SUPPORT markers (RU and EN). Live: "SearXNG is an open-source metasearch engine" → SUPPORTED (0.65).
Tests
+2 junk-gate (gibberish filtering + partial-coverage survival). Suite: 194 OK.
Install: pip install bathys==0.14.0
Changelog: CHANGELOG.md
GitHub Tier & Deep Audit
v0.13.0 — GitHub Tier & Deep Audit
GitHub-specialized extraction plus closure of a MAJOR finding from an independent QA audit.
Added
- GitHub extraction tier (the last feature borrowed from pi-web-access):
github.com/{owner}/{repo}/(pull|issues)/{N}and repository roots are served through theghAPI instead of scraping — prioritized markdown for PRs (title/status/author/body/files/reviews/checks/comments), issues, and repos (description/root tree/README, 8k chars).Page.tier = "github"; a missinggh, a failure or a 15 s timeout — any of these falls back silently to the HTTP tier; older gh versions retry with a reduced field set. Live: PR searxng#1 → 2,290 characters of a structured document; the bathys repo → README + tree. The tier is independent ofBATHYS_BROWSER(API vs scraping is a source choice, not browser policy; documented indocs/contracts/config.md). library_docsdisambiguation (closing the QA audit's MAJOR finding): search resolution of ambiguous names scores candidates against query terms + host match (the library's own domain) + a software-dictionary prior (python/async/api/readthedocs…). The live audit case is closed:trio+ "structured concurrency" →trio.readthedocs.io(python-trio), not the medical app triodocs.org.
QA audit (independent, pre-release)
14 live checks through the real pipeline: 11 PASS / 3 PARTIAL / 0 FAIL; verdict — ready for release. Findings: (1) MAJOR disambiguation — closed in this release; (2) MINOR: junk fuzzy hits from engines on nonsense queries mask the No-results branch (accepted: engine behavior, not our defect; junk-gate queued for the backlog); (3) MINOR: source_check is conservative on "X is a Y" patterns (markers did not include definitional copulas — accepted as an honest no-LLM-scoring boundary, documented).
Tests
+33 (192 OK): 30 GitHub tier (URL detection / renderers / fallbacks / retries / timeouts, with subprocess mocks), 3 for disambiguation.
Install: pip install bathys==0.13.0
Changelog: CHANGELOG.md
Deep Verdicts — source_check + Phase 3
v0.12.0 — Deep Verdicts
library_docs Phase 3 plus source_check. A team release: two systems engineers worked in parallel, with briefs and reviews by the tech lead.
Added
source_check(claim, urls?)— the 6th MCP tool: deterministic claim verification without an LLM (mechanics dissected from pi-web-access and rebuilt on our architecture). Sources → parallel dives withquery=claim→ passages withpassage_idand sha256 hashes → verdictSUPPORTED/CONTRADICTED/UNCLEAR/MISSING-EVIDENCEwith confidence; polarity markers in RU+EN with negation checks; source classes (official_docs / forum / news / blog / repo_issue, RU forums). Our edge over the reference: domain independence — a verdict backed by a single domain is capped at 0.65 and flagged (the two-independent-sources rule).- library_docs Phase 3: (a)
version— pin releases via GitHub tags (raw.githubusercontent.com/{owner}/{repo}/{tag}/README.md, tryingvprefixes; docs sites get an honest "latest" note); (b) a self-growing user indexBATHYS_DOCS_INDEX(~/.local/share/bathys/docs-index.json): successful search resolutions are remembered, and the next call for the same library resolves instantly with statususer-index; priority seed → user-index → search; atomic writes, idempotent. - Tests: +51 (159 OK): 28 source_check (polarity / negation / term filtering / independence / full pipeline on fakes) + 21 library_docs Phase 3 + config.
- Contracts:
library_docs(phases 1–3) andsource_checksections indocs/contracts/mcp-tools.md, footers indocs/contracts/output-format.md; envBATHYS_DOCS_INDEXin the tables.
Team
Scouting and briefs — tech lead; implementation — two senior systems engineers in parallel, no conflicts; spot-check reviews, documentation updates and shipping — tech lead.
Install: pip install bathys==0.12.0
Changelog: CHANGELOG.md
Library Docs Phase 2 — subpage follow-loading
v0.11.0 — Library Docs Phase 2
Subpage follow-loading: Context7-grade quality without their database.
Added
- Subpage follow-loading in
library_docs(subpages=3, 0 = off): after the landing page, same-site links are extracted, ranked by overlap with the query (y/ies morphology — "dependency" matches "dependencies"), and the top pages are loaded in parallel through the dive semaphore, merged into one digest. Live: fastapi "dependency injection" — 4,383 characters of content vs 1,951 of navigation in Phase 1; the site-search fallback found the exacttutorial/dependencies/,classes-as-dependencies/,advanced-dependencies/pages on a linkless landing (the HTTP tier had stripped the nav markup). - Site-search discovery fallback: when the landing source carries no links (the HTTP tier cut the nav markup), subpages are located with one targeted
web_search "{library} {query} site:{host}"through our own engine. - Unit tests: seed index (internal-key filtering), same-site logic, extractor (ranking / asset filtering / limit), morphology.
Changed
- Architectural: dictionary-based "navigation" heuristics (link density / word variety) proved brittle at the TOC/prose boundary and were removed — follow-loading is now unconditional for a purpose-built tool; the decision is recorded in a code comment.
Install: pip install bathys==0.11.0
Changelog: CHANGELOG.md
Library Docs — Context7 functionality, local and unlimited
v0.10.0 — Library Docs
Context7 functionality — local and unlimited. A live scouting pass through Bathys showed Context7 keeps its parsing/crawling engines private, its free tier is capped at ~1,000 requests/month, and there is no offline mode. Our answer: documentation sources are open by nature, and our pipeline already contains the "parsing engine" — two-tier extraction + BM25 distillation + source caching.
Added
library_docs(library, query)— the 5th MCP tool: up-to-date library documentation fetched from the primary source, distilled against your question. Resolution: seed index (docs_index.json, 30+ libraries: react, fastapi, pytorch, kubernetes, searxng, crawl4ai…) → liveweb_searchfor "official documentation" → GitHub repo slug (owner/repo). Follow-up questions on the same library are instant, offline and free — the source cache is exactly what Context7 does not have. Live:trioresolved via search (triodocs.org),fastapifrom the index; 153k characters distilled into a query-focused digest.- Initiative write-up
docs/product/library-docs-initiative.md: architecture, an honest comparison table against Context7 (no quotas / offline / any docs site), phases 2–3 (version pinning via GitHub tags, subpage follow-loading, a self-growing index). - Phase 2 groundwork: the Phase 1 limitation is stated honestly — a docs landing page is often pure navigation; completeness arrives with follow-loading of relevant subpages.
Install: pip install bathys==0.10.0
Changelog: CHANGELOG.md
v0.8.0 — Engine Orchestration
v0.8.0 — Engine Orchestration
Architecture committee verdict No. 4 plus keyless engine orchestration: API engines behind env vars, a self-chosen set of keyless engines activated by one variable, and F-101 retry sets re-tiered against live data.
Fixed (critical)
render_settingsrendered the wrong engine:engine: bravepointed at the scraping module, which ignoresapi_key(the key went nowhere); corrected toengine: braveapi(the official API module). Found by architecture committee No. 4 while cross-checking against the live upstream pin.
Added
- API engines behind one env each:
BATHYS_ENGINE_EXA_KEY,BATHYS_ENGINE_YANDEX_KEY+BATHYS_ENGINE_YANDEX_FOLDER(yandex_apiis already in the upstream of our pin, RU localization out of the box) — in addition to Brave. A singleengines:block. BATHYS_ENGINES— activation of a custom set of keyless engines. Live audit 2026-09-09:mwmbl,mojeek,brave→ 40+ results with zero captchas;duckduckgo/qwant/startpage/baidu— CAPTCHA;mojeekalone — 0 (works within the set).- F-101 retry sets re-tiered against live data: the first fallback is
brave,mwmbl,mojeek,wikipedia; captcha-prone engines are demoted to last. - The
engine_setmetric inmetrics.jsonl(default/retry#N) — committee gate G1 becomes verifiable. - Architecture committee No. 4: gates G1–G4 for "our own engine" (Phase C); Bing v7 struck out (shut down by Microsoft on 11.08.2025); an own index — rejected permanently.
This GitHub release was created retroactively; the version shipped on PyPI on 2026-09-09.
Assets
Shipped with the signature set from the release conveyor (attached retroactively): bathys-0.8.0-py3-none-any.whl, bathys-0.8.0.tar.gz, checksums-sha256.txt, sbom.spdx.json, and cosign/GPG signatures for both artefacts.
Install: pip install bathys==0.8.0
Changelog: CHANGELOG.md
v0.7.2 — Uninstall & Version Pinning
v0.7.2 — Uninstall & Version Pinning
Installation symmetry and operational control: a clean uninstall that touches only bathys entries, a doctor that can start the backend itself, and one-env version pinning for install.sh.
Added
bathys uninstall [HARNESS…] [--purge]— the mirror of installation: removes only thebathysentries from configs (other servers, backups and subagents are untouched), creates a backup before writing;--purgeadditionally removes the venv/cache/data. The live cycle was verified: uninstall hermes → backup → reinstall.bathys-doctor --start-backend— the SearXNG backend is started before the check (live: native mode, 6/6 checks passed); the previous behavior (an honest FAIL on a stopped backend + a hint) is preserved as the default.BATHYS_INSTALL_VERSIONin install.sh — pin or roll back to a specific package version with a single env variable.- CI: a
shellcheckjob — install.sh is linted on every push (shellcheck is absent locally — CI will be its first run).
Changed
- The
bathys --helpreference now covers uninstall; the README Quick start gained version rollback and removal.
This GitHub release was created retroactively; the version shipped on PyPI on 2026-09-08.
Assets
Shipped with the signature set from the release conveyor (attached retroactively): bathys-0.7.2-py3-none-any.whl, bathys-0.7.2.tar.gz, checksums-sha256.txt, sbom.spdx.json, and cosign/GPG signatures for both artefacts.
Install: pip install bathys==0.7.2
Changelog: CHANGELOG.md
v0.7.1 — One-Line Installer
v0.7.1 — One-Line Installer
The one-line install.sh becomes the main installation path: a private venv, pip bootstrap for minimal images, PATH wiring, then bathys setup and a final bathys-doctor.
Added
- One-line installer
install.sh— the main installation path:curl -fsSL https://raw.githubusercontent.com/Korrnals/bathys/main/install.sh | bash. A private venv in~/.local/share/bathys/venv(a fix for the fragility ofpip --useracross containers and PEP 668), pip bootstrapped viaget-pip.pyfor minimal images, PATH written to.profile/.bashrc, thenbathys setupand a finalbathys-doctor. Idempotent (a rerun is an update), no sudo, nothing outside$HOME. Live runs: a double run (creation + idempotent update), setup wired zcode + hermes with backups, doctor 5/6 (the backend starts on the first call — expected). - README: the one-liner is the main Quick start path;
pip install+bathys setupis an equal "no script" alternative; npm/sources moved under folds.
This GitHub release was created retroactively; the version shipped on PyPI on 2026-09-08.
Assets
Shipped with the signature set from the release conveyor (attached retroactively): bathys-0.7.1-py3-none-any.whl, bathys-0.7.1.tar.gz, checksums-sha256.txt, sbom.spdx.json, and cosign/GPG signatures for both artefacts.
Install: pip install bathys==0.7.1
Changelog: CHANGELOG.md
v0.7.0 — Ship & Setup
v0.7.0 — Ship & Setup
Two-tier extraction without a mandatory browser, plus modular setup. Pages read in milliseconds over HTTP by default; headless Chromium engages only when a page is a JS shell — the browser is no longer a required runtime dependency.
Added
- Two-tier extraction (
crawler.py): by default pages are read by our own HTTP engine (httpx, milliseconds, zero browser); headless Chromium is switched on automatically only when the page is a JS shell (detection: app-root markup, empty body, content escaping) or when the HTTP tier fails. Measurements: Wikipedia 0.61 s, GitHub 1.0 s over HTTP versus ~4–5 s with the browser.BATHYS_BROWSER=off|auto|alwayscontrols the mode; the browser is no longer a required launch dependency —bathys setupinstalls it for JS pages, but the server works without it. bathys setup— full installation in one call: the browser engine (skipped with--skip-browser) → integration into every detected harness → the subagent → final hints. Idempotent; afterpip install bathysthe user only needsbathys setup.- Targeted installation
bathys install <HARNESS>:bathys install hermeswrites only Hermes; a missing target harness config is created from scratch (verified: an opencode config was created in its own format);--listprints all targets with their paths and status; an unknown name produces a clear error.
Changed
- README: the identity rewritten ("a standalone product, not a wrapper over other services: it implements the entire pipeline itself"); the main installation path is
pip install bathys+bathys setup; alternatives (npm, sources, minimal images) and manual connection moved under<details>folds. - Dispatcher call syntax:
bathys(server) /bathys setup/bathys install [targets]/bathys doctor; the--helpreference updated.
This GitHub release was created retroactively; the version shipped on PyPI on 2026-09-08.
Assets
Shipped with the signature set from the release conveyor (attached retroactively): bathys-0.7.0-py3-none-any.whl, bathys-0.7.0.tar.gz, checksums-sha256.txt, sbom.spdx.json, and cosign/GPG signatures for both artefacts.
Install: pip install bathys==0.7.0
Changelog: CHANGELOG.md