DeepSeek Harness Hub
← 返回列表

会话 Git 同步PerryLink/dsh-session-sync

DeepSeek Harnessspec-screenedmemory在 GitHub 查看 ↗
✓ 可直接安装

🔄 dsh-session-sync

自动检查通过:npm 包已发布且 engines 声明满足基线(声明 Node ^22.19.0 || >=24.0.0);该结论来自程序自动检查,未经人工实机验证。 · 最近上游提交 2026/9/19 · 已提供中文文档

跨设备 DeepSeek Harness 会话同步:一个专用的 git 镜像,采用仅追加的保留双方冲突解决策略(派生文件,绝不静默覆盖),/sync 命令和 sync_* 工具

综合分
38.3
GitHub 分
38.3
用户评分
★ Stars
10
周下载量
454
安装插件(需先安装 dsh CLI 引擎:npm install -g @deepseek-ai/dsh)
dsh plugin --profile web add dsh-session-sync
npm 包 dsh-session-sync 已校验归属本仓库,走 npm 安装最省事
数据截至 2026/9/19(元数据每日更新 · 实装验证按队列轮转,单条结论的验证时间见上方)
安装兼容性检查✓ 自动检查通过

以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。

npm 包dsh-session-sync @ 0.2.14
Node 引擎要求 ^22.19.0 || >=24.0.0 · 基线 Node 22.19 满足
dsh CLI 依赖未声明 dsh 版本约束
入口文件main/exports/bin 已声明

验证方式:npm registry 存在性 + package.json 静态校验 · 最后验证 2026/9/12 22:12:33

依赖的 DSH / Cordis 模块
@deepseek-ai/dsh-attachment@deepseek-ai/cordis@deepseek-ai/cordis-plugin-include@deepseek-ai/cordis-plugin-loader@deepseek-ai/dsh-commands@deepseek-ai/dsh-llm@deepseek-ai/dsh-session@deepseek-ai/dsh-storage@deepseek-ai/dsh-storage-domain@deepseek-ai/dsh-storage-json@deepseek-ai/dsh-subprocess@deepseek-ai/dsh-system-prompt
用户评分
还没有人投票,来当第一个
订阅周报,不错过优质插件更新
每周一封 · 高评分插件 + 新用户活动

README

🔄 dsh-session-sync
- 1024 store channel: npm i -g dsh1024 once, then dsh1024 plugin --profile web add dsh-session-sync (counts toward the deepseek1024.com install ranking).
Gitee

DeepSeek Harness 的跨设备会话同步——你的会话存储的专用 git 镜像。

在设备之间同步你的会话,发生冲突时保留双方内容,绝不丢失任何一轮对话。

官方仓库。 这是 dsh-session-sync 唯一的官方仓库,由 PerryLink 维护。其他账号下的同名仓库均与本项目无关。

License
DSH plugin
dsh-doctor
Node
CI
Version
npm version
npm downloads

English · 简体中文 · Español · Português · हिन्दी

兼容性

| 层面 | 状态 |
|---|---|
| Harness | DeepSeek Harness dsh-v0.1.5-rc.2(GitHub tag,2026-09-11 验证:完整门禁链 + profile 安装冒烟测试)。npm 依赖行为 0.1.5-rc.2,peer 为 >=0.1.2-rc.1 =0.1.5-alpha.1 =24.0.0 |
| 平台 | 任何可运行 git 和 DSH 的环境(基于 git 的镜像;无平台特定代码) |
| 模型 | 完全支持纯文本模型;无需视觉或额外模型能力 |

你将获得

dsh-session-sync 将你的 DSH 会话存储镜像到一个专用的 git 工作树,并同步到你自己控制的远程仓库——无需云服务,无需第三方存储:

- /sync 命令 —— status(分支、脱敏后的远程地址、领先/落后、脏文件、分叉)、diff、log、pull、push、help。
- sync_status / sync_pull / sync_push 工具 —— 为模型提供相同的功能界面,可在对话轮次内使用。
- 仅追加的冲突解决 — 会话日志是仅追加的;一旦出现任何分歧,插件会保留双方(本地版本保留,远程版本保存为 fork 文件),绝不静默覆盖。发生分歧的会话也可以在会话级别进行 fork。
- 自动模式 — 启动时拉取,每个关闭回合后推送,以及定期拉取,全部可配置且全部可逆。
- 确认门控写入 — pull/push 会先询问(通过 userQuestions 或 approval);只读界面从不询问;没有应答者时操作会失败关闭。

device A                              remote (your git repo)                  device B
$DSH_HOME/sessions ──mirror──▶ commit ──push──▶ [sessions] ──pull──▶ merge (keep-both + fork)

快速开始

1. install the bundle into your profile
dsh plugin --profile web add "github:PerryLink/dsh-session-sync#main"

or from npm (published releases)
dsh plugin --profile web add dsh-session-sync

2. point it at a private git remote and verify the row
dsh --profile web --dump-config | grep -A2 'id: session-sync'

然后在你的 profile patch 中设置远程地址(私有仓库是基线),并进行同步:

- insert:
- id: session-sync
name: dsh-session-sync
config:
remote: git@github.com:you/your-dsh-sessions.git

/sync status
/sync pull
/sync push

安装与卸载

- git 渠道(最新的 main):dsh plugin --profile web add "github:PerryLink/dsh-session-sync#main"(等同于从 git+https://github.com/PerryLink/dsh-session-sync.git 安装)。无需构建步骤 — index.mjs 和 lib/ 就是随附的产物。
- npm 渠道(已发布的版本):dsh plugin --profile web add dsh-session-sync。
- tarball 渠道:在本仓库中运行 pnpm pack,然后运行 dsh plugin --profile web add ./dsh-session-sync-.tgz。
- 卸载:dsh plugin --profile web remove dsh-session-sync(或从 profile patch 中移除该行)。

配置

所有可调项都是 Schemastery Config 字段(可从 cordis.yml 更改)。以 id 为目标的覆盖会替换整行 — 请重新声明你需要的每个键。cordis.patch.yml 内联记录了每个键。

| 键 | 默认值 | 含义 |
|---|---|---|
| enabled | true | 总开关;false 会注销命令、工具、监听器和自动模式 |
| backend | git | 同步后端:git(明文镜像)或 encrypted(age 加密的镜像内容) |
| sessionRoot | '' | 会话存储根目录;空 = $DSH_HOME/sessions(两者都缺失会导致加载失败) |
| repoDir | '' | 同步工作树根目录;空 = $DSH_HOME/dsh-session-sync/repo |
| remote | '' | 远程地址(pull/push 前必需;status/diff 无需远程地址即可工作) |
| branch | main | 远程分支名称 |
| gitBin | git | git 可执行文件路径 |
| ageBin | age | age 可执行文件路径(针对 backend: encrypted 进行探测;缺失时降级为明文) |
| ageRecipient | '' | age 接收者(公钥或身份字符串);为空 = 无法加密,降级为明文 |
| ageIdentity | '' | 用于解密的无口令 age 私钥路径;为空 = 无法解密,降级为明文 |
| autoPullOnStart | false | 插件挂载时拉取一次(配置即授权;无需再次确认) |
| autoPushOnTurnEnd | false | 每个回合结束后推送 |
| pullIntervalMinutes | 0 | 每 N 分钟定期拉取(0 = 关闭,最大 10080) |
| confirmVia | auto | 确认渠道:auto(优先 userQuestions,其次 approval)、userQuestions、approval |
| graceMs | 10000 | git 终止的宽限期(毫秒) |
| commandTimeoutMs | 120000 | 每条命令的超时时间(毫秒) |
| maxOutputBytes | 262144 | 每个流收集输出的上限(字节) |
| commitName | dsh-session-sync | 提交作者姓名 |
| commitEmail | dsh-session-sync@localhost | 提交作者邮箱 |
| registerCommand | true | 注册 /sync 命令 |
| registerTools | true | 当 tools 服务存在时注册 sync_ 工具 |

在你的 profile patch 中覆盖配置的示例:

- insert:
- id: session-sync
name: dsh-session-sync
config:
remote: git@github.com:you/your-dsh-sessions.git
branch: main
autoPushOnTurnEnd: true
pullIntervalMinutes: 30
confirmVia: userQuestions

工具与界面

| 界面 | 只读 | 需要确认 | 备注 |
|---|---|---|---|
| /sync status | ✅ | — | 分支、脱敏后的远程地址、领先/落后、脏文件、fork 文件、上次拉取/推送 |
| /sync diff | ✅ | — | 未提交的更改 + HEAD..remote 统计(只读) |
| /sync log | ✅ | — | 同步仓库中的最近提交 |
| /sync pull | | ✅ | 以保留双方语义执行 fetch + merge;保留本地,远程内容保留为 fork |
| /sync push | | ✅ | 镜像 + 提交 + 推送;从不强制推送,被拒绝时协调并重试一次 |
| sync_status | ✅ | — | 与 /sync status 相同的事实,供模型使用 |
| sync_pull | | ✅ | 模型可调用的拉取 |
| sync_push | | ✅ | 模型可调用的推送 |

权限与数据

- 权限:变更操作需通过确认关卡(confirmVia);插件从不重新实现或绕过 harness 的 userQuestions/approval 服务。自动模式由配置授权覆盖,无需再次确认。
- 数据:同步元数据(设备 id、上次拉取/推送、上次推送 head、上次错误)存放在 session-sync 存储域中。会话文件以不透明字节形式复制——插件从不解析它们。设备 id 也会写入同步仓库中的 device.txt,用于跨设备 fork 归属。
- 会话日志:sync/push、sync/pull 和 sync/conflict 在 types.d.ts 中声明;仅当宿主记录这些类型时才会追加(见已知限制)。写入或显示的所有内容均已脱敏。

安全边界
- 绝不静默覆盖。 仅追加的三方合并会在任何分歧时保留双方内容;分叉文件绝不会被删除,git 也绝不会强制推送、重置、变基或切换分支。
- 路径包含。 文件以不透明字节形式镜像,拒绝符号链接,并对每个拼接后的路径进行包含检查(PATH_UNSAFE 会显式失败)。
- 输出已脱敏。 远程 URL 凭据、令牌以及 key=value 形式的机密在到达模型或日志之前会被脱敏;路径显示会拒绝其根目录之外的任何内容。
- 不存储凭据。 该插件不存储任何凭据;git 凭据存放在你常规的 git 凭据助手中。age 密钥从你配置的路径(ageIdentity)读取;密钥绝不会进入同步仓库。
- Git 加固。 Git 运行时设置 GIT_TERMINAL_PROMPT=0 和 GIT_OPTIONAL_LOCKS=0,受截止时间和信号约束,并对每个流的输出设有上限。
- 故障关闭。 缺少确认应答器、缺少远程仓库或路径不安全时,操作会显式拒绝。

加密与威胁模型

backend: encrypted 在镜像之上增加了一个可选的 age 层:会话字节在提交和推送之前会被加密为 encrypted//.age 文件,并在合并之前解密回本地明文镜像。三方合并始终在本地对明文运行,因此仅追加的保留双方语义保持不变。

加密保护的内容:

- 远程仓库中的静态镜像内容。 你推送的会话文件是 age 密文;远程主机、其操作员以及任何克隆该仓库的人都无法在没有私钥的情况下看到明文会话字节。

它不保护的内容(边界):

- 密钥和 age 身份由你自行管理。 接收者/身份文件绝不会由该插件传输、存储或轮换。如果密钥泄露,其保护的镜像内容就会暴露。请使用无口令的身份,并将其排除在仓库之外。
- 远程仓库在实践中仍然是私有仓库。 git 元数据——提交信息、.gitignore、encrypted/ 路径结构、分支名称以及推送/拉取活动——对远程主机仍然可见。加密隐藏的是内容,而不是你进行同步这一事实,也不是你会话树的形态。
- 明文仍然存在于本地。 /sessions/ 处的镜像是磁盘上的明文;加密保护的是传输/远程副本,而不是本地磁盘加密或活动会话存储。
- 优雅降级意味着明文。 使用 backend: encrypted 时,如果缺少 age,或者 ageRecipient/ageIdentity 为空,插件会回退到明文 git 路径,并在状态/日志中显式警告——它绝不会静默假装已加密。在信任远程仓库已加密之前,请检查 /sync status 中的警告。

基线:使用 backend: git(默认值)时,会话字节以未加密形式存储在你的 git 远程仓库中——请使用私有仓库。

已知限制
- 对象存储后端已预留。 object-storage 是一个接口占位符,在加载时会明确报错失败;只有 git 和 encrypted 已实现。
- 需要 git。 该插件需要 git 可执行文件和 subprocess 服务;缺少它们时,同步操作会以明确的原因失败(配置文件仍可正常启动)。
- age 是可选的、外部的。 加密依赖于 PATH 上的 age 二进制文件(或 ageBin)。没有 age → 回退到明文并给出警告;受口令保护的 identity 无法使用(解密会在 TTY 提示上阻塞,因此会失败关闭)。
- 每个后端一个 repoDir。 不支持在同一个 repoDir 上在 git 和 encrypted 之间切换;请为每个后端使用全新的工作树。
- 0.1.0-rc.6/0.1.0-rc.8/0.1.1-rc.2/0.1.2-alpha.2/0.1.2-alpha.3/0.1.2-rc.1 上的会话事件。 该 harness 不记录 sync/ 事件类型,因此会跳过会话日志追加(会话仍可加载);一旦宿主记录了这些类型,或在 Session.append 上暴露了 ignorable 信封,插件会自动启用它们。
- 轮次之间的 approval。 /sync 在轮次之间运行,此时 approval 通道没有可附加的打开轮次;对于命令驱动的同步,请使用 confirmVia: userQuestions,或在轮次内通过工具驱动同步。打开轮次检查会读取宿主的 turnBoundary 会话投影:没有 @deepseek-ai/dsh-session-projection 的组合无法验证轮次状态,并会以该原因失败关闭。
- 宿主私有产物保持宿主私有。 session.lock(harness 会话租约)和 session.migration..tmp 暂存文件永远不会被镜像或删除——它们是运行时状态,不是可同步的内容。会话日志(session.jsonl、session.v[1-9].jsonl[.zstd])仍是被镜像的载荷。

开发

pnpm install                                       # node ^22.19 || >=24
pnpm run typecheck && pnpm run typecheck:ci        # tsc --checkJs against the published 0.1.5-rc.2 peers
pnpm test                                          # node --test (13 test files; the engine git suite skips without git)
pnpm run verify:self-contained                     # dependency specs resolve from the registry
pnpm run verify:artifacts                          # shipped files present + index.mjs importable
pnpm run check:readmes                             # five-language README consistency
pnpm pack                                          # the published tarball

没有构建步骤:纯 ESM,index.mjs 和 lib/ 就是发布的产物。

主题

dsh、dsh-plugin、deepseek-harness、deepseek、cordis、session-sync、session、git、sync、cross-device

贡献者

- @PerryLink — 创建者和维护者:git 镜像引擎、仅追加的保留双方合并、/sync 命令和 sync_ 工具、自动模式、清理器,以及五种语言的文档。

PerryLink DSH 插件家族
这个项目是由 PerryLink 维护的 40 个 DeepSeek Harness 插件之一。如果这个插件对你有帮助,其他的很可能也会:

| 插件 | 一句话简介 |
|---|---|
| dsh-auto-review | 审批链上的第二模型自动审查,默认失败关闭 | |
| dsh-background-agents | 持久化的后台子代理,带 Web UI 侧边栏、消息传递和中断功能 | |
| dsh-budget | DeepSeek Harness 的成本治理:预算、碳排放和延迟集于一个面板。 | |
| dsh-checkpoint-rewind | 等同于 Claude Code /rewind:快照、会话分叉、一次性恢复 | |
| dsh-claude-move | 将 Claude Code 的会话、记忆、技能和 CLAUDE.md 迁移到 DSH | |
| dsh-click | 面向 DeepSeek Harness 的跨平台原生桌面控制——以 Windows 优先。 | |
| dsh-composer-history | Web 输入框的终端风格输入历史:方向键、Ctrl+R 搜索 | |
| dsh-data-quality | 数据集质量检查和引用交叉核对(此处消费的可选数值桥梁) | |
| dsh-defend | 面向 DeepSeek Harness 的提示注入、越狱和密钥泄露防御。 | |
| dsh-doublecheck | 工程纪律守卫:需求拷问、测试门禁、对手审查 | |
| dsh-draw | 面向 DeepSeek Harness 的统一静态图像生成路由。 | |
| dsh-fast | 面向 DeepSeek Harness 的只读性能诊断。 | |
| dsh-fund-research | 面向中国公募基金的确定性研究报告 | |
| dsh-github | 面向 DSH 的 GitHub PR/issue 集成,每次写入都需审批 | |
| dsh-industry-research | 行业研究编排,通过本插件的 ctx.researchReport.assemble 封存其交付物 | |
| dsh-library | 面向 DeepSeek Harness 的本地文档知识库。 | |
| dsh-local-ai | 面向 DeepSeek Harness 的本地模型(Ollama)集成。 | |
| dsh-lsp-actions | 通过语言服务器提供 LSP 诊断、格式化、补全、代码操作和重命名 | |
| dsh-mask | PII 脱敏中间件:在模型边界处匿名化,在展示层还原 | |
| dsh-mcp-panel | 只读 MCP 运行时面板:/mcp 命令 + 设置标签页,显示状态、工具和错误 | |
| dsh-memento | 需审批的跨会话记忆:ctx.memory 接缝 + SQLite + memory 工具 | |
| dsh-observe | 面向 DeepSeek Harness 的 OpenTelemetry 和 Langfuse 可观测性导出器。 | |
| dsh-output-styles | 等同于 Claude Code outputStyles 的运行时样式切换 | |
| dsh-permission-rules | Claude Code 风格的声明式 allow/deny/ask 权限规则,带审计 | |
| dsh-personal-directive | 带顶栏开关的个人指令注入器(框架版) | |
| dsh-plugin-guide | 作为按需智能体技能提供的插件开发知识库 | |
| dsh-plugin-doctor | 面向 DSH 插件的零依赖静态 + 沙箱冒烟检测器 | |
| dsh-reach | 多渠道审批/提问桥接:微信/Telegram/飞书,会话控制台 | |
| dsh-research-report | 可验证的研究报告引擎:内容寻址的证据账本和密封版本 | |
| dsh-score | 面向 DeepSeek Harness 插件的多维度质量评分。 | |
| dsh-session-pin | 在 Web 侧边栏中固定会话,并保持持久排序 | |
| dsh-skill-pack-security | 安全审计技能包:密钥扫描、依赖和供应链审查 | |
| dsh-talk | 面向 DeepSeek Harness 的语音优先会话循环:对它说话,听它回答。 | |
| dsh-test-drive | 面向 DeepSeek Harness 插件的隔离安装与冒烟测试驱动。 | |
| dsh-ticktick | TickTick/滴答清单任务桥接:会话头部面板 + 11 个工具 | |
| dsh-translate | 面向 DeepSeek Harness 的厂商参数转换和确定性 JSON 修复。 | |
| dsh-wechat | 微信 ↔ DSH 桥接(腾讯 iLink 机器人):文本/图片/文件/语音,在聊天中审批 | |
| dsh-autotier | 自动强/廉价模型层级路由,带确定性风险防护和 /tier 命令 | |
| dsh-catalog | PerryLink 系列的 DSH Desktop Market 标准目录源 | |
| dsh-cert-mcp | 只读 MCP 服务器,公开认证注册表:评级、快照和五维证据 | |
| dsh-kit | 一键安装核心系列组件的入门包 | |
| dsh-plugin-certification | 社区认证注册表,提供可复现检查的评级和徽章 | |
| dsh-plugin-kit | 面向 PerryLink DSH 插件的共享零运行时依赖工具包 | |
| dsh-plugin-portal | 零依赖静态门户,将整个插件系列渲染为单个页面 | |
| dsh-plugin-upgrade-015 | 合并 0.1.3-alpha.1 → 0.1.5-rc.1 升级通道卡片,外加零依赖接缝扫描器 | |
| dsh-team-rooms | 跨会话团队房间:共享消息总线、任务板和时线 | |

从 DSH Desktop Market 安装

所有 PerryLink 插件均可在内置的 DSH Desktop Market 中浏览:Market → Sources → add source → 粘贴 https://perrylink-dsh-catalog.perrylink.workers.dev/catalog-source.json → 选择它。安装仍需通过 Market 的 npm 身份验证和你的确认。

许可证

LICENSE(Apache License 2.0)© 2026 dsh-session-sync 贡献者

上游仓库有新提交时邮件通知你(每天最多一封,无更新不打扰),随时一键退订。

💬 加入 DPharness 群聊

插件用法、部署报错、新插件第一时间同步——群里问,比一个人翻文档快。

点击加入 QQ 群
DPharness 群聊二维码,手机 QQ 扫码进群
扫码进群