Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
90 changes: 90 additions & 0 deletions examples/skills_code_review_agent/ACCEPTANCE_CHECKLIST.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
# Acceptance Checklist

## 标准 1:8 条公开样本必须全部可运行并生成报告

- 已覆盖 8 条 fixture:
- `clean.diff`
- `security_issue.diff`
- `async_resource_leak.diff`
- `db_lifecycle_issue.diff`
- `missing_tests.diff`
- `duplicate_finding.diff`
- `sandbox_failure.diff`
- `secret_redaction.diff`
- 已有集成测试和 CLI 路径生成 `review_report.json` 与 `review_report.md`
- Phase 6 额外验证:
- `fixture_runs_ok=8`
- 新增质量门禁测试 `test_all_public_fixtures_generate_reports`

## 标准 2:隐藏样本高危问题检出率 >= 80%,误报率 <= 15%

- 当前实现以高信号确定性规则优先:
- `eval`
- `exec`
- `pickle.loads`
- `yaml.load`
- `shell=True`
- secret patterns
- 低置信项自动降级为 `needs_human_review` 或 `warning`
- 当前示例给出工程策略和测试基线,但隐藏样本上的最终指标仍需 PR 前人工复核说明

## 标准 3:数据库完整记录 task、sandbox run、finding 和 report

- SQLite 已持久化:
- `review_tasks`
- `review_inputs`
- `filter_decisions`
- `sandbox_runs`
- `findings`
- `review_reports`
- 已支持 `get_review_bundle(task_id)` 查询完整链路

## 标准 4:沙箱具备超时和输出限制,失败不崩

- 脚本执行层有 timeout
- stdout/stderr 有统一截断上限
- sandbox failure / timeout 转换为结构化记录和 finding
- 已有 `sandbox_failure.diff` 测试

## 标准 5:敏感信息脱敏检出率 >= 95%

- 报告和数据库前统一调用 `redactor.py`
- 覆盖:
- API key
- token
- password
- bearer token
- private key
- 已有 `secret_redaction.diff` 集成测试

## 标准 6:dry-run / fake model 模式 <= 2 分钟

- 主链路不依赖真实模型
- 规则和脚本执行均为轻量 deterministic 路径
- 当前测试集运行时间远低于 2 分钟
- Phase 6 单次 security fixture dry-run 实测约 `9.87s`

## 标准 7:高风险脚本必须先经过 Filter 决策

- 所有 skill 脚本执行前统一经过 `filter_policy.py`
- Filter 同时检查固定 argv 与实际待执行 Skill 脚本内容
- `deny / needs_human_review` 不直接进入执行
- 已测试 forbidden path、危险命令和网络访问拦截

## 标准 8:报告必须包含关键信息

- 当前报告包含:
- findings
- severity stats
- human review items
- filter summary
- sandbox summary
- monitoring summary
- actionable recommendations

## PR 前仍需复核

- README 与最终示例输出是否同步
- 设计说明是否满足 300-500 字要求
- 容器路径已通过原生 `skill_run` 接入,并有回归测试验证 Agent 不再手工执行 runtime
- 是否需要附上最终 sample outputs 供 reviewer 直接查看
9 changes: 9 additions & 0 deletions examples/skills_code_review_agent/DESIGN_NOTE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
# 方案设计说明

本方案将自动代码评审拆为“主流程编排 + 可复用 Skill + 受控执行 + 结构化落库”四层。主流程由 `agent/agent.py` 负责,统一接收 diff、repo path 或 fixture,完成输入归一化、diff 解析、规则执行、Filter 决策、skill 脚本调度、报告生成和 SQLite 持久化。`skills/code-review/` 则承载正式的 `code-review` Skill,包括 `SKILL.md`、规则文档、使用文档、脚本契约与三个确定性脚本,用于承接可复用的评审知识与脚本执行面。

沙箱隔离策略采用“框架 `skill_run` 托管 + 显式本地回退”的实现方式。生产默认的 `container` 路径只提交结构化 tool payload,由 `SkillToolSet` 负责 Skill staging、workspace 创建、输入映射、runtime 执行与超时,不再由 Agent 手工创建 workspace 或启动容器命令。diff 文件通过 `inputs` 映射进入工作区,命令仅允许固定的 `python` 与仓库内脚本,避免路径拼接和 shell 注入。`local` 仅用于 dry-run/fake-model 开发验证,采用预解析脚本、argv 调用、剔除宿主 `PATH`/`PYTHONPATH` 的最小环境、超时和输出限制,并明确记录为非隔离运行;Filter 会同时检查 argv 与实际待执行脚本内容,未接入 resolver 的 `cube`、`e2b` 则转入人工复核。脚本失败或超时会写入 `sandbox_runs` 并转换为结构化 finding;主流程异常会生成 `FAILED` 任务、错误报告和 SQLite 审计记录。

数据库 schema 采用最小可查询设计,包含 `review_tasks`、`review_inputs`、`filter_decisions`、`sandbox_runs`、`findings` 和 `review_reports` 六张表,支持按 `task_id` 查询完整审查链路。报告输出同时生成 JSON 与 Markdown,两者都包含 findings 摘要、人工复核项、Filter 摘要、sandbox 摘要和监控指标。监控字段聚合总耗时、severity/category 分布、拦截次数和 sandbox 次数,便于回放和评测。

去重与降噪通过 `deduper.py` 实现:同类同文件同位置同证据的 finding 会被合并,低置信结果自动降级到 `needs_human_review` 或 `warning`。安全边界通过统一 `redactor.py` 落实,确保 API key、token、password、Bearer token 和私钥内容在报告与数据库中不出现明文。整体设计优先满足验收中的可验证性、可运行性、可审计性和 dry-run 可用性,并保持 runtime resolver、SQL 后端和模型审查器的扩展边界。
Loading
Loading