@comate/zulu 1.4.0-beta.2 → 1.4.0-beta.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/comate-engine/assets/skills/auto-commit/SKILL.md +241 -0
- package/comate-engine/assets/skills/auto-commit/references/data_structures.md +183 -0
- package/comate-engine/assets/skills/auto-commit/references/interaction_instruction.md +220 -0
- package/comate-engine/assets/skills/auto-commit/references/issue_type_mapping.json +19 -0
- package/comate-engine/assets/skills/auto-commit/references/query_reference.md +176 -0
- package/comate-engine/assets/skills/auto-commit/scripts/build_git_commit_payload.py +195 -0
- package/comate-engine/assets/skills/auto-commit/scripts/build_icafe_cards_payload.py +80 -0
- package/comate-engine/assets/skills/auto-commit/scripts/cache_manager.py +69 -0
- package/comate-engine/assets/skills/auto-commit/scripts/create_card_cli.py +67 -0
- package/comate-engine/assets/skills/auto-commit/scripts/git_diff_cli.py +201 -0
- package/comate-engine/assets/skills/auto-commit/scripts/git_utils.py +230 -0
- package/comate-engine/assets/skills/auto-commit/scripts/icafe/__init__.py +66 -0
- package/comate-engine/assets/skills/auto-commit/scripts/icafe/client.py +473 -0
- package/comate-engine/assets/skills/auto-commit/scripts/icafe/farseer.py +52 -0
- package/comate-engine/assets/skills/auto-commit/scripts/icafe/matching.py +784 -0
- package/comate-engine/assets/skills/auto-commit/scripts/logger.py +32 -0
- package/comate-engine/assets/skills/auto-commit/scripts/match_card_cli.py +41 -0
- package/comate-engine/assets/skills/auto-commit/scripts/payload_validators.py +309 -0
- package/comate-engine/assets/skills/auto-commit/scripts/recognize_card_cli.py +63 -0
- package/comate-engine/assets/skills/{automation-browser-comate → automation-browser}/SKILL.md +1 -0
- package/comate-engine/assets/skills/{cnap-comate → cnap}/SKILL.md +1 -0
- package/comate-engine/assets/skills/code-review/SKILL.md +202 -0
- package/comate-engine/assets/skills/code-review/agents/correctness-reviewer.md +62 -0
- package/comate-engine/assets/skills/code-review/agents/custom-reviewer.md +53 -0
- package/comate-engine/assets/skills/code-review/agents/meta-reviewer.md +84 -0
- package/comate-engine/assets/skills/code-review/agents/reliability-reviewer.md +72 -0
- package/comate-engine/assets/skills/code-review/agents/reuse-reviewer.md +101 -0
- package/comate-engine/assets/skills/code-review/agents/style-reviewer.md +65 -0
- package/comate-engine/assets/skills/code-review/evals/SKILL.md +334 -0
- package/comate-engine/assets/skills/code-review/evals/agents/gt-generator.md +76 -0
- package/comate-engine/assets/skills/code-review/evals/agents/miner.md +87 -0
- package/comate-engine/assets/skills/code-review/evals/agents/score-judge.md +168 -0
- package/comate-engine/assets/skills/code-review/evals/references/cli-query-template.md +114 -0
- package/comate-engine/assets/skills/code-review/evals/references/gt-schema.md +77 -0
- package/comate-engine/assets/skills/code-review/references/custom-rules/RULE_TEMPLATE.md +141 -0
- package/comate-engine/assets/skills/code-review/references/dispatch-template.md +142 -0
- package/comate-engine/assets/skills/code-review/references/output-schema.md +197 -0
- package/comate-engine/assets/skills/code-review/references/report-format.md +41 -0
- package/comate-engine/assets/skills/code-review/references/rules/Go/GO_AUTH_RULES.md +29 -0
- package/comate-engine/assets/skills/code-review/references/rules/Go/GO_CORRECTNESS_RULES.md +111 -0
- package/comate-engine/assets/skills/code-review/references/rules/Go/GO_RESOURCE_CONCURRENCY_RULES.md +190 -0
- package/comate-engine/assets/skills/code-review/references/rules/Go/GO_STYLE_RULES.md +354 -0
- package/comate-engine/assets/skills/code-review/references/rules/Java/JAVA_AUTH_RULES.md +34 -0
- package/comate-engine/assets/skills/code-review/references/rules/Java/JAVA_CORRECTNESS_RULES.md +207 -0
- package/comate-engine/assets/skills/code-review/references/rules/Java/JAVA_RESOURCE_CONCURRENCY_RULES.md +220 -0
- package/comate-engine/assets/skills/code-review/references/rules/Java/JAVA_STYLE_RULES.md +306 -0
- package/comate-engine/assets/skills/code-review/references/rules/Js/JS_AUTH_RULES.md +48 -0
- package/comate-engine/assets/skills/code-review/references/rules/Js/JS_CORRECTNESS_RULES.md +364 -0
- package/comate-engine/assets/skills/code-review/references/rules/Js/JS_RESOURCE_CONCURRENCY_RULES.md +180 -0
- package/comate-engine/assets/skills/code-review/references/rules/Js/JS_STYLE_RULES.md +350 -0
- package/comate-engine/assets/skills/code-review/references/rules/Python/PYTHON_AUTH_RULES.md +38 -0
- package/comate-engine/assets/skills/code-review/references/rules/Python/PYTHON_CORRECTNESS_RULES.md +255 -0
- package/comate-engine/assets/skills/code-review/references/rules/Python/PYTHON_RESOURCE_CONCURRENCY_RULES.md +180 -0
- package/comate-engine/assets/skills/code-review/references/rules/Python/PYTHON_STYLE_RULES.md +195 -0
- package/comate-engine/assets/skills/code-review/references/telemetry.md +27 -0
- package/comate-engine/assets/skills/{code-security-comate → code-security}/SKILL.md +1 -0
- package/comate-engine/assets/skills/{comate-docs-comate → comate-docs}/SKILL.md +1 -1
- package/comate-engine/assets/skills/create-automation-tasks-comate/SKILL.md +300 -0
- package/comate-engine/assets/skills/create-automation-tasks-comate/references/backend_dev.md +109 -0
- package/comate-engine/assets/skills/create-automation-tasks-comate/references/env_setup.md +130 -0
- package/comate-engine/assets/skills/create-automation-tasks-comate/references/frontend_dev.md +74 -0
- package/comate-engine/assets/skills/create-automation-tasks-comate/references/git_operations.md +88 -0
- package/comate-engine/assets/skills/create-automation-tasks-comate/references/long_running_task.md +96 -0
- package/comate-engine/assets/skills/create-automation-tasks-comate/references/testing_strategy.md +94 -0
- package/comate-engine/assets/skills/create-automation-tasks-comate/scripts/check_config.py +397 -0
- package/comate-engine/assets/skills/{create-rule-comate → create-rule}/SKILL.md +1 -0
- package/comate-engine/assets/skills/{create-skill-comate → create-skill}/SKILL.md +1 -1
- package/comate-engine/assets/skills/{figma2code-comate → figma2code}/SKILL.md +1 -0
- package/comate-engine/assets/skills/{icafe-comate → icafe}/SKILL.md +1 -13
- package/comate-engine/assets/skills/{icode-comate → icode}/SKILL.md +1 -0
- package/comate-engine/node_modules/@comate/plugin-shared-internals/dist/index.js +3 -3
- package/comate-engine/server.js +136 -82
- package/dist/bundle/index.js +20 -9
- package/package.json +1 -1
- /package/comate-engine/assets/skills/{cnap-comate → cnap}/references/cases.md +0 -0
- /package/comate-engine/assets/skills/{cnap-comate → cnap}/references/deploy-troubleshoot.md +0 -0
- /package/comate-engine/assets/skills/{cnap-comate → cnap}/references/install.md +0 -0
- /package/comate-engine/assets/skills/{cnap-comate → cnap}/references/kubectl.md +0 -0
- /package/comate-engine/assets/skills/{cnap-comate → cnap}/references/login.md +0 -0
- /package/comate-engine/assets/skills/{cnap-comate → cnap}/references/oncall.md +0 -0
- /package/comate-engine/assets/skills/{cnap-comate → cnap}/scripts/install_cnap_cli.sh +0 -0
- /package/comate-engine/assets/skills/{code-security-comate → code-security}/references/credential_hosting.md +0 -0
- /package/comate-engine/assets/skills/{code-security-comate → code-security}/references/vul_repair-go_sql_injection.md +0 -0
- /package/comate-engine/assets/skills/{code-security-comate → code-security}/references/vul_repair-java_sql_injection.md +0 -0
- /package/comate-engine/assets/skills/{code-security-comate → code-security}/references/vul_repair-php_sql_injection.md +0 -0
- /package/comate-engine/assets/skills/{code-security-comate → code-security}/references/vul_repair-python_sql_injection.md +0 -0
- /package/comate-engine/assets/skills/{code-security-comate → code-security}/references/vul_repair_sensitive.md +0 -0
- /package/comate-engine/assets/skills/{code-security-comate → code-security}/scripts/credential_hosting.py +0 -0
- /package/comate-engine/assets/skills/{code-security-comate → code-security}/scripts/credential_poll.py +0 -0
- /package/comate-engine/assets/skills/{code-security-comate → code-security}/scripts/http_client.py +0 -0
- /package/comate-engine/assets/skills/{code-security-comate → code-security}/scripts/parse_scan_result.py +0 -0
- /package/comate-engine/assets/skills/{code-security-comate → code-security}/scripts/repair_vulnerability.py +0 -0
- /package/comate-engine/assets/skills/{code-security-comate → code-security}/scripts/report_chat.py +0 -0
- /package/comate-engine/assets/skills/{code-security-comate → code-security}/scripts/scan_vulnerability.py +0 -0
- /package/comate-engine/assets/skills/{code-security-comate → code-security}/scripts/utils.py +0 -0
- /package/comate-engine/assets/skills/{comate-docs-comate → comate-docs}/references/doc-map-extended.md +0 -0
- /package/comate-engine/assets/skills/{comate-docs-comate → comate-docs}/references/models-and-billing.md +0 -0
- /package/comate-engine/assets/skills/{comate-docs-comate → comate-docs}/references/product-overview.md +0 -0
- /package/comate-engine/assets/skills/{create-image-comate → create-image}/SKILL.md +0 -0
- /package/comate-engine/assets/skills/{create-skill-comate → create-skill}/LICENSE.txt +0 -0
- /package/comate-engine/assets/skills/{create-skill-comate → create-skill}/agents/analyzer.md +0 -0
- /package/comate-engine/assets/skills/{create-skill-comate → create-skill}/agents/comparator.md +0 -0
- /package/comate-engine/assets/skills/{create-skill-comate → create-skill}/agents/grader.md +0 -0
- /package/comate-engine/assets/skills/{create-skill-comate → create-skill}/assets/eval_review.html +0 -0
- /package/comate-engine/assets/skills/{create-skill-comate → create-skill}/eval-viewer/generate_review.py +0 -0
- /package/comate-engine/assets/skills/{create-skill-comate → create-skill}/eval-viewer/viewer.html +0 -0
- /package/comate-engine/assets/skills/{create-skill-comate → create-skill}/references/schemas.md +0 -0
- /package/comate-engine/assets/skills/{create-skill-comate → create-skill}/scripts/__init__.py +0 -0
- /package/comate-engine/assets/skills/{create-skill-comate → create-skill}/scripts/__pycache__/__init__.cpython-311.pyc +0 -0
- /package/comate-engine/assets/skills/{create-skill-comate → create-skill}/scripts/__pycache__/aggregate_benchmark.cpython-311.pyc +0 -0
- /package/comate-engine/assets/skills/{create-skill-comate → create-skill}/scripts/aggregate_benchmark.py +0 -0
- /package/comate-engine/assets/skills/{create-skill-comate → create-skill}/scripts/generate_report.py +0 -0
- /package/comate-engine/assets/skills/{create-skill-comate → create-skill}/scripts/package_skill.py +0 -0
- /package/comate-engine/assets/skills/{create-skill-comate → create-skill}/scripts/quick_validate.py +0 -0
- /package/comate-engine/assets/skills/{create-skill-comate → create-skill}/scripts/utils.py +0 -0
- /package/comate-engine/assets/skills/{create-subagent-comate → create-subagent}/SKILL.md +0 -0
- /package/comate-engine/assets/skills/{figma2code-comate → figma2code}/references/codeConnect.md +0 -0
- /package/comate-engine/assets/skills/{figma2code-comate → figma2code}/references/designToken.md +0 -0
- /package/comate-engine/assets/skills/{figma2code-comate → figma2code}/references/image2design.md +0 -0
- /package/comate-engine/assets/skills/{find-skills-comate → find-skills}/SKILL.md +0 -0
- /package/comate-engine/assets/skills/{find-skills-comate → find-skills}/scripts/fetch_skills.py +0 -0
- /package/comate-engine/assets/skills/{find-skills-comate → find-skills}/scripts/get_download_url.py +0 -0
- /package/comate-engine/assets/skills/{find-skills-comate → find-skills}/scripts/install_skill.py +0 -0
- /package/comate-engine/assets/skills/{find-skills-comate → find-skills}/scripts/preview_skill.py +0 -0
- /package/comate-engine/assets/skills/{get-ugate-token-comate → get-ugate-token}/SKILL.md +0 -0
- /package/comate-engine/assets/skills/{get-ugate-token-comate → get-ugate-token}/getUgateToken.py +0 -0
- /package/comate-engine/assets/skills/{icafe-comate → icafe}/references/ai-workflows.md +0 -0
- /package/comate-engine/assets/skills/{icafe-comate → icafe}/references/commands.md +0 -0
- /package/comate-engine/assets/skills/{icafe-comate → icafe}/references/error-handling.md +0 -0
- /package/comate-engine/assets/skills/{icafe-comate → icafe}/references/git-auto-bindcard-workflow.md +0 -0
- /package/comate-engine/assets/skills/{icafe-comate → icafe}/references/git-bindcard-workflow.md +0 -0
- /package/comate-engine/assets/skills/{icafe-comate → icafe}/references/iql-syntax.md +0 -0
- /package/comate-engine/assets/skills/{icafe-comate → icafe}/references/platform-concepts.md +0 -0
- /package/comate-engine/assets/skills/{icafe-comate → icafe}/references/smart-create-workflow.md +0 -0
- /package/comate-engine/assets/skills/{icafe-comate → icafe}/references/smart-find-workflow.md +0 -0
- /package/comate-engine/assets/skills/{icafe-comate → icafe}/references/smart-update-workflow.md +0 -0
- /package/comate-engine/assets/skills/{icode-comate → icode}/references/api/add_reviewers.md +0 -0
- /package/comate-engine/assets/skills/{icode-comate → icode}/references/api/build_fetch_command.md +0 -0
- /package/comate-engine/assets/skills/{icode-comate → icode}/references/api/check_repo_permission.md +0 -0
- /package/comate-engine/assets/skills/{icode-comate → icode}/references/api/create_branch.md +0 -0
- /package/comate-engine/assets/skills/{icode-comate → icode}/references/api/create_draft_comment.md +0 -0
- /package/comate-engine/assets/skills/{icode-comate → icode}/references/api/get_ai_cr_result.md +0 -0
- /package/comate-engine/assets/skills/{icode-comate → icode}/references/api/get_ai_review.md +0 -0
- /package/comate-engine/assets/skills/{icode-comate → icode}/references/api/get_diff_content.md +0 -0
- /package/comate-engine/assets/skills/{icode-comate → icode}/references/api/get_diff_file.md +0 -0
- /package/comate-engine/assets/skills/{icode-comate → icode}/references/api/get_machine_check.md +0 -0
- /package/comate-engine/assets/skills/{icode-comate → icode}/references/api/get_my_reviews.md +0 -0
- /package/comate-engine/assets/skills/{icode-comate → icode}/references/api/get_person_commit.md +0 -0
- /package/comate-engine/assets/skills/{icode-comate → icode}/references/api/get_person_repo.md +0 -0
- /package/comate-engine/assets/skills/{icode-comate → icode}/references/api/get_repo_branch.md +0 -0
- /package/comate-engine/assets/skills/{icode-comate → icode}/references/api/get_repo_config.md +0 -0
- /package/comate-engine/assets/skills/{icode-comate → icode}/references/api/get_repo_members.md +0 -0
- /package/comate-engine/assets/skills/{icode-comate → icode}/references/api/get_repo_reviews.md +0 -0
- /package/comate-engine/assets/skills/{icode-comate → icode}/references/api/get_review_comments.md +0 -0
- /package/comate-engine/assets/skills/{icode-comate → icode}/references/api/get_review_info.md +0 -0
- /package/comate-engine/assets/skills/{icode-comate → icode}/references/api/get_submit_settings.md +0 -0
- /package/comate-engine/assets/skills/{icode-comate → icode}/references/api/icode-api.md +0 -0
- /package/comate-engine/assets/skills/{icode-comate → icode}/references/api/publish_comments.md +0 -0
- /package/comate-engine/assets/skills/{icode-comate → icode}/references/api/set_review_score.md +0 -0
- /package/comate-engine/assets/skills/{icode-comate → icode}/references/api/start_ai_review.md +0 -0
- /package/comate-engine/assets/skills/{icode-comate → icode}/references/api/submit_review.md +0 -0
- /package/comate-engine/assets/skills/{icode-comate → icode}/references/api/trigger_ai_cr.md +0 -0
- /package/comate-engine/assets/skills/{icode-comate → icode}/references/feature/add-reviewer.md +0 -0
- /package/comate-engine/assets/skills/{icode-comate → icode}/references/feature/fix-machine-check.md +0 -0
- /package/comate-engine/assets/skills/{icode-comate → icode}/references/feature/merge-cr.md +0 -0
- /package/comate-engine/assets/skills/{icode-comate → icode}/references/feature/ssh-setup.md +0 -0
- /package/comate-engine/assets/skills/{icode-comate → icode}/references/feature/submit-acr.md +0 -0
- /package/comate-engine/assets/skills/{icode-comate → icode}/references/feature/submit-cr.md +0 -0
- /package/comate-engine/assets/skills/{icode-comate → icode}/references/git/clone.md +0 -0
- /package/comate-engine/assets/skills/{icode-comate → icode}/references/git/icode-git.md +0 -0
- /package/comate-engine/assets/skills/{icode-comate → icode}/references/git/push.md +0 -0
- /package/comate-engine/assets/skills/{icode-comate → icode}/references/git/push_cr.md +0 -0
- /package/comate-engine/assets/skills/{icode-comate → icode}/references/install.md +0 -0
- /package/comate-engine/assets/skills/{icode-comate → icode}/references/login.md +0 -0
- /package/comate-engine/assets/skills/{icode-comate → icode}/scripts/add-reviewer.sh +0 -0
- /package/comate-engine/assets/skills/{icode-comate → icode}/scripts/common.sh +0 -0
- /package/comate-engine/assets/skills/{icode-comate → icode}/scripts/fix-machine-check.sh +0 -0
- /package/comate-engine/assets/skills/{icode-comate → icode}/scripts/merge-cr.sh +0 -0
- /package/comate-engine/assets/skills/{icode-comate → icode}/scripts/ssh-setup.sh +0 -0
- /package/comate-engine/assets/skills/{icode-comate → icode}/scripts/submit-acr.sh +0 -0
- /package/comate-engine/assets/skills/{icode-comate → icode}/scripts/submit-cr.sh +0 -0
- /package/comate-engine/assets/skills/{icode-comate → icode}/scripts/test-preflight.sh +0 -0
- /package/comate-engine/assets/skills/{ku-operator-comate → ku-operator}/SKILL.md +0 -0
- /package/comate-engine/assets/skills/{ku-operator-comate → ku-operator}/examples.md +0 -0
- /package/comate-engine/assets/skills/{ku-operator-comate → ku-operator}/references/add_member.md +0 -0
- /package/comate-engine/assets/skills/{ku-operator-comate → ku-operator}/references/change_scope.md +0 -0
- /package/comate-engine/assets/skills/{ku-operator-comate → ku-operator}/references/copy_doc.md +0 -0
- /package/comate-engine/assets/skills/{ku-operator-comate → ku-operator}/references/create_doc.md +0 -0
- /package/comate-engine/assets/skills/{ku-operator-comate → ku-operator}/references/delete_doc.md +0 -0
- /package/comate-engine/assets/skills/{ku-operator-comate → ku-operator}/references/edit_content.md +0 -0
- /package/comate-engine/assets/skills/{ku-operator-comate → ku-operator}/references/move_doc.md +0 -0
- /package/comate-engine/assets/skills/{ku-operator-comate → ku-operator}/references/query_comment.md +0 -0
- /package/comate-engine/assets/skills/{ku-operator-comate → ku-operator}/references/query_content.md +0 -0
- /package/comate-engine/assets/skills/{ku-operator-comate → ku-operator}/references/query_flowchart.md +0 -0
- /package/comate-engine/assets/skills/{ku-operator-comate → ku-operator}/references/query_permission.md +0 -0
- /package/comate-engine/assets/skills/{ku-operator-comate → ku-operator}/references/query_recent_view.md +0 -0
- /package/comate-engine/assets/skills/{ku-operator-comate → ku-operator}/references/query_repo.md +0 -0
- /package/comate-engine/assets/skills/{ku-operator-comate → ku-operator}/references/query_user_info.md +0 -0
- /package/comate-engine/assets/skills/{ku-operator-comate → ku-operator}/references/update_member.md +0 -0
- /package/comate-engine/assets/skills/{ku-operator-comate → ku-operator}/references/upload_attachment.md +0 -0
- /package/comate-engine/assets/skills/{ku-operator-comate → ku-operator}/scripts/ku_operator.py +0 -0
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
# CLI Query Template (Full Mode)
|
|
2
|
+
|
|
3
|
+
Full mode 下,每个样本通过独立的 CLI 进程运行完整 code-review skill。本文件定义 CLI 命令模板和 query 模板。
|
|
4
|
+
|
|
5
|
+
## CLI 命令模板
|
|
6
|
+
|
|
7
|
+
### zulu
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
zulu run \
|
|
11
|
+
-l "{LICENSE}" \
|
|
12
|
+
--activate-skill code-review \
|
|
13
|
+
--cwd "{REPO}" \
|
|
14
|
+
--display task \
|
|
15
|
+
-q "{QUERY}"
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
### baidu-cc
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
baidu-cc \
|
|
22
|
+
-p "{QUERY}" \
|
|
23
|
+
--allowedTools "Bash,Read,Write,Edit,Glob,Grep,Agent" \
|
|
24
|
+
--cwd "{REPO}"
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
> `baidu-cc` 走内部认证,不需要 license。`--allowedTools` 确保 CLI 进程拥有完整工具集以支持多 Agent pipeline。
|
|
28
|
+
|
|
29
|
+
## Query 模板
|
|
30
|
+
|
|
31
|
+
以下 query 用于每个 CLI 进程的 `-q` / `-p` 参数:
|
|
32
|
+
|
|
33
|
+
```
|
|
34
|
+
请审查以下代码变更。
|
|
35
|
+
|
|
36
|
+
## 范围(已确定,跳过 Step 1)
|
|
37
|
+
|
|
38
|
+
执行以下命令获取待审 diff:
|
|
39
|
+
git diff {DIFF_BASE} {DIFF_TARGET} -- {SOURCE_FILES}
|
|
40
|
+
|
|
41
|
+
注意:范围已确定,不需要执行 Step 1 的范围检测逻辑。直接使用上述 diff 命令获取变更内容。
|
|
42
|
+
|
|
43
|
+
## 约束
|
|
44
|
+
|
|
45
|
+
- 跳过 Step 1(范围检测):审查范围已由上述 diff 命令确定
|
|
46
|
+
- 跳过 Step 8(用户交互):不要调用 ask_user_question,完成审查报告后直接结束
|
|
47
|
+
- 输出格式严格按照 Step 6 的报告格式
|
|
48
|
+
|
|
49
|
+
## 审查要求
|
|
50
|
+
|
|
51
|
+
- 不要预设代码中存在 bug。diff 可能是 bug 修复、功能新增、重构或其他任何类型的变更
|
|
52
|
+
- 从正确性、可靠性、风格、复用四个维度进行审查
|
|
53
|
+
- 如果代码实现正确且合理,直接说"审查通过",不要硬凑问题
|
|
54
|
+
- 如果发现问题,按严重等级(P0-P3)分类输出
|
|
55
|
+
|
|
56
|
+
请从 Step 2 开始执行审查流程。
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
## 占位符说明
|
|
60
|
+
|
|
61
|
+
| 占位符 | 来源 | 说明 |
|
|
62
|
+
|--------|------|------|
|
|
63
|
+
| `{REPO}` | 参数 `repo` | 目标 git 仓库绝对路径 |
|
|
64
|
+
| `{LICENSE}` | 参数 `license` | zulu SaaS license key,仅 `cli=zulu` 时需要 |
|
|
65
|
+
| `{DIFF_BASE}` | 根据样本类型决定 | bug-fix 样本:`commit`(反转方向);clean 样本:`parent_commit`(正常方向) |
|
|
66
|
+
| `{DIFF_TARGET}` | 根据样本类型决定 | bug-fix 样本:`parent_commit`(反转方向);clean 样本:`commit`(正常方向) |
|
|
67
|
+
| `{SOURCE_FILES}` | `candidates.json` 中的 `source_files` | 空格分隔的源码文件路径列表 |
|
|
68
|
+
| `{QUERY}` | 上方 Query 模板填充后的完整文本 | CLI 的 prompt 参数 |
|
|
69
|
+
|
|
70
|
+
### Diff 方向规则
|
|
71
|
+
|
|
72
|
+
| 样本类型 | diff 命令 | 含义 |
|
|
73
|
+
|----------|-----------|------|
|
|
74
|
+
| bug-fix | `git diff {COMMIT} {PARENT_COMMIT} -- {FILES}` | 反转 diff:修复后 → 修复前,模拟"引入 bug 的变更" |
|
|
75
|
+
| clean | `git diff {PARENT_COMMIT} {COMMIT} -- {FILES}` | 正常 diff:修改前 → 修改后,"引入新功能的变更" |
|
|
76
|
+
|
|
77
|
+
## 设计说明
|
|
78
|
+
|
|
79
|
+
### 为什么跳过 Step 1
|
|
80
|
+
|
|
81
|
+
生产环境中 Step 1 通过 `git status` 探测工作区变更来确定审查范围。但 eval 场景下 diff 来自历史 commit 而非工作区,Step 1 的探测逻辑会走到错误分支。因此直接提供 diff 命令,跳过范围检测。
|
|
82
|
+
|
|
83
|
+
### 为什么跳过 Step 8
|
|
84
|
+
|
|
85
|
+
Step 8 调用 `ask_user_question` 等待用户选择修复方案。eval 需要全自动运行数十个样本,不能每个都停下来等人交互。
|
|
86
|
+
|
|
87
|
+
### 为什么反转 bug-fix diff
|
|
88
|
+
|
|
89
|
+
真实的 code review 场景是审查"有人提交了一段新代码"。如果直接用 bug-fix commit 的 diff(修复前 → 修复后),skill 看到的是"有人在修 bug",会合理地认为"修复正确,审查通过"。反转后,skill 看到的是"有人提交了引入 bug 的代码",这才是测试 bug 检测能力的正确方式。Clean 样本本身就是"引入新功能",不需要反转。
|
|
90
|
+
|
|
91
|
+
### 信息对称
|
|
92
|
+
|
|
93
|
+
Query 中**不包含** commit subject 和样本类型(bug-fix / clean),确保 skill 和 GT 生成器在相同信息条件下运行。
|
|
94
|
+
|
|
95
|
+
## Shell 并发控制模板
|
|
96
|
+
|
|
97
|
+
主 Agent 根据 `candidates.json` 生成完整脚本。以下是并发控制的关键模式:
|
|
98
|
+
|
|
99
|
+
```bash
|
|
100
|
+
MAX_PARALLEL=5
|
|
101
|
+
RUNNING=0
|
|
102
|
+
|
|
103
|
+
for ARGS in "${SAMPLES[@]}"; do
|
|
104
|
+
run_review $ARGS &
|
|
105
|
+
RUNNING=$((RUNNING + 1))
|
|
106
|
+
if [ "$RUNNING" -ge "$MAX_PARALLEL" ]; then
|
|
107
|
+
wait -n 2>/dev/null || wait # bash 4.3+ 支持 wait -n,低版本回退到 wait 全部
|
|
108
|
+
RUNNING=$((RUNNING - 1))
|
|
109
|
+
fi
|
|
110
|
+
done
|
|
111
|
+
wait
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
> `wait -n` 在 bash 4.3+ 可用,等待任一后台进程完成。低版本 bash 可用 `wait` 等待全部完成后再启动下一批。
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
# Semantic Ground Truth Schema
|
|
2
|
+
|
|
3
|
+
每个被评估的样本对应一个 JSON 文件,存放在 `semantic_gt/` 目录下。
|
|
4
|
+
|
|
5
|
+
## 文件命名
|
|
6
|
+
|
|
7
|
+
`<sample_id>.json`,例如 `sample-0001.json`(bug-fix 样本)或 `clean-0001.json`(clean 样本)
|
|
8
|
+
|
|
9
|
+
## Schema
|
|
10
|
+
|
|
11
|
+
### 有 findings 的样本
|
|
12
|
+
|
|
13
|
+
GT 生成器从 diff 中独立判断新引入代码存在问题时产出:
|
|
14
|
+
|
|
15
|
+
```json
|
|
16
|
+
{
|
|
17
|
+
"sample_id": "sample-0001",
|
|
18
|
+
"findings": [
|
|
19
|
+
{
|
|
20
|
+
"file": "packages/webview/src/components/Chat.tsx",
|
|
21
|
+
"line_range": [754, 765],
|
|
22
|
+
"dimension": "correctness",
|
|
23
|
+
"severity": "P1",
|
|
24
|
+
"description": "新引入的 hasAcceptedPath 是模块级单值变量,多文件采纳时只有最后一个被保护",
|
|
25
|
+
"root_cause": "变量被设计为单值字符串而非 Set,导致跨文件的采纳操作互相覆盖",
|
|
26
|
+
"expected_review": "新增的 hasAcceptedPath 守卫仅保护单一路径,多文件场景下后续采纳会覆盖先前状态;应改为 Set 或使用 Map 追踪所有已采纳路径"
|
|
27
|
+
}
|
|
28
|
+
]
|
|
29
|
+
}
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
### 无 findings 的样本
|
|
33
|
+
|
|
34
|
+
GT 生成器从 diff 中独立判断新引入代码无明显问题时产出:
|
|
35
|
+
|
|
36
|
+
```json
|
|
37
|
+
{
|
|
38
|
+
"sample_id": "clean-0001",
|
|
39
|
+
"findings": []
|
|
40
|
+
}
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
**注意**:GT 生成器不知道样本的真实类型(bug-fix 或 clean)。因此:
|
|
44
|
+
- bug-fix 样本的 GT **通常**有 findings(反转 diff 中新增的 `+` 行就是有 bug 的代码),但如果 bug 非常隐蔽、仅从 diff 看不出来,GT 也可能为空
|
|
45
|
+
- clean 样本的 GT **通常**为空,但如果 GT 生成器从 diff 中发现了新引入代码的真实问题,也可能有 findings
|
|
46
|
+
|
|
47
|
+
这是信息对称设计的核心:GT 的质量反映的是"仅从 diff 能看出多少问题",和 skill 的评判条件完全一致。
|
|
48
|
+
|
|
49
|
+
## 字段说明
|
|
50
|
+
|
|
51
|
+
### 顶层字段
|
|
52
|
+
|
|
53
|
+
| 字段 | 类型 | 必填 | 说明 |
|
|
54
|
+
|------|------|------|------|
|
|
55
|
+
| `sample_id` | string | 是 | 样本 ID,与 candidates.json 中的 id 一致 |
|
|
56
|
+
| `findings` | array | 是 | findings 数组,有问题时至少一条,无问题时为空数组 `[]` |
|
|
57
|
+
|
|
58
|
+
### Finding 字段
|
|
59
|
+
|
|
60
|
+
| 字段 | 类型 | 必填 | 说明 |
|
|
61
|
+
|------|------|------|------|
|
|
62
|
+
| `findings[].file` | string | 是 | 相对于仓库根目录的文件路径 |
|
|
63
|
+
| `findings[].line_range` | [int, int] | 是 | 问题所在的代码区域 |
|
|
64
|
+
| `findings[].dimension` | string | 是 | `correctness` / `reliability` / `style` / `reuse`,与主 skill 的四个审查维度对齐 |
|
|
65
|
+
| `findings[].severity` | string | 是 | `P0` / `P1` / `P2` / `P3` |
|
|
66
|
+
| `findings[].description` | string | 是 | 描述**新引入的代码**存在什么问题(diff 中 `+` 行的缺陷) |
|
|
67
|
+
| `findings[].root_cause` | string | 是 | 为什么存在这个问题(深层原因) |
|
|
68
|
+
| `findings[].expected_review` | string | 是 | 一个优秀 reviewer 看到这个 diff 时应该指出什么(判分关键锚点) |
|
|
69
|
+
|
|
70
|
+
## 核心原则
|
|
71
|
+
|
|
72
|
+
- **描述新引入代码的问题**:`description` 说"新引入的代码什么地方有问题"(diff 中 `+` 行的缺陷)
|
|
73
|
+
- **expected_review 是判分锚点**:它描述 reviewer 看到这个 diff 时应该说什么,和 skill 的输出最直接可比
|
|
74
|
+
- **一个问题 = 一条 finding**:不要按 diff hunk 展开,按逻辑问题聚合
|
|
75
|
+
- **severity 反映问题严重度**:不是修复的重要性
|
|
76
|
+
- **信息对称**:GT 生成器和 code-review skill 只能看到 diff,不能利用 commit subject、样本类型等额外信息
|
|
77
|
+
- **独立判断**:GT 生成器不知道样本是 bug-fix 还是 clean,必须完全依赖 diff 内容判断
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
# 自定义规则模板
|
|
2
|
+
|
|
3
|
+
> **使用说明**
|
|
4
|
+
>
|
|
5
|
+
> 1. 复制此文件,重命名为你的规则集名称(如 `MY_PROJECT_RULES.md`、`TEAM_API_RULES.md`)
|
|
6
|
+
> 2. 按照下方格式填写规则内容
|
|
7
|
+
> 3. 将文件放在同一目录(`custom-rules/`)下,审查时会自动加载
|
|
8
|
+
> 4. 本文件(`RULE_TEMPLATE.md`)本身不会被加载为规则
|
|
9
|
+
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
## 文件头(必填)
|
|
13
|
+
|
|
14
|
+
```yaml
|
|
15
|
+
# 规则集名称(必填)
|
|
16
|
+
title: 我的项目规则
|
|
17
|
+
|
|
18
|
+
# 规则集描述(选填)
|
|
19
|
+
description: 针对 XX 项目的业务规范和技术约束
|
|
20
|
+
|
|
21
|
+
# 适用语言(选填)。留空 = 适用所有语言
|
|
22
|
+
# 可选值: js, ts, go, java, python,逗号分隔
|
|
23
|
+
applies_to: js, ts
|
|
24
|
+
|
|
25
|
+
# 适用路径(选填)。只扫描匹配路径下的文件,支持通配符
|
|
26
|
+
# 留空 = 不限制路径
|
|
27
|
+
applies_to_path: src/api/**, src/service/**
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
---
|
|
31
|
+
|
|
32
|
+
## 规则格式说明
|
|
33
|
+
|
|
34
|
+
每条规则包含以下字段:
|
|
35
|
+
|
|
36
|
+
| 字段 | 必填 | 说明 |
|
|
37
|
+
|------|------|------|
|
|
38
|
+
| 规则 ID | 是 | 格式建议:`前缀_序号`,如 `PROJ_01` |
|
|
39
|
+
| 规则名称 | 是 | 简短描述,建议 10 字以内 |
|
|
40
|
+
| 等级标记 | 是 | `[Critical]` / `[high]` / `[middle]` / `[low]` |
|
|
41
|
+
| `category` | 否 | 问题分类标识,用于输出的 category 字段;留空则为 `custom-rule` |
|
|
42
|
+
| `检测` | 是 | 描述触发此规则的代码模式,越具体越好 |
|
|
43
|
+
| `排除` | 推荐 | 满足哪些条件时不报告此问题 |
|
|
44
|
+
| `复核` | 选填 | 上报前必须额外确认的条件,避免误报 |
|
|
45
|
+
| 代码示例 | 推荐 | 反例(错误写法)和正例(正确写法) |
|
|
46
|
+
|
|
47
|
+
---
|
|
48
|
+
|
|
49
|
+
## 规则示例
|
|
50
|
+
|
|
51
|
+
以下是几条示范规则,覆盖不同等级和场景,请参照格式编写你自己的规则。
|
|
52
|
+
|
|
53
|
+
---
|
|
54
|
+
|
|
55
|
+
### EXAMPLE_01. 禁止直接操作 DOM 绑定事件 [high]
|
|
56
|
+
- **category**: `framework-misuse`
|
|
57
|
+
- **检测**:在 Vue/React 组件中使用 `document.addEventListener` 或 `element.addEventListener` 绑定事件,而非框架提供的事件机制
|
|
58
|
+
- **排除**:第三方库初始化必须手动绑定;在 `componentWillUnmount` / `onUnmounted` 中已有对应的 `removeEventListener`
|
|
59
|
+
- **复核**:确认组件卸载时未清理事件监听,会导致内存泄漏
|
|
60
|
+
|
|
61
|
+
```javascript
|
|
62
|
+
// 反例 — 未清理的 DOM 事件
|
|
63
|
+
mounted() {
|
|
64
|
+
document.addEventListener('keydown', this.handleKey)
|
|
65
|
+
// 忘记在 beforeUnmount 中移除
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
// 正例 — 使用框架事件机制
|
|
69
|
+
// <template><div @keydown="handleKey"></div></template>
|
|
70
|
+
|
|
71
|
+
// 正例 — 如必须手动绑定,记得清理
|
|
72
|
+
mounted() { document.addEventListener('keydown', this.handleKey) }
|
|
73
|
+
beforeUnmount() { document.removeEventListener('keydown', this.handleKey) }
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
---
|
|
77
|
+
|
|
78
|
+
### EXAMPLE_02. API 接口必须校验返回的分页参数 [middle]
|
|
79
|
+
- **category**: `boundary-condition`
|
|
80
|
+
- **检测**:调用分页接口后直接使用 `data.list` 进行渲染,未检查 `data.total` 或 `data.hasMore` 是否存在
|
|
81
|
+
- **排除**:接口明确文档标注 `list` 永不为 null;接口已有统一的响应拦截器处理
|
|
82
|
+
|
|
83
|
+
```javascript
|
|
84
|
+
// 反例
|
|
85
|
+
const { list } = await fetchPagedData({ page: 1 })
|
|
86
|
+
this.items = list // list 为 null 时直接崩溃
|
|
87
|
+
|
|
88
|
+
// 正例
|
|
89
|
+
const { list = [], total = 0 } = await fetchPagedData({ page: 1 })
|
|
90
|
+
this.items = list
|
|
91
|
+
this.total = total
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
---
|
|
95
|
+
|
|
96
|
+
### EXAMPLE_03. 禁止在生产代码中使用 console.log [low]
|
|
97
|
+
- **category**: `code-style`
|
|
98
|
+
- **检测**:非测试文件中出现 `console.log(` 调用
|
|
99
|
+
- **排除**:文件路径包含 `test`、`spec`、`__tests__`;注释标注了 `// dev-only`;文件是独立的调试工具脚本
|
|
100
|
+
|
|
101
|
+
---
|
|
102
|
+
|
|
103
|
+
### EXAMPLE_04. 用户输入必须通过 sanitize 函数处理 [Critical]
|
|
104
|
+
- **category**: `reliability`
|
|
105
|
+
- **检测**:将 `req.body`、`req.query`、`req.params` 中的字段直接拼入 SQL 查询字符串,或直接赋值给 `innerHTML`
|
|
106
|
+
- **排除**:已通过 ORM 参数化查询;已通过 `DOMPurify.sanitize()` 或同等函数处理
|
|
107
|
+
- **复核**:确认数据来源是用户可控的外部输入;确认目标是 SQL 或 HTML 上下文
|
|
108
|
+
|
|
109
|
+
```javascript
|
|
110
|
+
// 反例 — SQL 注入风险
|
|
111
|
+
const sql = `SELECT * FROM users WHERE name = '${req.query.name}'`
|
|
112
|
+
|
|
113
|
+
// 反例 — XSS 风险
|
|
114
|
+
element.innerHTML = req.body.content
|
|
115
|
+
|
|
116
|
+
// 正例
|
|
117
|
+
const sql = 'SELECT * FROM users WHERE name = ?'
|
|
118
|
+
db.query(sql, [req.query.name])
|
|
119
|
+
|
|
120
|
+
// 正例
|
|
121
|
+
element.innerHTML = DOMPurify.sanitize(req.body.content)
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
---
|
|
125
|
+
|
|
126
|
+
## 规则编写技巧
|
|
127
|
+
|
|
128
|
+
**写好「检测」的关键**:
|
|
129
|
+
- 描述具体的代码模式,而非抽象原则。"在 `if` 条件中使用 `=`" 比 "避免赋值运算符" 更好
|
|
130
|
+
- 如果依赖上下文(如"在循环内"、"未 await"),明确说明上下文范围
|
|
131
|
+
- 可以引用具体的函数名、API 名、字段名
|
|
132
|
+
|
|
133
|
+
**写好「排除」的关键**:
|
|
134
|
+
- 想清楚哪些情况下这个模式是合理的
|
|
135
|
+
- 排除条件越明确,误报越少
|
|
136
|
+
|
|
137
|
+
**等级选择参考**:
|
|
138
|
+
- `[Critical]`:必报、Meta-Review 不得降级,用于安全漏洞、数据损坏等
|
|
139
|
+
- `[high]`:高概率有实际影响的问题
|
|
140
|
+
- `[middle]`:影响可维护性或稳定性,但不紧急
|
|
141
|
+
- `[low]`:纯规范/偏好类,可忽略
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
# SubAgent 调度模板
|
|
2
|
+
|
|
3
|
+
本文件定义主 Agent 构建 SubAgent query 的标准模板。主 Agent 只需按模板填入路径和 diff 命令,**不预读** agents/*.md 或 references/*.md 的内容。
|
|
4
|
+
|
|
5
|
+
## Query 构建模板
|
|
6
|
+
|
|
7
|
+
```
|
|
8
|
+
你是代码审查专家,负责【维度名称】审查。
|
|
9
|
+
|
|
10
|
+
1. 读取审查指令:<skill绝对路径>/agents/<维度>-reviewer.md
|
|
11
|
+
2. 读取输出格式:<skill绝对路径>/references/output-schema.md
|
|
12
|
+
3. 执行以下命令获取待审变更:
|
|
13
|
+
<git diff 命令>
|
|
14
|
+
4. 根据审查指令完成审查,使用 read_file 读取变更文件上下文(±30 行),用 grep_content/codebase_search 搜索调用链和已有实现
|
|
15
|
+
5. 严格按输出格式返回 JSON。未发现问题时返回空 findings 数组
|
|
16
|
+
|
|
17
|
+
补充上下文:<与本次变更相关的业务规则摘要(如有,1-2 句话;无则省略此行)>
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
> **关键原则**:主 Agent 不预读 agents/*.md 和 references/*.md 的内容再注入 query。只需告知路径,SubAgent 有 read_file 能力,会自行加载。这大幅减少主 Agent 的准备工作和输出 token。
|
|
21
|
+
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
## 常规审查模式
|
|
25
|
+
|
|
26
|
+
发起一个 `delegate_subtask` 调用:
|
|
27
|
+
|
|
28
|
+
```
|
|
29
|
+
delegate_subtask(
|
|
30
|
+
agent_type="Explore",
|
|
31
|
+
description="Code review - 综合审查",
|
|
32
|
+
query="""
|
|
33
|
+
你是代码审查专家,负责对当前变更进行综合审查(正确性、可靠性、风格、复用)。
|
|
34
|
+
|
|
35
|
+
1. 依次读取以下指令文件,理解各维度的审查要点:
|
|
36
|
+
- {SKILL_DIR}/agents/correctness-reviewer.md
|
|
37
|
+
- {SKILL_DIR}/agents/reliability-reviewer.md
|
|
38
|
+
- {SKILL_DIR}/agents/style-reviewer.md
|
|
39
|
+
- {SKILL_DIR}/agents/reuse-reviewer.md
|
|
40
|
+
2. 读取输出格式:{SKILL_DIR}/references/output-schema.md
|
|
41
|
+
3. 执行命令获取变更:{git diff 命令}
|
|
42
|
+
4. 从各维度中各关注最核心的 2-3 个检查点完成审查
|
|
43
|
+
5. 仅输出有证据的问题,不报纯风格偏好。未发现问题返回空 findings
|
|
44
|
+
|
|
45
|
+
{业务规则摘要(如有)}
|
|
46
|
+
"""
|
|
47
|
+
)
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
**若 `HAS_CUSTOM_RULES = true`**,在同一轮响应中**并行**追加一个 custom-reviewer 调用:
|
|
51
|
+
|
|
52
|
+
```
|
|
53
|
+
delegate_subtask(
|
|
54
|
+
agent_type="Explore",
|
|
55
|
+
description="Code review - 自定义规则扫描",
|
|
56
|
+
query="你是自定义规则扫描专家。\n1. 读取审查指令:{SKILL_DIR}/agents/custom-reviewer.md\n2. 读取输出格式:{SKILL_DIR}/references/output-schema.md\n3. 执行:{git diff 命令}\n4. 完成审查并返回 JSON"
|
|
57
|
+
)
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
---
|
|
61
|
+
|
|
62
|
+
## 深度审查模式
|
|
63
|
+
|
|
64
|
+
在**同一轮响应**中,并行发起 4 个 `delegate_subtask`。主 Agent **不需要预读**任何 agents/*.md 或 references/*.md 文件,直接按模板构建 query:
|
|
65
|
+
|
|
66
|
+
```
|
|
67
|
+
1. delegate_subtask(
|
|
68
|
+
agent_type="Explore",
|
|
69
|
+
description="Code review - 复用审查",
|
|
70
|
+
query="你是代码审查专家,负责复用审查。\n1. 读取审查指令:{SKILL_DIR}/agents/reuse-reviewer.md\n2. 读取输出格式:{SKILL_DIR}/references/output-schema.md\n3. 执行:{git diff 命令}\n4. 完成审查并返回 JSON\n{业务规则摘要}"
|
|
71
|
+
)
|
|
72
|
+
|
|
73
|
+
2. delegate_subtask(
|
|
74
|
+
agent_type="Explore",
|
|
75
|
+
description="Code review - 风格审查",
|
|
76
|
+
query="你是代码审查专家,负责风格审查。\n1. 读取审查指令:{SKILL_DIR}/agents/style-reviewer.md\n2. 读取输出格式:{SKILL_DIR}/references/output-schema.md\n3. 执行:{git diff 命令}\n4. 完成审查并返回 JSON\n{业务规则摘要}"
|
|
77
|
+
)
|
|
78
|
+
|
|
79
|
+
3. delegate_subtask(
|
|
80
|
+
agent_type="Explore",
|
|
81
|
+
description="Code review - 可靠性审查",
|
|
82
|
+
query="你是代码审查专家,负责可靠性审查(资源管理、并发安全、接口鉴权)。\n1. 读取审查指令:{SKILL_DIR}/agents/reliability-reviewer.md\n2. 读取输出格式:{SKILL_DIR}/references/output-schema.md\n3. 执行:{git diff 命令}\n4. 完成审查并返回 JSON\n{业务规则摘要}"
|
|
83
|
+
)
|
|
84
|
+
|
|
85
|
+
4. delegate_subtask(
|
|
86
|
+
agent_type="Explore",
|
|
87
|
+
description="Code review - 正确性审查",
|
|
88
|
+
query="你是代码审查专家,负责正确性审查。\n1. 读取审查指令:{SKILL_DIR}/agents/correctness-reviewer.md\n2. 读取输出格式:{SKILL_DIR}/references/output-schema.md\n3. 执行:{git diff 命令}\n4. 完成审查并返回 JSON\n{业务规则摘要}"
|
|
89
|
+
)
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
**若 `HAS_CUSTOM_RULES = true`**,在上述 4 个调用的**同一轮响应**中追加第 5 个:
|
|
93
|
+
|
|
94
|
+
```
|
|
95
|
+
5. delegate_subtask(
|
|
96
|
+
agent_type="Explore",
|
|
97
|
+
description="Code review - 自定义规则扫描",
|
|
98
|
+
query="你是自定义规则扫描专家。\n1. 读取审查指令:{SKILL_DIR}/agents/custom-reviewer.md\n2. 读取输出格式:{SKILL_DIR}/references/output-schema.md\n3. 执行:{git diff 命令}\n4. 完成审查并返回 JSON"
|
|
99
|
+
)
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
> `HAS_CUSTOM_RULES = false` 时不发起此调用,保持原有 4 个 SubAgent 并行。
|
|
103
|
+
|
|
104
|
+
---
|
|
105
|
+
|
|
106
|
+
## Meta-Review 调用
|
|
107
|
+
|
|
108
|
+
当深度审查至少成功返回 2 个维度结果时,发起 Meta-Review:
|
|
109
|
+
|
|
110
|
+
```
|
|
111
|
+
delegate_subtask(
|
|
112
|
+
agent_type="Explore",
|
|
113
|
+
description="Code review - Meta Review",
|
|
114
|
+
query="""
|
|
115
|
+
你是 Meta-Reviewer,负责审查其他 Agent 的 review 结果质量。
|
|
116
|
+
|
|
117
|
+
1. 读取审查指令:{SKILL_DIR}/agents/meta-reviewer.md
|
|
118
|
+
2. 读取输出格式:{SKILL_DIR}/references/output-schema.md(Meta-Reviewer 输出格式部分)
|
|
119
|
+
3. 执行:{git diff 命令}(用于验证 findings 的准确性)
|
|
120
|
+
4. 以下是待审的 findings JSON:
|
|
121
|
+
|
|
122
|
+
{所有 SubAgent 返回的 findings JSON}
|
|
123
|
+
|
|
124
|
+
按指令完成 Meta-Review,返回 actions 和 missed_findings。
|
|
125
|
+
"""
|
|
126
|
+
)
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
> 注意:Meta-Review 的 query 中**必须包含已有的 findings 结果(JSON)**,因为 Meta-Reviewer 需要这些内容来判断质量。这是唯一需要在 query 中传递较多内容的 SubAgent 调用。
|
|
130
|
+
|
|
131
|
+
---
|
|
132
|
+
|
|
133
|
+
## 超大变更处理
|
|
134
|
+
|
|
135
|
+
超大变更时,主 Agent 可按文件组拆分给不同 subagent(如只给复用审查传新增文件、只给正确性审查传高风险文件)。
|
|
136
|
+
|
|
137
|
+
## 失败回退
|
|
138
|
+
|
|
139
|
+
- 某个 `delegate_subtask` 失败或超时:继续合并剩余结果,报告中注明"部分维度降级"
|
|
140
|
+
- 两个及以上失败:回退为单个综合审查(常规审查模式)
|
|
141
|
+
- `delegate_subtask` 工具不可用:主 Agent 直接执行审查,报告中注明"降级为单 Agent 审查"
|
|
142
|
+
- 上下文过大:缩小到高风险文件,必要时拆批执行
|
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
# SubAgent 输出格式规范
|
|
2
|
+
|
|
3
|
+
所有 Review SubAgent 必须按以下 JSON 格式输出审查结果,以便主控 Agent 进行合并和去重。
|
|
4
|
+
|
|
5
|
+
## JSON Schema
|
|
6
|
+
|
|
7
|
+
```json
|
|
8
|
+
{
|
|
9
|
+
"reviewer": "reuse | style | correctness | reliability | custom",
|
|
10
|
+
"summary": "本维度的整体评估,1-2 句话",
|
|
11
|
+
"findings": [
|
|
12
|
+
{
|
|
13
|
+
"id": "R001",
|
|
14
|
+
"severity": "P0 | P1 | P2 | P3",
|
|
15
|
+
"category": "分类标识",
|
|
16
|
+
"file": "相对路径/文件名",
|
|
17
|
+
"line": 42,
|
|
18
|
+
"endLine": 50,
|
|
19
|
+
"title": "简短标题(10字以内)",
|
|
20
|
+
"description": "问题的详细描述,说明为什么这是个问题",
|
|
21
|
+
"suggestion": "具体的修复建议,包含代码示例(如适用)",
|
|
22
|
+
"evidence": "支撑判断的证据,如已有函数的路径、调用链分析等"
|
|
23
|
+
}
|
|
24
|
+
]
|
|
25
|
+
}
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
## 字段说明
|
|
29
|
+
|
|
30
|
+
### 顶层字段
|
|
31
|
+
|
|
32
|
+
| 字段 | 类型 | 必填 | 说明 |
|
|
33
|
+
|------|------|------|------|
|
|
34
|
+
| `reviewer` | string | 是 | 审查维度标识:`reuse` / `style` / `correctness` / `reliability` / `custom` / `meta` |
|
|
35
|
+
| `summary` | string | 是 | 本维度的整体评估摘要 |
|
|
36
|
+
| `findings` | array | 是 | 发现的问题列表,无问题时为空数组 `[]` |
|
|
37
|
+
|
|
38
|
+
### Finding 字段
|
|
39
|
+
|
|
40
|
+
| 字段 | 类型 | 必填 | 长度限制 | 说明 |
|
|
41
|
+
|------|------|------|----------|------|
|
|
42
|
+
| `id` | string | 是 | - | 问题编号 |
|
|
43
|
+
| `severity` | string | 是 | - | 严重等级:`P0` / `P1` / `P2` / `P3` |
|
|
44
|
+
| `locked` | boolean | 否 | - | `true` 表示该 finding 来自 `[Critical]` 标记规则,Meta-Review **禁止**对其执行 `adjust_severity` 操作;缺省或 `false` 时 Meta-Review 可自由调整 |
|
|
45
|
+
| `category` | string | 是 | - | 问题分类,见下方分类表 |
|
|
46
|
+
| `file` | string | 是 | - | 问题所在文件的相对路径 |
|
|
47
|
+
| `line` | number | 是 | - | 问题起始行号 |
|
|
48
|
+
| `endLine` | number | 否 | - | 问题结束行号(跨多行时提供) |
|
|
49
|
+
| `title` | string | 是 | ≤15字 | 简短标题,一目了然 |
|
|
50
|
+
| `description` | string | 是 | 1-2句话 | 说明风险和触发条件,不展开论证 |
|
|
51
|
+
| `suggestion` | string | 是 | 1-2句话 | 修复方向,只在关键处给代码片段 |
|
|
52
|
+
| `evidence` | string | 否 | 1句话 | 支撑证据(已有函数路径、调用链等) |
|
|
53
|
+
|
|
54
|
+
**长度要求**:SubAgent 输出的每个 finding 应尽量精简。`description` 和 `suggestion` 各控制在 1-2 句话以内,避免大段文字。主控 Agent 在最终报告中会进一步压缩为表格单行。
|
|
55
|
+
|
|
56
|
+
### Category 分类表
|
|
57
|
+
|
|
58
|
+
#### 复用审查 (reuse)
|
|
59
|
+
| category | 含义 |
|
|
60
|
+
|----------|------|
|
|
61
|
+
| `duplicate-function` | 与已有函数功能重复 |
|
|
62
|
+
| `inline-reimplementation` | 内联逻辑可用已有工具函数替代 |
|
|
63
|
+
| `similar-pattern` | 存在近似实现,建议考虑复用 |
|
|
64
|
+
|
|
65
|
+
#### 风格审查 (style)
|
|
66
|
+
| category | 含义 |
|
|
67
|
+
|----------|------|
|
|
68
|
+
| `code-format` | 格式类规则(空格、缩进、行长、分号、引号等) |
|
|
69
|
+
| `naming-convention` | 命名规范(类名、方法名、常量名、包名等) |
|
|
70
|
+
| `code-style` | 代码结构风格(花括号要求、操作符换行、箭头函数括号等) |
|
|
71
|
+
| `comment-style` | 注释规范(Docstring、Javadoc、注释空格等) |
|
|
72
|
+
| `vue-style` | Vue 模板专属规范(属性命名、插值空格、模板根元素等) |
|
|
73
|
+
| `react-style` | React/JSX 专属规范(JSX 缩进等) |
|
|
74
|
+
|
|
75
|
+
#### 正确性审查 (correctness)
|
|
76
|
+
| category | 含义 |
|
|
77
|
+
|----------|------|
|
|
78
|
+
| `null-safety` | 空值与类型安全(空指针、None 访问、空集合越界等) |
|
|
79
|
+
| `type-error` | 类型不匹配运算(字符串+数字、不可哈希对象等) |
|
|
80
|
+
| `data-structure` | 数据结构操作错误(迭代时修改、可变默认参数等) |
|
|
81
|
+
| `exception-handling` | 异常处理错误(吞异常、finally return、资源泄漏等) |
|
|
82
|
+
| `variable-param` | 变量/参数错误(未定义变量、参数数量不符、重复参数等) |
|
|
83
|
+
| `string-format` | 格式化字符串错误(占位符数量不符、不支持的格式符等) |
|
|
84
|
+
| `control-flow` | 控制流错误(break/continue 在循环外、return 在函数外等) |
|
|
85
|
+
| `oop-error` | OOP 错误(实例化抽象类、MRO 冲突、方法缺少 self 等) |
|
|
86
|
+
| `framework-bug` | 框架特定缺陷(Vue/React 生命周期、Hook 规则、双向数据流等) |
|
|
87
|
+
|
|
88
|
+
#### 可靠性审查 (reliability)
|
|
89
|
+
| category | 含义 |
|
|
90
|
+
|----------|------|
|
|
91
|
+
| `resource-leak` | 资源泄漏(文件/连接/锁未关闭释放) |
|
|
92
|
+
| `concurrency-race` | 并发竞态(无锁共享变量、死锁、WaitGroup 误用等) |
|
|
93
|
+
| `thread-safety` | 线程安全(非线程安全集合共享、SimpleDateFormat 等) |
|
|
94
|
+
| `db-operation` | 数据库操作(N+1、大批量未分批、事务失效、免密/明文密码) |
|
|
95
|
+
| `async-issue` | 异步问题(未 await、事件循环阻塞、Task GC 等) |
|
|
96
|
+
| `auth-missing` | 鉴权缺失(对外接口无鉴权) |
|
|
97
|
+
| `auth-bypass` | 越权访问(未校验资源归属、垂直越权) |
|
|
98
|
+
| `auth-logic-error` | 鉴权逻辑错误(校验变量来源错误、宽松比较) |
|
|
99
|
+
| `performance-issue` | 性能问题(线程池无界、ReDoS、循环字符串拼接等) |
|
|
100
|
+
|
|
101
|
+
## 输出示例
|
|
102
|
+
|
|
103
|
+
```json
|
|
104
|
+
{
|
|
105
|
+
"reviewer": "correctness",
|
|
106
|
+
"summary": "发现 2 个正确性问题:一个空指针风险和一处异常被吞",
|
|
107
|
+
"findings": [
|
|
108
|
+
{
|
|
109
|
+
"id": "001",
|
|
110
|
+
"severity": "P0",
|
|
111
|
+
"category": "null-safety",
|
|
112
|
+
"file": "src/api/user.ts",
|
|
113
|
+
"line": 42,
|
|
114
|
+
"endLine": 48,
|
|
115
|
+
"title": "空指针访问",
|
|
116
|
+
"description": "data.user 可能为 null,直接访问 data.user.name 会在运行时崩溃",
|
|
117
|
+
"suggestion": "添加空值检查:if (data.user) { ... }",
|
|
118
|
+
"locked": true
|
|
119
|
+
},
|
|
120
|
+
{
|
|
121
|
+
"id": "002",
|
|
122
|
+
"severity": "P1",
|
|
123
|
+
"category": "exception-handling",
|
|
124
|
+
"file": "src/service/init.ts",
|
|
125
|
+
"line": 20,
|
|
126
|
+
"endLine": 23,
|
|
127
|
+
"title": "异常被吞",
|
|
128
|
+
"description": "catch 块中只有 console.log,异常未向上传播,调用方无法感知失败",
|
|
129
|
+
"suggestion": "catch 后重新抛出或返回错误状态"
|
|
130
|
+
}
|
|
131
|
+
]
|
|
132
|
+
}
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
## 合并规则
|
|
136
|
+
|
|
137
|
+
主控 Agent 在收集到所有 SubAgent 的输出后,按以下规则合并:
|
|
138
|
+
|
|
139
|
+
1. **去重**:`file` + `line`(±5行范围内)+ `category` 相同的视为重复,保留 description 最详细的
|
|
140
|
+
2. **合并相近**:同一文件中多个同类问题(如多处硬编码字符串)合并为一条,在 description 中列出所有位置
|
|
141
|
+
3. **重新编号**:合并后按 severity 排序,分配连续编号(1, 2, 3...)
|
|
142
|
+
4. **统计汇总**:计算各等级的数量,生成总体评估
|
|
143
|
+
|
|
144
|
+
---
|
|
145
|
+
|
|
146
|
+
## Meta-Reviewer 输出格式
|
|
147
|
+
|
|
148
|
+
Meta-Reviewer 的输出格式与审查 Agent 不同,它不直接产出 findings,而是对已有 findings 进行修正和补充。
|
|
149
|
+
|
|
150
|
+
### JSON Schema
|
|
151
|
+
|
|
152
|
+
```json
|
|
153
|
+
{
|
|
154
|
+
"reviewer": "meta",
|
|
155
|
+
"summary": "Meta-Review 整体评估",
|
|
156
|
+
"actions": [
|
|
157
|
+
{
|
|
158
|
+
"action": "remove | adjust_severity | supplement | refine_suggestion",
|
|
159
|
+
"target_id": "E001",
|
|
160
|
+
"reason": "为什么要做这个调整",
|
|
161
|
+
"new_severity": "P2",
|
|
162
|
+
"new_suggestion": "更具体的建议"
|
|
163
|
+
}
|
|
164
|
+
],
|
|
165
|
+
"missed_findings": [
|
|
166
|
+
{
|
|
167
|
+
"id": "001",
|
|
168
|
+
"severity": "P1",
|
|
169
|
+
"category": "分类标识",
|
|
170
|
+
"file": "相对路径/文件名",
|
|
171
|
+
"line": 42,
|
|
172
|
+
"title": "遗漏的问题",
|
|
173
|
+
"description": "描述",
|
|
174
|
+
"suggestion": "建议"
|
|
175
|
+
}
|
|
176
|
+
]
|
|
177
|
+
}
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
### Action 字段说明
|
|
181
|
+
|
|
182
|
+
| action | 含义 | 必填字段 |
|
|
183
|
+
|--------|------|---------|
|
|
184
|
+
| `remove` | 移除误报 | `target_id`, `reason` |
|
|
185
|
+
| `adjust_severity` | 调整严重等级 | `target_id`, `reason`, `new_severity` |
|
|
186
|
+
| `refine_suggestion` | 细化修复建议 | `target_id`, `reason`, `new_suggestion` |
|
|
187
|
+
| `supplement` | 补充已有 finding 的信息 | `target_id`, `reason` |
|
|
188
|
+
|
|
189
|
+
### missed_findings
|
|
190
|
+
|
|
191
|
+
遗漏的问题使用标准 finding 格式。这些条目在合并阶段会被追加到 findings 列表中。
|
|
192
|
+
|
|
193
|
+
### 合并时应用 Meta-Review 的顺序
|
|
194
|
+
|
|
195
|
+
1. 先应用 `actions`(remove → adjust_severity → refine_suggestion → supplement)
|
|
196
|
+
2. 再追加 `missed_findings`
|
|
197
|
+
3. 最后执行去重、合并、排序、编号
|