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

一键刷新页面 lyjsyyds/dsh-quick-reload

DeepSeek Harness
lyjsyyds34 天前有提交已提供中文文档扫描:未发现敏感能力

点右下角按钮重启页面,让热注入插件立刻生效

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
🟢 扫描:未发现敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描未发现敏感能力:最多只发网络请求、读取自身元数据或只读文件,未发现执行命令、文件写入或敏感信息读取。

发起外部网络请求
查看扫描证据(共 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>
预览分享卡片长什么样 ↓lyjsyyds/dsh-quick-reload
分享 · DeepSeek Harness Hub
lyjsyyds/dsh-quick-reload

点右下角按钮重启页面,让热注入插件立刻生效

这是你的仓库?认领条目

回到顶部