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

macOS 通知 CrombastiC/dsh-macos-notify

DeepSeek 客户端
CrombastiC36 天前有提交已提供中文文档扫描:含敏感能力兼容 / 相关生态

对话完成或出错时弹出系统通知,并按事件区分提示音

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

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

相关生态插件(非 dsh 原生,按其对应运行时安装)
git clone https://github.com/CrombastiC/dsh-macos-notify.git

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:仅索引
是什么
生态应用
桌面端 / Web 外壳,不以 dsh plugin add 安装
装得上吗
本站尚未做安装检查
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
更新放缓:最近一次提交在 36 天前
档位由哪些信号合成

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

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

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

可执行外部命令读写/删除本地文件
查看扫描证据(共 21 处,展示前 21 条)
  • 读取本地文件
    index.js:102
    const parsed = JSON.parse(await readFile(soundRegistryPath(), 'utf8'))
  • 写入本地文件
    index.js:112
    await mkdir(resolve(path, '..'), { recursive: true })
  • 写入本地文件
    index.js:113
    await writeFile(path, `${JSON.stringify(entries, null, 2)}\n`, { mode: 0o600 })
  • 读取本地文件
    index.js:124
    const info = await stat(path)
  • 写入本地文件
    index.js:159
    await mkdir(dir, { recursive: true })
  • 读取本地文件
    index.js:160
    const existing = new Set((await readdir(dir)).map((item) => item.toLowerCase()))
  • 写入本地文件
    index.js:216
    await writeFile(input, bytes)
  • 读取本地文件
    index.js:220
    const outputInfo = await stat(output)
  • 写入本地文件
    index.js:229
    await copyFile(output, destination.path, fsConstants.COPYFILE_EXCL)
  • 写入本地文件
    index.js:230
    await chmod(destination.path, 0o644)
  • 删除本地文件
    index.js:240
    await rm(destination.path, { force: true })
  • 删除本地文件递归
    index.js:245
    await rm(tempDir, { recursive: true, force: true })
  • 删除本地文件
    index.js:260
    await unlink(target)
  • 读取本地文件
    index.js:281
    const info = await stat(candidate)
  • 读取本地文件
    index.js:302
    const entries = await readdir(dir, { withFileTypes: true })
  • 执行外部命令固定命令
    index.js:330
    execFile('osascript', ['-e', buildNotificationScript(title, body, sound)], (err) => {
  • 执行外部命令固定命令
    index.js:371
    execFile('ioreg', ['-c', 'IOHIDSystem', '-d', '1'], (err, stdout) => {
  • 读取本地文件
    src/state.js:44
    return sanitizeState(JSON.parse(readFileSync(file, 'utf8')))
  • 写入本地文件
    src/state.js:55
    await mkdir(dirname(file), { recursive: true })
  • 写入本地文件
    src/state.js:56
    await writeFile(temp, payload, { mode: 0o600 })
  • 写入本地文件
    src/state.js:57
    await rename(temp, file)
扫描于 2026/11/2(1 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库

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

依赖的 DSH / Cordis 模块
@deepseek-ai/schemastery
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

README

由 DeepSeek 最新模型翻译生成
dsh-macos-notify 为 DeepSeek Harness 提供原生 macOS 通知,支持按事件区分提示音、通知过滤、多任务合并,并在 DSH Web UI 中提供一级设置页。 功能 - 一轮对话完成、失败、被阻塞或等待审批时,通过通知中心弹出提醒。 - 完成、错误、中止、审批四类事件各有独立提示音;任一事件都可静音。 - 支持系统提示音选择器、在页面内用 afplay 试听,并可在 Web 设置页导入和删除自定义提示音。 - 导入的自定义提示音会转成 AIFF,限制为 5 MB、10 秒,最多管理 20 个文件 / 总计 50 MB,存放在 ~/Library/Sounds。 - 1.5 秒合并窗口和可选的摘要模式,避免并行任务刷屏通知中心。 - 最近通知诊断会说明事件是已发送、已排队、已抑制还是失败;重启后仍然保留。 - 六事件测试矩阵,覆盖完成、错误、审批、中止、合并、摘要六类通知。 - 支持每日免打扰时段,以及自定义时长的临时暂停,并显示剩余时间。 - 常用开关和提示音选择器在只读视图下即时保存;数字输入会自动限制在安全范围内。 - 重复错误抑制,支持配置冷却窗口,并对易变片段做归一化。 - 项目路径规则:可静音、只提醒错误,或让重要项目绕过限制。 - 最短轮次时长过滤,避免近乎即时的回复也触发通知。
展开完整文档(README 剩余 1 节)
dsh-macos-notify

为 DeepSeek Harness 提供原生 macOS 通知,支持按事件区分提示音、通知过滤、多任务合并,并在 DSH Web UI 中提供一级设置页。

功能

- 一轮对话完成、失败、被阻塞或等待审批时,通过通知中心弹出提醒。
- 完成、错误、中止、审批四类事件各有独立提示音;任一事件都可静音。
- 支持系统提示音选择器、在页面内用 afplay 试听,并可在 Web 设置页导入和删除自定义提示音。
- 导入的自定义提示音会转成 AIFF,限制为 5 MB、10 秒,最多管理 20 个文件 / 总计 50 MB,存放在 ~/Library/Sounds。
- 1.5 秒合并窗口和可选的摘要模式,避免并行任务刷屏通知中心。
- 最近通知诊断会说明事件是已发送、已排队、已抑制还是失败;重启后仍然保留。
- 六事件测试矩阵,覆盖完成、错误、审批、中止、合并、摘要六类通知。
- 支持每日免打扰时段,以及自定义时长的临时暂停,并显示剩余时间。
- 常用开关和提示音选择器在只读视图下即时保存;数字输入会自动限制在安全范围内。
- 重复错误抑制,支持配置冷却窗口,并对易变片段做归一化。
- 项目路径规则:可静音、只提醒错误,或让重要项目绕过限制。
- 最短轮次时长过滤,避免近乎即时的回复也触发通知。
- 可选在 Web 标签页获得焦点时抑制通知,以及按 macOS HID 空闲时间决定是否提醒。
- 针对 API 速率限制提供专门措辞,并在可用时给出服务商的重试时间。
- 为支持的终端提供 OSC 9 通知,包括 tmux DCS passthrough。
- 设置实时生效,无需重启 DSH。

环境要求

- macOS
- Node.js 22 或更高版本
- 带 web 配置档的 DeepSeek Harness

安装

安装已发布的 npm 包:

npx -y @deepseek-ai/dsh plugin --profile web add dsh-macos-notify
npx -y @deepseek-ai/dsh web

也可以直接从 GitHub 安装最新源码:

npx -y @deepseek-ai/dsh plugin --profile web add github:CrombastiC/dsh-macos-notify

完整 git URL 写法效果相同(安装 main 的快照):

npx -y @deepseek-ai/dsh plugin --profile web add https://github.com/CrombastiC/dsh-macos-notify

然后从一级设置导航打开 Settings → macOS notifications。

卸载插件:

npx -y @deepseek-ai/dsh plugin --profile web remove dsh-macos-notify

本地开发安装

在本仓库的检出目录中执行:

npx -y @deepseek-ai/dsh plugin --profile web add .
npx -y @deepseek-ai/dsh web
dsh plugin 把相对路径锚定到调用目录,并把安装转发给所选配置档里的 pnpm。不要在 cordis.dev.yml 里用绝对路径做 bundle 覆盖;改用 plugin add 安装本地包。

配置

设置命名空间是 macos-notify。从 Web 卡片改动的值会实时生效。

| 选项 | 默认值 | 说明 |
| onCompleted | true | 一轮正常完成时通知。 |
| onError | true | 出错和被阻塞的轮次也通知。这类提醒绕过完成门槛和摘要合并。 |
| onAborted | false | 用户中止一轮时通知。 |
| onApproval | true | 工具等待审批时立即通知。 |
| minDurationSec | 30 | 完成通知的时长低于这个秒数就不发;0 关闭该阈值。 |
| onlyWhenIdleSec | 0 | 完成通知要求键盘/鼠标空闲达到这个秒数;0 关闭空闲门槛。 |
| onlyWhenUnfocused | true | 任一 DSH Web 标签页处于聚焦状态时,不发完成通知。 |
| digestMinutes | 0 | 把完成通知汇总成周期性摘要;0 表示立即发送。 |
| includeSubagents | false | 把子代理会话也纳入通知,而不是只通知顶层会话。 |
| channel | auto | auto、osascript 或 osc9。 |
| sounds.completed | Glass | 完成轮次的提示音。 |
| sounds.error | Basso | 错误、被阻塞的轮次和限流的提示音。 |
| sounds.aborted | 空 | 中止轮次的提示音;留空表示静音。 |
| sounds.approval | Ping | 审批请求的提示音。 |
| coalesceMs | 1500 | 合并同时到达的轮次结果的时间窗口;0 关闭合并。 |
| quietHoursEnabled | false | 启用每日本地时间免打扰时段。 |
| quietStart | 23:00 | 免打扰开始时间,本地 HH:mm 格式。 |
| quietEnd | 08:00 | 免打扰结束时间,本地 HH:mm 格式。支持跨夜区间。 |
| quietAllowCritical | true | 免打扰时段内继续发送错误、阻塞和审批提醒。 |
| pauseUntil | 0 | 临时暂停的截止时间,Unix 毫秒;由 Web 卡片里的快捷操作管理。 |
| duplicateWindowSec | 300 | 同一会话在这个窗口内的相同错误只发一次;0 关闭该限制。 |
| projectRulesJson | [] | 由 Web 卡片管理的项目规则。更具体的后代路径优先。 |

项目规则模式

- mute —— 屏蔽配置的项目路径下的所有通知。
- errors —— 只放行错误、阻塞事件和审批请求。
- important —— 绕过最短时长、聚焦、空闲、免打扰时段和临时暂停这几道过滤。
设置页保留最近 50 条决策、重复错误冷却状态和最近的会话标题,持久化到 ~/Library/Application Support/dsh-macos-notify/state.json,DSH 重启后依然存在。每行记录事件是已发送、已排队、已抑制还是失败,并附上原因。这段历史不含消息内容。

通知渠道

auto 在终端被识别为支持 OSC 9 时使用 OSC 9,否则回退到 osascript。

已识别的 OSC 9 终端包括 iTerm2、WezTerm、Kitty、Ghostty 和 Warp。tmux 会话会自动包进 DCS passthrough。

声音选择只对 osascript 渠道生效。用 OSC 9 时,是否播放通知声音、怎么播放,都由终端决定。

自定义声音

在设置页选择 Edit → Import sound。支持的输入格式包括 AAC、AIFF、CAF、FLAC、M4A、MP3、OGG、Opus 和 WAV。

写入用户声音目录之前,宿主会校验扩展名、解码后大小、转换后时长、受管文件数量和受管总大小。导入的文件用 macOS afconvert 转成 44.1 kHz 单声道 AIFF;afconvert 解不了的格式回退用 ffmpeg。已有文件绝不覆盖,改为追加数字后缀。

新导入的文件记录在 ~/Library/Application Support/dsh-macos-notify/sounds.json,可在设置页删除。如果某个声音正在使用,删除时会要求确认,并把受影响的事件改为静音。如果移除插件前没有先删除文件,文件会留在 ~/Library/Sounds。

已知限制

- 插件仅支持 macOS。原生通知用 osascript,自定义导入用 macOS 音频工具。
- OSC 9 的声音行为由终端决定,会忽略按事件选择的声音。
- Web 设置页走受信任的 /macos-notify RPC 通道,因为当前 DSH Web 设置代理对内置设置设有命名空间允许列表。
- 只有 v0.2.0 及以后版本导入的声音才会被当作受管声音跟踪。更早手动复制或导入的文件仍可选用,但必须手动从 ~/Library/Sounds 删除。

开发

这个包刻意做成免构建:

- index.js —— 宿主插件,负责事件处理、通知投递、设置 RPC 和声音导入。
- client.js —— 手写的 DSH 客户端模块,负责焦点上报和一级 Web 设置页。
- src/policy.js —— 纯策略辅助函数(免打扰时段、项目规则、重复合并),有单元测试覆盖。
- src/state.js —— 带校验的原子持久化,用于诊断信息、重复状态和会话标题。
- cordis.patch.yml —— 配置档捆绑补丁。

运行发布检查:

node --check index.js
node --check client.js
npm test
npm pack --dry-run

中文说明

这是一个仅支持 macOS 的 DeepSeek Harness 通知插件。任务完成、出错、等待审批时,它会发送系统通知。它还支持通知诊断(跨重启持久化)、afplay 本地试听、测试矩阵、每日勿扰、自定义时长的临时暂停、自定义声音管理与导入指派、常用开关即时保存、重复错误抑制、项目路径自动补全、焦点抑制、合并通知和定时汇总。推荐从 npm 安装,也可以直接从 GitHub 安装最新版源码。

License

MIT © 2026 CrombastiC
预览分享卡片长什么样 ↓CrombastiC/dsh-macos-notify
分享 · DeepSeek Harness Hub
CrombastiC/dsh-macos-notify

对话完成或出错时弹出系统通知,并按事件区分提示音

这是你的仓库?认领条目

回到顶部