Commit graph

357 commits

Author SHA1 Message Date
LLLin000
b41b4c88b7 fix: complete managed runtime cutover 2026-07-20 02:20:25 +08:00
LLLin000
9a15f36485 docs: define control center UX redesign 2026-07-20 01:49:33 +08:00
LLLin000
c883d5fcc9 fix: share managed runtime and preserve credential state 2026-07-20 01:47:17 +08:00
LLLin000
d2334d4446 feat(#82): remove old Python resolvers — resolvePythonExecutable, getCachedPython, checkRuntimeVersion, buildRuntimeInstallCommand, _syncRuntime
- settings.ts: replaced all getCachedPython/resolvePythonExecutable calls with _resolveRuntimeCommand (ManagedRuntime)
- settings.ts: deleted _syncRuntime (superseded by ManagedRuntime.ensure)
- settings.ts: cleaned dead imports (getMemoryRuntime, isMemoryReady, isVectorReady, getCachedPython)
- main.ts: added _getPythonCommand helper using ManagedRuntime, replaced all resolvePythonExecutable calls
- dashboard.ts: added _resolvePython helper, replaced all 7 resolvePythonExecutable + 1 checkRuntimeVersion calls
- modals.ts: added _resolvePython helper to PaperForgeSetupModal, replaced getCachedPython + 3 resolvePythonExecutable calls

Build: 258.0KB | Tests: 384/384 passed | Typecheck: clean
2026-07-19 15:06:04 +08:00
LLLin000
508ef78d51 feat(#81, #82): Release N+1/2 cutover — remove setup_complete, auto_update, legacy migration, deprecated build-state JSON writer
#81 (N+1) remaining:
- settings.ts: _resolveRuntimeCommand fail-closed (no getCachedPython fallback)
- managed-runtime.ts: PYTHON_310_DEPRECATED warning removed, single 3.11+ gate
- Python backend: checker/setup_wizard/status → 3.11 minimum
- i18n: 3.10 → 3.11 user-facing strings

#82 (N+2) deletions:
- constants.ts: removed setup_complete, auto_update, auto_update_on_startup, selected_skill_platform
- main.ts: removed _autoUpdate, _firstLaunchSnapshotMigration, credential migration
- modals.ts: removed setup_complete write
- settings.ts: removed categorizeMaintenanceRow dead import
- build_state.py: removed deprecated get_vector_build_state_path

Build: 261.4KB | Tests: 384/384 passed | Typecheck: clean
2026-07-19 14:54:19 +08:00
LLLin000
0859652396 feat(#81): Release N+1 owner cutover — Python 3.11+ gate, fail-closed dispatch
- managed-runtime: collapse MIN_PYTHON_LEGACY/MIN_PYTHON_NEW → MIN_PYTHON (3.11)
- managed-runtime: remove PYTHON_310_DEPRECATED warning (3.10 now needs_repair)
- managed-runtime: single 3.11+ hard gate for all installations
- settings: cut getCachedPython fallback in _resolveRuntimeCommand → fail-closed
- settings: update Python version notices 3.10→3.11
- i18n: update user-facing Python version messages 3.10→3.11
- Python backend: checker.py, setup_wizard.py, status.py → 3.11 minimum
- Test updates: legacy fallback tests now verify fail-closed, 3.10 gating removed

Build: 264.4KB | Tests: 384/384 passed | Typecheck: clean
2026-07-19 14:32:12 +08:00
LLLin000
b9f3ca1719 fix: repair stash merge artifacts in i18n.ts and memory.py
- i18n.ts: remove duplicate md_select_* keys from stash conflict
- memory.py: replace corrupted _restore_backup/run merge with clean copy
2026-07-19 14:14:41 +08:00
LLLin000
b4c0404542 feat: deliver actionable Maintenance inbox and privacy-safe issue drafts (#80)
Maintenance derives worst-constituent severity from Installation/
Library/OCR/Memory/Help with no independent probe/action. Items
route to constituent module actions; re-probe removes resolved
items. Accessible destructive confirmation (Tab trap, Escape,
inert bg, focus restore) plus editable locally redacted OCR
issue drafts with explicit GitHub open and no token storage.

Backend: probe_maintenance aggregation, quality_unacceptable
detection with scope_count, 78/78 gate.

Frontend: Maintenance tab, inbox rendering, PaperForgeConfirmModal,
PaperForgeIssueDraftModal with double-redaction, excluded-category
preview, _REAL_PROBE + strict envelope validation, container-query
responsive at 730/768px.

Verified: 78/78 backend, 384/385 plugin (1 known baseline),
typecheck clean, 264.9KB build, Obsidian 1.12.7 smoke.
2026-07-19 14:09:54 +08:00
LLLin000
c23d6b9a7f Merge branch 'feat/issue-78-capability-tracers' into feat/issue-80-maintenance
# Conflicts:
#	PROJECT-MANAGEMENT.md
#	paperforge/plugin/main.js
#	project/current/ocr-v2-active-queue.md
2026-07-19 10:26:47 +08:00
LLLin000
f9c65020ca fix: use text-only migration warning 2026-07-19 01:11:37 +08:00
LLLin000
6bed0d7151 feat: migrate plugin credentials to SecretStorage (#79) 2026-07-19 01:00:41 +08:00
LLLin000
69a6223910 feat: expose library OCR and memory capability tracers (#78) 2026-07-18 18:13:08 +08:00
LLLin000
4ef9e9834a chore: update plugin bundle and vitest config 2026-07-16 02:55:43 +08:00
LLLin000
f8b85505c8 feat: add control center navigation, installation detail, and managed runtime dispatch 2026-07-16 02:55:33 +08:00
LLLin000
173a4e826e feat: add managed runtime service with version gating and slot retention 2026-07-16 02:55:23 +08:00
LLLin000
85a7ae30a2 feat: add OCR rebuild UX and capability tracer 2026-07-15 20:36:15 +08:00
LLLin000
d7b0a52780 closeout: record #69/#70 resolution, capability model, runtime architecture, maintenance regression fixes
- Update PROJECT-MANAGEMENT.md for #69/#70 resolved, #71/#72 as live frontier
- Add orthogonal capability/activity/attention model and managed-runtime immutable-slot
  architecture decisions to decision log and timeline
- Record OCR maintenance regression: canonical per-row action routing (display_action->verb),
  redo confirmation gate, cache manifest preservation (19/19 tests pass)
- Add research reports: docs/research/2026-07-14-capability-state-action-contract.md,
  docs/research/2026-07-14-managed-runtime-architecture.md
- Update project/current/ocr-v2-active-queue.md with resolved items and new frontier
2026-07-15 00:03:16 +08:00
LLLin000
3a516add86 fix: align OCR maintenance selection semantics 2026-07-14 18:27:53 +08:00
LLLin000
349d4f6dcb feat: add streaming OCR rebuild progress 2026-07-14 18:05:49 +08:00
LLLin000
3a0d171e31 docs: update PROJECT-MANAGEMENT and ocr-v2-active-queue with retrieval recovery Wayfinder checkpoint 2026-07-11 01:30:58 +08:00
LLLin000
b4ac277438 Merge branch 'feat/retrieval-recovery'
# Conflicts:
#	paperforge/commands/embed.py
2026-07-11 01:26:37 +08:00
LLLin000
460412d423 fix: isVectorReady checks total_chunks instead of fulltext-only chunk_count 2026-07-11 00:39:25 +08:00
LLLin000
537e8e36ed fix: add --vault flag to search/retrieve spawn 2026-07-11 00:31:42 +08:00
LLLin000
0fd5227355 chore: fix ruff violations — unused imports, Path, dead code, formatting 2026-07-11 00:10:32 +08:00
LLLin000
51018943ad feat: implement 8 search domain states with keyboard shortcuts and a11y in dashboard
Adds _renderSearchState() rendering 8 distinguishable states:
idle, searching (M/@), results, empty, vectors-not-built,
backend-unavailable, timeout, model-changed.

Keyboard: / focuses search, Escape cancels, ArrowUp/Down navigates
results, Enter opens note, Ctrl+Enter forces deep mode.

Accessibility: role=alert on errors, aria-live=polite on results
and progress, role=listbox with aria-selected/aria-posinset on cards,
aria-setsize, tabindex=0 on result cards, focus management on
state transitions.

Focus management: Stop button on build start, first result on
search complete, error banner on failure.
2026-07-10 23:56:31 +08:00
LLLin000
6e4b446ca2 feat: add retrieval error code routing in classifyError
Maps 7 retrieval error codes (VECTOR_NOT_BUILT, VECTOR_CORRUPTED,
MODEL_CHANGED, BACKEND_UNAVAILABLE, TIMEOUT, INTERNAL_ERROR, NO_PYTHON)
to distinct UI states with type, message, recoverable flag, and action.

Adds 7 new test cases for the error classification routing.
2026-07-10 23:56:25 +08:00
LLLin000
6b53de8135 feat: add 33 retrieval_* i18n keys for error distinction and recovery UI
Adds all retrieval state labels, button text, warning messages, and
descriptive copy in English and Chinese under the retrieval_* prefix.

Prepares i18n foundation for search domain (8 states) and build domain
(10 states) per PRD #57 and issue #62.
2026-07-10 23:56:20 +08:00
LLLin000
ec810b10a9 feat: plugin reads embed status --json live, polls during build, stop without kill
getVectorRuntime now calls embed status --json synchronously with
a 2s time-based cache before falling back to the JSON snapshot.

During build, a 2s polling interval reads embed status --json for
live build state and detects remote stop.

Stop button calls embed stop --json only (no direct .kill() on the
child process), letting the CLI handle cooperative stop.

ISettingPlugin interface extended with _embedPollInterval and
_embedPolling properties.
2026-07-10 23:55:26 +08:00
LLLin000
32e69a6c7b Delete sql.js: remove db.ts, wasm, dependency, and all sql.js code paths
- Remove paperforge/plugin/src/services/db.ts (sql.js wrapper, initDatabase/searchMetadata/SearchResultItem)
- Remove paperforge/plugin/sql-wasm.wasm (644KB binary)
- Remove sql.js and @types/sql.js from package.json; npm install to update lockfile
- dashboard.ts: remove import of db.ts, remove _sqlJsInitialized/_sqlJsFailed state,
  remove the sql.js search path block entirely — all searches go straight to CLI spawn.
  Clean up stale comments.
- Bundle drops from 346KB to 167KB; 6 test files / 58 tests still pass
2026-07-10 23:07:26 +08:00
LLLin000
e3c41cc07d chore: add sql.js WASM, DB service, and PRD document 2026-07-10 02:49:49 +08:00
LLLin000
bf29966a86 feat: real-time metadata search via sql.js with 200ms debounce
Replace CLI spawn for metadata search with direct sql.js FTS5 queries.
Input debounced at 200ms. Falls back to CLI when sql.js unavailable.
@ Deep Search stays on CLI.
2026-07-10 02:49:31 +08:00
LLLin000
d6c1d1539b chore: rebuild plugin main.js with sql.js dependency
Bundles sql.js for direct FTS5 access to paperforge.db.
2026-07-10 02:49:06 +08:00
LLLin000
4ff165ae49 feat(#38, #40): version history panel + @ Deep Search
#38: File Recovery-style version history panel with i18n (en/zh).
- _renderVersionMode() with paper list + timeline + restore/compare
- version-history.ts service for scan/restore/compare
- Paper mode [版本历史] button
- i18n strings for all panel text

#40: @ Deep Search with query rewrite + hybrid retrieval.
- query_rewrite.py: abbreviation expansion (28 terms) + synonyms (12)
- hybrid_search(): BM25 FTS5 + vec0 k-NN + score fusion (0.3/0.7)
- retrieve --deep flag routes to hybrid_search
- Graceful vec0 fallback (FTS5-only)
- 17 new tests

Co-authored-by: VersionPanel <agent>
Co-authored-by: DeepSearch <agent>
2026-07-10 01:01:48 +08:00
LLLin000
06fec04651 feat: Phase 0, 1, 3a — legacy OCR fix, ChromaDB migration, search bar UI
Phase 0 (#35): _needs_derived_rebuild returns (False, 'legacy_ocr') for
papers without structured blocks and derived_version. _can_rebuild adds
has_structured check. No misleading rebuild suggestions for legacy users.

Phase 1 (#36): migrate_chroma_to_vec0() copies existing ChromaDB vectors
to vec0 tables with zero API calls. Idempotent (skips by paper_id).
delete_paper_vectors() cleans both ChromaDB and vec0. CLI: embed migrate.
5 new tests.

Phase 3a (#39): Search bar in collection panel — two-mode input
(M metadata / @ deep) with card results display. JSON output parsed
from search/retrieve CLI. 289 lines TypeScript, 175 lines CSS.
Build passes clean.

Co-authored-by: Phase0LegacyOcr <agent>
Co-authored-by: ChromaMigration <agent>
Co-authored-by: SearchBarUI <agent>
2026-07-10 00:02:02 +08:00
LLLin000
45022c3e16 docs: archive superpowers specs/plans, commit PR9A-C plan files
- Archive 173 design/plan/analysis docs from docs/superpowers/ →
  docs/archive/superpowers/ (all features shipped)
- Commit 5 PR9A-C plan files to docs/plans/ (historical record)
- Rebuild plugin bundle (main.js: 2172→49 lines, minified)
- Fix settings.ts type assertion
2026-07-09 00:39:39 +08:00
LLLin000
077c190b60 docs: update project management for PR9A-C embedding pipeline work 2026-07-09 00:30:50 +08:00
LLLin000
d94096f4d8 fix: plugin shows total chunks across all collections
Previously only showed paperforge_fulltext chunk_count (345).
Now sums chunk_count + body_chunk_count (14338) + object_chunk_count (5972).
2026-07-07 02:18:04 +08:00
LLLin000
1474c061a8 feat: surface drift state and invalidate maintenance cache 2026-07-05 16:52:17 +08:00
LLLin000
b585e42ab2 fix: 3 micro-patches from 9.4/10 review
1. show_in_base — separate hidden from maintenance vs hidden from both
2. Unified is_degraded check — done_degraded and health yellow/red
   share one entry point
3. Hash error_summary in manifest instead of raw string
4. Fix Promise.withResolvers for ES compat
2026-07-05 01:19:59 +08:00
LLLin000
0647c9be3f feat: PR C — Plugin maintenance tab UI + cache + action-first display
- i18n: 9 new maintenance_* keys (en + zh)
- ocr-maintenance-ui.ts: new types (DisplayAction, MaintenanceCache,
  MaintenanceDisplayRow) + cache read/write + refreshMaintenanceData
- settings.ts: _renderMaintenanceTab rewritten to action-first model
  (cache-first render, background manifest refresh, grouped tables
  with checkboxes, retry/rebuild/upgrade buttons)
- Backward compatible: old categorizeMaintenanceRow untouched
- 57 tests pass (6 files)
2026-07-05 01:13:47 +08:00
Research Assistant
48f486a434 Merge branch 'ocr-v2' 2026-06-29 02:03:23 +08:00
Research Assistant
38c463a814 feat: dashboard Start Working cleanup, pf-copy click indicator, collection header revert, time sorting 2026-06-26 20:35:13 +08:00
Research Assistant
0649f11679 feat: dashboard CSS polish + click-to-copy on title/paths 2026-06-26 00:46:37 +08:00
Research Assistant
b4152abe10 A2: check table ownership (consumed_table_block_keys) before _SKIPPED_BODY_ROLES in render loop
Moves the block_id fetch and consumed_table_block_keys check before
_SKIPPED_BODY_ROLES so table note removal is a contract-based decision
(ownership) not a role-based accident (footnote role).

Part of table ownership contract refactor.
2026-06-25 22:27:35 +08:00
Research Assistant
54e6d16666 Add pre-commit hooks (husky + lint-staged + prettier) 2026-06-25 16:42:34 +08:00
Research Assistant
5b830d3bfd fix: sort maintenance table by time descending 2026-06-24 01:19:45 +08:00
Research Assistant
9a19dc5850 fix: maintenance tab timezone, rebuild timestamp, title tooltip; UI: Vercel-inspired polish across all tabs 2026-06-24 01:08:20 +08:00
Research Assistant
404b1f35d1 fix: wire card action buttons in OCR maintenance Needs Attention section 2026-06-19 18:26:47 +08:00
Research Assistant
6dfa37ddb8 feat: style OCR maintenance summary layout 2026-06-19 18:16:34 +08:00
Research Assistant
31843d3ea7 chore: remove dead toolbar div from maintenance tab 2026-06-19 18:15:28 +08:00