Skip to main content
大型更改请先创建 issue。本页说明如何设置开发环境,以及项目采用哪些约定。完整指南见源代码仓库中的 CONTRIBUTING.md

构建前先提出建议

CC Safety Net 的范围明确:防止编码智能体意外犯错并造成数据丢失。它不是通用的安全加固或攻击防护工具。在实现新的检测规则、命令类别、架构更改或配置选项前,请先创建 issue 进行讨论。拼写修正和有明确解决方案的小 bug 修复可以直接提交拉取请求。

设置开发环境

  • Bun 1.4.0:必需的构建和测试运行时,也是唯一受支持的包管理器(安装指南)。它已在 package.jsonpackageManager 字段中固定版本。
  • Node.js 18 或更高版本:构建产物受支持的运行时。运行已发布的 CLI 或插件不需要 Bun。
  • Claude CodeOpenCode:仅当你要在本地加载并测试插件时需要。构建项目或运行测试套件不需要它们。
bun run check 是唯一的质量门。它依次运行 Biome lint 和格式检查、TypeScript 类型检查、knip 死代码检测、jscpd 重复检测、带覆盖率统计的测试套件,以及覆盖率阈值检查。完成更改后运行一次,不必分别运行各个子命令。创建拉取请求前,请确认它无错误通过。 迭代过程中也可以单独运行这些命令:

测试本地插件

先构建,再加载本地插件来测试真实的阻止行为:
  • Claude Code:禁用任何已安装的 safety-net 插件,退出 Claude Code,然后在仓库根目录运行 claude --plugin-dir .
  • OpenCode:将 ~/.config/opencode/opencode.json 中的 plugin[] 数组指向已构建的 file://.../cc-safety-net/dist/index.js,删除 npm cc-safety-net 条目以避免冲突,然后重启 OpenCode。运行 /status,并确认插件名称显示为 dist
使用只含排除项的无害 pathspec 确认已知阻止行为:git checkout -- ':(exclude,top)**' 必须被阻止。如果保护未生效,该 pathspec 也不会选中任何文件。

遵循代码约定

样式指南

  • 除非代码确实可组合或可复用,否则将代码保留在一个函数中。
  • 避免使用 try/catchany 类型和 else 分支。优先使用提前返回。
  • 优先使用函数式数组方法(flatMapfiltermap),不要使用 for 循环;对 filter 使用类型守卫,以便下游保留类型推断。
  • 优先使用 const,不要使用 let;使用三元表达式或提前返回,不要重新赋值。
  • 直接内联只使用一次的值,不要为其命名,并避免不必要的解构。

范围纪律

过度工程是本项目最常见的失败模式。只做满足需求的最小更改。任何额外内容都必须对应一种具体故障。每项检查都必须能在实际使用中证伪。在出现第一个真实条目前,不要预先构建 schema、验证器、注册表或测试框架。流程要求应写进文档,不要用代码强制执行。

Knip

绝不在 knip.tsignoreIssues 中添加条目。当 knip 标记未使用的导出时,请修复根本原因:删除或取消导出确实无用的代码;使用 /** @internal */ JSDoc 注释标记仅用于测试的导出(knip 以 --production 模式运行,因此排除测试文件);从 barrel 文件中删除未使用的名称。

准备拉取请求

  • 代码遵循上述约定。
  • bun run check 通过且没有错误。
  • 为新规则添加测试,覆盖率至少为 90%。
  • 在本地至少用一个受支持的智能体测试过,例如 Codex、Claude Code、Gemini CLI、GitHub Copilot CLI、Kimi Code 或 Pi。安装页面列出了全部十三个智能体。
  • 在需要时更新文档(README.mdAGENTS.md)。
  • 不更改 package.json 中的版本。
只有维护者处理版本升级和发布。绝不要直接修改 package.jsonplugin.json 中的版本。

获取开发帮助

  • bunx cc-safety-net doctor 验证你的环境配置。
  • bunx cc-safety-net explain "<command>" 逐步显示命令的分析过程。
  • 查看源代码仓库中的 CLAUDE.mdAGENTS.md,了解架构和约定;在审查代码前阅读 REVIEW.md
  • 查看 src/analyzer/ 中的现有实现,了解代码写法;查看 tests/helpers.ts,了解测试工具。
  • 遇到 bug 或有功能需求时,请创建 issue。
最后修改于 2026年8月31日