--- description: 用自然语言为 code-checker 新增一条规则(语义/声明式/Python 兜底)并注册生效 agent: build --- # rulegen 为 code-checker 新增一条代码规则。先加载 rulegen skill 并按其流程执行(若可用)。 用户要新增的规则描述: $ARGUMENTS ## 前置 - 确认当前工作目录是 code-checker 项目(含 `tools/rulegen.py` 与 `docs/rulegen/prompt-template.md`)。若不是,先切换到该项目根目录或使用其绝对路径执行。 - Windows 下若无 `python` 命令,使用 `py`。 ## 执行步骤 1. 读取提示词模板 `docs/rulegen/prompt-template.md`,按其 schema 与全部约定执行。 2. 判断规则类型(三选一): - **semantic(语义)**:需理解代码意图(如 catch 块日志、XSS 转义)→ 只生成 `rule.yaml`,必含 `check_prompt` + `message_zh` - **declarative(声明式机械)**:行级正则可表达 → `rule.yaml` 含 `pattern`(**必须用 YAML 单引号**,如 `pattern: 'Thread\\.sleep\\s*\\('`) - **python(机械 Python 兜底)**:需跨行/AST 逻辑,且是 Java(JSP 不支持)→ `rule.yaml` + `checker.py`(继承 `BaseChecker`,`CATEGORIES` 用新类别) 3. 在 `rules/_staging//` 下生成 `rule.yaml`(必要时含 `checker.py`、`sample.`、`negative.`)。 4. 依次执行(在项目根目录;退出码 0=OK / 1=失败,失败先修正再重试,**不要**强制跳过): ``` python tools/rulegen.py validate rules/_staging/ python tools/rulegen.py smoke rules/_staging/ # 语义规则跳过 python tools/rulegen.py register rules/_staging/ --dry-run python tools/rulegen.py register rules/_staging/ ``` 5. 注册完成后向用户报告:规则 ID 与类型、落盘文件(`rules/custom/-rules.yaml`,python 类另含 `check-engine/custom_checkers/`)、校验/冒烟摘要。 ## 纪律 - **不修改** `rules/java-rules.yaml` / `rules/jsp-rules.yaml` / `rules/messages.yaml` 等交付文件;只写 `rules/custom/` 与 `check-engine/custom_checkers/`。 - ID 编号写 `-001` 即可,`register` 会自动重编号。 - 生成后不做 git 提交。