Repository navigation
Releases: johnfkoo951/cmds-zotero
Release list
0.6.7
Settings that look on are on.
- Switches and menus in Settings are saved as soon as they change. Before, every change waited for Save configuration, which on Obsidian 1.13 and later sits apart from the setting in the settings search. A switch such as Run pandoc after export could look on while the stored setting stayed off, so both export commands still only copied the pandoc command, and the switch was off again after the plugin or Obsidian restarted. Typed values (paths, addresses, styles, lists) still take effect after Save configuration, which checks them first. A save refused while the index refreshes is shown under its row; Save configuration tries again.
- The README and the guides link the Korean docs site, https://zotero.cmdspace.work. The Hookmark disclosure and the note in Connected vaults say that bookmarks are made only by the opt-in Link exports in Hookmark.
0.6.6
A Word hand-off that keeps the citations Zotero's, and export kits that can live outside the vault, run pandoc and link to the note in Hookmark (those three are opt-in and off by default). Verified on macOS with pandoc 3.9 and Word for Mac; the Windows paths are covered by tests, not live-tested.
- New command Export Word kit with live Zotero citations for current note. It writes
<note> (Word)in Export kit folder: the cleaned copy, a pandoc defaults file and a small Lua filter. Run the copied command while Zotero is open; Better BibTeX'szotero.luaturns each[@citekey]into a Zotero field, and the kit's filter adds whatzotero.lualeaves out for.docx: Zotero's document preferences (the note's style and locale, footnotes for a note style), footnotes for the citations of a note style, and a bibliography field where the references section was (a note without one gets it at the end, under the first References headings entry). In Word one Refresh in the Zotero tab formats everything, without the Document Preferences dialog. The note's style must be installed in Zotero. The copy keeps only the frontmatter fields meant for the document (title, author, date, abstract, keywords, lang and a few more); pandoc would store the others, such as tags or session links, as document properties that travel with the file. Seedocs/pandoc-docx.md§0b. - Export pandoc kit for current note: the copy keeps only the frontmatter fields meant for the document (title, author, date, abstract, keywords, lang and a few more) plus the ones citeproc reads (
csl,reference-section-title,link-citations…), with wikilinked names written as names. Before, the whole frontmatter went in, and pandoc stored every field the.docxhas no slot for (tags,description, vault categories, session links) as a document property that travels with the file. The report lists the fields left out. The kit also writescmds-zotero-docx.lua, run after citeproc, which removes the citeproc settings so the.docxno longer keeps the CSL file's path under your home folder as a property;defaults.yamlnow listsfilters: [citeproc, …]instead ofciteproc: true. - Export kits outside the vault, pandoc from Obsidian and Hookmark links, three settings that are all off by default. Allow export kits outside the vault lets Export kit folder be an absolute folder or one under
~/(for example~/Documents/CMDS Zotero exports), so Word files, filters and copies stay out of the vault; without it the folder must be a vault folder. Run pandoc after export makes both export commands run pandoc on the kit and open the.docx(the Word kit only while Zotero answers), listing citekeys Zotero did not find; Pandoc path names the pandoc to run. Link exports in Hookmark (macOS) hooks the.docxand the note together in Hookmark. The README's disclosures name the folder, the processes and the version checkzotero.luamakes. - Diagnose setup has a citation completion check: it reports when another plugin's completion answers
[@before the plugin's citation list (Various Complements without[among its "First characters to disable suggestions", Pandoc Reference List with its citekey autocomplete on) and which setting to change. It reads their settings only. - Windows: the Word kit looks for
zotero.luain%APPDATA%\pandoc\filtersand shows a PowerShell install line; copied pandoc commands use double quotes; Run pandoc after export also looks in pandoc's Windows install folders. A missing Hookmark is reported as such. - Installed styles now record their citation format, class and whether they have a bibliography (read from the same
.cslfiles). docs/pandoc-docx.md:lang: ko-KRis for bibliographies that should read in Korean; a Korean manuscript with English-style references keepsen-US, becauseko-KRalso writes the role terms ("편집자:", "번역자:") in Korean.
0.6.5
A neutral default for the index. Nothing changes for an install that has saved its settings.
- New installs build the index at
References/Zotero/zotero-index.json, next to the default literature-note folder, instead of80. References/zotero-index.jsonat the vault root (a numbered folder from the author's own vault). - Settings that never stored an Index path keep an index that already exists at
80. References/zotero-index.json: the plugin saves that path in its settings once, so the index never moves later (the agent CLI's offline mode applies the same rule). In a vault kept in Git that ignores/80. References/zotero-index.json, a fresh clone has no index yet; ignore/References/Zotero/zotero-index.jsonas well, or save the old path in Settings on the machine that has the index. - Batch updates no longer read files that are not notes inside the output folder, so an index refresh during a batch (the index now lives there by default) cannot fail a note.
0.6.4
Ready for the Obsidian Community directory. No setting, command ID or note format changes.
- Choose an installed style (Settings → Bibliography and references) now shows the picked style in the Bibliography style field on Obsidian 1.13 and later. Before, Save stored the new style but the field kept showing the old one. On the same versions the settings tab now starts from the stored settings each time it opens: a style saved by Choose bibliography style from installed styles while settings were closed is no longer overwritten by the next Save (since 0.6.2).
- Check citations in current note, Copy bibliography for current note, Insert or update references section, Export pandoc kit for current note, Copy CSL-JSON for cited sources and Write pandoc bibliography sidecar for current note are offered only while a Markdown note is open, instead of failing with "Open a Markdown note first".
- Update, rebuild, adopt and the frontmatter patches of the current note, Insert or update references section and Export pandoc kit save the note's open editor before reading it, so the preview includes what you just typed.
- The references sidebar drops a pending refresh when it closes, and a failing cross-vault note-map update shows its notice once per index instead of after every pause in typing.
- The Image folder description says it also receives images of image annotations inserted as callouts from the annotations sidebar.
- README: install from Settings → Community plugins. The disclosures now name every file read outside the vault (Zotero's
stylesfolder for the installed CSL styles; annotation images, which are also copied when you insert an image annotation as a callout) and say that the plugin writes nothing outside it, when the read-onlygitcheck runs, that only loopback Better BibTeX endpoints are accepted, what theobsidian://cmds-zoterolink opens, and that the repository scripts are not part of the plugin. - The committed agent-CLI core (
scripts/ingest-core.mjs, not part of the installed plugin) carries the license notice of theyamlpackage it bundles.
0.6.3
Importing and updating at scale: notes found wherever they moved, file-name patterns, batches by search with a review list, adopting notes from other plugins, and per-note repairs. Zotero stays read-only and every change to an existing note is previewed and backed up first. With the default settings new notes keep 0.6.2's names and folders. Two things behave differently: Update all owned literature notes first shows a review list, and literature notes you moved out of the literature folder that still carry their CMDS identity are now updated where they are.
Finding and naming notes:
- Literature notes moved or renamed anywhere in the vault are found by their identity (
zoteroIDand the plugin's owner marker) and updated where they are, instead of being imported again. Paper hubs that name the item do not count. Diagnose setup lists literature notes outside the output folder. - New-note file name and subfolder (Settings → Literature notes) from fixed tokens
{citekey},{title},{shortTitle},{year},{firstAuthor},{itemType}and{collection}, sanitised and length-limited; the import preview shows the resulting path. The defaults keep@citekeyin the output folder, and existing notes keep their names. These are fixed tokens, not templates. - New commands: Open or import literature note, Update current literature note.
Updates and batches:
- The update preview lets you choose which parts to refresh (title and abstract, bibliography entry, metadata and links, Zotero notes, annotations); the rest stays byte for byte.
- Update all owned literature notes, the new Import literature notes by search (
col:,tag:and the other picker fields; new notes only, with progress and Cancel) and Adopt existing literature notes first show a review list with what happens to each note and a box per row. Nothing is read from Zotero or written before Apply. - New command Update literature notes changed in Zotero: lists only notes whose item or annotations changed (dates from the saved index, so refresh it first) since the note was last written or since a date you choose; an unknown date is never treated as unchanged.
- Notes synced by Zotero Better Notes are skipped by batch updates and get a warning in single updates.
Adopting and repairing notes:
- Adopt current note as literature note (and Adopt existing literature notes for every matching note in the vault, after the review list): notes made by Zotero Integration, ZotLit or named by citekey are matched by citekey, DOI or Zotero link (several matching items are offered to choose from; a DOI-only match is unticked), get the missing identity keys line by line and the generated sections appended below your text, with a backup. Paper hubs and analyses, Raw Sources, Bookends and Better Notes notes, and notes CMDS already owns are refused.
- Rebuild current literature note: after a backup, re-renders the generated sections and repairs damaged, duplicate and missing markers. Every line you wrote stays; an edited or detached duplicate keeps its text.
- Per-note previewed frontmatter patches with backup and checks before, during and after the write: Refresh frontmatter of current note from Zotero (only the plugin's metadata keys the note already has; never
zoteroIDortags), Remove legacy keys from current note (the keys 0.3 and 0.4 wrote; Report notes with legacy Zotero keys lists them vault-wide without changing anything), and Relink current note to merged Zotero item (when Zotero merged the item; only with a complete index, several candidates go to a chooser).
0.6.2
A citation editor, bibliographies in Zotero's installed styles and a pandoc export kit. Zotero stays read-only, nothing leaves your computer and the plugin runs no other program. Two defaults change what you see: citekey problems are underlined in the editor (Settings → Citations), and Copy bibliography keeps the style's own order (Bibliography order: citation restores 0.6.1's order). Literature notes and managed section IDs are unchanged.
Citations:
- The
[@suggester finds Korean in composed or decomposed form and ignores accents (é matches e). Shift+Enter inserts a narrative@key, Mod+Enter a link to the literature note. - Citations join the one at the cursor: typing
[@right after[@a], or citing from Zotero's picker, the Zotero selection or the literature picker, gives[@a; @b]without repeating keys. - Pandoc prefixes, locators and suffixes are understood (
[see @key, pp. 33–35; also -@k2, ch. 1]). New command Edit citation locator. - Named citation formats (pandoc, narrative,
[[@key]], author-date text, Zotero link, literature-note link), each with an insert command, plus a default format. These are fixed formats, not templates. - Citekeys the index does not have, that several items carry, or that are a former key are underlined (Settings → Citations → Mark citekey problems). Nothing is marked before the index loads, and an incomplete index never marks a key as unknown.
- Optional hover card (title, authors, year, bibliography entry) and an optional author-date display such as "(Kim & Lee, 2020, p. 3)" in reading view and live preview. Both are off by default and never change the note text.
- Mod+click on a citation can open its literature note or its PDF (off by default). Right-click entries act on the clicked citation, not the cursor.
- New commands: Citation actions at cursor, Open literature note for citation at cursor (offers the import preview when there is no note), Open PDF at citation locator (the locator's page label is matched to Zotero's page labels when the index knows them; the Notice says how the page was found), Copy PDF page link for citation at cursor, Fix renamed citekey in this note (previewed, this note's body only, one undo step).
- A citekey that several items carry now asks which item instead of failing.
- Opt-in: pasting or dropping Zotero item links (
zotero://select/…) inserts a citation, matched by library and item key; links the index does not know are pasted as they are.
Bibliography, references and export:
- Bibliography style from Zotero's installed styles (Settings → Choose an installed style, or the command Choose bibliography style from installed styles): Zotero's
stylesfolder is listed read-only, and a style Better BibTeX cannot render is refused with the reason. Changing the style or locale by hand is checked the same way on Save. - Bibliography locale (for example
de-DEorko-KR; empty keeps the style's default). A note'scslandlangfrontmatter set the style and locale for that note, its references sidebar, Insert bibliography and the export kit. - Copy bibliography for current note puts formatted (HTML) and plain text on the clipboard, so it pastes formatted into word processors, and keeps the style's own order (Bibliography order: style, first citation or alphabetical).
- The references sidebar follows pandoc: citations in code, HTML comments and
%%comments,\@and e-mail addresses are not counted;-@keyandnocitekeys are. Each row can jump to the previous or next occurrence; palette commands do the same for the citation at the cursor. - New command Check citations in current note: unknown, ambiguous and former keys, keys without a literature note, and nocite keys, from the saved index; each occurrence opens in the note.
- New command Insert or update references section: an opt-in, previewed, plugin-owned block at the end of the note (its own markers; the note is backed up before the first insert). An edited block is kept as it is, a detached one is never updated.
- New command Export pandoc kit for current note: a cleaned copy (literature links become
[@key], callouts become blockquotes, comments and markers removed), the cited CSL-JSON, a pandoc defaults file and the command line on the clipboard, in Export kit folder (defaultCMDS Zotero exports). The plugin never runs pandoc, and an earlier kit you changed is never overwritten. Seedocs/pandoc-docx.md.
Other:
- The README's privacy section now also names the agent
pdf-textaction's reads of Zotero's PDFs and the read of each peer vault's plugin list; pruning old index backups no longer logs to the console.
0.6.1
Literature notes you can shape, a much richer annotations sidebar, fielded search and the Zotero selection on demand. Zotero stays read-only and nothing leaves your computer. With the default settings, existing literature notes render as 0.6.0 wrote them, with one exception: tags listed in Excluded tags are now also left out of annotation tags. Managed section IDs are unchanged.
Literature notes:
- Note layout settings: switch the abstract, bibliography entry, metadata fields, links, Zotero notes and the Synthesis scaffold on or off, rename the callout types, set the Synthesis lines and the annotations heading (not Notes, Zotero notes or Synthesis, which the note already uses; new annotation blocks only go under a heading below the generated sections). A switched-off part keeps its place as an empty generated block; with the defaults, notes come out as 0.6.0 wrote them, except that excluded tags are now also left out of annotation tags (see below).
- Theme hooks: styles.css declares CSS variables for the highlight colours (also used by
<mark>backgrounds, lighter in dark themes), status and row-state colours and sidebar card spacing, for themes and snippets to override. - Fields by item type (Note layout, off by default): the metadata callout lists the fields of the item's type (university and thesis type for a thesis, institution and report number for a report, proceedings and conference for a conference paper, website for a web page, repository and archive ID for a preprint, and so on), plus the raw date, short title, language, access date,
key: valuelines of Extra and the dates the item was added and modified. Unedited metadata blocks refresh on the next update; edited ones stay. - Zotero rich text (Note layout, off by default): item titles and annotation texts and comments read as Markdown:
<i>/<em>become italics,<b>/<strong>bold,<sup>/<sub>stay superscript/subscript,nocaseand small-caps spans keep their text and<br>breaks the line. Other or unpaired tags are still shown literally; DOIs, URLs, citekeys, tags and the frontmatter keep Zotero's text. The annotation sidebar always shows the text without the tags. When switched on, unedited blocks pick up the new rendering on the next update; off, notes keep the escaped tags as before. - An image annotation whose image is not in Zotero's cache is now written as an
[!Image]callout that says so and links to it in Zotero (with its comment and tags), instead of an empty highlight. The annotation sidebar shows the same text. Unedited blocks refresh on the next update. - Join continued highlights (Note layout, off by default): a highlight whose Zotero comment starts with
+is added to the highlight before it in the same attachment, so a passage split across a column or page reads as one block (p. 3–4, texts joined with…, comments without the+, tags merged). The block keeps the first highlight's ID; a continuation's existing block is kept as it is (the update preview says it was joined into the previous highlight; delete it by hand if you like), and the recently read list and the agentrecentaction count a joined continuation as in the note. Image annotations are never joined, and the annotation sidebar marks continuations. - Annotation tags (Note layout): choose Obsidian tags to write an annotation's Zotero tags as
Tags: #method #self-efficacy, with the same slugs as the frontmattertags(spaces become-, Korean and other letters are kept), so they show up in the tag pane and in search. The excluded tags (defaultobscite) are now also left out of annotation tags, in the note and in the annotation sidebar. The default keeps Zotero's text; unedited annotation blocks refresh on the next update. - New command Insert item content from Zotero: for the citekey under the cursor (or a picked item), insert its Zotero notes (all or one), bibliography entry, metadata fields, abstract, links or annotations into the current note, rendered exactly like the literature note's parts. The item is read fresh from Zotero, or from the saved index when Zotero is not running. The inserted text is yours (no generated-section markers). With a selection, a line-by-line preview is shown first and only the selection is replaced.
Annotations sidebar and PDFs:
- Annotations sidebar: colour chips with counts, a filter menu (type, tag, attachment, with or without comment), Clear, and sort (page, reading order, last modified, colour) and grouping (attachment, page, colour) controls. Filters only show or hide cards that are already built; Korean text matches in composed and decomposed forms.
- Annotations sidebar modes: follow the active note, the item selected in Zotero (read when you ask, never by a listener), the citekey at the cursor, or a pinned item. The mode, pinned item, filters, sort and grouping are restored with the workspace. A source with nothing to show is explained in place. New commands: follow the active note, show the item selected in Zotero, follow the citekey at the cursor, pin the shown item, pin an item, unpin.
- Annotations sidebar: Fetch latest (button and command) reads the shown item from Zotero once and shows its current annotations until the index changes; the header says "Live from Zotero · HH:MM" or the saved snapshot's age. The saved index is not rewritten, the sidebar still opens from the snapshot without waiting for Zotero, and a failed read keeps the snapshot with a Notice saying why.
- Annotation cards: a More actions menu (also on right-click) to copy the annotation as a citation (
[@citekey, p. label], optionally with its Zotero link), copy the callout, the bibliography entry, the annotation or item key (<libraryID>:<key>in group libraries) or the rename-safe identity link, and to show the annotation's data read-only. The same actions are palette commands for the card last clicked in the sidebar. - Opening a PDF without asking for a page (the item actions' Open PDF, the references sidebar's Open PDF, and identity links to a PDF without a page) now opens it where you stopped reading in Zotero instead of on page 1. Open source PDF at page, page links and annotation links keep their page.
- Search annotations (command): searches every indexed annotation by text, comment, tag, page, colour, citekey or title (word by word; Korean matches in composed and decomposed forms) without asking Zotero; the box shows the snapshot's age. Enter inserts the callout, Shift+Enter a quote ending in
[@citekey, p. label]with its Zotero link, Mod+Enter only the link, Alt+Enter pins the item in the annotations sidebar. Image and ink annotations insert links in the quote format. - Annotations sidebar: drag a card into a note to insert its callout at the drop point. In other apps and editors the plain-text drop is the same callout. Dropped in a note, and with Insert at cursor or Search annotations, an image annotation's image is first copied to the image folder under the same content-hashed name the import uses (a new file only; an existing file with other content is refused, and a failed copy inserts a link with a Notice).
- Annotations sidebar can follow the Zotero selection automatically (Settings → Annotations → Follow the Zotero selection; off by default): it reads the item selected in Zotero when Obsidian's window gets focus, or also every 3–30 seconds while the sidebar is visible and follows the selection. It polls Better BibTeX (there is no listener); an unchanged selection does nothing, an empty one keeps the shown item, several items are explained in place, and a failed read pauses following for a minute without a Notice or a status-bar change. Zotero's open reader tab, page and selected annotation are not available this way.
- Everything the annotations sidebar and Search annotations insert, copy or drag matches the note: with Join continued highlights a card inserts the joined passage, quotes are escaped like the note (and read Zotero rich text only when the note does), and excluded tags appear in no card, filter or search.
Library, Zotero selection and setup:
- Fielded search in the literature pickers (Search literature, Import literature note, Insert bibliography, Find notes citing a source and the other picker commands):
author:,title:,year:2019-2021(also2019-and-2021),tag:,col:<collection path>(subcollections included),lib:<library name or ID>,type:<item type>andhas:pdf|note|annotations, each negatable with a leading-; quote values with spaces (col:"Thesis/Related work"). Unknown fields stay plain text, and plain text ranks exactly as before. The[@citekey suggester honours the same field prefixes (one term, no spaces). - Clicking the status-bar item now opens a menu instead of only testing the connection: Test Better BibTeX connection, Refresh citekey index (disabled while a refresh runs or the legacy plugin is enabled), Diagnose index and links, Open references sidebar, Open annotations sidebar, Open settings and Copy status JSON. Opening the menu never contacts Better BibTeX; the tooltip names what needs attention (no index, stale index, legacy plugin, failed call).
- New command Diagnose setup (also in the status-bar menu): a report-only setup doctor that checks Zotero and Better BibTeX versions, the legacy plugin, the index, Git exposure of the index and cache, whether Obsidian's PDF library loads, whether other registered vaults' note maps can be read, and notes in the literature folder that belong to no entry or carry Better Notes sync frontmatter. Rows that name notes open them; Copy report copies a plain-text report with vault-relative paths and a summary of this session's last 50 Better BibTeX calls (kept in memory only). Nothing is fixed automatically.
- New commands Open Zotero selection, Import Zotero selection and Cite Zotero selection read the items selected in Zotero's library pane when you run them (no listener, no polling). One item opens its...
0.6.0
Faster, sturdier and easier to set up, with two new agent actions. Zotero stays read-only, nothing leaves your computer, and managed section IDs are unchanged, so existing notes update in place. Feature decisions against the other Zotero plugins are recorded in docs/plugin-landscape-2026-10.md. More absorbed features follow in 0.6.x.
Performance:
- Refreshes do less work. Each index entry is checked and hashed once instead of up to eight times, roughly halving refresh time on large libraries. The plugin keeps a fingerprint of the saved index instead of a second copy in memory (about 78–244 MB less for a 20,000-item library). Attachments and annotations are read in batches of Refresh requests (new setting) at a time, so Zotero works on exactly that many reads at once.
- Obsidian starts without a pause from CMDS Zotero. The saved index loads once the workspace is ready, at an idle moment, and large indexes are checked in small steps instead of one long block. A stale index is refreshed about 30 seconds after startup instead of during it; a missing index and the "Refresh citekey index" command are never delayed.
- Editing stays light. Citekey completion, the References and Annotations sidebars and the cross-vault note map reuse per-index lookups instead of rebuilding them after every edit. The note map re-checks only the notes that changed and is written only when a literature note appears, moves, disappears or changes its Zotero identity. The annotation filter no longer rebuilds the sidebar on every keystroke, and long lines no longer slow the citation scanner.
- Batches scale. "Update all owned literature notes" and "Send recently read papers to notes" read the literature folder once per batch instead of once per note, read the next notes from Zotero a few at a time while writing one by one, and show a progress notice with a Cancel button. Cancel stops before the next note, never in the middle of a write, and the report lists the notes that were not run. A second update-all run is refused while one is running.
- The References sidebar is quieter. While Zotero is not answering, editing a note no longer makes the sidebar try to reach Zotero on every change; it shows the saved text until you press Refresh or the retry pause ends. Refresh now renders the list and fetches its text again instead of rebuilding the whole index (the "Refresh citekey index" command still does that). The sidebar has its own icon.
- "Find notes citing a source" reads up to eight notes at a time; the results and their order are unchanged. The literature picker lists recently read papers first without scanning the whole index for each one.
- "Recently read" finds the day of each read with a handful of Zotero searches instead of one search per day, and double-checks each day with an exact-day search.
A sturdier Zotero connection:
- "Insert citation from Zotero" waits for you. The picker has its own wait (Picker wait, 10 minutes by default) instead of failing after the 20-second request timeout. A notice with a Cancel button shows while it is open, and a slow or cancelled pick no longer marks Zotero as failed in the status bar. A closed Zotero is reported at once, and a Zotero that is still starting says so. If the note changed while the picker was open, the citation is copied to the clipboard instead of being written into another note.
- Renamed citation keys import again. Better BibTeX's error replies are now read correctly, so an import follows an item whose citation key changed in Zotero instead of failing.
- One bad item no longer stops a refresh. Duplicate citation keys inside a library, a missing citation key or an item that cannot be exported are skipped with a diagnostic and keep their previous entry; the index is marked incomplete so nothing claims a complete answer. Feeds never enter the index, and two libraries with the same name no longer stop a refresh. Diagnostics lists every library with its item counts and reports libraries that are empty or could not be indexed.
- EPUB and web-snapshot annotations are indexed instead of making the whole item's attachments unavailable; their links select the attachment in Zotero, and PDF links stay as they were.
- Collections and retractions. The index records collection membership ("Parent/Child" paths) and Zotero's own retraction flags; a retracted source shows a warning in Diagnostics. These are new optional index fields: 0.5 readers ignore them.
- On a Zotero older than 10, "Recently read" and the agent
recentaction say that Zotero 10 is needed (zotero-too-old) instead of reporting Better BibTeX as unreachable.
Settings:
- Every stored setting has a control. New: Citation trigger (Bracket
[@/ At sign[@or a bare@/ Off), Excluded tags (one per line, case-insensitive), Heading highlight color (None or a Zotero color) and References sidebar follows the active note; before, these four could only be changed indata.json. New keys: Refresh requests (collectConcurrency, 1–8, default 4; a 0.5 settings file keeps its Parallel requests value, so a lowered limit still protects a slow Zotero) and Picker wait (pickerWaitSeconds, 30–1800 s). Other keys and defaults are unchanged. - A clearer settings tab. Areas have their own sections (Connection, Literature index, Citations, Literature notes, Annotations, Bibliography and references, Recently read, Connected vaults); request limits and the agent-only References headings sit under a collapsed Advanced heading. Values are checked as you type, and Save stays blocked until the problems are fixed. On Obsidian 1.13 and later the rows appear in Obsidian's settings search. Parallel requests and References headings now describe what they actually control.
- Test connection reports a closed Zotero in words instead of a script error.
Agent CLI (contract 2, additive; an older plugin answers plugin-too-old):
- New action
annotations. A paper's annotations for digests, grouped by attachment in Zotero's reading order, with color, page and printed label, text, comment, tags and an open-pdf link; filters--color,--type,--tagand--attachment. It answers from the saved index (offline too);--freshreads Zotero now and--todaypicks the one paper Zotero opened today (a Zotero older than 10 answerszotero-too-old). - New action
citing. The notes that cite a paper under its current or a former citekey, with line, column and excerpt for every body citation and frontmatter citations listed apart; a citekey another item also carries is reported instead of guessed, and when no key is left the answer says nothing was scanned (scan.performed: false). Offline-capable. resolve --stdin. Up to 500 lookups in one call: one JSON selector per input line, one answer per line in the same order; a bad line gets its owninvalid-requestanswer without stopping the rest.reconcile --applypatches hand-formatted hubs line by line (R8). Only the five allowed key lines are replaced or appended; comments, quoting, folded scalars, lists, trailing spaces, CRLF and the body stay byte for byte, so hubs that failed the old round-trip guard are no longer skipped. The patched text must parse back to the intended frontmatter before it is written. A block-scalar, multi-line, duplicated or quoted allowed key is skipped asfrontmatter-not-patchable; a note that changed since the dry run, even inside the write callback, ischanged-since-planwithwrote: false.apply.notes[]addreplacedKeysandappendedKeys.- Scoped scan policy for
reconcile --apply(R8). An unparseable note elsewhere in the vault no longer refuses the whole apply:scanaddsskippedDetail(unreadable, parse-error, symlink) andparseErrors; a parse-error note inside--folders, an unreadable or symlinked entry, or a truncated scan still refuse it with the paths named; a hub whose citekey an unparseable note mentions is withheld individually (blocked-by-parse-error). - Vault scans read up to eight notes at a time with the same results,
locate --pathreads only the note it needs, job polls start fast and back off, and the Git status probe is cached between jobs. The offline CLI takes--config-dirfor vaults whose configuration folder is not.obsidian. The agentimportaction reads the note state from the notes themselves, through the same identity lookup as the preview. - The bundled agent skill explains summaries with page-checked quotes, checking suggested references against Zotero, annotation digests and finding citing notes.
Safety:
- Index backups are always an exact copy of the index they replace; an index swapped or edited during a refresh cancels the refresh and leaves no backup behind.
- A vault scan that finds a folder replaced while it ran (for example by a symbolic link) reports that folder's notes as skipped instead of using them.
Development: main.ts is split into controllers under src/plugin/, settings into one file per section under src/settings/sections/, modals into src/modals/. npm test no longer rewrites the committed offline core (run npm run build:core after changing a bundled module). Release notes come from this file; CI checks that generated files match the committed ones.
0.5.0
What's Changed
- Unify bilingual introduction and user guides by @johnfkoo951 in #1
- Clarify public source availability for the 0.3 development guide by @johnfkoo951 in #2
New Contributors
- @johnfkoo951 made their first contribution in #1
Full Changelog: https://github.com/johnfkoo951/cmds-zotero/commits/0.5.0