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

CI 瘦身 0disoft/dsh-ci-diet

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

找出浪费的 Actions 运行时间并生成小补丁

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

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

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

状态速览

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

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

验证判据与等级说明 →

可信度证据

⚠︎ 实装验证未通过(unknown · 2026/10/23) ——可能是验证环境差异,装前建议到 GitHub 仓库确认最近更新与 issue。
安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

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

读写/删除本地文件
查看扫描证据(共 12 处,展示前 12 条)
  • 写入本地文件
    src/cli/compare.ts:51
    else writeFileSync(resolve(cwd, out), output, { flag: "wx" });
  • 写入本地文件
    src/cli/index.ts:355
    mkdirSync(dirname(absolute), { recursive: true });
  • 写入本地文件
    src/cli/index.ts:358
    writeFileSync(temporary, content, "utf8");
  • 写入本地文件
    src/cli/index.ts:359
    renameSync(temporary, absolute);
  • 删除本地文件
    src/cli/index.ts:361
    rmSync(temporary, { force: true });
  • 读取本地文件
    src/cli/index.ts:572
    const store = options.rule === "CD006" ? openStore(stateDir, locale, options.config.storage) : existsSync(stateDir) ? openStore(stateDir, locale, opti
  • 读取本地文件
    src/cli/index.ts:829
    source = readFileSync(join(binding.workspaceRoot, payload.workflowPath), "utf8");
  • 读取本地文件
    src/cli/index.ts:875
    if (!existsSync(stateDir)) {
  • 读取本地文件
    src/cli/index.ts:946
    if (!existsSync(stateDir)) {
  • 读取本地文件
    src/cli/index.ts:1062
    if (!existsSync(stateDir)) {
  • 读取本地文件
    src/cli/measure.ts:39
    if (!existsSync(statePath)) throw new Error("STATE_NOT_FOUND");
  • 写入本地文件
    src/cli/measure.ts:52
    else writeFileSync(resolve(cwd, out), output, { flag: "wx" });
扫描于 2026/11/3(1 天前) · 范围 全包扫描(包内未声明入口) · 来源 GitHub 仓库

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

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

找出浪费的 GitHub Actions runner 时间,并给出小而可审查的 YAML 补丁。

README

由 DeepSeek 最新模型翻译生成
CI Diet 找出浪费掉的 GitHub Actions runner 时间,并给出小而可审查的补丁。 状态:alpha,已发布到 npm,包名 dsh-ci-diet@0.2.0。契约、规范、分析引擎、补丁引擎、命令行、DSH 插件工具,以及自包含的 HTML 报告都已实现并通过测试。DSH Web 客户端界面还没做。 它能做什么 CI Diet 读取两样东西,然后对比: 1. 当前工作树里的工作流 YAML。 2. 可选:用只读的 gh api 调用拉取执行历史。 据此报告 runner 分钟花在哪里,以及哪些发现可以安全地变成一处小的 YAML 修改。每条发现都带证据等级(observed、inferred、static),每条规则还带覆盖状态。 | 规则 | 发现什么 | v0.1 中的方案 | | CD001 | 被更新提交取代的 PR 运行 | 补丁:concurrency | | CD002 | 重叠的触发器 | 仅解释 | | CD003 | 只改文档的变更上跑的重检查 | 仅解释 | | CD004 | 过大的矩阵 | 仅解释 | | CD005 | 没有 timeout-minutes 的任务 | 补丁:timeout-minutes | | CD008 | 过长的产物保留期 | 补丁:retention-days | 规则集刻意保持很小。
展开完整文档(README 剩余 1 节)
CI Diet

找出浪费掉的 GitHub Actions runner 时间,并给出小而可审查的补丁。

状态:alpha,已发布到 npm,包名 dsh-ci-diet@0.2.0。契约、规范、分析引擎、补丁引擎、命令行、DSH 插件工具,以及自包含的 HTML 报告都已实现并通过测试。DSH Web 客户端界面还没做。

它能做什么

CI Diet 读取两样东西,然后对比:

1. 当前工作树里的工作流 YAML。
2. 可选:用只读的 gh api 调用拉取执行历史。

据此报告 runner 分钟花在哪里,以及哪些发现可以安全地变成一处小的 YAML 修改。每条发现都带证据等级(observed、inferred、static),每条规则还带覆盖状态。

| 规则 | 发现什么 | v0.1 中的方案 |
| CD001 | 被更新提交取代的 PR 运行 | 补丁:concurrency |
| CD002 | 重叠的触发器 | 仅解释 |
| CD003 | 只改文档的变更上跑的重检查 | 仅解释 |
| CD004 | 过大的矩阵 | 仅解释 |
| CD005 | 没有 timeout-minutes 的任务 | 补丁:timeout-minutes |
| CD008 | 过长的产物保留期 | 补丁:retention-days |

规则集刻意保持很小。一条规则只有在真实仓库上通过质量门槛后才会发布,因为吵闹的规则比缺失的规则更糟。CD003 和 CD005 已实现,但默认关闭,等通过那道门槛(见 ADR-13)。

它绝不做什么

- 不提交、不推送、不提 PR、不合并。
- 不运行工作流,不取消正在运行的任务,不删除产物或缓存。
- 不改分支保护。
- 在 GitHub 上没有写权限。历史访问是只读的;没有网络访问的仓库照样能做静态扫描。
- 不用 LLM 判断某个任务是否浪费。
- 补丁是对你现有 YAML 的字节区间编辑。你审查 diff,明确批准,再应用到工作树。

诚实的数字

成本输出保留四个独立的值,绝不混用:

| 字段 | 含义 |
| observedRunnerSeconds | 运行记录实际写的内容 |
| modeledRoundedMinutes | 按任务计的分钟数,按计费方式向上取整 |
| listPriceUsd | 按快照标价换算 |
| actualBilledUsd | 在能证明之前始终为 null |

每份报告都嵌入它用到的价格快照(带内容哈希),所以数字以后可以复现。快照无法验证时,报告不发布。

安装

npm install --global dsh-ci-diet
dsh plugin --profile web add dsh-ci-diet

插件会添加一条禁用的 loader 条目;只有想同步历史时才启用 networkEnabled。全局安装这个包是可选的:npx dsh-ci-diet 运行同一个命令行,DSH 插件只需要包在配置档里。发布标签在 GitHub 上;对应的 npm 版本是 0.2.0。

运行

ci-diet scan --cwd . # static scan, no network
ci-diet sync --network # read GitHub Actions history for this checkout
ci-diet plan --rule CD001 --workflow .github/workflows/ci.yml \
--claims ci-only,replace-safe
ci-diet approve --plan <planId> --confirm <digest tail>
ci-diet apply --plan <planId> # rewrites only the planned byte range
ci-diet revert --change <changeId> # restores the backed-up bytes

发现项不符合补丁条件、覆盖范围不允许写入,或规则依赖的策略快照已过期时,plan 会拒绝写入。CD005 需要 --job 和 --minutes;CD008 需要 --job 和 --step,外加 --claims artifact-purpose:temporary,consumer-min-days:7。没有显式执行 approve 步骤,就不会提交、推送或应用任何改动。

读取报告

ci-diet report # text summary of the latest stored report
ci-diet report --format html --out report.html
ci-diet diagnose # explain job-name attribution and collection coverage
ci-diet prune # drop expired reports, plans, and cache entries

HTML 文件自包含:内联 CSS,不含脚本,不发起外部请求。它是只读的,所以审批仍留在命令行里,摘要与 nonce 校验也在那里。

diagnose 读取最近存储的历史,报告有多少 GitHub 作业名解析成了工作流键、哪些矩阵作业发生了展开、哪些采集上限导致某个覆盖维度不完整。它只读,可离线运行;--require-complete 在任一维度不完整时以 3 退出。

它还会列出建议性的缓存卫生提示:依赖安装没有缓存,以及字面量缓存键无法跟随 lockfile。冻结的契约里没有缓存规则 id,所以这些提示永远不会变成发现项或补丁。

发布

推送与 package.json 中版本匹配的 tag,会触发 .github/workflows/publish.yml:

git tag v0.2.0
git push origin v0.2.0

工作流会把 tag 与 package.json 比对(node scripts/check-release-tag.mjs),运行与 CI 相同的检查,拒绝覆盖已发布的版本,然后用 npm 可信发布完成发布。它使用 GitHub OIDC(id-token: write),不用 npm token,所以包的 trusted publisher 必须为本仓库指定 publish.yml。

环境要求

- Node ^22.19.0 || >=24.0.0
- gh 命令行,可选,仅用于执行历史
- DSH >=0.2.1-rc.2 <0.3.0-0 || >=0.2.2-rc.1 <0.3.0-0,可选,仅用于插件工具

开发

bun install
node scripts/test-core.mjs
node scripts/gen-types.mjs --check
node scripts/sync-contracts.mjs --check
bun run typecheck
bun run lint
bun run test:docs

用 Node 跑测试,这样发布的入口点保持 Node 兼容;Bun 只用来管理依赖。

目录结构

src/core workflow parsing, rules, savings, patch engine
src/adapters github, git, storage
src/dsh host and client plugin code
src/cli command line entry
src/shared i18n 和小型共享辅助函数 contracts JSON Schema,从冻结的设计包导入 examples 示例记录和评估向量 docs/spec 规范性产品规格 scripts 契约和文档检查 tests/unit 无需网络的快速检查

语言

英语是默认语言,也是消息键的权威来源。命令行、HTML 报告和 DSH 工具文本提供英语、韩语、简体中文、印地语、西班牙语和法语版本;每份词典都完整,因此缺失键会报类型错误。区域标签按语言解析(hi-IN、es-MX、fr-CA),非简体中文的中文变体回退到英语。

语言选择顺序:显式 --lang,然后是 DSH 区域偏好,然后是 LC_ALL/LC_MESSAGES/LANG,最后是英语。报告以英语存储,仅在显示时翻译:规则 id、错误码、枚举值、路径、摘要和数字保持不翻译,HTML 报告把 lang 属性设为选定的区域。DSH 工具描述在插件加载时捕获,所以更改 DSH 语言偏好需要重新加载。公开文档为英语,另有韩语 README 镜像。

文档

- 规格:docs/spec/README.md
- 规则:docs/spec/rules.md
- 成本模型:docs/spec/cost-model.md
- 补丁模型:docs/spec/patch-model.md
- 存储与错误:docs/spec/storage.md
- 决策:docs/spec/decisions.md
- 测量:docs/spikes/a0a-rules.md
- 插件与命令行指南:docs/guide/plugin.md
- 契约来源:contracts/UPSTREAM.md
- 韩语:README.ko.md

许可证

MIT
预览分享卡片长什么样 ↓0disoft/dsh-ci-diet
分享 · DeepSeek Harness Hub
0disoft/dsh-ci-diet

找出浪费的 Actions 运行时间并生成小补丁

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