🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

GitHub 发布助手 maxid/dsh-github-aide

DeepSeek Harness
maxid7 天前有提交已提供中文文档扫描:含敏感能力

预检并扫描项目后一键建仓提交推送到 GitHub

29.6/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分

数据截至 2026/11/2 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add maxid/dsh-github-aide
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:仅索引
是什么[目录]—
dsh 原生插件 · market
暂无时间戳·判据 →
装得上吗[实装验证]—
本站尚未做安装检查
暂无时间戳·判据 →
安全吗[自动扫描]—
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
数据截至 2026/11/04·判据 →
还在维护吗[仓库]✓
活跃:最近一次提交在 7 天前
暂无时间戳·判据 →
图例:✓ 通过! 需注意— 未判定 / 无数据· 「未判定」= 本站尚无数据,不代表插件有问题
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →

可信度证据

安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

可执行外部命令读写/删除本地文件发起外部网络请求
查看扫描证据(共 25 处,展示前 25 条)
  • 发起网络请求
    client.js:132
    const response = await fetch(STATUS_PATH, { headers: { accept: 'application/json' }, credentials: 'same-origin' })
  • 发起网络请求
    client.js:153
    const response = await fetch(url, {
  • 读取本地文件
    lib/update-notice.js:61
    existsSync(path.join(candidate, 'profiles', profile, 'package.json')))
  • 读取本地文件
    lib/update-notice.js:65
    const existing = candidates.find((candidate) => existsSync(candidate))
  • 读取本地文件
    lib/update-notice.js:68
    const existing = candidates.find((candidate) => existsSync(candidate))
  • 读取本地文件
    lib/update-notice.js:93
    if (!existsSync(noticePath)) return undefined
  • 读取本地文件
    lib/update-notice.js:95
    const parsed = JSON.parse(await readFile(noticePath, 'utf8'))
  • 读取本地文件
    lib/publish.js:191
    const info = await stat(root).catch(() => undefined)
  • 读取本地文件
    lib/publish.js:470
    const info = await stat(root).catch(() => undefined)
  • 写入本地文件
    lib/publish.js:551
    await writeFile(join(root, '.gitignore'), buildGitignore(analysis.stacks), 'utf8')
  • 读取本地文件
    lib/workspace.js:44
    root = await realpath(cwd)
  • 读取本地文件
    lib/workspace.js:54
    info = await lstat(root)
  • 读取本地文件
    lib/workspace.js:142
    real = await realpath(resolved)
  • 读取本地文件
    lib/workspace.js:152
    info = await stat(real)
  • 读取本地文件
    lib/scan.js:33
    const entries = await readdir(projectDir, { withFileTypes: true }).catch(() => [])
  • 读取本地文件
    lib/scan.js:94
    const entries = await readdir(dir, { withFileTypes: true }).catch(() => [])
  • 读取本地文件
    lib/scan.js:123
    const info = await stat(absolute).catch(() => undefined)
  • 读取本地文件
    lib/scan.js:128
    const content = await readFile(absolute).catch(() => undefined)
  • 读取本地文件
    lib/scan.js:154
    const entries = await readdir(dir, { withFileTypes: true }).catch(() => [])
  • 读取本地文件
    lib/scan.js:163
    const info = await stat(join(dir, entry.name)).catch(() => undefined)
  • 读取本地文件
    lib/git.js:92
    if (typeof cwd === 'string' && !existsSync(cwd)) {
  • 执行外部命令来自配置/变量
    lib/git.js:98
    execFile(
  • 写入本地文件
    lib/git.js:559
    writeFileSync(script, ASKPASS_SCRIPT, { mode: 0o700 })
  • 写入本地文件
    lib/git.js:561
    chmodSync(script, 0o700)
  • 删除本地文件递归
    lib/git.js:584
    rmSync(dir, { recursive: true, force: true })
扫描于 2026/11/4(1 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

社区实装还没有人打卡 · 装过的第一个就是你
依赖的 DSH / Cordis 模块
@deepseek-ai/dsh-credentials@deepseek-ai/dsh-tools@deepseek-ai/schemastery
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

DeepSeek Harness 插件:把工作区或项目目录发布到 GitHub,包含只读预检、密钥扫描、生成 .gitignore、创建仓库、提交、处理分叉和推送。

README

由 DeepSeek 最新模型翻译生成
dsh-github-aide 把项目发布到 GitHub 的 DeepSeek Harness 插件 —— 一个插件同时具备两件事: - 发布当前工作区:创建仓库、初始化 git、提交、处理远端分叉、推送; - 上传任意项目目录:只读预检、凭据扫描、按技术栈生成 .gitignore、一次性完成建仓与推送。 它由两个插件的能力合并而来:s-huizhuy-u/dsh-github-sync(工作区同步、凭据库 token、分叉协调)与 3164481170/dsh-github-upload(项目预检、机密扫描、.gitignore 生成、Web 面板)。合并后只有一套令牌解析、一套 GitHub REST 客户端、一套 git 层、一个设置命名空间。 你: 把这个项目传到 GitHub DSH: 已把 12 个变更文件发布到 maxid/my-project(分支 main)。
展开完整文档(README 剩余 1 节)
dsh-github-aide

把项目发布到 GitHub 的 DeepSeek Harness 插件 —— 一个插件同时具备两件事:

- 发布当前工作区:创建仓库、初始化 git、提交、处理远端分叉、推送;
- 上传任意项目目录:只读预检、凭据扫描、按技术栈生成 .gitignore、一次性完成建仓与推送。

它由两个插件的能力合并而来:s-huizhuy-u/dsh-github-sync(工作区同步、凭据库 token、分叉协调)与 3164481170/dsh-github-upload(项目预检、机密扫描、.gitignore 生成、Web 面板)。合并后只有一套令牌解析、一套 GitHub REST 客户端、一套 git 层、一个设置命名空间。

你: 把这个项目传到 GitHub

DSH: 已把 12 个变更文件发布到 maxid/my-project(分支 main)。
仓库:https://github.com/maxid/my-project

功能

| 能力 | 说明 |
| 项目预检 | 目录内容、技术栈、体积、凭据扫描、git 状态、GitHub 账号、同名仓库是否存在 |
| 机密扫描 | 命中 .env、私钥、ghp_、AKIA、sk-、私钥块等特征时默认拦截发布 |
| .gitignore 生成 | 项目没有 .gitignore 时按识别到的技术栈生成;已有则不改动 |
| 创建仓库 | GitHub 上不存在就创建(默认私有),已存在则复用 |
| 初始化 git | 只在还不是仓库时执行;沿用已有分支,新仓库用 main |
| 提交 | 暂存整棵工作树并提交;无变更时复用 HEAD,不报错 |
| 处理远端分叉 | 推送前先 fetch + rebase;冲突时回滚并报告 REBASE_CONFLICT |
| 推送 | 只把令牌交给内存中的 askpass,origin 始终是干净的 HTTPS URL |
| 只读预览 | github_status / dryRun 报告将要做什么,不写任何文件、不建仓库 |
| Web 面板 | 侧边栏填写令牌与目录 → 预检 → 发布 |

环境要求

- DeepSeek Harness 0.2.1 或更高(已在 0.2.1-rc.3 上验证加载)
- Node.js 22+
- PATH 中有 git(不需要 gh CLI)
- 一个 GitHub personal access token

安装

推荐用 DSH 的插件命令(profile 名按你的实际环境替换):

dsh plugin --profile desktop add "link:$PWD"

或把仓库目录复制进 profile 后,用附带脚本完成声明(脚本会打印每一个写入路径,可重复执行):

node scripts/install.mjs --profile desktop

装完重启 DSH。脚本会把插件放到 <profile>/.local-plugins/ 与 <profile>/node_modules/,加入 dsh.profile.bundles,并把加载行写进 cordis.patch.yml。

认证

需要一个 GitHub personal access token,按优先级三种来源:

1. 环境变量 GITHUB_TOKEN,其次 GH_TOKEN(适合 CI,不在磁盘留痕);
2. 对话里存:说「存一下我的 GitHub token」,助手调用 github_configure;
3. 面板:侧边栏「GitHub 发布」→ 填令牌 → 保存并校验。

权限要求:

| token 类型 | 需要的权限 |
| classic | repo(只发公开仓库可用 public_repo) |
| fine-grained | Contents: Read and write;若让插件建仓库还需 Administration: Read and write(或账户级 Repository creation) |

存储的令牌保存在 DSH 凭据库(github-aide 作用域),不会写进 settings.yaml。所有 token 形态在进入日志或对话前都会被遮蔽,包括 git 报错时回显 remote URL 的情况。

工具

github_publish —— 发布

| 参数 | 类型 | 默认值 | 含义 |
| path | string | 工作区根目录 | 要发布的项目目录 |
| repo | string | 目录名 slug 化 | 仓库名 |
| owner | string | 配置值 → token 所属用户 | 仓库所有者 |
| description | string | — | 仓库描述(仅创建时生效) |
| visibility | private \| public \| internal | 配置值 → private | 新仓库可见性 |
| private | boolean | — | 兼容简写:true 私有、false 公开 |
| branch | string | 当前分支 → 配置值 → main | 推送分支 |
| commitMessage | string | 自动 | 提交信息 |
| autoInit | boolean | false | 是否让 GitHub 创建首个提交 |
| allowSensitive | boolean | false | 扫描命中仍继续(慎用) |
| autoIgnore | boolean | true | 无 .gitignore 时自动生成 |
| push | boolean | true | false 则只在本地提交 |
| force | boolean | false | 历史冲突时覆盖远端分支(始终 --force-with-lease) |
| dryRun | boolean | false | 只预演,不写文件、不建仓库、不推送 |

github_status —— 只读预检

github_status(path?) 返回:解析后的仓库名/所有者/分支、项目技术栈与文件数、凭据扫描命中、git 状态、远端仓库是否存在、令牌来源,以及待处理的 harness 升级提醒。不做任何写入。

github_configure —— 令牌

| 参数 | 类型 | 含义 |
| token | string | 校验并保存 token(永不回显) |
| clear | boolean | 删除已保存的 token |

Web 面板

侧边栏「GitHub 发布」:

1. 填令牌 → 保存并校验(显示账号与 scope);
2. 填项目目录(默认工作区根目录);
3. 预检(只读) 查看技术栈、扫描命中、仓库是否存在;
4. 发布:dryRun 可先预演;allowSensitive 放行扫描命中。

面板只拿到布尔值、账号名和结果,令牌从不离开 Host。

设置

命名空间 github-aide,可在 设置 → 插件 中编辑,也可在 profile 的 cordis.patch.yml 里配置:

| 键 | 默认值 | 含义 |
| owner | 空 | 新仓库所属账号;空表示 token 自己的用户 |
| visibility | private | 新仓库可见性 |
| autoInit | false | 是否让 GitHub 创建首个提交(保持关闭,首次推送才不会被拒) |
| branch | 空 | 推送分支;空表示沿用当前分支,再退到 main |
| commitMessage | 空 | 提交信息;空表示新仓库 Initial commit、之后 chore: publish |
| allowSensitive | false | 允许发布扫描到凭据的项目 |
| autoIgnore | true | 无 .gitignore 时自动生成 |
| timeoutMs | 600000 | 单次发布超时(毫秒) |
| maxScanFiles | 8000 | 凭据扫描文件数上限 |

- id: github-aide
name: dsh-github-aide
config:
owner: maxid
visibility: private
timeoutMs: 600000

安全设计

- 令牌永不落盘:origin 始终是 https://github.com/<owner>/<repo>.git,令牌只通过内存中的 GIT_ASKPASS 子进程环境传递,不进入 argv、.git/config 或任何 git 配置文件。
- git 永不弹出提示:每次调用都带 GIT_TERMINAL_PROMPT=0、GIT_ASKPASS=、GCM_INTERACTIVE=never;认证失败会直接报错,而不是挂到超时。
- 凭据扫描默认拦截:命中特征时中止,需要显式 allowSensitive=true 才继续;扫描不跟随符号链接。
- 远端分叉是协调,不是覆盖:先 fetch + rebase,force 也只用 --force-with-lease。
- 日志脱敏:错误、警告、git stderr 都先经过 redact,任何 URL 里的 user:token@ 和 Bearer 都被遮蔽。
- 并发安全:github_publish 声明 isConcurrencySafe: false,同一目录两次 git 不会撞索引锁。

HTTP 接口

| 方法 | 路径 | 用途 |
| GET | /plugins/dsh-github-aide/status | 令牌状态、默认值、工作区、能力 |
| POST | /plugins/dsh-github-aide/preflight | 只读预检({ path? }) |
| POST | /plugins/dsh-github-aide/publish | 发布(参数同工具) |
| POST | /plugins/dsh-github-aide/config | { token } / { clear: true } / {} 校验 |

路由只接受同源/回环请求。

验证

node --test test/.test.mjs # 128 项:纯逻辑 + 假 API + 真实 git 的离线端到端
node test/verify.mjs # 32 项,自带的轻量断言运行器
node scripts/apply-harness.mjs # 12 项:用假 Cordis ctx 验证 apply() 注册 3 个工具、4 条路由、1 个设置命名空间
node scripts/live-smoke.mjs # 11 项:真实 git + 本地 bare 仓库的发布/分叉/冲突/强制推送
node scripts/http-check.mjs http://127.0.0.1:PORT # 对已启动的 host 做 HTTP 探测(未安装时自动跳过)

全部离线运行,不需要 DSH 包、不联网、不需要真实 GitHub 令牌。

目录结构

index.js Host 半:设置、3 个 agent 工具、HTTP 路由 client.js Web 面板 lib/config.js 设置默认值 + 凭据库 token 存取 lib/github.js 最小 GitHub REST 客户端(viewer / scopes / 查仓库 / 建仓库) lib/git.js git 子进程封装 + 内存 askpass + force-with-lease lib/detect.js 技术栈识别、.gitignore、凭据特征、身份推导 lib/scan.js 有界目录遍历 + 凭据扫描(不跟随符号链接) lib/publish.js 预检与发布编排(依赖注入,可离线测) lib/workspace.js 工作区/目录解析、仓库名 slug lib/errors.js 统一错误类型 + 脱敏 lib/update-notice.js harness 升级提醒 scripts/ 安装、升级监视、离线冒烟、HTTP 校验

故障排查

| 现象 | 原因与处理 |
| No GitHub token is configured | 设置 GITHUB_TOKEN,或用 github_configure 存一个,然后重启 DSH |
| HTTP 401 / TOKEN_REJECTED | token 过期或错误,重新签发 |
| HTTP 403 / PERMISSION | 按返回的 x-accepted-github-permissions 补权限(fine-grained 通常是 contents=write、administration=write 或 repository_creation=write) |
| 自己的仓库却 404 | fine-grained token 需要勾选该仓库,并授予 Contents 写权限 |
| SENSITIVE_BLOCKED | 检查扫描命中的文件;确认无风险后带 allowSensitive=true 重试 |
| REBASE_CONFLICT | 在项目里手动解决冲突,或带 force 重跑(仅 --force-with-lease) |
| PUSH_REJECTED | 重试;non-fast-forward 会提示先 rebase 或用 force |
| TLS_UNTRUSTED | TLS 中间人代理/加速器:把其根证书 PEM 指给 NODE_EXTRA_CA_CERTS 后重启 DSH |
| GIT_MISSING | 安装 git 并重启 DSH,让新 PATH 生效 |
| 插件不出现 | 确认 cordis.patch.yml 有加载行、包在 profile 的 node_modules/ 下,然后重启 |

许可证

MIT —— 见 LICENSE。行为与部分实现来自上述两个 MIT/开源插件,感谢原作者;见 NOTICE。
预览分享卡片长什么样 ↓maxid/dsh-github-aide
分享 · DeepSeek Harness Hub
maxid/dsh-github-aide

预检并扫描项目后一键建仓提交推送到 GitHub

这个插件是你维护的吗?
作者本人可认领并核对本条目;认领通过后,详情页会显示「作者已认领」标记。
认领条目 →
回到顶部