🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

开发热重载桥 Pxczxn/dsh-dev-hotreload

DeepSeek Harness
Pxczxn9 天前有提交已提供中文文档扫描:含敏感能力

保存本地插件源码即热替换运行中的宿主,免重启

29.9/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分

数据截至 2026/10/26 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add Pxczxn/dsh-dev-hotreload
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:仅索引
是什么
dsh 原生插件 · tool
装得上吗
本站尚未做安装检查
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 9 天前
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

读写/删除本地文件
查看扫描证据(共 7 处,展示前 7 条)
  • 读取本地文件
    index.js:36
    return statSync(path).isDirectory();
  • 读取本地文件
    index.js:44
    return JSON.parse(readFileSync(path, 'utf8'));
  • 读取本地文件
    index.js:133
    entries = readdirSync(modules, { withFileTypes: true });
  • 读取本地文件
    index.js:147
    for (const inner of readdirSync(path, { withFileTypes: true })) {
  • 写入本地文件
    index.js:169
    if (logFile) appendFileSync(logFile, `${new Date().toISOString()} ${message}\n`);
  • 读取本地文件
    index.js:199
    const source = readFileSync(patch, 'utf8');
  • 写入本地文件
    index.js:205
    writeFileSync(patch, `${kept}\n# hot-reload-tick: ${new Date().toISOString()}\n`);
扫描于 2026/11/4(0 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

DeepSeek Harness 的本地开发热重载桥:监视 link 安装的插件/预设源码,一保存就触发官方 profile 重组合,正在运行的宿主直接热替换,无需重启。

README

由 DeepSeek 最新模型翻译生成
dsh-dev-hotreload 给 DeepSeek Harness(DSH)用的保存即热重载桥:你在本地开发的插件/预设源码一保存,正在运行的宿主就把那个包热替换掉,不用重启。 它解决什么问题 DSH 自带 @deepseek-ai/dsh-hmr,但它对本地链接包的模块监听是失效的: - link: / file: 安装的包,模块在 ESM 缓存里的键是 <profile>/node_modules/<pkg>/... 这个 symlink 路径; - 而 HMR 的模块监听 dispatch 先用 realpath 得到真实路径再去比对缓存,esmHas(url) 恒为 false; - 结果就是:改源码只 emit 一个 hmr/change 事件,永远不会真正重载(这是 dsh-hmr 0.2.1-rc.3 实测结论)。 真正有效的官方路径是 profile 重新组合(reconciliation):profile 的 cordis.patch.yml / package.json 一变,dsh-hmr 就比对已加载模块的文件身份(mtime + size),把发生变化的插件停掉、清 ESM 缓存、重新 import。官方文档也明说「linked 包在下次重组合时生效」。
展开完整文档(README 剩余 1 节)
dsh-dev-hotreload

给 DeepSeek Harness(DSH)用的保存即热重载桥:你在本地开发的插件/预设源码一保存,正在运行的宿主就把那个包热替换掉,不用重启。

它解决什么问题

DSH 自带 @deepseek-ai/dsh-hmr,但它对本地链接包的模块监听是失效的:

- link: / file: 安装的包,模块在 ESM 缓存里的键是 <profile>/node_modules/<pkg>/... 这个 symlink 路径;
- 而 HMR 的模块监听 dispatch 先用 realpath 得到真实路径再去比对缓存,esmHas(url) 恒为 false;
- 结果就是:改源码只 emit 一个 hmr/change 事件,永远不会真正重载(这是 dsh-hmr 0.2.1-rc.3 实测结论)。

真正有效的官方路径是 profile 重新组合(reconciliation):profile 的 cordis.patch.yml / package.json 一变,dsh-hmr 就比对已加载模块的文件身份(mtime + size),把发生变化的插件停掉、清 ESM 缓存、重新 import。官方文档也明说「linked 包在下次重组合时生效」。

所以本插件的做法很轻:监视你的本地源码目录,保存后轻触 profile 的 cordis.patch.yml,触发官方那套重组合。

保存源码 → 防抖(400ms) → 改写 cordis.patch.yml 的 tick 注释 → dsh-hmr 的配置监视 → profile 重组合 → 插件热替换(工具 schema 同步更新)→ client-hmr 推送前端

安装

从打包好的 tgz(分发用;pnpm pack 的产物)
dsh plugin --profile <profile> add /absolute/path/to/dsh-dev-hotreload-1.0.0.tgz

从本地目录链接(想改源码立刻自举生效时最常用)
dsh plugin --profile <profile> add link:/absolute/path/to/dsh-dev-hotreload

从 GitHub
dsh plugin --profile <profile> add github:Pxczxn/dsh-dev-hotreload

打包自己分发:

pnpm pack --pack-destination ./dist

包自带 bundle 层(dsh.bundle.patch),安装后行 dev-hotreload 会自动进组合,零配置即可工作。

零配置时它怎么找到东西

| 需要的东西 | 自动发现方式 |
| profile 目录 | profileContext.dir → ctx.baseUrl → 宿主进程参数里的绝对路径 → $DSH_HOME/profiles/desktop,取第一个"像 profile"的目录 |
| 要监视的源码目录 | 读该 profile 的 package.json,取 link: / file: 依赖的真实目录;再加 node_modules 顶层(含 @scope/pkg)所有 symlink 的真实目录 |
| 要轻触的 patch 文件 | <profile>/cordis.patch.yml |
| 日志 | os.tmpdir()/dsh-dev-hotreload.log |

node_modules、.git、dist、build、out、coverage、cache 等目录里的写入会被忽略。

配置(可选)

在 profile 的 cordis.patch.yml 里用同 id 覆盖,config 是整体替换,没写的字段用默认值:

- id: dev-hotreload
config:
dirs: # 额外监视的目录(自动发现之外)
- 'D:\Coding\project\dsh\plugins\my-plugin'
autoDiscover: true # 默认 true:自动发现 link: 依赖 profile: 'D:\...\profiles\desktop' # 默认自动定位 patch: 'D:\...\profiles\desktop\cordis.patch.yml' # 默认 <profile>/cordis.patch.yml log: 'D:\Coding\tmp\dev-hotreload.log' # 默认 tmpdir 下;false 关闭 debounce: 400 # 毫秒

只想监视指定目录、不要自动发现:

- id: dev-hotreload
config:
autoDiscover: false
dirs:
- 'D:\repo\my-plugin'

验证它真的在工作

1. 编辑任意 linked 包里被 import 到的文件(比如 src/tools.js);
2. 看日志:Get-Content "$env:TEMP\dsh-dev-hotreload.log" -Tail 20,应出现 change: src/... 和 ticked cordis.patch.yml;
3. 宿主里立刻能用到改后的行为(比如工具输出变了),说明插件已热替换。

须知 / 限制

- 它依赖 @deepseek-ai/dsh-hmr 的配置监视能力。若你在 profile 里把 hmr 行 disabled: true,本插件就无效了。config.root 不需要为本插件设置(模块监听对 linked 包无效,root: [] 即可)。
- 保存后有一次重组合,性能开销与"改配置"同级;debounce 可调。
- 重组合失败时 dsh-hmr 不会回滚到旧版本 —— 改坏代码会看到插件 failed,修好再保存即可恢复。
- 只对会重新执行 apply 的宿主侧代码生效;纯 client(浏览器侧)bundle 的更新由 client-hmr 负责,视插件是否声明 dsh.client 而定。

开发

node --test test/index.test.js

许可证

MIT
预览分享卡片长什么样 ↓Pxczxn/dsh-dev-hotreload
分享 · DeepSeek Harness Hub
Pxczxn/dsh-dev-hotreload

保存本地插件源码即热替换运行中的宿主,免重启

这是你的仓库?认领条目

回到顶部