Repository navigation
Releases: blisspixel/distillr
Release list
v0.20.7
Fixed
- Preserve per-query arXiv discovery failures in previews, shortlists and run
summaries. Distinguish successful empty searches from API errors and malformed
feeds. Surface paper revisions with captured and discovered dates; recheck
saved previews against the current library and keep revision updates preview-only. - Treat missing, invalid and mixed-timezone freshness evidence as unknown.
Compare explicit offsets in UTC without the filesystem timestamp tolerance. - Replace complete active claim generations, including successful zero-claim
retirement, while retaining append-only history. Refuse incomplete synthesis
and changed-during-generation evidence. Keep exact citation paths and derived
origin; exclude answers, audits, reports and hidden history from retrieval. - State numeric-only versus prose verification coverage. Propagate strict
refusals to nonzero CLI exits and retain refusal receipts without replacing
previously accepted artifacts. Addingest --verifyconsistently. - Treat rejected site seeds as failed captures with a reason, rather than empty
success. Refused paper publication fails its CLI/MCP item, and an all-failed
paper batch stops before synthesis. - Reuse unchanged local captures only when source, analysis settings and bound
verification evidence match. Preserve history for explicit reruns and recover
interrupted publication. Record zero-cost no-ops in the run ledger.
Prose model revision and threshold changes invalidate reuse. Checker failures
remain visible and strict mode fails closed when an installed checker fails. - Use the direct Gemini 3.8 Flash default, curated current candidates, UTC price
steps, and a scheduled refusal for the retiring Deep Research preview.
Preserve historical model and pricing records. - Make local setup and failure hints route-aware; keep diagnostic paths copyable,
support-h, shorten root help and home, align diagnostic rows, and remove
routine animation and screen clearing. Keep color-independent state words. - Load trusted packaged theme resources installed as hardlinks while retaining
single-link confinement for mutable user palettes. - Pin HHEM's foundation configuration and tokenizer as well as its outer code;
invalidate local reuse when either revision changes. Raise patched optional
torch, fsspec and setuptools floors and retain explicit advisory limitations.
Added
- Twelve validated web and export palettes, Dark/Light/System appearance,
persisted choices, safe TOML and bounded GitHub archive installation, CLI theme
lifecycle commands, accessible preview cards and copy announcements. Server
and export share tokens and component styles. - A CPU-only optional entailment recipe and measured tail-evidence probe beyond
512 tokens. Scope two known pinned-model metadata diagnostics to debug while
preserving other warnings and failures.
Validate the separately published torch CPU wheel on Windows Python 3.15. - Numbered first-run instructions and local installed-wheel, CPU and browser
validation records. These remain distinct from the later 1.0 semantic gates.
Changed
- Default to Python 3.15 with blocking Linux 3.12 through 3.15, Windows and macOS
coverage. Retain the 3.12 floor. Refresh compatibility wheels, dependency audit
tooling and immutable Actions pins; build the container from the frozen lock. - Retain the hash-matched native plugin evaluation for unchanged canonical
skills and eval cases; regenerate distribution version metadata.
Documentation
- Record the authorized dependency-ordered execution plan for issues #40
through #57, including another bug hunt, local zero-dollar journeys, and
exact-commit CI before publication. - Record 0.20.6 as the published maintenance release and move unfinished
evidence-state correction, evaluation, operator, and freeze-time security
work to 0.20.7 through 0.20.10 without changing their acceptance gates.
Verification evidence
Local validation passed 7,680 tests with 95.40% combined coverage and branch measurement, zero Pyright diagnostics and $0 local operator/CPU journeys. Final main CI passed.
Publication receipt records matching PyPI/GitHub wheel and sdist digests, all 432 runtime files matching the tagged source, eight canonical skill archives, the CycloneDX SBOM, two cryptographically verified publish attestations and the isolated installed public-wheel smoke.
Five optional Transformers version alerts remain visible with a path-specific assessment. This is not a clean optional dependency audit.
v0.20.6
Fixed
- YouTube capture no longer fails when a reused connection polls a closed
deadline socket. The deadline and the metadata byte limits stay in effect. distill --cost-mode no-metered initchooses a local provider, does not
validate a cloud key, and records the smallest installed model that bench
rates as feasible. Preview under no-metered uses deterministic ranking when
the configured route is metered.distill papers --previewsaves that shortlist.--from-shortlistand
--run-last-previewingest the same papers and skip search and rerank.
A fresh search that was not previewed still ranks as before.- When Playwright's browser cannot be installed, launch uses a validated
system Chromium. An exact page with no browser falls back to one bounded
HTTPS fetch and recordscapture: http-static. distill benchstops before probing when Ollama cloud is enabled, and
distill doctorreports that state. Optional-package hints follow uv or
pipx. Setup outside a source checkout writes the per-user env file, which
later commands load from any working directory.
v0.20.5
Fixed
- Add missing context limits for Gemini 3.8 Flash and current OpenRouter
candidates, including provider-prefixed model IDs, so known routes avoid the
4096-token unknown-model fallback. Price exact OpenRouter GLM and DeepSeek
routes before supplier aliases; register distinct Prime and FlashX rates
rather than inheriting cheaper family prices. Preserve previous bare supplier
estimates. Preserve routed prices for versioned compatibility IDs and bare
supplier model echoes when billed-cost metadata is absent. - Preserve DeepSeek V4 Pro 0813's scheduled pricing qualifications. Use the
full $1.32/$3.96 rate for budget authorization in every UTC window, rather
than assuming the observed $0.66/$1.98 promotion always applies. Distinguish
public endpoint minimums, conservative routing ceilings, and billed cost. - Offer hyphenated native Claude minor-version IDs in the Anthropic catalog;
retain dotted OpenRouter spellings in their routed catalog and price registry. - Forward Grok 4.7 reasoning effort and omit deprecated sampling parameters for
Gemini 3.8. Adapt LM Studio to the OpenAI SDK's supported HTTP client while
preserving disabled redirects, disabled proxy inheritance for loopback
inference, and disabled SDK retries. Preserve HTTP status errors even when
the provider's message contains "refused". Refuse Deep Research polling when
the provider omits its interaction ID, retaining the submission receipt and
existing cleanup. - Repair the dependency security gate found during documentation review. Raise
runtime floors topyjwt>=2.15.0,pypdf>=6.19.0, andurllib3>=2.8.0, and
the development floor tovirtualenv>=21.7.13. Refresh only those locked
packages and virtualenv's requiredpython-discoverydependency. The updated
environment clears the 33 advisory rows reported bypip-auditon the prior
lock, without advisory exclusions. Upstream fixes:
PyJWT,
pypdf,
urllib3, and
virtualenv.
Changed
- Refresh the locked API and capture stack to OpenAI 3.26.0, Google GenAI
2.28.0, MCP 2.3.0, and yt-dlp 2026.8.19, with required Google Auth, jiter,
and MCP types updates. Raise the OpenAI, Google GenAI, and yt-dlp package
floors; bound both model SDKs to their supported major versions. The
dated audit records primary evidence and
compatibility checks. Defaults stay pinned pending research-quality evals.
Added
- Catalog Grok 4.7, native Claude Opus/Sonnet 5.5, and current OpenRouter
GLM, Qwen, Grok, Gemini, and Claude candidates. Add GPT-6 Astra, GPT-6.1 Sol,
and GPT-6 Luna metadata and long-context estimates to the reserved OpenAI
registry. OpenAI remains an unimplemented route. Catalog review date:
October 6, 2026; this is public metadata verification, not live API validation.
Documentation
- Emphasize dependable understanding in the README and require source-faithful
summaries, explicit uncertainty, fair disagreement, visible collection
boundaries, and responsible correction handling in repository instructions. - Define the two-source correction acceptance episode in the research-desk
doctrine and roadmap. Separate planned selective revision from existing
capture, verification, claim history, audit, and refresh mechanisms; insert a bounded
maintenance release under the blocker rule and shift the remaining scopes
intact. Align both supporting release plans with the public sequence.
Validation
- The final release candidate passed 7,503 tests at 95.46% branch-enabled
coverage on Windows/Python 3.12.13, with 4 skips, 9 deselections, and one
upstream Starlette deprecation warning. The final billing corrections also
passed 132 focused cost, execution, and real-SDK tests. The release requires
full CI on its exact main commit before tagging;
final run receipts are retained in the release pull request and workflows. - Frozen resolution, lint, formatting, Pyright with warnings denied, import
contracts, Bandit, dependency auditing, public contracts, both generated
skill distributions, archives, and isolated installed-wheel checks passed. - A fresh public catalog read covered all 19 curated routes, including
scheduled overrides, and checked the four reviewed SDK and extractor
versions against the latest published stable package metadata. No metered
model call was used; default routes remain pinned pending semantic evaluation. - Reuse the authorized native plugin behavior evidence from
0.20.1: all six
current case and report hashes match the retained successful receipts, and
skill, reference, eval, and bundled runtime content is byte-identical. Only
package version metadata and generated distribution instructions change.
No new native run or waiver is claimed.
Release evidence: PR #31, main CI, publication workflow, and PyPI 0.20.5. GitHub and PyPI wheel/source hashes match; the published wheel passed the isolated installation checks.
v0.20.4
Fixed
- Account for every URL a site crawl visits.
_extract_pagepreviously returned
nothing for both a navigation failure and a page that rendered with no usable
text, and the crawl loop discarded those URLs without a record, so an operator
could not tell an empty page from a blocked one. A whole seed that exhausted
its wall-clock or memory budget, or whose worker returned a result the parent
refused to trust, also came back as an empty page list that read like a clean
crawl of nothing. Each URL now leaves either a page or a typed capture receipt
carrying its outcome, HTTP status, crawl depth, and a bounded detail. - Bound the attempted pages in a site crawl, not only the captured ones. The
crawl loop stopped atmax_pagescaptured pages, but a page that failed to
capture never advanced that count, so one successful page handing back a
frontier of up to 512 links could be followed in full. Amax_pages=8request
could therefore perform hundreds of navigations against the host. Attempted
visits now carry their own ceiling proportional to the requested budget, and
a crawl stopped by that ceiling records a receipt saying so. - Raise the security floor on
anyioto>=4.14.2. The previously resolved
4.13.0 carries CVE-2026-63374, where a TLS connection to an internationalized
domain name could be satisfied by a certificate issued for the IDNA 2003
encoding of that name, and CVE-2026-64847, an undrained process-pool stderr
pipe that wedges the awaiting call.anyioreaches Distill throughhttpx,
openai,google-genai,mcp, andfastapi; the floor is declared directly
so an installeddistillrcannot resolve a vulnerable version.
Changed
- Wait on observed network quiescence, under a bounded ceiling, before running
the page extractor.domcontentloadedfires before a client-rendered page has
its content, so the previous flat 1200 ms wait captured a hydrating
single-page app half-built while taxing a static page for nothing. A page that
never goes idle is still captured rather than failed. - Redact capture receipts at the persistence boundary. A crawl can follow a link
whose query carries a session token, and browser exception text quotes the URL
it was navigating to, so receipt URLs are reduced to the same scheme, host,
explicit port, and path view that every other stored URL already receives,
including URLs found inside exception detail. - Report capture outcomes to the operator. Site ingest prints a per-crawl
rollup, records one run-summary issue per failed URL, writes
attempted_pages,captured_pages,failed_pages,capture_failures, and
capture_failure_countsinto the site manifest, and includes a failed count
in the site status line. An empty crawl now says why it was empty. - Record a page that could not be read as a warning rather than an error, so a
single unreachable link no longer marks an otherwise clean site run partial.
An outcome that stopped the whole crawl, such as an exhausted resource budget
or a refused worker result, stays an error because work was genuinely left
undone. - Report unreadable pages over MCP.
site_batchreturnsfailed_pageson a
seed row whenever a crawl could not read some of its URLs, because an agent
reading the JSON payload never sees the console rollup and would otherwise
treat a partial capture as complete. The field is omitted when nothing failed. - Correct the roadmap workstream table, whose version targets had drifted two
releases behind the versioned execution sequence and assigned future outcomes
to already-shipped releases.
Added
-
Add
crawl_site_with_receiptsand theSiteCrawlResultandCaptureFailure
types todistill.ingestors.sites.crawl_sitekeeps its existing
page-list contract and is now a thin wrapper, so no caller has to change. -
Document capture receipts where an operator or agent will look for them:
thesite.jsonfield list inoutputs.md, the website workflow in
usage.md, and thesite_batchresponse shape inmcp.md. -
Add a web capture fidelity section to the roadmap recording what site capture
already does, what remains, and which published scraping techniques are
declined and why. Density-threshold content pruning and anti-detection
tooling are both declined, with reasons. -
Add pricing and catalog support for Zhipu AI GLM (
z-ai/glm-5.3-flash,
z-ai/glm-5.3) and Alibaba Qwen (qwen/qwen3.8-flash,qwen/qwen3.8-max-0902,
qwen/qwen3.8-max) models via OpenRouter. -
Map
z-aiandqwenauthor slugs in OpenRouter routing policy to direct registered
model identifiers, enabling strict pre-call price ceilings, budget preauthorization,
and exact immutable ledger accounting. -
Validate candidate models across
ask(adversarial risk/hallucination fixtures),
paper(extraction/limits), andvideo(two-pass synthesis) workloads under a
strict spend budget with immutable ledger recording.
Internal
- Bump the browser worker result schema to version 2, adding a bounded,
strictly parsedfailuresarray besidepages. - Split
distill/ingestors/sites/scraper.pyback under the 1000-line module
cap by extractingrecords.py(theSitePage,SiteSeed, andSiteBatch
types shared by the crawler, the manifest parser, and the worker boundary)
andbatch.py(site batch manifest parsing and its validators).scraper.py
re-exports both, so no import changes.
v0.20.3
Changed
- Promote seven core subpackages (commands, pipeline, mcp, prompts, concepts,
claims, agent_skills) to strict Pyright checking in pyproject.toml, bringing
strict type enforcement across 64.7% of repository files with zero errors and
zero warnings. - Decompose commands and worker task modules into focused domain units,
extracting distill.commands._command_cost and distill.worker._claim_envelope
to ensure all modules stay cleanly under 915 lines.
Added
- Add comprehensive unit test suites covering CLI monitor option branches,
backward-compatibility proxies, report materials, brief chunking edge cases,
and concept contradiction malformed rows, raising total branch coverage to
95.43%.
v0.20.2
Added
- Add pricing and catalog support for latest frontier models: Gemini 3.8 Flash
(gemini-3.8-flash), Anthropic Claude Fable 5.1 (claude-fable-5.1) and
Mythos 5.1 (claude-mythos-5.1), and DeepSeek models (deepseek-v4.1-flash,
deepseek-v4-flash,deepseek-v4-pro,deepseek-v3.2,deepseek-chat, and
deepseek-r1). - Map
deepseekauthor slugs in OpenRouter routing policy to direct registered
model identifiers, enabling hard budget preauthorization, registered price
ceilings, and accurate ledger accounting for OpenRouter DeepSeek models. - Set
deepseek/deepseek-v4.1-flashas the recommended default model when
OpenRouter is configured, and provide OpenRouter models and pricing in
distill provider list openrouter. - Support global fallback workflow budgets (
default=<usd>andall=<usd>)
inDISTILL_COST_WORKFLOW_BUDGETSso unlisted commands inherit a single
safety ceiling against unexpected spend.
v0.20.1
Changed
- Require MCP SDK
>=2.2.0,<3and lock the SDK and types to2.2.0, with
modern discovery, direct modern requests, and legacy stdio regression tests. - Update Agent Plugins 1.0.0 guidance and generated packages to its published
status. The canonical manifest schema remains unchanged.
Fixed
- Require fresh Ollama daemon and exact-model proof before each inference
attempt. Cloud-enabled, unsupported, ambiguous, or remotely backed routes
fail closed in every cost mode; anomalous remote usage is not recorded as
local zero-cost inference. Doctor, setup, and benchmark cleanup reuse that
admission boundary. - Serialize and pace canonical arXiv query API requests within a process,
including retries and redirects, under the total fetch deadline. Preserve
failure diagnostics and close redirect responses when pacing fails. - Isolate eval CLI tests from developer Ollama services and hardware probes.
- Support older FFmpeg versions when measuring decoded audio duration, while
retaining the process deadline and compressed-timestamp regression check. - Make the migration-error display test independent of terminal width.
- Grant native skill evaluations read-only reference access and enough turns
to complete. Clarify that workflow rubrics grade the requested explanation,
preserving every required step and the existing pass threshold. Use Sonnet
judging after observed false negatives from the default judge. - Verify that unexpected MCP tool failures preserve the internal exception
while the SDK exposes its generic tool error, without depending on leaked
internal exception text.
Documentation
- Refine the canonical repository agent instructions with verified quality
commands, implementation owners, evidence states, the existing scratch/index
convention, and test-isolation requirements while preserving provider and
corpus safety rules. - Record the September 13 README and roadmap review, the evidence-generation
acceptance matrix, and the proposed research evaluation and follow-up plan. - Correct obsolete notebook source-discovery and research-persistence
comparisons, and make the blocker-patch policy apply to the current release
line. - Reserve this release for maintenance and billing correctness. Evidence
generation/origin work remains next in0.20.2; research evaluations,
operator evidence, and strict/security closure follow in0.20.3through
0.20.5.
Upgrade notes
- Ollama now needs the supported local-only status contract published in
version 0.34.0. Disable cloud on the daemon and restart it; upgrading an
unsupported server is required. A Distill-only environment setting cannot
change an already-running daemon. See local setup. - arXiv pacing covers canonical query calls in one process. Operators still
coordinate separate processes, machines, and other API or RSS clients.
Validation
- The frozen release candidate passed 7,339 tests with 95.29% branch coverage
on Linux/Python 3.12, Ruff lint and formatting, production Pyright with
warnings denied, all four import contracts, Bandit, and dependency auditing. - Public contracts and both generated skill distributions passed validation.
The wheel, source distribution, and skill archives built; an isolated wheel
installation passed CLI, bundled-skill, runtime-asset, and editorial-default
smoke checks. - All six current native plugin behavior cases passed every criterion over
three runs per arm, with a no-plugin comparison. Four unchanged cases passed
in the full run; the worker and corpus cases passed focused reruns after
rubric and fixture corrections. Input hashes and reported prompts/rubrics
were checked against the final package. Failed attempts remain preserved. - Native evaluation used Claude Code 2.1.270, Opus 5, and Sonnet judging under
authorized account-backed runner usage, with API-key overrides removed for
those processes. No waiver was used. These workflow cases do not establish
end-to-end host installation or a research-quality baseline. Publication
still requires successful CI on the exact tagged commit.
v0.20.0
Added
- Standalone
perspective-editorialAgent Skill with private person or company
context, host-provided research and document tools, complete editorial review,
and optional Distillr/Retonr adapters. Reproducible skill, Agent Plugins 1.0.0,
and Claude/Codex compatibility packages include behavior cases and CI checks. - Opt-in
distill editorial init,preview,capture, andruncommands:
private author perspectives, current publisher receipts, shared weekly and
per-run budget admission, ideas and outlines, mandatory non-Anthropic paid
rewriting, bounded evidence and editorial review, optional Retonr candidate
checks, and unbranded Markdown and DOCX exports. - A dated model comparison and implementation plan for the private editorial
consumer. Explicit supplied-receipt input supports external research agents.
Changed
- The requested editorial release advances independently of the remaining
research-desk hardening work. That work moves to0.20.1through0.20.4;
its completion and the 1.0 stability gates remain outstanding. - CI and release builds include the standalone editorial skill archives and
verify that the installed wheel contains the generic private-profile template.
Validation
- Local checks passed more than 7,200 tests with over 95% branch coverage, lint, formatting,
production type checks, import contracts, security and dependency audits,
package validators, and exact-wheel editorial smoke tests. - The default AI news sample passed evidence and editorial review and was
exported to Markdown and a visually checked three-page Word document. - Six text-only standalone skill scenarios passed model review, including one
bounded retry after an empty provider response. Native client installation
and account-specific Cowork trials are not claimed by these checks.
Fixed
- CLI contract snapshots normalize path defaults across Windows, Linux and
macOS, with regression coverage for both Windows and POSIX path objects. - OpenRouter text requests now exclude separate per-request fees when enforcing
registered token-price ceilings. OpenRouter, Ollama and LM Studio preserve
completion reasons so editorial passes can reject truncated responses. - Updated the HTTPX2 development dependency and lockfile to 2.12.0, resolving
the five advisories reported by the dependency audit for HTTPX2 and HTTPCore2. - The offline golden eval test now stubs both model judges, avoiding blocked
network retries from its unmocked faithfulness pass.
v0.19.74
Added
- Python 3.15 prerelease watch. An advisory Linux CI lane now compiles the
source with the current Python 3.15 release candidate, probes the locked
dependency set, and runs the full unit suite and CLI smoke when that set is
installable. Dependency gaps remain visible as workflow warnings. The
supported production matrix remains 3.12 through 3.14 until the final release
and cross-platform dependency wheels are available. - Optional OpenRouter analysis route. A concrete lowercase
author/model
slug can now use OpenRouter as an explicit metered provider. The adapter
requests Zero Data Retention and denies data-collection endpoints by default,
disables hidden SDK retries, applies a registered upstream price ceiling when
available, shapes token and temperature fields from the current no-cost
endpoint capability catalog, uses a stable per-run upstream session, carries
exact billed cost and selected-endpoint identity into telemetry and the usage
ledger, and participates in doctor anddistill eval. - Budgeted OpenRouter smoke path. Provider setup now documents an explicit
one-run route check with a hard aggregatedoctorbudget, followed by
optional persistence only after validation succeeds.
Changed
- Versioned roadmap execution. The public roadmap now names the exact
dependency order from0.19.74through1.0.0, defines exit evidence for
every release, forbids calendar and duration estimates, and requires roadmap,
changelog, user-doc, example, schema, and evidence updates as implementation
lands.
Safety
- Dynamic OpenRouter routing fails closed. Auto/free routers, moving aliases,
and endpoint variants are rejected.no-meteredblocks every OpenRouter route,
and a hard budget rejects unregistered model prices before provider contact.
Provider HTTP errors are reduced to status-class messages so account metadata
from upstream error bodies cannot enter logs or terminal output. Payment
failures are permanent, and key diagnosis reports provider-side spending
limits without making an inference call. - Browser doctor cleanup. Browser readiness now requires a real headless
Chromium launch through the same unsafe-override refusal used by setup. This
catches broken runtime dependencies and prevents Playwright driver tasks from
leaking warnings during doctor shutdown.
Validation
- Complete release gate. The Windows Python 3.12 release suite passes 7,144
tests with 4 expected skips and 9 deselected tests at 95.20 percent branch
coverage. Ruff lint and format, generated contracts, generated distributions,
and the frozen lock all pass. - Native plugin evaluation unavailable. Claude Code 2.1.247 returned its
early-access block before running the requested three-run,$5-capped
with/without evaluation, so it incurred no model spend. Publication follows
the maintainer's explicit release instruction. Substitute evidence is the
deterministic cross-client distribution check and build, installed-wheel
bundle smoke, complete static and security gates, and full branch-coverage
suite. - Live OpenRouter route. The installed public CLI completed its selected
openrouter/x-ai/grok-4.6doctor probe under a process-local$20hard cap.
OpenRouter reported$0.00069billed cost for 207 input and 78 output tokens,
and Distill persisted the provider, call, token, and exact-cost receipt without
exposing the key.
v0.19.73
Added
- Research-desk product doctrine. The human analogue, evidence-portfolio
model, research-state boundaries, source contribution contract, field-model
synthesis, meaningful-change vocabulary, stopping states, evaluation
fixtures, product boundaries, and feature-admission rubric now form one
explicit product-quality standard. - Evidence-anchor and atomic-claim handoff design. The accepted direction
separates source assertions from downstream judgment, defines current claim
generations and derived-origin preservation as the first trust correction,
and stages digest-bound anchors, lineage, typed relations, and a versioned
read-only claim packet behind semantic and authority gates.
Changed
- The roadmap now starts from the research role. Near-term work finishes
evidence correctness and 1.0 stability first. Post-1.0 work proceeds through
a research-desk evaluation baseline, inquiry maps, source-role handoffs,
portfolio selection, one cross-source field model, meaningful refresh,
selective updates, reading paths, and honest stopping. - Agentic synthesis is framed as bounded field-model reconciliation. A
novel thesis is optional, research sufficiency is a semantic judgment, and
deterministic code owns identities, budgets, approvals, exact actions, and
stop limits. Provider breadth and autonomous activity are enabling
capabilities rather than product outcomes.
Validation
- Native plugin evaluation waiver. The required
claude plugin evalcommand returned its early-access block before running.
Publication proceeds under the explicit human waiver granted on 2026-08-30.
Substitute evidence includes the current generated-distribution check,
deterministic agent archive build, isolated Python 3.12 wheel smoke test,
complete static and security gates, and the full branch-coverage suite.