dsh-monitor:在 DSH 側邊欄集中查看機器、運行時、Git 與 Kubernetes

前言

用 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
羽毛球分组比赛记分
小程序二维码

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

小夜