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> |
||
|---|---|---|
| .. | ||
| helpers | ||
| config-consistency.e2e.test.ts | ||
| daemon.deploy.test.ts | ||
| invariants.e2e.test.ts | ||
| invariants.property.e2e.test.ts | ||
| multiclient.rpc.test.ts | ||
| multiclient.sftp.test.ts | ||
| perf.sync.bench.test.ts | ||
| restart-roundtrip.e2e.test.ts | ||
| self-reflect-rpc.e2e.test.ts | ||
| self-reflect.e2e.test.ts | ||
| ssh.integration.test.ts | ||
| sync.e2e.test.ts | ||
| walk.equivalence.test.ts | ||