dsh-inline-pi-agent:在 DSH 內嵌運行 Pi Agent Loop

前言

DeepSeek Harness(DSH)自帶一套智能體循環(dsh-agent-loop),會話、Web UI、預設與權限表面都由 Harness 統一管理。若你已經在使用 pi coding agent,並希望保留 pi 自身的提示詞、工具、壓縮策略與模型路由,同時又想留在 DSH 的會話與界面裏工作,就需要把「殼」和「循環」拆開:DSH 管會話與展示,pi 管執行邏輯。

dsh-inline-pi-agent 是 Komorebi-Nine 維護的 DSH 工作流類插件(社區目錄:SkillHub 條目)。它以 profile bundle 的形式,用無頭子進程 pi --mode rpc 替換內置的 dsh-agent-loop,在不動磁盤上會話數據的前提下,把 pi 的 RPC 事件翻譯成 DSH 可持久化的事件流。

這是什麼

插件全名 dsh-inline-pi-agent(npm 包版本 0.1.0,MIT 許可證)。定位一句話:在 DSH 裏跑 pi 的智能體循環,而不是 DSH 原生循環。

DSH 仍負責會話、Web UI、預設與權限相關 UI;pi 負責自己的 prompt、tools、compaction 與 model routing。二者通過 RPC 橋接,不是把 pi 再包裝成另一種 DSH 工具。

核心功能

下列能力均來自插件 README 的「What works」說明,安裝後可按同一套行爲預期使用。

流式輸出與工具卡片

pi 的 RPC 事件會被轉換成 DSH 的 durable session 事件,以及 agent/assistant-stream 幀。流式文本、工具卡片展示、停止按鈕在 DSH 側重放,用戶體驗與原生循環接近。

斷點續聊(Resume)

每次 create/resume 時,插件會從 DSH 的 event log 重建 pi 的 session 文件。Harness 重啓後,pi 側上下文仍能接上完整對話。

模型選擇器

插件調用 pi --mode rpc get_available_models,把 pi 的模型目錄註冊進 DSH 的 LLM registry。選擇器列出的是 pi 實際能跑的模型;選中後通過 set_model 轉發給 pi。

中途轉向與排隊跟進(Steering / Follow-ups)

運行中的 steer 會轉發給 pi,接受後即 claim。排隊的 follow-up 按順序作爲獨立 turn 執行。

交還內置循環(Hand-back)

由 pi 驅動的會話仍可被內置 dsh-agent-loop resume:每個請求按 DSH 標準事件詞彙記錄,包含聲明 registry 工具模式的 request/header,便於從 pi 切回原生循環。

安裝與啓用

環境要求

  • DSH:0.2.2-rc.1 或兼容版本(package.json 中 engines.dsh 爲 ^0.2.2-rc.1)。
  • pi 可執行文件在 PATH 上,或在配置裏顯式指定 piPath。

從 GitHub 安裝

在已配置好 DSH CLI 的機器上執行:

dsh plugin --profile web add github:Komorebi-Nine/dsh-inline-pi-agent

bundle 層會禁用 agent-loop、DSH 側的 compaction 與 tool-result pruning,並插入 pi-agent 行。之後重啓 dsh web,或依賴 profile 的 patch 熱加載(官方文檔建議以重啓爲準,見下文「回滾」)。

本地目錄安裝

若你已有插件源碼目錄(無需在本文中 git clone),可用 link 方式掛載:

dsh plugin --profile web add link:/absolute/path/to/dsh-inline-pi-agent

配置項

在 profile patch 裏覆蓋 pi-agent 的 config 即可。常用字段如下(默認值以 README 爲準):

key default 含義
piPath pi pi 可執行路徑;Windows 可爲 .cmd/.exe 或通過 cmd.exe 解析的名稱。
model 空 初始推送給 pi 的路由,例如 deepseek/deepseek-flash。
models 空 DSH 路由名 → pi 路由名的映射(兩套目錄命名不一致時用)。
catalog true 是否把 pi 模型目錄註冊進 DSH,供選擇器使用。
requestHeader true 是否記錄每步的 request/header 與 request/context(token 統計與交還內置循環需要)。
streamPaceMs 16 流式文本揭示節拍(8–200 ms)。
streamCatchUpFrames 6 積壓文本應在多少 tick 內追平。
streamMaxCharsPerFrame 64 單幀最多揭示字符數。
piSessionDir ~/.dsh/pi-sessions 重建的 pi session 快照寫入目錄。
debug false 協議與生命週期診斷日誌。

Windows 上指定 pi 的示例:

- id: pi-agent
  config:
    piPath: 'C:/Users/me/.pi/agent/bin/pi.cmd'

若曾把部署默認模型改成 pi 路由,在停用 bundle 前應改回內置路由(pi 提供方僅在 bundle 加載時存在):

- id: agent-default-model
  config: { provider: deepseek-official, model: deepseek-flash }

典型用法與開發自測

日常使用時:安裝並重啓 dsh web 後,在 Web profile 下新建或恢復會話,即走 pi RPC 循環;模型列表來自 pi 目錄;需要中途改方向時使用 DSH 提供的 steer / follow-up 能力(由插件轉發)。

插件倉庫提供獨立 smoke 腳本(不依賴 DSH 服務進程),用於驗證文本、工具、多輪、中止、dispose、resume、steer、followup、token 統計與模型目錄等路徑:

node scripts/smoke.mjs text
node scripts/smoke.mjs tool
node scripts/smoke.mjs resume

接口與事件契約見倉庫內 CONTRACT.md。

適用場景與限制

適合誰

  • 已經在用 pi,希望會話、UI、預設仍落在 DSH 裏。
  • 需要 pi 的模型路由與工具棧,但又想利用 DSH 的事件日誌與 resume 語義。
  • 偶爾要把會話從 pi 交還給內置 dsh-agent-loop(依賴 requestHeader 等記錄)。

務必注意

  1. 權限與沙箱:pi 執行自己的工具,DSH 的沙箱、審批流與 permission preset 不作用於 pi 的工具調用。
  2. Hooks:插件不分發 agent/pre-step;依賴該鉤子的能力(時間上下文注入、逐步 flush、plan-mode 旁白等)在 pi 會話中不會運行。
  3. 上下文統計:contextBreakdown.toolsTokens 描述的是 DSH 工具 registry,而非 pi 的工具塊;上下文壓力以提供方上報的 usage 爲準。
  4. 安裝前審查:插件以當前 dsh 進程權限運行。安裝前應閱讀源碼與 MIT 許可證,確認符合你的安全與合規要求;社區目錄 SkillHub 爲獨立站點,與 DeepSeek / 幻方無官方從屬關係。

回滾

在 Settings → Plugins 中禁用 bundle,或移除包;agent-loop 會恢復,已有會話在磁盤上不受影響。切換啓用狀態後應重啓 dsh web:運行中的 loader 無法原子替換 agent factory,半加載狀態可能導致會話列表爲空(數據仍在磁盤上)。

結尾

dsh-inline-pi-agent 把 DSH 的會話與界面層和 pi 的執行循環拆開又接上:保留 pi 的 prompt、工具與路由,同時保留 DSH 的流式展示、resume 與模型選擇器集成。需要原生 DSH 沙箱與 agent/pre-step 鉤子時,應繼續使用內置循環或停用本 bundle。

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

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

小夜