# DSH Notch [中文](README.md) · [English](README.en.md) **DSH Notch 是 DeepSeek Harness 的 macOS 插件。** 它把真实会话的运行状态、待回答问题和未读结果放在屏幕边缘:查看任务、直接回答问题、点击回到对应会话;空闲时显示待机机器人。 插件包含两部分:**装进 DSH 的 Host 插件**负责同步会话,**原生 Notch 程序**负责显示和交互。下面的安装步骤会装好这两部分。 ## 安装 **DSH Notch 0.3.4 支持官方 DeepSeek Harness `0.2.0-rc.2`。** 从 npm 安装 `dsh-notch@0.3.4` 和 `dsh-notch-focus@0.1.2`。原生 macOS 程序继续使用 0.3.3,包含在下面的发布页中。本次只调整 npm 打包和安装说明,运行代码与 0.3.3 相同。 ### 1. 下载发布包 从 [v0.3.4 Release](https://github.com/aa2246740/dsh-notch/releases/tag/v0.3.4) 下载: | 文件 | 用途 | | --- | --- | | `dsh-notch-0.3.4.tgz` | Host 插件,提供状态、问题和原生程序连接 | | `dsh-notch-focus-0.1.2.tgz` | 客户端同步助手,负责双向会话跳转与已读同步 | | `dsh-notch-0.3.3-macos-arm64.tar.gz` | macOS 14+、Apple Silicon 原生程序及机器人资源 | | `SHA256SUMS` | 下载校验;与上述文件放在同一目录后执行 `shasum -a 256 -c SHA256SUMS` | 预编译包无需 Swift 或 DSHX。其他架构需从源码构建,尚未提供验收过的预编译包。 ### 2. 在 DSH 安装两个插件包 **官方 Desktop:** 在应用内插件管理页分别输入 `dsh-notch@0.3.4` 和 `dsh-notch-focus@0.1.2`,确认都已启用,按应用提示完成加载,再重新打开页面。Desktop profile 由应用管理。 **Web:** 对运行中的 Host 使用相同的 `DSH_HOME`,在下载目录执行: ```sh dsh plugin --profile web add dsh-notch@0.3.4 dsh plugin --profile web add dsh-notch-focus@0.1.2 ``` 两个包都声明了官方 `dsh.bundle.patch`。按插件管理器的提示加载,并重新打开页面;不要再手工追加同名 `insert`。已有安装应更新原条目,避免 Bundle 与旧手动配置重复挂载。 Host 加载后生成 `$DSH_HOME/dsh-notch/runtime.json`。这是插件管理的私有连接文件,不需要填写或分享。找不到它时,先检查 Host 插件的加载错误。 ### 3. 解压并启动原生程序 ```sh tar -xzf dsh-notch-0.3.3-macos-arm64.tar.gz cd dsh-notch-0.3.3-macos-arm64 ./dsh-notch --verify-idle-resources ./dsh-notch ``` 资源检查应输出 `IDLE_RESOURCES=10/10`。首次运行请保持终端打开;如果已有桌面启动器管理 Notch,更新它使用的那份程序即可。移动时始终把 `dsh-notch` 和 `DshNotch_DshNotch.bundle` 放在一起。使用自定义 `DSH_HOME` 时,原生程序和 Host 必须指向同一 Home。 可在 Host 插件配置中把 `helperPath` 设为已解压的 `dsh-notch` 的绝对路径,让插件随 Host 管理辅助进程;配置后按应用的插件加载提示生效。请勿同时手工启动另一份。 ### 4. 确认同步正常 - 正在运行的主会话显示蓝色计数;完成、失败或等待回答显示对应状态。 - 点击 Notch 的会话,DSH 打开对应对话。 - 在 DSH 前台打开已完成的会话,Notch 清除该条未读状态;仍在运行的任务继续保留。 - 全部结果读完后,Notch 回到机器人待机。 Notch 跟随连接文件中的 Host 进程退出。临时请求失败不会让它退出;只关闭窗口而 Host 仍在后台运行时,它会继续显示任务。[桌面托管说明](desktop/README.md)介绍了辅助程序的退出与快速重启联动。 ## 使用 | 状态 / 操作 | 含义 | | --- | --- | | 蓝色数字 | 正在运行的会话数量 | | 黄色感叹号 | 有待处理的问题或决定 | | 绿色数字 | 未读的完成结果 | | 红色数字 | 失败结果 | | 点击问题选项 | 直接提交该选项;多选或多题按面板提示完成 | | 点击问题标题 | 回到 DSH 查看完整上下文 | | 全部结果读完 | 回到机器人待机 | | 拖动 Notch 后松手 | 弹性收纳到屏幕边缘;再拖出即可恢复 | | 隐藏时出现新完成、错误或待审批问题 | 自动弹回正常紧凑状态;同一提醒不会因轮询反复弹出 | 隐藏状态下,普通运行和尺寸更新不打扰你。鼠标正在拖动时收到新提醒,会先保持跟手,等松手再恢复。右侧系统 Dock 或显示工作区变化不会改变 Notch 对物理屏幕边缘的定位。 Notch 使用原生 AppKit / SwiftUI / Canvas 渲染。动画本身不调用模型。窗口随内容展开,达到屏幕高度上限后滚动;系统开启“减少动态效果”时呈现静态状态。 计数以用户的主对话为单位:workflow 和普通子代理(包括嵌套子代理)归到所属主对话,不会各自增加蓝色数字或生成完成、失败灯。后台子代理仍在工作时,主任务继续显示运行中;结果灯以主对话的最终结果为准。子代理需要你回答的问题会显示在主任务的黄色状态下,回答送回原请求,多个问题依次处理。用户手动 fork 出来的对话仍独立计数。 外部 Codex、Claude Code、ACP、DSH SDK 子代理转入官方后台任务后,也会归到所属主对话。Notch 只读取状态,不消费后台任务的完成通知。浏览器跳转和未加载会话的同步由 [dsh-notch-focus 助手](companions/dsh-notch-focus/README.md)提供;已有安装保留原目录更新即可。入口、取消与恢复路径的检查范围见[源码兼容性审计](docs/subagent-compatibility.md)。 ## 常见安装问题 | 现象 | 检查位置 | | --- | --- | | `plugin add` 成功,但没有 Notch | 第二步是否激活了 Host 插件,第三步是否启动了原生程序?两者都需要。 | | 只有机器人,真实任务不出现 | Host 插件是否加载、`runtime.json` 是否生成、当前 Host 是否仍在运行? | | 找不到 `dsh-notch` 模块 | 确认第一步和第二步使用同一个 `DSH_HOME` 与 `web` profile;本地源码目录不能删除或移动。 | | `IDLE_RESOURCES` 少于 `10/10` | 重新构建;移动程序时同时携带资源 bundle。 | | 屏幕上出现两个 Notch | 检查是否同时启动了手动版本和 App 壳管理的版本,只保留预期的那一份。 | | 更新源码后仍是旧效果 | 重新构建,并更新实际运行的可执行文件;只 `git pull` 不会替换已启动的原生进程。 | 若状态灯叠影、点击后才恢复,可按发生时间查看 `~/.dsh/dsh-notch/presentation.jsonl`。日志只记录计数、动画阶段、布局和进程编号,不记录对话正文、标题或认证信息;达到 256 KiB 后轮换,只保留当前和上一份。刷新时会检查过期的转场并补做收尾,菜单交互期间也继续推进状态与布局计时器。 当前 Host 插件依赖 `sessions`、`webServer`、`approval`、`userQuestions`、`agents` 服务,面向同一台 Mac 上的 DSH Web Host。原生界面的会话跳转优先唤起官方 `com.deepseek.dsh` 桌面版,并保留旧 `local.dsh.desktop` 壳的兼容。多 Home、远程 Host 和各版本 DSH 的兼容性不能只凭安装成功判断。 ## 更新与开发 更新已安装的源码后,重新构建原生程序。只改原生界面时,更新并重新启动 Notch 即可;若改了 `src/` 下的 Host 插件代码,先 `npm run build` 更新 `lib/index.mjs`,再做对应的服务端热加载。 使用 [dshx](https://github.com/aa2246740/dsh-external-plugin-devkit) 的维护者可先执行 `dshx activation-plan dsh-notch --change artifact` 或 `--change server`,按实际修改范围更新。激活要匹配实际 Host 和挂载方式,不能把复制原生二进制当作 Host 模块热更新。 从源码构建 Host 和原生程序需要 Node.js 24、Swift 6 / Command Line Tools: ```sh npm ci --ignore-scripts --legacy-peer-deps npm run build npm run build:macos ``` 同步助手的源码构建需要 DSHX 0.9.2 和已备好依赖的 `dsh-v0.2.0-rc.2` Harness checkout;步骤见[助手说明](companions/dsh-notch-focus/README.md)。预编译发布包不需要这些开发工具。 开发检查: ```sh npm ci --ignore-scripts --legacy-peer-deps npm test npm run test:outcome npm run test:motion npm run test:geometry npm run test:scrollbar npm run test:expanded-height npm run test:host-lifetime npm run test:idle npm run build:macos ``` 弹性收纳交互可在 [独立原生预览](tools/elastic-preview/README.md) 中试用;运行 `npm run build:elastic-preview` 构建,不连接 DSH、不调用模型,也不替换当前安装。 ### 录屏 Demo(可选) 用于开发、检查动画或录制演示视频,**不属于插件安装步骤**: ```sh npm run build:demo open "dist/DSH Notch Demo.app" ``` Demo 提供 36 个中英双语场景,使用本地假任务,不连接 DSH。录屏控制与快捷键见 [Demo 文档](tools/recording/README.md)。 更多:[动效说明](macos/STATUS-MOTION.md) · [设计说明](DESIGN.md) · [0.3.3 更新记录](docs/releases/v0.3.3.md) · [0.3.2 更新记录](docs/releases/v0.3.2.md) · [0.3.0 更新记录](docs/releases/v0.3.0.md) · [可选 App 壳诊断](tools/desktop-shell/README.md)。 ## 许可 [MIT](LICENSE)。机器人资源基于 [OpenBotMotion](https://github.com/aa2246740/open-bot-motion),保留了原始 [MIT 许可声明](tools/idle/LICENSE.open-bot-motion)。这是社区维护的 DSH 插件。 官方桌面版的原生启动适配与验证见 [0.1.7-rc.2 验证记录](docs/desktop-017rc2.md)。`DSH_NOTCH_RUNTIME_FILE` 只指定连接文件,绝不触发演示偏移;演示使用显式的 `--demo` 或 `--elastic-preview` 入口。