Skip to content

Releases: grotyx/rag-obsidian

0.8.2

Choose a tag to compare

@github-actions github-actions released this 04 Oct 07:13

Changed

  • Korean summaries keep medical terms in English ("Degenerative spondylolisthesis 환자에서 decompression
    단독군과…"). In a blinded review, mistranslated terms were the most common summary error
    (cauda equina syndrome → a spinal-tumor syndrome, PACU → ICU); term accuracy rose 4.3 → 4.8 of 5.
  • MCP search_library reranks by default (pass rerank: false to skip) and reports reranked /
    rerankSkipped.

Added

  • A notice when reranking is skipped and why (OpenRouter's daily free-model cap, a rejected key, no
    credits, a missing model, a timeout) — before, results silently fell back to retrieval order.
  • search_findings flags restated findings — a quote reporting another study's result ("X et al.
    reported…", "[7]", "previous studies") — and ranks them below the paper's own results.

Changed

  • The search index no longer uses Orama at runtime. A compact BM25 index (index/textIndex.ts)
    that keeps postings and passage text in typed arrays replaces it, with identical rankings (unit
    parity against Orama; 30/30 identical top-10 on real queries). On a 106k-passage library the index
    takes ~45 MB of JavaScript heap instead of ~1.85 GB, loads in 4.7 s instead of 18 s, and searches in
    ~140 ms instead of ~240 ms — Obsidian's renderer has a fixed ~4.4 GB heap, which a large library
    (and especially a rebuild) had been exhausting.
  • Index rebuilds stream in 400-note windows instead of holding every passage and embedding until
    the end, and docs.json is written in pieces instead of one 150 MB string: a 19k-note rebuild had
    crashed the renderer; its heap peak is now 3.4 GB instead of 4.1 GB (of a ~4.4 GB cap).

Fixed

  • The search index no longer lives in the OS cache folder (Keep the search index outside the
    vault
    ): ~/Library/Caches / ~/.cache are emptied by cleaner apps and the OS, and the 0.5 GB index
    vanished, forcing a rebuild. It now lives in the app-data folder (~/Library/Application Support,
    ~/.local/share; unchanged on Windows), and an index found in the old place is moved once.

0.8.1

Choose a tag to compare

@github-actions github-actions released this 02 Oct 17:53

Added

  • Finding-level search — MCP tool search_findings: finds the relevant papers with the normal
    search, then returns their individual results (outcome, comparison, timepoint, n, effect size, CI,
    p, direction, and the verbatim quote), reranked against the question. Reads a note's
    ## Evidence (extracted) section (a collapsed callout of Dataview inline fields); the section is
    kept out of the search index, so it costs no memory. scripts/evidence-from-rag-research.mjs
    fills that section from rag_research extraction JSON (matched by PMID/DOI, verbatim quotes only).

Changed

  • Reranking scores the paper (title + abstract, one document per paper) over a 3× candidate pool
    instead of each passage over a 2× pool, and the default rerank model is now
    voyageai/rerank-2.5-lite (about $0.0002 a search). The free Nemotron model of 0.8.0 stops working
    after OpenRouter's daily free-tier cap (50 requests on a small balance) and then silently fell back
    to retrieval order; settings still on it move to the new default. Held-out nDCG@10: 0.76 → 0.81
    (English), 0.77 → 0.83 (Korean); a search is about a second faster.
  • The search vocabulary and MeSH synonyms load at startup instead of on the first search, and query
    embeddings are cached (first search ~7 s → ~4.5 s; a repeated question skips the embedding call).

Fixed

  • Chat kept no reranker at all when the hosted reranker was on but no OpenRouter key was set (Anthropic
    / Ollama users with Rerank chat results with the LLM); the LLM reranker now applies in that case.
  • The search vocabulary is picked up when its file is created or renamed onto the configured path,
    not only when edited.
  • A vocabulary edit during Build MeSH synonym list for search no longer drops the headings fetched
    so far.

0.8.0

Choose a tag to compare

@github-actions github-actions released this 01 Oct 20:58

Retrieval, measured. A 96-question held-out benchmark (English and Korean versions of each
question, LLM-judged pooled relevance) drove every default below; on a 16,578-reference library
nDCG@10 went from 0.53 to 0.78 for English questions and from 0.18 to 0.78 for Korean ones.

Added

  • Cross-encoder reranking (OpenRouter /rerank, free nvidia/llama-nemotron-rerank-vl-1b-v2
    by default) for the search pane and chat — the largest single gain (English nDCG@10 0.62 → 0.78),
    about one second per search. Replaces the LLM reranker when on; falls back to retrieval order on
    any failure. MCP search_library takes rerank: true to use it.
  • Translate non-English searches. A Korean question sat far from its English twin in embedding
    space (cosine ≈ 0.45), so the search pane and chat translate it to English with the chat model
    first (one short request, cached). MCP never calls the plugin's LLM; its tool description asks the
    agent to query in English.
  • Query expansion for the keyword half of every search: aliases from a user-owned search
    vocabulary
    (JSON in the vault; any language — this is how Korean terms reach English papers) and
    NLM MeSH entry terms for the library's common subject tags, built once with Build MeSH synonym
    list for search
    and cached in the plugin folder. The meaning half keeps the user's words.
  • Diversify results (maximal marginal relevance) as an option; off by default — it measured
    slightly worse here.
  • scripts/eval/: the benchmark runner, judge and scorer. Questions and judgments stay local
    (_eval/, git-ignored).

Changed

  • Search index memory: vectors live in one packed Float32Array instead of Orama documents —
    about 1.4 GB less JS heap on a 59,000-passage index (3.7 → 2.3 GB, plus 0.5 GB outside the heap),
    and local search 261 → 198 ms. The on-disk format is unchanged; no rebuild needed.
  • Score fusion: a keyword match only gets the vector half of its score when the embedding also
    ranks it among the top 500 passages (Orama's formula gave every keyword match a vector share).
    Measured better (English nDCG@10 0.55 → 0.63 with expansion).

0.7.9

Choose a tag to compare

@github-actions github-actions released this 30 Sep 03:05

Added

  • Citations in Live Preview. [@citekey] now shows as its styled label (superscript number,
    [1] or author–date) while you edit, the same as in reading view; put the cursor on it to edit
    the source. Turned off together with reading-view rendering by the existing setting.
  • Hover a citation in any view to see its authors, year, title and journal.
  • Choose citation style…: search about 10,000 journal styles by journal name. Picking one sets
    the open manuscript's csl: (or the default style when no manuscript is open). The style list is
    downloaded once from the Zotero style repository and cached for 30 days.
  • Check references in this manuscript: a report of every cited reference that is missing from
    the library, retracted (checked live against OpenAlex), without a DOI/PMID, or missing title,
    authors, year, journal, volume or pages.
  • Import straight from Zotero 7: Import references → From Zotero reads the whole library or
    one collection from a running Zotero (enable Allow other applications on this computer to
    communicate with Zotero
    in Zotero's advanced settings). Duplicates are skipped as with files.

Changed

  • The MCP Stop server button no longer uses the deprecated setWarning() (same look on every
    supported Obsidian version).

0.7.8

Choose a tag to compare

@github-actions github-actions released this 27 Sep 09:03

Added

  • User guide in English, Korean, Chinese, Japanese and Spanish (docs/manual/), with numbered screenshots from the
    real plugin, linked from both READMEs. scripts/manual/capture.py <lang> reshoots the
    screenshots by driving Obsidian, so the guide can follow UI changes and new languages.

Fixed

  • Citation styles renamed in the CSL repository resolve again: csl: vancouver (now
    nlm-citation-sequence) used to fail and fall back to APA. Unknown ids are looked up in the
    repository's renamed-styles.json.
  • Reading view re-renders a note's citations when its csl: style or numbering changes;
    paragraphs whose text had not changed kept their old labels until the note was reopened.
  • Superscript styles (Spine, AMA) keep superscript citations through Compile manuscript
    (text<sup>1</sup>, with no space before the number) and Export to Word; the compiled copy
    showed "text 1" and the Word file lost the superscript.

0.7.7

Choose a tag to compare

@github-actions github-actions released this 23 Sep 18:46

Fixed

  • PDF highlights: a highlight with a malformed quad point no longer drops its text — the
    annotation's own rectangle is added whenever any quad is unusable, not only when all are.
  • PubMed titles: entities are decoded — "&" stayed escaped. Decoding runs once, first, so
    entity-escaped markup (&lt;i&gt;) is stripped like real markup and &amp;lt; stays "<";
    numeric entities (&#x3b2;) decode too, through the same helper citeproc output uses.
  • Settings text fields keep what you type, spaces included: clearing "References folder",
    "Ollama URL" or "OpenAI base URL" to retype it no longer snaps back to the default mid-edit, and
    the empty field shows the default as its placeholder. One helper, effective(), trims the value
    and applies the default (OpenRouter's base URL, not api.openai.com) wherever it is used.
  • OpenAI base URL / API key and Ollama URL show whenever either the embedding provider or the
    chat LLM uses them — with embeddings on Ollama and chat on OpenRouter the key field was hidden.
  • Custom summary language no longer hides itself while you type (typing "en" made it vanish).
  • Abstracts and titles: tag stripping keeps comparators ("grade IV", "ASA <I and

    III") and still removes any real tag — JATS (<jats:p>), MathML (<mi>), <scp>, and tags
    with attributes. A tag is a name followed by > or by attr="value" pairs.

  • Settings search on 1.13+: every row is declared once with a visible rule, so a row shows
    up in search as soon as it applies (e.g. "Ollama URL" right after switching the provider). The
    definitions are now type-checked against Obsidian's own SettingDefinitionItem (no cast).
  • Ollama embeddings are validated with the same isNumberArray check as the OpenAI path.

Changed

  • Release workflow split: a read-only build job runs npm ci, lint, build and tests; only
    the publish job holds write, OIDC and attestation permissions, and it signs the artifact the
    build produced. Code from a dependency no longer runs with a token that can create releases or
    request a signing token; the attestation still only proves which workflow and commit built the
    files.
  • The 0.7 talk ships as a narrated video (presentation/v07/video/): MiniMax Speech 2.8 HD via
    OpenRouter, every sentence transcribed back and checked against the script, deck frames
    rendered exactly, captions and chapters for YouTube.

0.7.6

Choose a tag to compare

@github-actions github-actions released this 23 Sep 17:33

Changed

  • Settings are searchable on Obsidian 1.13+. The settings tab is described once as
    declarative definitions (getSettingDefinitions()), which 1.13+ renders and indexes for its
    settings search ("Contact e-mail", "OpenRouter", "API key" now find the plugin). On 1.11.4–1.12
    display() draws the same definitions with the older Setting API, so there is one source of
    truth. Password fields and multi-button rows (MCP, CLI test) use the definitions' render rows.
  • One PubMed record mapping. Add-by-PMID and PubMed search shared a copy-pasted esummary →
    CSL conversion that had drifted; both now use esummaryToItem. Titles have HTML tags stripped
    in search results too, PMCID is set in both paths, and the first DOI/PMC article id wins.
  • CI on Windows, macOS and Linux (.github/workflows/ci.yml): lint, build, unit and MCP
    tests on every push, including a real .cmd spawn test for the CLI providers on Windows.

Fixed

  • MCP on Windows: the bridge resolved the vault with the JS realpathSync, the plugin with
    native realpath; on Windows only the native one expands 8.3 short names (RUNNER~1), so the
    two sides hashed different paths and the bridge never found the server. Both use native now.
    Found by the new Windows CI job.

0.7.5

Choose a tag to compare

@github-actions github-actions released this 23 Sep 16:45

Changed

  • child_process is required directly again in the Codex/OpenCode CLI provider and the Word
    export. Routing it through the shared nodeRequire helper in 0.7.4 hid it from the Community
    review's static scan, so the review stopped reporting that the plugin runs external programs.
    It does (only when those features are used, and the README says so); the scan should see it.
  • Embedding vectors and PDF highlight rectangles are checked with an isNumberArray type guard
    instead of a cast.

0.7.4

Choose a tag to compare

@github-actions github-actions released this 23 Sep 15:49

Answers the Community directory's automated review of 0.7.3.

Changed

  • Type-checks without @types/node. The review lints without Node's type definitions, so
    every typeof import("node:…") in the desktop-only files (local index cache, Codex/OpenCode
    CLI, MCP bridge and server, Word export) became an unresolved type and hundreds of
    type-safety warnings. Those files now use small local interfaces for exactly the Node APIs
    they call (src/util/nodeTypes.ts), and tsconfig.json sets "types": [] so the local lint
    sees what the review sees. Runtime code is unchanged.
  • Releases are built, attested and published by GitHub Actions when an X.Y.Z tag is
    pushed (.github/workflows/release.yml), so main.js, manifest.json and styles.css carry
    build-provenance attestations.
  • Dropped the unused js-yaml and @orama/plugin-data-persistence dependencies.

Fixed

  • A CLI process error always rejects with an Error.

0.7.3

Choose a tag to compare

@grotyx grotyx released this 23 Sep 14:38

Answers the Obsidian Community directory's automated review.

  • Minimum Obsidian version is now 1.11.4. API keys are kept in secretStorage, which arrived in 1.11.4; using it under an older minAppVersion was the review's one error.
  • LICENSE is the plain MIT text so it is recognized; the CC BY-SA 3.0 note for the bundled CSL styles moved to THIRD_PARTY_NOTICES.md.
  • Dev-only: builtin-modules → node:module, js-yaml → yaml in tests.
  • Fixes: numeric tags and PMIDs from unquoted YAML, Ollama embedding validation, PDF highlight boxes from malformed points, UI text that quotes other labels.

Lint at the review's severity: 0 errors, 2 warnings (both ask for Obsidian 1.13 APIs: declarative settings and setDestructive).

Full details in CHANGELOG.md.