🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

任务控制台 epool86/dsh-monitor

DeepSeek Harness
epool8648 天前有提交已提供中文文档扫描:无法判定

对 DeepSeek Harness 写入 /.dsh 的会话日志做只读实时查看,回答智能体现在在做什么?

41.7/100
综合分
11
GitHub 星标
—
npm 周下载
—/5
用户评分

数据截至 2026/9/20 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

自动兼容检查未通过:仓库根目录及浅层子目录均无 dsh 插件清单,无法用 dsh 插件安装命令安装。以下命令仍可尝试,但可能失败。
无法用 dsh 插件命令安装(仓库内无 dsh 插件清单)
git clone https://github.com/epool86/dsh-monitor.git
按该仓库 README 的原生方式安装;若作者另行发布了 DSH 插件包,请以其文档为准

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:需留意
是什么[目录]—
dsh 原生插件 · ui
暂无时间戳·判据 →
装得上吗[实装验证]!
作者未把包发布到 npm,只能用源码安装
插件本身没问题,是分发方式不同
数据截至 2026/09/28·判据 →
安全吗[自动扫描]—
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
数据截至 2026/11/03·判据 →
还在维护吗[仓库]—
更新放缓:最近一次提交在 48 天前
暂无时间戳·判据 →
图例:✓ 通过! 需注意— 未判定 / 无数据· 「未判定」= 本站尚无数据,不代表插件有问题
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →

可信度证据

安装兼容性检查需源码安装

仓库根目录及浅层子目录均无 dsh 插件清单,无法用 dsh 插件安装命令安装

展开查看检查明细 ↓

以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。

✗npm 包dsh-monitor(未发布到 npm,仅可源码安装)
✓Node 引擎未声明 engines.node
✓dsh CLI 依赖未声明 dsh 版本约束
✗入口文件缺少入口声明

源码安装时若 pnpm 拦截 prepare 脚本,按其提示在 pnpm-workspace.yaml 的 allowBuilds 中放行后重跑。

验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/11/2 08:44:32

安全扫描自动 · 静态分析源码
v2.7.0
⚪ 扫描:无法判定尚无人工评估
展开查看扫描说明与证据 ↓

已尝试扫描但取不到可分析的源码:仓库或包不存在、已删除,或为非 JS/TS 实现、未随包发布源码。无法判定,不代表安全。

  • · 包内无可扫 JS
  • · TS 源码(可能为非 JS 实现或未发布源码),无法判定
扫描于 2026/11/3(1 天前) · 范围 全包扫描(包内未声明入口) · 来源 GitHub 仓库

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

社区实装还没有人打卡 · 装过的第一个就是你
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

界面预览

1 张 · 点击查看大图

功能亮点

  • 只读查看会话日志
  • 实时观看智能体任务
  • 实时观看子代理任务

DeepSeek Harness 实时任务控制台:实时观看智能体和子代理干活。

README

由 DeepSeek 最新模型翻译生成
DSH Mission Control 对 DeepSeek Harness 写入 ~/.dsh 的会话日志做只读实时查看,回答智能体现在在做什么? DSH Mission Control:主智能体居中,四个工作中的子代理环绕四周,琥珀色状态环,信号点沿边缘流动,旁边是实时活动流和智能体名单 整个应用就一个页面 —— index.php —— 外加 api.php。它读取 DSH 已经写好的会话日志,所以 DSH 不需要在运行,~/.dsh 下的任何内容也永远不会被写入或移动。 这个应用里没有任何身份验证。 它会渲染你全部的会话历史:每一条提示词、回复、命令、文件路径和工具结果。请把它放在 127.0.0.1 上,或者放在带身份验证的代理后面 —— 参见暴露之前。 环境要求 | 组件 | 用途 | | PHP 8.2+ | 整个应用 | | PHP FFI 扩展 | 驱动系统的 libzstd(见下文) | | libzstd ≥ 1.4 | 会话日志是一连串拼接的 zstd 帧 | | DSH 会话日志 | ~/.dsh/sessions/ 必须存在且可读 | 安装与设置 没有构建步骤,不用 Composer 安装,没有数据库,没有配置文件。克隆下来,检查环境要求,把 Web 服务器指向这个目录。
展开完整文档(README 剩余 1 节)
DSH Mission Control

对 DeepSeek Harness 写入 ~/.dsh 的会话日志做只读实时查看,回答智能体现在在做什么?

DSH Mission Control:主智能体居中,四个工作中的子代理环绕四周,琥珀色状态环,信号点沿边缘流动,旁边是实时活动流和智能体名单

整个应用就一个页面 —— index.php —— 外加 api.php。它读取 DSH 已经写好的会话日志,所以 DSH 不需要在运行,~/.dsh 下的任何内容也永远不会被写入或移动。

这个应用里没有任何身份验证。 它会渲染你全部的会话历史:每一条提示词、回复、命令、文件路径和工具结果。请把它放在 127.0.0.1 上,或者放在带身份验证的代理后面 —— 参见暴露之前。

环境要求

| 组件 | 用途 |
| PHP 8.2+ | 整个应用 |
| PHP FFI 扩展 | 驱动系统的 libzstd(见下文) |
| libzstd ≥ 1.4 | 会话日志是一连串拼接的 zstd 帧 |
| DSH 会话日志 | ~/.dsh/sessions/ 必须存在且可读 |

安装与设置

没有构建步骤,不用 Composer 安装,没有数据库,没有配置文件。克隆下来,检查环境要求,把 Web 服务器指向这个目录。

git clone https://github.com/<you>/dsh-mission-control.git
cd dsh-mission-control

1. 检查环境要求

php -v # 8.2 or newer
php -m | grep -i '^ffi' # FFI must be listed
ldconfig -p | grep libzstd # libzstd.so.1 must be found
ls ~/.dsh/sessions # DSH must have written at least one session

如果缺东西:

| 发行版 | 安装 |
| Debian / Ubuntu | sudo apt install php8.2-cli php8.2-fpm php8.2-ffi libzstd1 |
| Fedora / RHEL | sudo dnf install php-cli php-fpm php-ffi libzstd |
| macOS (Homebrew) | brew install php zstd |

在 Debian 和 Ubuntu 上,FFI 通常随 php8.x-common 一起提供;如果 php -m 没列出它,就安装 php8.2-ffi 并重启 PHP。

2. 运行

最快的方式 —— 用 PHP 自带的服务器,在自己机器上看看:

php -S 127.0.0.1:8080
open http://127.0.0.1:8080/

它只绑定 localhost,不适合对外暴露。它在任何 SAPI 下都能工作:如果进程内拿不到 FFI::cdef(),解码器会自动调用 bin/zstddump.php,所以同一份代码在 FPM 下也能原样运行。

或者放在 nginx + PHP-FPM 后面 —— 任何普通的 PHP 虚拟主机都行:

server {
listen 80;
server_name dsh.test;
root /path/to/dsh-mission-control;
index index.php;

location / { try_files $uri $uri/ /index.php?$query_string; }

location ~ \.php$ {
include fastcgi_params;
fastcgi_pass unix:/run/php/php8.2-fpm.sock;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
}

keeps .git and the var/ cache out of reach
location ~ /\.(?!well-known) { deny all; }
}

3. 唯一要注意的坑:PHP 以哪个用户运行

应用通过读取 $HOME 来定位 DSH,如果读不到,就回退到 PHP 进程所属用户的主目录。所以 PHP 用户必须是 ~/.dsh 的属主 —— 通常就是你本人。

如果 PHP-FPM 以 www-data 运行,而你的日志在 /home/you/.dsh,仪表盘就会一片空白。把 pool 改成以你自己的身份运行:

; /etc/php/8.2/fpm/pool.d/dsh.conf
[dsh]
user = yourname
group = yourname
listen = /run/php/php8.2-fpm-dsh.sock

……然后把 fastcgi_pass 指向这个 socket。

同一个用户还需要能写入项目里的 var/cache/(这是解码后的日志缓存,也是这个应用唯一会写的东西),所以要确保项目目录对它可写 —— 或者预先创建 var/cache,并把属主设为该用户。

4. 打开它

打开站点根目录。不带 ?id= 时,它会 跟随最新的那个会话,所以你只要启动一个 DSH 会话,再委派给子代理 —— 一两秒内机器人就会出现。加上 ?id=<session-id> 可以固定到某个会话。

监视器(实时)

每 1.5 秒轮询一次 api.php?action=live 并重绘。它的设计基于一个事实:DSH 把每个子代理存成 独立的会话日志,用 parentSession 关联,并在父会话里用一个 subagent/catalog 事件公布它,附带一个人类可读的标签。

| 区域 | 显示内容 |
| 指标磁贴 | 子代理工作中/已完成/停滞、轮次、步骤、工具调用、错误、token、消耗速率(平滑处理,带迷你折线图)、已用时间、距上次事件的时间 |
| 智能体星图 | 机器人:main 在中心,每个子代理按委派深度环绕,按状态着色 |
| 连线 | 智能体工作时,发光的信号点向外流动;它完成后,信号点会回流到 main,持续几秒(交接) |
| NOW 栏 | 根智能体这一秒正在执行的工具,或者在等待模型时显示「thinking」 |
| 实时活动 | 合并所有智能体的信息流,最新的在前,短名称,进行中的工具带 spinner |
| 智能体卡片 | 每个智能体:状态、深度、工具数、错误、耗时、token、当前活动、工具构成条 |

页头的控件:

| 按钮 | 作用 |
| follow: on/off | on(不带 ?id 打开时的默认值)跟随最新的会话,所以之后启动的会话会被自动接管。off 把页面固定在你正在看的会话上。 |
| finished: auto/shown/hidden | 在三种模式间循环。auto(默认)在智能体最后一次事件后 6 秒移除它;shown 保留所有智能体;hidden 从不绘制已完成的智能体。对星图和列表都生效。 |
| pause | 停止轮询,但保留当前视图。 |

智能体不会自己消失

这个屏幕上的智能体是 磁盘上的文件,不是运行中的进程:监视器每次轮询都会重新 glob ~/.dsh/sessions,每找到一个日志就画一个机器人。DSH 没有删除或保留 API,所以完成的智能体日志会永久保留,智能体也会一直留在屏幕上——因此有了自动隐藏,它是视图过滤器,不是删除。

子代理以 mode: "continuable" 启动:harness 保留持久会话,如果再给智能体发消息,就会开启新一轮。这会写入新的 turn/start,状态翻回 working,智能体会自己重新出现——所以隐藏是安全的。它们不会自己醒来;只有显式发消息才能唤醒。

自动隐藏依据的是已完成,而不是单纯的静默时间,这是有意为之:智能体在等模型时,20–60 秒内不写任何日志事件,而它其实在正常工作,所以只按静默时间隐藏会让机器人在思考中途闪没又闪回。

停滞的智能体

状态来自日志:只要 turn/start 比 turn/end 多,就有一个轮次处于打开状态。被中断的 continuable 子代理可能留下一个打开却没有任何后续的轮次——harness 会开启新轮次来投递「已停止」通知,那个轮次被丢弃,之后再也不会有事件来平衡计数。这样的智能体会永远显示为 working,某次现场演示就是这样冒出一堆幽灵机器人,怎么都清不掉。

所以,一个打开的轮次如果同时满足静默超过 5 分钟且没有工具在执行,就报告为 stalled(红色),自动隐藏会像处理已完成的智能体一样把它丢掉。要求同时满足才安全:慢命令在整个运行期间都持有待处理的工具调用,所以真正耗时的工具调用绝不会被误标,而只是在思考的智能体离 5 分钟还差得远。

繁忙环的半径随智能体数量增长,标签从每个节点向外辐射,所以十个并发委派依然清晰可读,不会重叠。

轨道与碰撞规避

每个子代理沿着自己深度对应的环漂移,速度和方向各自随机(0.075–0.24 rad/s,一圈大约 26–84 秒)。因此这个星座是活的,而不是每 1.5 秒轮询就跳一下的快照。两条规则让机器人彼此分开:

| 规则 | 效果 |
| 预测性反弹 | 智能体正在靠近 88 px 内的邻居时,双方方向反转,于是在接触前就转开 |
| 硬分离 | 仍在 52 px 内的——机器人宽约 49 px——沿各自环的切线推开,上限 0.14 rad/帧 |

反转冷却按每一对计算,而不是按每个智能体:一次反弹不能让智能体对下一个即将相遇的邻居视而不见。在无头 Chrome 中用 41 个智能体的回放验证过——最小成对距离 48–51 px,即没有机器人接触。

角度和速度存在 JS 状态里,绝不放在 DOM 上:renderGraph() 每次轮询都会从字符串重建 SVG,所以挂在元素上的任何东西 1.5 秒后就会消失。在 prefers-reduced-motion: reduce 下完全跳过运动。

信号点是唯一不得不改变形状的东西。它们以前是 SMIL animateMotion 沿着静态路径运动,会让它们沿着机器人早已离开的线滑行。现在它们是普通圆圈,由同一个动画循环在父→子线段上做 lerp,因此始终紧贴两个移动的端点。

布局

单屏,页面不滚动:bar / metric tiles / stage / agent roster,做成无缝马赛克。面板之间用 1px 分隔线隔开,而不是留空隙;没有圆角;按色相着色——星座用青色,活动用琥珀色,名册用绿色——每个指标磁贴有自己的强调色。只有信息流纵向滚动,名册横向滚动。宽度低于 1000px 时,舞台堆叠,页面恢复滚动。

curl 'http://127.0.0.1:8080/api.php?action=live' # newest root session
curl 'http://127.0.0.1:8080/api.php?action=live&id=<id>' # a specific root

为什么这里有个解码器

DSH 把会话存成 session.vN.jsonl.zstd——而且它不是单个 zstd 流。它是一串拼接的 zstd 帧,每次追加一帧:

[frame: session header][frame: event][frame: event][frame: …] ← one frame per append

这让显而易见的工具都失效了:

| 方案 | 结果 |
| unzstd / zstd 命令行 | 未安装 |
| PHP zstd 扩展 | 不存在 |
| zlib.zstdDecompressSync(node 24) | 只解码第一帧(215 字节,1 个事件) |
| zlib.createZstdDecompress() | 同样停在第一帧,除非你在帧之间重置流 |

Node 的解码器是那种诱人的差一点:看起来能用,却悄悄从约 1,900 个事件里只返回 1 个。

机器上确实有 libzstd1(1.5.5),所以 lib/Zstd.php 用 ZSTD_findFrameCompressedSize() / ZSTD_decompress() 逐帧遍历并拼接。实测帧大小:压缩后 86–34,538 B,解压后 79–150,463 B,而且每一帧都报告未知的内容大小——所以目标缓冲区不能按头部预先定尺寸,必须在 ZSTD_error_dstSize_tooSmall(错误码 70)时扩容,而这个错误被刻意不当作输入结束处理。

有个小麻烦:PHP-FPM 自带 ffi.enable=preload,禁止在 web 请求里调用 FFI::cdef()。与其削弱共享的 PHP 配置(还可能危及同一个 8.2 池上的另外 50 个站点),解码器会检测到这一点,回退到 bin/zstddump.php,它在 CLI SAPI 下运行,那里允许 FFI。同一个类,同一个库,字节通过 stdin 管道传输。

browser ──► index.php / api.php ──► LiveMonitor ──► Zstd::decompressedCached()
│ │
│ FFI allowed? ├─ yes ─► libzstd in-process (CLI)
│ └─ no ─► bin/zstddump.php ─► libzstd
│ │
│ └─► var/cache/<sha1>.jsonl + .offset
└─► 每个智能体的计数器、树、动态 ─► JSON ─► SVG/DOM

解码是增量式的:缓存记录已经消费了多少压缩字节,所以一次轮询只解码新增的尾部——完整解码最大的日志(压缩后约 2 MB)在进程内约 33 ms,而追平后的轮询完全不做解码。偏移量总是落在帧边界上,所以还在写入的日志下次会重试它不完整的最后一帧。

文件

README.md 本文件——安装、设置与设计说明 LICENSE MIT docs/screenshot.* 上面的图片 index.php 实时监控外壳(内嵌第一份快照)——站点根目录 api.php JSON:仅实时 lib/Zstd.php 拼接帧 zstd 读取器、增量缓存、命令行回退 lib/LiveMonitor.php 实时快照:智能体树、计数器、状态、最近动态 bin/zstddump.php FPM 回退使用的命令行解码器(只读 stdin) assets/monitor.* 实时监控样式 + 渲染 var/cache/ 解码后的日志——每个会话三个文件(.jsonl、.offset、.lock)

安全

- 对 ~/.dsh 只读。其下任何内容都不会被写入或移动。
- bin/zstddump.php 只读 stdin,所以它自身没有文件系统暴露面。
- ?id= 只用作会话头映射的键,从不作为路径,所以没有遍历暴露面;未知 id 返回 404。
- 容错解码:还在追加的会话可能以不完整的帧结尾,所以尾部解码失败时返回已解码的事件,而不是报错。
- token 总数来自 harness 的投影缓存;每条消息的用量来自 assistant/message 事件。

对外暴露之前

这是本地开发者工具:没有认证、没有会话、没有限流、没有只读查看模式。 任何能访问该 URL 的人都能读取你运行过的每一个会话——提示词、回复、命令、文件路径和工具输出。

- 把它绑定到 127.0.0.1(如 php -S 示例那样)或仅绑定到私有网卡。
- 要从别处访问,就放在带认证的反向代理后面,并让 DSH 主机本身远离公网。
- 不要从 nginx 片段里删掉 location ~ /\. 规则——正是它阻止了 .git/(以及你完整的仓库历史)被提供出去。

许可证

MIT——随便用、fork、修改、发布、售卖。无担保。
预览分享卡片长什么样 ↓epool86/dsh-monitor
分享 · DeepSeek Harness Hub
epool86/dsh-monitor

对 DeepSeek Harness 写入 /.dsh 的会话日志做只读实时查看,回答智能体现在在做什么?

这个插件是你维护的吗?
作者本人可认领并核对本条目;认领通过后,详情页会显示「作者已认领」标记。
认领条目 →
回到顶部