dsh-forge:DSH 下的檢索與施工治理

前言

在 DSH(DeepSeek Harness)裏跑 Agent 時,找文件、搜調用點、改代碼往往各自調用 ls、cat、sed 或宿主內置工具,缺少統一的檢索後端,也缺少帶快照、臺賬和回滾的編輯路徑。倉庫沒有 Git 時,一旦改錯更難恢復。dsh-forge 是社區維護者 Asaiuta 發佈的工作流類插件,把 fff 的 Rust 檢索、Tree-sitter 符號解析和一套容錯編輯引擎接到 DSH 工具面,讓檢索與「施工」走同一套可治理的工具,而不是零散腳本。

這是什麼

dsh-forge 面向 DSH >=0.2.0-rc.2:全文與模糊檢索(fff 預編譯動態庫)、11 種語言的 AST 符號與 Trace、以及帶臺賬、快照、回滾的編輯與驗證。運行時不需要本機安裝 cargo / rustc;符號解析走 WASM,可選 Rust sidecar(rust_indexer/)加速掃描與 Trace。

SkillHub 等社區目錄與 DeepSeek / 幻方無官方從屬關係;插件以當前 DSH 進程權限訪問工作區與 ~/.dsh/forge,安裝前請閱讀源碼與 LICENSE。

架構概覽

層次 職責 實現
工具接入與治理 註冊、施工臺賬、會話策略 TypeScript(src/index.ts、ledger.ts、tools-*.ts)
全文檢索 模糊 find/grep、跨會話熱度 @ff-labs/fff-node + 預編譯 fff_c
符號解析 11 語言符號、大綱、精確定義 web-tree-sitter + tree-sitter-wasms
編輯引擎 漂移校正、快照對齊、歧義票據 TypeScript(src/edit-engine.ts)

不啓用 sidecar 時全部工具仍可用,符號與 Trace 查詢會走 WASM。啓用 sidecar 需在 checkout 內用 Rust 1.88+ 執行 pnpm run build:indexer,產物位於 rust_indexer/bin。

核心功能

工具面:retrieval 與 full

默認只註冊 retrieval 三個工具;在 profile 的 patch 裏把 surface 設爲 full 後,額外註冊編輯、臺賬、文件操作與 Trace 等,共 10 個 canonical 工具(與 retrieval 合計爲 README 所述「retrieval 3 / full 10」)。

工具名 層級 作用
ff_find 檢索 模糊文件名與路徑;路徑模式用內置 glob
ff_grep 檢索 模糊內容或多字面量;普通文本/正則用內置 grep
ff_symbols 檢索 view=outline 單文件大綱;view=definitions 跨文件找定義
ff_trace 完整 靜態依賴、影響、IPC、暴露與 FFI 證據(定義查詢用 ff_symbols)
ff_edit 完整 帶快照與審計的文本/符號編輯,可追加 verify
ff_file 完整 創建、刪除、移動文件或複製/移動代碼
ff_history 完整 施工臺賬與 diff、驗證記錄(列表過濾可用 pathContains)
ff_rollback 完整 預覽並恢復批次(batch / latest:true / throughBatch 三選一)
ff_verify 完整 獨立靜態驗證,不產生編輯批次
ff_project 完整 私有工程、任務、批次關聯與報告快照

只註冊新公開名,無運行時舊名 alias。內置 read / grep / glob 仍保留原 schema;forge 在分發層增強,例如 read 支持 file_path=<文件>#<符號> 只讀定義窗口。

AST 支持:JavaScript、TypeScript(含 TSX/MTS/CTS)、Python(含 PYI)、Rust、Go、C、C++、Java、C#、Lua。

數據與邊界(節選)

快照與批次在 ~/.dsh/forge/snapshots/,票據在 tickets/,驗證在 verification/;無 Git 也可回滾,整目錄可刪後由下次調用重建。單文件 AST 超過 2 MiB 會降級並提示改用 ff_grep。ff_find 在 Everything 索引命中時可返回帶尾部 / 的目錄;走 fff 模糊回退時只返回文件。

安裝與啓用

前置要求

  • Node ^22.19 || >=24
  • 已安裝 DSH,版本 >=0.2.0-rc.2 且 <0.3.0
  • pnpm

插件未上 npm,需從 GitHub checkout 後 link 到 profile。

步驟

  1. 克隆並安裝依賴(prepare 會構建 lib/):
git clone https://github.com/Asaiuta/dsh-forge.git
cd dsh-forge
pnpm install
  1. 編輯 ~/.dsh/profiles/desktop/package.json,在 dependencies 中 link 本地路徑:
{
  "dependencies": {
    "dsh-forge": "link:<dsh-forge 的本地絕對路徑>"
  }
}
  1. 在同文件的 dsh.profile.bundles 中登記 bundle 名 dsh-forge:
{
  "dsh": {
    "profile": {
      "bundles": ["...", "dsh-forge"]
    }
  }
}
  1. 安裝依賴並重啓 DSH:
pnpm -C ~/.dsh/profiles/desktop install

重啓後可在宿主中使用 /forge-status 查看當前生效狀態(含內置工具增強與交回內置的統計)。

啓用完整工具面

開箱默認 surface: retrieval。需要編輯與回滾時,在用戶 patch 中配置:

# ~/.dsh/profiles/<profile>/cordis.patch.yml
- id: dsh-forge
  name: dsh-forge
  config:
    surface: full

也可在 設置 → DSH-Forge 或 插件 → dsh-forge → 配置 中切換同一 surface 控件;保存寫入當前 profile 的 cordis.patch.yml 並重載 bundle,無需重啓應用(修改插件源碼仍需 pnpm run build 後由宿主重載)。

常用環境變量(可選)

變量 默認 說明
DSH_FORGE_DATA_DIR ~/.dsh/forge 統計、快照、驗證與工程數據
DSH_FORGE_INDEXER 自動 0 / off 關閉原生 sidecar,失敗回退 WASM
DSH_FORGE_SEARCH_NATIVE 自動 0 / false / off 時 glob/grep 交回宿主
FORGE_GLOBAL_INDEX auto Windows 上可用 Everything(es.exe);見 README
FORGE_CONTENT_INDEX 關 設爲 1 啓用 fff 內容索引;多索引根並存時有引擎缺陷,慎用

完整列表見倉庫 README「配置」一節。

典型用法

下面步驟假設已啓用 full surface,且 Agent 已掛載 forge 工具。

模糊找文件(拼寫不確定):

  • 使用 ff_find,路徑 glob 仍用內置 glob。

搜調用點或配置名:

  • 不確定的文本或多關鍵字 OR 用 ff_grep;明確正則用內置 grep。

讀單個函數定義(不必整文件 read):

  • 內置 read,參數形如 file_path=src/store.ts#Store.save。

帶審計的修改:

  • ff_edit 完成編輯;需要時用 ff_verify 單獨驗證(不新建批次)。
  • 符號編輯參數包括 sourceSymbol、includeLeadingComment 等,詳見接口遷移文檔。

出錯或需要對比歷史:

  • ff_history 查批次與 diff;ff_rollback 先預覽再按批次恢復(可用 latest:true 或 throughBatch)。

靜態依賴與影響:

  • ff_trace;符號定義仍用 ff_symbols 或 read#Symbol,不要給 trace 傳 symbol:。

安裝 dsh-better-sidebar 時,側欄「臺賬」與 ff_history 同源數據;HTTP 路由包括 GET /forge-ledger、/forge-config、/forge-projects(headless profile 無 webServer 時沒有設置頁,主插件仍加載)。

適用場景與注意

適合:希望在 DSH 裏統一檢索後端、用符號級 read/edit、並在無 Git 倉庫仍保留快照與回滾的 Agent 工作流;Windows 上需要 Everything 加速文件名檢索時可配置 FORGE_GLOBAL_INDEX。

注意:

  • 插件以 DSH 進程權限讀寫工作區與 ~/.dsh/forge,安裝前審查源碼與 MIT 許可證。
  • M0/M1 實現已在當前源碼中,README 寫明真實 DSH 集成驗收仍依賴具備宿主模塊的環境;M2 及之後在路線圖中。
  • grep 增強不走內容索引,是爲保持 BOM、二進制與正則語義與內置一致;/forge-status 可覈對 Rust 搜索是否接管。
  • 社區目錄星標與 npm 發佈狀態以倉庫爲準;當前爲源碼 link 安裝,無 dsh plugin add 一類一鍵命令出現在官方 README 中。

結尾

dsh-forge 把 fff 檢索、Tree-sitter 符號和帶臺賬的編輯收進 DSH 工具面,默認輕量 retrieval,按需切到 full 做 Trace、驗證與回滾。若要跟進接口變更與路線圖,以 GitHub 倉庫 README 與 docs/ 爲準。

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

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

小夜