dsh-tool-everything:用 Everything HTTP 接口做毫秒級本機文件檢索

前言

在 DSH 裏讓模型找本機文件,常見做法是走 Shell 遞歸 find/dir,或依賴 IDE 工作區索引。前者在大盤上慢、也喫磁盤;後者往往只覆蓋當前打開的項目。Windows 上若已用 Everything(voidtools)維護 NTFS 文件名索引,查詢本身是毫秒級、不必掃目錄——Everything 讀主文件表建索引,並用 USN Journal 增量更新。

dsh-tool-everything 是維護者 leolee9086 的 DSH 聯網工具類插件:不自己建索引,只把模型的檢索請求轉成 Everything 自帶的 HTTP 調用,並把結果整理成 Host 工具輸出。下面介紹它提供什麼能力、如何啓用 Everything 與插件,以及整機檢索與工作區檢索在審批上的差別。

這是什麼

  • 定位:DSH 工具插件,通過 Everything 的 HTTP 接口檢索本機已索引的文件名與路徑。
  • 維護者:leolee9086;源碼在 GitHub leolee9086/dsh-tool-everything(包體也位於 SAC_search 倉庫的 dsh-tool-everything/ 子目錄)。
  • 分類:聯網工具(目錄頁:SkillHub 插件頁)。
  • 許可證:MIT;當前 package 版本 0.2.0(以 package.json 爲準)。

插件暴露三個 Host 工具:everything_search(整機索引,默認需審批)、everything_workspace_search(範圍釘在當前會話工作區,免審批)、everything_status(探測 Everything 是否可用)。

核心功能

三個 Host 工具

工具 範圍 審批(默認 approvalMode: auto)
everything_search 整機 Everything 索引 會話爲 danger-full-access 時直接調用;workspace-write / read-only 時走 DSH 審批;讀不到權限服務則 fail closed
everything_workspace_search 僅 workspaceRoot 及其子路徑(可 subpath) 默認免審批;解析不到工作區根時 fail closed;approvalMode: always 仍會申請
everything_status 健康/探測 按插件實現與測試覆蓋爲準

everything_search 不提供「只搜工作區」的參數;任何整機檢索在非完全文件權限下都會過審批。工作區工具沒有 path 參數,範圍由插件與會話沙箱策略同源解析,不接受調用方用絕對路徑、UNC、..、引號或 query 中的 | 擴大範圍(| 是 Everything 的 OR,會讓範圍限定失效)。

審批與會話文件權限

Everything 索引覆蓋整機路徑,且官方 HTTP 文檔說明 indexed 條目默認可被搜索並下載(web server)。插件在 tools/pre-execute 讀取 ctx.sandboxPolicy.resolve({ session }).mode(顯式覆蓋 > 會話 sandbox/mode > 部署默認),再決定 { kind: "ask" } 或直接放行。DSH 負責審計與裁決;插件不自行放行違規調用。

config.approvalMode 可選 auto(默認)、always(任何權限都問)、never(從不問,文檔不建議)。

審批摘要會把本次 query 等參數放在最前面,並包含 path/ext/probe/maxResults/offset/sort 與 regex/matchCase/wholeWord/ascending;超過 400 字會截斷。

查詢語法與便捷參數

query 使用 Everything 自帶語法,插件不解析。在 Everything 1.4.1.1032 HTTP 接口上實測:ext:、path:、folder:、size:、dm:、file: 有效;name: 無效(應直接寫文件名)。

path、ext 會拼進查詢串(1.4 HTTP 不認獨立目錄/擴展名參數)。path 會自動補末尾 \ 或 /,避免 C:\Program Files 誤匹配 C:\Program Files (x86) 等同前綴目錄。

結果通過 path_column=1、size_column=1、date_modified_column=1 請求;date_modified 爲 Windows FILETIME,需換算成毫秒,不能直接當 Unix 時間戳。

前置條件:打開 Everything HTTP 服務

插件零 npm 運行時依賴,但要求本機 Windows + 已安裝並運行 Everything,且 HTTP 服務已開啓(默認關閉)。

在 Everything 中:

  1. 工具 → 選項 → HTTP 服務器,勾選「啓用 HTTP 服務器」;
  2. 監聽端口與插件 config.port 一致(默認 8080);
  3. 綁定限定爲 127.0.0.1,不要暴露到局域網;
  4. 取消勾選「允許下載文件」。

也可編輯 %APPDATA%\Everything\Everything.ini:

http_server_enabled=1
http_server_bindings=127.0.0.1
http_server_port=8080
http_server_allow_file_download=0

改完後重啓 Everything。驗證 HTTP 是否可用:

curl "http://127.0.0.1:8080/?search=Everything.exe&json=1&count=1&path_column=1"

文檔註明在 Everything 1.4.1.1032 上實測;1.5 的 HTTP 參數與 1.4 有差異,本插件按 1.4 行爲實現。

安裝與啓用

需要 Node.js 22.19.0 或更高。

開發時可將 dsh-tool-everything/ 目錄放入 $DSH_HOME/plugins/,或在 profile 裏 link。在該 profile 的 cordis.patch.yml 中掛載(已有 insert 列表時只追加):

- insert:
    - id: dsh-tool-everything
      name: dsh-tool-everything
      config:
        host: 127.0.0.1
        port: 8080

包內自帶 cordis.patch.yml,也可作爲 bundle 掛載:

- name: dsh-tool-everything

重載插件或重啓 DSH 後生效。安裝前請自行閱讀源碼與 MIT 許可證;插件以當前 DSH 進程權限運行,並會訪問本機 127.0.0.1 上的 Everything 服務。

配置項

鍵 默認 說明
host 127.0.0.1 Everything HTTP 地址
port 8080 與 Everything 選項一致
timeoutMs 15000 單次查詢超時
defaultResults 50 未傳 maxResults 時的條數
maxResults 500 單次返回上限
maxQueryLength 4096 查詢串長度上限
approvalMode auto auto / always / never
approvalReason 內置 自定義審批說明

典型用法

模型或 Host 側可調用(示例來自 README):

everything_search(query="ext:psd 效果圖")
everything_search(query="報價", path="D:\\工作", ext="xlsx;docx", maxResults=20)
everything_search(query="^方案.*\\.pdf$", regex=true, sort="date_modified", ascending=false)
everything_workspace_search(query="規則", ext="js;md")
everything_workspace_search(query="報價", subpath="docs\\報價")
everything_status(probe="Everything.exe")

工作區檢索用 subpath 限定工作區內的相對子目錄;整機檢索用 path 限定目錄(插件會收緊尾部分隔符)。

適用場景與注意

適合:已在 Windows 上使用 Everything、希望 DSH 智能體在可控審批下查整機文件名,或在當前工作區內免審批快速找配置/文檔/代碼文件。

務必注意:

  • 僅 Windows;Everything 未運行則只能報錯,插件不建索引。
  • 返回條數受 Everything count 限制,超出部分不返回(輸出中會提示剩餘條數)。
  • 工作區根來自會話(cwd 等);會話更換工作目錄需新開會話,插件不緩存。
  • 社區目錄 SkillHub 與 DeepSeek / 幻方無官方從屬關係;DSH 生態是「一切皆插件」,安裝第三方插件前請覈對來源與權限策略。

維護者提供的本地測試(不要求本機裝 Everything):

pnpm test
pnpm run check

結尾

dsh-tool-everything 把 Everything 的毫秒級文件名索引接進 DSH:整機用 everything_search 並跟會話文件權限走審批,項目內用 everything_workspace_search 把範圍釘在工作區。啓用前在 Everything 側打開僅本機綁定的 HTTP 服務並關閉文件下載,端口與插件配置對齊即可。

  • 目錄頁:https://www.skillhub.cn/plugins/leolee9086/dsh-tool-everything
  • GitHub:https://github.com/leolee9086/dsh-tool-everything
羽毛球分组比赛记分
小程序二维码

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

小夜