dsh-monitor: Centralized View of Machines, Runtimes, Git, and Kubernetes in the DSH Sidebar

前言

用 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 默认。

典型用法

  1. 安装并重启 DSH 后,在侧栏打开 Système,默认先看 Machine,确认 CPU/内存/磁盘是否触及面板阈值(Attention / Alert)。
  2. 将 projectsRoot 设为实际 clone 目录(若与默认 ~/projects 不同,在 Plugins → Système 或 profile YAML 中修改),切换到 Dépôts 查看未提交、落后远程、mission worktree 等待办卡片;需要时在抽屉里复制建议的 git 命令到终端执行。
  3. 本机已配置 kubectl 时,在 Kubernetes 页头选择 context(写入 k8sContext),查看 À traiter 中的降级原因;在 Ressources 中按 namespace 筛选工作负载,按需使用需确认的 remediation,再带 ?refresh=1 刷新状态 API。
  4. 若同时使用 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
羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

Xiaoye