改完预设无需重启,运行中会话自动重绑新版本
30/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/10/17 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add CK-Rebi/dsh-preset-reload该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:待复验
是什么
dsh 原生插件 · skill
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 15 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
读写/删除本地文件
查看扫描证据(共 3 处,展示前 3 条)
- 写入本地文件index.mjs:49
mkdirSync(dirname(config.logFile), { recursive: true }) - 写入本地文件index.mjs:50
appendFileSync(config.logFile, `[${new Date().toISOString()}] ${line}\n`) - 读取本地文件index.mjs:269
isDirectory = statSync(root).isDirectory()
扫描于 2026/11/1(0 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
依赖的 DSH / Cordis 模块
@deepseek-ai/dsh-app-boot@deepseek-ai/schemastery给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
热重载 DeepSeek Harness 智能体预设:重建版本并重新绑定运行中的会话,无需重启 dsh。
README
由 DeepSeek 最新模型翻译生成dsh-preset-reload
让 DeepSeek Harness 的 agent preset 改动对正在运行的会话生效,不用重启 dsh。
改了预设里的插件代码或人格卡之后,正在聊天的会话不会被中断,也不会「失忆」——它们会被重绑到新版本上,sessionId 和上下文全程保留。
English: README.en.md
解决的问题
DSH 的 agent-preset-registry 会为每份预设定义构建一个 revision(generation),并且在定义重新注册时构建新的 revision。但已经绑定的 Agent 仍持有旧 revision:
- 注册表内部的 bindings 是 WeakMap,无法遍历,没有任何东西会去重绑它们;
- mount() 会复用已有 revision,bind() 遇到同一 revision 直接 return。
于是实际表现是:新会话拿到新代码,老会话永远停在旧代码上。
对长期运行的机器人来说,这意味着「改一行文案 = 重启 = 所有人掉上下文」。
这个插件补的就是最后一步。
展开完整文档(README 剩余 1 节)
dsh-preset-reload 让 DeepSeek Harness 的 agent preset 改动对正在运行的会话生效,不用重启 dsh。 改了预设里的插件代码或人格卡之后,正在聊天的会话不会被中断,也不会「失忆」——它们会被重绑到新版本上,sessionId 和上下文全程保留。 English: README.en.md 解决的问题 DSH 的 agent-preset-registry 会为每份预设定义构建一个 revision(generation),并且在定义重新注册时构建新的 revision。但已经绑定的 Agent 仍持有旧 revision: - 注册表内部的 bindings 是 WeakMap,无法遍历,没有任何东西会去重绑它们; - mount() 会复用已有 revision,bind() 遇到同一 revision 直接 return。 于是实际表现是:新会话拿到新代码,老会话永远停在旧代码上。 对长期运行的机器人来说,这意味着「改一行文案 = 重启 = 所有人掉上下文」。 这个插件补的就是最后一步。 它怎么工作 定义文件变化(你生成的那份 cordis.patch.yml) ↓ 可配置的防抖窗口 ① disable → enable 目标预设行 → Service.init 重跑 → 新 revision ↓ ② recompose(agent.ctx, presetId) → 所有活着的同预设 Agent 搬到新 revision 为什么必须有 ① 只改配置不保证预设重新注册。DSH 的 AgentPreset 只在 Service.init 里调一次 agentPresets.register(),而 Loader 对「仅 config 变化」走的是更新 config 的路径, 并不承诺重新实例化。没有重新注册就没有新 revision,recompose 也就无从搬起——会话被粘死在旧版本上。 disabled 是唯一确定的触发点:被禁用的行一定会 fiber.dispose(),重新启用时一定走 init(),于是 register() 必然重跑。 完整的机制分析、源码引用和实测证据见 docs/why-force.md。 安装 方式一:作为 bundle 安装 dsh plugin --profile web add github:CK-Rebi/dsh-preset-reload 装好后在你的 profile patch 里配置(见下一节的配置项): - id: preset-reload config: presets: - your-preset-id roots: - '/path/to/your/bundle/cordis.patch.yml' 方式二:手动加一行 不装包,直接在 ~/.dsh/profiles/<profile>/cordis.patch.yml 里加一行,用绝对 file:// URL 指向本仓库的 index.mjs: - insert: - id: preset-reload name: 'file:///path/to/dsh-preset-reload/index.mjs' config: presets: - your-preset-id roots: - '/path/to/your/bundle/cordis.patch.yml' force: true insert 这一行必须落在宿主层(profile 的 patch 层),不要放进预设里面 ——放进去的话,每次重挂都会把它自己换掉。 配置项 | 字段 | 类型 | 默认 | 说明 | | presets | string[] | [] | 需要重载的预设 id 列表 | | roots | string[] | [] | 监听路径,文件或目录都可以 | | debounceMs | number | 800 | 合并连续文件事件的静默窗口(毫秒) | | auto | boolean | true | 关掉后只有 preset_reload 工具能触发 | | force | boolean | true | 是否用 disable→enable 强制产生新 revision | | logFile | string | '' | 审计日志路径;空串表示不写文件 | roots 建议只写定义文件,不要写整个目录。 写目录的话,每次保存一个插件模块都会触发一次整树重挂——而只要没重新生成 patch,定义其实没变,那次重挂纯属白折腾(会无谓地切换所有在线会话的工具表)。 用法 自动 让构建脚本重新生成定义文件即可: node scripts/build-preset.mjs 文件一变,插件在防抖窗口后自动完成重挂与重绑。 ⚠️ 如果你的构建脚本会重算模块 URL 的内容哈希(?v=),请直接运行它,不要接管道。 实测某些情况下 node build.mjs 2>&1 | Select-String ... 会让脚本静默不写文件。 手动 任何会话都可以调用 preset_reload 工具: preset_reload # 用配置里的 presets 列表 preset_reload presetId=your-preset preset_reload force=false # 轻量 reconcile(可能推不动,仅用于快速试探) 返回示例: your-preset:强制重挂,revision 已更新,重绑 12 个会话 三个字段都可信:forced(是否走了强制路径)、changed(revision 是否真的换了)、 moved(实际重绑了哪些会话)。重绑不会被 changed 门控——它无条件执行。 安全语义 预设挂载失败会被注册表 catch 掉,只记进 record.broken: - 损坏的定义不会让 profile 启动失败; - recompose 会拒绝损坏的定义,活会话继续跑旧 revision; - 旧 revision 因为活会话持有引用(users > 0)不会被回收,随时可以退回。 所以:改坏了插件,线上永远不受影响,回滚是设计自带的。 插件本身没有实现回滚,因为注册表本身就是回滚。 已知限制 - 强制重挂会重建预设的整棵 Cordis 子树,正在进行的 turn 会看到工具表切换。 建议在空闲时改,或接受这一瞬时的切换。 - force 的 disable→enable 之间有个毫秒级窗口,此时该预设未被注册;恰好在这个窗口内新建会话会找不到它。 - 模块按 URL 缓存(含查询串)。改了模块但不重新生成定义文件时 URL 不变,加载的仍是旧代码。这也是定义里带内容哈希的意义。 - 只处理预设层的插件。宿主层插件包的装卸/升级不在范围内(那是 dsh-hot-installer 的领域,两者可以共存)。 验证 机制在 DSH 0.2.0-rc.2 上用两组探针验证过。 重绑确实生效(agent-preset-registry 的官方测试骨架): [1] 初次挂载 tools = ["standard"] [2] 重新注册定义后 tools = ["standard"] <- 陈旧绑定,就是本插件要解决的问题 [3] recompose 之后 tools = ["replacement"] ?v= 变化会加载新代码(fixture 用自身 ?v= 命名工具): [1] ?v=1 挂载 tools = ["qv-1"] [2] 重新注册 ?v=2 后 tools = ["qv-1"] [3] recompose 之后 tools = ["qv-2"] 线上自动重载(真实 dsh web,未重启):改动定义文件后不调用任何工具,预设即被重新挂载,审计日志记录了触发的来源、revision 是否更新、以及重绑了哪些会话。 许可 MIT
预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
CK-Rebi/dsh-preset-reload
改完预设无需重启,运行中会话自动重绑新版本
相关插件 · 技能 / 提示词
人设统管ZiChuanLan/agent-purge
一份系统提示词,喂给多个 coding…
★ 931已汉化DSH
73.8
人物画像蒸馏titanwings/distilly
Distilly — 把他们的思考方式提炼成可复用的技能,供任何智能体或机器人使用。原名 Colleague Skill(原同事 Skill)。
★ 25,659已汉化DSH
71.3
推理工作空间套件Tiger3807861189/J-Space-Cognition-Suite
J-Space 是面向复杂推理、大型仓库工程、子代理协作与授权安全分析的推理时工作空间和控制套件。
★ 2,957已汉化DSH
70.5
两阶段工具锚定预设xiaobright/dsh-anchored-standard
实验性 DeepSeek Harness agent preset…
★ 3,742已汉化DSH
70.1
智能体工作流编排nrslib/takt
不再日夜盯着 AI 编码智能体。
★ 1,402已汉化DSH
70
Agent 运行时手册Electricitysheep/dsh-handbook
DeepSeek Harness dsh 从 0 到 1 深度手册:安装/插件开发/性能调优/实测案例/同模型多…
★ 827已汉化DSH
68.7