DeepSeek Harness 插件:回复、提问、审批三类会话通知(系统原生 toast)+ 会话内梯子目录导航。
31/100
综合分
3
GitHub 星标
93
npm 周下载
—/5
用户评分
数据截至 2026/9/23 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add dsh-session-buddynpm 源 · dsh-session-buddy 的发布者账号已校验与本仓库一致
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:需留意
是什么
dsh 原生插件 · ui
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
更新放缓:最近一次提交在 53 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
⚠︎ 实装验证未通过(runtime_smoke_failed · 2026/10/27) ——可能是验证环境差异,装前建议到 GitHub 仓库确认最近更新与 issue。
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查✓ 自动检查通过展开查看检查明细 ↓
以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。
✓npm 包dsh-session-buddy @ 0.3.0
✓Node 引擎要求 ^22.19.0 || >=24.0.0 · 基线 Node 22.19 满足
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明
验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/12 06:03:26
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
可执行外部命令读写/删除本地文件发起外部网络请求
查看扫描证据(共 36 处,展示前 35 条)
- 写入本地文件lib/index.js:105
writeFileSync(file, `\uFEFF${script}`, "utf8"); - 执行外部命令来自配置/变量lib/index.js:117
execFile(WINDOWS_POWERSHELL, [ - 删除本地文件lib/index.js:131
rmSync(dir, { - 执行外部命令固定命令lib/index.js:142
execFile("osascript", ["-e", command], () => {}); - 执行外部命令固定命令lib/index.js:146
execFile("notify-send", [title, body], () => {}); - 读取本地文件lib/index.js:363
const parsed = JSON.parse(readFileSync(file, "utf8")); - 写入本地文件lib/index.js:391
mkdirSync(dirname(file), { recursive: true }); - 写入本地文件lib/index.js:392
writeFileSync(file, JSON.stringify(Object.fromEntries(pruned), null, 0), "utf8"); - 读取本地文件lib/index.js:538
return statSync(path).size; - 读取本地文件lib/index.js:591
const detected = detectCorruptionInLog(readFileSync(info.log)); - 读取本地文件lib/index.js:620
names = readdirSync(d); - 读取本地文件lib/index.js:628
isDir = statSync(p).isDirectory(); - 删除本地文件lib/index.js:681
rmSync(info.dir, { - 读取本地文件lib/index.js:811
for (const candidate of candidates) if ((candidate.includes("\\") || candidate.includes("/")) && existsSync(candidate)) return candidate; - 发起网络请求src/client/notifier.ts:74
const response = await fetch(TOAST_ROUTE, { - 发起网络请求src/client/session-delete.ts:57
const response = await fetch(SESSIONS_ROUTE, { cache: 'no-store' }) - 发起网络请求src/client/session-delete.ts:72
const response = await fetch(DELETE_ROUTE, { - 发起网络请求src/client/upgrade.ts:49
const response = await fetch(`${ROUTE}/version`, { method: 'GET' }) - 发起网络请求src/client/upgrade.ts:62
const response = await fetch(`${ROUTE}/update`, { - 发起网络请求src/client/upgrade.ts:81
const response = await fetch(`${ROUTE}/update/status?id=${encodeURIComponent(jobId)}`, { method: 'GET' }) - 读取本地文件src/host/ledger.ts:39
const parsed = JSON.parse(readFileSync(file, 'utf8')) as unknown - 写入本地文件src/host/ledger.ts:73
mkdirSync(dirname(file), { recursive: true }) - 写入本地文件src/host/ledger.ts:74
writeFileSync(file, JSON.stringify(Object.fromEntries(pruned), null, 0), 'utf8') - 读取本地文件src/host/session-delete.ts:145
return statSync(path).size - 读取本地文件src/host/session-delete.ts:187
const detected = detectCorruptionInLog(readFileSync(info.log)) - 读取本地文件src/host/session-delete.ts:214
try { names = readdirSync(d) } catch { return } - 读取本地文件src/host/session-delete.ts:218
try { isDir = statSync(p).isDirectory() } catch { continue } - 删除本地文件递归src/host/session-delete.ts:252
rmSync(info.dir, { recursive: true, force: true }) - 写入本地文件src/host/toast.ts:81
writeFileSync(file, `\uFEFF${script}`, 'utf8') - 执行外部命令来自配置/变量src/host/toast.ts:91
execFile(WINDOWS_POWERSHELL, [ - 删除本地文件递归src/host/toast.ts:96
try { rmSync(dir, { recursive: true, force: true }) } catch { } - 执行外部命令固定命令src/host/toast.ts:106
execFile('osascript', ['-e', command], () => { }) - 执行外部命令固定命令src/host/toast.ts:111
execFile('notify-send', [title, body], () => { }) - 读取本地文件src/host/upgrade.ts:152
if ((candidate.includes('\\') || candidate.includes('/')) && existsSync(candidate)) return candidate - 读取本地文件src/host/upgrade.ts:178
if (binScript !== '' && existsSync(binScript)) {
扫描于 2026/11/2(1 天前) · 范围 入口闭包 + 全包扫描 · 来源 npm 发布包
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
依赖的 DSH / Cordis 模块
@deepseek-ai/cordis@deepseek-ai/dsh-client-connection@deepseek-ai/dsh-client-locale@deepseek-ai/dsh-client-runtime@deepseek-ai/dsh-client-ui-conversation@deepseek-ai/dsh-client-ui-settings@deepseek-ai/dsh-client-ui-settings-plugins@deepseek-ai/dsh-client-ui-slots@deepseek-ai/dsh-host-webserver@deepseek-ai/dsh-settings给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
功能亮点
- 回复提问审批通知
- 系统原生toast提醒
- 会话内梯子目录导航
README
由 DeepSeek 最新模型翻译生成dsh-session-buddy(会话助手 @Shrbuz)
[!WARNING]
本项目已停止维护。
dsh web 后续已自带本插件当初想补齐的能力,因此它已经没有太大存在的意义。开发已停止:不再更新、不再发版、不再提供支持,issue 与 PR 可能无人处理。
仓库仅作留存参考——代码、已发布的 npm 包与本文档均就此冻结。若你仍想使用,请将其视为无人维护的软件,并在依赖前先核对其与你当前 dsh 版本的兼容性。
为 DeepSeek Harness Web GUI(dsh web) 提供会话通知 + 会话内梯子目录。AI 回复完成 / 向你提问 / 需要你确认执行时,标签页切走也能收到提醒;对话侧边以紧凑的梯子目录快速定位历史提问。
展开完整文档(README 剩余 1 节)
dsh-session-buddy(会话助手 @Shrbuz) [!WARNING] 本项目已停止维护。 dsh web 后续已自带本插件当初想补齐的能力,因此它已经没有太大存在的意义。开发已停止:不再更新、不再发版、不再提供支持,issue 与 PR 可能无人处理。 仓库仅作留存参考——代码、已发布的 npm 包与本文档均就此冻结。若你仍想使用,请将其视为无人维护的软件,并在依赖前先核对其与你当前 dsh 版本的兼容性。 为 DeepSeek Harness Web GUI(dsh web) 提供会话通知 + 会话内梯子目录。AI 回复完成 / 向你提问 / 需要你确认执行时,标签页切走也能收到提醒;对话侧边以紧凑的梯子目录快速定位历史提问。 由 dsh + Deepseek-V4-Flash 独立完成 功能 会话通知 - 三类触发点(各自独立开关): - reply:AI 回复完成 - ask:AI 明确向你提问(ask_user 工具)——普通回复结束不会误报 - confirm:有待确认的命令审批(审批对话框) - 回复完成时只要这轮回复期间你离开过页面就提醒;全程看着则不打扰 - 宿主事件驱动 + 跨标签页:触发点来自会话事件日志(回合完成 = reply、ask_user 工具 = ask、审批请求 = confirm),经 SSE 推送给所有打开的标签页;每条事件最多弹一次系统 toast——已通知台账在 toast 路由处做跨标签页/跨刷新去重;SSE 断连时回退到前端 DOM 观察 - 系统原生 toast(Windows PowerShell WinRT / macOS osascript / Linux notify-send,无需浏览器权限、不受 Chrome 横幅压制)+ 红点 favicon 与 (●) 标题标记 + 可选提示音 - 通知标题为「工作区 · 会话标题」;每轮回复只提醒一次 梯子目录 - 对话右侧可折叠目录,按时间列出每轮用户提问 - 未 hover 时是细圆条(无文字、不拥挤),会话再多也清爽 - 悬停梯级弹出浮层 tooltip(序号 + 提问摘要 + 时间);点击梯级滚动定位到该提问并高亮闪烁 - scrollspy 高亮当前所在提问;未在底部时显示「跳到最新」按钮 - 被隐藏的早期历史通过「+更早」footer 按需翻页载入 - 会话少于两个回合时自动隐藏 - 目录锚定在对话界面右缘并始终跟随:侧边栏展开/收起挤压对话宽度时,目录随之移动(事件驱动,空闲零开销) 应用内升级 - 设置卡片显示当前版本,可检查 npm 官方源上的最新版本 - 一键通过官方 dsh plugin add CLI 升级(完成后需重启 dsh web 生效) 会话清理 - 损坏会话(历史无法通过 dsh 自身的加载校验,例如某条 tool/result 被写入空工具调用 id、dsh 读不回来)会在会话行显示一个警告小标识 - 会话行的三点菜单新增「删除会话」:确认后该会话数据被永久删除、释放磁盘——dsh 本身只有分叉/归档(归档不删文件) - 当前正在打开的会话不显示删除项,host 侧也会拒绝删除 live 会话 工具操作折叠 - 每轮回复结束后,该轮执行的工具操作(Pwsh / Think / Write / Grep / Edit / Read …)自动折叠成一行 「共执行 X 步操作」,总结内容直接可见 - 点击该行可展开查看每一步的具体卡片(展开/收起状态按会话记忆) - 只有真正结束的回合才会折叠(进行中的回合完整显示);可在设置卡片关闭该功能,恢复始终展示所有工具调用 过程折叠 - 折叠思考块 + 过程小结 —— 每轮结束后,该轮反复出现的「Think」思考块、穿插其中的文字「小结」与上下文注入,合并为一行 「共 N 次思考」(该轮最终总结保留可见);点击可展开查看 - 折叠过长的提问 —— 提问文字超过 6 行时(例如整段日志粘进提示词),默认只显示前 6 行并带底部渐隐,下方提供 「展开全文」 条;点击展开全文 - 每个折叠面在设置卡片都有独立开关(折叠工具操作 / 折叠思考块 / 折叠长提问),展开/收起状态按会话记忆 安装 从 npm dsh plugin --profile web add dsh-session-buddy 从本地目录(开发) dsh plugin --profile web add link: 安装完成后重启 dsh web,在 设置 → 插件 → 插件配置 →「会话助手 @Shrbuz」中配置。 升级 两种升级到新版本的方式: 命令行 dsh plugin --profile web update dsh-session-buddy 插件以语义化版本范围(^0.x.y)安装,dsh plugin update 会自动升到最新的兼容版本。要强制指定版本: dsh plugin --profile web add dsh-session-buddy@ 应用内 打开插件设置卡片 →「版本与升级」→「检查更新」,发现新版本后点「升级」。 无论哪种方式,升级后请重启 dsh web 以加载新版本。 使用 通知 - 在插件设置卡片中开关三类触发点、提示音与总开关 - AI 回复期间切走标签页,完成后会收到系统原生 toast;AI 提问或需要审批时,标签页隐藏也会收到提醒 梯子目录 - 悬停右侧目录预览各提问;点击梯级跳转定位 - 用「+更早」footer 翻出被隐藏的历史;「跳到最新」按钮一键滚到底部 - 梯级长度、tooltip 是否显示时间戳可在设置卡片中调整 - 梯级很多超出目录高度时,滚动条自动隐藏,顶部/底部出现渐隐光影提示上下还有更多;「+更早」固定在底部、始终可达 升级 - 见上方「升级」一节——通过 dsh plugin update 或在设置卡片(「版本与升级」)操作 工作原理 | 层 | 实现 | | 通知 | 宿主监听会话事件日志,把 reply/ask/confirm 触发经 SSE(/api/session-buddy/events)推送给每个标签页;已通知台账在 loopback-only 的 /api/session-buddy/toast 路由处做跨标签页/跨刷新去重(每条事件最多一个系统 toast)。SSE 断连时回退到前端 DOM 观察(MutationObserver + 官方锚点 + composer 停止按钮运行信号) | | 目录 | 梯级来自官方 sessions 服务快照(与渲染的 DOM 无关);dsh 会话历史是分页窗口,目录按需翻入被隐藏的历史,并通过官方锚点 key 与 DOM 对齐 | | 升级 | 宿主读取 https://registry.npmjs.org/dsh-session-buddy/latest(离线时静默失败),实际升级由官方 dsh plugin CLI 执行 | | 会话清理 | 宿主经 sessionPersistence 列会话、复刻 dsh 自身的加载期消息校验来标记损坏,删除时通过持久化服务 locate() 解析会话目录(不信任用户输入路径);前端标记损坏行并注入菜单删除项 | | 操作折叠 | 纯前端 DOM 遍历官方锚点行:tool-call 行按包裹它的 turn-tail 行分组(tail 只在 turn/end 后发布,因此恰好在该回合结束时折叠),每组折叠成一行「共执行 X 步操作」,展开/收起状态按会话记忆 | | 过程折叠 | 同一套官方标记遍历把该轮的 assistant-step 行(思考块 + 文字「小结」+ 上下文注入)按 turn-tail 分组为「共 N 次思考」条,最终总结保持可见;过长的 user 行被限制到 6 行并带展开条。两者在官方标记消失时静默降级 | | 目录定位 | 目录在窗口 resize、容器/祖先 resize 与 DOM 变更时重新读取对话滚动区右缘(合并为每帧一次),因此始终随对话宽度移动 | 界面主题自适应,全部使用官方 --dsw-alias-* 设计令牌。 限制 - 系统原生 toast 依赖系统通知设置;红点 favicon / 标题标记始终作为并行兜底 - 「每条事件最多一次系统 toast」的去重只作用于宿主事件驱动链路;该链路不可用时(旧宿主、或 SSE 断连)回退的 DOM 监听仍按标签页各自通知,同一事件下多个隐藏标签页可能各弹一次 toast - 会话删除是永久操作(无回收站);「删除会话」只在能识别出会话菜单 DOM 时注入,识别不到会静默降级 - 所有折叠功能都依赖官方 data-chat-flow-kind / data-chat-anchor-key 标记(提问折叠额外依赖 _text_ 类);若未来 dsh 移除这些标记,插件会静默停止折叠(绝不隐藏无法可靠归属到已结束回合的行) - 升级需要重启 dsh web 后生效 开发 pnpm install pnpm build # tsc -b && tsdown → lib/ pnpm typecheck 回归脚本: node scripts/smoke-host.mjs # host 逻辑冒烟(无 web) node scripts/verify-live.mjs # 活体验证(boot graph + bundle + 路由) node scripts/verify-outline.mjs # CDP:恢复会话→翻出隐藏历史→梯级点击/闪烁 node scripts/verify-tooltip.mjs # CDP:翻页后梯级的 hover tooltip node scripts/verify-notify.mjs # CDP:隐藏标签页时通知触发(可见时不打扰) License Apache-2.0
预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
Shrbuz/dsh-session-buddy
DeepSeek Harness 插件:回复、提问、审批三类会话通知(系统原生 toast)+ 会话内梯子目录导航。
相关插件 · UI / 主题
破甲增强版JeffKeeping/dsh-purge-plus
dsh-purge 的非官方分支fork:适配 DeepSeek Harness 0.2.1-rc.2、破甲内核…
★ 387已汉化DeepSeek 客户端
71.9
无代码业务系统平台nocobase/nocobase
NocoBase 是什么
★ 24,804已汉化DSH
71.8
1Panel 服务器面板1Panel-dev/1Panel
全球 250 万+ 自托管用户共同喜爱。
★ 37,344已汉化DSH
71.5
终端编码代理esengine/DeepSeek-Reasonix
· 指南 · ACP · 扩展开发 · 规格 · 官方网站 · Discord · QQ
★ 36,045已汉化DSH
71.2
工作状态行动态ccch1mneyyy/working-activity
作者:chimney@ccch1mneyyy。社区项目,非 DeepSeek 官方项目。
★ 664已汉化DSH
71.2
多模型配置管家farion1231/cc-switch
跨平台桌面一体化助手,支持 Claude Code、Codex、OpenCode、DeepSeek Harness 等工具,唯一官网 ccswitch.io
★ 151,202已汉化DSH
71.1