在会话页里查看改动、暂存提交并管理分支
28.7/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/10/3 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add fengbinmov/dsh-git-panel该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:需留意
是什么
dsh 原生插件 · dev
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
更新放缓:最近一次提交在 41 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
⚠︎ 实装验证未通过(unknown · 2026/10/4) ——可能是验证环境差异,装前建议到 GitHub 仓库确认最近更新与 issue。
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
读写/删除本地文件发起外部网络请求
查看扫描证据(共 14 处,展示前 14 条)
- 读取本地文件build/tsdown.client.ts:108
const manifest = JSON.parse(readFileSync(resolvePath(process.cwd(), 'package.json'), 'utf8')) - 读取本地文件build/tsdown.client.ts:155
const hasClient = existsSync(resolvePath(process.cwd(), 'src/client/index.ts')) - 读取本地文件build/tsdown.client.ts:331
const source = await readFile(physical) - 读取本地文件build/tsdown.client.ts:386
if (existsSync(emitted)) return emitted - 发起网络请求src/client/api.ts:25
response = await fetch(path, { - 发起网络请求src/client/api.ts:123
fetch(path: string): Promise<ApiResult<{ summary: string }>> { - 发起网络请求src/client/index.ts:218
fetch: (sessionId) => mutate(sessionId, path => git.fetch(path)), - 发起网络请求src/client/sse-leader.ts:97
void locks.request('dsh-sse:' + key, { signal: abort.signal }, () => { - 读取本地文件src/host/git-service.ts:246
if (existsSync(resolve(dir, marker))) present.push(marker) - 写入本地文件src/host/git-service.ts:529
await writeFile(patchFile, fragment, 'utf8') - 删除本地文件src/host/git-service.ts:539
await rm(patchFile, { force: true }).catch(() => {}) - 发起网络请求src/host/git-service.ts:939
async fetch(path: string): Promise<MutationResult> { - 发起网络请求src/host/routes.ts:373
? await service.fetch(path) - 读取本地文件src/index.ts:39
canonical = await realpath(path)
扫描于 2026/11/1(0 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
依赖的 DSH / Cordis 模块
@deepseek-ai/cordis@deepseek-ai/dsh-api-remotes@deepseek-ai/dsh-api-session-controller@deepseek-ai/dsh-client-connection@deepseek-ai/dsh-client-locale@deepseek-ai/dsh-client-store@deepseek-ai/dsh-client-ui-conversation@deepseek-ai/dsh-client-ui-renderer@deepseek-ai/dsh-client-ui-session@deepseek-ai/dsh-client-ui-slots@deepseek-ai/dsh-host-webserver@deepseek-ai/dsh-subprocess给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
功能亮点
- 查看改动与diff
- 暂存并提交
- 切换分支与推拉
README
由 DeepSeek 最新模型翻译生成Dsh Git Panel
dsh-git-panel:会话页里多出一个 Git 页;左侧是未暂存 / 已暂存的改动,右侧是带行级操作条(暂存 / 丢弃)的 diff 预览
DSH Web GUI 的 Git 面板插件:在会话界面的标签栏里,紧挨「对话 / 轨迹」再加一个 Git 页,用来完成日常的查看改动、暂存、提交、看 diff、翻历史、切分支和推拉。
- 仓库:<https://github.com/fengbinmov/dsh-git-panel>(仓库根即 npm 包根)· npm:@fengbinmov/dsh-git-panel
- 形态:一个自包含的 DSH profile bundle —— 宿主半(exports ".")+ 浏览器半(exports "./client")
- 依赖:dsh >= 0.1.5-rc.1、Node ^22.19.0 || >=24.0.0、react ^18.2.0(peer)
- 边界:所有 Git 操作都由界面触发;插件不注册任何工具、不写 system prompt,模型可见面上看不到它
展开完整文档(README 剩余 1 节)
Dsh Git Panel
dsh-git-panel:会话页里多出一个 Git 页;左侧是未暂存 / 已暂存的改动,右侧是带行级操作条(暂存 / 丢弃)的 diff 预览
DSH Web GUI 的 Git 面板插件:在会话界面的标签栏里,紧挨「对话 / 轨迹」再加一个 Git 页,用来完成日常的查看改动、暂存、提交、看 diff、翻历史、切分支和推拉。
- 仓库:<https://github.com/fengbinmov/dsh-git-panel>(仓库根即 npm 包根)· npm:@fengbinmov/dsh-git-panel
- 形态:一个自包含的 DSH profile bundle —— 宿主半(exports ".")+ 浏览器半(exports "./client")
- 依赖:dsh >= 0.1.5-rc.1、Node ^22.19.0 || >=24.0.0、react ^18.2.0(peer)
- 边界:所有 Git 操作都由界面触发;插件不注册任何工具、不写 system prompt,模型可见面上看不到它
┌─ 会话页 ────────────────────────────────────────────────┐ │ 对话 │ 轨迹 │ Git ← conversation.view 槽位 │ ├─────────────────────────────────────────────────────────┤ │ 更改 │ 历史 ← 面板内部的两个标签页 │ │ ┌───────────────┬──────────────────────────────────┐ │ │ │ 未暂存的更改 │ │ │ │ │ 已暂存的更改 │ 预览 / 提交详情 │ │ │ ├───────────────┤ │ │ │ │ 提交信息 [提交]│ │ │ │ └───────────────┴──────────────────────────────────┘ │ └─────────────────────────────────────────────────────────┘
Contents
- 功能
- 安装与启用
- 开发
功能
更改页(Changes)
- 两个区域:上方「未暂存的更改」、下方「已暂存的更改」。一个文件同时有两侧改动时会两边都出现(AM 这类状态两侧各一行,各自带自己那一侧的增删行数)。
- 拖拽即操作:把行从一个区域拖到另一个区域就是暂存 / 取消暂存;拖动组标题可以整组移动。
Ctrl 点击多选、Shift 点击范围选择。
- 行内没有按钮:列表保持干净,动作全部通过拖拽和键盘完成。
- Delete 键:未暂存行 = 丢弃改动(立即执行,无二次确认);已暂存行 = 取消暂存。
- 底部提交框:提交信息输入框 + 右对齐的提交按钮。切走标签页、面板被重新挂载后再回来,已经写了一半的提交信息仍在(每个仓库各存各的;提交成功后清空,失败保留)。
界面上没有 amend 勾选(宿主侧仍保留该能力)。
- 行级操作:在左侧行号栏按下并拖动,可选中若干行,浮出操作条(暂存 / 取消暂存 / 丢弃)——客户端会用被选中的行重建一个补丁片段交给宿主。在代码文字上拖动则完全是浏览器原生的划词选择,两个手势互不干扰。
预览(diff 渲染器)
- 左右行号 + 标记列 + 补丁体,等宽字体;更改页和历史页共用同一个渲染器,不存在两套样式。
- 二进制文件、被截断的补丁、重命名、文件头等都有明确提示,不会把二进制内容伪装成文本。
- 预览头部显示的增删行数与左侧列表行取自同一份数据,两者不可能对不上。
历史页(History)
- 三栏:提交列表 / 该提交包含的文件 / 选中文件的补丁。分隔条可拖动、双击复位,且与更改页的分隔条位置对齐、可以互相拖回。
分支与远端
- 工具栏显示当前分支、上游、ahead/behind 计数;下拉菜单切换本地分支,或在菜单里对某个分支执行 merge / rebase。
- 有未解决冲突或已有进行中的操作时,切换/合并会被拦住并给出可读原因,而不是丢一个退出码。
- 一旦检测到进行中的 merge/rebase(.git 里的操作标记文件),面板顶部会出现一条警告条,带一个「中止」按钮(abort)。
- 推送与拉取:fetch / pull / push。当前分支没有上游时,推送自动带 --set-upstream origin <branch>。
实时刷新
- 事件流 /gitpanel/events(SSE):分支、HEAD 或文件摘要(一个 spawn 的 digest)变化时通知浏览器重新拉取。
- 浏览器侧跨标签页只开一条 EventSource(Web Locks 选 leader + BroadcastChannel 转发)。
Chrome 对同源 HTTP/1.1 连接池有 6 条上限且跨标签页共享,每个标签页各开一条流会把普通请求全部排队。
- 后台刷新不打扰正在读的预览:行集合没变就保留行选择与已挂载的行(未跟踪文件、被上限截断的区段这类批量数据答不了的路径也不再清空面板),只有 diff 真的变了才丢弃选择;换一个文件时预览回到顶部。
乐观 UI
面板里每个动作都是「先在本地动,再等 Git 答复」:
1. 点击/拖拽的同一帧内,用预测函数改出新的视图(行移动、行数变化、区域计数变化);
2. 宿主答复到达后(通常几百毫秒)用真实结果替换;
3. 失败则回滚到真实状态并给出错误提示(行级操作失败会额外保留错误通知)。
预测全是 core/types.ts 里的纯函数:predictStaged / predictDiscarded / predictCommitted / predictLineSelection,都有单测覆盖。
安装与启用
插件以 profile bundle 的形式挂载:宿主半随 profile 启动,浏览器半由 client-modules 按 package.json 的 dsh.client 声明提供给 GUI。
方式一:从 npm 安装(推荐)
需要 dsh >= 0.1.5-rc.1、Node ^22.19.0 || >=24.0.0
dsh plugin --profile web add @fengbinmov/dsh-git-panel@latest
重启 dsh web
包内已带构建产物(lib/index.js 宿主半 + lib/client.js 浏览器半),装完不需要本地编译。
方式二:克隆仓库后 link:(开发调试)
1) 克隆并构建(仓库根即包根)
git clone https://github.com/fengbinmov/dsh-git-panel.git
cd dsh-git-panel
pnpm install
pnpm build # tsc -b && tsdown → lib/index.js(宿主)+ lib/client.js(浏览器)
2) 注册进 profile(link: 指向克隆目录,改完代码重建即可生效)
dsh plugin --profile web add link:<克隆目录的绝对路径>
3) 重启 dsh web
登记后 ~/.dsh/profiles/web/package.json 会长出两处(这是实际生效的写法):
{
"dependencies": { "@fengbinmov/dsh-git-panel": "link:<克隆目录的绝对路径>" },
"dsh": { "profile": { "bundles": ["@deepseek-ai/dsh-base", "...", "@fengbinmov/dsh-git-panel"] } }
}
卸载:
dsh plugin --profile web remove @fengbinmov/dsh-git-panel
生效范围
| 改动位置 | 需要做什么 |
| lib/client.js(src/client/**) | 刷新页面即可(浏览器半由 client-modules 现取现发) |
| lib/index.js(src/host/、src/core/) | 重启 dsh web —— 路由与服务在宿主进程里 |
改了源码别忘了 pnpm build:link: 方式下 profile 直接读这个包的 lib/,不会自动编译。
开发
克隆后先 pnpm install(Node ^22.19.0 || >=24.0.0;packageManager 固定为 pnpm 11.7.0):
pnpm typecheck # tsc -b --pretty false
pnpm test # vitest run
pnpm build # tsc -b && tsdown
发版:改 package.json 的版本 → 提交 → 打 vX.Y.Z tag 推上去。GitHub Actions 会跑完整门禁,再经 OIDC Trusted Publishing 发布到 npm(不需要 token、不需要 OTP),并附带 provenance 证明。
首次使用需在 npm 的包设置里登记一次 trusted publisher(GitHub Actions / fengbinmov / dsh-git-panel / release.yml)。预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
fengbinmov/dsh-git-panel
在会话页里查看改动、暂存提交并管理分支
相关插件 · 开发 / 工程
隐私简历生成器reactive-resume/reactive-resume
Reactive Resume 已迁至 GitHub 上的…
★ 45,125已汉化MCP
71.7
AI 架构文档生成器sopaco/deepwiki-rs
🚀 Litho 已进化为 Terrain —— 给你的 AI 智能体一张会呼吸的代码库地图。
★ 3,157已汉化DSH
70.8
长时任务执行闭环AMAP-ML/LongHorizon-Harness
面向 Computer-Use Agent 的 Loop Engineering
★ 1,764已汉化DSH
70.5
AI 编程纪律方法包GanyuanRan/Aegis
让 AI 编程 agent 变得可信:少返工、更安全、说“完成”前先给证据。
★ 1,384已汉化DSH
69.6
多代理编排运行时Enderfga/claw-orchestrator
面向编程智能体的运行时。把 Claude Code、Codex、Antigravity、Grok…
★ 586已汉化MCP
69.4
记忆进化插件csyangwen/dsh-memory-evolve
dsh-memory-evolve 使用场景指南
★ 461已汉化DSH
67.9