EIGHTfs/dsh-git-push

dsh-git-push

DSH 的 git 提交推送自动化:提交前审计、规则质量评分、SSH 密钥生成与三选项卡设置侧边栏。

待分类

dsh-git-push

DSH(DeepSeek Harness)git 提交推送与代码审计插件——提交前自动审计门禁,提交推送全链路自动化。

界面:账号信息面板(GitHub ↔ NPM 账号卡滑动切换、离线快照与在线自检)· 审计面板(22 个规则包 + 按包命中数,上下调次序、单击启停)· 设置面板(凭据 / SSH 公钥 / 审计开关与 10 维度权重)。
公开仓库:EIGHTfs/dsh-git-push(2026-09-13 转 public)|全量测试 490 全绿(npm test 一条命令可复现)
界面模拟页:assets/preview.html(单文件自包含,双击即可打开;跑的是真实 client.js + 假数据,三选项卡全部可点)

快速开始(第一次用——不用查源码)

插件装上并重启后,三种方式直接可用:

常见误解:没有改动 / 没有新提交时,提交推送工具不会报错(返回 ok:true,只是 committed:false 或 pushed:false),而「本地领先远端」的已提交内容照样会被推上去 —— 放心用插件,不要退回手敲 git。

① AI 直接用(DSH 会话里——不用记命令)

  • 工具已自动注册:git_scan / code_audit / git_commit_push / git_account_check 等
  • 直接说人话即可:「扫描我的仓库」「审计 Pawchive」「提交推送 xx 仓库」

② 独立 CLI(git-sluice——脱离 DSH 也能跑)

  • git-sluice account-check —— 先校验 GitHub 凭据(第一步)
  • git-sluice scan —— 看有哪些 git 仓库
  • git-sluice audit --full —— 全量审计(--json 拿明细)
  • git-sluice commit -m "msg" —— 提交推送(自动过审计门禁)
  • 全部命令:git-sluice help

③ 侧边栏面板

  • 审计面板:22 个规则包开关/排序/命中数
  • 设置:凭据 / SSH 公钥 / 审计开关与权重

目录

  • 快速开始(第一次用)
  • 功能总览
  • 一、提交推送(GitHub + npm)
  • 二、代码审计
  • 三、系统提示词注入
  • 侧边栏设置
  • 独立 CLI(git-sluice)
  • 独立脚本:清洗用户沟通措辞
  • 独立脚本:运行时检测(三层审计 L3)
  • 安装与要求
  • 版本列表
  • 注意事项
折叠说明:本文档的长章节(代码审计 / 系统提示词注入 / 独立 CLI / 安装与要求)默认收起,
点章节内的「展开」即可查看全文;标题本身保留,目录锚点照常可用。

分体式文档(docs/)

长文档不直接内嵌 README,各自存独立 md(README 仅链接引用),由 doc- 前缀脚本自动维护:

文档 · 位置 · 维护脚本 · 说明 版本列表 · docs/CHANGELOG.md · scripts/doc-version.mjs · git log 聚合版本表(gen/apply/check) 函数列表 · docs/FUNCTIONS.md · scripts/doc-func.mjs · 扫描 lib/scripts/test 函数表(gen/apply/check) 文件目录树 · README「目录结构」节 · scripts/doc-tree.mjs · 目录树(原 tree-doc,2026-09-29 改名统一 doc- 前缀)

每个脚本命令统一:gen(打印)/ apply(写宿主 md,自动探测带标记块的 md)/ check(查漂移)。宿主 md 带标记块(dshgp-version / dshgp-functions / dshgp-tree),审计按标记块探测并纳入检查。

功能介绍文档(手写,面向使用者)

讲「这个功能是什么、怎么用、边界在哪」,与上表的生成物分开维护:

文档 · 讲什么 docs/SPEC.md · 当前有效规格唯一入口:身份 / 18 个工具 / 36 条 HTTP 接口 / 20 个设置键 / 4 个数据文件 / 审计规则体系 / 文档产物 / 版本纪律 / 测试基线 docs/功能-审计规则体系.md · 22 个规则槽位 / 165 条规则的组织方式、作用域字段、三层结构、运行入口、结果怎么读、怎么豁免 docs/功能-历史提交审计.md · 逐提交回放审计:解决什么、怎么跑、与普通审计的差异与成本 docs/功能-文档与结构追踪.md · tree-doc / doc-func / doc-version 三份自动生成文档怎么更新、漂移怎么办 docs/功能-仓库索引与账号状态.md · dsh-repo-index.json 与 account-status.json 的写入时机、读取入口、统一收口约定 docs/DETAILS-EXEMPT-AND-RULES.md · 豁免注释与规则 yml 的写法全录(参考手册)

功能总览

插件围绕 DSH 日常开发的高频动作,分两大块——先讲提交推送(GitHub + npm),再讲代码审计。 下面每章都可折叠:长章节默认收起,点章节内的「展开」即可看全文。

一、提交推送(GitHub + npm)

功能块 · 做什么 · 入口 GitHub 提交推送 · token / SSH 密钥管理、提交、推送、clone、建仓、可见性切换、force 强推、版本历史、提交身份自动用登录账号(未配身份的仓库自动写入局部配置)、推送前自动判定正确的 remote · git_commit_push 工具 / CLI / 侧边栏 npm 发包与安装 · npm_publish 发包(默认 dry-run,真发需二次确认)、账号名下包列表(与仓库列表同款行)、四段式安装(目录选择器 / 全局安装 → 进度 → 回执)、npm 账号离线快照 + 在线校验 · npm_publish 工具 / /api/git-push/npm-* / 侧边栏 NPM 标签 任务完成自动推送 · 监听 AI 回合结束→检测回复含「✅任务完成」→自动 commit+push(复用审计门禁,不裸提交) · 侧边栏开关 autoPushEnabled(默认关)+ 自定义触发文本

二、代码审计

功能块 · 做什么 · 入口 提交前审计门禁 · 提交前自动审计,blocker 拦截;22 个规则槽位 165 条规则、10 维度质量评分、豁免机制、链接检查、三层审计管线(L1 正则初筛 / L2 AST 数据流 / L3 运行时检测) · code_audit 工具 / CLI / 侧边栏 / 输入框 /git-audit 审计结果 API · /api/git-push/audit——请求时自定义聚合审计结果:按规则类型 / 文件名 / 严重级 / 规则包分组,severity 白名单过滤,top 截断,withFindings 附明细 · HTTP GET/POST /api/git-push/audit

一、提交推送

Git 全链路自动化,token / SSH 凭据管理 + 提交推送,无需手动敲 git 命令。

凭据管理

  • Token:GitHub token(ghp_ / github_pat_ 开头),保存即写入插件配置目录 credentialsDir()/github-token(0600 权限),不落 settings.yaml 明文
  • SSH 公钥:保存写入 credentialsDir()/*.pub(按类型 id_rsa.pub / id_ed25519.pub);一键生成密钥对(邮箱 → ssh-keygen 4096 位,公钥自动填入并复制剪贴板,私钥只落本机)
  • 账号检测:GET /api/git-push/account-check 在线校验(token 调 api.github.com + SSH 指纹 + 绑定关系),侧边栏账号面板实时显示登录态

提交推送能力

能力 · 说明 git_commit_push · 一键提交+推送(审计门禁默认开启;敏感文件自动 .gitignore;--push/--no-push/--dry-run/--force/--req-confirm/--json;返回带 identity=本次提交身份与来源) git_identity_rewrite · 提交身份历史改写(工具 git_identity_rewrite / CLI git-sluice identity-rewrite):非规范身份(工具/AI 产生的 agent@dsh.local 等 + 账号 noreply 旧变体,可用 extraEmails 追加)统一成账号规范身份。默认 dry-run;--write 才改写(先建备份引用 refs/backup/identity-rewrite//,自检「提交数/工作树/身份全规范」通过),--push 再用 --force-with-lease 强推;已跟踪文件有改动则拒改;只处理 origin 属于登录账号的仓库 零改动也安全 · 没有改动 / 没有新提交时调用不会报错:返回 ok:true + committed:false(job 状态 completed,文案写明「无变更:工作区无改动,无需提交(正常)」);远端已最新 ⇒ ok:true + pushed:false;本地领先远端的已提交内容照样会推上去。零改动调用不产生提交 ⇒ 不涉及 README 核对与 requirementsConfirmed 门禁 remote 自动判定 · 推送前自动选「正确的 GitHub remote」:归属(owner/repo 与登录账号一致)+ 本机可用形态(优先 ssh://git@ssh.github.com:443/…)+ 名字优先级(origin > github-ssh > 其它)。形态不推荐自动 remote set-url;没有可用 remote 时新建;归属不符的 `origin` 绝不覆盖(改走 github-ssh);dryRun 只报告不写盘;回执带 remote / remoteAction / remoteReasons 推送通道 · ssh(默认)= 只走 SSH 私钥 / token= 先走 Git Data API(用 token 推)失败回落 SSH / auto= 先 ssh 失败回落 token;远端分叉时不静默回落,如实报错 force 强推 · API 通道重建 commit 去旧 parent / SSH 通道 git push --force clone / 建仓 · cloneViaApi(trees+blobs 写文件转 git 仓)/ ensureRemoteRepo(建仓+设 origin) 可见性 · setVisibility PATCH 切换 public/private 网络硬闸 · 只允许 api.github.com(githubFetch 拒绝非该域名,不跟随 302)

npm 能力(账号 / 安装 / 发包)

能力 · 说明 npm_publish · npm 发包(后台 job,返回 jobId):默认 dryRun=只体检 + npm publish --dry-run(不写 registry);真发需同时 confirm:true 且 dryRun:false;体检项:private:true、同名版本占用、npm pack 真实清单 安装(四段交互) · 列表行「安装」→ 弹目录选择器或选全局安装 → 轮询 /npm-install-progress 显示进度 → 回执与日志。默认 --ignore-scripts、必须 confirm:true、日志落凭据目录 0600 账号 · /npm-account(离线快照,秒回)+ /npm-check(在线 npm whoami 写快照);与 GitHub 账号同款「离线 + 在线」链路;账号名下包经 /npm-owned 列出(与 GitHub 仓库列表同款行)

提交身份(自动带登录账号,AI 不用猜)

提交必须带身份;仓库没配时 git 会直接以 Author identity unknown 拒提交。插件按下列优先级决定身份, 并在未配身份时把账号身份写进该仓库的局部配置(git config --local;只改该仓库 .git/config,不入库、不动全局):

  1. 仓库已配 user.name + user.email → 原样尊重(不覆盖项目/用户自己的选择)
  2. 未配(或只缺一侧) → 用登录的 GitHub 账号:name = 登录名,

email = +@users.noreply.github.com(GitHub 官方 noreply 形式: 不暴露真实邮箱、提交能关联到账号;拿不到数字 id 时退化为 @users.noreply.github.com)

  1. 账号不可用(未登录 / 离线 / 没探测过)→ 兜底 DSH Agent ,

且不写进仓库配置(避免把兜底身份固化;此时提交由命令行 -c 临时带上,仍能提交)

身份同时主动告知 AI,不用它自己猜:git_commit_push 返回 identity{name,email,source,written}; GET /api/git-push/status 暴露 commitIdentity;插件注入给 AI 的提示词里带一行「本机 git 提交身份:…」。

为什么加这一条:实测 AI 经常不知道「该用什么身份」,只能自己编 —— 本机曾同时存在
DSH Agent 、eightfs@local、v2-clone@local、小写 noreply 等多种身份
(如某仓库 226 个提交里 21 个是 DSH Agent)。插件现在自己解析 + 落盘 + 告知,AI 只需按提示走。

提交时顺带提醒「以前」:每次提交的返回里带 legacyIdentity{count,emails,hint} —— 该仓库历史上还有多少条 非规范身份提交(如 agent@dsh.local)。只提醒、不改历史:历史要不要统一由用户决定;需要时用 git_identity_rewrite(工具)/ git-sluice identity-rewrite(CLI)先 dry-run 预览会改哪些分支与提交。

提交前自动门禁

提交推送前自动跑代码审计(见下节):有 blocker 拦截提交(退出码 2),warning 只提示不拦截。审计通过才执行 commit + push。

任务完成自动推送

监听 AI 会话回合结束(turn/end),提取最后一条回复,检测是否含完成标记——默认「✅任务完成」(侧边栏可自定义触发文本/正则,如 ✅(任务完成|已解答))——含则触发自动 commit + push交付物(autoPushEnabled 开关,默认关)。

  • 复用完整门禁:自动推送走 commitWithAudit(L0 审计 blocker 拦截 / requirements 核对 / pushGate 放行),不裸提交绕过门禁;用户开启开关即一次性授权该自动化通道
  • 范围:session(默认,仅会话 cwd 所在仓库)/ all(workspace 全部有变更仓库);范围、开关、触发文本经 config.json 持久化
  • 并发与去重:同时只跑一个推送 + 同回合只触发一次 + 防抖
  • 阻断标记(❌ / ⚠️ 未完成)不触发;无完成标记不触发

二、代码审计

展开:审计入口 / 扫描忽略语义 / 规则引擎 / 目录结构 / 代码架构 / 10 维度评分 / 豁免机制 / 禁用户沟通词 / 链接检查 / AST 精筛

提交前自动审计 + 独立全量扫描,规则可扩展,质量可评分。

审计入口

  • auditChanged:变动范围(git diff)——提交前默认
  • auditFull:全量扫描(非 git 目录可查)
  • code_audit 工具 / git-sluice audit CLI:强度、规则包、权重全覆盖

扫描忽略语义(黑名单初筛 + 白名单补充)

全量/变更扫描的目录跳过分三层(lib/skip-dirs.js 统一):

  1. 硬编码基线(只允许 node_modules、.git)——机器依赖/内部元数据,绝对跳过,不受 gitignore 影响;
  2. yml 黑名单关键词(规则 yml 的 exclude_dirs 并集,如 folder 规则的 dist/build/vendor/.dsh/.trash 等)——候选跳过,但若 gitignore 用 ! 白名单恢复了该目录(如 server/project/* + !server/project/blueprint/、/build/* + !/build/keep/),则保留进入(黑名单不压过白名单);
  3. gitignore 忽略判定(git check-ignore)——被忽略目录整棵跳过;被 ! 恢复的目录照常进入。

`.auditignore` 审计豁免文件(2026-09-16,2026-09-18 补非 git 兜底):仓库根放一个 .auditignore,用 gitignore 语法声明「不审计但可入库」的文件/目录:

# .auditignore 示例:以下内容照常 git 跟踪/提交,但审计扫描跳过
generated/          # 整棵目录豁免审计
src/vendor.js       # 单文件豁免审计
*.lock              # 匹配 yarn.lock 等 .lock 结尾文件
*.sh                # 按文件类型豁免:所有层级的 .sh(gitignore 语义:无 / 的模式匹配任意深度)
  • 目录规则(generated/)在遍历时整棵剪枝;文件级规则(src/vendor.js、*.lock、*.sh)收集后判定剔除
  • 按扩展名豁免:*.sh / *.png / *.min.js 均可,语义与 gitignore 一致——*.sh 匹配任意层级的 .sh(不是只根目录);只要根目录用 /*.sh。实测 *.sh 能命中 deep/nested/dir/run.sh
  • 否定与恢复:! 前缀恢复审计,且后面的规则覆盖前面的(*.sh + !keep.sh = 只豁免 keep.sh 之外的 .sh)
  • git 仓库:走 git check-ignore -c core.excludesFile,语义与 git 100% 一致
  • 非 git 目录(2026-09-18 新增兜底):解压的源码包、临时导出目录、未 git init 的工程同样生效——改用纯 JS 匹配器 lib/audit/gitignore-match.js(零依赖,语义逐条与真 git 对拍,见 test/test-gitignore-match.mjs)。此前这类目录下 .auditignore 形同不存在,同一个规则在 git init 前后行为相反
  • 与 .gitignore 叠加生效(各自独立、互不覆盖):.gitignore 管「不入库」,.auditignore 管「不入审计」
  • 豁免的文件依旧能入库——.auditignore 只作用于审计扫描,不写进任何 git 配置,git add 照常跟踪
  • CLI 与插件天然一致:git-sluice audit / 插件 code_audit 共用同一 collector,同一份 .auditignore 双端生效
  • 与 yml exclude_dirs 黑名单的区别:yml 黑名单是全局规则(所有仓库都跳);.auditignore 是仓库级(仅本仓库豁免,且仍可入库)

新增跳过目录一律改 yml(exclude_dirs),不改代码。要调整各层行为见 lib/skip-dirs.js 顶部注释。

规则引擎(yml 管理)

规则槽位由目录文件驱动:目录里每个 audit-rules-.yml 即一个槽位,放文件即生效、删文件即移除,无需改代码。内置 22 个槽位:

槽位 · 规则数 · 检查内容 nodejs · 37 · 凭据硬编码 / 路径穿越 / 魔数 / 依赖 / 异步等 java · 7 · Java/Kotlin 专属:短名 / 魔数 / 嵌套 / 方法长度 / 文件长度 / 注释密度 / 圈复杂度(exts: [java, kt],2.1.0 新增) python · 7 · Python 专属:短名 / 魔数 / 嵌套 / 函数长度 / 文件长度 / 注释密度 / 圈复杂度(exts: [py]) go / rust / swift / cpp / php · 各 0(占位) · 语言专用规则占位槽位——放 yml 即生效,规则待补(AST 语言路由已预留,2.1.0) frontend · 19 · 前端安全 / a11y / 依赖 npm · 12 · 依赖声明 / npmrc 凭据 / 测试入口 / 包版本语义(npm/version-format-triple 只查 package.json、npm/version-commit-mismatch) ~~version~~ · 0 · 已撤销:原 5 条全是自家提交/发布纪律(「一次提交=一个小版本」等),不该固化成对任何仓库生效的审计规则——纪律留在 skill(versioning-rule / git-commit-discipline);其中 2 条 npm 通用约定迁入 npm 槽位 dsh · 7 · DSH 插件契约 / 注入通道(仅 dsh- 前缀插件项目加载——非 dsh 项目 require node 内置不误报,2.1.2) comment · 6 · 注释措辞 / 对话残留 folder · 6 · 目录总数 / 单目录文件数 / 解包特征 / .gitignore / cd 到可能不存在的目录 / 写文件到 .gitignore 忽略目录 i18n · 3 · 硬编码文案 / 插值 / 语言包 performance · 2 · memory-bomb / busy-wait docs / robustness / structure / template / private · 各 0-4 · 链接检查 / 写前 mkdir / 循环依赖 / 规则模板 / 私密文件拦截

加规则 = 放文件;加字段类型(新 kind)才需加函数(compilers.js 注册制:registerCompiler(kind, detect, compile),加字段=加函数+注册一行,compileRule 主体永不修改)。

规则作用域字段(写规则时最容易漏、也最容易误报)

字段 · 语义 · 典型用途 exts · 扩展名白名单(如 ["json"]) · 只对某类文件跑 include_paths · 路径白名单:不含 / 按文件名匹配(任意层级),含 / 按路径相等 / 前缀 / 后缀匹配 · 只对 package.json 跑(include_paths: ["package.json"]) exclude_paths · 路径黑名单(前缀匹配) · 排除 server/、test/ 等目录 file_patterns · 文件内容初筛正则(不是路径!L1 只求召回) · 只在正文含某特征时才做重检查

为什么要有 `include_paths`:exts(指定后缀)本来就支持,但它只能收窄到扩展名级——.json 这个粒度太粗:同一个 .json 既可能是 npm 的 package.json,也可能是 Live2D 的 model.json、Unity 的 .asset 清单。npm/version-format-triple(package.json 的 version 必须 SemVer 三段)原先是 exts: ["json"],于是把规则套到了所有 json——第三方资源仓库(实测 0 个 package.json)被报 1435 条 error。补上 include_paths: ["package.json"](文件名级作用域)后规则只对真正的 package.json 生效。

规则设计原则:自家提交/发布纪律不要固化成审计规则——审计规则对任何仓库生效,而自家纪律(「一次提交=一个小版本」「README 必须有版本记录」等)只适用于本机自研项目,写进规则必然在第三方仓库上大面积误报。这类约定放 skill,规则只保留生态通用的检查(如 npm 的 SemVer 格式)。

目录结构(自动生成)

由 scripts/doc-tree.mjs 维护:gen 生成 / check 查漂移 / apply 覆盖本节 / sync 索引自动同步(2026-09-29 自 tree-doc.mjs 改名,统一 doc- 前缀)。
注释来源 tree-doc.json(路径 → 一句话介绍):键集合自动同步(sync/gen --write 新增文件自动补键、删除文件自动删键),描述由 AI/人补(新键标「(待注释)」)。
dsh-git-push/
├── lib/ — 核心实现(10 总入口 + 审计引擎 + git 执行层 + 规则编译层)
│   ├── ARCHITECTURE.md — 架构说明文档
│   ├── BUGFIX-NOTES-2026-09-14.md — Bug 修复说明(diff 审计提速 / 凭据文件拦截三层根因)
│   ├── audit-defaults.js — (待注释)
│   ├── commit-push.js — 审计提交总入口(commitWithAudit + runAudit 同步审计)
│   ├── fsx.js — 文件系统适配层(CIFS/SMB 兼容:copyFile 读写回退、chmod 尽力而为、元数据能力探测)
│   ├── index.js — 插件入口(DSH 接线,再导出全部能力)
│   ├── skip-dirs.js — 跳过目录统一判定(硬编码基线 + yml exclude_dirs 并集 + gitignore 白名单恢复)
│   ├── tool-probes.json — 工具探测清单模板(工具为 key、值为空;运行时实测生成运行目录 tools.json)
│   ├── user-requirements.json — 开发者特殊要求清单(提交推送前逐条核对)
│   ├── app/ — 插件入口层(apply/HTTP 处理/工具调用分发/注入文本/默认扫描根)
│   │   ├── apply.js — 插件装载入口(注册 schema/工具/HTTP/注入钩子)
│   │   ├── audit-api.js — 审计结果 API 聚合层(/api/git-push/audit:按规则/文件/严重级/规则包分组 + severity 过滤 + top 截断)
│   │   ├── command-registry.js — 工具命令注册表(方案 B——CLI/宿主工具/帮助同源,免维护)
│   │   ├── constants.js — 插件名与设置命名空间常量
│   │   ├── host-doc-checks.js — (待注释)
│   │   ├── http-handlers.js — HTTP 路由分发(薄 router:前置校验 + switch 各端点调 handlers/ 模块)
│   │   ├── index.js — 插件入口再导出(宿主 main 指向)
│   │   ├── inject-text.js — 注入文本(工具用法提示 FUNCTION_USAGE_HINT)
│   │   ├── scan-root.js — 默认扫描根解析(配置优先→DSH 家根自动识别)
│   │   ├── schema.js — 配置 schema(宿主导出缺失时兜底)
│   │   ├── settings-bridge.js — 设置读写桥(host scope 共享;绕开 client isLoopback=memory 落盘陷阱)
│   │   ├── slash-commands.js — 用户输入框斜杠命令(目前只注册 /git-audit)
│   │   ├── slot-stats.js — 规则槽位命中统计(模块级状态)
│   │   ├── tool-call.js — 工具调用分发(git_scan/commit_push/audit/status 等全部工具)
│   │   ├── tools.js — 工具定义清单(名称/描述/参数 schema)
│   │   └── …(10 个更深文件)
│   ├── ast/ — AST 实现层(token 级判定:括号/控制流/数据流/凭据/魔数/命名/规模/分词)
│   │   ├── brace.js — 括号配对与区间包含工具
│   │   ├── callgraph.js — 调用链追踪(单文件调用图 + isInRequestPath,io-risk 请求路径判定升级)
│   │   ├── code-lines.js — 代码行判定(真代码 vs 注释/字符串)+ 字符串字面量提取
│   │   ├── consts.js — (待注释)
│   │   ├── control-flow.js — 控制流检查(同步 fs/空 catch/圈复杂度/嵌套深度)
│   │   ├── credential.js — 凭据标识符判定(硬编码/引用/类型检查)
│   │   ├── dataflow.js — 数据流检查(清空后访问,三层审计 L2)
│   │   ├── dup-code.js — (待注释)
│   │   ├── fs-hotspots.js — (待注释)
│   │   ├── index.js — AST 层统一出口
│   │   ├── io-risk-const.js — IO 风险分级·常量与档位工具:fs 调用名集/操作类别/风险标签/搜索窗口与阈值 + raise 升档
│   │   ├── io-risk-fn.js — IO 风险分级·函数边界识别与 token 配对:认普通/箭头/方法简写/类方法,圆括号花括号方括号前后向配对
│   │   ├── io-risk-loop.js — IO 风险分级·循环判定:循环内/迭代器表达式(只执行一次)/小字面量数组降级/collectRanges 范围收集
│   │   ├── io-risk.js — IO 风险分级(四级)判定与评分:scanIoRiskAst 判定上下文/类别 → summarizeIoRisk 统计 → rankIoFixList 优先级清单;并再导出下列三个从属模块的公共符号
│   │   ├── lang.js — 语言路由(2026-10-06):detectLang 内容启发式检测 + javaKtFuncRanges(Java/Kotlin 方法签名+括号配对函数范围)+ LANG_FUNC_RANGES 主流语言占位
│   │   ├── line-count.js — (待注释)
│   │   ├── magic-number.js — 硬编码魔数识别(豁免版本号/日期/状态码)
│   │   ├── naming.js — 命名检查(标识符长度/函数名过短/受控小文件读取)
│   │   ├── perf.js — (待注释)
│   │   ├── scope.js — 变量作用域分类器(module/function/loop 行号区间 + 模块常量赋值判定)
│   │   ├── shell.js — shell 精筛(cd 动态路径/写操作命中 .gitignore)
│   │   ├── size.js — 规模检查(函数长度/文件长度/重复字符串)
│   │   ├── symbol-index.js — (待注释)
│   │   ├── tokenizer.js — 分词器(token 流 + LRU 缓存)
│   │   ├── treesitter.js — (待注释)
│   ├── audit/ — 审计编排层(文件收集/逐文件检查/槽位聚合/审计出口)
│   │   ├── analysis-coverage.js — (待注释)
│   │   ├── audit-file.js — 单文件审计执行(跑检查+豁免)
│   │   ├── checks.js — 检查器入口(纯引用表)
│   │   ├── client-entry.js — (待注释)
│   │   ├── collector.js — 文件收集(gitignore 感知)
│   │   ├── ext-runner.js — 审计扩展运行器(audit-ext 统一入口动态加载/契约执行/失败降级)
│   │   ├── file-context.js — 文件上下文豁免(外部调用超时/mkdir 同函数/版本路径)
│   │   ├── finding.js — 统一问题对象构造器(makeFinding)
│   │   ├── gitignore-match.js — gitignore 语法匹配器(非 git 目录 .auditignore 兜底,语义与 git 对拍)
│   │   ├── glob.js — glob→RegExp 转换(**/*/? 子集)
│   │   ├── history-report.js — (待注释)
│   │   ├── history.js — (待注释)
│   │   ├── ignore-blind.js — 审计静默失明检测(本地 git 排除配置把整仓判成忽略时告警)
│   │   ├── index.js — 审计层统一出口(auditFull/auditChanged)
│   │   ├── orchestrate.js — 审计编排(收集→检查→汇总)
│   │   ├── public.js — (待注释)
│   │   ├── repo-level.js — 仓库级语义规则
│   │   ├── report-yaml.js — (待注释)
│   │   ├── slot.js — 按规则包聚合审计命中(拦截/警告/通过)
│   ├── audit-rules/ — 规则包 yml(nodejs/npm/frontend/comment/dsh/private/structure 等动态槽位)
│   │   ├── audit-rules-comment.yml — 注释类规则(黑名单措辞/对话残留)(规则包 comment)
│   │   ├── audit-rules-cpp.yml — C/C++ 规则包(占位:规则待补,槽位就绪)(规则包 cpp)
│   │   ├── audit-rules-docs.yml — 文档类规则(README/文档措辞)(规则包 docs)
│   │   ├── audit-rules-dsh.yml — DSH 生态规则(宿主/插件约定)(规则包 dsh)
│   │   ├── audit-rules-filehealth.yml — 文件健康度规则(三维分级)(规则包 filehealth)
│   │   ├── audit-rules-folder.yml — 目录级规则(目录数/单目录文件数)(规则包 folder)
│   │   ├── audit-rules-frontend.yml — 前端规则(按钮绑定/魔数)(规则包 frontend)
│   │   ├── audit-rules-go.yml — Go 规则包(占位:规则待补,槽位就绪)(规则包 go)
│   │   ├── audit-rules-i18n.yml — i18n 规则(文案硬编码检查)(规则包 i18n)
│   │   ├── audit-rules-java.yml — Java/Kotlin 规则(短名/魔数/方法长度/复杂度,exts: [java,kt])(规则包 java)
│   │   ├── audit-rules-nodejs.yml — Node.js 规则(同步 fs/空 catch)(规则包 nodejs)
│   │   ├── audit-rules-npm.yml — npm 规则(package.json 规范)(规则包 npm)
│   │   ├── audit-rules-paths.yml — (待注释)
│   │   ├── audit-rules-performance.yml — 性能规则(规则包 performance)
│   │   ├── audit-rules-php.yml — PHP 规则包(占位:规则待补,槽位就绪)(规则包 php)
│   │   ├── audit-rules-private.yml — 私密文件规则(凭据/私密清单)(规则包 private)
│   │   ├── audit-rules-python.yml — (待注释)
│   │   ├── audit-rules-robustness.yml — 健壮性规则(规则包 robustness)
│   │   ├── audit-rules-rust.yml — Rust 规则包(占位:规则待补,槽位就绪)(规则包 rust)
│   │   ├── audit-rules-structure.yml — 结构规则(命名/规模/复杂度)(规则包 structure)
│   │   ├── audit-rules-swift.yml — Swift 规则包(占位:规则待补,槽位就绪)(规则包 swift)
│   │   ├── audit-rules-template.yml — 规则模板(新规则包起点)(规则包 template)
│   ├── checks/ — 检查层(按 kind 调用检查器:正则/语义/结构/文件健康/按钮绑定/私密文件)
│   │   ├── button-bind.js — 按钮事件绑定交叉比对(声明了但没绑定)
│   │   ├── common.js — 检查器公共设施(豁免提示/severity 封顶/分组)
│   │   ├── credential-file.js — 凭据文件检查(.env/密钥文件)
│   │   ├── dataflow.js — 数据流规则包装(L2 token 级→finding)
│   │   ├── dispatch.js — 调度(runChecks 按 kind 分发汇总)
│   │   ├── dup-code.js — (待注释)
│   │   ├── dup-const.js — 同名常量跨文件重复定义检查(DRY:findConstDefs 多语言常量提取 + 模块级过滤 + checkDuplicateConst 跨文件聚合——2026-10-02 新规则)
│   │   ├── file-health.js — 文件健康度(行数/字节/行长三维打分)
│   │   ├── filter.js — 规则作用域过滤(exts/exclude_paths)
│   │   ├── folder.js — 目录级检查(文件夹数/单目录文件数/解包特征)
│   │   ├── fs-scanner.js — (待注释)
│   │   ├── hardcoded-path.js — (待注释)
│   │   ├── index.js — 检查层统一出口
│   │   ├── io.js — IO 风险分级包装:checkIoRisk → lib/ast/io-risk.js(转 warning finding,取代 quality/sync-fs)
│   │   ├── magic-number.js — 魔数检查包装(token 判定→finding)
│   │   ├── npm-json.js — package.json 检查(依赖版本/私有包豁免)
│   │   ├── private.js — 私密文件检查(私有仓可见性核对)
│   │   ├── regex.js — 正则类规则执行(regex/path-regex/blacklist)
│   │   ├── semantic.js — 语义类规则执行(patch insert/仓库级语义)
│   │   ├── structural.js — 结构类规则(函数长度/复杂度/嵌套/同步 fs)
│   ├── cli/ — (待注释)
│   │   ├── commands-account.mjs — (待注释)
│   │   ├── commands-audit.mjs — (待注释)
│   │   ├── commands-doc.mjs — (待注释)
│   │   ├── commands-vcs.mjs — (待注释)
│   ├── client/ — 客户端配置(DEFAULT_CONFIG + SETTINGS_SCHEMA 侧边栏设置项定义)
│   │   ├── index.js — 侧边栏设置 UI 总入口(DEFAULT_CONFIG + SETTINGS_SCHEMA)
│   ├── client-parts/ — 客户端分片源码(13 片,拼接成 lib/client.js;产物不入库)
│   │   ├── account.js — (待注释)
│   │   ├── actions.js — (待注释)
│   │   ├── apply.js — (待注释)
│   │   ├── audit.js — (待注释)
│   │   ├── browser.js — (待注释)
│   │   ├── const.js — (待注释)
│   │   ├── controller.js — (待注释)
│   │   ├── icons.js — (待注释)
│   │   ├── loader.js — (待注释)
│   │   ├── npm.js — (待注释)
│   │   ├── page.js — (待注释)
│   │   ├── repo.js — (待注释)
│   │   ├── settings.js — (待注释)
│   │   ├── utils.js — (待注释)
│   ├── context/ — 上下文注入(给 AI 会话注入环境:目录映射/工具路径/skill 入口)
│   │   ├── index.js — 上下文注入入口(环境注入文本)
│   ├── core/ — (待注释)
│   │   ├── atomic-json.js — (待注释)
│   │   ├── config.js — (待注释)
│   │   ├── credentials.js — (待注释)
│   │   ├── endpoints.js — (待注释)
│   │   ├── exec.js — (待注释)
│   │   ├── workspace-paths.js — (待注释)
│   ├── exempt/ — 豁免机制(dsh-skip-* 注释标记解析与文件头/行内语义)
│   │   ├── index.js — 豁免注册表(dsh-skip-* 全标记消费)
│   │   ├── tool.js — (待注释)
│   ├── git/ — Git 执行层(runGit/账号/API/克隆/凭据/推送/扫描/索引维护/敏感扫描/传输通道)
│   │   ├── account-status.js — (待注释)
│   │   ├── account.js — 账号校验(token 在线 + SSH 公钥指纹,输出账号状态块)
│   │   ├── api.js — GitHub REST 调用(githubFetch 统一 token/错误识别)
│   │   ├── atomic-json.js — 统一 JSON 原子读写(readJson/writeJsonAtomic/updateJsonAtomic/writeTextAtomic)
│   │   ├── browse.js — 目录浏览(账号卡片路径选择器后端)
│   │   ├── clone-download.js — 并发下载 + .part 断点续传 + 体积守卫 + 进度回调
│   │   ├── clone-history-mode.js — (待注释)
│   │   ├── clone-history.js — (待注释)
│   │   ├── clone-jobs.js — clone 进度/预览内存态(供前端轮询)
│   │   ├── clone-replay-io.js — (待注释)
│   │   ├── clone-replay.js — (待注释)
│   │   ├── clone.js — 克隆(Git Data API,不依赖本地凭据)
│   │   ├── cloud.js — 云端仓库列表(/user/repos 供手动 clone)
│   │   ├── commit-message.js — (待注释)
│   │   ├── config.js — 路径与配置(PLUGIN_ROOT + 开发者要求清单读取)
│   │   ├── cred-env.js — 凭据传递工具(SSH 私钥路径 GIT_SSH_COMMAND / HTTPS askpass 脚本,AI 执行外部 git 不接触明文)
│   │   ├── credentials.js — 凭据解析(token/SSH 私钥:环境变量→凭据文件→settings)
│   │   ├── endpoints.js — (待注释)
│   │   ├── exec.js — git 进程调用(runGit 统一超时/错误规整 + gitRaw 原始字节)
│   │   ├── identity-rewrite.js — (待注释)
│   │   ├── identity.js — (待注释)
│   │   ├── ignore.js — .gitignore 兜底(DEFAULT_IGNORE_PATTERNS 补齐)
│   │   ├── index-format.js — (待注释)
│   │   ├── index.js — Git 执行层统一出口
│   │   ├── module-splitter.js — (待注释)
│   │   ├── post-push.js — 推送后增强(remote-tracking ref/aux remote/tag)
│   │   ├── push-diagnose.js — (待注释)
│   │   ├── push.js — 提交推送编排(commitAndPush 全流程:敏感扫描→add/commit→推送)
│   │   ├── remote-resolve.js — (待注释)
│   │   ├── remote.js — 远端仓库管理(建仓默认 private/可见性切换)
│   │   ├── repo-index.js — dsh-repo-index 自动维护(扫描 workspace 生成索引 JSON)
│   │   ├── repos.js — 仓库扫描与展示(describeRepo 分支/远端/领先落后/未提交)
│   │   ├── scan-runner.js — (待注释)
│   │   ├── sensitive.js — 敏感信息扫描(提交前拦截密钥/凭据/私密文件)
│   │   ├── transport.js — 推送通道(dispatchPush 决策:SSH/API/auto + 结果核对)
│   │   ├── visibility.js — (待注释)
│   │   ├── wrapped-git.js — 浅包装 git(自动凭据透传:SSH 私钥/HTTPS token,git-sluice git <args> 与未知命令透传)
│   ├── http/ — HTTP 总入口(鉴权中间件 + 端点处理器骨架)
│   │   ├── index.js — HTTP 总入口(Origin/CSRF/写确认/413/路由分发)
│   ├── link-check/ — 链接判断(文档链接有效性,只 warning 永不 blocker)
│   │   ├── index.js — 链接判断总入口(分级扣分,断网不拦)
│   ├── npm/ — (待注释)
│   │   ├── account.js — (待注释)
│   │   ├── install.js — (待注释)
│   │   ├── npmrc.js — (待注释)
│   │   ├── publish.js — (待注释)
│   │   ├── registry.js — (待注释)
│   ├── plugin/ — Host 侧接线层(插件注册到 DSH:工具/HTTP/配置 schema)
│   │   ├── auto-detect.js — 任务完成自动推送·检测层(纯函数:✅任务完成 触发/❌⚠ 阻断/自定义正则/许可合成判断)
│   │   ├── auto-push.js — 任务完成自动推送·核心(turn/end 监听→检测→autoPushEnabled 开关→调 commitWithAudit 完整门禁,不裸提交)
│   │   ├── index.js — Host 侧接线(插件注册:工具/HTTP/配置注入宿主)
│   ├── readme-templates/ — README 模板 yml
│   │   ├── readme.yml — README 章节模板(git_gen_readme 用)
│   ├── rule/ — 规则引擎(yml 装载/编译注册表/同形字符检测/槽位启停)
│   │   ├── compilers.js — 规则编译器注册表(纯引用文件)
│   │   ├── homoglyph.js — 同形字符检测(yml kind/id 防 ASCII 混淆)
│   │   ├── loader.js — 规则总入口(yml 装载/解析/槽位启停)
│   │   ├── registry.js — 规则编译注册表核心(compileRule 主体)
│   │   ├── scope.js — 审计作用域机制层(scope_rules 规范化 + resolveScopeAction)
│   │   └── …(12 个更深文件)
│   ├── score/ — 10 维度加权评分总入口
│   │   ├── docs-score.js — 文档加分制检查器(文档集结构信号 + 版本一致性交叉验证,0 分起上限 10;不进 findings)
│   │   ├── index.js — 评分总入口(10 维度加权)
│   ├── self/ — 插件自身总入口(VERSION/versionInfo/CLI 帮助)
│   │   ├── index.js — 自身总入口(VERSION 一致性/versionInfo)
│   ├── vendor/ — (待注释)
│   │   └── …(2 个更深文件)
├── scripts/ — 开发工具脚本(版本校验/双副本同步/预览服务/README 目录树维护)
│   ├── audit-runner.mjs — 审计扩展 CLI 统一入口(独立跑 scripts/audit-ext/ 全部扩展)
│   ├── audit-runtime-check.mjs — 三层审计 L3 运行时检测脚本
│   ├── browser-page-probe.mjs — (待注释)
│   ├── build-client.mjs — 客户端分片拼接(PART_ORDER + --check 门禁 + 形态铁律自检)
│   ├── check.mjs — 语法检查脚本(npm run check)
│   ├