@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,180 @@
|
|
|
1
|
+
# Python 资源并发类规则
|
|
2
|
+
|
|
3
|
+
涵盖资源管理、内存泄漏、并发/协程问题、性能及接口鉴权问题。
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## 一、资源管理与内存泄漏
|
|
8
|
+
|
|
9
|
+
### RES_PY_01. 文件句柄未关闭 [high]
|
|
10
|
+
- **检测**:`f = open(...)` 未用 `with` 包裹,异常时文件未关闭,fd 泄漏
|
|
11
|
+
- **排除**:已用 `with open(...) as f`
|
|
12
|
+
|
|
13
|
+
### RES_PY_02. 数据库连接未释放 [high]
|
|
14
|
+
- **检测**:`conn = db_pool.get_connection()` 后未在 finally/with 中关闭,连接池耗尽
|
|
15
|
+
- **排除**:已用 `with db_pool.get_connection() as conn`
|
|
16
|
+
|
|
17
|
+
### RES_PY_03. 网络连接/Socket 未关闭 [middle]
|
|
18
|
+
- **检测**:Socket 未关闭;requests 未用 Session 导致连接无法复用(每次新建短连接)
|
|
19
|
+
- **排除**:已用 `requests.Session`;已用 `with` 管理 socket
|
|
20
|
+
|
|
21
|
+
### RES_PY_04. 线程/进程资源未清理 [high]
|
|
22
|
+
- **检测**:`Process.start()` 后未 `join()`,产生僵尸进程;`ThreadPoolExecutor` 未 `shutdown()`
|
|
23
|
+
- **排除**:已用 `with ThreadPoolExecutor(...) as executor`;有 `p.join()`
|
|
24
|
+
|
|
25
|
+
### RES_PY_05. 临时文件未删除磁盘占满 [middle]
|
|
26
|
+
- **检测**:`NamedTemporaryFile(delete=False)` 后未在 finally 中删除;上传文件处理后未清理
|
|
27
|
+
- **排除**:`delete=True`(默认);有 finally 删除
|
|
28
|
+
|
|
29
|
+
### RES_PY_06. 内存泄漏(循环引用与全局容器)[high]
|
|
30
|
+
- **检测**:父子对象相互持有引用形成环;全局 list/dict 无上限持续 append,无清理策略
|
|
31
|
+
- **排除**:使用 `weakref`;使用 `deque(maxlen=N)` 有界容器
|
|
32
|
+
|
|
33
|
+
### RES_PY_07. 大文件一次性加载到内存 [high]
|
|
34
|
+
- **检测**:`f.read()` 读取大文件全部内容;ORM `Model.objects.all()` 百万级数据全量加载
|
|
35
|
+
- **排除**:已用逐行迭代;已用 `.iterator(chunk_size=N)` 分批
|
|
36
|
+
|
|
37
|
+
### RES_PY_08. 大对象未及时释放 [middle]
|
|
38
|
+
- **检测**:大型 DataFrame/数组用完后未 `del df`,函数返回后仍持有引用,内存无法回收
|
|
39
|
+
- **排除**:函数返回后对象自然超出作用域;有 `del` + `gc.collect()`
|
|
40
|
+
|
|
41
|
+
---
|
|
42
|
+
|
|
43
|
+
## 二、并发与协程问题
|
|
44
|
+
|
|
45
|
+
### RACE_PY_01. 全局变量并发修改无锁保护 [high]
|
|
46
|
+
- **检测**:多线程同时修改全局变量/共享字典,无 `threading.Lock` 保护;check-then-act 竞态
|
|
47
|
+
- **排除**:有 Lock/RLock;只读操作;GIL 足以保护的原子操作
|
|
48
|
+
|
|
49
|
+
### RACE_PY_02. 死锁导致服务挂起 [high]
|
|
50
|
+
- **检测**:多线程加锁顺序不一致(lock1→lock2 与 lock2→lock1)形成循环等待
|
|
51
|
+
- **排除**:固定加锁顺序(如按 `id()` 排序)
|
|
52
|
+
|
|
53
|
+
### RACE_PY_03. 线程不安全数据结构并发修改 [high]
|
|
54
|
+
- **检测**:多线程并发 `list.append`/迭代修改 dict(虽 CPython GIL 保护单步,但复合操作仍不安全)
|
|
55
|
+
- **排除**:已用 `queue.Queue`;有锁保护
|
|
56
|
+
|
|
57
|
+
### RACE_PY_04. 异步函数未 await 导致逻辑跳过 [high]
|
|
58
|
+
- **检测**:`save_data(data)` 而非 `await save_data(data)`,协程未执行,关键逻辑被跳过
|
|
59
|
+
|
|
60
|
+
```python
|
|
61
|
+
# 错误写法 — 仅创建协程对象,未执行
|
|
62
|
+
async def handle():
|
|
63
|
+
save_data(data) # 没有 await,save_data 是 async 函数时什么都没做
|
|
64
|
+
return "ok"
|
|
65
|
+
|
|
66
|
+
# 正确写法
|
|
67
|
+
async def handle():
|
|
68
|
+
await save_data(data)
|
|
69
|
+
return "ok"
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
### RACE_PY_05. asyncio 事件循环中执行阻塞 IO [high]
|
|
73
|
+
- **检测**:async 函数内 `time.sleep()`/`requests.get()`/`open()` 等同步阻塞调用,阻塞整个事件循环
|
|
74
|
+
- **排除**:已用 `asyncio.sleep`;已用 `aiohttp`/`aiofiles`;已用 `run_in_executor`
|
|
75
|
+
|
|
76
|
+
### RACE_PY_06. 协程未正确启动或 Task 无强引用被 GC [high]
|
|
77
|
+
- **检测**:`send_email()` 未 await,仅创建协程对象未执行;`asyncio.create_task(...)` 结果未保持引用,可能被 GC 回收
|
|
78
|
+
- **排除**:有 await;Task 引用被保存
|
|
79
|
+
|
|
80
|
+
```python
|
|
81
|
+
# 错误写法 — Task 可能被 GC 回收
|
|
82
|
+
asyncio.create_task(send_notification(user)) # 返回值未保存
|
|
83
|
+
|
|
84
|
+
# 正确写法
|
|
85
|
+
task = asyncio.create_task(send_notification(user))
|
|
86
|
+
background_tasks.add(task)
|
|
87
|
+
task.add_done_callback(background_tasks.discard)
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
### RACE_PY_07. 队列满无超时导致无限阻塞 [middle]
|
|
91
|
+
- **检测**:`q.put(item)` 队列已满时无限阻塞;无 `timeout` 参数
|
|
92
|
+
- **排除**:`q.put(item, timeout=N)` 有超时;队列有足够容量
|
|
93
|
+
|
|
94
|
+
---
|
|
95
|
+
|
|
96
|
+
## 三、性能
|
|
97
|
+
|
|
98
|
+
### PERF_PY_01. 无限循环 CPU 耗尽 [high]
|
|
99
|
+
- **检测**:`while True:` 无 break/sleep 条件,CPU 占满
|
|
100
|
+
- **排除**:有明确退出条件;有 sleep/等待
|
|
101
|
+
|
|
102
|
+
### PERF_PY_02. N+1 查询 [middle]
|
|
103
|
+
- **检测**:循环中 `User.objects.get(id=order.user_id)` 每条记录单独查库
|
|
104
|
+
- **排除**:已用 `select_related`/`prefetch_related`;已用 IN 批量查询
|
|
105
|
+
|
|
106
|
+
### PERF_PY_03. 正则表达式回溯爆炸 ReDoS [high]
|
|
107
|
+
- **检测**:`(a+)+`/`(a|aa)+` 嵌套量词匹配长字符串,CPU 耗尽
|
|
108
|
+
- **排除**:输入长度有限制;正则已优化无嵌套量词
|
|
109
|
+
|
|
110
|
+
### PERF_PY_04. 无限制创建线程 [high]
|
|
111
|
+
- **检测**:循环中 `Thread(target=...).start()` 无上限,大量 URL 创建大量线程
|
|
112
|
+
- **排除**:已用 `ThreadPoolExecutor(max_workers=N)`
|
|
113
|
+
|
|
114
|
+
---
|
|
115
|
+
|
|
116
|
+
## 四、效率与正确性补充(4项)
|
|
117
|
+
|
|
118
|
+
### EFF_PY_01. 可并行的串行 await [middle]
|
|
119
|
+
- **检测**:连续多个 `await coro_a()` + `await coro_b()` 且两个协程互不依赖,应改为 `asyncio.gather()`
|
|
120
|
+
- **排除**:coro_b 依赖 coro_a 的返回值;操作间有顺序语义(如写日志、事务步骤)
|
|
121
|
+
|
|
122
|
+
```python
|
|
123
|
+
# 反例 — 串行,总耗时 = tA + tB
|
|
124
|
+
user = await fetch_user(uid)
|
|
125
|
+
config = await fetch_config() # 不依赖 user,可并行
|
|
126
|
+
|
|
127
|
+
# 正例 — 并行,总耗时 = max(tA, tB)
|
|
128
|
+
user, config = await asyncio.gather(fetch_user(uid), fetch_config())
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
### EFF_PY_02. 文件/资源存在性预检查(TOCTOU) [low]
|
|
132
|
+
- **检测**:操作前先调用 `os.path.exists()`/`os.path.isfile()` 检查存在性,再执行实际操作,形成 check-then-act 竞态并增加额外 I/O
|
|
133
|
+
- **排除**:业务逻辑确实需要分支判断且不可用异常替代;检查结果用于路由逻辑而非仅判断能否继续
|
|
134
|
+
|
|
135
|
+
```python
|
|
136
|
+
# 反例 — 两次 I/O,存在竞态
|
|
137
|
+
if os.path.exists(path):
|
|
138
|
+
with open(path) as f:
|
|
139
|
+
data = f.read()
|
|
140
|
+
|
|
141
|
+
# 正例 — 直接操作,catch 处理不存在
|
|
142
|
+
try:
|
|
143
|
+
with open(path) as f:
|
|
144
|
+
data = f.read()
|
|
145
|
+
except FileNotFoundError:
|
|
146
|
+
data = None
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
### EFF_PY_03. 正则校验缺少锚点 [middle]
|
|
150
|
+
- **检测**:用于输入校验的正则表达式缺少 `^` 和 `$`(或 `\A`/`\Z`)锚点,`re.search`/`re.match` 导致部分匹配通过本应拒绝的字符串
|
|
151
|
+
- **排除**:明确需要部分匹配(如在文本中提取内容);已使用 `re.fullmatch()`
|
|
152
|
+
|
|
153
|
+
```python
|
|
154
|
+
# 反例 — "123abc" 能通过纯数字校验
|
|
155
|
+
if re.search(r'\d+', user_input): # 只要含数字就通过
|
|
156
|
+
|
|
157
|
+
# 正例
|
|
158
|
+
if re.fullmatch(r'\d+', user_input):
|
|
159
|
+
# 或
|
|
160
|
+
if re.match(r'^\d+$', user_input):
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
### EFF_PY_04. 抛出异常时未保留原始异常(错误链断裂) [middle]
|
|
164
|
+
- **检测**:在 `except` 块中 `raise NewException("msg")` 时未使用 `raise NewException("msg") from e`,导致原始异常的 traceback 和信息丢失,上层难以溯源
|
|
165
|
+
- **排除**:有意隐藏底层错误(安全场景);原始异常已记录到日志
|
|
166
|
+
|
|
167
|
+
```python
|
|
168
|
+
# 反例 — 原始 traceback 丢失
|
|
169
|
+
try:
|
|
170
|
+
db.execute(sql)
|
|
171
|
+
except Exception as e:
|
|
172
|
+
raise ServiceError("数据库写入失败") # e 的 traceback 消失
|
|
173
|
+
|
|
174
|
+
# 正例
|
|
175
|
+
try:
|
|
176
|
+
db.execute(sql)
|
|
177
|
+
except Exception as e:
|
|
178
|
+
raise ServiceError("数据库写入失败") from e
|
|
179
|
+
```
|
|
180
|
+
|
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
# Python 代码风格扫描规则(共8条)
|
|
2
|
+
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
## 一、格式规则(4项)
|
|
6
|
+
|
|
7
|
+
### 1. PY023 LineLength - 每行不得超过120个字符 [Critical]
|
|
8
|
+
|
|
9
|
+
**缺陷描述**:单行字符数不超过 120 个字符,超出需要换行。
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
### 2. PY030 Whitespace - 逗号、分号、冒号前不加空格,后边加一个空格 [Critical]
|
|
14
|
+
|
|
15
|
+
**缺陷描述**:逗号(`,`)、分号(`;`)、冒号(`:`)前不加空格,其后需加一个空格。
|
|
16
|
+
|
|
17
|
+
**经典案例**:
|
|
18
|
+
```python
|
|
19
|
+
# 错误写法
|
|
20
|
+
x = [1 , 2 , 3]
|
|
21
|
+
d = {"key" : "value"}
|
|
22
|
+
x = [1,2,3]
|
|
23
|
+
|
|
24
|
+
# 正确写法
|
|
25
|
+
x = [1, 2, 3]
|
|
26
|
+
d = {"key": "value"}
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
**豁免场景**:切片中的冒号(`x[1:2]`);字符串字面量内部;类型注解中的冒号。
|
|
30
|
+
|
|
31
|
+
---
|
|
32
|
+
|
|
33
|
+
### 3. PY031 WhitespaceAroundOperator - 所有二元运算符前后各加一个空格 [Critical]
|
|
34
|
+
|
|
35
|
+
**缺陷描述**:所有二元运算符(赋值、算术、比较、逻辑、位运算、类型注解箭头 `->` 等)前后均需各加一个空格。
|
|
36
|
+
|
|
37
|
+
**经典案例**:
|
|
38
|
+
```python
|
|
39
|
+
# 错误写法
|
|
40
|
+
x=1
|
|
41
|
+
if x>0 and y<10:
|
|
42
|
+
pass
|
|
43
|
+
def get_name()->str:
|
|
44
|
+
return self.name
|
|
45
|
+
|
|
46
|
+
# 正确写法
|
|
47
|
+
x = 1
|
|
48
|
+
if x > 0 and y < 10:
|
|
49
|
+
pass
|
|
50
|
+
def get_name() -> str:
|
|
51
|
+
return self.name
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
**豁免场景**:关键字参数或默认值中的等号(见 PY032);一元运算符;切片中的冒号。
|
|
55
|
+
|
|
56
|
+
---
|
|
57
|
+
|
|
58
|
+
### 4. PY032 WhitespaceAroundNamedParameterEquals - 关键字参数或参数默认值里的等号前后不加空格 [Critical]
|
|
59
|
+
|
|
60
|
+
**缺陷描述**:函数定义中的默认参数值和函数调用中的关键字参数,其等号(`=`)前后不应加空格。
|
|
61
|
+
|
|
62
|
+
**经典案例**:
|
|
63
|
+
```python
|
|
64
|
+
# 错误写法
|
|
65
|
+
def func(x = 1, y = 2):
|
|
66
|
+
pass
|
|
67
|
+
result = func(x = 10, y = 20)
|
|
68
|
+
|
|
69
|
+
# 正确写法
|
|
70
|
+
def func(x=1, y=2):
|
|
71
|
+
pass
|
|
72
|
+
result = func(x=10, y=20)
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
**豁免场景**:带类型注解的默认参数(`def func(x: int = 1)` 中等号前后需加空格)。
|
|
76
|
+
|
|
77
|
+
---
|
|
78
|
+
|
|
79
|
+
## 二、文档规则(2项)
|
|
80
|
+
|
|
81
|
+
### 5. PY033 Docstring - 使用docstring描述module、function、class和method接口 [Critical]
|
|
82
|
+
|
|
83
|
+
**缺陷描述**:module、function、class 和 method 的接口必须使用 docstring 进行描述,格式为三个双引号(`"""`),不得使用单引号(`'''`)或 `//` 注释替代。
|
|
84
|
+
|
|
85
|
+
**经典案例**:
|
|
86
|
+
```python
|
|
87
|
+
# 错误写法
|
|
88
|
+
def calculate_total(price, quantity, discount):
|
|
89
|
+
return price * quantity * (1 - discount)
|
|
90
|
+
|
|
91
|
+
# 错误写法 — 使用单引号
|
|
92
|
+
def get_user(user_id):
|
|
93
|
+
'''根据ID获取用户信息。'''
|
|
94
|
+
return db.query(user_id)
|
|
95
|
+
|
|
96
|
+
# 错误写法 — 使用注释替代
|
|
97
|
+
def process_order(order_id):
|
|
98
|
+
# 处理订单逻辑
|
|
99
|
+
return get_order(order_id).process()
|
|
100
|
+
|
|
101
|
+
# 正确写法
|
|
102
|
+
def calculate_total(price, quantity, discount):
|
|
103
|
+
"""计算商品总价。"""
|
|
104
|
+
return price * quantity * (1 - discount)
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
**豁免场景**:`__init__` 方法(如果类已有 docstring);`__str__`、`__repr__` 等魔术方法;一行体的简单 property。
|
|
108
|
+
|
|
109
|
+
---
|
|
110
|
+
|
|
111
|
+
### 6. PY034 DocstringContent - 接口docstring描述至少包括功能简介、参数、返回值 [Critical]
|
|
112
|
+
|
|
113
|
+
**缺陷描述**:函数和方法的 docstring 至少需要包含:功能简介、参数(Args)、返回值(Returns)。如果函数可能抛出异常,必须注明(Raises)。
|
|
114
|
+
|
|
115
|
+
**标准 docstring 格式**(Google 风格):
|
|
116
|
+
```
|
|
117
|
+
"""功能简介。
|
|
118
|
+
|
|
119
|
+
Args:
|
|
120
|
+
参数名 (类型): 参数描述。
|
|
121
|
+
|
|
122
|
+
Returns:
|
|
123
|
+
类型: 返回值描述。
|
|
124
|
+
|
|
125
|
+
Raises:
|
|
126
|
+
异常类型: 触发条件描述。
|
|
127
|
+
"""
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
**经典案例**:
|
|
131
|
+
```python
|
|
132
|
+
# 错误写法 — 只有功能简介,缺少参数和返回值
|
|
133
|
+
def get_user_by_id(user_id):
|
|
134
|
+
"""获取用户信息。"""
|
|
135
|
+
return db.query(User).filter(User.id == user_id).first()
|
|
136
|
+
|
|
137
|
+
# 正确写法
|
|
138
|
+
def get_user_by_id(user_id):
|
|
139
|
+
"""根据用户ID查询用户信息。
|
|
140
|
+
|
|
141
|
+
Args:
|
|
142
|
+
user_id (int): 用户唯一标识符。
|
|
143
|
+
|
|
144
|
+
Returns:
|
|
145
|
+
User: 用户对象,若不存在则返回 None。
|
|
146
|
+
"""
|
|
147
|
+
return db.query(User).filter(User.id == user_id).first()
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
**豁免场景**:无参数且无返回值的简单函数(只需功能简介);`__init__` 方法(参数在类 docstring 中描述)。
|
|
151
|
+
|
|
152
|
+
---
|
|
153
|
+
|
|
154
|
+
## 三、编程实践规则(2项)
|
|
155
|
+
|
|
156
|
+
### 7. PY018 CompareToNone - 禁止使用==或!=判断表达式是否为None [Critical]
|
|
157
|
+
|
|
158
|
+
**缺陷描述**:判断对象是否为 `None` 时,禁止使用 `==` 或 `!=`,应使用 `is` 或 `is not`。
|
|
159
|
+
|
|
160
|
+
**经典案例**:
|
|
161
|
+
```python
|
|
162
|
+
# 错误写法
|
|
163
|
+
if result == None:
|
|
164
|
+
return
|
|
165
|
+
if user != None and user.is_active:
|
|
166
|
+
grant_access(user)
|
|
167
|
+
|
|
168
|
+
# 正确写法
|
|
169
|
+
if result is None:
|
|
170
|
+
return
|
|
171
|
+
if user is not None and user.is_active:
|
|
172
|
+
grant_access(user)
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
---
|
|
176
|
+
|
|
177
|
+
## 四、命名规则(1项)
|
|
178
|
+
|
|
179
|
+
### 8. PY039 ClassName - 类(包括异常)名使用首字母大写驼峰式命名 [Critical]
|
|
180
|
+
|
|
181
|
+
**缺陷描述**:类名必须使用首字母大写的驼峰式命名(PascalCase),匹配正则 `^[A-Z][a-zA-Z0-9]*$`。
|
|
182
|
+
|
|
183
|
+
**经典案例**:
|
|
184
|
+
```python
|
|
185
|
+
# 错误写法
|
|
186
|
+
class userService: pass
|
|
187
|
+
class user_service: pass
|
|
188
|
+
class invalidInputError(Exception): pass
|
|
189
|
+
|
|
190
|
+
# 正确写法
|
|
191
|
+
class UserService: pass
|
|
192
|
+
class InvalidInputError(Exception): pass
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
**核心原则:只报告能明确看到 `class` 关键字后的类名不符合大驼峰规范的情况。动态类创建等场景不报告。**
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# 埋点上报
|
|
2
|
+
|
|
3
|
+
> **重要**:此步骤为后台操作,**任何失败(CLI 不存在、安装失败、执行报错)均不影响审查报告的输出和后续用户交互**。埋点失败时静默跳过,不向用户展示错误信息。
|
|
4
|
+
|
|
5
|
+
## 上报命令
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
aiscan-cli save-scan \
|
|
9
|
+
-u <username> \ # ${COMATE_USERNAME}
|
|
10
|
+
-r <repo> \ # 仓库路径,如 baidu/aa/bb
|
|
11
|
+
-t <trace-id> # ${COMATE_SESSION_ID}
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
## CLI 安装与可用性检查
|
|
15
|
+
|
|
16
|
+
在本次会话中第一次执行 CLI 命令之前,直接执行目标命令。若命令执行报错(包括 command not found、CLI 不存在、版本不兼容等任何错误),则执行安装:
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
AISCAN_CLI_VERSION=0.2.0 bash -c "$(curl -fsSL https://bep-qa.bj.bcebos.com/aiscan-cli/install_aiscan_cli.sh)"
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
安装完成后使用 `~/.aiscan-cli/bin/aiscan-cli`(如果 PATH 未生效,后续命令均用完整路径)。
|
|
23
|
+
|
|
24
|
+
## 失败处理
|
|
25
|
+
|
|
26
|
+
- 安装或执行仍报错:**静默跳过**,不向用户展示任何错误
|
|
27
|
+
- 此检查在整个会话中只需执行一次,首次确认可用后后续直接使用已确认的命令路径
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: code-security
|
|
3
3
|
description: 代码安全漏洞扫描与修复工具。当用户涉及以下任何场景时,务必使用本 skill:(1) 扫描项目代码中的安全漏洞(SQL注入、XSS、XXE、路径遍历、硬编码凭证等);(2) 自动修复扫描发现的漏洞;(3) 查看漏洞扫描报告;(4) 对 Java、Go、Python、JavaScript、C/C++ 等语言的项目进行安全检测;(5) 硬编码凭证的修复和托管。即使用户只是提到"代码安全"、"漏洞"、"扫描"、"审计"、"SAST"、"硬编码"、"凭证"等关键词,也应触发本 skill。用户说"检查代码有没有安全问题"或"帮我扫一下代码"时也应触发,不要尝试自行分析代码安全性,而应使用本 skill 的专业扫描服务。
|
|
4
|
+
disable-model-invocation: true
|
|
4
5
|
metadata:
|
|
5
6
|
enableWhen:
|
|
6
7
|
- isInternal
|
|
@@ -41,7 +41,7 @@ metadata:
|
|
|
41
41
|
|
|
42
42
|
示例命令,只需替换对应文档的 url 即可
|
|
43
43
|
`
|
|
44
|
-
cd ${COMATE_SKILL_DIR}/../ku-operator
|
|
44
|
+
cd ${COMATE_SKILL_DIR}/../ku-operator && COMATE_USERNAME=${COMATE_USERNAME} python3 scripts/ku_operator.py query-content --url "https://ku.baidu-int.com/knowledge/HFVrC7hq1Q/_SKPgSwp2G/jyGhbHUQQG/WBcj3KdE3ATpQR"
|
|
45
45
|
`
|
|
46
46
|
|
|
47
47
|
|