Commit graph

47 commits

Author SHA1 Message Date
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
Research Assistant
c5cb9c1bfd feat(21-01): add subprocess orchestration and Chinese notice helpers
- _runSetup(): validates fields, spawns paperforge setup --headless, disables/enables button
- Uses spawn (not exec) for stdout streaming, --headless (not --non-interactive)
- Explicit directory args override headless_setup defaults
- _showNotice(): renders success/error/progress via Obsidian Notice API
- _formatSetupError(): maps 5+ error patterns to Chinese, raw errors logged to console
- _processSetupOutput(): parses [*]/[OK]/[FAIL] step markers from stdout
- _setStatus(): updates status area with color-coded CSS class
- Button disable/enable in try/finally prevents double-click
- INST-04: sidebar and commands unchanged
2026-04-29 22:38:22 +08:00
Research Assistant
2820bc99e5 feat(21-01): add install status CSS styles (SECTION 5)
- .paperforge-install-status base style with margin/padding/border-radius
- .paperforge-install-success (green) with color-mix tinted background
- .paperforge-install-error (red) with color-mix tinted background
- .paperforge-install-progress (blue) with color-mix tinted background
- Uses Obsidian CSS variables for theme compatibility
2026-04-29 22:36:24 +08:00
Research Assistant
019ffb6e53 feat(21-01): add _validate() field validation method
- Check 7 required fields for non-empty values
- All error messages in Chinese per INST-03
- zotero_data_dir excluded (optional field, auto-detected)
- Returns empty array when valid, error strings array when invalid
2026-04-29 22:36:05 +08:00
Research Assistant
80e9912f67 feat(21-01): add install button section and status area to settings tab
- Append '\u5b89\u88c5\u914d\u7f6e' section with status div + CTA button
- Create _statusArea with initial status message
- Button onClick wired to _runSetup (forward declaration for Plan 02)
- No existing code modified (sidebar, actions, other sections preserved)
2026-04-29 22:35:46 +08:00
Research Assistant
fdc457455c feat(20-20): add settings data model with DEFAULT_SETTINGS and PaperForgeSettingTab UI
- DEFAULT_SETTINGS: vault_path, system_dir, resources_dir, literature_dir, control_dir, agent_config_dir, paddleocr_api_key, zotero_data_dir
- Plugin.loadSettings() merges DEFAULT_SETTINGS with saved data via Object.assign
- Plugin.saveSettings() persists via Obsidian Plugin.saveData() API
- PaperForgeSettingTab with 3 sections: 基础路径 (6 fields), API 密钥 (1 password), Zotero 链接 (1 field)
- Debounced 500ms save on field change via setTimeout/clearTimeout pattern
- 8 settings text inputs: 7 regular + 1 password field for paddleocr_api_key
- Settings survive tab switch (in-memory state) and Obsidian restart (data.json persistence)
2026-04-29 22:20:07 +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
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
049f63ffec feat: overhaul Obsidian plugin UI — dashboard layout, segmented OCR bar, action cards 2026-04-28 23:14:52 +08:00
Research Assistant
0dc27b7c2c chore: bump to v1.4.4 to unify all fixes under a single version 2026-04-28 22:34:41 +08:00
Research Assistant
40ee97c0f8 chore: bump to v1.4.3, update READMEs with multi-agent and plugin info 2026-04-28 19:43:58 +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
11ebc85c4e feat: Obsidian plugin status panel — metric cards, progress bars, quick actions 2026-04-28 19:11:58 +08:00
Research Assistant
859fa5ff97 feat: headless setup mode, Obsidian plugin, AI agent install guide (v1.4.2) 2026-04-28 14:33:35 +08:00