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

桌面审批卡片 nanshang328/dsh-desk-card

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

在右下角弹卡片直接放行审批、回答问题并查看完成摘要

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

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

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

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:待复验
是什么
dsh 原生插件 · security
装得上吗
曾在 dsh 0.2.0-rc.2 下真实安装成功,但当前 dsh 已更新至 0.2.1-rc.5,本站尚未在新版下复验
L4 · 真实安装等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 17 天前
档位由哪些信号合成

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

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

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

可执行外部命令读写/删除本地文件
查看扫描证据(共 2 处,展示前 2 条)
  • 写入本地文件
    lib/index.js:33
    appendFileSync(LOG, `${new Date().toISOString()} ${message}\n`, 'utf8');
  • 执行外部命令固定命令
    lib/index.js:69
    const child = spawn(
扫描于 2026/10/31(1 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库

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

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

DeepSeek Harness 的右下角原生 Windows 卡片:批准权限请求、知道有提问在等、回合结束时收到摘要。

README

由 DeepSeek 最新模型翻译生成
dsh-desk-card DSH(DeepSeek Harness)的右下角原生桌面卡片:审批请求、提问、任务完成、任务报错。 卡片不是系统通知,而是由 PowerShell/WPF 自绘的小窗口(始终置顶),因此卡片上可以带一个真正能「回答请求」的按钮:审批可以直接在卡片上放行。而在会打扰你的时候(全屏应用、游戏、勿扰模式)卡片直接跳过,把决定权交回 DSH 界面。 仅 Windows。零依赖、不联网、无需构建。 为什么不用系统 Toast | | 系统通知 | 本卡片 | | 带一个能返回结果的按钮 | 取决于系统/额外运行时 | 可以,按钮是卡片自己画的 | | 直接在通知上放行审批 | 不行(只能把应用拉到前台) | 可以:确认允许 / Allow | | 尊重全屏游戏与勿扰模式 | 只能靠系统压掉 | 画窗口之前先过闸门 | | 文案语言 | 系统决定 | 跟随 DSH 语言,也可用 language 固定 | 截图 审批卡片 完成卡片 报错卡片 两张卡片堆叠 运行要求 - Windows 10/11(卡片用 powershell.exe + WPF 绘制,系统自带)。 - DSH 桌面版 profile(卡片由宿主进程注入,不需要浏览器侧挂件)。 - Node.js 20+(DSH 自带的即可)。
展开完整文档(README 剩余 1 节)
dsh-desk-card

DSH(DeepSeek Harness)的右下角原生桌面卡片:审批请求、提问、任务完成、任务报错。

卡片不是系统通知,而是由 PowerShell/WPF 自绘的小窗口(始终置顶),因此卡片上可以带一个真正能「回答请求」的按钮:审批可以直接在卡片上放行。而在会打扰你的时候(全屏应用、游戏、勿扰模式)卡片直接跳过,把决定权交回 DSH 界面。

仅 Windows。零依赖、不联网、无需构建。

为什么不用系统 Toast

| | 系统通知 | 本卡片 |
| 带一个能返回结果的按钮 | 取决于系统/额外运行时 | 可以,按钮是卡片自己画的 |
| 直接在通知上放行审批 | 不行(只能把应用拉到前台) | 可以:确认允许 / Allow |
| 尊重全屏游戏与勿扰模式 | 只能靠系统压掉 | 画窗口之前先过闸门 |
| 文案语言 | 系统决定 | 跟随 DSH 语言,也可用 language 固定 |

截图

审批卡片

完成卡片

报错卡片

两张卡片堆叠

运行要求

- Windows 10/11(卡片用 powershell.exe + WPF 绘制,系统自带)。
- DSH 桌面版 profile(卡片由宿主进程注入,不需要浏览器侧挂件)。
- Node.js 20+(DSH 自带的即可)。

安装

从本仓库安装:

dsh plugin --profile desktop add github:nanshang328/dsh-desk-card

或用本地目录:

dsh plugin --profile desktop add ./dsh-desk-card

然后重启 DSH。包里声明了 dsh.bundle,CLI 会把它记进 dsh.profile.bundles 并作为一个普通的 profile 层挂载,不需要手写任何绝对路径。

Windows 开发辅助脚本:powershell.exe -File tools/deploy-local.ps1 会把工作区复制到 %USERPROFILE%\.dsh\profiles\desktop\plugins\dsh-desk-card 并用同样的方式注册。

会出现哪些卡片

| 卡片 | 触发时机 | 自动关闭 | 按钮 |
| 审批 | 某个工具调用需要授权 | 不关(等你处理) | 确认允许 直接放行一次 · 点卡片打开 DSH 看完整对话框 |
| 提问 | agent 需要你回答 | 不关,直到问题被回答 | 知道了 |
| 完成 | 一轮正常结束 | doneTimeoutSeconds(默认 5 秒) | 知晓 |
| 报错 | 一轮失败 | 不关 | 知道了 |

完成卡片还会带上你最后一条消息的摘要、本轮耗时、剩余待办数量,以及本轮/本会话的 token 消耗。

卡片之间不会重叠:新卡片会叠在已有卡片的上面。DSH 窗口关掉时,还开着的卡片会一起关闭。

配置

所有配置都有内置默认值,这一节可以完全不看。要改动,就在你自己的 profile cordis.patch.yml(~/.dsh/profiles/desktop/cordis.patch.yml)里加一条同 id 的行:

- insert:
- id: dsh-desk-card
name: dsh-desk-card
config:
doneTimeoutSeconds: 10
scale: 1.0
language: en

只写你要改的键即可:config 对象是整体替换的,没写的键会回落到下面的默认值。

| 键 | 默认 | 含义 |
| timeoutSeconds | 0 | 需要你处理的卡片(审批/提问)的自动关闭秒数,0 = 一直留着 |
| doneTimeoutSeconds | 5 | 完成卡片的自动关闭秒数,0 = 一直留到点击 |
| scale | 1.2 | 卡片缩放 |
| skipWhenFullscreen | true | 全屏应用在前台、或系统处于勿扰模式时跳过卡片 |
| notifyQuestions | true | 是否显示提问卡片 |
| notifyErrors | true | 是否显示报错卡片 |
| notifyDone | true | 是否显示完成卡片 |
| language | auto | auto(跟随 DSH 语言)/ zh / en |
| hostProcess | DeepSeek Harness | 点卡片时被拉到前台的进程名 |

三个 notify* 开关只控制「卡片显不显示」,审批与提问链路始终照常工作。

全屏闸门

满足任一条件就不画卡片:

- SHQueryUserNotificationState 报告全屏应用、演示模式或勿扰;或
- 前台窗口铺满它所在的显示器,且不是桌面(应对隐藏了真实状态的全屏游戏)。

卡片被跳过后,审批会交回 DSH 原来的界面(本插件以 prepend: true 先说话,被跳过时一定
next() 交回下游),不会卡住。不用开游戏也能复现:

powershell.exe -File test/gate-probe.ps1 -MaxSeconds 20 # 观察闸门 blocked -> free powershell.exe -File test/fake-fullscreen.ps1 -HoldSeconds 8 # 画一个 8 秒的全屏窗口

工作原理

lib/index.js 宿主侧:监听 approval/request、user-questions/request、agent/error、 agent/status;每个事件起一张卡片,并把卡片进程的退出码翻译成审批结果。
scripts/card.ps1 渲染侧:一张卡片一个 PowerShell 进程。先过闸门,再画 WPF 窗口、叠到兄弟卡片上方、跑计时器,最后用退出码把结果告诉宿主侧。

两半之间的退出码协议:

| 退出码 | 含义 |
| 10 | 按下了卡片的主按钮 |
| 12 | 点击了卡片正文——把 DSH 窗口拉到前台,交给界面处理 |
| 0 | 闸门跳过了卡片(全屏 / 勿扰) |
| 3 | 渲染失败 |

一张卡片一个进程,渲染侧因此完全无状态:卡片不可能拖死宿主,被系统杀掉的卡片等价于「交给界面处理」。

日志与排查

%TEMP%\dsh-desk-card.log 会记录卡片位置、退出码、配置与闸门判定:

apply() started config={"skipWhenFullscreen":true,...}
showCard[approval]: exit 10
approval resolved: allowed-once
done card (41234ms, autoClose=5s)

卡片进程没有控制台窗口。如果一直不弹卡片,依次检查:全屏应用占着闸门(手动测试可加 -SkipWhenFullscreen false)、DSH 进程的 PowerShell 被策略拦了、最后看日志文件。

手动渲染一张卡片(完全绕过宿主侧):

$payload = [Convert]::ToBase64String([Text.Encoding]::UTF8.GetBytes('{"badge":"test","head":"hello","body":"line","okLabel":"OK","okCode":10}'))
powershell.exe -File scripts/card.ps1 -Payload $payload -TimeoutSeconds 5 -Scale 1.2 -SkipWhenFullscreen false -DebugLog "$env:TEMP\card-test.log"

已知限制

- 仅 Windows:渲染侧是 PowerShell + WPF,没有 macOS/Linux 实现。
- 卡片是普通的顶层窗口,能盖住其他窗口,但盖不住独占全屏的游戏——这正是闸门存在的原因。
- 一张卡片一个 PowerShell 进程(冷启动约 100ms)。卡片不是通知中心条目,关掉就没了。
- 本插件不做重启/关机。要电源控制请用 dsh-power-button 或 dsh-restart。

隐私

宿主侧不开任何网络端口、不读任何文件:每张卡片起一个本地 PowerShell 进程,并往 %TEMP%\dsh-desk-card.log 追加一行。卡片内容包含会话的短摘录(任务标题、工具名、审批理由、错误信息),以命令行参数的形式传给那个子进程。

许可证

MIT
预览分享卡片长什么样 ↓nanshang328/dsh-desk-card
分享 · DeepSeek Harness Hub
nanshang328/dsh-desk-card

在右下角弹卡片直接放行审批、回答问题并查看完成摘要

回到顶部