dsh-file-manager:在 DSH Web 裏直接管理會話工作區文件

前言

DeepSeek Harness(DSH)的 Web 端自帶「文件」面板,可以列出目錄、預覽文檔,但寫方向的能力——上傳、打包下載、重命名、刪除、建文件夾——並不在默認實現裏。日常改工作區內容時,很多人仍要開 SFTP 或本機同步工具,和瀏覽器裏的會話來回切換。

下面介紹社區插件 dsh-file-manager(維護者 wchengk09,分類:客戶端)。它在同一套 Web GUI 裏補上 authenticated、限定在當前 session workspace 內的傳輸與管理界面,目標是把常見文件操作留在 DSH 會話裏完成。

這是什麼

dsh-file-manager 是標準 DSH profile bundle(dsh.bundle.patch + dsh.client),爲 DeepSeek Harness Web 的 Files 能力增加寫方向:上傳、下載、文件夾 ZIP、重命名、刪除、新建文件夾。官方文件面板只負責列表與預覽;本插件額外提供完整「文件管理」側欄標籤,並在內置「文件」標籤的操作行裏增加快捷入口。

插件與 DSH 同屬「一切皆插件」生態;社區目錄頁在 skillhub.cn,源碼在 GitHub。目錄信息與 README 一致時,以倉庫文檔爲準。

核心功能

界面層

位置 能力
右側邊欄新標籤 文件管理(可從引導頁進入) 麪包屑導航、目錄優先排序、多選、拖放上傳(含文件夾)、單文件進度與取消、覆蓋確認、文件下載、文件夾 ZIP 下載、重命名、刪除、新建文件夾
內置 文件 標籤操作行 對當前展示目錄:Upload、ZIP download、Open manager
文檔預覽標籤操作行 對當前打開文件:Download

上傳以流式寫入磁盤(不做整文件內存緩衝);下載支持 HTTP Range;文件夾 ZIP 在遍歷目錄樹時流式輸出。

Host API

路由前綴爲 /api2/dsh-file-manager/*(不走 reflection 的 /api 通道):

方法 路徑 用途
GET /info?sessionId 會話工作區根路徑
GET /list?sessionId&path 單層目錄列表
POST /upload?sessionId&path&name&overwrite application/octet-stream 流式上傳;name 可含 a/b/c
GET /download?sessionId&path[&inline=1] 單文件下載,支持 Range
GET /zip?sessionId&path 目錄流式 ZIP
POST /mkdir JSON {sessionId, path}
POST /move JSON {sessionId, from, to, overwrite?}
POST /copy JSON {sessionId, from, to, overwrite?}
POST /delete JSON {sessionId, paths: []}

成功響應形如 { "ok": true, "value": … };失敗爲 { "ok": false, "error": { code, message, details } },並帶對應 HTTP 狀態(例如 outside-workspace 403、exists 409、upload-too-large 413)。

安全與邊界

  • 認證與來源:各路由先走 composition 的 connection.requestRejection(),與官方 /api 相同的 Host/Origin 校驗與會話 cookie;無 Connection 的 composition 直接拒絕。
  • CSRF:所有 mutating 路由要求請求頭 x-dsh-fm: 1,跨站表單無法設置。
  • 工作區隔離:路徑相對 session 的 cwd(回退到 sandboxPolicy.workspaceRoot)解析;禁止 .. 逃出;realpath 二次校驗,指向工作區外的 symlink 在 download、zip、delete、move 等操作中被拒絕。
  • 覆蓋:upload、move 默認不覆蓋(exists);瀏覽器確認後可帶 overwrite 重試。
  • 上限:單文件上傳默認 16 GiB(maxUploadBytes);列表最多 5000 項;ZIP 最多 60000 項 / 4 GiB(ZIP32)。

已知限制

  • 上傳不支持斷點續傳;失敗需從頭傳。下載可通過 Range 續傳。
  • Host 重載前 /copy 未就緒時,粘貼會回退爲「下載再上傳」(目錄遞歸),結果相同但更慢;路由加載後會自動走服務端 copy。
  • 僅 ZIP32;超限會明確報錯,不生成損壞包。
  • 不支持 chmod / chown。
  • 只管理當前 session 的工作區。
  • 與內置文件面板同類型接管:啓用後 shadow 官方實現,不會出現兩個文件面板並排。

安裝與啓用

包爲標準 web profile 依賴,Node 引擎要求 >=20,許可證 MIT(見 package.json 版本 0.1.0)。

先用 pnpm 把本地包裝進 web profile:

cd ~/.dsh/profiles/web
pnpm add file:/path/to/dsh-file-manager
# then add "dsh-file-manager" to package.json -> dsh.profile.bundles

不經過 pnpm 時可用符號鏈接:

ln -s /path/to/dsh-file-manager ~/.dsh/profiles/web/node_modules/dsh-file-manager
# add "dsh-file-manager" to package.json -> dsh.profile.bundles

在 package.json 的 dsh.profile.bundles 中加入 "dsh-file-manager"。重啓 dsh web(或等待 profile 熱重載),再刷新頁面。捆綁的 cordis.patch.yml 會插入 host 行:

- insert:
    - id: file-manager
      name: dsh-file-manager

若要在 profile patch 裏關閉插件,可對 - id: file-manager 設置 disabled: true;瀏覽器側隨 host 行一併消失。

可選 host 配置示例:

- id: file-manager
  config:
    maxUploadBytes: 17179869184
    maxListEntries: 5000
    zipMaxEntries: 60000
    zipMaxBytes: 4294967294

典型用法

  1. 完成安裝並刷新 Web 後,從引導頁或右側邊欄打開 文件管理,用麪包屑進入目標目錄。
  2. 拖放文件或文件夾到面板,或在內置 文件 標籤對當前目錄點 Upload;大文件可看單文件進度,必要時取消。
  3. 選中文件或目錄:下載單個文件、對文件夾 ZIP download,或在內置 文件 標籤對當前目錄打包下載。
  4. 重命名、刪除、新建文件夾在 文件管理 標籤內完成;需要覆蓋已有路徑時按界面確認後再提交。
  5. 預覽某個文檔時,在預覽標籤操作行使用 Download 拉取當前文件。

開發自測(來自 README):

cd dsh-file-manager
ln -s ~/.dsh/profiles/web/node_modules node_modules   # schemastery for tests
node --test test/*.test.mjs

適用場景與注意

適合在 DSH Web 會話裏頻繁改工作區、又不想爲每次小改動開 SFTP 的智能體開發者或運維。插件 Host 路由與當前 dsh 進程權限 一致,讀寫範圍仍被限制在該 session 的 workspace;安裝前應自行審閱 源碼與 MIT 許可證,確認符合你的安全策略。

社區目錄星標等信息以站點展示爲準(抓取時爲 0);功能細節以 GitHub README 爲準。

結尾

dsh-file-manager 把上傳、下載、ZIP、重命名、刪除和建目錄收進 DSH Web,與內置只讀文件列表形成互補,減少會話內外來回切工具的成本。

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

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

小夜