ThinkReader 0.9.4
ThinkReader 0.9.4
MinerU API import and connection fixes for Windows.
Changes
- API imports require the official MinerU Open API CLI and a saved Token. Missing local models no longer disable Import or block an API job, including when an old local-fallback preference is saved.
- Settings and Import use the same readiness rule. API setup says “API configured”; this confirms configuration, not current service connectivity. Local model folders are not marked ready until model verification succeeds.
- “Fallback to local when the API fails” is unavailable until the local runtime and models are ready.
- The official CLI owns API networking; a separate Python HEAD request no longer rejects otherwise usable CLI connections. Initial connection failures can retry for five minutes. This retry budget never interrupts an active upload or parsing process, and acknowledged uploads are not resubmitted automatically.
- Import shows connecting, uploading, uploaded/queued, page extraction and result download. Upload is indeterminate because the official CLI does not report transferred bytes. Signed upload credentials are redacted from logs.
- Embedded MinerU method cards no longer overflow horizontally in narrow light or dark views. The previously untracked Hermes icon is included so a fresh source checkout builds successfully.
Validation
.\release-check.ps1 -Frontend— passed on Windows on 2026-09-22, including backend boundaries, backend files in separate processes, desktop regressions and TypeScript/Vite production build.node app/desktop/scripts/test-mineru-import-ui.cjs— passed actual Electron DOM selection and import click with mocked HTTP: API-only readiness, missing CLI/Token, concurrent setup, local fallback gating, upload/page/completion progress, and narrow light/dark layouts. The old source atdc6af8breproduced the disabled API import before the fix.- With
THINKREADER_RUN_REAL_MINERU_API=1,python app/packaging/run_backend_test.py app/backend/tests/integration/test_real_mineru_extraction.py— real official API extraction passed for a synthetic 12-page document (7.934 seconds on the final implementation); all pages produced semantic blocks and the original PDF remained byte-identical. Local extraction was explicitly skipped. A separate one-page API sample also passed. test_mineru_commands.pycovers connection retry, no resubmission after acknowledged upload, and a simulated 10-minute upload succeeding despite a five-minute connection retry budget.
Packaged validation
The implementation commit is 9508bc88003b5d4598f8bcf751280c1962721434. Later validation-document and smoke-harness updates do not change the shipped application. The exact output of this build is build/release/ThinkReader-0.9.4-win-998d1626.
python app/packaging/build_release.py --target win— passed with the packaging Python 3.11 environment. Frontend/backend/resource hashes match the current build; updater manifest name/size/SHA-512 and frozen MCP stdio checks passed.python app/packaging/smoke_release.py --unpacked build/release/ThinkReader-0.9.4-win-998d1626— passed frozen startup, Profile persistence, PDF Range, annotation conflict/persistence, output/image/summary protections, restart and original PDF integrity.- A real authenticated API import through this exact frozen backend parsed a synthetic three-page PDF in 7.8 seconds. Observed phases included connecting, uploading, queued and result download; each page had semantic blocks and the original PDF was byte-identical. Only test data was uploaded.
node app/packaging/smoke_first_run.cjs --zh --unpacked build/release/ThinkReader-0.9.4-win-998d1626 --root E:/ThinkReader/build/mineru-validation-20260922/packaged-first-run-final— passed the native first-run flow, branch controls, Token requirement and narrow layout with synthetic progress/failure responses. Model re-detection remained disabled without the local runtime; its model-error injection was skipped. The smoke harness was corrected to respect this disabled control instead of timing out after clicking it.node app/packaging/smoke_first_run.cjs --profile --zh --unpacked build/release/ThinkReader-0.9.4-win-998d1626 --root E:/ThinkReader/build/mineru-validation-20260922/packaged-profile— passed real Profile UI/API completion, restart persistence and MinerU Settings resources; provider readiness was seeded and no model download occurred.- A separate-identity 0.9.3 installation used a loopback feed to check, download, validate and silently install 0.9.4. The installed
app.asarmatched the final candidate, and an explicit restart reported 0.9.4 with a healthy backend. This uses the final application payload in a test installer with a distinct registry identity and executable name; it does not validate byte-identical public-installer execution or a clean machine. Automatic restart was requested by the updater, but acceptance used an explicit restart with an isolated profile. - The initial baseline test installer retained the normal executable name and closed the running ThinkReader window through NSIS's process-name guard. The original App was restarted; the candidate test was renamed to avoid closing it again.
- The ZIP contains no
.git,.env,user-dataorREADME_en.mdentries.
SHA-256 of the release assets:
| Asset | SHA-256 |
|---|---|
latest.yml |
43b41ed94a1972fc817ad500697796ac9c68a964eecdcdd9f9e34a50c430b533 |
ThinkReader-0.9.4-win_x64.exe |
9b0e1f4fb2bafa3ce8bae11bbd63a429b8e50046389146c72dd925d589d00023 |
ThinkReader-0.9.4-win_x64.zip |
e98bf964b7911ce4fe07f030484e8b8ca67f374cc5e6bb055132949bc81e20a6 |
ThinkReader-Setup-0.9.4-win_x64.exe |
0d3a8e042f3d750b4eb3887369887bdb17504d70c2e3eb81aec5a2a0be266101 |
ThinkReader-Setup-0.9.4-win_x64.exe.blockmap |
70a385289ba3f0d0ebe77be1321db9bd31f63ee244989b1d5cb7139fb18ae559 |
Limits
- Local model downloads and real local extraction are deferred at the maintainer's request. API tests use synthetic documents.
- The official CLI has a separate 30-minute extraction deadline; the five-minute connection retry budget is not an upload deadline.
- Windows binaries are unsigned; clean-machine installation is not covered by this development-machine validation.