Zongwei9888
dsh-abyss
🌊 深海事务所 · Abyss — 把 DeepSeek Harness 的多 agent 运行画成一间看得见的事务所:委派谱系、每个 agent 的成本与失败归因、上下文水位、考勤时间线,历史案子可回放并一键导出 Markdown 复盘。A DeepSeek Harness plugin that turns an agent fleet into an office you can watch.
- Stars
- 1
- Language
- JavaScript
- Created
- Aug 15, 2026
- Updated
- Aug 15, 2026
Introduction
深海事务所 · Abyss
把 DeepSeek Harness 的多 agent 运行过程,变成一间看得见的事务所。
谁在干活、花了多少、卡在哪 —— 全都来自会话日志,一句台词都不是编的。
中文 · English
dsh plugin --profile web add dsh-abyss && dsh web
它解决什么问题
一个 dsh 会话跑起来之后,你其实看不见里面发生了什么:派了几个子代理、谁在等谁、哪一步失败了、这次花了多少钱。终端里只有一串流式文字,会话结束就散了。
深海事务所把这些全部画出来,而且每一个数字、每一句台词都能追回到 ~/.dsh/sessions 里的那条日志。它不改 dsh 一行代码,装上即用。
四个页签,四个问题
| 页签 | 回答什么 | 视角 |
|---|---|---|
| 🧑 办公室 | 现在谁在场、正在做什么 | 此刻 · 以人为中心 |
| 💬 时间线 | 发生过什么,按时间从旧到新 | 过程 · 以时间为中心 |
| 📈 统计 | 花了多少、卡在哪、谁在等 | 汇总 · 以账为中心 |
| 🌿 组织 | 谁把活派给了谁 | 关系 · 以谱系为中心 |
![]() 时间线:派活、发言、汇报、出错,逐条按真实时间排列,长了自动折叠。 | ![]() 统计:成本、令牌、工具调用、失败、重拨、归档、等人时长、历时;下面是每人上下文水位与考勤泳道。 |
![]() 组织:委派谱系从真实的父子会话关系长出来,一眼看清一个案子分给了几个人。 | |
为什么不是又一个桌宠
生态里的桌宠是装饰;这里的每个角色演的都是真事:
| 舞台上发生的 | 背后的 dsh 机制 |
|---|---|
| 一位员工 | 一个 agent 的 session |
| 工牌上的岗位 | subagent/descriptor.label |
| 他来自哪家公司 | subagent/descriptor.provider(claude-code/codex 是真的别家 agent) |
| 老板递文件夹 | tool/call subagent,气泡里是真实任务简述 |
| 便签飞过工位 | tool/call send_message,气泡里是真实消息原文 |
| 站在你门口等批准 | approval/asked / approval/decided,等了多久是算出来的 |
| 干活干砸了 | tool/result.error 或结果块的 isError |
| 去档案室整理 | compaction/summary.shadowedTokenCount |
| 工资表 | assistant/message.usage × 可配价目表 |
| 上下文水位 | usage ÷ request/context.contextWindow |
因为 dsh 有「模型可见 ⟺ 必落日志」的运行时不变量,回放同一个案子会重演一模一样的过程。
安装
需要 DeepSeek Harness 的 web profile(dsh web 能跑起来即可)。
# 1. 装进 web profile
dsh plugin --profile web add dsh-abyss
# 2. 重启 web
dsh web
打开 http://127.0.0.1:3080 ,右下角就是事务所的坞。点开即用,不需要任何配置。
dsh plugin --profile web add dsh-abyss@latest # 升级
dsh plugin --profile web remove dsh-abyss # 卸载(重启后生效)
从源码安装(包尚未发布到 npm 时用这个)
git clone https://github.com/Zongwei9888/dsh-abyss.git && cd dsh-abyss
npm install && npm run build && npm pack
dsh plugin --profile web add ./dsh-abyss-<版本>.tgz
dsh web
dsh plugin add 走的是 profile 目录下的 pnpm,所以它同样认 profile 里的 .npmrc——私有 registry 直接在 $DSH_HOME/profiles/web/.npmrc 里配 registry= 即可。
面板嵌在产品自己的页面里,数据挂在同一个 origin 下的
/abyss,不开新端口、不做跨域。
几个不显眼但有用的地方
- 一个会话 = 一间办公室,重启也还在。 打开一个昨天的会话,面板会从磁盘上的日志把那间办公室重建出来——成员、已收工的临时工、当时的全部戏份。
- 十个会话同时跑也不乱。 会话树是「案子」,三档范围(本会话 / 本项目 / 全部)随时切;活跃的案子排前面,结束的折叠成一行。
- 导出复盘。 一键生成 Markdown 报告:成员表、事故清单、完整台词,直接贴进 PR 或周报。
- 过往案子。 磁盘上的日志就是档案库,几天前跑完的案子照样能回放、能出报告。
- 读不出来就直说。 某个成员的日志损坏时,报告顶部会写明"有 N 位成员的日志读不出来,下面的数字不含他们"——一份安静地少算了的报告,比没有报告更糟。
- 可拖动、可缩放,位置和尺寸都记住;双击标题栏放回右下角。
配置
不配也能用。要改就在 profile 的 cordis.yml 里:
- id: dsh-abyss
config:
prices: # 工资表,按每 1M token 计
deepseek-v4-pro: { input: 0.55, output: 2.19, cacheRead: 0.07 }
currency: "¥" # 货币单位,默认 $
vendors: # 各厂商的标签、配色、图标
claude-code: { label: "外聘顾问", color: "#f59e0b", icon: "brain" }
sceneHistory: 200 # 新连接的面板能看到多少场旧戏
maxTeams: 20 # 保留多少个案子(只淘汰已结束的)
caseList: 30 # 「过往案子」列多少个
watchPolicy: true # 把其它插件的拦截画成保安场景
非法配置在加载时大声失败,不会默默忽略。
文档
测试
npm test # 113 个用例:投影逻辑 + 宿主装配 + 发布的浏览器 bundle
浏览器测试跑的是发布的那个 bundle(经 DOM 替身驱动),不是逻辑副本——本项目踩过的每一个客户端缺陷(全局被遮蔽、引号未转义、状态只存在 DOM 里、开关反转、文字被套上旋转动画)对"重新实现一遍逻辑"的测试都是不可见的。
关键路径还做过真机联调:真实跑任务、真实并发三个会话、真实触发审批与工具失败,并把插件报出的数字和原始日志逐项对过账。


