Discord 状态同步 nightfun-pixel/dsh-discord-presence
DeepSeek Harness在 Discord 里实时展示当前项目、耗时与 token 用量
30/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/10/1 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add nightfun-pixel/dsh-discord-presence该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:需留意
图例:✓ 通过! 需注意— 未判定 / 无数据· 「未判定」= 本站尚无数据,不代表插件有问题
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
功能亮点
- 展示当前项目
- 会话计时
- 模型与token计数
DeepSeek Harness 的 Discord Rich Presence:正在做的项目、会话计时、模型和 token 计数。零依赖。
README
由 DeepSeek 最新模型翻译生成DeepSeek Harness 的 Discord Presence
这个插件会在 Discord(Rich Presence)里显示 harness 正在运行:在哪个项目上干活、跑了多久、吃掉了多少 token、转了多少轮、调了多少次工具。你还可以让它写一份机器可读的 status.json,并在每轮结束时往 Discord 频道发一条 embed。
零依赖:只用 Node 标准库和 Discord 原生 IPC(Windows 上是命名管道,Linux/macOS 上是 unix socket)。不需要 discord-rpc,也没有任何东西要编译。
┌──────────────────────────────────────────────┐
│ default-workspace │ ← details
│ waiting for a task │ ← state
│ default-workspace · 0 turns · 0 tools │ ← largeText (hover) │ · session 06b20207 │ └──────────────────────────────────────────────┘
干活的时候:
┌──────────────────────────────────────────────┐
展开完整文档(README 剩余 1 节)
DeepSeek Harness 的 Discord Presence
这个插件会在 Discord(Rich Presence)里显示 harness 正在运行:在哪个项目上干活、跑了多久、吃掉了多少 token、转了多少轮、调了多少次工具。你还可以让它写一份机器可读的 status.json,并在每轮结束时往 Discord 频道发一条 embed。
零依赖:只用 Node 标准库和 Discord 原生 IPC(Windows 上是命名管道,Linux/macOS 上是 unix socket)。不需要 discord-rpc,也没有任何东西要编译。
┌──────────────────────────────────────────────┐
│ default-workspace │ ← details
│ waiting for a task │ ← state
│ default-workspace · 0 turns · 0 tools │ ← largeText (hover) │ · session 06b20207 │ └──────────────────────────────────────────────┘
干活的时候:
┌──────────────────────────────────────────────┐
│ dsh-discord-presence │
│ deepseek/deepseek-v4.1-flash · 1.2M tokens │ │ 4 turns · 17 tools · session 06b20207 │ └──────────────────────────────────────────────┘
卡片全英文、不带 emoji;项目名直接取文件夹原名,是什么语言就保留什么语言(default-workspace、мой-проект)。状态用单词写清楚:running —— harness 起来了,还没有会话;idle —— 有会话,但没动静;working —— 正在跑一轮;waiting for a task —— 会话存在,但还没干过活。俄文文案仍然可以通过 language: ru 启用,默认是英文。
Requirements
* Node.js 20+(harness 自带运行时,所以通常你已经有了)。
* 同一台机器上跑着 Discord 桌面版 —— 浏览器版不支持 Rich Presence。
* 一个 Discord Application ID —— 见下一节。
Quick start
1. 打开 <https://discord.com/developers/applications> → New Application → 名字随便起(比如 DeepSeek Harness)。它只是卡片的容器,不需要 bot。
2. General Information → Application ID → 复制。它是一个 18–19 位的数字。
3. 把它填进插件设置,两种方式都行:
* 图形界面:Settings → Plugins → discord-presence → Client ID 字段 → 保存;
* 文件:往 <DSH_HOME>\profiles\<profile>\cordis.patch.yml 里加一行覆盖配置:
- id: discord-presence
name: 'dsh-discord-presence'
config:
clientId: '123456789012345678'
4. 重启 harness:插件那一行在启动时从 dsh.profile.bundles 读取。
5. Discord 桌面版必须处于运行状态 —— 浏览器里 Rich Presence 不工作。
自定义图片(可选):在 application 里 → Rich Presence → Art Assets 上传一张 PNG,配一个 key,比如 harness,然后设置 largeImage: harness。也可以直接把图片的 https 链接填进 largeImage。留空表示不显示图片。
卡片里都放了什么
| 字段 | 来源 |
| project | 当前会话 cwd 的最后一段(子代理则取父项目) |
| workspace | 完整的 cwd |
| model / provider | session.requestContext() 和 request/context 事件 |
| tokens | 所有会话的总和:uncachedInput + cacheRead + cacheWrite + output |
| turns / steps / tools | 对 turn/、step/、tool/call 事件做折叠统计 |
| elapsed | 当前会话的存活时长(恢复的会话不早于进程启动时间) |
| uptime | harness 进程的存活时长 |
| sessions / subagents | 有多少会话活着,其中多少是子代理 |
| status | running / idle / working / waiting for a task |
当前会话这样挑:先选正在跑 turn 的那个,否则选最新的根会话(子代理永远不会成为卡片标题)。
如果 composition 里有 tokenUsage 投影(ctx.sessionProjections),计数器就取自它 —— 那是服务商的官方数字。没有投影时,插件自己从 assistant/message 事件里统计。status.json 会显示用了哪个来源:usage.source = projection 或 fold。
设置
每个字段都是实时生效的(改完不用重启),设置卡片里就有说明。
| 键 | 默认值 | 作用 |
| enabled | true | 是否在 Discord 里显示 harness |
| clientId | '' | Application ID;没有它就没有卡片 |
| language | en | 卡片语言:en 或 ru。项目名不翻译 |
| showModel | true | 显示模型 |
| showTokens | true | 显示 token |
| showTurns | true | 显示 turn 数量 |
| showTools | true | 显示工具调用次数 |
| detailsTemplate | '' | 完全替换第一行(见占位符) |
| stateTemplate | '' | 完全替换第二行 |
| largeImage | '' | application 里的 asset key,或 https 链接 |
| largeText | '' | 图片的提示文字;留空则用内置摘要 |
| showButton | false | 一个「Open DSH」按钮,链接到 web UI(DSH_WEB_URL) |
| webhookUrl | '' | Discord 频道 webhook:每完成一轮发一条 embed |
| webhookOnTurnEnd | true | 在 turn/end 时发送 webhook |
| webhookOnSessionStart | false | 在会话开始时发送 webhook |
| statusFile | true | 写入 status.json |
| statusFilePath | '' | 自定义路径;留空则用 <DSH_HOME>/discord-presence/status.json |
| minUpdateIntervalMs | 15000 | 卡片更新的最小间隔(Discord 每 20 秒约接受 5 次);0 关闭限流 |
| tickIntervalMs | 30000 | 没有事件发生时,多久刷新一次卡片和文件(最小 5000) |
模板占位符
{project} {workspace} {model} {provider} {tokens} {tokensIn}
{tokensOut} {turns} {steps} {tools} {session} {agent} {status} {elapsed}
{uptime} {sessions} {subagents} {discord}
{session} 是 id 的最后 8 个字符,{tokens} 会缩写(1.2M、17k)。空的部分会连同它前面的 · 分隔符一起丢掉,所以模板不会留下孤零零的点。Discord 会把一行截到 128 个字符——插件自己会先截断。
状态文件
默认路径:<DSH_HOME>\discord-presence\status.json(在 Windows 上类似 C:\Users\<you>\.dsh\discord-presence\status.json)。写入是原子的(tmp + rename),每秒最多一次,写入失败绝不会拖垮插件。
{
"plugin": "dsh-discord-presence",
"version": "1.0.0",
"updatedAt": "2026-09-30T17:42:49.377Z",
"harness": { "pid": 15508, "uptimeMs": 33981, "uptime": "33s" },
"discord": { "enabled": true, "clientId": "missing", "state": "unconfigured", "ready": false },
"activity": { "details": "default-workspace", "state": "waiting for a task" },
"sessions": { "live": 1, "subagents": 0, "active": "session-…", "all": [ /* per session / ] },
"project": { "name": "default-workspace", "cwd": "C:\\…", "agentPreset": "standard" },
"usage": { "total": 0, "input": 0, "output": 0, "cacheRead": 0, "cacheWrite": 0, "source": "fold" },
"counts": { "turns": 0, "steps": 0, "tools": 0, "retries": 0, "interruptions": 0 },
"webhook": { "configured": false, "sent": 0, "skipped": 0 },
"diagnostics": [ / the last 40 lines of the plugin log / ]
}
这个文件对 OBS、Stream Deck、你自己的脚本或别的插件都很好用——比如画一个「本场直播吃掉了多少 token」的浮层。webhook URL 绝不会写进文件:只保留它的 host,path 会被抹掉。
文件
| 文件 | 里面是什么 |
| index.js | cordis 插件:设置 schema、会话事件订阅、卡片组装、状态文件、webhook |
| lib/discord-ipc.js | 传输层:管道发现 discord-ipc-0..9、opcode\|length\|json 分帧、握手、重连、限流 |
| lib/session-tracker.js | 把事件纯折叠成计数器:token、轮次、工具、活跃会话选择 |
| lib/presence.js | 卡片渲染:行、模板、复数形式、时长与 token 格式化 |
| lib/status-file.js | 原子写入 status.json |
| lib/webhook.js | 限流发送 embed |
| cordis.patch.yml | bundle 插入到配置档组合中的那一行 |
| test/ | 测试(见下文) |
测试
cd <path to the plugin>
node test/presence.test.mjs # 23 — rendering, plurals, templates, toggles
node test/ipc.test.mjs # 12 — framing, handshake, CLOSE, reconnect
node test/plugin.test.mjs # 13 — the whole plugin: mock Discord + a local HTTP receiver
三个测试套件都自包含:各自启动自己的命名管道和 HTTP 服务器,绝不访问外部,跑完自己清理(进程自行退出,不需要 --test-force-exit)。
还有一个针对真实 Discord 的实时传输检查:
node test/probe-live-discord.mjs <ApplicationID>
脚本连接真实管道,完成握手,设置一张卡片然后清除。用假 id 时 Discord 会回 CLOSE 4000 Invalid Client ID —— 这也是个有用的结果。
安装与移除
从 GitHub 安装(仓库是公开的):
dsh plugin --profile web add github:nightfun-pixel/dsh-discord-presence
本地开发 —— 对仓库克隆做 link 依赖:
dsh plugin --profile web add "link:D:/path/to/dsh-discord-presence"
这里的 dsh 就是 node '<DSH_HOME>\..\app\node_modules\@deepseek-ai\dsh\lib\bin.js';plugin 子命令只是把 pnpm 代理到配置档目录。命令本身会把包加到配置档 <DSH_HOME>\profiles\<profile>\package.json 的 dependencies 和 dsh.profile.bundles 里,并在 node_modules\ 中创建 junction。link 依赖里的改动无需重装即可生效 —— 只需重启 harness。
移除:
dsh plugin --profile web remove dsh-discord-presence
故障排查
| 现象 | 原因与处理 |
| discord.state: "unconfigured" | 没有设置 clientId。填上并重启 harness。 |
| discord.state: "invalid-client-id" | Discord 回了 CLOSE 4000 —— Application ID 打错了。插件刻意不做循环重连;改对 id 即可(改动会即时生效)。 |
| discord.state: "offline" | Discord 没运行,或没找到管道。检查 \\.\pipe\discord-ipc-0(Windows)。客户端一出现,插件会自己重连。 |
| 卡片在,但是空的 | 会话还没跑过一轮:显示 waiting for a task。 |
| 没有卡片,但日志显示 connected | Discord 只对桌面客户端显示活动,而且应用至少要有一个活动;等过 15 s 限流。 |
| harness 看不到插件 | 那一行没进 dsh.profile.bundles,或者 harness 没重启。用 --dump-config 检查: |
dsh --profile web --dump-config | Select-String -Pattern 'discord-presence' -Context 0,10
插件日志写在 status.json(diagnostics)里,也会以 [discord-presence] … 行的形式输出到 harness 的 stderr。
限制
Rich Presence 只在 桌面版 Discord 客户端运行时才有效。
* Discord 大约每 20 秒只接受 5 次更新——所以默认节流设为 15 秒;计数器不受此影响,每个事件仍会照常计算。
* 插件不订阅未知事件:遇到无法识别的事件类型会直接忽略,而不是让处理函数崩溃(见 diagnostics 里的 lastEventType)。
* 除了可选的 webhook,不发任何网络请求。Application ID 是公开标识,不是密钥;插件从不读取 token 或密钥。预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
nightfun-pixel/dsh-discord-presence
在 Discord 里实时展示当前项目、耗时与 token 用量
相关插件 · 平台集成
智能体工程课walkinglabs/learn-harness-engineering
一门项目制课程,教你搭建环境、管理状态、做验证、加控制机制,让 AI 编程智能体稳定干活。
★ 21,155已汉化DSH
71.7
视频翻译配音liuzhao1225/YouDub-webui
开源视频本地化工作台:导入视频,识别、翻译并逐句克隆原声,生成字幕和配音成片。
★ 5,792已汉化Cordis
71.4
失败经验库Ikalus1988/MisakaNet
📚 零依赖、由 git 支撑的微课程库,让 AI 智能体异步分享并检索经过验证的调试经验。| https://misakanet.org
★ 553已汉化DSH
71.2
IM 机器人接入xmanrui/dsh-im
让 DeepSeek Harness 触手可及 Connecting DeepSeek Harness
★ 3,170已汉化DeepSeek 客户端
71
桌面智能体工作区freestylefly/wesight
WeSight 是开源桌面控制台,面向本地 AI 智能体。它帮你安装或复用 Claude…
★ 933已汉化MCP
71
中国平台研究引擎Jesseovo/last30days-skill-cn
给 AI Agent 的中文互联网研究 Skill:检索 8 大平台最近 30…
★ 2,041已汉化DSH
70.7
这个插件是你维护的吗?
作者本人可认领并核对本条目;认领通过后,详情页会显示「作者已认领」标记。