dsh-web
zhu1090093659/dsh-webDeepSeek Harness(DSH)Web 插件聚合生态包 · 一切皆插件,创意工坊分发(dsh-market.com)
DSH 右侧边栏页:把当前会话的仓库画成 VS Code 风格的分支/合并提交图谱(彩色泳道、ref 徽章、提交详情),上方带工作区 Changes 区(staged/unstaged 分节、行内 diff),覆盖仓库的每个工作树;只读,装不装 dsh-better-sidebar 都能用,装了 dsh-session-worktree 时跟随会话的 worktree 标签。
给 DSH(DeepSeek Harness) 加一个右侧栏页面:把当前会话的仓库画成分支/合并关系图 (VS Code 风格 —— 彩色泳道、分叉与汇入的贝塞尔曲线、ref 芯片、点开看提交详情), 并在它上方给出工作树改动区。
只读:不 checkout、不 commit、不 reset、不 rebase、不 fetch/push、不 add、不 restore、
不 worktree add/remove/prune。
只跑 rev-parse、status、for-each-ref、log、diff、worktree list 六条命令。


M/A/D/R/C/U)与增删行数;点一行就地展开它的 diff,两段可折叠且记得住。vendor/@zeng/ 下挂着一个嵌套仓库)。这时头部会长出一个下拉框,列出找到的每个仓库,
选择按工作区记忆。工作区自己只是某个仓库的子目录也没问题——外层那个仓库同样会被列出来。
发现过程不会跑出工作区:只向下扫,且层数、目录数、仓库数、耗时四个闸门都封着。git worktree add),各有各的分支、
各有各的未提交改动,而关联工作树通常根本不在工作区目录里(这个功能就是为一对兄弟目录
的工作树做的)。下拉框把它们全列出来,每一项标着它自己的分支,可以自由切换,切换后看到的
就是这个工作树自己的图谱与改动。主工作树、分离头、被 lock 的工作树都有标记;目录已经不在的
工作树不列出、但会在提示里给出条数,不会悄悄少一个。清单来自 git worktree list,
所以从任意一个工作树出发都能看到全集——站在关联工作树里,主工作树同样可选。↑ahead ↓behind、脏文件数。git fetch 之前这里看不见。页面不会让你对着图猜「是不是画错了」,
而是直接说明仓库上次 fetch 距今多久(6 小时内)、哪些本地分支落后于上游。从未 fetch 过的仓库
会如实报告「没有远端」,而不是「信息过期」。A/M/D/R/C/T)、重命名显示原名、
每个文件的 +/− 行数,点某个文件就地展开它的 patch(与「更改」区同一套渲染与手感)。
合并提交按第一父提交比较,标题里会写明这一点(否则你会以为那些文件是这个合并自己写的);
二进制文件在展开时说「二进制文件,无法显示改动」,而不是给你一个空 diff。lib/ 里读到的就是实际跑的代码,没有构建产物与源码的偏差。@zeng/dsh-session-worktree 时,
页面默认画该会话打了标签的那个工作树,而不是工作目录碰巧所在的那个仓库。
仓库优先级:你在下拉里手点的 → 会话的 worktree 标签 → 这个工作区上次记住的仓库
→ 工作目录所在的仓库 → 扫到的第一个。页面会说明「正在跟随标签」;用不了时说得更清楚
(目录没了 / 不是仓库根 / 出了本页可访问范围)—— 绝不静默换一个仓库还不吭声。
卸载或停用那个插件,行为与以前完全一致。dsh plugin --profile web add github:AFunDog/dsh-sidebar-git-graph
装完重启 dsh web(宿主半要挂路由),再硬刷新浏览器。打开右侧栏选「Git 图谱」——
装了 dsh-better-sidebar 时它在 + 菜单里;裸 DSH 下就在侧栏的引导页上(该格已经放着引导页时
+ 控件不会绘制)。
页面跟随你正在看的会话:切会话就重新读那个会话的工作区。
# 钉 tag(推荐:lockfile 会记下解析到的 commit)
dsh plugin --profile web add github:AFunDog/dsh-sidebar-git-graph#v0.2.0
# 从本地克隆(只接受**绝对**路径 —— 相对路径会被 spec 解析器拒绝)
dsh plugin --profile web add /path/to/dsh-sidebar-git-graph
页面会自动二选一:
| 你的环境 | 行为 |
|---|---|
| 装了 dsh-better-sidebar | 走它的公开扩展点 ctx.betterSidebar.registerTab:出现在 + 菜单,并在设置 → 侧边卡片里得到一张卡片(开关 + 一个"每次加载条数"的插件设置),名字是「Git 图谱」。 |
| 裸 DSH | 走 DSH 原生的侧栏 tab 类型(ctx.sidebarRightTabs + sidebar.right.pane.tab 槽):同一列、同一个 + 菜单,只是没有那张设置卡片。 |
| 设置 | 位置 | 默认 | 含义 |
|---|---|---|---|
| 每次加载的提交数 | 设置 → 侧边卡片 → Git 图谱 → 功能设置(仅 dsh-better-sidebar) | 400 | 100–2000。越大越完整,首次读取越慢。 |
| 仓库扫描层数 | 同上 | 5 | 0–8。往工作区里找几个仓库供下拉选择;0 = 不扫,只认工作目录所在的仓库。工作区特别大导致清单扫不全时,把它调小。 |
| 历史范围 | 页面头部 | 全部分支 | 全部分支 / 仅当前分支。 |
| 提交搜索 | 页面头部 | — | 高亮命中并逐个跳转。 |
git diff --no-index 只比较两个路径,要行数就得每个文件起一个进程
(一个还没 add 过的仓库里可能是几百次)。所以段头只统计拿得到计数的行,拿不到的留空,
而不是印一个会被读成「没有改动」的 0。一个文件两侧都改过(MM)会同时出现在两段——
那正是这两段的含义。-uall 也不下钻),
所以外层仓库只看得见一个目录,它没有 diff 可显示。页面在那一行上说明原因,而不是点了没反应。node_modules、target、.venv、构建产物…)不向下递归——但每个仍会 stat 一次,
所以一个恰好叫 build 的仓库不会被漏掉。git worktree list 为准)。别的路径即使浏览器点名,宿主也会
拒绝;并且会用 rev-parse 复核它确实是仓库根。git status 与 git log 都是按工作树算的,所以每个工作树显示自己的
分支、自己的未提交改动、自己的 HEAD;页面从不把两个工作树合成一份。
目录已不在的(prunable)与裸仓库不列出,只在提示里给出条数。color-mix() 派生;不支持 color-mix() 的浏览器退化为四个主题状态色循环。0.1.7-rc.2 + dsh-better-sidebar 0.21.1 上真机验证过;原生回退路径有同一套测试覆盖,
但真机使用得少一些。dsh-git-graph 是另一个作者的另一个插件
(enoughpower/dsh-git-graph)。
本插件是 @zeng/dsh-sidebar-git-graph,目前只从 GitHub 分发。没有构建步骤:改 lib/ → 宿主半改动重启 dsh web,浏览器半改动硬刷新即可
(bundle 的 rev 从文件 mtime 重新推导,刷新就会拿到新内容)。
npm test # = node scripts/test.mjs:先 node --check 每个 lib 文件,再逐个跑测试
路线图、内部结构、泳道算法不变量与 21 条踩坑记录都在 AGENTS.md。
MIT,见 LICENSE。