DeepSeek Harness Hub
← 返回列表

会话战绩卡片rand0wn/dsh-wrapped

DeepSeek Harnessspec-screened在 GitHub 查看 ↗
未验证

把当前会话统计生成可分享的 SVG 摘要卡片

尚未跑自动兼容性验证,可查看页面内的依赖与入口分析。 · 最近上游提交 2026/8/20 · 已提供中文文档

DeepSeek Harness (dsh) 插件:/wrapped 为当前会话生成可分享的 SVG 摘要卡片

综合分
28
GitHub 分
28
用户评分
★ Stars
1
周下载量
安装插件(需先安装 dsh CLI 引擎:npm install -g @deepseek-ai/dsh)
dsh plugin --profile web add rand0wn/dsh-wrapped
该插件未发布到 npm,走 GitHub 源安装(pnpm 若拦截 prepare 脚本,按其提示在 pnpm-workspace.yaml 的 allowBuilds 中放行后重跑)
数据截至 2026/9/16(元数据每日更新 · 实装验证按队列轮转,单条结论的验证时间见上方)
依赖的 DSH / Cordis 模块
@deepseek-ai/cordis@deepseek-ai/dsh-agent@deepseek-ai/dsh-commands@deepseek-ai/dsh-session@deepseek-ai/dsh-session-projection@deepseek-ai/dsh-session-stats@deepseek-ai/schemastery
用户评分
还没有人投票,来当第一个
订阅周报,不错过优质插件更新
每周一封 · 高评分插件 + 新用户活动

README

dsh-wrapped

CI

一个 DeepSeek Harness(dsh)插件,可将一次会话变成可分享的摘要卡片——相当于为你 agent 会话打造的 Spotify Wrapped。

为什么

每次会话背后都已经有真实而有趣的数字——有多少时间花在推理上、多少花在工具调用上,模型流式输出的速度有多快,用了多少轮——但它们只会以一小条统计信息的形式出现,你瞥一眼就忘了。dsh-wrapped 把这些数字变成一张深色、适合截图的卡片,专为真正发到某个地方而设计。

安装

dsh plugin --profile  add dsh-wrapped

将该包名添加到该 profile 的 dsh.profile.bundles 列表中(关于为什么需要这第二步,请参阅
dsh-minimal-anchor 的 README——仅仅作为列出的依赖
并不会激活插件的 dsh.bundle 补丁):

{
"dsh": {
"profile": {
"bundles": [
"@deepseek-ai/dsh-base",
"@deepseek-ai/dsh-web-app",
"dsh-wrapped"
]
}
}
}

用 dsh --profile  --dump-config 确认它已组合进去——查找一个
wrapped 条目。

用法

在任意会话中输入 /wrapped。它会在当前工作目录下将一张 SVG 卡片写入
.dsh-wrapped/wrapped--.svg,并在文件路径旁打印一份纯文本摘要。在浏览器中打开该
SVG 并截图,或用任意 SVG 工具将其转换为 PNG。

需要在 profile 中挂载 @deepseek-ai/dsh-session-stats(它默认随
dsh-web-app bundle 一起提供)——没有它,/wrapped 会返回一个
明确的错误,而不是一张空白或错误的卡片。

卡片上有什么

- 轮次和步数
- 工具时间 vs. 思考(LLM)时间
- 平均首 token 时间
- 解码速度(tokens/秒),在低于 1 秒的样本下限时省略,以避免
因 token 太少而产生嘈杂/误导性的速率
- 根据工具时间/思考时间比值得出的一行“类型”判定:
The Explorer、The Deep Thinker 或 The Balanced Operator

配置

profiles//cordis.patch.yml
- insert:
- id: wrapped
name: 'dsh-wrapped'
config:
minDecodeSampleMs: 1000
verdictRatioThreshold: 1.5

| 字段 | 默认值 | 描述 |
| --- | --- | --- |
| minDecodeSampleMs | 1000 | 低于这么多解码时间时,tokens/秒会显示为 — 而不是数字——样本太小就是噪声,而不是速率。 |
| verdictRatioThreshold | 1.5 | 工具时间和思考时间必须以多大比例(作为比值)分化,判定才会选择 Explorer/Deep Thinker 而不是 Balanced Operator。 |

所有这些都来自会话自身的 sessionStats 投影——没有
单独的跟踪,没有额外的 token 成本,除了 SVG
文件本身之外不持久化任何内容。

工作原理
通过 @deepseek-ai/dsh-commands 注册一个 /wrapped 命令。处理程序会从
ctx.sessionProjections.snapshot(invocation.agent.session) 中读取
sessionStats 键(turns、steps、llmMs、toolMs、ttftMs/ttftSteps、
decodeMs/decodeTokens),通过一个纯函数 buildCard() 将其转换为展示行和一个
判定结果,然后将其渲染为一个自包含的 SVG 字符串,并用普通的 node:fs 写入。
命令永远不会进入模型历史记录,也不消耗任何 token —— 这不会触及任何一次
请求。

buildCard 和 renderSvg 是纯函数,不依赖于已启动的 Context,因此真正有
意思的逻辑(判定阈值、解码速度采样下限、XML 转义)都直接进行了单元测试 —— 见
开发。

已针对真实的本地 dsh web 启动进行验证,而不仅仅是类型检查:安装到一个
临时 profile 中,用 Playwright 驱动一个真实的浏览器会话,在一次真实的多工具
调用回合后运行 /wrapped,并确认写入的 SVG 文件中的数字与会话自身的统计
条一致。

故障排除

/wrapped 返回“sessionStats projection is not available”。 你的
profile 没有挂载 @deepseek-ai/dsh-session-stats。它默认随 dsh-web-app
bundle 一起提供;自定义或无头 profile 可能需要显式添加它。用
dsh --profile  --dump-config 检查。

“This session has no completed steps yet.” /wrapped 需要至少
一个已关闭的步骤(step/end)才有内容可总结 —— 它无法对一个什么都没发生的
会话进行报告。

找不到 SVG 文件。 它是相对于 harness 进程的当前工作目录写入的,而不是
你的项目目录或 harness 检出目录 —— 请查看命令成功文本中的确切路径,或者从你
启动 dsh 的位置查看 .dsh-wrapped/ 下。

开发

npm install
npm run typecheck
npm test

buildCard/renderSvg 是普通函数,不依赖 dsh 运行时 ——
examples/render-standalone.ts 会从手写的统计数据渲染一张卡片,适合在没有
实时会话的情况下迭代设计:

npx tsx examples/render-standalone.ts > card.svg

许可证

MIT

上游仓库有新提交时邮件通知你(每天最多一封,无更新不打扰),随时一键退订。

同作者(rand0wn)的其他插件

💬 加入 DPharness 群聊

插件用法、部署报错、新插件第一时间同步——群里问,比一个人翻文档快。

点击加入 QQ 群
DPharness 群聊二维码,手机 QQ 扫码进群
扫码进群