← 返回列表
未验证
DSHHOME 隔离与全新实例复现指南
尚未跑自动兼容性验证,可查看页面内的依赖与入口分析。 · 最近上游提交 2026/8/19 · 已提供中文文档
可复现的 DSH_HOME 隔离指南,包含 PowerShell、Node.js 和 Rust 示例
综合分
28.4
GitHub 分
28.4
用户评分
—
★ Stars
2
周下载量
—
安装插件(需先安装 dsh CLI 引擎:npm install -g @deepseek-ai/dsh)
dsh plugin --profile web add baihejiangnan/dsh-home-isolation-guide该插件未发布到 npm,走 GitHub 源安装(pnpm 若拦截 prepare 脚本,按其提示在 pnpm-workspace.yaml 的 allowBuilds 中放行后重跑)
数据截至 2026/9/19(元数据每日更新 · 实装验证按队列轮转,单条结论的验证时间见上方)
用户评分
还没有人投票,来当第一个
订阅周报,不错过优质插件更新
每周一封 · 高评分插件 + 新用户活动
README
DSH_HOME 隔离与全新实例复现指南
本仓库说明如何为 DeepSeek Harness(DSH)创建一个真正全新的状态环境,使它不共享已有 API Key、会话、设置、存储和用户 Agent 预设,并提供 PowerShell、Node.js 与 Rust 的可运行示例。
核心结论
隔离单位是 DSH_HOME,不是 profile 名称。
旧实例 新实例
C:\Users\you\.dsh D:\dsh-instances\desktop-a
|-- .credentials.yaml |-- profiles\tauri\package.json
|-- sessions\ -- profiles\tauri\cordis.patch.yml
-- .agent-presets\
启动新实例时设置:
DSH_HOME=D:\dsh-instances\desktop-a
dsh --profile tauri --host 127.0.0.1 --port 3081
DSH 之后产生的凭据、会话和预设都会落到新目录,不会从 C:\Users\you\.dsh 读取。
前置条件
- 已安装可用的 dsh 命令,或者知道 DSH CLI 的完整路径。
- Windows PowerShell 5.1+ 或 PowerShell 7+。
- Node.js 20+(仅 Node.js 示例需要)。
- Rust 1.77+(仅 Rust 示例需要)。
先确认:
dsh --help
node --version
rustc --version
最快复现:PowerShell
从仓库根目录运行:
.\examples\powershell\new-dsh-home.ps1
-DshHome "D:\dsh-instances\desktop-a"
-Profile "tauri"
-Port 3081
脚本会:
1. 拒绝任何已经存在的目标目录。
2. 创建 profiles\tauri。
3. 写入 dsh-base 与 dsh-web-app bundle 清单。
4. 仅对子进程设置 DSH_HOME。
5. 启动 http://127.0.0.1:3081。
只初始化、不启动:
.\examples\powershell\new-dsh-home.ps1
-DshHome ".\.DSH_HOME\desktop-a"
-InitializeOnly
如果 dsh 不在 PATH:
.\examples\powershell\new-dsh-home.ps1
-DshHome "D:\dsh-instances\desktop-a"
-DshCommand "C:\path\to\dsh.cmd"
Node.js 示例
node .\examples\node\launcher.mjs "D:\dsh-instances\node-a" tauri 3082
可以通过 DSH_BIN 指定 CLI:
$env:DSH_BIN = "C:\path\to\dsh.cmd"
node .\examples\node\launcher.mjs "D:\dsh-instances\node-a"
Rust 示例
cargo run --manifest-path .\examples\rust-launcher\Cargo.toml --
"D:\dsh-instances\rust-a" tauri 3083
Rust 版本只使用标准库,可直接嵌入 Tauri 或其他桌面应用的后端。
验证隔离
验证两个根目录解析结果不同,并查看各状态入口是否存在:
.\scripts\verify-isolation.ps1
-FirstHome "C:\Users\you\.dsh"
-SecondHome "D:\dsh-instances\desktop-a"
重要:验证脚本不会读取 API Key、会话内容或设置内容,只检查路径与文件是否存在。
本机实际案例
在一次 Windows 桌面端集成中,原有 CLI 使用:
C:\Users\\.dsh
桌面应用改为使用其 AppData 专属目录:
C:\Users\\AppData\Roaming\\data\dsh
应用启动 DSH 前执行等价逻辑:
let dsh_home = app_data_dir.join("data").join("dsh");
std::fs::create_dir_all(&dsh_home)?;
Command::new(dsh_binary)
.args(["--profile", "tauri", "--host", "127.0.0.1", "--port", "3081"])
.env("DSH_HOME", &dsh_home)
.spawn()?;
结果:桌面端第一次打开时没有旧 API Key、旧会话或旧用户 Agent 预设。这不是数据丢失,而是新 DSH_HOME 正常隔离的证据。
Profile 清单为什么这样写
templates/tauri-profile/package.json 使用:
{
"dsh": {
"profile": {
"bundles": [
"@deepseek-ai/dsh-base",
"@deepseek-ai/dsh-web-app"
]
}
}
}
这两个 bundle 来自 DSH 发行包。清单只是引用程序模块,不会复制 web profile,也不会复制任何用户状态。
数据是否共享
| 数据 | 同一 DSH_HOME、不同 profile | 不同 DSH_HOME |
| --- | --- | --- |
| API Key | 共享 | 隔离 |
| settings.yaml | 共享 | 隔离 |
| 会话 | 共享 | 隔离 |
| 用户 Agent 预设 | 共享 | 隔离 |
| profile bundle/patch | 隔离 | 隔离 |
更多设计细节见 docs/architecture.md。
面向未来版本升级
对于可能包含破坏性变化的 DSH 新版本,不应让新旧二进制直接共享正式 DSH_HOME。推荐同时隔离 DSH 安装目录、DSH_HOME 和端口,将升级变成并行候选环境测试。
可以只把稳定环境的 profile 定义复制到新的候选 DSH_HOME:
.\scripts\copy-profile-for-upgrade-test.ps1
-SourceHome "D:\dsh\stable"
-TargetHome "D:\dsh\candidate-v2"
-Profile "tauri"
脚本不会复制 API Key、会话、设置、Agent 预设或旧 node_modules。目标 DSH 版本重新安装插件后,可在独立端口验证兼容性。兼容则提升候选版本;不兼容则停止候选进程并重新启动原 DSH_HOME,无需反向迁移或恢复备份。
完整理念、适用场景、兼容性判定和蓝绿升级流程见 docs/version-isolation.md。
清理测试实例
先停止对应 DSH 进程,再明确检查路径,最后手动删除测试目录。不要把递归删除命令写成依赖未验证环境变量的脚本。
本仓库有意不提供自动删除工具,避免错误路径导致数据损失。
License
MIT扫码进群