DeepSeek Harness 插件:爲 Jujutsu (jj) 一等支持

前言

DeepSeek Harness (DSH) 生態採用「一切皆插件」的架構,插件在本地以當前進程權限運行。對於使用 Jujutsu (jj) 的開發者,一個常見問題是:智能體在 jj 工作區裏直接調用 git commit、git reset 等命令,容易破壞 change graph,且現有 DSH 插件通常只提供 git 支持,對 jj 原生能力覆蓋不足。aqian0/dsh-jj 是一個插件,它爲 DeepSeek Harness 提供 Jujutsu 的一等支持。

這是什麼

aqian0/dsh-jj 是一個 DSH 插件,維護者爲 AQian0,許可證爲 MIT。它爲 DSH 提供了 13 個 jj 原生工具(如 jj_status、jj_log、jj_diff 等),以及倉庫識別、防混淆 guard、模型上下文注入等能力。插件在 jj 倉庫裏會自動向模型注入「優先用 jj」的上下文,在非 jj 倉庫則不注入。

核心功能

倉庫識別

插件能區分 git 倉庫、jj-colocated 倉庫、jj-native 倉庫和非倉庫。當 jj 與 git 嵌套時,插件給出明確歸屬,不會把 jj 工作區當成普通 git 倉庫。

防混淆 guard

在 jj 倉庫裏執行 git commit、git reset 等會破壞 change graph 的命令時,默認放行並在結果裏提示等價的 jj 命令。也可以把 guardMutatingGit 設爲 deny 來直接拒絕這些命令,並給出等價命令。

jj 原生工具

插件提供 13 個 jj_* 工具:

  • jj_status:工作副本 @ 的狀態
  • jj_log:按 revset 查看提交(@、@-、bookmarks() 等)
  • jj_diff:指定 revset 的 diff
  • jj_new:新建 change 並設爲 @
  • jj_describe:就地修改提交描述(代替 git commit --amend)
  • jj_squash:把改動並進另一個提交
  • jj_undo:撤銷/恢復到某個 operation
  • jj_op_log:operation 歷史,用於找 jj_undo 的目標
  • jj_workspace_add / jj_workspace_list:新建/列出 jj workspace
  • jj_bookmark_list / jj_bookmark_set:列出/設置 bookmark
  • jj_rebase:rebase 提交及其後代

模型上下文

在 jj 倉庫裏自動向模型注入「優先用 jj」的上下文;非 jj 倉庫不注入。

項目根發現

讓 agent-instructions 也能把 .jj 當作項目根標記(headless/CLI profile 生效)。

不回退 git

jj 不可用或目錄不是 jj 倉庫時,jj_* 工具會報錯並給出處理建議,不會靜默改用 git。

安裝與啓用

安裝前需確保 DSH 與 jj CLI(jj 在 PATH 中,或通過 jjCommand 指定)。插件無其他運行時依賴。

從 npm 安裝,在 Plugin Manager 裏把 spec 填成精確版本(如 @aqian0/dsh-jj@0.2.1),或執行:

dsh plugin --profile <name> add @aqian0/dsh-jj@0.2.1

本地目錄安裝:lib/ 是構建產物、不入庫,先在倉庫根執行 npm run build,再在 Plugin Manager 裏安裝本地 bundle,spec 填本倉庫絕對路徑(如 /path/to/dsh-jj);Web GUI 在設置 → 插件管理,Agent 側用 plugin_manager 的 install_bundle。

安裝後自動啓用 jj-runtime / jj-tools / jj-guard 三行,並給 agent-instructions 加上 .jj 根標記。用 Plugin 頁面或 list_plugins 確認。

典型用法

安裝後自動生效,無需手工寫 profile。典型的 agent 用法如下:

你說 模型調用
“看下當前 jj 狀態” jj_status
“列出最近 10 個提交” jj_log
“把當前改動並進上一個提交” jj_squash
“改一下當前 change 的描述” jj_describe
“撤銷剛纔那次 jj 操作” jj_undo
“新建一個 workspace 放到 /tmp/wt” jj_workspace_add

在 jj 倉庫裏直接讓 agent 跑 git commit 之類的命令時,默認會在工具結果裏追加「優先用 jj」的提示。把 guardMutatingGit 設爲 deny 後會直接拒絕並給出等價命令:

Blocked: `git commit` in a Jujutsu (jj) workspace (jj-colocated: /path/to/repo).
Use the jj equivalent instead:
  jj commit -m "…"      (or: jj describe -m "…" then jj new)

配置

所有配置鍵可選,寫在 profile 中對應 bundle 行的 config 裏:

鍵 默認 說明
jjCommand / gitCommand jj / git 可執行文件名;gitCommand 只用於探測和提示
timeoutMs / graceMs 30000 / 3000 子進程超時,以及超時後強制結束前的寬限時間
maxOutputBytes 262144 單個輸出流(stdout / stderr)的上限
detectCacheTtlMs 10000 倉庫檢測結果的緩存時長
guardMutatingGit warn jj 倉庫內 mutating git 的處置:warn(放行+提示) / deny(拒絕) / off
guardGitInJjNative warn 僅 jj-native 倉庫內 git 的處置
guardJjRepositoryWide warn jj undo / jj op restore 等倉庫級 jj 操作的處置
guardTools bash / pwsh / terminal_send 參與上述守衛判定的 shell 工具名
guardCreateWorktree true 在 jj 倉庫裏拒絕 create_worktree,引導用 jj workspace add
readOnlyGitNotice true colocated 倉庫內只讀 git 命令是否附「優先用 jj」提示
preferJjContext true 會話開始時注入「優先用 jj」的模型可見上下文
defaultLogLimit / maxLogLimit 30 / 200 jj_log 的默認與最大返回條數
defaultCwd '' 工具沒有 workdir 時的回退目錄(空 = 進程 cwd)

適用場景與注意

適合需要智能體在 jj 工作區裏進行版本控制操作的團隊和個人開發者。插件以當前 dsh 進程權限運行,安裝前應檢查源碼與許可證。

已知限制:

  • jj 未安裝或目錄不是 jj 倉庫時,jj_* 工具會報錯並給出處理建議,不會退回 git。
  • agent-instructions 的 .jj 根標記覆蓋在 Web profile 不生效(Web 在 bundle 層禁用了頂層該行),headless/CLI profile 生效。
  • jj-native 工作區裏項目級 skill 根仍按 .git 查找(上游硬編碼),暫不可用。

結語

aqian0/dsh-jj 爲 DSH 提供了完整的 jj 原生工具鏈與上下文注入,讓智能體在 jj 工作區裏能安全、高效地執行版本控制操作。插件目錄頁:https://www.skillhub.cn/plugins/AQian0/dsh-jj;GitHub:https://github.com/AQian0/dsh-jj

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

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

小夜