dsh-fnos-control:在 DSH Web 側欄補上飛牛 fnOS 的刷新與重啓

前言

在飛牛 NAS 上通過 fnOS 應用 fn-deepseek-harness 跑 DeepSeek Harness(DSH)時,桌面端還能靠 F5 / Ctrl+R 刷新頁面,或通過網關 API 重啓受監管的 dsh web 子進程;手機瀏覽器裏沒有同等入口,運維動作往往要切回桌面或記 Unix socket 上的控制路徑。下面介紹社區插件 dsh-fnos-control,它在 DSH Web 側欄增加「服務控制」面板,把「刷新頁面」和「重啓 DSH Web」做成可點的操作,並儘量走 fnOS 網關已有的監督重啓邏輯。

這是什麼

dsh-fnos-control 是面向 fnOS(飛牛 OS) 的 DSH 插件,倉庫由維護者 QICci 發佈在 GitHub(QICci/dsh-fnos-control),在 SkillHub 目錄中歸類爲客戶端。插件不替換 fnOS 自帶能力,只是把應用裏已有的兩類操作接到 DSH Web UI:刷新當前頁,以及請求網關停止再啓動 dsh web 子進程並在健康檢查通過後恢復頁面。

項目站點:https://dsh.likkas.cn/。許可證爲 MIT(見倉庫 LICENSE)。

核心功能

側欄會多一項 服務控制(英文界面爲 Service Control),對應主面板提供兩個按鈕,含義與 fnOS 應用內行爲一致:

操作 實際效果
Reload page(刷新頁面) 執行 location.reload(),等同應用內的 F5 / Ctrl+R,不觸碰後端進程。
Restart DSH Web(重啓 DSH Web) 在存在 fnOS 網關時,調用其控制 API 停止並重啓受監管的 dsh web 子進程,等待端口健康檢查通過後刷新頁面;無網關時仍渲染面板,並走獨立的 detached-helper 回退路徑(例如手工啓動的 dsh web)。

fnOS 網關側已暴露的控制路徑(插件在可用時會包裝這一路徑):

GET  /app/fn-deepseek-harness/__fnos-gateway/control/web/status
POST /app/fn-deepseek-harness/__fnos-gateway/control/web/restart

插件 Host 側還會掛載僅本機、且需請求頭 x-dsh-control: 1 的路由:

  • GET /dsh-fnos-control/api/status:返回 PID、端口、網關可達性、檢測到的 supervisor 等狀態。
  • POST /dsh-fnos-control/api/restart:調度重啓;在 systemd 或調試器下會拒絕並說明原因。

安全與交互上:重啓需兩步確認(5 秒內確認);重啓路由僅接受 loopback 的 POST;恢復過程最長輪詢約 90 秒,超時則提示手動刷新;插件本身不向磁盤寫入數據。

環境與依賴

  • DeepSeek Harness >= 0.2.1-rc.2(README 註明在 0.2.1-rc.3 上驗證)
  • Node.js >= 20
  • 完整「網關重啓」路徑需要 fnOS 應用 fn-deepseek-harness;沒有網關時面板仍可用,重啓走 helper 回退。

當前發佈包版本爲 0.1.0(見 package.json 與 release v0.1.0)。

安裝與啓用

官方 README 給出的安裝方式如下,不要自行拼接 dsh plugin add github:... 一類未在文檔中出現的命令。

從本地目錄(開發或已解壓的源碼樹):

dsh plugin --profile web add /path/to/dsh-fnos-control

通過插件管理器添加後會自動應用 bundle;也可在 DSH UI:Plugins → install bundle → 選擇目錄。

從 tarball:

Release 附件爲 dsh-fnos-control-0.1.0.tgz(文檔中 tarball 解壓示例文件名爲 dsh-fnos-control-0.1.0.tar.gz,以你實際下載的文件名爲準)。安裝前可用 node package/scripts/smoke.mjs 校驗下載物;Release 頁給出的 SHA-256 爲 ebd31664752bba3139e12c02e5d31283ac7ce3d31cae87b71912958f20d7fb2a。

tar -xzf dsh-fnos-control-0.1.0.tar.gz
dsh plugin --profile web add ./package

寫入 profile 的 bundle 列表:

dsh plugin add 會把 bundle 名追加到 profile 的 package.json 裏 dsh.profile.bundles。若手工安裝,需自行加入 dsh-fnos-control:

{ "dsh": { "profile": { "bundles": ["...", "dsh-fnos-control"] } } }

注意:不要同時在 profile 的 cordis.patch.yml 裏重複插入同一 loader 條目,否則啓動會因 duplicate loader entry id 失敗。

典型用法

  1. 按上一節安裝並確保 web profile 已加載客戶端 bundle(dsh.client.platform 爲 web,且 immediately: true)。
  2. 打開 DSH Web,在側欄找到 服務控制,進入主面板。
  3. 日常排查 UI 狀態時點 刷新頁面;需要讓 Host 進程在監督下完整重啓時點 重啓 DSH Web,並在 5 秒內確認。
  4. 安裝後可用 README 中的命令自檢 Host 是否掛載(將端口改爲你實際的 DSH Web 端口,示例爲 3080):
node --check index.js && node --check client.js
curl -s -H 'x-dsh-control: 1' http://127.0.0.1:3080/dsh-fnos-control/api/status

status 返回本進程 PID 與網關狀態時,說明 Host 半部已掛載;側欄入口在頁面加載客戶端 bundle 後出現。

適用場景與注意

適合誰: 在飛牛 NAS 的 fn-deepseek-harness 里長期使用 DSH Web、且經常在手機或窄屏瀏覽器上操作、又不想記網關控制 URL 的用戶。

權限與安全: 插件以當前 DSH 進程權限運行;重啓會作用於受監管的 dsh web 或回退 helper 路徑。安裝前建議閱讀倉庫源碼與 MIT 許可證,確認行爲符合你的運維策略。社區目錄 SkillHub 插件頁 與 GitHub 倉庫由社區維護,與 DeepSeek / 幻方無官方從屬關係;DSH 生態強調「一切皆插件」,本文僅介紹該 bundle 的能力與安裝方式。

侷限: 檢測到 systemd 單元時 Host 側不會通過 detached helper 重啓(避免 cgroup 內進程一併退出);無 fn-deepseek-harness 時無法使用網關那條「正確」的監督握手路徑,但仍可使用刷新與 helper 回退重啓。

結尾

dsh-fnos-control 把飛牛 fnOS 場景下 DSH Web 缺的「刷新」與「監督下重啓」收進側欄,減少在手機端找快捷鍵或記 API 路徑的成本。更多說明見 GitHub README 與 SkillHub 目錄頁。

羽毛球分组比赛记分
小程序二维码

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

小夜