Releases: LLLin000/PaperForge
Releases · LLLin000/PaperForge
1.5.5
v1.5.4
Full Changelog: v1.5.3...v1.5.4
v1.5.3
Full Changelog: v1.5.2...v1.5.3
v1.5.2
Full Changelog: v1.5.1...v1.5.2
v1.5.1
Hotfix + PyPI Support
PyPI
- Package now published to PyPI as
paperforge - Install:
pip install paperforge==1.5.1(no git required) - All install paths use PyPI-first with git fallback
- CI auto-publish on tag push (
.github/workflows/publish.yml)
Fixed
- Py launcher ENOENT: Remove
pyfrom auto-detection, usepython - Git not found: Detect git dir and inject into PATH before pip spawn
- Git tag mismatch: All URLs use
@v{version}format - Base filter:
!zotero_key.isEmpty()keeps only formal notes - Update fallback: Zip download when pip/git fails
- Diagnostic: Copy diagnostic now includes git/PATH/vault info
Removed
- CI workflows (pending rewrite)
v1.5.0
v1.5.0 — Major Release (2026-05-10)
Dashboard v2 — "Quiet Research Desk"
- Three-mode architecture: Global library snapshot, per-collection batch workspace, per-paper reading companion
- Maillard / Morandi color palette: Warm browns and deep forest greens replace harsh defaults
- Responsive layout: CSS Grid + container queries ensure perfect rendering at any sidebar width
- SVG arrow expand/collapse: Text-free gradient containers replace old button labels
- Unified component heights: Collection workflow stages now match global library snapshot pills
- Collection header refinement: Tighter domain-to-card spacing, 28px domain title
Skill Redesign — "Router-First Architecture"
- Single skill source: All agent platforms deploy a single
literature-qaskill directory - Pluggable skill_deploy service: Shared deployment logic extracted from setup wizard
- Narrowed trigger descriptions: Reduces false-match risk in multi-skill environments
Fixes & Compatibility
- Zotero 7 BBT detection: Supports .xpi (Zotero 7) and unpacked directories (Zotero 6)
- control_dir cleanup: Plugin no longer passes removed
--control-dirCLI argument - setup_wizard stability: Fixed multiple NameError crashes in Phase 7 verification
- PDF workspace detection: Any file in a paper workspace dir triggers per-paper mode
- deep_reading_status: Frontmatter-first reading —
finalize.pytakes effect without sync - Zotero key extraction: Walk up directory tree —
ai/discussion.mdetc. trigger per-paper mode - Body template cleanup: New papers no longer duplicate status fields in body content
New Features
deep-finalizecommand: CLI for marking deep-reading completion and signaling the dashboard- Auto-deploy on update: Skills and AGENTS.md deploy when running
paperforge update
v1.4.18 — macOS cross-platform support
v1.4.18 — 2026-05-10
Added
- macOS 跨平台支持 (by @Chartreuse310): GUI Obsidian PATH 扩展、Homebrew/pyenv 优先、Apple CLT stub Python 跳过、Zotero Profiles/extensions/ BBT 检测、macOS Zotero.app 路径检测
src/testable.js: 测试函数独立模块,无 obsidian 依赖
Fixed
- L3 Plugin Tests (vitest) 修复
- BBT 检测支持非标准 Zotero 数据目录
Changed
- 非 Windows pip install 自动加 --user
- PaddleOCR Key 改为 CLI 参数传入
Special thanks to @Chartreuse310 for the macOS cross-platform fixes!
v1.4.17
v1.4.17 — 2026-05-10
Removed
- control_dir 完全淘汰: doctor 不再检查
LiteratureControl目录是否存在;setup 不再创建该目录或将其写入paperforge.json;--control-dirCLI 参数移除;所有安装向导文档同步更新
Changed
- doctor UTF-8 编码修复: Windows 控制台输出中文不再乱码(
sys.stdout.reconfigure+SetConsoleOutputCP) - repair 按钮启用: Plugin dashboard 的 Repair Issues 按钮解除 disabled 状态
Fixed
- repair 消息规范化:
commands/repair.py中 divergent 计数使用len()替代直接打印 list
v1.4.17rc1 以来的变更
Added
- Upgrade migration safeguards: legacy flat notes migrated even without pre-existing canonical index; legacy
do_ocr/analyzecontrol flags preserved fromlibrary-recordsincluding explicit false values; already-migrated workspace notes reconciled on subsequent sync - Non-canonical filename migration: legacy files named only by key (
LEG001.md) correctly migrate via frontmatter title - Plugin Dashboard: lifecycle-based Base views, doctor/repair/sync Quick Actions, per-paper + collection views, mode-aware UI
- Canonical asset index: versioned JSON envelope, atomic writes (tempfile + os.replace), cross-process locking, incremental refresh
- Doctor diagnostics: interpreter resolution, per-module dependency checks, Index Health section (PDF/OCR/Note/Asset)
- Repair blind spots: 6 divergence types now all detected or explicitly warned
- AI Discussion Recorder:
/pf-endcommand for atomic append-only discussion recording - Copy Context: single-key and collection-filtered context output for AI consumption
- Golden datasets: CLI contract tests with snapshot verification
- Chaos testing: corruption, network failure, and filesystem error scenarios
Changed
- Python >= 3.10 now required
- TUI removed: Textual classes, imports, and dependency purged;
paperforge setupwithout--headlessshows redirect - Library-records fully deprecated: zero residual references in production code and 10 command file copies;
paperforge statuslabel nowformal_notesnotlibrary_records - Config-resolved paths: 5 workspace-path index fields and 11 downstream consumers use user-configured
literature_dirinstead of hardcoded"Literature/"; env var typoPAPERFORGERATURE_DIRfixed toPAPERFORGE_LITERATURE_DIR - Index path integrity:
fulltext_pathanddeep_reading_pathin canonical index only advertised when backing files actually exist - Plugin: refactored to single-file main.js; reads config from
paperforge.jsonnotdata.json - Setup wizard: modularized into 6 phase classes; incremental install flow; BRAT-compatible
- Repair: calls
build_index()after fixing artifacts, auto-rebuilds canonical index
Fixed
- OCR state machine tests: ambient token isolation and write-through mocking restored
- Cross-platform: bbt path normalization, e2e doctor test, backslash path test
- Plugin: dashboard stats refresh, switching class cleanup, i18n keys, version detection
- Deep-reading: anchors in main note (## 🔍 精读), removed separate deep-reading.md
- Base views: lifecycle-based folder filters, line-ending normalization on Windows
Security
- Module hardening: discussion.py — file locking (filelock), markdown character escaping, UTC timestamps; main.js — API key via environment variable not CLI args,
createEl()instead ofinnerHTML; asset_state.py — workspace integrity checks before/pf-deeprecommendation; status.py — empty dicts instead of null for JSON consumers
Merged milestones
v1.6 (AI-ready literature asset foundation) through v1.11 (merge gate remediation) consolidated into a single merge to master.
Hotfix 2026-05-10
Fixed
- Base views 不再每次 sync 重新生成:
ensure_base_views现在仅在文件不存在时创建.base文件;已有文件只更新 folder filter,不触碰 views 结构,彻底解决 sync 后视图重复、列宽重置的问题 - 列宽保留:
merge_base_views新增 widths 字段提取与注入,刷新 PF 视图时保留用户拖拽调整的列宽 - test_setup_wizard 全修复: 移除已废弃的
control_dir参数(5处) - test_doctor_runs: 修复 NoneType stdout 拼接
- README: 补充
paperforge status命令引用
v1.4.17rc4
v1.4.17rc4 — Milestone v2.1
Contract-driven architecture & engineering hardening. Full milestone: 5 phases (56-60), 29/29 requirements verified.
Highlights
- PFResult contracts: All CLI commands now output stable
{ok, command, version, data, error}JSON format - ErrorCode enum: Centralized error codes replacing scattered strings
- Service Extraction: sync.py (1647 lines) decomposed into 3 adapters + SyncService
- State Machine: PdfStatus/OcrStatus/Lifecycle enums with ALLOWED_TRANSITIONS validation
- Field Registry: 44-field YAML schema + doctor validation detecting drift
- Setup Modularization: setup_wizard.py (979 lines) → 6 focused classes
- 173 tests passing, 0 regressions
New Modules
paperforge/core/, paperforge/adapters/, paperforge/services/, paperforge/setup/, paperforge/schema/, paperforge/doctor/
1.4.17rc3
v1.12 installation & runtime closure preview
- Plugin-first install: interpreter override, consistent subprocess resolution, Runtime Health UI
- Stronger doctor: resolves plugin-matched interpreter, per-module dependency checks, clear verdict + next action
- Dashboard workflow: OCR queue add/remove buttons, once-per-session privacy warning, full /pf-deep command copy
- Deep-reading lives in main note only (no separate deep-reading.md)
- Old docs removed (INSTALLATION.md, setup-guide.md)
- Fix: dashboard stats now refresh after sync completes
- Fix: redundant Run All Pending OCR button removed
- Tests: 501 passed, 2 skipped