dsh-tauri-desk/deepseek-harness-desktop--packages-dsh-tauri-worktree ↗★ 1.5k
dsh-tauri-worktree
DeepSeek Harness Tauri 桌面版 | Only 5mb installer, zero environment setup, preset plugins, Windows / macOS / Linux.
安装
$
npx -p @deepseek-ai/dsh dsh plugin --profile web add github:dsh-tauri-desk/deepseek-harness-desktop#37891c0063298e01dc57ec2732e94662c5b8fcf6&path:packages/dsh-tauri-worktree说明文档
阅读完整 README ↗dsh-tauri-worktree
dsh-tauri-worktree 为 DSH 会话提供 Git worktree 隔离。每个工作树会话拥有独立目录,Agent 可以安全地修改代码,而不会影响本地主工作区。

功能
- 按项目路径和会话 ID 创建稳定、可复用的隔离工作树。
- 注册
create_worktree、checkout_worktree工具。 create_worktree/checkout_worktree支持可选carry_staged参数(默认false):把已暂存(index)改动携带进新工作树、或携带回本地检出,避免暂存内容在隔离/移除工作树时丢失。- 提供创建、状态、检出和放弃 API:
/api/dsh-worktree/*。 - 将工作树状态注入系统提示:
is_worktree: true。 - 检出时创建或切换本地分支,并带回完整会话历史。
- 放弃工作树时清理临时分支和 ledger 记录。
携带暂存(carry_staged)
git worktree 的 index 与暂存状态是每个工作树私有的:git worktree add 从 HEAD 干净检出,
未提交改动不会跟随;移除工作树时未提交改动也随之删除。为避免「有暂存时创建/检出工作树
导致内容丢失」,两个工具都提供开关:
// 创建时把源仓库已暂存改动带入新工作树(不携带未暂存/未跟踪改动)
create_worktree({ branch_name: 'dsh/feature-xyz', carry_staged: true })
// 检出时把工作树已暂存改动带回本地分支,再移除工作树
checkout_worktree({ worktree_hash_dirname: '[hash]/[dirname]', branch_name: 'dsh/feature-xyz', carry_staged: true })
语义说明:
carry_staged只移动「已暂存(index)」状态:修改、新增、删除的暂存条目会在目标目录 重建为同样的暂存状态(文件内容同步到 index,git status分布一致)。- 未暂存与未跟踪改动按 git worktree 的设计不携带:创建时留在源仓库,检出时随工作树移除。
- 实现基于
git diff --cached --binary+git apply --cached,只触碰补丁涉及的路径, 不使用仓库级共享的git stash,避免跨 worktree 污染 stash 列表或覆盖目标目录无关改动。 - 创建时携带失败会回滚刚创建的工作树;检出时携带失败会回滚到检出前分支并保留工作树。
用户流程
- 用户明确要求使用 worktree 后,Agent 调用
create_worktree。 - 插件创建
~/.dsh/worktrees/[hash]/[dirname],并把会话交接到新工作树。 - 在工作树会话中修改、测试和提交代码。
- 用户明确请求或批准后,才能调用
checkout_worktree;该操作会把改动带回本地分支并移除工作树。 - 如果不需要保留改动,可从面板执行放弃操作。
checkout_worktree是用户授权操作。任务完成、PR 合并或 Agent 的便利性都不能代替用户授权。
要求
- 项目目录必须是 Git 仓库。