前言¶
DSH 跑久了,token 消耗的大頭常在工具結果上:git status 打幾十行、編譯輸出淹沒在進度噪音裏、grep 重複的文件名和行號反覆出現。這些內容模型大多不需要,但都占上下文,而且每次調用都要重新讀一遍。
dsh-rtk 就是針對這一層的插件。它由 wings1848 維護,包名 @wingsbutterfly/dsh-rtk,當前版本 0.1.2,MIT 許可。它做的事有兩件:在命令派發前把它改寫成語義等價的 rtk 命令;在工具輸出進入模型上下文之前跑一條壓縮管線。它是上游 pi-rtk-optimizer 移植到 DSH 插件模型上的實現。
需要先說明一點:dsh-rtk 是包在 rtk 外面的插件,不是 rtk 的替代品。PATH 上沒有 rtk,插件就靜默停擺,命令原樣執行、輸出不壓縮。因此下文安裝部分先裝 rtk,再裝插件。
工作原理¶
README 裏給了一段最短的示例:
模型發出: git status
實際執行: rtk git status
模型看到: Branch: main
Modified: 2 files
src/a.ts
改寫和壓縮分兩路進行,覆蓋面不完全一樣:命令改寫覆蓋 bash、pwsh、ops_bash 三類 shell 工具;輸出壓縮覆蓋 bash、read、grep、ops_bash、ops_grep 五類工具結果。
核心功能¶
命令改寫¶
幾個實現上的關鍵選擇,來自 README:
- 插件自身不帶改寫表,改寫時調用
rtk rewrite詢問已安裝的二進制。支持範圍因此跟隨你裝的 rtk 版本,而不是另一個容易過期的清單。 - 三種模式:
off全關;rewrite直接替換命令;suggest原樣執行、只報告本可使用的等價命令。 - 運行時守衛:無法確認 rtk 可用時按原命令執行,缺少優化器不會擋住工作。
- 子進程環境脫敏:
*_KEY、*_PASSWORD、*_SECRET、*_TOKEN命名的變量與DSH_*一律不傳給 rtk 外呼進程,PATH、locale、代理設置保留。 - 被改寫的命令默認不注入
RTK_DB_PATH,rtk 寫它自己的用戶級庫;可用historyDbPath釘到指定位置,相對路徑與目錄會被拒絕。
輸出壓縮¶
壓縮是一條多階段管線:
| 階段 | 作用 |
|---|---|
| ANSI 剝離 | 去掉終端顏色與格式轉義序列 |
| 構建過濾 | 提取編譯錯誤與警告,丟棄進度噪音 |
| 測試聚合 | 摺疊爲 通過/失敗/跳過 計數加失敗摘錄 |
| Git 壓縮 | 歸納 git status、git diff、git log |
| Linter 聚合 | 統計問題數並按規則與文件排序 |
| 搜索分組 | 把 grep 風格匹配按文件歸組 |
| read 壓縮 | readCompaction: minimal 刪普通註釋;aggressive 只留 import 與簽名(默認關) |
| 硬截斷 | 最後兜底的字符預算 |
兩條是硬約束。其一,DSH 的結果契約會存活:尾部狀態標記 [exit code: N]、[stderr]、[timed out after …]、[sandbox: …] 先被摘出,正文重寫後原樣接回並保證在最後一行,Web UI 也解析同一行畫退出狀態。其二,壓縮絕不把結果變大:某個技術若不能真正縮短文本,就保留原文且不上報收益。
另外,掛載 dsh-spill-policy 時插件會關掉自己的硬截斷。原因是插件默認 12000 字符的閾值遠低於 spill 的 50000 字節閾值,自己截斷跑在 spill 前面,那份可恢復的落盤文件就永遠沒有機會生成。是否讓位只看服務在不在,沒有開關。
配置頁與收益面板¶
Web 宿主的插件頁上,rtk 行會有自己的配置控制。頁面畫日常字段、本地暫存編輯、通過宿主設置服務提交,被覆蓋的字段帶逐項恢復。表單下方是收益面板:20 格效率條、原始輸出 / rtk 處理後 / 省下及佔比、命令數與平均耗時,可在按天與按命令之間切換,並按工作區與時間窗切片。數據由宿主執行 rtk gain -d -f json 取得,經帶鑑權的精確 Fetch 路由 POST /api/dsh-rtk/gain 送到瀏覽器;沒有 Web connection 的部署會明確顯示臺賬不可用,而不是渲染壞頁面。
安裝與啓用¶
0. 前置:先裝 rtk 二進制¶
PATH 上找不到 rtk 時,插件靜默停擺,整個會話只多一行 [rtk] rtk not found; rewriting is off,夾在工具輸出裏很容易漏看。所以先裝 rtk:
brew install rtk # macOS / Linux(Homebrew,推薦)
winget install rtk-ai.rtk # Windows
curl -fsSL https://raw.githubusercontent.com/rtk-ai/rtk/refs/heads/master/install.sh | sh
cargo install --git https://github.com/rtk-ai/rtk
不要執行不帶 --git 的 cargo install rtk,crates.io 上同名的另一個 crate 不是這個工具。
裝完驗一下,必須能打印版本號:
rtk --version
1. 安裝插件包¶
dsh plugin --profile web add @wingsbutterfly/dsh-rtk
插件聲明瞭 dsh.bundle,所以這條命令既安裝又掛載,插件管理器把包名追加進 dsh.profile.bundles。裝完需重啓宿主,profile 行只在啓動時掛載。
版本要求:支持 dsh 0.1.5、0.1.7、0.2.0、0.2.1(逐條實測,證據見倉庫 docs/verification.md);Node ≥ 22.18。
2. 檢查配置¶
所有字段可選,以下是默認值:
- id: rtk
name: '@wingsbutterfly/dsh-rtk'
config:
mode: rewrite # off | rewrite | suggest
compact: true # 是否壓縮工具輸出
maxChars: 12000 # 字符預算(1000–200000)
readCompaction: none # none | budget | minimal | aggressive
rtkExecutable: rtk # 名字或絕對路徑,空串表示自動探測
historyDbPath: '' # '' = rtk 自己的庫;或絕對/~ 路徑,或 `isolated`
rtkExecutable 會自動探測:加載時先在 PATH 裏查,Windows 上還會查 WinGet、cargo、Scoop 的常見安裝目錄,每個候選都用 --version 驗一遍。手填過的值不會被覆蓋。
也可以在 DSH 設置文檔裏實時改,改完無需重啓:dsh 0.1.7 及以上是獨立的設置條目,名字取組合行的 id;0.1.5 是 dsh-rtk 命名空間。/rtk path 會報告插件實際看到的是哪一層配置。
注意行放在哪一層的約束:放在家目錄 patch(~/.dsh/cordis.patch.yml)裏的行是隻讀的,在線寫入會被拒絕,/rtk reset 會如實報告。要保留在線編輯,請把行放進某個 profile 的組合。
典型用法¶
會話內的幾條命令:
/rtk verify:檢查 rtk 是否可用,失敗時直接打印安裝方式。/rtk stats:報告本次會話裏壓縮省下多少字符,按工具和按技術分別統計。/rtk gain [flags]:顯示 rtk 爲插件改寫過的那些命令實際收回了多少。/rtk path:報告插件實際讀到的配置與臺賬層。
運行時驗證過的一條現象(宿主 0.2.1-rc.2,記錄見 docs/verification.md):模型發出 ls,實際執行 rtk ls;cat 實際執行 rtk read,臺賬位置跟隨 rtk 自己的庫。
適用場景與注意事項¶
適合在 DSH 上跑大量 shell 工具調用、又被長輸出反覆佔用上下文的開發者。命令改寫和壓縮在 host 平面行上生效,覆蓋該 profile 下的每個 agent、preset、子智能體,不是隻作用於單個會話。要收窄範圍,用行自己的開關:mode: off 全關,mode: suggest 只報告不改寫。不希望覆蓋全 profile 時,README 另給了把包裝成普通依賴、手工把行加進目標 preset 插件列表的做法,此時不要在 bundle 裏重複掛載。
安裝前應當檢查源碼與許可證。插件以當前 dsh 進程的權限運行,會讀取環境變量並派生子進程;如前所述外呼做了脫敏處理,但這意味着它能看到你在這個宿主裏執行的命令,生產環境按你對待其他第三方插件的同一標準評估。
另外,readCompaction 默認是 none。README 給出的理由:過濾或截斷 read 結果會讓模型手裏的副本與磁盤文件不一致,而編輯正是對着那份副本寫的。需要可讀性上的壓縮時,用 minimal,並接受這個前提。
小結¶
dsh-rtk 的作用是把 rtk 的改寫和壓縮接進 DSH 的工具調用路徑,讓長輸出在進入模型之前就短一截,並保持 DSH 的結果標記不變。它是在 rtk 之上的薄層,收益取決於 rtk 本身的能力。
目錄頁:https://www.skillhub.cn/plugins/wings1848/dsh-rtk
GitHub:https://github.com/wings1848/dsh-rtk