Commit graph

63 commits

Author SHA1 Message Date
Research Assistant
dd71bb0f79 fix: v1.4.17rc2 — OCR quote fix, 4-stage lifecycle, .env fallback, Codex support, deep-reading anchors, auto-update pip 2026-05-08 01:26:04 +08:00
Research Assistant
315abdcc3a chore: bump version to 1.4.17rc1 2026-05-07 21:54:35 +08:00
Research Assistant
e742df7888 fix(merge-gate): upgrade migration safeguards, index path integrity, and Python version alignment
- migrate_to_workspace: preserve legacy flat notes even without canonical index
- migrate_to_workspace: reconcile legacy library-record do_ocr/analyze flags including false overrides
- migrate_to_workspace: handle non-canonical legacy filenames via frontmatter title
- asset_index: only advertise fulltext_path/deep_reading_path when files exist
- asset_index: prefer note frontmatter over legacy library-records, fall back to legacy
- setup_wizard: require Python >=3.10 instead of >=3.8
- plugin main.js: align Python version messaging to 3.10+
- ocr.py: auto_analyze_after_ocr reads from formal note paths, not library-records
2026-05-07 21:51:58 +08:00
Research Assistant
53ad7ac74c feat(49-module-hardening): main.js hardening — env-based API key, createEl() DOM
- HARDEN-04: Pass PADDLEOCR_API_TOKEN via env var instead of CLI --paddleocr-key
- HARDEN-05: Replace innerHTML with createEl() DOM API for directory tree rendering
2026-05-07 20:06:21 +08:00
Research Assistant
db042cd6dd chore: complete v1.9 Frontmatter Rationalization & Library-Record Deprecation
Milestone v1.9 — 5 phases, 28 requirements, 188 tests passing.

Key changes:
- Frontmatter rationalization: slimmed formal note frontmatter (28→16 fields), created per-workspace paper-meta.json
- Library-record deprecation: removed library_record_markdown(), sync no longer creates library-records
- Workspace stabilization: unconditional workspace creation, fulltext bridge, discussion.py reads canonical index
- Base view fix: removed ghost lifecycle fields, restored workflow flags, Literature/ folder filter
- Plugin sync: version badge reads paperforge_version from index envelope

Archived: .planning/milestones/v1.9-ROADMAP.md, .planning/milestones/v1.9-REQUIREMENTS.md
2026-05-07 10:11:42 +08:00
Research Assistant
ddeb0cfea2 fix: validate setup_complete against paperforge.json; broaden BBT detection with recursive scan 2026-05-06 22:47:21 +08:00
Research Assistant
29edb2d811 fix: overhaul install flow clarity and non-destructive incremental setup
- Move Better BibTeX auto-export to post-install step (exports dir created by setup)
- Clarify wizard overview: show resources_dir/literature_dir/control_dir hierarchy
- Fix post-install flow order: BBT export → enable plugin → dashboard → sync
- Split do_ocr and analyze marks into separate steps (OCR before deep-reading)
- Mark all literature flags via Base views, not manual file editing
- Make installer incremental: preserve existing files, only create missing ones
- Remove destructive junction/link deletion in TUI wizard
- Merge .env instead of overwriting; skip overwrite for AGENTS.md, docs, plugin
- Update TUI, headless, and plugin completion output to match corrected flow
- Add regression test for non-destructive setup behavior
2026-05-06 22:47:07 +08:00
Research Assistant
1d52d94445 fix: plugin pip bootstrap install and setup_cli non-fatal; add regression tests 2026-05-06 22:46:56 +08:00
Research Assistant
b2e446eb21 fix: harden repair paths, slugify edge case, OCR meta resilience, venv python detection, and repair exit handling 2026-05-06 22:09:29 +08:00
Research Assistant
4fe55e11dc feat: restore phases 31-34 from stash — dashboard multi-view, deep-reading mode, jump button, planning docs
- Phase 31: Bug fixes (version display, lifecycle alignment, AI Ready removal)
- Phase 32: Deep-reading mode detection (_resolveModeForFile, identity guard)
- Phase 33: Deep-reading dashboard (status card, Pass 1 extraction, AI Q&A)
- Phase 34: Jump to deep reading button (i18n, conditional visibility)
- Planning files for phases 31-36
- CSS: Section 33 deep-reading styles
- asset_index.py: paperforge_version in envelope
2026-05-06 15:14:36 +08:00
Research Assistant
b8f2076e4d fix: maturity gauge string-blocker iteration, paper header sync, setup control_dir removal 2026-05-06 12:41:43 +08:00
Research Assistant
8ee73d8382 fix: BBT detection fallback to user-configured zotero_data_dir 2026-05-06 10:55:06 +08:00
Research Assistant
dac097c7e6 chore: cleanup stale files, update AGENTS.md, fix install wizard button crash
- Remove root setup_wizard.py (duplicate of paperforge/setup_wizard.py)
- Remove token-usage-output.txt (runtime artifact)
- Update AGENTS.md: worker architecture, directory structure, section numbering, test count 317->462
- Fix undefined 'home' variable in plugin main.js _preCheck causing modal to silently fail
2026-05-06 10:41:11 +08:00
Research Assistant
11e4ee8ee9 feat(30-01): replace _renderCollectionMode placeholder with full collection view
- Metric cards row: papers count, fulltext-ready (with progress bar), deep-read (with progress bar)
- Lifecycle distribution bar chart via _renderBarChart()
- Aggregated health overview via _renderCollectionHealth() showing PDF/OCR/Note/Asset counts
- Single-pass aggregation from domain-filtered canonical index entries
- Empty state via _renderEmptyState() when domain has no items
2026-05-04 22:01:02 +08:00
Research Assistant
6e1519f9db style(30-01): add Section 17 CSS for collection view layout
- .paperforge-collection-view flex container
- .paperforge-collection-metrics grid for metric cards
- .paperforge-collection-health grid for health aggregation
- .paperforge-collection-health-cell/counts with ok/warn/fail coloring
2026-05-04 21:59:58 +08:00
Research Assistant
5fe5b00c98 feat(29-01): implement _renderPaperMode with lifecycle stepper, health matrix, maturity gauge, next-step card
- Replace placeholder _renderPaperMode() with full per-paper view rendering pipeline
- Add _renderNextStepCard() with 6-state stepInfo mapping (sync/ocr/repair/rebuild index/pf-deep/ready)
- Add _openFulltext() using Obsidian vault API to open fulltext.md
- Paper metadata header shows title, authors (comma-joined), year
- Contextual action buttons: Copy Context (reuses ACTIONS), Open Fulltext (conditional on fulltext_path)
- All 4 Phase 27 component methods wired: lifecycle stepper, health matrix, maturity gauge, next-step card
2026-05-04 16:17:37 +08:00
Research Assistant
dbf76d1a0f style(29-01): add per-paper view CSS and next-step card styles
- Section 15: Per-Paper View Layout (paper-view, header, title, meta, authors, year, actions, contextual-btn)
- Section 16: Next-Step Recommendation Card (next-step-card with ready state, label, text, trigger button)
2026-05-04 16:17:31 +08:00
Research Assistant
a5c78f3bbb feat(28-02): add event subscriptions, mode header rendering, and lifecycle cleanup
- Add _setupEventSubscriptions() for active-leaf-change (debounced 300ms) and vault modify (filtered to formal-library.json)
- Add _renderModeHeader() with mode badge (global/paper/collection classes) and context name
- Add mode warning for paper not found in index (D-18)
- Refactor onOpen() to call _setupEventSubscriptions() before _detectAndSwitch()
- Refactor onClose() with full cleanup: workspace/vault off(), clearTimeout, null cached data
2026-05-04 15:05:12 +08:00
Research Assistant
92ba52eec9 feat(28-02): add mode detection and switching infrastructure
- Refactor constructor with _currentMode, _currentDomain, _currentPaperKey, _currentPaperEntry state
- Refactor onOpen() to call _detectAndSwitch() for initial data load
- Refactor _buildPanel() with _modeContextEl, _contentEl, _actionsGrid elements
- Add _renderActions() extracted from old _buildPanel action loop
- Add _invalidateIndex() to clear cached index
- Add _detectAndSwitch() for active file type detection (D-01..D-04)
- Add _switchMode() for mode-based content rendering (D-05..D-06)
- Add _renderGlobalMode() with OCR section instance vars for _renderOcr compat
- Add _renderPaperMode() placeholder for Phase 29
- Add _renderCollectionMode() placeholder for Phase 30
- Add _refreshCurrentMode() for index change re-render
- Remove orphaned duplicate code block and duplicate _showMessage
- Clean up double closing brace from orphan removal
2026-05-04 15:03:52 +08:00
Research Assistant
7bde882947 feat(28-01): add mode-aware CSS for content area and header context
- Section 13: .paperforge-content-area with switching opacity transition
- Section 13: .paperforge-content-placeholder with dashed border styling
- Section 14: .paperforge-mode-context with flex layout
- Section 14: .paperforge-mode-badge with 3 color states (global/paper/collection)
- Section 14: .paperforge-mode-name with text-overflow ellipsis truncation
- Section 14: .paperforge-mode-warning using var(--text-warning)
2026-05-04 14:58:19 +08:00
Research Assistant
d94d3c1eff feat(28-01): add index loading utilities to PaperForgeStatusView
- _loadIndex(): reads formal-library.json, returns parsed JSON or null
- _getCachedIndex(): lazy-loads and caches items array in this._cachedItems
- _findEntry(key): look up single paper by zotero_key, returns entry or null
- _filterByDomain(domain): filters index items by domain field
2026-05-04 14:57:53 +08:00
Research Assistant
30f0e65a54 feat(27-02): add 7 render methods to PaperForgeStatusView
Task 1: Add _renderSkeleton, _renderEmptyState, _buildMetricBar utilities + enhanced _renderStats with null guard and progress bar
Task 2: Add _renderLifecycleStepper (6-stage) and _renderHealthMatrix (2x2 grid) methods
Task 3: Add _renderMaturityGauge (6-segment) and _renderBarChart (horizontal bars) methods

All methods use createEl() DOM API, gracefully handle null/undefined via loading skeleton or empty state, and produce CSS classes matching Plan 27-01.
2026-05-04 14:41:45 +08:00
Research Assistant
312a4e359d feat(27-01): add maturity gauge and bar chart CSS components
- Section 11: Maturity gauge with 6-segment horizontal bar
- Level-specific color classes level-1 through level-6
- Blocking checks listed as bullet points under gauge
- Section 12: Horizontal bar chart with lifecycle stage colors
- .bar-fill with transition: width 0.3s smooth animation
- Stage color variants: imported/cyan, indexed/blue, pdf-ready/purple
- fulltext-ready/green, deep-read/yellow, ai-ready/red
- All colors use var(--*) Obsidian CSS variables
2026-05-04 14:35:37 +08:00
Research Assistant
2c367b576e feat(27-01): add lifecycle stepper and health matrix CSS components
- Section 9: Lifecycle stepper with 6 vertical steps, border-radius circles
- Connecting lines via ::before pseudo-element between steps
- States: .completed (green), .current (pulsing), .pending (dimmed)
- Section 10: Health matrix 2x2 CSS grid with color-coded cells
- Status classes: .ok (green), .warn (yellow), .fail (red)
- Hover tooltips via [title]:hover::after with attr(title)
- All colors use var(--*) Obsidian CSS variables
2026-05-04 14:34:56 +08:00
Research Assistant
927587230d feat(27-01): add loading skeleton shimmer and enhanced metric card CSS
- Section 7: Loading skeleton with @keyframes paperforge-shimmer (1.5s)
- Section 7: Empty state with muted italic styling via .paperforge-empty-state
- Section 2 enhanced: opacity 0.3s transition on metric-card and metric-value
- Added .paperforge-metric-progress and .paperforge-metric-progress-fill for optional progress bar
- All colors use var(--*) Obsidian CSS variables
2026-05-04 14:34:11 +08:00
Research Assistant
935dec6fd5 chore: bump version to v1.4.15 2026-05-04 13:03:11 +08:00
Research Assistant
b294dec386 chore: add v1.6.0 to plugin versions.json 2026-05-04 13:01:30 +08:00
Research Assistant
0b3776909f chore: bump version to v1.6.0 2026-05-04 13:01:13 +08:00
Research Assistant
ac667bfe3e feat(26-03): add Copy Context Quick Action with key resolution
- Add paperforge-copy-context ACTIONS entry with needsKey flag
- Update _runAction to resolve zotero_key from active file frontmatter
- Add needsFilter support for collection context (--all default)
- Implement clipboard copy with JSON validation for context commands
- Add running guard to prevent simultaneous execution
- Add variable timeout (30s context, 60s collection, 600s other)
- Register command palette entries for both context actions
2026-05-04 12:51:07 +08:00
Research Assistant
972b894b1d feat(25-02): add doctor and repair Quick Action buttons
- Add 'paperforge-doctor' action: runs 'python -m paperforge doctor'
- Add 'paperforge-repair' action: runs 'python -m paperforge repair'
- ACTIONS array now has 4 entries: sync, ocr, doctor, repair
- Existing _runAction() handles both new commands unchanged (thin CLI shell)
2026-05-04 11:23:56 +08:00
Research Assistant
ed1b36703c feat(25-02): refactor _fetchStats to read formal-library.json directly
- Replace Python CLI spawn with fs.readFileSync for primary path
- Single-pass aggregation of lifecycle, health, and OCR counts per D-06
- Fallback to CLI spawn when index file is missing (D-07)
- Add fs and path as top-level requires
- Access system_dir via app.plugins.plugins['paperforge'].settings
2026-05-04 11:23:29 +08:00
Research Assistant
8809519916 feat(22-02): add savePaperforgeJson() and clean stale path fields from plugin data.json on load
- Added savePaperforgeJson() method writing path config to paperforge.json vault_config block
- savePaperforgeJson() removes stale top-level path keys, sets schema_version='2' if absent
- After write, refreshes in-memory plugin.settings path fields from paperforge.json
- Added saveSettings() call in onload() to clean stale path fields from plugin data.json on first load
- saveSettings() already filters by DEFAULT_SETTINGS keys (from Task 1), automatically excluding path fields
2026-05-03 22:56:13 +08:00
Research Assistant
610328e5cd feat(22-02): refactor SettingsTab display to source path config from paperforge.json
- Added _pfConfig cache and _refreshPfConfig() to PaperForgeSettingTab constructor
- display() now calls _refreshPfConfig() at start for fresh path config
- Config Summary section reads path values from _pfConfig (paperforge.json source)
- Prep export path hint now reads from _pfConfig.system_dir
- Non-path fields (paddleocr_api_key, zotero_data_dir) still read from plugin.settings
2026-05-03 22:54:42 +08:00
Research Assistant
781c465c75 feat(22-02): add readPaperforgeJson(), clean DEFAULT_SETTINGS, refactor loadSettings/saveSettings
- Removed path directory keys (system_dir, resources_dir, literature_dir, control_dir, base_dir) from DEFAULT_SETTINGS
- Kept non-path keys: vault_path, setup_complete, auto_update, agent_platform, language, paddleocr_api_key, zotero_data_dir
- Added readPaperforgeJson() method reading from paperforge.json vault_config block with Python DEFAULT_CONFIG fallback
- Refactored loadSettings() to overwrite path fields from readPaperforgeJson()
- Refactored saveSettings() to only persist DEFAULT_SETTINGS keys (excludes path fields)
- Updated prep export path hint default from 'System' to '99_System'
2026-05-03 22:53:18 +08:00
Research Assistant
f87fe79a94 chore: bump version to v1.4.14 2026-05-02 15:20:25 +08:00
Research Assistant
dcc044249c feat: refine plugin onboarding copy and dashboard branding 2026-05-02 15:18:51 +08:00
Research Assistant
f939f2cf52 fix: sync description across manifests; fix authorUrl to personal URL 2026-05-01 12:16:15 +08:00
Research Assistant
28d2e296fa chore: add manifest.json at repo root; remove 'Obsidian' from description 2026-05-01 12:11:48 +08:00
Research Assistant
e0f6052c1a chore: remove legacy i18n.js (i18n inlined in main.js) 2026-05-01 11:47:12 +08:00
Research Assistant
1af4924c52 chore: bump version to v1.4.13 2026-05-01 11:14:59 +08:00
Research Assistant
d06654ef70 fix: continuous OCR batch processing + real-time dashboard progress + fix loading flicker 2026-04-30 16:05:02 +08:00
Research Assistant
4285bf24fa feat: replace exec with spawn for Dashboard actions (real-time OCR/sync progress) 2026-04-30 14:33:05 +08:00
Research Assistant
9f305ca4fe chore: bump version to v1.4.12 2026-04-30 14:12:45 +08:00
Research Assistant
51463bb7d3 fix: add header_title key, fix lang detection, complete config summary i18n 2026-04-30 14:11:03 +08:00
Research Assistant
1d7fa0d3b1 fix: inline i18n into main.js (remove require/i18n.js deps) 2026-04-30 14:05:04 +08:00
Research Assistant
a9c4881324 feat: complete i18n refactor + automated release script
- i18n.js: zh/en language pack with auto-detect from Obsidian config
- main.js: all UI strings use t() calls (settings tab, wizard, pre-check)
- scripts/bump.py: --release flag: bump + commit + tag + push + gh release
- AGENTS.md: developer guide section (bump, release, i18n, pre-commit)
2026-04-30 13:55:54 +08:00
Research Assistant
f27558732d feat: add i18n framework (zh/en auto-detect) + author fix + versions.json update 2026-04-30 13:28:24 +08:00
Research Assistant
ee2c516279 chore: update versions.json to v1.4.11; sync script covers both json files 2026-04-30 12:59:45 +08:00
Research Assistant
00914d69fc chore: bump plugin manifest to v1.4.11 2026-04-30 12:54:22 +08:00
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