跳到主内容

dsh-git-graph 使用指南

为 DSH Web 界面在官方工作区胶囊旁加 git 分支选择器与 Git 图谱面板,分支切换在 host 进程真实执行,并加 loopback + 工作区门卫。

本文为派生内容(基于 wiki / faq / compatibility_json 自动组装),非 AI 即时创作。

本文由本站基于该插件已收录的字段自动派生(wiki / faq / compatibility_json / readme),非 AI 即时创作。每节末尾标源字段。

快速上手

dsh-git-graph

— 源: plugin_wiki.wiki_content

安装与验证

dsh plugin --profile web add @linxin666/dsh-client-ui-git-graph

复制以上命令在 DSH Web Profile 内运行。安装完成后在「插件列表」启用即可。

— 源: plugins.install

关键要点

  • 可靠 Windows 启动:移除 PowerShell 5.1 -WindowStyle Hidden 与 Electron Node 模式的冲突,隐藏窗口仍由 spawn 的 windowsHide 处理;空旧补丁、状态订阅竞态和 IPC 错误不会再把启动页永久留在 8%。
  • 验证过的 Runtime 组合:内置 @deepseek-ai/dsh 0.1.0-rc.7、dshmarket 1.15.0、Web UI 聚合 0.2.3、兼容 rc.7 的 Codex Connect 与 dsh-live-stats 0.1.20,Stable 继续精确锁定而非追随 latest。
  • 托盘与后台自动化需显式选择:默认关闭仍会退出。选择“最小化到托盘并启用后台自动化”后,关闭主窗口才保留 Runtime 和到期任务;显式退出、更新、安全模式和崩溃路径一律完整停止。
  • Host 持久任务调度:Task Board 保存时区、cron 槽位、租约、misfire/running 策略和确定性运行键;启用后台自动化时通过真实 DSH Session 执行并回写 Task Run,Host 不可用时仍回退浏览器调度。
  • 可审计的扩展边界:扩展坞校验 dsh.compatibility 的版本、Desktop API、能力、Surface 与运行时证据,并在 profile 写入 desktop-plugins.lock.json。browser-safe SDK 不导入 Electron 或私有 DSH 模块;预览的外部打开仅传工作区根和相对路径,Host 验证后才交给系统。

— 源: plugin_wiki.readme_zh (fallback readme_raw)

常见问题

这个插件会改动 DeepSeek Harness 官方源码吗?

不会。AGENTS.md:5-6 写明「主仓(sibling checkout)零改动;本仓是自包含的 cordis 插件包」;所有类型来源是 node_modules 里的 @deepseek-ai/* peerDependencies(package.json:60-70),注入靠 cordis 服务(ctx.webServer / ctx.subprocess / ctx.workspaceRegistry / ctx.slots / ctx.sessions)。

分支切换是真实的 git switch 吗?会影响其他会话吗?

是真实的。src/host/git-service.ts:176-197 调用 git switch --no-guess <branch> 跑在 repoRoot 真实工作树上,并且会作用于该 workspace 下所有会话,不是单会话的 cwd 覆盖(src/host/routes.ts:167-169 说明 / README.md:75 / ADR-001:36)。

浏览器能不能借这个接口对任意目录跑 git?

不能。src/index.ts:35-48 的 workspaceGate 把请求路径 realpath 后必须命中 ctx.workspaceRegistry 里某个已注册路径,否则返回 workspace-unknown;routes.ts:83-103 还会拒绝所有非 loopback 客户端(LAN 暴露的 dsh web 对外部客户端直接 403),/git/* 还强制 POST + application/json(routes.ts:215-229)。Worktree 路由更严:只接受不透明 ID,路径/base ref/argv 一律不接(README.md:74 / worktree-routes.ts:46-48)。

什么时候分支 chip 会隐藏?

当它查不到 cwd(sessions list 里该 sessionId 的 cwd 为空)或者 status 返回 null(非 git 工作区)时整个 chip 不渲染。src/client/chips/BranchChip.tsx:253 写「repo === undefined || repo === null return null」;README.md:77 也明确「无会话 cwd 或非 git 工作区时分支 chip 自行隐藏」。

切换失败会给出什么样的错误?

错误分两大类:守卫级(conflicts-present、operation-in-progress、branch-in-other-worktree、invalid-branch-name、branch-already-exists、target-branch-not-found、workspace-unknown)和切换时 Git 抛出的覆盖冲突(tracked/untracked-changes-would-be-overwritten,附前 2 个文件路径 + 溢出计数)。src/host/git-service.ts:294-311 的 guardBlock 跑前一种,src/core/git-command.ts:178-196 的 classifySwitchFailure 把 stderr 归到稳定 code;客户端在 src/client/chips/error-copy.ts:27-50 把 code 翻成中英双语可读句子。

跟官方分支管理有冲突吗?会被重复工作区选择器覆盖吗?

工作区选择不在本插件里——官方工作区胶囊是唯一入口(src/client/index.ts:23-24 / ADR-001:36)。插件只补「分支」和「图谱」两个动作,对应 UI 上与官方胶囊并排的 28px 透明 chip。分支状态不会写进 session log,也不会进入模型可见面(src/index.ts:6-8)。

需要 Git 在系统 PATH 里吗?

需要。Host 侧的 GitService 用 subprocess 服务直接 spawn git(macOS/Linux)或 git.exe(Windows,src/host/git-service.ts:53-55 强制走原生可执行名避免 .cmd shim 解析问题);运行机器必须装好 git,否则所有 /git/* 接口都会以 internal 错误返回。Worktree 操作走同一个 spawn seam。

怎么卸载?

dsh plugin --profile web remove @linxin666/dsh-client-ui-git-graph(README.md:67)。包名是 npm 发布的 @linxin666/dsh-client-ui-git-graph,激活插件时挂的是 ui-git-graph 这个 cordis row 名(cordis.patch.yml:11)。卸载后下次 dsh web 启动就不再注册任何 /git/* 路由与浏览器 chip。

— 源: plugin_wiki.faq_json

兼容性

  • DSH: peerDependencies 声明 @deepseek-ai/dsh-* ^0.1.0-rc.7(package.json:60-70);cordis.patch.yml:11 把 ui-git-graph row 注入 dsh profile,bundle patch 激活机制见 ADR-001:30
  • Node: ^22.19.0 || >=24.0.0(package.json:7-9 的 engines.node)

— 源: plugin_wiki.compatibility_json

踩坑提醒

安装前请审阅上游仓库;本指南基于已收录字段自动派生,可能滞后于最新版本。如发现与官方文档冲突,请以上游为准。

— 来源:通用规则