DeepSeek Harness 插件:dsh-project-prompt

前言

DeepSeek Harness(DSH)通過插件機制擴展功能。在智能體開發場景中,存在一類屬於本地機器而非代碼倉庫的指令。這些指令通常包括環境特定的 E2E 流程、僅內部訪問的端點,或者個人的工作流偏好。由於 AGENTS.md 是提交到倉庫的共享文件,它不適合存儲此類私密信息。dsh-project-prompt 插件旨在解決這一問題,它將這類規則保存在 $DSH_HOME 目錄中,永遠不會被提交到倉庫。

這是什麼

dsh-project-prompt 是一個 DeepSeek Harness 插件,用於管理私有的、按項目區分的提示詞規則。它由 imroc 維護,採用 MIT 許可證。該插件通過匹配 Git 遠程地址、本地倉庫路徑或當前工作目錄前綴,將配置的規則注入到對應的會話中,覆蓋主代理和子代理,且具備 Worktree(工作樹)感知能力。

核心功能

  • 三種匹配器:支持通過 Git 遠程 URL、本地主倉庫路徑或純目錄前綴進行匹配。
  • Worktree 感知:能識別 Git 鏈接工作樹,通過 .git 文件的指針回溯到主倉庫,一次配置覆蓋所有工作樹及其子目錄。
  • 兩種注入模式:
    • section:穩定系統提示詞片段,支持 KV 緩存,支持 {{cwd}} 和 {{model}} 變量插值。
    • inject:注入到第一條上下文消息中,不進行模板插值,適合包含字面量 {{...}} 的文本(如 Helm/Go 模板)。
  • 覆蓋子代理:子代理繼承會話的當前工作目錄,因此遵循相同的規則。
  • 加載時校驗:規則格式錯誤或未知的模板變量會在插件加載時拋出錯誤,而不是在每次請求時失敗。
  • 零依賴:單文件 ESM,僅引入 Node.js 內置模塊,無需構建步驟。

安裝與啓用

安裝前需確保 DeepSeek Harness 版本 >= 0.1.1-rc.2,且環境包含 Node.js >= 18。

通過 DSH 的插件命令安裝到指定 profile:

dsh plugin --profile web add dsh-project-prompt

安裝完成後需要重啓 DSH,因爲插件包在啓動時進行組合。

卸載命令:

dsh plugin --profile web remove dsh-project-prompt

配置規則

規則配置文件位於 $DSH_HOME/cordis.patch.yml(默認爲 ~/.dsh/cordis.patch.yml)。該文件是機器本地層,應用於機器上的所有 profile。插件會監聽該文件的變化,保存後自動重載。

基本配置示例

以下是一個配置文件片段,展示了三種匹配方式和兩種模式:

- id: project-prompt
  config:
    rules:
      # 1. 通過 Git remote 匹配(支持任意克隆位置和工作樹)
      - remote: github.com/my-org/my-project
        text: |
          ## E2E testing for this project (environment-specific, private)

          1. Test entry point: http://e2e.internal.example.net (internal only)
          2. Run `make e2e-prepare` before the first E2E run.
          3. On failures, check ... first.

      # 2. 通過本地主倉庫路徑匹配,使用 inject 模式以避免字面量 {{...}} 被解析
      - repo: /home/me/dev/another-project
        mode: inject
        text: |
          Render values like {{ .Values.replicas }} are literal here.

      # 3. 通過目錄前綴匹配
      - path: /home/me/dev
        text: |
          ...

規則字段說明

字段 類型 默認值 描述
remote string — Git 遠程 URL。比較時會忽略協議、user@、: 分隔符、.git 後綴、尾部斜槓及大小寫。
repo string — 本地主倉庫的絕對路徑。會自動匹配該倉庫的所有工作樹和子目錄。
path string — 當前工作目錄前綴。會匹配該目錄或其下的子目錄。
text string required 需注入的提示詞文本。
mode section | inject section 注入模式,見下文。
sectionName string project-prompt (自動遞增) 系統提示詞片段的名稱。
order number 50 系統提示詞片段的排序,DSH 規範中 0 爲 persona,100-199 爲工具指導。

注入模式詳解

特性 section (默認) inject
位置 系統提示詞 (systemPrompt) 用戶側第一條上下文消息
可見性 每次請求 每次請求
模板插值 支持 {{cwd}} 和 {{model}},其他完整 {{...}} 報錯 不支持,{{...}} 爲字面量
適用場景 穩定指令、KV 緩存友好 包含字面量 {{...}} 的模板

驗證安裝

安裝完成後,可通過以下步驟驗證配置是否生效。

  1. 檢查插件是否正確加載:
    dsh --profile web --dump-config | grep -A3 project-prompt
  1. 在匹配的目錄中啓動會話並提問,檢查模型是否接收到了規則文本。

  2. 查看會話日誌。注入的文本會出現在記錄的請求頭中,位於 $DSH_HOME/sessions/.../session.jsonl.zstd 文件裏。

注意事項

  • 靜態配置:規則是靜態配置,插件不會讀取倉庫內部文件(這會引入共享狀態)。倉庫內的文件加載請使用 DSH 內置的 AGENTS.md/CLAUDE.md。
  • 子模塊:Git 子模塊目錄(.git 指向 .git/modules/...)不被追蹤。如需匹配子模塊,請使用 path 規則。
  • 失敗策略:配置錯誤(如 text 缺失或 section 模式下存在未知的 {{var}})會在插件加載時報錯,而不是靜默失敗。
  • 許可證:MIT License。
羽毛球分组比赛记分
小程序二维码

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

小夜