点右下角按钮重启页面,让热注入插件立刻生效
30/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/10/1 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add lyjsyyds/dsh-quick-reload该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:需留意
是什么
dsh 原生插件 · ui
装得上吗
实装验证未通过(unknown),装前请到仓库确认最近更新与 issue
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
更新放缓:最近一次提交在 34 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
⚠︎ 实装验证未通过(unknown · 2026/10/1) ——可能是验证环境差异,装前建议到 GitHub 仓库确认最近更新与 issue。
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码v2.7.0🟢 扫描:未发现敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描未发现敏感能力:最多只发网络请求、读取自身元数据或只读文件,未发现执行命令、文件写入或敏感信息读取。
发起外部网络请求
查看扫描证据(共 2 处,展示前 2 条)
- 发起网络请求lib/client.js:214
const response = await fetch('/plugins/events', { - 发起网络请求lib/client.js:313
await fetch(url, {
扫描于 2026/11/3(1 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
功能亮点
- 清除可重建缓存
- 重启页面生效热注入
给 DeepSeek Harness Web UI 加一键刷新页面:先清掉可重建的缓存,再按刚发布的模块图重启页面,热注入的客户端插件立刻就能出现。
README
由 DeepSeek 最新模型翻译生成dsh-quick-reload
DSH Web UI 的一键刷新页面按钮:一个半透明的小 ⟳,固定在框架右下角,每个视图里都能用。
为什么需要它
注入或修改客户端插件会实时更新 Host 的 cordis 树,但浏览器那半边已经加载的代码还在跑旧的——所以以前想看到改动生效,唯一可靠的办法就是退出再重开整个应用。这个按钮会针对刚发布的模块图重启 Web 页面,热注入的插件立刻就能出现。
它注册了什么
| 半边 | 入口 | 工作 |
| Host | lib/index.js | 无(让这个包保持为合法的 bundle 行) |
| Client | lib/client.js | shell.overlay / id quick-reload / order 100 / label 取自 locale |
shell.overlay 是根作用域、kind 为 list、replaceRisk: none:按钮位于框架级浮动层(.BynINW_overlayLayer{z-index:20;pointer-events:none;position:absolute;inset:0}),所以它是全局的(随布局框架挂载,不随 Session 挂载)、可叠加的(新 id 永远不会替换或挤走别人),也不与任何人共享行——每个占用者自己定位。
展开完整文档(README 剩余 1 节)
dsh-quick-reload
DSH Web UI 的一键刷新页面按钮:一个半透明的小 ⟳,固定在框架右下角,每个视图里都能用。
为什么需要它
注入或修改客户端插件会实时更新 Host 的 cordis 树,但浏览器那半边已经加载的代码还在跑旧的——所以以前想看到改动生效,唯一可靠的办法就是退出再重开整个应用。这个按钮会针对刚发布的模块图重启 Web 页面,热注入的插件立刻就能出现。
它注册了什么
| 半边 | 入口 | 工作 |
| Host | lib/index.js | 无(让这个包保持为合法的 bundle 行) |
| Client | lib/client.js | shell.overlay / id quick-reload / order 100 / label 取自 locale |
shell.overlay 是根作用域、kind 为 list、replaceRisk: none:按钮位于框架级浮动层(.BynINW_overlayLayer{z-index:20;pointer-events:none;position:absolute;inset:0}),所以它是全局的(随布局框架挂载,不随 Session 挂载)、可叠加的(新 id 永远不会替换或挤走别人),也不与任何人共享行——每个占用者自己定位。
这一层是点击穿透的,所以这个条目用 pointer-events:auto 重新接管点击。
为什么不用其他「看起来全局」的位置
| 位置 | 为什么不用 |
| sidebar.footer.action | 渲染进 ._2H3hWW_footerActions{display:flex}——一个 flex 行。dsh-context 的 context-overview 条目在那里是 width:calc(100% + 4px) + margin:0 -2px,也就是它想要整行;第二个条目会压到它上面(这就是最初的 bug)。把我的条目强制设成 flex:0 0 36px 能避免重叠,但会挤到另一个插件的标签。 |
| conversation.session.header.actions | 会话作用域:没有打开的 Session 就不存在。而且也是共享的、宽度受限的操作行。 |
| sidebar.panellist | 它的 id 指向主面板——点击会切换主列。对操作来说语义不对。 |
| conversation.header.corner、shell.leading、sidebar. 单例 | 单槽位:注册会遮蔽自带的 UI(replaceRisk: shadows-shipped-ui)。 |
位置
右下角,内缩 18px——框架浮动胶囊的惯例。那个角落没有常驻的插件 UI:唯一外来的 shell.overlay 条目是 dsh-market-toast(安装时的临时 toast),其他 toast 都通过原语的 overlayTopMargin() 辅助函数(max(min, --dsh-frame-top-clearance + 20))锚定在顶部,而 dshmarket 自己的右下角胶囊(.nUhMVa_top)是 position:absolute,在 market 面板内部(.nUhMVa_root{position:relative}),不在这个框架层里。
按钮 32px,半透明(.68 不透明度),悬停/聚焦时才变实,所以即使有临时元素从下面经过,也不会真的挡住什么。
点 ⟳ 到底做了什么
单纯刷新页面可能仍在提供过期的 JavaScript:Host 会通告每个 /plugins/ 下的 bundle 带 Cache-Control: public, max-age=31536000, immutable。只要 bundle 的 rev 跟着它一起变,这没问题——但 rev 是从产物的文件元数据(mtimeMs / ctime / 大小)推出来的,不是从字节内容推出来的,所以两次不同的构建可能共用一个 rev,然后这一年期的缓存就赢了。因此点击时会先清掉可重建的缓存,再重新加载:
1. Cache Storage —— 每个 bucket 都删掉(包括远程访问 shell 缓存 dsh-remote-shell-v1,那个插件下次访问时会重新预取它)。
2. Service workers —— 每个注册都调用 update(),这样 SW 提供的内容会重新来自 Host。
3. Bundle 字节 —— 模块图从 Host 自己的 HMR 流(GET /plugins/events,Host 已经在广播的 SSE 帧)读取,它声明的每个 /plugins/* URL——再加上本页已经加载过的每一个,取自 performance timeline——都用 cache:'reload' 重新拉取。有上限:最多 160 个 URL,每个请求 1.2s 超时,总预算 2.2s,所以重新加载等待时间不会超过这个。
它刻意保留什么
localStorage、sessionStorage、cookie、磁盘上的配置档、你的会话和打开的对话都不动。真正的状态就在那里:每个会话的草稿、面板宽度,以及远程访问设备凭据(dsh-remote-device)——清掉这些会丢失工作或破坏远程配对。
为什么它不会打断任何东西
这条路径上的任何东西都不碰 Host 进程或智能体运行时:不重启应用,不调用 /dsh-market/restart,不写配置档。正在运行的回合、后台任务或终端会话在页面重新加载期间继续运行,页面之后会重新连上它。如果只想裸重新加载、不做缓存清理,Shift-click 按钮。
安装
npm 包名是 dsh-quick-reload-lyjs(npm 上普通的 dsh-quick-reload 已被占用);仓库和插件 id 保留短名。从发布 tarball 安装——预构建,无需编译(先完全退出桌面应用):
dsh plugin --profile desktop add https://github.com/lyjsyyds/dsh-quick-reload/releases/download/v0.1.1/dsh-quick-reload-lyjs-0.1.1.tgz
或者通过 GUI——设置 → 插件 → 安装——用同一个 URL 作为 spec。
从本地 checkout 安装(开发形式;命令行会自己写入 dependencies 和 dsh.profile.bundles):
dsh plugin --profile desktop add link:<absolute path to this directory>
移除
在设置 → 插件里卸载 bundle(或 dsh plugin --profile desktop remove dsh-quick-reload-lyjs),并从 dsh.profile.bundles 里删掉它;下次启动时按钮就消失了。
说明
- 客户端改动重新加载就够了。如果改动重写了已经加载的 Host 模块,仍然需要重启应用。
- 当 Host 重新发布文件时,新的 rev 本身就已经能击败不可变缓存;重新验证这一轮是为 rev 冲突准备的(元数据相同,字节不同)。
- 它只重新加载页面并清除浏览器端缓存;从不写入配置档,所以不会弄坏插件集。
测试
npm test # or: node tests/quick-reload.smoke.mjs
tests/quick-reload.smoke.mjs 按 Host 模块加载器的方式加载 bundle(window.__ModuleLoader__.load),把插件应用到 stub 上下文,用一个真正跟踪状态的精简 React 替身渲染 overlay 条目,并针对 stub 过的浏览器全局对象跑通整条点击路径——Cache Storage、service worker、/plugins/events SSE 帧、performance timeline 和 fetch。19 项检查,无依赖,无网络:它还钉住了边界(最多 160 个 URL,每个 URL 只重新验证一次),并证明卡死的源站拖不住重新加载。有几项检查是时序断言,所以这个文件大约要跑 3 秒。
License
MIT © 2026 LYJS. Source: <https://github.com/lyjsyyds/dsh-quick-reload>预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
lyjsyyds/dsh-quick-reload
点右下角按钮重启页面,让热注入插件立刻生效
相关插件 · UI / 主题
破甲增强版JeffKeeping/dsh-purge-plus
dsh-purge 的非官方分支fork:适配 DeepSeek Harness 0.2.1-rc.2、破甲内核…
★ 387已汉化DeepSeek 客户端
71.9
无代码业务系统平台nocobase/nocobase
NocoBase 是什么
★ 24,804已汉化DSH
71.8
1Panel 服务器面板1Panel-dev/1Panel
全球 250 万+ 自托管用户共同喜爱。
★ 37,350已汉化DSH
71.5
工作状态行动态ccch1mneyyy/working-activity
作者:chimney@ccch1mneyyy。社区项目,非 DeepSeek 官方项目。
★ 664已汉化DSH
71.2
多模型配置管家farion1231/cc-switch
跨平台桌面一体化助手,支持 Claude Code、Codex、OpenCode、DeepSeek Harness 等工具,唯一官网 ccswitch.io
★ 151,506已汉化DSH
71.1
AI 矢量设计工具ZSeven-W/openpencil
全球首个 AI 原生开源矢量设计工具。
★ 7,027已汉化DSH
71.1
这是你的仓库?认领条目