dsh-app-control

DSH PLUGIN会话与消息

仓库 cheng-wj/dsh-app-control

会话与消息 L5 · 运行验证通过 安全审查:低风险 可信度:金 可安装插件
安装这个插件

dsh-app-control 是 cheng-wj 维护的 会话与消息 类 DSH 可安装插件, 仓库为 cheng-wj/dsh-app-control,许可证 MIT。 下面按「装什么、怎么装、验没验过、跑起来要注意什么」逐项列出。

一句话选型结论

按资料字段整理

dsh-app-control 是会话与消息类的 DSH 可安装插件,验证等级 L5 · 运行验证通过,安全审查为低风险,有可直接复制的安装命令。验证通过不等于安全:插件会读写文件、执行命令或联网,装前先到仓库确认它做了什么;涉及密钥或系统权限的,建议先在隔离环境试装。

分类会话与消息 收录类型可安装插件 验证等级L5 · 运行验证通过 安全审查低风险
验证等级 L5 L5 · 运行验证通过
GitHub 星标 0 复刻 0 · 未关闭 issue 0
最近更新 2026-10-21 创建于 2026-10-20
README 9.8 KB 正文体量,越大说明说明书写得越细

安装

可安装插件
在 DSH 里执行,装完用 dsh plugin list 确认已挂上;标了 L4 / L5 的命令已在沙盒里真实跑通
dsh plugin --profile web add github:cheng-wj/dsh-app-control#v1.0.0
  1. 1
    确认版本与运行环境

    仓库没有标注兼容版本与 Node.js 要求,先确认你的 DSH 版本能装,再继续。

  2. 2
    执行安装命令

    在 DSH 里执行上面的命令;多包仓库要注意区分具体子包名,别装错包。

  3. 3
    确认已挂载

    用 dsh plugin list 查看列表里是否出现这个插件,出现即挂载成功。

  4. 4
    试跑并检查权限

    加载后跑一个最小用例,确认它能正常工作;同时看它申请了哪些文件、命令或网络权限。

兼容 DSH 版本未标注版本不匹配时安装会报错
Node.js 要求未标注来自仓库 package.json 的 engines 字段
前置依赖无需要同时安装的同级依赖
npm 包名未发布到 npm可用 npm view 查看包信息

能做什么

会话与消息
字段来自项目仓库与公开索引,中文说明由本站标注

上游标签

deepseek-harnessdshdsh-pluginwindows

验证等级与安全审查

L5 · 运行验证通过
自动化流程结论,不是人工审核
验证等级L5 · 运行验证通过在 dsh 沙盒中完成安装与运行冒烟——装得上、跑得起来
安全审查低风险静态分析结论,未标注不代表已通过审查
仓库健康度活跃按仓库活跃度与最近更新时间给出
可信度金综合仓库活跃度与验证结果

选择建议

装之前先看这几条
按条目字段给出的判断,不替你决定用不用

值得选的地方

  • 验证等级 L5:安装和运行都在沙盒里跑通过,装完能直接用的概率高。
  • 静态安全审查为低风险,没有发现明显可疑行为。
  • 有可直接复制的安装命令,不用自己翻文档找入口。

先想清楚的地方

  • 没有声明 Node.js 版本要求,版本不匹配可能装不上。
  • 验证通过不等于安全:插件会读写文件、执行命令或联网,装前先到仓库确认它做了什么。

更适合

  • 需要在会话与消息场景里给 DSH 补能力的人。
  • 想装完就能用、不想自己排依赖的人。
  • 能接受在本地装依赖、愿意自己确认权限的人。

不太适合

  • 只使用 DSH 官方内置能力、不接受第三方插件的人。

同类对比

6 个同类
同分类里挑最接近的几条,字段以各自详情页为准
插件验证等级安全审查星标兼容版本安装命令
dsh-app-control当前 L5 · 运行验证通过 低风险 0 未标注 有
dsh-desktop L3 · 安装规范通过 低风险 3.0 万 未标注 无
openpets L4 · 沙盒安装通过 低风险 1,274 未标注 有
deeptide L4 · 沙盒安装通过 低风险 1,104 0.1.1-rc.2 有
jingyun-dsh L3 · 安装规范通过 低风险 1,004 未标注 有
study-mate 未做沙盒验证 未标注 856 未标注 无

仓库档案

会话与消息
字段来自项目仓库与公开索引,中文说明由本站标注
作者 / 维护方cheng-wj仓库 dsh-app-control · 默认分支 main
分类会话与消息client
收录类型可安装插件声明了 dsh.bundle、可用 dsh plugin add 安装的条目
开发语言未标注仓库主语言
许可证MIT商用或二次分发前请确认条款原文
星标 / 复刻 / issue0 / 0 / 0收录时的数值,非实时
创建 / 更新2026-10-20 · 2026-10-21最后推送 2026-10-21
本站收录2026-10-30首次进入本站目录的时间

README 全文

9.8 KB
作者原文,中文版优先;只做安全转义,不改内容

dsh-app-control



在 DSH 会话内向模型提供三个工具,用来重启、更新和体检 DeepSeek Harness 桌面应用本身。

核心卖点不是"能重启",而是重启不会把自己弄死。这件事比看上去难:从 DSH 会话里重启 DSH,要同时躲开四个独立的坑,每一个都会让应用关上之后再也打不开,而且不报错。


三个工具

工具 作用 是否中断会话
dsh_status 列出 DSH 进程、python 记忆桥、已装插件版本(对比 registry 最新版) 不中断,只读
dsh_restart 干净地关闭全部 DSH 进程,等待退出,然后自动重新打开 中断
dsh_update 装指定版本插件(绕开 already-installed bug),然后重启 中断

模型可以直接调用。典型对话:

> "帮我重启 DSH" → 调用 dsh_restart
> "dshmarket 更新失败了" → 先 dsh_status 看版本,再 dsh_update 传 dshmarket@1.66.44
> "记忆插件好像没生效" → dsh_status 看 python 桥接进程在不在


安装

dsh plugin add 底层就是 pnpm add,它接受 Git 仓库、本地目录和 tarball。本插件不发布到 npm,仓库本身就是分发渠道。

方式一:从 Git 安装(推荐)

dsh plugin --profile desktop add git+https://github.com/cheng-wj/dsh-app-control.git

装的是仓库快照。已实测:从 Git 装下来的 assets/dsh-tools.bat 仍是 399 对 CRLF(.gitattributes 保住了它),三个工具正常注册。

缺点是升级要重新 add 一次。

方式二:本地目录链接(改代码立刻生效)

dsh plugin --profile desktop add link:"C:\Users\ZY\Documents\deepseek-harness\默认工作区\dsh-app-control-plugin"

link: 装的是目录软链,改完 src/index.js 重启就生效,不需要重新打包。适合自己开发调试。

方式三:tarball 离线分发

从 Releases 下载 .tgz,或从源码自行打包:

dsh plugin --profile desktop add "C:\path\to\dsh-app-control-1.0.0.tgz"

适合拷给别人、内网分发,或者留个可归档的快照。


五个坑(这是本插件的全部价值)

前三个坑在开发过程中都真实触发过,第四个是参数层面的隐蔽 bug,第五个是插件发布层面的坑——它让插件「看起来装好了,其实一次都没跑」。

坑 1:taskkill /T 会杀掉调用者自己

taskkill /IM "DeepSeek Harness.exe" /T /F 里的 /T 会向上遍历进程树。如果调度脚本是 DSH 的子进程,它就是自己的行刑对象:应用被关掉,脚本也被干掉,于是没人负责重新打开。

解法:用 WMI 的 Win32_Process.Create 启动调度器。新进程的父进程是 WmiPrvSE.exe,不在 DSH 树里,/T 打不到它。

$result = ([wmiclass] 'Win32_Process').Create($cmdLine)

坑 2:start "" "app.exe" 不是脱离

批处理里用 start 打开应用,新进程会继承 cmd 的控制台。用户关掉那个小黑窗时,Windows 发送 CTRL_CLOSE_EVENT,Electron 收到后直接退出——表现就是"关掉脚本窗口,DSH 也跟着退出了"。

解法:重开应用同样走 WMI,父进程是 WmiPrvSE.exe,没有共享控制台,关任何窗口都不影响它。

坑 3:.bat 必须是 CRLF(最阴的一个)

纯 LF 的批处理文件不会报错。cmd.exe 对 call :LABEL 是按字节偏移记账的,遇到 LF 只换行不回车时偏移算错,脚本会在中途静默停止:

[1/2] all DSH processes are gone     ← 走到这里
[2/2] DSH is running again           ← 永远不出现

应用被关掉了,再也没有重开,而且没有任何错误信息。这个坑排查了很久,最后用 A/B 对照确认:内容完全相同、只有行尾不同的两个文件,LF 版停在中途,CRLF 版完整跑完。

解法:ensureCrlf() 在每次运行前按字节统计 CR/LF 数量,不一致就原地修复。

function crlfCounts(file) {
const buf = readFileSync(file)
let cr = 0, lf = 0
for (const byte of buf) {
if (byte === 13) cr++
else if (byte === 10) lf++
}
return { cr, lf }
}

> ⚠️ 不要用 awk '/\r$/' 检查:它匹配的是字面字母 r,不是回车符,对正确的 CRLF 文件也会报"没有 CR"。只能用字节计数,或者 node。

坑 4:cmd.exe 把 = 当作参数分隔符

传 --delay=5 给批处理,实际收到的是两个参数:--delay 和 5。只匹配字面量 --delay= 的解析器永远不会命中,选项被静默忽略。

解法:匹配裸 --delay,从下一个参数取值。

if /I "!ARG!"=="--delay" (
set "DELAY=%~2"
shift
shift
goto MAIN_LOOP
)

同一个解析器还负责 --profile,并且在倒计时之前校验包列表非空——否则一个没有包名的 update 会先把 DSH 关掉、什么也不装、再重开一遍。

> 顺带一个相关约束:WMI 创建的进程不继承调用者的环境变量。所以 DSH_DELAY / DSH_PROFILE 这类环境变量传不进去,选项必须在命令行上显式传。环境变量只作为手动运行 .bat 时的兜底保留。


坑 5:插件「装好了」但 apply() 从未执行(最隐蔽的一个)

现象:dsh plugin add 成功,profile 里能看到依赖,重启后也没有任何报错——但工具一个都不出现。日志全绿。

原因有两层,都会让 Loader 静默跳过整行:

(a)Config 必须是 schemastery Schema,不能是普通对象。

cordis 会把行的 Config 当成校验器调用。普通对象不可调用,apply() 前就抛错,整行被丢弃。

// ✗ 错误:apply() 永远不会被调用
export const Config = { delaySeconds: { type: 'number', default: 10 } }

// ✓ 正确
import z from '@deepseek-ai/schemastery'
export const Config = z.object({ delaySeconds: z.number().default(10) })

(b)peer 依赖必须惰性 + 可选解析。

@deepseek-ai/schemastery 和 @deepseek-ai/dsh-tools 都是 peer,只由宿主提供。用静态 import 时,只要宿主一解析不到,整个模块导入就失败——而 Loader 把「插件导入失败」当作非致命跳过:记一条日志、不建 fiber、其余插件照常工作。于是插件完全隐身。

更麻烦的是 link: 安装:node_modules/dsh-app-control 指向源码目录,裸包名会按源码树解析,而 peer 是 hoist 在 profile 里的,所以恰好解析不到。

// ✓ 惰性 + 可选,再从各 profile 目录兜底解析
let z = null
try { z = (await import('@deepseek-ai/schemastery')).default } catch {
const { createRequire } = await import('node:module')
z = createRequire(join(DSH_HOME, 'profiles', 'desktop', 'noop.cjs'))('@deepseek-ai/schemastery').default
}
export const Config = typeof z?.object === 'function' ? z.object({ /* ... */ }) : undefined

Config 缺失时导出 undefined 即可——cordis 会把行配置原样透传;工具本身不依赖 schema,代价只是少了设置界面。

> 诊断心法:这类失败在宿主进程里完全不可见。插件应把 apply() 的每一步 writeFileSync 到一个 trace 日志里,否则「工具没出现」和「插件没加载」无法区分。本插件的 trace 在 %DSH_HOME%\dsh-app-control\logs\apply-trace.log。


配置

在 profile 的 cordis.patch.yml 里给这一行加配置即可:

- dsh-app-control:
delaySeconds: 10   # 倒计时秒数,留出取消的余地
profile: desktop   # dsh_update 的默认 profile

dsh_restart 和 dsh_update 每次调用也可以在参数里覆盖 delaySeconds,用 0 立即重启。


文件结构

dsh-app-control-plugin/
├── src/index.js            # 插件主体:暂存脚本、驱动调度器、注册三个工具
├── assets/
│   ├── dsh-tools.bat       # 调度器:解析参数 → 倒计时 → taskkill /T → 重开
│   ├── launch-detached.ps1 # 经 WMI 脱离进程树启动,CRLF 守卫
│   ├── launch-app.ps1      # 经 WMI 打开应用本体
│   └── run-visible.ps1     # 输出同时打到控制台和日志(UTF-8 无 BOM)
├── cordis.patch.yml        # bundle 挂载声明
└── package.json

运行时会把这四个脚本复制到 $DSH_HOME/dsh-app-control/scripts/,日志写到 $DSH_HOME/dsh-app-control/logs/。不写 node_modules(可能只读、升级时被替换),日志也放在插件目录外,所以升级插件不会丢历史记录。


平台

仅 Windows。调度器依赖 taskkill / tasklist / WMI / PowerShell,这些没有跨平台等价物。

在非 Windows 宿主上插件行仍会挂载,工具也会注册,但每次调用都会返回明确错误,而不是悄悄什么都不做。


已知限制

  • 会中断正在进行的对话。dsh_restart / dsh_update 关闭应用时,当前会话跟着断。模型被告知要先提醒你保存工作。
  • 单实例锁。Electron 的单实例机制会让重复启动落回已有实例,所以不会开出两个 DSH;但也意味着"重开失败"不会以弹窗形式暴露,只能看日志。
  • 日志是 UTF-8 无 BOM。早先用 PowerShell 的 Tee-Object 写日志,PowerShell 5.1 下会写成 UTF-16LE,普通编辑器打开每个字符之间都是 \0。现在改用 StreamWriter,明确指定无 BOM 的 UTF-8。

License

MIT

常见问题

6 问
答案由本站依据条目字段整理,不引用上游原文
dsh-app-control 怎么安装?

在 DSH 里执行 `dsh plugin --profile web add github:cheng-wj/dsh-app-control#v1.0.0` 即可。

dsh-app-control 的验证等级是什么意思?

L5 · 运行验证通过。在 dsh 沙盒中完成安装与运行冒烟——装得上、跑得起来

dsh-app-control 安全吗?

低风险。

dsh-app-control 装之前要先确认什么?

先看它会读写哪些文件、执行哪些命令、连接哪些网络地址;验证等级只说明装得上、跑得起来,不等于安全。涉及密钥或系统权限的,建议先在隔离环境试装。

dsh-app-control 用的是什么许可证?

上游标注为 MIT。商用或二次分发前请到仓库确认许可证原文。

这条记录的数据可靠吗?

本站按仓库名去重后合并整理,字段以作者仓库与 npm 元数据为准;安装命令、仓库地址与 README 保持原文,带 L4 / L5 标记的安装命令已在隔离沙盒里真实跑通。

会话与消息
按星标排序,可作替代方案

dsh-desktop

dsh-desktop

为 DeepSeek Harness (DSH) 插件生态打造的现代化桌面端解决方案。万物皆「插件」,桌面本身也是「插件」。

L3 · 安装规范通过 3.0 万 星

openpets

openpets

L4 · 沙盒安装通过 1,274 星

deeptide

deeptide

L4 · 沙盒安装通过 1,104 星

jingyun-dsh

jingyun-dsh

井云 DSH 客户端插件,为 DeepSeek Harness 注入会员登录、订阅支付、算力管控与应用市场,让智能体和技能快速变成可交易商品

L3 · 安装规范通过 1,004 星

study-mate

study-mate

StudyMate 是 DSH 的「学习模式」预设与技能包,为数学、计算机科目定制学习路线、讲解课件与练习评估,跨科目共享记忆。

未标注验证等级 856 星

插件的元信息来自作者仓库;分类、验证等级与安全结论的中文说明为中文整理,最近核验 —。