deepseek-harness
deepseek-ai
DeepSeek Harness: Everything is a Plugin.
PROJECT TOPICS
PROJECT README
DSH Web GUI 插件:当需要你审批或回答的弹窗(沙箱权限升级审批、ask_user_question 提问、计划审批等)出现时,自动播放提示音并用语音播报,避免漏看。
插件有两条检测路径,两条路径统一使用会话作用域的事件标识
(session:<sessionId>:<kind>:<key>),因此不会重复提醒:
Map<sessionId, {kind, key}> 感知所有会话的 approval / question / plan-review ——
包括没有开在任何标签页里的会话。两种客户端核心形状都支持(resolveGlobalSource() 自动适配):ctx.uiSession.pendingInteractions
(即侧边栏「等待审批」所用的 root hook sessionPendingInteraction);pendingInteractions,改用
ctx.uiSession.sessionStatus(Map<sessionId, {running, pendingInteraction, completionUnread}>,
取其中的 pendingInteraction),这正是桌面端侧边栏「等待审批」用的源。| 标记 | 对应界面 |
|---|---|
data-approval-key |
沙箱权限升级等审批(ApprovalPanel) |
data-question-key |
提问 / 选择题(QuestionComposer) |
data-plan-review-key |
计划审批(PlanReviewPanel) |
命中时按配置播放升调提示音(Web Audio,C5-E5-G5)和/或语音播报(SpeechSynthesis,中文语音)。每个请求只提醒一次。
dsh plugin --profile web add dsh-approval-voice
dsh plugin --profile web add github:ZIye1208/dsh-approval-voice
安装后重启 dsh web 服务,刷新页面即可生效。
本地开发安装(改代码即时生效):
dsh plugin --profile web add link:C:\path\to\dsh-approval-voice
所有会话(默认,覆盖所有会话,含没开在任何标签页里的会话)或 仅当前会话(只在当前标签页响应本页显示的会话);window.__approvalVoice.get() / set({...}) / test() / pending() / global() / alertedCount() / soundBytes() / currentSessionId() / tabId。
set({...}) 返回 { ok, error, config }:ok:false 表示没存住(已回滚内存配置),别忽略它。dsh.approvalVoice.v1),同一浏览器所有标签页共享。DSH Web GUI 里每个会话可能是一个独立标签页,也可能只是同一页签侧边栏里的一条。插件按以下方式让任一会话的审批都能被听到:
ctx.uiSession.pendingInteractions、
桌面端 ctx.uiSession.sessionStatus),因此任何会话(哪怕没开在任何页签里、只在侧边栏显示
「等待审批」)出现审批 / 提问 / 计划审批时,每个页签都会感知到;两个源都取不到时才退回监听本页 DOM 里的卡片。session:<sessionId>:<kind>:<key>),配合 BroadcastChannel
(并写入 localStorage 作为兜底)在全浏览器内一次提醒只响一次:优先由当前聚焦的标签页
播放(声音最可靠),若没有任何聚焦标签页,则由最先到时的后台标签页兜底播放。bell-failed,请已解锁音频的其它页签补响一次。仅当前会话 模式不广播,只在本地为本页正在显示的那个会话出声。console.warn(不再静默无声)。console.warn,并且配置回滚到上一个值 ——
绝不会出现"面板显示已自定义、刷新后提示音消失"。遇到这种提示就换更短的音频(建议 1MB 以内),
或清理浏览器数据后重试。dsh plugin --profile web remove dsh-approval-voice,重启服务即可。dsh-approval-voice/
├── package.json # dsh.bundle + dsh.client 声明(免构建)
├── cordis.patch.yml # 插件名册插入行
├── lib/index.js # 宿主侧空插件(浏览器专用插件无需宿主行为)
├── lib/client.js # 浏览器端实现(模块加载器格式,纯 JS)
├── test-global-scope.mjs # 回归测试:直接加载真实 lib/client.js 的假浏览器测试
└── test-cross-tab.mjs # 旧版跨标签页协调逻辑复刻测试 CLASSIFICATION EVIDENCE
系统优先读取 GitHub Topics,再与站内分类词典和词根规则比对。当前命中: 无有效分类标签。