| fix(mcp): analyze_doc returns path+stats, not inline content Returning 68KB+ inline blew up the MCP response (asyncio StreamReader / client chunk limits) for any non-trivial PDF. The full content is still written to primary_path; the response now carries only the path, char/image counts, and a hint. Callers Read the path for the text. Bumps to 0.2.0 (beta) — breaking return-shape change in the 0.x track. | 3 个月前 |
| fix(mcp): analyze_doc returns path+stats, not inline content Returning 68KB+ inline blew up the MCP response (asyncio StreamReader / client chunk limits) for any non-trivial PDF. The full content is still written to primary_path; the response now carries only the path, char/image counts, and a hint. Callers Read the path for the text. Bumps to 0.2.0 (beta) — breaking return-shape change in the 0.x track. | 3 个月前 |
| fix(output): images dir uses stable hash name (md image refs rendered broken on spaced/non-ASCII source names) Live hosted e2e (first real mineru.net run) revealed: a source PDF whose filename contains spaces/non-ASCII (real paper PDFs, e.g. 'Gao 等 - 2025 - ...pdf') made images_dir_name inherit those spaces via <stem>_images, so the rewritten markdown ref '' rendered broken in every CommonMark renderer (URL ends at the first space). Fix: images_dir_name is now 'images-<sha1[:8] of output_root\0source_path>' — space-free, stable across reruns (same source -> same dir, overwrite/update), distinct across sources. md FILE name unchanged (still <stem>). Live-verified on Gao 2025: 79 image refs, 0 spaces after fix (was 16/ref before). Also fixes test_e2e_hosted.py, which used the near-empty sample.pdf fixture (671B, 3 blank pages) -> VLM correctly returned empty md -> empty-content RuntimeError -> the test failed for anyone running it with a token. Switched to a dynamically-generated real-text PDF (conftest._build_real_text_pdf, pure stdlib, no new deps). Live-verified green with token. findings-external.md: documents the two hosted-e2e discoveries (SDK auto- downloads zip to fill markdown/images fields — our mapping was right; and the images-dir naming bug + fix). 58 tests pass / 1 e2e skip. | 3 个月前 |
| chore(release): add MIT license + PyPI metadata, exclude dev files from sdist Prep for PyPI publish: - LICENSE (MIT, Copyright (c) 2026 Joe-zhouman) - pyproject: readme=README.md, license=MIT, license-files, project.urls (Homepage/Repository/Changelog -> github.com/Joe-zhouman/docdistill) - .gitignore: add .claude/, dist/, build/, *.egg-info/ - [tool.hatch.build.targets.sdist] exclude .claude, docs/superpowers, tests (CRITICAL: without this, the sdist bundled .claude/settings.local.json which contained a live mineru AUTH token from this session's e2e runs. Verified rebuilt sdist has 0 token occurrences and no .claude/ contents.) uv build + twine check PASS (sdist + wheel). Clean uvx install verified: 'docdistill --help' + both subcommands resolve. | 3 个月前 |
| fix(mcp): analyze_doc returns path+stats, not inline content Returning 68KB+ inline blew up the MCP response (asyncio StreamReader / client chunk limits) for any non-trivial PDF. The full content is still written to primary_path; the response now carries only the path, char/image counts, and a hint. Callers Read the path for the text. Bumps to 0.2.0 (beta) — breaking return-shape change in the 0.x track. | 3 个月前 |
| chore(release): add MIT license + PyPI metadata, exclude dev files from sdist Prep for PyPI publish: - LICENSE (MIT, Copyright (c) 2026 Joe-zhouman) - pyproject: readme=README.md, license=MIT, license-files, project.urls (Homepage/Repository/Changelog -> github.com/Joe-zhouman/docdistill) - .gitignore: add .claude/, dist/, build/, *.egg-info/ - [tool.hatch.build.targets.sdist] exclude .claude, docs/superpowers, tests (CRITICAL: without this, the sdist bundled .claude/settings.local.json which contained a live mineru AUTH token from this session's e2e runs. Verified rebuilt sdist has 0 token occurrences and no .claude/ contents.) uv build + twine check PASS (sdist + wheel). Clean uvx install verified: 'docdistill --help' + both subcommands resolve. | 3 个月前 |
| fix(mcp): analyze_doc returns path+stats, not inline content Returning 68KB+ inline blew up the MCP response (asyncio StreamReader / client chunk limits) for any non-trivial PDF. The full content is still written to primary_path; the response now carries only the path, char/image counts, and a hint. Callers Read the path for the text. Bumps to 0.2.0 (beta) — breaking return-shape change in the 0.x track. | 3 个月前 |
| fix(mcp): analyze_doc returns path+stats, not inline content Returning 68KB+ inline blew up the MCP response (asyncio StreamReader / client chunk limits) for any non-trivial PDF. The full content is still written to primary_path; the response now carries only the path, char/image counts, and a hint. Callers Read the path for the text. Bumps to 0.2.0 (beta) — breaking return-shape change in the 0.x track. | 3 个月前 |
| fix(mcp): analyze_doc returns path+stats, not inline content Returning 68KB+ inline blew up the MCP response (asyncio StreamReader / client chunk limits) for any non-trivial PDF. The full content is still written to primary_path; the response now carries only the path, char/image counts, and a hint. Callers Read the path for the text. Bumps to 0.2.0 (beta) — breaking return-shape change in the 0.x track. | 3 个月前 |
| fix(mcp): analyze_doc returns path+stats, not inline content Returning 68KB+ inline blew up the MCP response (asyncio StreamReader / client chunk limits) for any non-trivial PDF. The full content is still written to primary_path; the response now carries only the path, char/image counts, and a hint. Callers Read the path for the text. Bumps to 0.2.0 (beta) — breaking return-shape change in the 0.x track. | 3 个月前 |