deepseek-harness
deepseek-ai
DeepSeek Harness: Everything is a Plugin.
PROJECT TOPICS
PROJECT README
English: README.en.md
一个 DeepSeek Harness 插件,将你与 dsh 的交互状态实时镜像到本地 Discord 客户端的 Rich Presence 上——而且只会推送模糊的、可自定义的状态文案。
这是一个宿主侧后台插件:无托盘图标、无界面、无窗口。安装后即注入到 dsh 的启动流程中,随 dsh 一起常驻运行。
插件监听运行中 dsh 的粗粒度活动信号:
| dsh 信号 | 状态示例(默认) |
|---|---|
| 用户消息进入 agent 收件箱 | 正在指挥大肥鱼干活 / 正在给大肥鱼喂 token |
| agent 正在运行(思考 / 流式输出) | 正在与大肥鱼一起 Brainstorming / 正在听大肥鱼讲解 Project |
| 模型工具正在执行 | 正在提交改动意见 |
| 创建了新会话 / 分支(分支对话) | 正在创建大肥鱼记忆切片 |
| 无活动 | 大肥鱼待命 |
上面每一行都是插件配置(statuses)中可直接编辑的列表。插件只会把这些字符串原样发给 Discord。
默认情况下,插件只推送上面的模糊状态。在设置 → 通用设置 → Rich Presence 丰富状态里可以打开丰富模式。开启后,插件改为推送更智能、带实时数据的状态行:
| 实时数据 | 状态示例 |
|---|---|
| 你刚发送了消息 | 正在指导大肥鱼 |
| agent 正在思考 | 大肥鱼正在思考 6/195 |
| 总输入 tokens | 大肥鱼正在记笔记 38.7M |
| LLM 已思考时长 | 大肥鱼已经思考了 30m46s |
丰富模式的状态是智能随机地从当前实时数据中挑选的——并不绑定某个特定时刻——并且每个状态在 Discord 上至少展示 8 秒。
数据始终关联你当前正在交互的会话:插件会跟踪你最后一条真实输入(source.kind === 'user')所在的会话,思考步数、token 数、思考时长都只从那个会话采集——子代理、后台会话、其他工作区的数据不会被混入。当你切换会话继续交互时,推送的数据会自动跟着切换。该开关运行时持久化在 discord-richpresence 设置命名空间中,无需在 patch 里配置。
插件绝不读取你的工作区内容。 它不会查看会话标题、消息正文、文件路径、工具输入输出或任何其他内容,只响应粗粒度的生命周期信号(agent/inbox/inserted、agent/status、agent/pre-step、tools/pre-execute、session/created、workflow/start),然后推送配置好的状态字符串(或上面那些只填入标量数据的丰富模板——不含任何内容)。即使保持默认列表,Discord 上也只会出现"正在指挥大肥鱼干活"这样的模糊状态。
latest 稳定版 0.1.5-rc.2 以及预览版 0.1.6-alpha.2,同时兼容更早的 0.1.1-rc.2)。插件在运行时探测 Harness 提供的能力,无需按版本切换:
| Harness 版本 | 设置注册路径 | 客户端 store |
|---|---|---|
0.1.5+(含 latest 0.1.5-rc.2、0.1.6-alpha.2) |
ctx.settings.installSection(...) |
@deepseek-ai/dsh-client-store |
0.1.1-rc.1 ~ 0.1.4 |
ctx.settings.register(...) |
@deepseek-ai/dsh-client-runtime/client |
| 两者都不可用时 | 回退到组合配置值 | 内置最小 store 实现 |
插件在启动时自动探测当前 Harness 提供的 API,因此升级 Harness 后无需改动插件配置。如果你还在旧版 Harness 上(如 0.1.1-rc.2),插件同样工作;升级 Harness 后请按升级一节重启 dsh 并刷新页面。
Discord Application ID 已预置在插件中,无需任何配置——安装并重启后,状态就会自动出现在你的 Discord 个人资料上。
仓库:https://github.com/0QwQ0/dsh-discord-richpresence 发布包:https://github.com/0QwQ0/dsh-discord-richpresence/releases/latest/download/dsh-discord-richpresence.tgz
在 dsh 检出目录 / profile 下执行:
dsh plugin --profile web add https://github.com/0QwQ0/dsh-discord-richpresence/releases/latest/download/dsh-discord-richpresence.tgz
如果包已在本地磁盘上(例如本仓库):
dsh plugin --profile web add link:/absolute/path/to/dsh-discord-richpresence
所有配置都位于 bundle patch(cordis.patch.yml)的 config 下:
config:
clientId: '1540732930127691807' # 已预置,通常无需修改
details: 'DeepSeek Harness' # 可选:第二行文字
largeImage: '' # 可选:Discord 大图资产 key
statuses: # 可编辑的状态列表,按阶段分组
userInput:
- 正在指挥大肥鱼干活
- 正在给大肥鱼喂 token
agentWorking:
- 正在与大肥鱼一起 Brainstorming
- 正在听大肥鱼讲解 Project
tools:
- 正在提交改动意见
forking:
- 正在创建大肥鱼记忆切片
idle:
- 大肥鱼待命
randomize: false # true 时随机选取,否则轮流
minIntervalMs: 5000 # 两次推送之间的最小间隔
reconnectMs: 15000 # Discord 断线重连的轮询间隔
statuses — 每个阶段都是一个列表;插件按顺序轮流选取(randomize: true 时随机)。可以自由增删、改写。minIntervalMs 用于限制推送频率。dsh plugin --profile web remove dsh-discord-richpresence
基本可以,但有一处已知残留:
| 项目 | 卸载后的状态 |
|---|---|
dsh.profile.bundles 条目 |
✅ 自动移除 |
dependencies(package.json) |
✅ 自动移除 |
| 宿主插件(事件监听、Discord RPC) | ✅ 停止(重启 dsh 后完全退出) |
| 浏览器设置开关(client bundle) | ✅ 移除(刷新页面后消失) |
node_modules 中的链接 |
⚠️ 可能残留一个空 junction(pnpm link 安装时的物理文件,不影响运行,可手动删除) |
settings.yaml 中的 discord-richpresence: 段 |
⚠️ 残留(settings 服务只注销命名空间注册,不删除用户设置文档) |
唯一需要手动处理的是 settings.yaml。如果希望彻底恢复安装前的状态,编辑 $DSH_HOME/settings.yaml,删除这段:
discord-richpresence:
richMode: true
删除后该设置不会再影响任何东西(插件已卸载,没有消费者读取它);留着也无害——重装插件时会重新读取。
插件同包名覆盖安装即可升级,不需要先卸载:
dsh plugin --profile web add https://github.com/0QwQ0/dsh-discord-richpresence/releases/latest/download/dsh-discord-richpresence.tgz
dsh 会用新 tarball 覆盖旧包并保持 dsh.profile.bundles 条目不变。
你本机是 link: 方式安装(指向插件源码目录):
dsh plugin --profile web add link:/absolute/path/to/dsh-discord-richpresence
升级源码后重启 dsh 即可生效(link 指向同一目录,代码即最新版)。
/plugins/dsh-discord-richpresence/client.js 会重新拉取,新版设置开关才会出现)。settings.yaml 中的 discord-richpresence: richMode: <true/false> 会跨版本保留——升级前开启的丰富模式,升级后依然是开启的,无需重新配置。插件会自动适配新的 settings API 与客户端 store 包,你不需要改插件配置:
dsh plugin 管理的 profile 会随 Harness 版本更新其内置包)。ctx.settings 提供的是哪一代 API 并选择对应注册路径。若升级 Harness 后设置开关消失,通常是浏览器仍在用旧的 client bundle——再刷新一次页面即可;仍不行则重启 dsh。
如果升级后开关不回弹但状态异常,或想回到干净状态,可先完整卸载(含手动清理 settings.yaml 残留),再重新安装最新版。
lib/discord-rpc.js — 零依赖的 Discord Rich Presence 客户端,基于本地 IPC 帧协议(用 client_id 握手,然后发送 SET_ACTIVITY 帧;含 ping/pong 保活与自动重连)。lib/index.js — Cordis 宿主插件。注册粗粒度宿主事件的全局监听器,映射到配置好的状态列表(或丰富模式模板),再通过 RPC 客户端推送。设置注册在运行时探测 Harness 提供的是 installSection(0.1.5+)还是 register(0.1.1)并选择对应路径;丰富模式读取 discord-richpresence 设置命名空间;插件纤维卸载时会清理所有定时器并关闭 socket。lib/client.js — 浏览器半部。注册设置 → 通用设置里的切换行,写入 discord-richpresence 设置命名空间的 richMode 字段。store 实现按 @deepseek-ai/dsh-client-store(0.1.5+)→ @deepseek-ai/dsh-client-runtime/client(0.1.1)→ 内置实现的顺序解析。MIT
CLASSIFICATION EVIDENCE
系统优先读取 GitHub Topics,再与站内分类词典和词根规则比对。当前命中: 无有效分类标签。