前言¶
用 DeepSeek Harness(DSH)做智能体或插件开发时,状态往往分散在终端里:top、本机 kubectl、各仓库的 git status,以及 DSH 自身的会话与任务。来回切换窗口会打断上下文。社区插件 dsh-monitor(npm 包名 @daedalforge/dsh-monitor)在 DSH 客户端增加 Système 侧栏入口,把机器健康、DSH 运行时、工作区 Git 仓库和 Kubernetes 集群读数收进同一面板,无需离开应用。
下面介绍它是什么、能看什么、如何安装与配置,以及使用时需要留意的权限与前提。
这是什么¶
dsh-monitor 由 daedalforge 维护,在 SkillHub 目录中归类为 admin-security。官方简介为:面向 DeepSeek Harness 的系统面板,覆盖 machine、runtime、working repositories 与 Kubernetes cluster health。
插件通过 cordis.patch.yml 向 DSH 注入 id 为 systeme 的条目;面板界面为法语(Machine、Kubernetes、Dépôts 三个子视图)。当前资料中的版本为 0.5.1,许可证 MIT,要求 Node >=20,DSH 版本 >=0.2.1-rc.5 <0.3.0-0(见 package.json 的 engines)。
核心功能¶
侧栏 Système 顶部标签切换三个子视图,空区块会自动隐藏:projectsRoot 不存在时不显示仓库相关区块;本机没有 kubectl 时不显示集群区块。
Machine(机器 + DSH 运行时)¶
Machine 在一屏内回答「这台机器是否健康」:
- CPU、内存、磁盘、负载、电池、swap、约 24 分钟的 CPU sparkline、占用最高的进程。
- 内存采用类似 Activity Monitor 的定义(app + wired + compressed),避免用
total - free在 Linux 上长期显示接近 99% 的误导。 - Linux 直接读
/proc/meminfo、/proc/stat、/proc/swaps与/sys/class/power_supply;CPU 在 Linux 上基于/proc/stat采样差值,在 macOS 上基于top -l 2 -s 1的第二次采样。 - 若存在 Colima,会通过
colima ssh -- df -kP单独报告 VM 磁盘,与宿主机磁盘区分。
DSH 区块展示:活跃会话、运行中的 job、24 小时内启动错误、缓存大小、近期会话;当 costLedger 指向有效 JSON 账本时,显示当日费用(账本格式与 dsh-cost-meter 写入的 ledger 一致)。
Dépôts(Git 工作区)¶
Dépôts 把 projectsRoot 下的 Git 工作区当作「任务看板」只读展示:汇总横幅、六项 headline 指标、按原因分组的 À traiter、可筛选的仓库表、worktree 与 mission PR 等。打开某个仓库会进入抽屉(分支、上游、checkout、PR、最近 commit、变更文件等);面板不会执行任何 git 写操作,需要执行的命令以可复制文本提供,而非一键按钮。
PR 列在已安装且已认证的 gh 存在时通过 gh pr list 读取;否则该列显示 —,其余视图仍正常渲染。
另提供 API:/systeme/api/depot?name=<repository>,返回某仓库最近四次 commit、git status --porcelain=v2 --branch 原始输出与 stash;name 必须是 projectsRoot 的直接子目录名。
Kubernetes¶
Kubernetes 视图分 contexte(上下文选择、Ressources 窗口列出 deployment/pod/job 等工作负载及 remediation 手势)与 écran(集群作为「工作场所」的读模型:降级原因卡片、拓扑、Namespaces 表、节点容量、组件健康检查等)。页头 context 选择器列出本机 kubectl 声明的 context,并可将选择写入配置项 k8sContext;空字符串表示跟随当前 context。
数值均来自 Kubernetes API;无数据源时会标明,而不是填零。
刷新与 API¶
面板在打开、窗口获焦、以及可见期间按 refreshSeconds(默认 60 秒,范围 15–900)刷新,不做后台轮询;上次快照缓存在 localStorage,下次打开先绘制缓存。
服务端 /systeme/api/etat 采用 stale-while-revalidate:先返回最新快照并在后台重建;全量快照最多每 15 秒重建一次,各区块另有独立缓存(例如仓库 3 分钟、PR 60 秒、runtime 90 秒、cluster 20 秒、机器与 Colima 磁盘 15 秒)。Remediation 后可请求 ?refresh=1 强制重建。
阈值可在面板中编辑,持久化到 ~/.dsh/storages/dsh-monitor/config.json(磁盘、内存、负载、电池、脏仓库天数、Pod 重启等)。操作日志:journal.jsonl;最近 K8s 状态:k8s-last.json。
Remediation(需确认 confirm: true 才会执行)包括:进程 SIGTERM/SIGKILL(保护 PID 1、系统进程、DSH 宿主与容器运行时)、停止当前会话 job、清理 DSH 缓存、受控磁盘清理、以及 Kubernetes 上的 rollout restart / 删 Pod / 清理已完成 job 等。不会删除 Docker volume、不会读 secret、不会自动 remediation、不会对 git 跟踪文件做写操作。
安装与启用¶
官方 README 给出的安装方式为(profile 以 desktop 为例):
dsh plugin --profile desktop add @daedalforge/dsh-monitor
新增服务端路由后需要完全退出并重启 DSH 应用(文档说明客户端热重载不足以加载新路由)。
从本地 tarball 或 git 检出目录安装:
dsh plugin --profile desktop add file:/path/to/daedalforge-dsh-monitor-<version>.tgz
卸载:
dsh plugin --profile desktop remove @daedalforge/dsh-monitor
~/.dsh/storages/dsh-monitor/ 下的文件卸载后仍保留,需手动删除才能清空。
配置¶
除安装命令外,配置写入 profile 中的 cordis.patch.yml 片段;也可在 DSH 内打开插件提供的 Plugins → Système 页面保存,值会写回 profile patch。
示例(与 README 一致):
- insert:
- id: systeme
name: '@daedalforge/dsh-monitor'
config:
refreshSeconds: 60
projectsRoot: '~/projects'
showRepos: true
k8sContext: ''
showK8s: true
| 配置项 | 默认值 | 含义 |
|---|---|---|
projectsRoot |
~/projects |
要监控的 Git 仓库根目录 |
showRepos |
true |
是否显示 Dépôts 标签 |
k8sContext |
'' |
监视的 kubectl context;空则跟随当前 context |
showK8s |
true |
是否显示 Kubernetes 区块 |
costLedger |
~/.dsh/storages/cost-meter/ledger.json |
费用账本路径;空则隐藏费用行(页面不可编辑,需在 YAML 覆盖) |
refreshSeconds |
60 |
面板刷新间隔(秒),限制在 15–900 |
refreshSeconds 与两个「显示/隐藏标签」开关为 volatile 值,每次构建状态时读取,无需重启即可生效。空字段会清除键并回退到 schema 默认。
典型用法¶
- 安装并重启 DSH 后,在侧栏打开 Système,默认先看 Machine,确认 CPU/内存/磁盘是否触及面板阈值(Attention / Alert)。
- 将
projectsRoot设为实际 clone 目录(若与默认~/projects不同,在 Plugins → Système 或 profile YAML 中修改),切换到 Dépôts 查看未提交、落后远程、mission worktree 等待办卡片;需要时在抽屉里复制建议的git命令到终端执行。 - 本机已配置
kubectl时,在 Kubernetes 页头选择 context(写入k8sContext),查看 À traiter 中的降级原因;在 Ressources 中按 namespace 筛选工作负载,按需使用需确认的 remediation,再带?refresh=1刷新状态 API。 - 若同时使用
dsh-cost-meter,保持默认costLedger路径即可在 Machine 视图看到当日费用;账本在其他路径时仅在 YAML 中覆盖costLedger。
服务端路由仅接受本地同源请求,其他来源返回 403(见 README Architecture 说明)。
适用场景与注意¶
适合:在 DSH 内长时间开发、同时维护多仓库与开发用 K8s 集群的开发者;希望在一处只读总览机器与 DSH 运行时,并偶尔做受控清理或 K8s rollout 的场景。
前提与限制(摘自 README):
- 支持 macOS 或 Linux;Windows 未支持(采集逻辑按
process.platform分支并依赖 procfs)。 - 可选工具缺失时对应区块隐藏或显示
—,不会因此报错:gh(PR 列)、kubectl与容器运行时/kind(Kubernetes 标签)、git与projectsRoot下 checkout(Dépôts 标签)。 - 无站外告警、无长期指标历史、无自动 remediation;停止 job 仅针对当前会话。
安全:插件以当前 DSH 进程的用户权限运行,会读取本机 procfs、磁盘、Git 工作区、执行 kubectl/gh(若存在),并在确认后执行 remediation。安装前应在 GitHub 阅读源码与 MIT LICENSE,确认与自身环境策略一致。SkillHub(目录页)是社区插件索引,与 DeepSeek / 幻方无官方从属关系;DSH 生态遵循「一切皆插件」思路,具体能力以仓库 README 为准。
结尾¶
dsh-monitor 把机器、DSH 运行时、Git 工作区与 Kubernetes 健康状态收敛到 DSH 侧栏 Système,配合 stale-while-revalidate 的状态 API 与可配置的只读/确认式 remediation,减少在终端与应用之间来回切换。进一步了解与 issue 反馈见 GitHub 仓库;在 SkillHub 可检索同插件条目。
- 目录页:https://www.skillhub.cn/plugins/daedalforge/dsh-monitor
- GitHub:https://github.com/daedalforge/dsh-monitor