Local npm run lint now enforces the three classes the community-review bot
caught only at submission:
- type-checked @typescript-eslint rules (no-deprecated, no-unsafe-*,
no-unnecessary-type-assertion) scoped to src/
- no-unsupported-api (Obsidian API newer than manifest minAppVersion),
cherry-picked from a 0.4.1 alias since the pinned 0.1.9 base lacks it
- noInlineConfig, so an eslint-disable can no longer silence a rule
Base plugin stays pinned at 0.1.9 (0.4.x's sentence-case diverges from the
bot); only the single no-unsupported-api rule is taken from the alias.
Docs: CLAUDE.md, RELEASING.md, release-checklist SKILL.md.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Community-review remediation (no behavior change):
- Remove eslint-disable in realtime/pcm.ts; reach the deprecated ScriptProcessor
API through local type-aliases so no-deprecated never fires.
- Raise minAppVersion to 1.6.6 for FileManager.trashFile (@since 1.6.6).
- Enable the reviewer's type-checked lint rules locally for src/.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Real-time dictation (AssemblyAI/Deepgram, own provider/key/model), auto-ingest
folders, record-in-background, per-invocation diarization, manage built-in
templates (enable/track), local whisper.cpp auto-start/idle-stop, and dev tooling
(local review + release-checklist skill).
Voxtral realtime was reverse-engineered but pulled (not WebView-reachable); its
adapter is kept on disk, unwired.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Roll ROADMAP Unreleased items (modal record-flow + secrets bootstrap fixes) into the 1.1.1 release heading.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Switching the API-key encryption mode no longer moves keys. The on-disk
envelope now retains passphrase material (kdf/verifier/keys) even while
Obsidian secret storage is active, so the two stores coexist and `mode` is
just the active-store flag.
Key transfer is now an explicit, separate action presented as Copy (the
source is kept, so it is a copy, not a move):
- setEncryptionMode: switch active method only, no transfer
- copyKeys: duplicate inactive -> active, source untouched
- clearKeys(mode): wipe one method's saved keys
- unlockPassphraseStore: unlock the snapshot regardless of active mode
- countStoredKeys / EncryptionStatus.passphraseConfigured for the UI
Settings tab: the mode dropdown is now a pure switch; new Copy and Clear
buttons (behind a new generic ConfirmModal) handle key material with a
copied/cleared count Notice. changePassphrase is a direct within-passphrase
re-key. Docs updated (SECRETS.md, CLAUDE.md, wiki).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Fix Obsidian secret storage detection failing on all platforms.
app.secretStorage.setSecret rejects any id that is not lowercase
alphanumeric + dashes, so the colon-namespaced ids and the
underscore self-test id made the availability probe throw and report
secretStorage unavailable on every platform. Switch all secret ids
(namespace separator, self-test id, per-profile key ids) to
dash-joined form.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Version bump; no functional change since 1.0.0 (whisper.cpp auto-lookup) so Obsidian's review tracks a new version.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
The id rewrite-plugin is rejected on submission because an id may not
end in plugin. Rename to rewrite-voice-notes (lowercase + hyphens,
no obsidian, does not end in plugin). Pre-release, no installed users.
- manifest.json: id -> rewrite-voice-notes
- package.json / package-lock.json: name -> rewrite-voice-notes
- README.md, CLAUDE.md, docs/DEVCONFLICTS.md: update install-folder paths,
command-id examples, and the id-locked note
- src/ needs no change (uses this.manifest.id dynamically)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Bump manifest, versions, and package to 1.0.0 for the first GA release.
Drop the pre-release no-migration rule from CLAUDE.md now that v1.0.0 ships.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>