2.3 KiB
2.3 KiB
本地补丁:工作台状态镜像到宿主侧
基于上游 Aisland-SJL/dsh-worktable v0.5.1,本地版本号改成 0.5.2-local.1。
为什么打这个补丁
桌面端宿主启动参数写死 --port 0(@deepseek-ai/dsh-slark-desktop-host 的
windows-startup.js:--profile web --no-open --host 127.0.0.1 --port 0),每次启动端口随机。
而工作台把项目/布局/绑定存在 localStorage(dsh.worktable.projects.v1、dsh.worktable.view.v1),
媒体存 IndexedDB —— 浏览器按「来源」隔离存储,端口一变就是另一个空库。
现象:新建的工作台,重启后消失。
改了什么
01_content/src/index.ts:新增路由GET/POST /api/worktable/state- 文件位置:
<DSH_HOME>/worktable-state.json(走)resolveDshHomeSafe()) - GET 读回,POST 原子写入(先写
.tmp-<pid>-<ts>再 rename) - 走宿主既有鉴权(
requestRejection),和/api/worktable/file等私有路由一致
- 文件位置:
01_content/src/client/hostState.ts(新增):宿主镜像的读/写与 400ms 防抖合并01_content/src/client/index.tsx:loadView/loadProjects抽出normalizeView/normalizeProjects,本地存档与宿主镜像共用校验persistView/persistProjects额外写dsh.worktable.savedAt.v1并把状态排进宿主镜像- 挂载时拉宿主镜像,只有
updatedAt > 本地 savedAt才回填,避免旧镜像盖掉刚改的内容 markHydrated()之前的写入一律不发,防止首屏默认值把镜像冲掉pagehide/beforeunload立即冲刷
覆盖范围
- 覆盖:项目、布局、绑定、文件夹、视图/外观设置
- 不覆盖:图库媒体(照片)仍在 IndexedDB,换端口照样丢
构建 / 安装
cd 01_content
npm install
npm run build # lib/index.js + lib/client.js
npm pack # 产出 dsh-worktable-0.5.2-local.1.tgz(7 文件,无 .map)
dsh plugin --profile web add "file:./dsh-plugins/dsh-worktable-0.5.2-local.1.tgz"
装完必须完全退出宿主再重开。
升级官方版时的注意
上游出 0.5.2 及以上时,本地补丁会被覆盖,需要把上面的三处改动重新合并到新版本再打包。 如果上游自己解决了「桌面端随机端口 + localStorage」,这个补丁就可以直接丢掉。