通过 change graph 连接的 DeepSeek Harness 与 Jujutsu

dsh-jj-vcs

面向 DeepSeek Harness 多 Agent 协作的 Jujutsu 版本控制插件

English · GitHub release Verification status Jujutsu 0.44.0 MIT license

`dsh-jj-vcs` 为 DeepSeek Harness Agent 提供更简洁的版本历史操作方式。每个 Agent 使用独立的 Jujutsu workspace 和 change。技能会记录任务开始与完成时的 repository operation,交接时核对任务归属,并且把远端发布限制在已经审查的精确 bookmark 上。 Git 继续保存仓库数据,GitHub 继续提供远端托管。Agent 通过 `jj` 修改版本历史,省去 staging index、branch checkout 和 raw Git 修改命令之间的协调。 > [!IMPORTANT] > 这是独立维护的社区项目,并非 DeepSeek 官方发布。当前命令规则仅对应精确版本 `jj 0.44.0`。 ## Jujutsu 适合多 Agent 协作的原因 Jujutsu 把工作副本直接视为 change。Agent 修改文件后即可检查内容,无需额外执行 `git add`。普通 rebase 和描述修改会改写 commit,此时 change ID 通常保持不变,commit ID 则继续表示某一次精确快照。 多个 Agent 并行修改时,这个区别很实用。协调方为每项任务分配一个 change ID,为每只工鸦建立独立 workspace,并在交接时核对相同身份。仓库修改还会进入 Jujutsu operation log,因此任务前后可以生成 receipt,也可以依据 operation 恢复。 插件在 JJ 能力上增加 DSH 专用规则: | 协作需求 | 技能提供的行为 | |---|---| | 隔离 Agent 修改 | 每个 Agent 使用一个仓库外部 workspace 和一个 change | | 明确任务归属 | 在 change 描述中保存任务与 Agent,并在交接时核对 | | 记录仓库修改 | 保存任务建立与完成前后的 operation ID | | 控制远端发布 | 分离任务内修改、共享历史修改和远端可见操作 | | 检查并发状态 | 拒绝冲突、分歧 change、共享 change 和未知 workspace | | 保护 Windows 文件状态 | 检测实体化 Git symlink 和会产生虚假文件变化的 workspace 别名 | ## 快速开始 ### 环境要求 | 组件 | 当前维护基线 | |---|---| | DeepSeek Harness | `0.1.1-rc.1` 的技能注册表与 Profile Bundle 接口 | | Jujutsu | 精确版本 `jj 0.44.0` | | Node.js | `>=22.19.0` | | Git | 仓库 backend 与只读互操作 | ### 在 DSH 中安装已审查版本 ```sh dsh plugin --profile add github:bingfengaaaaa/dsh-jj-vcs#v0.1.1 dsh --profile --dump-config ``` release tag 便于直接使用。需要完全固定安装内容时,应在审查 GitHub release 页面后,把 `v0.1.1` 替换为页面显示的精确 commit ID。 本地开发时,在仓库父目录执行相同命令,并把软件包来源改为 `./dsh-jj-vcs`。 软件包直接提供 JavaScript,并且未设置 `prepare`、`preinstall` 或 `postinstall` 脚本。安装只会在 DSH 现有的 `ctx.skills` 服务中注册一个固定技能提供方。 > [!NOTE] > 插件安装与 JJ 安装、仓库初始化、Git remote 设置和凭证管理相互独立。仓库初始化与远端可见操作仍需单独授权。 ### 首次使用前检查 JJ 先读取已安装版本和本机 help。本机 help 是当前安装环境的命令依据。 ```sh jj --version jj help node /scripts/verify-jj-compat.mjs --repo ``` JJ 版本与 `0.44.0` 不同时,需要先执行[版本升级核验步骤](skills/dsh-jj-vcs/references/version-and-upgrades.md),再修改仓库历史。 ## 一项多 Agent 任务的实际操作 协调方选择明确的 base revision,并在仓库目录外创建工鸦 workspace: ```sh node /scripts/jj-task.mjs start \ --repo \ --destination \ --workspace \ --agent \ --task \ --base ``` 命令返回 JSON receipt,其中包含 workspace root、任务归属、change ID、commit ID,以及建立前后的 operation ID。任务身份使用保持不变的 `changeId`,而非会随修改变化的 commit ID。 工鸦直接修改文件,并通过 `jj st` 和 `jj diff` 检查 change,无需执行暂存命令。协调方接受交接前运行: ```sh node /scripts/jj-task.mjs finish \ --workspace-root \ --workspace \ --agent \ --task \ --expected-change ``` finish receipt 会核对 workspace、任务、归属、change 身份、operation ID、冲突和分歧。完整步骤位于[多 Agent workspace 文档](skills/dsh-jj-vcs/references/multi-agent-workspaces.md)。 ## 权限、冲突与恢复 技能把权限分为四级:只读检查、任务内修改、共享本地历史和远端可见操作。任务授权包含指定 workspace 内的普通文件修改。影响共享历史的改写需要对应任务的专门授权。fetch、push、GitHub 修改和保护绕过参数需要明确的远端授权。 Agent 通过 JJ 修改版本历史。Git 继续作为 backend,也可用于只读互操作检查和仓库自带测试脚本。移动 bookmark 或发布前,请读取[权限与远端文档](skills/dsh-jj-vcs/references/permissions-and-remotes.md);撤销或恢复 operation 前,请读取[恢复与冲突文档](skills/dsh-jj-vcs/references/recovery-and-conflicts.md)。 ## 核验软件包 在仓库 checkout 中运行软件包、技能提供方、兼容性与 workspace 检查: ```sh npm run verify npm test npm pack --dry-run --json node skills/dsh-jj-vcs/scripts/verify-jj-compat.mjs --skip-repo node skills/dsh-jj-vcs/scripts/verify-jj-task.mjs ``` GitHub Actions 会在 Linux 与 Windows 上运行软件包和 JJ 检查。独立的定期 probe 会检查候选 JJ 版本,同时保留当前维护基线。 ## 一份技能源码,两个软件包入口 DSH 通过 `cordis.patch.yml` 和 `index.js` 加载 Profile Bundle。Codex 软件包读取 `.codex-plugin/plugin.json`。两个入口共同使用 [`skills/dsh-jj-vcs`](skills/dsh-jj-vcs) 中的唯一技能源码,从而保持行为一致。 仓库已经包含供打包和本地开发使用的 Codex manifest。远程 Codex marketplace 安装命令将在该安装方式通过本仓库测试后补充。 ## 维护与来源 [`compatibility.json`](skills/dsh-jj-vcs/compatibility.json) 保存机器可读的 JJ 命令基线。升级 JJ 时,需要审查官方 release notes 与本机 help,运行升级模式 probe,更新受影响的参考文档和测试,最后通过精确版本检查。发布细节位于 [MAINTAINING.md](MAINTAINING.md),修改要求位于 [CONTRIBUTING.md](CONTRIBUTING.md)。 初始设计审计覆盖 [`nshcr/jj-codex`](https://github.com/nshcr/jj-codex)、[`techsaint/jj-vcs-skills`](https://github.com/techsaint/jj-vcs-skills) 和 [`clementpoiret/skills`](https://github.com/clementpoiret/skills)。这些仓库只提供审查资料,本项目没有引入或复制候选文件。 图像来源与许可信息记录在[资产署名文件](docs/assets/ATTRIBUTION.md)中。