mirror of
https://github.com/sotashimozono/obsidian-remote-ssh.git
synced 2026-07-22 06:52:07 +00:00
Phase B/2. The enabled-plugins LIST round-trips (#434) and the marketplace installer fetches binaries for registry plugins (#439, Phase B/1) — but a BRAT / sideloaded plugin isn't on the marketplace, so its code never reached another machine. ShadowVaultBootstrap.pull/pushPluginBinaries round-trip the plugin *code* (manifest.json / main.js / styles.css; never data.json) through the remote vault's canonical `.obsidian/plugins/<id>/`. Wired into runAutoConnect AFTER the marketplace installer so the plugins it fetched live aren't re-pulled (pull only stages what's still missing = the non-marketplace ones, preserving the installer's live load and acting as a fallback when a marketplace fetch fails). The push makes the remote `.obsidian/plugins/` a complete vault. A pulled binary loads on the next vault open (Obsidian scans the plugins dir at startup). - pull never overwrites a local file (local install authoritative) - push is diff-gated (no churn) and skips remote-ssh (self-managed) - per-file SSH errors are swallowed, never abort the batch Tests: 7 unit (in-memory fakes) + 3 integration (real docker sshd: cross-session round-trip, push→fresh-pull, local-authoritative). Refs #429 #342 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> |
||
|---|---|---|
| .. | ||
| e2e | ||
| scripts | ||
| src | ||
| tests | ||
| esbuild.config.mjs | ||
| eslint.config.mjs | ||
| manifest.json | ||
| package-lock.json | ||
| package.json | ||
| styles.css | ||
| tsconfig.json | ||
| versions.json | ||
| vitest.config.ts | ||
| vitest.integration.config.ts | ||
| vitest.replay.config.ts | ||
| vitest.setup.ts | ||