Commit graph

36 commits

Author SHA1 Message Date
Research Assistant
2d5f604ae8 feat: v1.4.11 — Obsidian plugin UX overhaul + headless_setup parity
- Plugin: multi-step install wizard modal (5 steps) with editable directory/key inputs
- Plugin: settings tab becomes operation guide; all config moved to wizard
- Plugin: Python/Zotero/BBT pre-check before wizard opens
- Plugin: agent platform selector (OpenCode/Claude/Cursor/Copilot etc.)
- Plugin: responsive dashboard (auto-fit grids, clamp typography)
- Plugin: command output styled in-panel (running/ok/error)
- Plugin: BBT export guidance in settings tab
- Plugin: rename defaults (Resources, Notes, Index_Cards, System, Base)
- Plugin: vault_path auto-detect from Obsidian
- Plugin: auto-update paperforge on plugin load
- CLI: headless_setup now creates Zotero junction (mklink /J)
- CLI: headless_setup deploys skill directory for flat_command agents
- sync: wikilink through junction (no .resolve() — keeps vault-relative paths)
- sync: route absolute paths through Zotero junction for vault-relative wikilinks
- config: remove library-records subdirectory (records now directly under control_dir)
- base_views: fix duplicate views on merge (skip legacy unmarked views)
- base_views: auto-update folder filter when path config changes
- Phases 20-22 planned and documented
- Bump to v1.4.11
2026-04-30 11:14:07 +08:00
Research Assistant
2329e82588 fix: include styles.css in package data; prevent Unicode crash on pip output 2026-04-29 01:06:59 +08:00
Research Assistant
6df746d20c fix: sync Obsidian plugin even when update is already current 2026-04-29 00:57:30 +08:00
Research Assistant
8d490a3ebc fix: read remote version from GitHub API content to avoid raw CDN cache 2026-04-29 00:29:45 +08:00
Research Assistant
8a3b6b4f7e chore: bump to v1.4.8 and unify update version checks on __init__.py 2026-04-29 00:26:16 +08:00
Research Assistant
6b567d004f fix: update pip installs from GitHub source instead of package index 2026-04-29 00:16:13 +08:00
Research Assistant
6394043441 fix: move install_obsidian_plugin to _utils.py, reload after update to always use latest code 2026-04-29 00:09:52 +08:00
Research Assistant
0d2c16172f fix: correct UPDATEABLE_PATHS repo paths; plugin install uses vault-first source; exclude table images from figure-map matching 2026-04-28 23:58:02 +08:00
Research Assistant
3aee514fd5 refactor: extract pipeline_paths into _utils.py — remove 7 copies, 3 of which were dead code 2026-04-28 23:42:00 +08:00
Research Assistant
61b72a467d refactor: extract load_domain_config into single _domain.py module — remove 7 copies, full rebuild on every call 2026-04-28 23:31:31 +08:00
Research Assistant
049f63ffec feat: overhaul Obsidian plugin UI — dashboard layout, segmented OCR bar, action cards 2026-04-28 23:14:52 +08:00
Research Assistant
a9ba944ddc refactor: __init__.py as single version source; pyproject.toml reads dynamically; paperforge.json drops version field 2026-04-28 22:41:48 +08:00
Research Assistant
0bbcb41346 fix: reload paperforge module before installing plugin to get updated path 2026-04-28 22:31:13 +08:00
Research Assistant
1ec09b6baa fix: surface remote version check errors instead of silently swallowing 2026-04-28 22:23:28 +08:00
Research Assistant
998dc3489a feat: paperforge update now auto-installs Obsidian plugin 2026-04-28 22:18:42 +08:00
Research Assistant
8dbf188168 fix: sync __version__ to 1.4.3, _remote_version() reads from __init__.py 2026-04-28 22:13:23 +08:00
Research Assistant
f617054d5a feat: paperforge status --json, plugin panel with OCR progress bar 2026-04-28 19:21:52 +08:00
Research Assistant
ebc4fdeb00 chore: rename PaperForge Lite -> PaperForge across 27 files 2026-04-28 01:25:51 +08:00
Research Assistant
d82fc52521 feat: persistent OCR poll until completion; fix OpenCode commands for pip install; fix test hangs; add command_files to package 2026-04-27 22:52:03 +08:00
Research Assistant
0505fd2fda feat: add paperforge setup CLI command, one-click install script, sync __version__ to 1.4.0, detect local version from pip metadata 2026-04-27 21:34:03 +08:00
Research Assistant
94f00e990a fix: sync paperforge.json version to 1.4.0; fix update.py missing GITHUB_REPO/GITHUB_ZIP imports; remove PaperForge.base generation (duplicates Literature Hub) 2026-04-27 21:25:00 +08:00
Research Assistant
f31efec521 chore: remove PaperForge.base generation (duplicates Literature Hub) 2026-04-27 21:20:14 +08:00
Research Assistant
a3270dc791 fix: add creators/extra to load_export_rows row dict, fix journal key lookup for first_author/journal/IF in library-records; add first_author, journal, impact_factor columns to Base views; fix PDF storage/ subdirectory resolution 2026-04-27 20:25:35 +08:00
Research Assistant
67a52a898a fix: VaultStep.__init__ missing step_id and checker in super() call 2026-04-27 19:49:36 +08:00
Research Assistant
2edb5b65cc docs(v1.4): commit planning artifacts, test files, and phase summaries for phases 13-19 2026-04-27 19:12:03 +08:00
Research Assistant
93713be21e feat(UX-01): add auto_analyze_after_ocr config and OCR hook
- Add auto_analyze_after_ocr: false to paperforge.json (opt-in, default off)
- Insert hook in ocr.py after ocr_status=done to set analyze:true when
  config is enabled
- Wrapped in try/except so a single failure does not abort OCR batch
- Uses read_json (already imported) and re.sub (already imported)
- Regex pattern matches existing frontmatter convention
2026-04-27 17:57:33 +08:00
Research Assistant
7cccf4eefc refactor(17-dead-code-precommit): remove delegation wrappers and dead code, run ruff cleanup
- Remove def load_vault_config delegation wrappers from all 7 worker modules
- Add from paperforge.config import load_vault_config, paperforge_paths at module level
- Remove unused system_dir/resources_dir/control_dir extraction in pipeline_paths
- Fix sync.py intra-function imports (run_selection_sync, run_index_refresh)
- Fix repair.py import path for _resolve_formal_note_path (direct from _utils)
- Add ruff and pre-commit as test dependencies in pyproject.toml
- Configure per-file ruff ignores for pre-existing issues
- Run ruff check --fix + ruff format (353 + 58 issues auto-fixed)
- All 203 tests pass, ruff check zero warnings
2026-04-27 17:40:47 +08:00
Research Assistant
c08f86de0f feat(17-dead-code-precommit): add ruff config, pre-commit hooks, Check 5, and OCR error context
- Add [tool.ruff] section to pyproject.toml (target-version py310, rules E/F/I/UP/B/SIM)
- Create .pre-commit-config.yaml with 7 hooks (ruff lint+format, check-yaml, check-toml, end-of-file-fixer, trailing-whitespace, consistency-audit)
- Add Check 5 (check_duplicate_utils) to scripts/consistency_audit.py
- Add library_record field to OCR error meta.json (4 error paths in ocr.py)
2026-04-27 17:29:13 +08:00
Research Assistant
d472c30d6b feat(15-01): refactor deep_reading.py and ld_deep.py to use scan_library_records()
deep_reading.py:
- Added scan_library_records, _resolve_formal_note_path to _utils imports
- Replaced _resolve_formal_note_path body with re-export comment
- Replaced inline scan loop with scan_library_records() call
- Retained status sync, categorization, and report generation logic

ld_deep.py:
- Added module-level import from paperforge.worker._utils
- Replaced scan_deep_reading_queue() body with thin wrapper
- Wrapper filters deep_reading_status!=done and sorts by OCR/domain/key
- All processing pipeline tests pass (203/203)
2026-04-27 15:58:23 +08:00
Research Assistant
e24ef4ca6f feat(15-01): add scan_library_records() and _resolve_formal_note_path() to _utils.py
- Add _resolve_formal_note_path() with function-level paperforge_paths import
- Add scan_library_records() as pure data acquisition function
- Returns all D-03 fields: zotero_key, domain, title, analyze, do_ocr,
  deep_reading_status, ocr_status, note_path
- Uses same regex patterns as ld_deep.py for frontmatter extraction
- No side effects, no categorization, no sorting (caller's responsibility)
- Part of new '# --- Deep-Reading Queue ---' section
2026-04-27 15:55:07 +08:00
Research Assistant
00692ef667 feat(13-logging-foundation): add verbose param to worker function signatures
- run_selection_sync(vault) -> run_selection_sync(vault, verbose=False)
- run_index_refresh(vault) -> run_index_refresh(vault, verbose=False)
- run_ocr(vault) -> run_ocr(vault, verbose=False)
- run_doctor(vault) -> run_doctor(vault, verbose=False)
- run_status(vault) -> run_status(vault, verbose=False)
- Backward compatible: default False preserves existing call sites
2026-04-27 15:15:43 +08:00
Research Assistant
492c4c2790 feat(13-logging-foundation): migrate diagnostic print() calls to logger.*()
- repair.py: 10 [repair]-tagged diagnostic prints migrated to logger.error/info/warning with printf-style formatting
- commands/ocr.py: 4 [INFO]/[WARN] diagnostic prints migrated to logger.info/warning
- worker/update.py: _log() and _color() functions removed; all 36 _log() call sites migrated to logger.*()
- All user-facing stdout print() calls preserved (4 in repair.py, 6 in commands/ocr.py _diagnose(), 2 in update.py for pip/git output)
- All migrated calls use printf-style %%s/%%d formatting for lazy evaluation
2026-04-27 15:12:04 +08:00
Research Assistant
e0dbfeccec feat(13-logging-foundation): add module-level logger to all 12 worker and command modules
- Added import logging and logger = logging.getLogger(__name__) to:
  worker: repair, deep_reading, ocr, sync, status, base_views, update
  commands: ocr, repair, deep, sync, status
- 12 of 13 planned files completed (paperforge/update.py does not exist on disk - skipped)
- Verified all logger instances resolve to correct hierarchical names
2026-04-27 15:07:32 +08:00
Research Assistant
ec2e91d4ac feat(update): smart update with auto-detection + Windows one-click script
paperforge update:
- Auto-detects installation method (pip/pip-editable/git/zip)
- Routes to appropriate update strategy
- pip users: pip install --upgrade
- pip-editable users: git pull + pip install -e .
- git users: git pull
- unknown: zip download fallback

scripts/update-paperforge.ps1:
- Windows one-click update script
- Auto-detects install method
- Supports -Force (skip confirm) and -DryRun
- Clear colored output with error handling

AGENTS.md:
- Added comprehensive update section with 4 methods
- Documented auto-update and PowerShell script
2026-04-25 00:17:54 +08:00
Research Assistant
4d57d17975 fix(v1.3-doctor): update worker_script path and doctor checks for v1.3 architecture
- config.py: worker_script now points to paperforge/worker/__init__.py
  (pipeline/ removed in Phase 12)
- worker/status.py: doctor checks paperforge.worker importability
  instead of old literature_pipeline.py existence
- tests/test_config.py: update assertion for new worker_script name
2026-04-25 00:02:53 +08:00
Research Assistant
498a9edfe5 feat(phase-12): extract worker modules from literature_pipeline.py
- Create paperforge/worker/ package with sync.py, ocr.py, repair.py,
  status.py, deep_reading.py, update.py, base_views.py
- Update paperforge/commands/*.py to import from new worker modules
- Update paperforge/cli.py _import_worker_functions for new paths
- Update paperforge/config.py ld_deep_script resolution with fallback
- Update setup_wizard.py for new worker/skills paths
- Add function-level imports to break circular dependencies
2026-04-24 22:32:25 +08:00