前言¶
在飛牛 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 失敗。
典型用法¶
- 按上一節安裝並確保 web profile 已加載客戶端 bundle(
dsh.client.platform爲web,且immediately: true)。 - 打開 DSH Web,在側欄找到 服務控制,進入主面板。
- 日常排查 UI 狀態時點 刷新頁面;需要讓 Host 進程在監督下完整重啓時點 重啓 DSH Web,並在 5 秒內確認。
- 安裝後可用 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 目錄頁。