移动工作区插件(dsh-portable-workspace)
让 DeepSeek Harness 在移动硬盘 / U 盘上创建完全自包含的便携工作区:会话、插件、工程文件、交付、日志、账号凭据全部落在盘上;拔盘显示脱机,插盘自动重新识别;换一台装了本插件的电脑即可继续工作。
功能特点:①完全自包含、100% 不落本地,不惧换电脑与重装系统;②独立便携 web 实例,可多开、各自插件配置;③盘符无关识别 + 脱机;④scrypt 密码 + 一次性恢复密钥 + 密码提示 + 查看先验密码;⑤缺插件一键装 / 短名解析 / 兼容预检 / 按清单重装;⑥跨盘·本机会话双向迁移 + .zip 备份恢复 + 改名;⑦升级友好、零依赖、离线可用;⑧可选「同步本机登录」。
0.1.6 新增:依赖插件列表默认收起,可点「展开 / 收起」;已卸载的插件可从清单逐条移除(有密码的工作区需验证密码),移除后打开工作区不再反复提示「缺少插件」。
0.1.7 新增:迁移会话时把工程文件、交付物与附件一起搬走,并把会话正文里的旧绝对路径改写为新目录(换盘符同样有效),迁移完成后会提示复制了多少文件、改写了多少处路径。
0.1.8 新增:文案更正——「加密工作区」统一改为「带密码的工作区」。密码用于打开工作区的校验(scrypt 单向哈希),不会加密盘上的会话、工程与交付文件。
0.1.9 新增:插件描述按八点功能重写(含可选的「同步本机登录」),并在插件仓库里声明三张展示截图(screenshots.json)。
0.1.10 新增:插件描述压缩到 233 字,不再被 npm 的 255 字上限截断;并把 screenshots.json 纳入 npm 包(此前只在 GitHub 仓库里,市场截图不受影响)。
0.1.11 新增:打开移动工作区时自动清理过期 / 失效的浏览器认证 Cookie,避免累积过多 Cookie 触发 Chrome 431「请求头过大」导致应用打不开;并保护正在运行的便携实例不被误清理。
工作原理(为什么 100% 落在盘上)
打开工作区时,插件生成一个 --patch 覆盖层并启动独立的便携实例:
DeepSeek Harness.exe --expose-internals <cli.js> portable \
--patch <工作区>/launch/cordis.patch.yml --port 0 --no-open
DSH_HOME指向<root>/support/home→ profile、附件、storages 全在盘上;- patch 覆盖
session-persistence-jsonl.root/storage-json.root→ 会话与存储落在工作区目录,多个工作区互不混淆; - patch 覆盖
working-directory.defaultDirectory与workspace-controller.documentsDirectory→ 工程与交付落在Projects/<id>; - patch 覆盖
agent-default-model→provider: deepseek-account, model: deepseek-flash,使用「同步本机登录」复制上盘的 DeepSeek 账号 grant,无需另配 API Key; - 便携实例是 CLI web host(
ELECTRON_RUN_AS_NODE=1),不启动 Electron 桌面壳,因此没有 ElectronuserData落本地的问题; - 每个实例用随机端口 + token,在独立窗口打开,不污染本机桌面版。
使用流程
- 初始化 / 扫描:插盘后点「重新扫描」;盘符变化也能识别(靠根标记文件 + 本机
roots.json里记住的非盘符路径)。拔盘后该卷进入「脱机的盘」区,显示「移动盘未连接」。 - 打开:先验证密码(scrypt + 恒定时间比较,错误密码拒绝启动)。创建时的密码框要求输入两次并带「小眼睛」明文查看。通过后检查工作区声明的插件清单:
- 缺少 → 弹「缺少插件」对话框,区分必需 / 可选,给出「一键安装缺失插件」「连可选插件一起装」「跳过,直接打开」;
- 安装 = 用随包 pnpm 在便携 profile 里
add,并把带dsh.bundle的包追加进dsh.profile.bundles(否则装了也不会被加载); - 兼容性预检(
engines.dsh/@deepseek-ai/*peerDependencies 与本机 DSH 版本比对):冲突时列出原因与处理方案,但不阻断安装/启动(最终由 Loader 裁决); - 可选插件 / 冲突都允许跳过,装完重开不会二次弹密码框。
- 解锁态只在 Host 进程内存里,不落盘:登出、DSH 重启、插件重载、拔盘重扫、换盘符都会让它失效 → 再次打开重新验密码。
- 同步本机登录 / 退出登录(可选,单向):把本机
.credentials.yaml、.anonymous-user-id复制到盘上的便携 home,永不从盘回写本机;「退出登录」删掉盘上这两个文件。这样换电脑不必重新登录。 - 工作区行按钮:打开 / 登出 / 修改密码(旧密码 + 新密码 + 确认新密码)/ 添加插件 / 迁移 / 删除。删除须手动输入固定文字「我已知晓删除该工作区,无法恢复!」并输入密码(无密码留空),客户端与 Host 双重校验,防止误删或绕过接口。
- 添加插件到这块盘:从 npm 官方源下载安装到移动盘的便携 profile(不是从本机复制),成功后自动激活 bundle,重启便携实例生效。内置短名解析:市场里的
dsh-web-all/modlens会自动补全为真实包名@linxin666/dsh-web-all/@liustack/modlens,并在最新版不兼容本机 DSH 时自动选最新兼容版本(如@linxin666/dsh-web-all@0.4.14);404 时给出「可能需要 scope 前缀」提示。 - 迁移:「迁移」对话框可把工作区复制到另一块盘或本地硬盘路径,可勾选「迁移后删除源工作区」。迁移会:
- 重写
workspace.json的rootId并记origin; - 重写每份会话日志 header 里的绝对
cwd,并把会话目录收拢到新projectKey(cwd)(否则 jsonl 后端会判 corrupt); - 同步修正 workspace registry 的默认工作目录;
- 新路径写入本机索引,重新扫描即可识别(非固定盘符)。
- 0.1.2 起 · 有密码须确认:源工作区设了密码时,迁移对话框会多出「工作区密码」一栏,必须填对密码才开始迁移;密码错会提示「工作区密码不正确。」并拒绝迁移,避免绕过密码把带密码的工作区整体搬走。没设密码的不受影响。
- 0.1.2 起 · 插件清单跟着走:迁移会把源盘便携 profile 里装过的插件清单写进新工作区的
workspace.json(plugins),迁移完成提示会写明「已把 N 个插件写入清单」。下次打开该工作区会弹「缺少插件」→ 点「一键安装缺少的插件」即从 npm 装到目标盘;安装结果写在logs/plugins.log。 - 为什么迁移后目录大小不一样:
support/home(整块盘共享的插件与账号数据,含几百 MBnode_modules)按设计不随工作区搬迁,迁移只复制工作区数据(会话、工程、日志)。所以新根目录明显小于旧根是正常现象,不是数据丢失。
- 重写
- 改名(0.1.3 新增):在工作区行点「改名」→ 弹框里把名字改成新的(不能和同一块盘上已有工作区重名)→ 点「确认改名」。看到列表里的名字立刻变新、会话和工程目录都没动,就是成功。
- 会话迁移(0.1.3 新增):点「会话迁移」→ 先选来源(「当前工作区」或「本机普通 DSH 会话」)→ 列表里勾选要搬的会话(可点「全选」)→ 选目标(另一块盘上的任意工作区,或「本机」)→ 想搬走而不是复制就勾「迁移后删除源会话」→ 点「开始迁移」。成功后在新工作区里能看到这些会话、打开不报损坏;选中的会话对应的工程文件 / 交付物也一起搬过去。(0.1.4 起列表显示会话主题名称,不再是一串 uuid 码;有密码的工作区点进来会先弹「先验证工作区密码」,填对才显示列表,保护会话标题隐私)。
- 会话日志、
session_projcache缓存、workspace 注册表里写死的绝对盘符路径都会自动改写,所以换盘 / 换电脑仍能打开。 - 支持「移动盘工作区 ↔ 本机普通 DSH 会话」双向;来源和目标不能是同一个(Host 端也会拦,避免自己覆盖自己)。
- 会话日志、
- 备份 / 恢复(0.1.3 新增):点「备份恢复」→ 在「最多保留 N 份」填数字(默认 5、上限 50)、按需勾「打开时自动备份」→ 点「立即备份」,列表里多出一条带时间戳的备份即成功(0.1.4 起快照打成压缩包
Portable-Backups/<工作区>/<时间戳>.zip,里面含workspace/、project/和backup.json;旁边一份同名.json记备份信息,列表里带「ZIP」标记的就是它。恢复时兼容 0.1.3 及更早留下的旧「散目录」备份,照常能选、能恢复)。恢复时:列表里选一份 → 选「恢复到」的目标(可以是另一块盘的工作区,也可以恢复到别的已有工作区)→ 手动输入固定文字「我已知晓恢复操作将覆盖原有移动工作区,请谨慎操作!」→ 输入被覆盖那个工作区的密码(没设密码留空)→ 点「确认恢复」。客户端和 Host 都会校验文字与密码,少一样都不执行;恢复会先自动留一份「覆盖前」快照再整份覆盖,并重写会话 / 注册表 / 启动脚本路径。 - 忘记密码也能找回(0.1.4 新增):新建工作区或「修改密码」时,弹框里多一栏「密码提示」(选填,写一句只有你自己看得懂的提醒,例如「第一只猫的名字」)。设好密码点确认后,会弹出一个「恢复密钥」窗口,里面是一串
XXXX-XXXX-XXXX-XXXX的字符 —— 这串码只显示这一次,关掉就再也看不到,立刻用纸笔抄下来或存进密码管理器,再点「我已抄好」关掉。以后在解锁框点「忘记密码?」→ 填这串恢复密钥 → 填两遍新密码 → 点「重设密码」,看到提示「已重设」并能用新密码打开即成功。旧密钥用完立即作废,系统会再弹一串新的恢复密钥,同样抄走。没设密码的工作区不产生恢复密钥;密码提示只在解锁框下方显示你写的那句提醒,不会暴露密码本身。 - 有密码的工作区,更多操作要验证密码(0.1.4 新增):0.1.2 起「迁移」、0.1.3 起「删除 / 修改密码 / 恢复」已经要密码;0.1.4 再把「添加插件、改名、会话迁移、备份恢复」也补上 —— 这些弹框在有密码的工作区上会多出「工作区密码」一栏,填对才执行,填错提示「工作区密码不正确。」并拒绝。其中「会话迁移」更严格:有密码的工作区点进去先弹一个「先验证工作区密码」的小框,填对才让你看到会话列表(列表现在显示的是会话主题名称,没主题的显示「(无主题)」并带 id 前 8 位),防止别人绕过密码偷看会话标题。没设密码的工作区不受影响,照旧直接操作。
跨电脑
在另一台电脑上:插盘 → 装本插件 → 侧栏打开「移动工作区」→ 扫描/识别 → 输入密码 → 打开。前提是该电脑装了 DeepSeek Harness(版本越接近越好);缺插件会提示并一键安装到盘上的便携 profile。会话与工程文件与本机完全无关。
工作机制与依赖
每个工作区 = 移动盘上的一份独立 DSH 数据 + 本机 DSH 启动的一个独立 CLI 实例。打开时生成 --patch 覆盖层并启动便携实例(见上文「工作原理」)。依赖全部是本机已有之物,无需额外安装:
- 本机 DeepSeek Harness:用它的 CLI(
dsh-desktop-host/lib/cli.js)、随包 node、随包 pnpm、asar 内的基础 bundles。插件本身零 DSH 包依赖,服务都从ctx运行时取得。 - npm 官方源可达:仅「安装插件」时需要联网下载;已装过的插件全在盘上,离线也能开。
- 盘上标记文件
.dsh-portable.json:盘符无关识别的桥梁;本机仅残留一个索引~/.dsh/portable-workspace/roots.json(只记路径,不含任何工作区数据)。
DeepSeek Harness 升级时,插件如何同步更新
★ 升级DeepSeek Harness前先点「关闭全部便携实例」,升级完成后点「重新扫描」即可。如果「关闭全部便携实例」后,自动升级DeepSeek Harness 失败,可能是DeepSeek Harness 某个版本缺陷 或其它插件占用,需退出完全退出DeepSeek Harness 后手动升级。
No comments yet. Be the first to write one.