dsh-webfile:給 DeepSeek Harness 加一套帶審批門控的 S3 / FDS / FTP 文件工具

前言

DeepSeek Harness(DSH)的理念是「一切皆插件」。一旦想讓智能體幫你搬運日誌、同步文件,就繞不開遠端存儲:S3、小米 Galaxy FDS,或者還在跑的 FTP 服務器。常見的做法是把密鑰直接寫進配置,再讓模型在 shell 裏調命令行工具——密鑰會進入配置與會話日誌,刪除、覆蓋這類操作也沒有攔截。dsh-webfile 針對這個問題:把三類存儲封裝成 8 個 agent 工具,讀操作免審批,變更操作逐次請求批准,大文件傳輸走後臺任務、可隨時取消。下面介紹這個插件。

這是什麼

dsh-webfile 是 DeepSeek Harness 的文件類插件,維護者是 modestoma,以 MIT 許可發佈,當前 package 版本爲 0.0.0,Node 引擎要求 ^22.19.0 || >=24.0.0

它支持三類存儲:S3(含 MinIO 及兼容對象存儲)、小米 Galaxy FDS、FTP/FTPS,提供 8 個工具:webfile_listwebfile_statwebfile_mkdirwebfile_deletewebfile_movewebfile_copywebfile_downloadwebfile_upload。智能體可以在會話裏直接瀏覽和管理這些存儲上的文件,而不需要你把憑證攤開在明面上。

核心功能

8 個工具:讀免審批,變更逐次批准

8 個工具裏,webfile_listwebfile_stat 是純只讀,調用不需要審批;其餘 6 個(含 webfile_download / webfile_upload)屬於變更類,每次調用前都要用戶批准,拒絕即零副作用。

webfile_listmaxEntries 默認 200、上限 1000;結果被截斷時返回 truncated: truenextToken,把它傳回去即可繼續翻頁。nextToken 是 S3 ContinuationToken / FDS marker 的透傳;FTP 沒有服務端續頁,遇到截斷需要用更大的 maxEntries 重試。

變更類工具有兩道默認保護:

1、webfile_move / webfile_copy / webfile_uploadoverwrite 默認 false,目標已存在時報 WEBBUF_EXISTS
2、webfile_delete 遇到非空目錄報 WEBBUF_DIR_NOT_EMPTY,只有顯式傳 recursive: true 纔會刪除整棵子樹。

傳輸以後臺任務運行,可隨時取消

webfile_download / webfile_upload 以後臺任務運行,進度流入 Jobs 面板,可隨時取消。取消時會中止流、刪除本地半成品文件,並把任務標記爲 killed

傳輸前有上限檢查:maxTransferBytes 默認 2 GiB,超限報 WEBBUF_TOO_LARGE,且零遠程副作用。S3/FDS 的大文件上傳達到 multipartThresholdBytes(默認 64 MiB)時改用 multipart 上傳。

憑證按引用名配置,密鑰不進會話

配置裏只寫憑證引用名(即環境變量名),密鑰值不進入配置與會話日誌;輪換密鑰後,下次調用即生效。優先級從高到低共四層:進程環境 > 憑證文件 > 項目 .env > 用戶 .env

憑證文件是 $DSH_HOME/.credentials.yaml,帶 100ms 防抖熱發佈,外部編輯後同樣在下次調用生效。

目錄是合成的:S3/FDS 沒有真實目錄

S3 和 FDS 都沒有真實目錄,目錄只是 key 前綴的聚合:webfile_mkdir 實際寫入一個零字節的 key/ 標記對象;webfile_stat 對有子對象的前綴會合成目錄結果。理解這一點,做目錄相關操作時纔不容易誤判。

安裝與啓用

1、安裝插件:

dsh plugin --profile <name> add dsh-webfile

包聲明瞭 dsh.bundle,安裝時會自動掛載到 profile 層棧,無需手動添加掛載行。

2、後續升級:

dsh plugin --profile <name> update

典型配置

經過上面的步驟,插件已掛載到 profile 層棧,接下來配置連接。

按 id 覆蓋插件配置

先在 profile 的 $DSH_HOME/profiles/<name>/cordis.patch.yml 裏定位到 id: dsh-webfile,再寫 config 覆蓋。下面是一個同時定義 S3、FTP、FDS 三類連接的示例:

- id: dsh-webfile
  config:
    connections:
      prod-logs:
        protocol: s3
        endpoint: https://oss.example.com   # 自建端點(MinIO 等);AWS 公有云可省略
        region: cn-north-1
        bucket: prod-logs
        pathStyle: true                     # MinIO 需要 true
        accessKeyRef: OSS_ACCESS_KEY
        secretKeyRef: OSS_SECRET_KEY
      legacy-ftp:
        protocol: ftp
        host: ftp.example.com
        port: 21                            # 默認 21;implicit FTPS 用 990
        userRef: FTP_USER
        passwordRef: FTP_PASSWORD
        tls: explicit                       # none | explicit | implicit,必填
      mi-fds:
        protocol: fds
        endpoint: https://cnbj2.fds.api.xiaomi.com
        bucket: mi-bucket
        accessKeyRef: FDS_ACCESS_KEY        # FDS 沒有環境憑證鏈,ak/sk 必填
        secretKeyRef: FDS_SECRET_KEY
    maxTransferBytes: 2147483648            # 單文件傳輸上限,默認 2 GiB
    multipartThresholdBytes: 67108864       # S3/FDS multipart 閾值,默認 64 MiB

兩個協議差異要注意:FDS 沒有環境憑證鏈,accessKeyRef / secretKeyRef 爲必填;FTP 僅支持被動模式(passive 默認 true),tls 必填。

憑證文件

連接裏的 accessKeyRef 等只是引用名,密鑰值寫在 $DSH_HOME/.credentials.yaml。格式是嚴格的 reference: string value 映射(不是 dotenv 語法),值必須非空,文件權限須爲 0600

OSS_ACCESS_KEY: AKIAxxxxxxxx
OSS_SECRET_KEY: xxxxxxxxxxxx
FDS_ACCESS_KEY: your FDS access key
FDS_SECRET_KEY: your FDS secret key
FTP_USER: logbot
FTP_PASSWORD: xxxxxxxx

補丁語義與熱重載

按 id 覆蓋配置時,有三條語義要先知道:

1、沒有 id 的補丁行會被跳過並告警;
2、config 是淺替換整個值,省略的字段回退到 schema 默認;
3、不要在用戶層 insert 同名行重新掛載,統一通過 id 覆蓋。

要臨時停用插件,把對應補丁行設爲 disabled: true 即可:

- id: dsh-webfile
  disabled: true

配置支持熱重載:保存 cordis.patch.yml 後,補丁經 HMR 事務性回放,無需重啓。

適用場景與注意

適合的場景:需要讓 DSH 智能體在會話裏瀏覽、搬運 S3 / FDS / FTP 文件,同時在意密鑰暴露和誤操作——讀免審批、變更逐次批准、傳輸可取消,這套門控正是爲此設計的。

使用前注意:

1、插件以當前 dsh 進程的權限運行,安裝前請先檢查源碼與許可證(本項目爲 MIT);
2、憑證文件權限務必設爲 0600
3、webfile_list 單次最多返回 1000 條,FTP 遇到截斷要用更大的 maxEntries 重試;
4、變更類操作的默認值偏保守(overwrite: falserecursive: false),需要覆蓋或遞歸時必須顯式傳參。

結尾

dsh-webfile 做的事情不復雜:把 S3、FDS、FTP 包成 8 個工具,用審批門控和憑證引用壓住風險,再用後臺任務讓大文件傳輸可控、可停。如果你的 DSH 工作流裏有遠端文件操作,值得一試。

  • 插件目錄頁:https://www.skillhub.cn/plugins/modestoma/dsh-webfile
  • GitHub 倉庫:https://github.com/modestoma/dsh-webfile

需要說明:目錄頁來自社區插件目錄,該站點獨立運營,與 DeepSeek / 幻方無官方從屬關係。

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

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

小夜