Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
132 commits
Select commit Hold shift + click to select a range
139d5b6
feat(config): add memory_db path key for Memory Layer
May 12, 2026
772954f
feat(memory): add db.py with connection and path resolution
May 12, 2026
fb17c58
feat(memory): add schema module with table definitions and tests
May 12, 2026
f6bc234
feat(memory): add builder module that populates SQLite from formal-li…
May 12, 2026
afcbd3c
feat(memory): add query module for paper lookup and status check
May 12, 2026
3c906e8
feat(cli): add memory build/status and paper-status commands
May 12, 2026
65cbf86
test(memory): add integration test for memory build/status workflow
May 12, 2026
95ca8fc
style(memory): apply ruff fixes (ternary, nested-if, dict-keys)
May 12, 2026
339ffe2
feat(memory): add schema exports to __init__.py
May 12, 2026
02c1e5b
bump: 1.5.5 -> 1.5.6rc1 (Memory Layer RC1)
May 12, 2026
6c6b8ce
feat(frontmatter): add citation_key field and alias from BBT citationKey
May 12, 2026
5673f68
fix(memory): restore row.keys() iteration (sqlite3.Row iterates value…
May 12, 2026
1acbeaa
feat(memory): add FTS5 full-text search with paperforge search command
May 12, 2026
4bb750b
fix(memory): match FTS column names to papers table (authors_json, co…
May 12, 2026
eedf02c
docs(spec): add Memory Layer Phase 2-5 design (agent-context, dashboa…
May 12, 2026
5f7f2cd
docs(plan): add agent-context implementation plan
May 12, 2026
2b91e09
feat(memory): add agent context query module
May 12, 2026
551abd0
feat(cli): add agent-context command for agent bootstrap
May 12, 2026
3ee0320
test(memory): verify agent-context on test vault — 150 papers, 26 col…
May 12, 2026
d4df673
feat(memory): dashboard reads from SQLite + incremental refresh_paper()
May 12, 2026
4ffcd4c
docs(spec): add Phase 6 — paper_events, reading/working logs, vector …
May 12, 2026
99ab29b
feat(memory): add paper_events table + reading-log write/export command
May 12, 2026
babfe06
feat(skills): add /pf-log-reading and /pf-log-session slash commands
May 12, 2026
11be2b8
feat(skills): add literature-logging skill (reading-log + working-log)
May 12, 2026
fffc0c3
docs(spec): plugin settings redesign — tabbed UI, skill manager, feat…
May 12, 2026
2551eec
fix(spec): add DEFAULT_SETTINGS whitelist note, source: paperforge re…
May 12, 2026
9016a87
docs(spec): add Phase 7 vector retrieval — ChromaDB + local/API embed…
May 12, 2026
0d83278
feat(plugin): tabbed settings UI (Installation + Features) with skill…
May 12, 2026
3532b34
fix(plugin): single memory toggle + platform skill selector + vector …
May 12, 2026
053b303
fix(plugin): remove dead cascading keys, fix skill toggle content syn…
May 12, 2026
099fbed
fix(plugin): remove extra closing brace causing SyntaxError
May 12, 2026
442d22a
fix(plugin): use setText() instead of createEl text option for status…
May 12, 2026
cc4fd00
fix(plugin): don't render empty memory status div when Python not con…
May 12, 2026
a3c32a0
fix(plugin): async pip install with persistent notice + UTF-8 encodin…
May 12, 2026
2cae6c1
fix(plugin): guard python_path before pip install, show hint when Pyt…
May 12, 2026
10d9ef5
fix(plugin): use resolvePythonExecutable() everywhere instead of sett…
May 12, 2026
d90be02
fix(plugin): fix try/catch mismatches in vector deps + embed status b…
May 12, 2026
f9ac0cb
fix(plugin): repair brace mismatches from refactoring
May 12, 2026
9b3e844
chore: add pre-commit JS syntax hook + stage missing vector CLI files
May 12, 2026
eb88b82
fix(plugin): cache memory/vector status, add manual refresh, skip re-…
May 12, 2026
fb3bada
fix(plugin): reorder features tab — Skills first, then Memory Layer c…
May 12, 2026
670d3eb
fix(plugin): rename toggle to Easy Memory Layer with clarifying descr…
May 12, 2026
b1b1d50
feat(harness): add pf_search.py unified search entry + update bootstr…
May 12, 2026
2f77ad4
feat(harness): expand skill description triggers, add priority rules …
May 12, 2026
a9cf235
fix(skill): add source: paperforge to both skill frontmatter for syst…
May 12, 2026
2b52499
fix(plugin): wrap System/User Skills in dark gray box, add folder ico…
May 12, 2026
06b8db0
feat(skill): rename logging skill, natural language triggers, no /pf-…
May 12, 2026
2c79bf6
fix(skill): add routing table (reading vs working), clean up stale se…
May 12, 2026
c3f79e6
fix(skill): route '这段有什么值得记的' to reading branch
May 12, 2026
216bc65
fix(skill): remove ambiguous trigger '这段有什么值得记的' from logging skill
May 12, 2026
ceb4d8c
fix(plugin): remove Easy Memory Layer toggle, always-on status display
May 13, 2026
6cbcce8
docs(spec): log format validation, reading-log import/lookup, methodo…
May 13, 2026
73a9ad3
fix(skill): add strict reading-log template to logging SKILL.md
May 13, 2026
93ded8e
feat(skill): add methodology extraction skill (pure prompt)
May 13, 2026
12cb670
feat(cli): add reading-log --validate/--import/--lookup commands
May 13, 2026
f747c18
feat(cli): migrate dashboard to SQLite with file scan fallback
May 13, 2026
d8c9cc3
fix(cli): support multiline fields + bilingual labels in reading-log …
May 13, 2026
7b3326d
fix(skill): add language rule — field labels in English, content in u…
May 13, 2026
332558a
feat(plugin): auto-poll exports/ocr for seamless memory layer updates
May 13, 2026
d2c0c89
docs(spec): 10-point memory layer performance optimization
May 13, 2026
e91dfd8
perf: refresh_paper accepts entry dict, skip full index read
May 13, 2026
5ff3140
perf: fix FTS double-insert, drop trigger before bulk insert
May 13, 2026
748f32b
perf: autoSync runs sync not full build, 30s→120s poll, remove unused…
May 13, 2026
8babd36
perf: single frontmatter parse in _build_entry
May 13, 2026
2dd6b0d
refactor: extract build_paper_row to shared _columns module
May 13, 2026
7df1f38
perf: merge dashboard queries into single GROUP BY
May 13, 2026
b8d3daf
perf: executemany batching in builder + file read consolidation
May 13, 2026
8580f16
fix(plugin): replace async deps check with sync execSync, remove dead…
May 13, 2026
314dda5
fix(plugin): clean up debug logs, deps check working with resolvePyth…
May 13, 2026
6cb00c5
feat(plugin): add sync timestamp + spinner + manual sync button
May 13, 2026
076774d
feat(plugin): add collapsible toggle for System/User skill groups
May 13, 2026
bd34f7d
fix(plugin): skill collapse arrow direction + render into content div
May 13, 2026
108e2f7
fix(plugin): create header before content in skills collapsible
May 13, 2026
3b80770
fix(plugin): always-on scrollbar + stable collapse header positions
May 13, 2026
6983afd
fix(plugin): use CSS rotate for arrow instead of different unicode chars
May 13, 2026
7b31d21
feat(plugin): rewrite Vector DB section with state machine
May 13, 2026
df456fb
feat(plugin): live terminal output + model descriptions + uninstall m…
May 13, 2026
886049d
feat: vector auto-embed on OCR complete + Uninstall button cache dete…
May 13, 2026
3c55053
fix(plugin): preserve skills collapse state across tab/model re-renders
May 13, 2026
1d3b872
fix(plugin): improve skills spacing - group wrappers with even padding
May 13, 2026
a704807
fix: lighter terminal output box + cache embedding model across papers
May 13, 2026
2a78086
feat: HF mirror endpoint support for model downloads behind firewalls
May 13, 2026
48be9b6
fix(plugin): check model cache integrity not just directory existence
May 13, 2026
b011b44
feat(plugin): HF mirror dropdown with presets + custom endpoint
May 13, 2026
3fefccb
fix: Python no longer overrides HF_ENDPOINT from stale settings
May 13, 2026
b172ed1
feat(plugin): user skills collapsed by default
May 13, 2026
4964943
fix: extract _renderHfMirror method, remove orphaned module-level code
May 13, 2026
8bf9476
fix: store Text component ref instead of Setting for setValue
May 13, 2026
beda411
feat: huggingface_hub.set_endpoint() mirror + API base_url support
May 13, 2026
f718574
feat: urllib-based model download bypasses HF hub + HF_TOKEN field
May 13, 2026
9dc5ef3
feat: API model as text field (custom any name) + fix Python duplicate
May 13, 2026
5ae4f72
fix: add _renderApiConfig method, remove broken import() syntax
May 13, 2026
af3fbc9
fix: add openai to deps check + install cmd for API mode
May 13, 2026
a3f9886
feat(plugin): click terminal output to copy to clipboard
May 13, 2026
1d308e3
fix: pass API key/base/model as env vars to avoid saveSettings race
May 13, 2026
cd4fea2
debug: log API base_url to check env var passthrough
May 13, 2026
d89a627
fix: _getCurrentModelKey reads actual API model instead of hardcoded …
May 13, 2026
a52b1c7
fix: get_embed_status reads API model; defer display() after async st…
May 13, 2026
40ed946
feat(plugin): i18n descriptions for Skills/Memory/Vector + collapsibl…
May 13, 2026
c0059e6
i18n(plugin): translate all Feature tab UI strings to en/zh
May 13, 2026
6c86acf
fix(plugin): undeclared customText variable in _renderHfMirror
May 13, 2026
9c3a4d6
i18n(plugin): translate local model descriptions to en/zh
May 13, 2026
455c83d
fix(plugin): restore API settings + hide HF in API mode
May 13, 2026
caf7c10
i18n(plugin): translate all remaining Features tab strings to en/zh
May 13, 2026
eed4817
spec: dashboard copy interaction + per-paper metadata enhancement
May 13, 2026
6f6c1ae
spec: remove copy icon — clean click-to-copy with dashed underline only
May 13, 2026
b4632e3
fix(plugin): replace deprecated revealLeaf().setViewState with intern…
May 13, 2026
9af8bbf
fix(plugin): simplify file-explorer open to enable() call
May 13, 2026
d6960a7
fix(plugin): use getLeavesOfType + revealLeaf to focus existing file-…
May 13, 2026
97d9715
fix(plugin): open .base file directly instead of file-explorer + trim…
May 13, 2026
cfc0755
fix(plugin): fall back to global mode when Base domain has no matchin…
May 13, 2026
5493e28
feat: add reading_log and project_log tables to memory schema
May 14, 2026
0d1ca3a
feat: add permanent JSONL storage layer for reading-log and project-log
May 14, 2026
2631edb
fix: align JSONL field names with spec (type/title, add verified)
May 14, 2026
d16b6c7
feat: upgrade reading-log to JSONL with context/tags/project fields a…
May 14, 2026
b1aa222
feat: add paper-context CLI command for reading-log safety loop
May 14, 2026
06a3f2b
feat: add project-log CLI command with JSONL write + auto-render
May 14, 2026
5a44926
feat: import JSONL into DB on memory build
May 14, 2026
95bfb22
feat: add METHODOLOGY_COMPACT.md for agent guidance
May 14, 2026
df135bf
refactor: unify skills into paperforge compound skill (6 workflows)
May 14, 2026
5f07a8f
fix: reset nopdf OCR status to pending when paper re-enters queue
May 14, 2026
f248f81
refactor: unify reading-log reads to JSONL, deprecate paper_events wr…
May 14, 2026
9b0bc59
fix: bootstrap vault_config nest, python fallback with verified flag
May 14, 2026
054ca3e
feat: permanent correction-log.jsonl, fix original_id field alignment
May 14, 2026
002173f
feat: safe FTS search with token-quote and LIKE fallback
May 14, 2026
2c71643
fix: remove ghost settings code, add vector deps, add embed preflight
May 14, 2026
62cbb61
feat: retrieve empty index guard, embed status check, HF download hint
May 14, 2026
ce86eff
fix: dedupe correction import on rebuild, clean FTS row on refresh
May 14, 2026
888bbbb
fix: pf_bootstrap verified tuple return, engineering review dimensions
May 14, 2026
a76cb21
fix: import_reading_log to JSONL, correction JSONL-first, events.py w…
May 14, 2026
6643229
fix: refresh_paper FTS delete-before-upsert, import error checking
May 14, 2026
f054193
fix: update package-data from literature-qa to skills/paperforge/**
May 14, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
37 changes: 37 additions & 0 deletions .github/workflows/ci-chaos.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
name: Chaos Tests (L6)

on:
schedule:
# Weekly: Sunday 06:00 UTC
- cron: "0 6 * * 0"
workflow_dispatch:
# Manual trigger from GitHub UI

jobs:
chaos-tests:
name: Chaos / Destructive Tests
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v4

- uses: actions/setup-python@v5
with:
python-version: "3.11"

- name: Install package with test dependencies
run: |
pip install -e ".[test]"
pip install pytest pytest-timeout responses PyYAML

- name: Run chaos tests
run: |
python -m pytest tests/chaos/ -m chaos -v --tb=long --timeout=120 \
--junit-xml=chaos-results.xml

- name: Upload test results
if: always()
uses: actions/upload-artifact@v4
with:
name: chaos-test-results
path: chaos-results.xml
114 changes: 114 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,114 @@
# CI — Simplified Pipeline
# Runs on push/PR to master. All tests run (no -x early exit).

name: CI

on:
push:
branches: [main, master]
paths-ignore:
- "**.md"
- "docs/**"
pull_request:
branches: [main, master]

env:
PYTHONIOENCODING: utf-8

jobs:
# ---------------------------------------------------------------------------
# L0 — Version consistency check
# ---------------------------------------------------------------------------
version-check:
name: L0 — Version Sync
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: "3.11"
- name: Install package
run: pip install -e .
- name: Check version consistency
run: python scripts/check_version_sync.py

# ---------------------------------------------------------------------------
# L1 — Unit tests (3 OS x 1 Python)
# ---------------------------------------------------------------------------
unit-tests:
name: L1 — Unit Tests (${{ matrix.os }}, py3.11)
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, windows-latest, macos-latest]
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: "3.11"
- name: Install package with test deps
run: pip install -e ".[test]"
- name: Run unit tests
shell: bash
run: |
python -m pytest tests/ \
--ignore=tests/sandbox \
--ignore=tests/cli \
--ignore=tests/e2e \
--ignore=tests/journey \
--ignore=tests/chaos \
--ignore=tests/audit \
-v --tb=short --timeout=60

# ---------------------------------------------------------------------------
# L3 — Plugin tests (Vitest)
# ---------------------------------------------------------------------------
plugin-tests:
name: L3 — Plugin Tests
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 20
cache: "npm"
cache-dependency-path: paperforge/plugin/package-lock.json
- run: npm ci
working-directory: paperforge/plugin
- run: npx vitest run --reporter=verbose
working-directory: paperforge/plugin

# ---------------------------------------------------------------------------
# L4 — E2E + Audit
# ---------------------------------------------------------------------------
e2e-tests:
name: L4 — E2E + Audit
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: "3.11"
- name: Install package with test deps
run: pip install -e ".[test]"
- name: Run E2E tests
run: python -m pytest tests/e2e/ -m e2e -v --tb=short --timeout=120
- name: Run audit tests
run: python -m pytest tests/audit/ -m audit -v --tb=short --timeout=120

# ---------------------------------------------------------------------------
# Merge gate
# ---------------------------------------------------------------------------
alls-green:
name: All Checks Passed
if: always()
needs:
- unit-tests
- plugin-tests
runs-on: ubuntu-latest
steps:
- uses: re-actors/alls-green@v1.2.2
with:
allowed-skips: version-check
jobs: ${{ toJSON(needs) }}
42 changes: 42 additions & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
# Auto-release Obsidian plugin on tag push
# Triggered by tags like v1.4.18. Runs plugin tests, then creates a GitHub Release
# with the 4 required Obsidian plugin files.

name: Release

on:
push:
tags:
- "v*"

jobs:
release:
name: Release Plugin
runs-on: ubuntu-latest
permissions:
contents: write
steps:
- uses: actions/checkout@v4

- uses: actions/setup-node@v4
with:
node-version: 20
cache: "npm"
cache-dependency-path: paperforge/plugin/package-lock.json

- name: Run plugin tests
working-directory: paperforge/plugin
run: |
npm ci
npx vitest run --reporter=verbose

- name: Create Release
uses: softprops/action-gh-release@v2
with:
name: ${{ github.ref_name }}
generate_release_notes: true
files: |
paperforge/plugin/main.js
paperforge/plugin/styles.css
paperforge/plugin/manifest.json
paperforge/plugin/versions.json
Loading
Loading