perrylink/dsh-session-sync
Cross-device session synchronization: dedicated git mirror + append-only conflict resolution for both parties (local retention, remote retention of fork files, never silent overwriting), /sync command and sync_status/sync_pull/sync_push tool, automatic push and pull configurable; 49 tests + real git e2e all green, rc.6 --patch loading test passed
Cross-device session sync for DSH: mirrors your session store into a dedicated git worktree and syncs it to a remote you control — no cloud service, no third-party storage. It exposes a /sync command (status, diff, log, pull, push, help) and the sync_status / sync_pull / sync_push tools for the model, resolves conflicts append-only (on divergence it keeps BOTH sides — the local version plus the remote version preserved as fork files — and never silently overwrites, with session-level forking for diverged sessions), and offers configurable auto modes (pull on start, push after every closed turn, periodic pull).
Install
dsh plugin --profile web add dsh-session-syncREADME npm channel (dsh plugin --profile web add dsh-session-sync for published releases). The git channel installs latest main: dsh plugin --profile web add "github:PerryLink/dsh-session-sync#main" (equivalent to installing from git+https://github.com/PerryLink/dsh-session-sync.git; no build step — index.mjs and lib/ are the shipped artifacts); a tarball channel is also documented. Then set the remote in your profile patch (a private repository is the baseline) and verify the row with dsh --profile web --dump-config | grep -A2 'id: session-sync'. npm package dsh-session-sync 0.2.13 (registry-verified 2026-09-10; registry repository field -> github.com/PerryLink/dsh-session-sync).
Compatibility
Verified against DeepSeek Harness dsh-v0.1.5-rc.1 (GitHub tag verified 2026-09-10: full gate chain + profile install smoke; npm dependency line 0.1.5-rc.1; peers >=0.1.2-rc.1 <0.2.0 || >=0.1.5-alpha.1 <0.2.0). Node ^22.19.0 || >=24.0.0. Works anywhere git and DSH run (git-based mirror, no platform-specific code); text-only models are fully supported. Confirmation-gated writes: pull/push ask first through userQuestions or approval, read-only surfaces never ask, and with no answerer the operation fails closed.
Details
- Repo: perrylink/dsh-session-sync
- Category: Coding & Development
- Stars: 1
- Version: npm dsh-session-sync 0.2.13 (registry-verified 2026-09-10)
- Last push: 2026-09-21
- First seen: 2026-08-16
Recent updates
README documents the mirror topology (device A session store → local mirror commit → push → remote git repo → pull → keep-both merge + fork on device B) and the configuration keys, including backend (git plaintext mirror or encrypted age-encrypted mirror content), sessionRoot, repoDir, remote, branch and the git/age binary paths; an id-targeted override replaces the whole row.
FAQ
- How do I install dsh-session-sync?
- Run: dsh plugin --profile web add dsh-session-sync (or the git channel dsh plugin --profile web add "github:PerryLink/dsh-session-sync#main"), then set remote in your profile patch and verify with dsh --profile web --dump-config | grep -A2 'id: session-sync'.
- What happens when both devices changed the same session?
- Divergence is resolved append-only: the plugin keeps BOTH sides — your local version plus the remote version preserved as fork files — and never silently overwrites; diverged sessions can also fork at the session level.
- Can sync be encrypted?
- Yes — set backend: encrypted for age-encrypted mirror content (the age binary is probed; if missing it degrades to plaintext). A private remote repository remains the documented baseline.