DSH 插件:Git 凭据与推送权限管理器。哪个项目能用哪个账号、允许推到哪些 host,一处说清。账号库与…
33.6/100
综合分
5
GitHub 星标
243
npm 周下载
—/5
用户评分
数据截至 2026/10/25 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add dsh-git-forgenpm 源 · dsh-git-forge 的发布者账号已校验与本仓库一致
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:已验证
是什么
dsh 原生插件 · security
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 7 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查✓ 自动检查通过展开查看检查明细 ↓
以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。
✓npm 包dsh-git-forge @ 1.2.0
✓Node 引擎要求 >=20 · 基线 Node 22.19 满足
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明
验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/28 20:42:52
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
可执行外部命令读写/删除本地文件发起外部网络请求
查看扫描证据(共 16 处,展示前 15 条)
- 写入本地文件lib/index.js:64
mkdirSync(DATA_DIR, { recursive: true }) - 写入本地文件lib/index.js:65
try { chmodSync(DATA_DIR, 0o700) } catch { } - 读取本地文件lib/index.js:70
if (!existsSync(path)) return fallback - 读取本地文件lib/index.js:71
return JSON.parse(readFileSync(path, 'utf8')) - 写入本地文件lib/index.js:78
renameSync(path, quarantine) - 写入本地文件lib/index.js:89
writeFileSync(path, JSON.stringify(data, null, 2) + '\n', { mode }) - 写入本地文件lib/index.js:90
try { chmodSync(path, mode) } catch { } - 发起网络请求lib/index.js:337
const res = await fetch(url, { headers, redirect: 'follow', signal: ac.signal }) - 读取本地文件lib/index.js:469
gitCredentialHelper: existsSync(HELPER_JS), - 读取本地文件lib/index.js:783
if (statSync(p).isFile()) return p - 读取本地文件lib/index.js:791
if (!existsSync(HELPER_JS)) { - 读取本地文件lib/index.js:817
prev = readFileSync(GITCONFIG_PATH, 'utf8') - 写入本地文件lib/index.js:822
writeFileSync(GITCONFIG_PATH, content, { mode: 0o600 }) - 发起网络请求lib/client.js:197
const response = await fetch(API + "/" + method, { - 执行外部命令固定命令lib/shared/remote-resolve.js:13
const r = spawnSync('git', args, {
扫描于 2026/10/31(1 天前) · 范围 入口闭包 + 全包扫描 · 来源 npm 发布包
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
依赖的 DSH / Cordis 模块
@deepseek-ai/cordis@deepseek-ai/dsh-client-locale@deepseek-ai/dsh-client-ui-sidebar-right给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
功能亮点
- 按项目授权账号
- push目标host拦截
- 凭据仅存宿主侧
展开完整介绍(107 字)↓
DSH 插件:Git 凭据与推送权限管理器。哪个项目能用哪个账号、允许推到哪些 host,一处说清。账号库与 token 只落在宿主侧。按项目授权决定 agent 用哪个账号,push 拦截决定这个项目允许推到哪。
最近更新
在 GitHub 查看全部 →v1.2.12026-11-01
· 修复
· 客户端样式表在插件停用后残留。 lib/client.js 的 ensureStyles() 只往 document.head 插 、不交出撤销手段,apply() 又是裸调用,于是禁用或热替换之后宿主页面继续带着这份规则(面板已经消失,样式还在)。现在 ensureStyles() 返回移除该节点的 disposer,apply() 经 ctx.effect 收下,随插件生命周期一起撤销。
· Fixed
· The client stylesheet survived a disabled plugin. ensureStyles() in lib/client.js only inserted into document.head and handed back no way to undo it, and apply() called it bare, so the host page kept the rules after a disable or a hot swap (panel gone, styles still there). ensureStyles() now returns a disposer that removes the node, and apply() takes it through ctx.effect so it is dropped with the plugin.
v1.2.02026-10-18
· 新增
· .gitattributes:* text=auto eol=lf、*.ps1 eol=crlf、docs/logo.png binary,跨平台检出换行一致。
· 变更
· 补录 1.1.0 之后发布的三笔变更(7c3ffdb / 8985418 / e631ade):
- 安装说明收敛为 npm 单一写法,版本徽章改 npm 源;
- 安装脚本 --profile / -Profile 必填,缺失或不存在时列出实存 profile 并退出 2;
- 安装脚本抽出 scripts/lib/*.cjs 助手(ws-exclude / bundle-check / strip-mount),profile 配置改写收进 --fix-profile 显式开关(幂等、写后回读断言)。
· dsh.client.inject 双写齐备:@deepseek-ai/dsh-client-locale 与 @deepseek-ai/dsh-client-ui-sidebar-right 同时声明(两个 peer 此前已在 peerDependencies 里)。
· sync-to-dsh.sh 的 DSH_PROFILE 必填(桌面版为 desktop),空值报错退出 2;README 的开发与环境要求段落同步照实。
· 修复
· 侧栏 API 同源校验:Sec-Fetch-Site: cross-site 一律拒绝;请求缺该头时校验 Origin 与 Host 是否一致;宿主信任列表经 webRuntime 可选注入读取。
· push 检测锚定子命令:git 之后跳过全局旗标与环境变量赋值再取子命令,bash -lc / sh -c 的引号载荷递归分类——引号里的 push 逃不过检测,commit message 与普通文字里的 "push" 触发误报。
· 裸 push 放行链收紧:remote 解析失败重试一次,仍失败且项目开启 enforce 时拒绝(fail-closed)。
· GIT_CONFIG_GLOBAL 回接用户全局配置:生成的 gitconfig 首行 include 用户级 gitconfig,user.name / user.email / http.proxy 照常生效;空 helper = 的清空语义在 include 顺序下经实测保持正确。
· 配置文件损坏隔离:解析失败时把坏文件改名保留为 .corrupt- 并回退默认值,现场不丢。
· 项目 key realpath 归一:存在路径经 realpathSync 折叠 Windows 8.3 短名与符号链接;自检新增幂等回归。
· gitlab 默认值补全:PROVIDER_DEFAULTS.gitlab → gitlab.com / README 对齐。
· 脚本修复:strip-mount 按 /\r?\n/ 切分并保留原 EOL 风格,id 匹配改 (?![\w-]) 防止前缀误删;bundle-check 检出 ignoredBuilds 退非 0;npm/pnpm registry 查询限时(bash timeout、PowerShell Start-Job);安装后验证提示改文件级核验;npm test 注释、0600 的 POSIX 口径、helper 进程表述等文档修正。
· 文案与清理:token 提示照实写落盘位置($DSH_HOME/git-forge/secrets.json),footer 照实写认证归属(HTTPS 由本插件 helper,SSH 仍走系统 SSH);摘除未接线的 openOfficial 与 joinUnderRoot。
· 变更
· 补录 1.1.0 之后发布的三笔变更(7c3ffdb / 8985418 / e631ade):
- 安装说明收敛为 npm 单一写法,版本徽章改 npm 源;
- 安装脚本 --profile / -Profile 必填,缺失或不存在时列出实存 profile 并退出 2;
- 安装脚本抽出 scripts/lib/*.cjs 助手(ws-exclude / bundle-check / strip-mount),profile 配置改写收进 --fix-profile 显式开关(幂等、写后回读断言)。
· dsh.client.inject 双写齐备:@deepseek-ai/dsh-client-locale 与 @deepseek-ai/dsh-client-ui-sidebar-right 同时声明(两个 peer 此前已在 peerDependencies 里)。
· sync-to-dsh.sh 的 DSH_PROFI
数据来自仓库的 GitHub Release,可能与插件实际版本不一致。
README
由 DeepSeek 最新模型翻译生成DSH Git Forge
DeepSeek Harness 的 Git 凭据与推送权限管理器:哪个项目能用哪个账号、允许推到哪些 host,一处说清。
账号库与 token 只落在宿主侧。按项目授权决定 agent 用哪个账号,push 拦截决定这个项目允许推到哪。
这是什么 • 核心特性 • 效果 • 安装方式 • 侧栏 • 模型工具 • 数据放在哪 • 安全 • 环境要求 • 开发 • 支持与致谢 • 许可证与作者
这是什么
DSH Git Forge 是 DeepSeek Harness 的社区插件,在 DSH 官方右侧栏里给你一个 Forge 账号库 + 按项目授权 + 推送策略 的管理面。
它管两件事:
- agent 用哪份凭据:在侧栏给项目授权账号之后,agent shell 里的 HTTPS git fetch / git push 由本插件的 credential helper 自动取用对应 token,token 只在宿主侧读,不进模型上下文。
- 这个项目允许推到哪:未授权 host 会被 push 拦截器在工具层直接拒绝;裸 git push 与 git push origin 会先解析 remote URL 再判定。
展开完整文档(README 剩余 1 节)
DSH Git Forge DeepSeek Harness 的 Git 凭据与推送权限管理器:哪个项目能用哪个账号、允许推到哪些 host,一处说清。 账号库与 token 只落在宿主侧。按项目授权决定 agent 用哪个账号,push 拦截决定这个项目允许推到哪。 这是什么 • 核心特性 • 效果 • 安装方式 • 侧栏 • 模型工具 • 数据放在哪 • 安全 • 环境要求 • 开发 • 支持与致谢 • 许可证与作者 这是什么 DSH Git Forge 是 DeepSeek Harness 的社区插件,在 DSH 官方右侧栏里给你一个 Forge 账号库 + 按项目授权 + 推送策略 的管理面。 它管两件事: - agent 用哪份凭据:在侧栏给项目授权账号之后,agent shell 里的 HTTPS git fetch / git push 由本插件的 credential helper 自动取用对应 token,token 只在宿主侧读,不进模型上下文。 - 这个项目允许推到哪:未授权 host 会被 push 拦截器在工具层直接拒绝;裸 git push 与 git push origin 会先解析 remote URL 再判定。 SSH 远程与系统 gh auth 不受影响,仍走本机 SSH / gh;本插件只补 DSH agent shell 下的 HTTPS 这一段。 核心特性 | 特性 | 说明 | | 账号库 | 账号按 gitHost 归集,界面给出 github.com / gitee.com / gitlab.com / bitbucket.org 常用选项,自建 Forge 直接填自己的域名;侧栏内可增删改并探测 API token | | 按项目授权 | 授权 key 是 DSH 会话工作区(projectPathKey,agent shell 里即 DSH_GIT_FORGE_PROJECT),不是子仓路径 | | push 拦截 | 命令里的 URL、裸 git push、git remote add / set-url 都在 Host tools.guard 里按授权判定 | | agent HTTPS git | 同一 host 恰好 1 个已授权 token 账号时(R1)helper 才自动注入;多账号时不猜号,宁可不注入 | | token 落盘 | $DSH_HOME/git-forge/secrets.json(0600);API 与工具结果一律不回传 token | | 模型工具 GitForge | 四个只读动作:看账号库、看某项目授权、看策略、校验某个 remote 是否被允许 | | UI 对齐 | 与同门的 dsh-ssh-tunnel 共用一套侧栏交互 | 效果 项目授权:勾选本项目可用的 forge 账号,并决定是否启用 push 拦截策略状态:当前项目允许的 gitHost,以及未绑定项目的全局策略 安装方式 从 npm 安装 先停掉正在运行的 DSH(运行中的服务会锁住依赖,装完再起) dsh plugin --profile <profile> add "dsh-git-forge" 提示:装好后刷新一下浏览器页面,「Git 凭据」从右侧栏的引导页打开——只重启宿主不够,客户端产物是页面加载时取的。 装完怎么用 1. 打开右侧栏「Git 凭据」→ 账号库 加一个账号(token 只在侧栏里填,不进对话) 2. 点探测确认这个 token 有效 3. 切到 项目授权 → 勾上该账号并保存,当前工作区就拿到了推送凭据 4. 让智能体在项目里跑 HTTPS 的 git fetch / git push,凭据由 helper 自动注入,模型看不到 token 5. 反过来试一个未授权的 host:让智能体推过去,应当被 push 拦截器直接拒绝 侧栏 侧栏只有一个 Tab,内部三页: | 页面 | 作用 | | 项目授权 | 当前项目可用的账号,以及是否 enforcePush | | 账号库 | 账号增删改、探测 API token、查看绑定的 gitHost | | 策略状态 | 当前允许的 gitHost,以及未绑定项目的默认策略 | 模型工具 | 动作 | 作用 | 参数 | | GitForge action=list_accounts | 列出账号库(不含 token) | 无 | | GitForge action=list_project_accounts | 列出某项目已授权的账号 | project_path | | GitForge action=get_policy | 看该项目策略:授权账号、是否 enforcePush、未绑定项目默认 | project_path | | GitForge action=check_remote | 校验某个 remote URL 是否被允许推送(不推送) | url(必填) | 智能体 HTTPS 与项目路径 - 授权 key = DSH 会话工作区(智能体 shell 里注入 DSH_GIT_FORGE_PROJECT),不是子仓路径;工作区路径按磁盘实态归一(realpath),Windows 8.3 短名与符号链接折叠到同一 key - helper 找项目:env → cwd 精确匹配 → 向父目录 walk(cwd 在 /workspace 下时上界为 /workspace,否则走到根) - R1:同一 host 仅当恰好 1 个已授权 token 账号时才自动注入凭据 - 智能体 shell 的 GIT_CONFIG_GLOBAL 指向 $DSH_HOME/git-forge/gitconfig;文件第一行 include 回接你的用户级 gitconfig(user.name / user.email / http.proxy 等照常生效),随后一条空 credential.helper 清掉系统级 helper,再挂本插件 helper——系统凭据管理器的弹窗不会卡住无头 shell,用户自己配的 helper 也会被同样清掉 数据放在哪 $DSH_HOME/git-forge/(目录 0700;0600/0700 权限仅在 POSIX(Linux/macOS)生效,Windows 无等效收紧): | 文件 | 内容 | | accounts.json | 账号元数据(不含 token) | | secrets.json | token(0600) | | grants.json | projectPathKey → accountIds[] 与 enforce / unbound 策略 | | gitconfig | 注入给智能体 shell 的 credential helper 配置(不含凭据) | 注意:accounts.json / secrets.json / grants.json 若解析失败,坏文件会被改名保留为 <原名>.corrupt-<时间戳> 并回退默认值,不会覆盖丢失现场。 安全 - token 不出现在 API 结果、工具结果与模型上下文里 - push 策略在 Host tools.guard 中硬拦截,不依赖模型自觉 - 未给项目配置任何授权时,push 拦截器默认不拦截(便于渐进启用),helper 也不会凭空给出凭据 - token 只落在宿主侧数据目录 secrets.json;helper 是由 git 拉起的独立进程,按需读取;token 不进模型上下文。secrets.json 疑似泄露请立即轮换 token - 侧栏 API 做同源校验:Sec-Fetch-Site: cross-site 一律拒绝;请求缺该头时校验 Origin 与 Host 是否一致,不一致拒绝;两者皆缺的非浏览器客户端放行(宽松策略) - push 检测基于命令文本启发式,已知绕过面(env 变量改名 git、git alias、路径经变量拼接、非 bash/sh 包装器、time/nice 等未覆盖前缀);这一边界是明示的检测口径,不是放行依据 - 配置了授权的项目里,裸 git push 的 remote 解析失败会重试一次,仍失败即拒绝(fail-closed) 环境要求 - DSH 配置档(desktop 与服务器自建均可),DSH 版本 >=0.2.0-rc.2 <0.3.0-0 - Node.js >= 20 开发 npm test # 21 项离线自检(scripts/smoke-test.mjs) npm run check # 语法 + 自检 DSH_PROFILE=desktop bash scripts/sync-to-dsh.sh # 以 link: 方式把本仓库接入 DSH profile(开发用) 目录与「改东西去哪」: lib/index.js 宿主入口:工具注册、/dsh-git-forge/api 路由、push 拦截、credential helper 配置 lib/client.js 客户端 bundle(已入库;dsh plugin add 不做构建) lib/shared/ 宿主与客户端共用纯函数:path / git-policy / remote-resolve / credential-select / account-summary scripts/ install.sh · install.ps1 · sync-to-dsh.sh · smoke-test.mjs · git-credential helper cordis.patch.yml 包内 bundle patch,CLI 据此写入 dsh.profile.bundles 支持与致谢 - 如果这个插件对你有帮助,欢迎点亮 Star;有问题或建议请提 Issue 或 Pull Request。 - 变更记录见 CHANGELOG。 - dsh-ssh-tunnel:同门插件,主机库与侧栏交互与本案对齐 - DeepSeek Harness:插件、工具与 agent shell 的宿主 许可证与作者 MIT。上游项目与代码作者 @thirsty5034;本仓库的维护与新增部分 © 2026 @OMSociety。
预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
OMSociety/dsh-git-forge
DSH 插件:Git 凭据与推送权限管理器。哪个项目能用哪个账号、允许推到哪些 host,一处说清。账号库与…
相关插件 · 安全 / 权限
智能体逆向工程morluto/rea
用智能体逆向工程任何东西,从应用行为到原生二进制。
★ 415,267已汉化DSH
73.3
智能体集群框架ruvnet/ruflo
面向 Claude Code 与 Codex 的智能体元基座meta-harness。
★ 80,414已汉化MCP
71.9
WorkBuddy 模型接入corrinehu/dsh-workbuddy-connect
2026 年 10 月 20 日起,WorkBuddy…
★ 1,604已汉化DSH
71.7
破甲一键通z91772524-ai/pojia-next
十五个 AI…
★ 967已汉化DSH
71.6
AI 代理虚拟终端strukto-ai/mirage
Mirage 是给 AI 智能体用的虚拟终端:一层 shell,统管数据、命令行和运行时。Unix…
★ 3,756已汉化DSH
70.8
Agent 操作层agentic-os-org/ANOLISA
ANOLISA(Agentic Nexus Operating Layer & Interface System Architecture)|智能体操作系统,带运行时、安全、可观测性,以及 Tokenless 响应压缩,降低 token 用量与成本。
★ 649已汉化DSH
70.7