@comate/zulu 1.2.1-beta.2 → 1.3.1

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.
Files changed (170) hide show
  1. package/comate-engine/assets/skills/auto-commit-comate/SKILL.md +260 -0
  2. package/comate-engine/assets/skills/auto-commit-comate/references/data_structures.md +189 -0
  3. package/comate-engine/assets/skills/auto-commit-comate/references/new_version_instruction.md +209 -0
  4. package/comate-engine/assets/skills/auto-commit-comate/references/old_version_instruction.md +208 -0
  5. package/comate-engine/assets/skills/auto-commit-comate/scripts/git_diff_cli.py +196 -0
  6. package/comate-engine/assets/skills/{smart-commit → auto-commit-comate}/scripts/git_utils.py +20 -10
  7. package/comate-engine/assets/skills/{smart-commit → auto-commit-comate}/scripts/icafe/client.py +69 -40
  8. package/comate-engine/assets/skills/{smart-commit → auto-commit-comate}/scripts/icafe/farseer.py +8 -9
  9. package/comate-engine/assets/skills/{smart-commit → auto-commit-comate}/scripts/icafe/matching.py +65 -9
  10. package/comate-engine/assets/skills/auto-commit-comate/scripts/match_card_cli.py +37 -0
  11. package/comate-engine/assets/skills/cnap-comate/SKILL.md +157 -0
  12. package/comate-engine/assets/skills/cnap-comate/references/cases.md +198 -0
  13. package/comate-engine/assets/skills/cnap-comate/references/deploy-troubleshoot.md +15 -0
  14. package/comate-engine/assets/skills/cnap-comate/references/install.md +43 -0
  15. package/comate-engine/assets/skills/cnap-comate/references/kubectl.md +55 -0
  16. package/comate-engine/assets/skills/cnap-comate/references/login.md +125 -0
  17. package/comate-engine/assets/skills/cnap-comate/references/oncall.md +24 -0
  18. package/comate-engine/assets/skills/cnap-comate/scripts/install_cnap_cli.sh +36 -0
  19. package/comate-engine/assets/skills/code-security/SKILL.md +176 -0
  20. package/comate-engine/assets/skills/code-security/references/credential_hosting.md +102 -0
  21. package/comate-engine/assets/skills/code-security/references/vul_repair_sensitive.md +219 -0
  22. package/comate-engine/assets/skills/code-security/scripts/build_repair_info.py +0 -0
  23. package/comate-engine/assets/skills/code-security/scripts/credential_hosting.py +99 -0
  24. package/comate-engine/assets/skills/code-security/scripts/credential_poll.py +350 -0
  25. package/comate-engine/assets/skills/code-security/scripts/http_client.py +173 -0
  26. package/comate-engine/assets/skills/code-security/scripts/parse_scan_result.py +301 -0
  27. package/comate-engine/assets/skills/code-security/scripts/repair_vulnerability.py +261 -0
  28. package/comate-engine/assets/skills/code-security/scripts/report_chat.py +198 -0
  29. package/comate-engine/assets/skills/code-security/scripts/scan_vulnerability.py +316 -0
  30. package/comate-engine/assets/skills/code-security-comate/SKILL.md +219 -0
  31. package/comate-engine/assets/skills/code-security-comate/references/credential_hosting.md +102 -0
  32. package/comate-engine/assets/skills/code-security-comate/references/vul_repair-go_sql_injection.md +399 -0
  33. package/comate-engine/assets/skills/code-security-comate/references/vul_repair-java_sql_injection.md +591 -0
  34. package/comate-engine/assets/skills/code-security-comate/references/vul_repair-php_sql_injection.md +318 -0
  35. package/comate-engine/assets/skills/code-security-comate/references/vul_repair-python_sql_injection.md +198 -0
  36. package/comate-engine/assets/skills/code-security-comate/references/vul_repair_sensitive.md +219 -0
  37. package/comate-engine/assets/skills/code-security-comate/scripts/credential_hosting.py +87 -0
  38. package/comate-engine/assets/skills/code-security-comate/scripts/credential_poll.py +345 -0
  39. package/comate-engine/assets/skills/code-security-comate/scripts/http_client.py +173 -0
  40. package/comate-engine/assets/skills/code-security-comate/scripts/parse_scan_result.py +392 -0
  41. package/comate-engine/assets/skills/code-security-comate/scripts/repair_vulnerability.py +245 -0
  42. package/comate-engine/assets/skills/code-security-comate/scripts/report_chat.py +145 -0
  43. package/comate-engine/assets/skills/code-security-comate/scripts/scan_vulnerability.py +444 -0
  44. package/comate-engine/assets/skills/code-security-comate/scripts/utils.py +153 -0
  45. package/comate-engine/assets/skills/comate-docs-comate/SKILL.md +148 -0
  46. package/comate-engine/assets/skills/comate-docs-comate/references/doc-map-extended.md +78 -0
  47. package/comate-engine/assets/skills/comate-docs-comate/references/models-and-billing.md +51 -0
  48. package/comate-engine/assets/skills/comate-docs-comate/references/product-overview.md +73 -0
  49. package/comate-engine/assets/skills/comate-docs-comate/references/query_content.md +83 -0
  50. package/comate-engine/assets/skills/comate-docs-comate/references/query_repo.md +57 -0
  51. package/comate-engine/assets/skills/comate-docs-comate/scripts/ku_operator.py +1575 -0
  52. package/comate-engine/assets/skills/create-image-comate/SKILL.md +278 -0
  53. package/comate-engine/assets/skills/create-skill-comate/SKILL.md +308 -217
  54. package/comate-engine/assets/skills/create-skill-comate/agents/analyzer.md +274 -0
  55. package/comate-engine/assets/skills/create-skill-comate/agents/comparator.md +202 -0
  56. package/comate-engine/assets/skills/create-skill-comate/agents/grader.md +223 -0
  57. package/comate-engine/assets/skills/create-skill-comate/assets/eval_review.html +146 -0
  58. package/comate-engine/assets/skills/create-skill-comate/eval-viewer/generate_review.py +489 -0
  59. package/comate-engine/assets/skills/create-skill-comate/eval-viewer/viewer.html +1325 -0
  60. package/comate-engine/assets/skills/create-skill-comate/references/schemas.md +430 -0
  61. package/comate-engine/assets/skills/create-skill-comate/scripts/__init__.py +0 -0
  62. package/comate-engine/assets/skills/create-skill-comate/scripts/__pycache__/__init__.cpython-311.pyc +0 -0
  63. package/comate-engine/assets/skills/create-skill-comate/scripts/__pycache__/aggregate_benchmark.cpython-311.pyc +0 -0
  64. package/comate-engine/assets/skills/create-skill-comate/scripts/aggregate_benchmark.py +412 -0
  65. package/comate-engine/assets/skills/create-skill-comate/scripts/generate_report.py +334 -0
  66. package/comate-engine/assets/skills/create-skill-comate/scripts/package_skill.py +140 -0
  67. package/comate-engine/assets/skills/create-skill-comate/scripts/utils.py +53 -0
  68. package/comate-engine/assets/skills/find-skills-comate/SKILL.md +15 -12
  69. package/comate-engine/assets/skills/find-skills-comate/scripts/fetch_skills.py +32 -3
  70. package/comate-engine/assets/skills/get-ugate-token-comate/SKILL.md +159 -0
  71. package/comate-engine/assets/skills/get-ugate-token-comate/getUgateToken.py +150 -0
  72. package/comate-engine/assets/skills/icafe-comate/SKILL.md +240 -0
  73. package/comate-engine/assets/skills/icafe-comate/references/ai-workflows.md +233 -0
  74. package/comate-engine/assets/skills/icafe-comate/references/commands.md +1147 -0
  75. package/comate-engine/assets/skills/icafe-comate/references/error-handling.md +164 -0
  76. package/comate-engine/assets/skills/icafe-comate/references/git-auto-bindcard-workflow.md +201 -0
  77. package/comate-engine/assets/skills/icafe-comate/references/git-bindcard-workflow.md +327 -0
  78. package/comate-engine/assets/skills/icafe-comate/references/iql-syntax.md +327 -0
  79. package/comate-engine/assets/skills/icafe-comate/references/platform-concepts.md +317 -0
  80. package/comate-engine/assets/skills/icafe-comate/references/smart-create-workflow.md +171 -0
  81. package/comate-engine/assets/skills/icafe-comate/references/smart-find-workflow.md +127 -0
  82. package/comate-engine/assets/skills/icafe-comate/references/smart-update-workflow.md +118 -0
  83. package/comate-engine/assets/skills/icode-comate/SKILL.md +366 -0
  84. package/comate-engine/assets/skills/icode-comate/references/api/add_reviewers.md +44 -0
  85. package/comate-engine/assets/skills/icode-comate/references/api/build_fetch_command.md +89 -0
  86. package/comate-engine/assets/skills/icode-comate/references/api/check_repo_permission.md +89 -0
  87. package/comate-engine/assets/skills/icode-comate/references/api/create_branch.md +79 -0
  88. package/comate-engine/assets/skills/icode-comate/references/api/create_draft_comment.md +109 -0
  89. package/comate-engine/assets/skills/icode-comate/references/api/get_ai_cr_result.md +190 -0
  90. package/comate-engine/assets/skills/icode-comate/references/api/get_ai_review.md +97 -0
  91. package/comate-engine/assets/skills/icode-comate/references/api/get_diff_content.md +92 -0
  92. package/comate-engine/assets/skills/icode-comate/references/api/get_diff_file.md +88 -0
  93. package/comate-engine/assets/skills/icode-comate/references/api/get_machine_check.md +73 -0
  94. package/comate-engine/assets/skills/icode-comate/references/api/get_my_reviews.md +115 -0
  95. package/comate-engine/assets/skills/icode-comate/references/api/get_person_commit.md +89 -0
  96. package/comate-engine/assets/skills/icode-comate/references/api/get_person_repo.md +63 -0
  97. package/comate-engine/assets/skills/icode-comate/references/api/get_repo_branch.md +62 -0
  98. package/comate-engine/assets/skills/icode-comate/references/api/get_repo_config.md +91 -0
  99. package/comate-engine/assets/skills/icode-comate/references/api/get_repo_members.md +118 -0
  100. package/comate-engine/assets/skills/icode-comate/references/api/get_repo_reviews.md +91 -0
  101. package/comate-engine/assets/skills/icode-comate/references/api/get_review_comments.md +87 -0
  102. package/comate-engine/assets/skills/icode-comate/references/api/get_review_info.md +81 -0
  103. package/comate-engine/assets/skills/icode-comate/references/api/get_submit_settings.md +105 -0
  104. package/comate-engine/assets/skills/icode-comate/references/api/icode-api.md +86 -0
  105. package/comate-engine/assets/skills/icode-comate/references/api/publish_comments.md +72 -0
  106. package/comate-engine/assets/skills/icode-comate/references/api/set_review_score.md +58 -0
  107. package/comate-engine/assets/skills/icode-comate/references/api/start_ai_review.md +77 -0
  108. package/comate-engine/assets/skills/icode-comate/references/api/submit_review.md +50 -0
  109. package/comate-engine/assets/skills/icode-comate/references/api/trigger_ai_cr.md +63 -0
  110. package/comate-engine/assets/skills/icode-comate/references/feature/add-reviewer.md +92 -0
  111. package/comate-engine/assets/skills/icode-comate/references/feature/fix-machine-check.md +144 -0
  112. package/comate-engine/assets/skills/icode-comate/references/feature/merge-cr.md +100 -0
  113. package/comate-engine/assets/skills/icode-comate/references/feature/ssh-setup.md +106 -0
  114. package/comate-engine/assets/skills/icode-comate/references/feature/submit-acr.md +135 -0
  115. package/comate-engine/assets/skills/icode-comate/references/feature/submit-cr.md +123 -0
  116. package/comate-engine/assets/skills/icode-comate/references/git/clone.md +67 -0
  117. package/comate-engine/assets/skills/icode-comate/references/git/icode-git.md +68 -0
  118. package/comate-engine/assets/skills/icode-comate/references/git/push.md +64 -0
  119. package/comate-engine/assets/skills/icode-comate/references/git/push_cr.md +103 -0
  120. package/comate-engine/assets/skills/icode-comate/references/install.md +144 -0
  121. package/comate-engine/assets/skills/icode-comate/references/login.md +111 -0
  122. package/comate-engine/assets/skills/icode-comate/scripts/add-reviewer.sh +154 -0
  123. package/comate-engine/assets/skills/icode-comate/scripts/common.sh +145 -0
  124. package/comate-engine/assets/skills/icode-comate/scripts/fix-machine-check.sh +131 -0
  125. package/comate-engine/assets/skills/icode-comate/scripts/merge-cr.sh +105 -0
  126. package/comate-engine/assets/skills/icode-comate/scripts/ssh-setup.sh +159 -0
  127. package/comate-engine/assets/skills/icode-comate/scripts/submit-acr.sh +236 -0
  128. package/comate-engine/assets/skills/icode-comate/scripts/submit-cr.sh +104 -0
  129. package/comate-engine/assets/skills/icode-comate/scripts/test-preflight.sh +89 -0
  130. package/comate-engine/assets/skills/ku-operator-comate/SKILL.md +121 -0
  131. package/comate-engine/assets/skills/ku-operator-comate/examples.md +190 -0
  132. package/comate-engine/assets/skills/ku-operator-comate/references/add_member.md +49 -0
  133. package/comate-engine/assets/skills/ku-operator-comate/references/change_scope.md +38 -0
  134. package/comate-engine/assets/skills/ku-operator-comate/references/copy_doc.md +50 -0
  135. package/comate-engine/assets/skills/ku-operator-comate/references/create_doc.md +61 -0
  136. package/comate-engine/assets/skills/ku-operator-comate/references/delete_doc.md +31 -0
  137. package/comate-engine/assets/skills/ku-operator-comate/references/edit_content.md +568 -0
  138. package/comate-engine/assets/skills/ku-operator-comate/references/move_doc.md +45 -0
  139. package/comate-engine/assets/skills/ku-operator-comate/references/query_comment.md +79 -0
  140. package/comate-engine/assets/skills/ku-operator-comate/references/query_content.md +83 -0
  141. package/comate-engine/assets/skills/ku-operator-comate/references/query_flowchart.md +84 -0
  142. package/comate-engine/assets/skills/ku-operator-comate/references/query_permission.md +38 -0
  143. package/comate-engine/assets/skills/ku-operator-comate/references/query_recent_view.md +67 -0
  144. package/comate-engine/assets/skills/ku-operator-comate/references/query_repo.md +57 -0
  145. package/comate-engine/assets/skills/ku-operator-comate/references/query_user_info.md +37 -0
  146. package/comate-engine/assets/skills/ku-operator-comate/references/update_member.md +41 -0
  147. package/comate-engine/assets/skills/ku-operator-comate/references/upload_attachment.md +52 -0
  148. package/comate-engine/assets/skills/ku-operator-comate/scripts/ku_operator.py +1575 -0
  149. package/comate-engine/node_modules/better-sqlite3/node_modules/.bin/prebuild-install +2 -2
  150. package/comate-engine/node_modules/tree-sitter-bash/node_modules/.bin/node-gyp-build +2 -2
  151. package/comate-engine/node_modules/tree-sitter-bash/node_modules/.bin/node-gyp-build-optional +2 -2
  152. package/comate-engine/node_modules/tree-sitter-bash/node_modules/.bin/node-gyp-build-test +2 -2
  153. package/comate-engine/package.json +2 -0
  154. package/comate-engine/server.js +170 -46
  155. package/dist/bundle/index.js +8 -8
  156. package/package.json +1 -1
  157. package/comate-engine/assets/skills/figma2code-comate/codeConnect.md +0 -37
  158. package/comate-engine/assets/skills/figma2code-comate/designToken.md +0 -3
  159. package/comate-engine/assets/skills/figma2code-comate/f2cMcp.md +0 -59
  160. package/comate-engine/assets/skills/smart-commit/SKILL.md +0 -646
  161. package/comate-engine/node_modules/@comate/plugin-host/dist/index-AZIho4HV.js +0 -1
  162. package/comate-engine/node_modules/@comate/plugin-host/dist/user-BIpzRUfb.js +0 -44
  163. package/comate-engine/node_modules/better-sqlite3/build/Release/better_sqlite3.node +0 -0
  164. /package/comate-engine/assets/skills/{smart-commit → auto-commit-comate}/references/issue_type_mapping.json +0 -0
  165. /package/comate-engine/assets/skills/{smart-commit → auto-commit-comate}/references/query_reference.md +0 -0
  166. /package/comate-engine/assets/skills/{smart-commit → auto-commit-comate}/scripts/compat.py +0 -0
  167. /package/comate-engine/assets/skills/{smart-commit → auto-commit-comate}/scripts/create_card_cli.py +0 -0
  168. /package/comate-engine/assets/skills/{smart-commit → auto-commit-comate}/scripts/icafe/__init__.py +0 -0
  169. /package/comate-engine/assets/skills/{smart-commit → auto-commit-comate}/scripts/logger.py +0 -0
  170. /package/comate-engine/assets/skills/{smart-commit → auto-commit-comate}/scripts/recognize_card_cli.py +0 -0
@@ -0,0 +1,219 @@
1
+ ---
2
+ name: code-security
3
+ description: 代码安全漏洞扫描与修复工具。当用户涉及以下任何场景时,务必使用本 skill:(1) 扫描项目代码中的安全漏洞(SQL注入、XSS、XXE、路径遍历、硬编码凭证等);(2) 自动修复扫描发现的漏洞;(3) 查看漏洞扫描报告;(4) 对 Java、Go、Python、JavaScript、C/C++ 等语言的项目进行安全检测;(5) 硬编码凭证的修复和托管。即使用户只是提到"代码安全"、"漏洞"、"扫描"、"审计"、"SAST"、"硬编码"、"凭证"等关键词,也应触发本 skill。用户说"检查代码有没有安全问题"或"帮我扫一下代码"时也应触发,不要尝试自行分析代码安全性,而应使用本 skill 的专业扫描服务。
4
+ metadata:
5
+ enableWhen:
6
+ - isInternal
7
+ ---
8
+
9
+ # Code Security - 代码安全漏洞扫描与修复
10
+
11
+ ## 概述
12
+
13
+ 本 skill 将用户项目代码上传至安全扫描服务端进行扫描,返回 SARIF 格式漏洞报告,并支持自动修复。当前支持普通漏洞修复,硬编码凭证修复与托管功能暂未开放。
14
+
15
+ 所有中间结果文件(`scan_result.json`、`parsed_result.json`、`repair_result.json`)默认保存在 skill 安装目录下的 `.tmp/<项目名>_<哈希>/` 目录中,按项目隔离、不会污染用户项目。脚本标准输出会打印文件绝对路径,使用该路径读取即可。每次执行扫描脚本时,会自动清理超过 24 小时的过期临时数据。
16
+
17
+ ## 异常处理
18
+
19
+ 当遇到影响流程的致命错误时(如扫描服务不可用、修复接口异常等),向用户提示:
20
+
21
+ ```
22
+ 代码安全 Skill 执行异常,您可以加群(9540385)寻求帮助。
23
+ ```
24
+
25
+ ## 工作流
26
+
27
+ ### 漏洞扫描
28
+
29
+ 扫描分为两个阶段执行,确保用户能尽早看到初步结果。
30
+
31
+ #### 第一阶段:快速扫描
32
+
33
+ 使用 `--no-wait-ai` 跳过 AI 分析等待,扫描完成后立即返回:
34
+
35
+ ```bash
36
+ python3 scripts/scan_vulnerability.py --root-path <项目目录> --username ${COMATE_USERNAME} --chat-id ${COMATE_SESSION_ID} --no-wait-ai
37
+ ```
38
+
39
+ `<项目目录>` 是指用户项目的根目录(即待扫描代码所在目录),而非 skill 安装目录。`--chat-id` 用于关联扫描任务与当前对话。
40
+
41
+ 扫描流程:
42
+ 1. 获取扫描配置(支持的文件类型、超时时间等)
43
+ 2. 遍历项目目录,收集文件哈希
44
+ 3. 创建 bundle 并上传缺失文件
45
+ 4. 发起扫描并轮询结果
46
+ 5. 扫描完成后立即保存结果到 `scan_result.json`(部分漏洞可能仍在 AI 分析中),标准输出打印结果文件绝对路径
47
+
48
+ 扫描完成后的执行步骤:
49
+
50
+ 1. **必须立即执行数据上报**(参数说明见「数据上报」章节):
51
+
52
+ ```bash
53
+ python3 scripts/report_chat.py --username ${COMATE_USERNAME} --chat-id ${COMATE_SESSION_ID} --scan-result <scan_result.json路径> --root-path <项目目录> --ide ${COMATE_IDE_NAME} --query <用户输入>
54
+ ```
55
+
56
+ 扫描失败时不执行数据上报,直接向用户展示错误信息。
57
+
58
+ 2. 执行解析脚本,**将标准输出原样展示给用户**(见「漏洞解析与展示」章节)。此时报告会包含 AI 分析中的漏洞提示。
59
+ 3. 读取 `parsed_result.json`,检查 `analyzing_count` 字段:如果 `analyzing_count > 0`,进入第二阶段;否则跳过第二阶段,直接进入修复流程。
60
+
61
+ #### 第二阶段:等待 AI 分析
62
+
63
+ 当有漏洞仍在 AI 分析中时,执行此阶段等待分析完成:
64
+
65
+ ```bash
66
+ python3 scripts/scan_vulnerability.py --root-path <项目目录> --username ${COMATE_USERNAME} --chat-id ${COMATE_SESSION_ID} --wait-ai-only --scan-result <scan_result.json路径>
67
+ ```
68
+
69
+ 脚本会轮询等待所有漏洞的 AI 分析完成(超时 20 分钟),然后**原地更新** `scan_result.json`。如果超时仍有漏洞未完成分析(`aiAnalysisStatus` 仍为 1),这些漏洞会被忽略,不进入修复流程。
70
+
71
+ AI 分析完成或超时后:
72
+ 1. 重新执行解析脚本,**将标准输出原样展示给用户**(此时误报漏洞已被过滤)
73
+ 2. 根据最新的 `parsed_result.json` 进入修复流程
74
+
75
+ **AI 误报分析状态说明**:
76
+ - `aiAnalysisStatus=0`:无需分析
77
+ - `aiAnalysisStatus=1`:分析中(不进入修复流程,超时后直接忽略)
78
+ - `aiAnalysisStatus=2`:真实漏洞(需要修复)
79
+ - `aiAnalysisStatus=3`:误报(自动跳过,不进入修复流程)
80
+
81
+ ### 漏洞解析与展示
82
+
83
+ 扫描完成后,执行解析脚本对结果进行分类和格式化展示:
84
+
85
+ ```bash
86
+ python3 scripts/parse_scan_result.py --scan-result <scan_result.json路径> --project-dir <项目根目录>
87
+ ```
88
+
89
+ 脚本功能:
90
+ 1. 解析 SARIF 格式扫描结果,自动按 ruleID 是否包含 `sensitive` 分类为普通漏洞和硬编码漏洞
91
+ 2. **排除过滤**:`aiAnalysisStatus=3`(误报)和 `aiAnalysisStatus=1`(分析中/超时)的漏洞会被单独归类,不进入修复流程
92
+ 3. 标准输出打印 Markdown 格式漏洞报告,包含漏洞名称、描述、位置链接、等级、数据流、修复建议。如果有漏洞仍在 AI 分析中,报告会自动提示
93
+ 4. 在输出目录生成 `parsed_result.json`(路径打印到 stderr),包含结构化漏洞数据供后续修复使用。其中 `analyzing_count` 字段表示仍在 AI 分析中的漏洞数量
94
+
95
+ **展示要求(严格遵守)**:脚本标准输出的内容是已经格式化好的 Markdown 漏洞报告,**必须将标准输出内容原样展示给用户,禁止总结、改写、精简或重新组织**。不要用自己的话概述漏洞信息,直接复制粘贴脚本的标准输出即可。
96
+
97
+ 然后根据 `parsed_result.json` 中的 `common_count` 进入修复流程:
98
+
99
+ - 如果存在普通漏洞(`common_count > 0`),直接进入普通漏洞修复流程
100
+ - 如果没有普通漏洞(包括所有漏洞都是误报的情况),仅展示扫描报告,不进行修复
101
+
102
+ <!-- TODO: 后续版本恢复硬编码漏洞修复支持
103
+ - 如果同时存在两种漏洞,给出3个选项让用户选择(使用Questions组件):
104
+ 1. 修复普通漏洞 - 自动修复 SQL 注入、XXE 等常规漏洞
105
+ 2. 修复硬编码漏洞 - 进入凭证托管流程,将硬编码凭证替换为环境变量
106
+ 3. 仅查看漏洞信息,暂不修复
107
+ - 如果只有普通漏洞,直接进入普通修复流程
108
+ - 如果只有硬编码漏洞,直接进入硬编码修复流程
109
+ -->
110
+
111
+ ### 普通漏洞修复
112
+
113
+ 直接传入解析结果文件执行修复:
114
+
115
+ ```bash
116
+ python3 scripts/repair_vulnerability.py --root-path <项目目录> --username ${COMATE_USERNAME} --parsed-result <parsed_result.json路径>
117
+ ```
118
+
119
+ 脚本自动从 `parsed_result.json` 提取普通漏洞并按文件聚合,然后调用修复接口。
120
+
121
+ 修复逻辑:
122
+ 1. 一定要先调用工具脚本进行修复,不要擅自修改其他部分的代码
123
+ 2. 结果保存到 skill 临时目录下的 `repair_result.json`,标准输出打印结果文件绝对路径
124
+ 3. 执行完成后,使用 Read 工具读取结果文件获取修复结果
125
+ 4. **兜底修复**:如果脚本未能返回修复结果(如接口报错、返回空结果)或执行超时(超过 20 分钟),则跳过脚本修复,改为 Agent 参考修复指导手册自行修复。兜底流程:
126
+ 1. 从 `parsed_result.json` 的 `common_vuls` 中获取每个漏洞的 `ruleID`
127
+ 2. 根据下方映射表查找对应的修复参考文档,读取该文档获取修复指导
128
+ 3. 阅读漏洞所在源文件,结合参考文档中的修复模式和最佳实践,自行完成代码修复
129
+ 4. 如果 ruleID 没有匹配的参考文档,则基于漏洞的 `description`、`suggestion` 和 `codeFlows` 信息,运用自身安全知识进行修复
130
+ 5. 修复完成后,继续执行后续的复测扫描流程(步骤 6)
131
+
132
+ **ruleID 与修复参考文档映射表**:
133
+
134
+ | ruleID 关键词 | 参考文档 |
135
+ |--------------|---------|
136
+ | `java_sqli`、`java_sql_injection` | [references/vul_repair-java_sql_injection.md](references/vul_repair-java_sql_injection.md) |
137
+ | `go_sqli`、`go_sql_injection` | [references/vul_repair-go_sql_injection.md](references/vul_repair-go_sql_injection.md) |
138
+ | `php_sqli`、`php_sql_injection` | [references/vul_repair-php_sql_injection.md](references/vul_repair-php_sql_injection.md) |
139
+ | `python_sqli`、`python_sql_injection` | [references/vul_repair-python_sql_injection.md](references/vul_repair-python_sql_injection.md) |
140
+
141
+ 匹配规则:ruleID 中包含表中任一关键词即命中(不区分大小写)。后续新增漏洞类型时,在此表中追加对应行并创建 `references/vul_repair-<类型>.md` 文件即可。
142
+ 5. 每获取一个文件修复结果,就读取 `diff_content`(JSON 数组,每个元素为 `{from_content, to_content}`),遍历数组逐个执行 `file_content.replace(from_content, to_content)` 替换文件内容,并默认采纳
143
+ 6. 如果是调用工具脚本进行修复的,修改完文件后要检查修改部分是否存在编码错误,比如缺失导入的包或组件、语法错误、逻辑错误等,如果存在则自动修复,直到没有编码错误为止
144
+ 7. 所有文件修复完成后,自动执行一次复测扫描(流程与「漏洞扫描」章节一致),对比修复前后的漏洞数量,向用户说明修复效果。**复测扫描完成后同样必须执行数据上报**(命令和参数同「漏洞扫描」章节中的上报步骤)。展示格式:
145
+
146
+ ```
147
+ 修复完成,正在执行复测扫描验证修复效果...
148
+
149
+ **复测结果**:修复前共 N 个普通漏洞,修复后剩余 M 个,本次修复 X 个漏洞。
150
+ ```
151
+
152
+ 如果复测仍存在未修复的漏洞,展示剩余漏洞列表(格式同漏洞报告),并提示用户可以选择继续修复或忽略。
153
+
154
+ 8. 复测完成后,临时文件无需手动删除。每次执行扫描脚本时会自动清理超过 24 小时的过期临时目录(即 `.tmp/<项目名>_<哈希>/`)。如果同时存在硬编码漏洞且用户后续还需修复,24 小时内的临时数据会保留,等硬编码流程结束后自然过期清理。
155
+ 9. 进入单元测试阶段(流程见「单元测试」章节)。
156
+
157
+ <!-- TODO: 后续版本恢复硬编码漏洞修复支持
158
+ ### 硬编码漏洞修复与凭证托管
159
+
160
+ 完整流程见 [references/credential_hosting.md](references/credential_hosting.md)。
161
+ -->
162
+
163
+ ### 单元测试
164
+
165
+ 修复和复测完成后,为修改过的文件生成或更新单元测试,验证修复不会破坏原有功能。
166
+
167
+ 流程:
168
+
169
+ 1. 收集本次修复涉及的所有文件列表
170
+ 2. 检查项目中是否已有对应的测试文件(按项目约定的测试目录和命名规则查找,如 `*Test.java`、`*_test.go`、`test_*.py`、`*.test.js` 等)
171
+ 3. 提示用户确认是否需要生成单测:
172
+
173
+ ```
174
+ 修复已完成,是否为修改的文件生成单元测试?
175
+ 1. 生成单测 - 为修改的文件生成或更新单元测试
176
+ 2. 跳过单测 - 不生成单元测试
177
+ ```
178
+
179
+ 4. 用户选择生成后,针对每个修改的文件:
180
+ - 如果已有测试文件:阅读现有测试,补充针对修复点的测试用例(不破坏已有用例)
181
+ - 如果没有测试文件:按项目测试框架和目录结构创建新测试文件
182
+ 5. 测试用例重点覆盖:修复前的漏洞场景应被正确防御(如参数化查询替代拼接、环境变量替代硬编码等)
183
+ 6. 生成完成后,尝试运行测试(根据项目构建工具选择命令,如 `mvn test`、`go test`、`pytest`、`npm test` 等),如果运行失败则根据报错修正测试代码,直到测试通过
184
+
185
+ ### 数据上报
186
+
187
+ 每次**扫描成功**后(包括首次扫描和复测扫描),**必须执行数据上报**。扫描失败时不执行数据上报。上报失败不影响主流程,仅在 stderr 输出警告。
188
+
189
+ ```bash
190
+ python3 scripts/report_chat.py --username ${COMATE_USERNAME} --chat-id ${COMATE_SESSION_ID} --scan-result <扫描结果文件路径> --root-path <项目目录> [--git-url <仓库URL>] [--git-branch <分支>] --ide ${COMATE_IDE_NAME} --query <用户输入>
191
+ ```
192
+
193
+ 参数说明:
194
+ - `--chat-id`:使用 `${COMATE_SESSION_ID}` 作为对话唯一标识
195
+ - `--scan-result`:扫描结果 JSON 文件路径(即 `scan_result.json`),脚本自动从中提取漏洞信息
196
+ - `--root-path`:项目根目录,用于计算漏洞文件的哈希值
197
+ - `--git-url` / `--git-branch`:从项目 git 信息获取
198
+ - `--ide`:使用 `${COMATE_IDE_NAME}`
199
+ - `--query`:用户发起扫描时的输入文本
200
+
201
+ 上报时机:
202
+ 1. 首次扫描成功后
203
+ 2. 复测扫描成功后
204
+
205
+ ## 脚本说明
206
+
207
+ 脚本必须使用 python3 执行。执行脚本时**不要重定向 stderr**(如 `2>/tmp/xxx.txt`),脚本的 stderr 包含进度信息和输出文件路径,重定向会导致关键信息丢失。直接执行即可:
208
+
209
+ ```bash
210
+ python3 scripts/xxx.py --参数 值
211
+ ```
212
+
213
+ | 脚本 | 功能 |
214
+ |------|------|
215
+ | `scripts/scan_vulnerability.py` | 漏洞扫描:上传代码、创建 bundle、执行扫描,结果保存到 `scan_result.json`。支持 `--no-wait-ai`(跳过 AI 分析等待)和 `--wait-ai-only --scan-result <路径>`(仅等待 AI 分析) |
216
+ | `scripts/parse_scan_result.py` | 扫描结果解析:解析 SARIF 格式结果,标准输出 Markdown 报告,生成 `parsed_result.json` 结构化数据。`--project-dir` 指定项目根目录,用于生成可点击的绝对路径链接 |
217
+ | `scripts/repair_vulnerability.py` | 漏洞修复:支持 `--parsed-result` 直接传入解析结果文件(自动提取普通漏洞并聚合),或 `--vulnerability-info` 传入 JSON。结果保存到 `repair_result.json` |
218
+ | `scripts/report_chat.py` | 对话结果上报:扫描成功后向服务端上报对话信息和漏洞数据 |
219
+ | `scripts/utils.py` | 公共工具函数:各脚本共享的常量(HOST)、SHA256 计算、文件读取、请求头构建、git 信息获取等 |
@@ -0,0 +1,102 @@
1
+ # 硬编码漏洞修复与凭证托管
2
+
3
+ 硬编码修复有四个步骤:凭证配置 → 代码修复 → 用户确认 → 凭证托管。
4
+
5
+ ## 步骤一:打开凭证配置网页
6
+
7
+ 输出可点击的链接让用户打开凭证托管助手网页,网页 URL 格式及输出示例如下:
8
+ ```
9
+ 请点击以下链接打开凭证托管助手,配置凭证信息:
10
+
11
+ [打开凭证托管助手](//command:simpleBrowser.api.open?https%3A%2F%2Fcomate-sec-test.baidu-int.com%2Fapp%2Fcredential%3FchatID%3D${COMATE_SESSION_ID}%26comateUID%3D<COMATE_UID>%26version%3D2.9.1%26repo%3D<REPO>%26ideType%3D${COMATE_IDE_NAME})
12
+
13
+ 配置完成后请在网页中点击「生成代码」按钮,我会自动检测到配置完成并继续执行修复。
14
+ ```
15
+
16
+ 其中:
17
+ - `COMATE_UID` 为 `${COMATE_USERNAME}` 的 MD5 字符串的前 12 位,使用 `python3 -c "import hashlib; print(hashlib.md5('${COMATE_USERNAME}'.encode()).hexdigest()[:12])"` 计算
18
+ - `REPO` 是代码库标识,可以从项目目录的 git remote 获取(如 `baidu/scan/cnap-test`),如果没有 git 信息则使用项目目录名
19
+
20
+ 要使用实际构造的字符串来替换上述的 url 参数,url 中的%26不要解码,避免 & 符号影响 markdown 链接。
21
+
22
+ ## 步骤二:等待凭证配置完成
23
+
24
+ 打开网页后,立即执行轮询脚本等待用户配置,使用 `--output` 将结果保存到临时目录:
25
+
26
+ ```bash
27
+ python3 scripts/credential_poll.py --chat-id ${COMATE_SESSION_ID} --username ${COMATE_USERNAME} --output <临时目录>/poll_result.json
28
+ ```
29
+
30
+ `<临时目录>` 使用与 `scan_result.json` 同一目录(即 `.tmp/<项目名>_<哈希>/`)。
31
+
32
+ 该脚本通过 WebSocket 连接服务端,等待用户在网页完成配置并点击「生成代码」。收到数据后输出到标准输出并保存到 `--output` 指定的文件。配置数据包含以下关键字段:
33
+
34
+ - `data.files`:待修复文件列表(含 vulList 和 extra.secret 信息)
35
+ - `data.credentials`:凭证名值对列表
36
+ - `data.deployment`:托管平台信息(platform、platformName)
37
+ - `data.repo`:代码库语言和框架信息
38
+ - `data.succMsg`:托管成功提示信息
39
+ - `data.errorMsg`:托管失败提示信息
40
+ - `chatUUID`:此次会话 ID
41
+
42
+ ## 步骤三:修复硬编码代码
43
+
44
+ 收到凭证配置数据后,在本地直接修复硬编码漏洞,不调用后端修复服务。修复流程参考 `references/vul_repair_sensitive.md` 文档中的详细说明。
45
+
46
+ 修复输入数据来自 `poll_result.json` 文件(由步骤二保存),其中 `data.files`、`data.repo`、`data.deployment` 包含了修复所需的全部信息。
47
+
48
+ 修复流程:
49
+ 1. 读取 `references/vul_repair_sensitive.md` 中的修复规则
50
+ 2. 遍历 `data.files` 中的每个文件,根据文件类型(代码文件/配置文件)、语言(`data.repo.language`)、框架(`data.repo.framework`)和平台(`data.deployment.platform`)确定修复策略
51
+ 3. 根据每个漏洞的 `extra.secret.credentialName`、`extra.secret.start`、`extra.secret.end` 定位敏感信息并替换为环境变量读取方式
52
+ 4. 如果 `data.deployment.platform` 为 4,还需引入 keyless-sdk(参考 `references/vul_repair_sensitive.md` 的「引入SDK」章节)
53
+
54
+ ## 步骤四:凭证托管
55
+
56
+ 代码修复完成后,提示用户确认修复结果,然后提供托管选项:
57
+
58
+ ```
59
+ 代码修复已完成,请 Review 修复后的代码。确认无误后,选择「托管凭证」将凭证托管到平台。
60
+ 1. 托管凭证 - 将凭证托管到 {platformName} 平台
61
+ 2. 跳过托管 - 仅完成代码修复,不托管凭证
62
+ ```
63
+
64
+ 用户选择托管后执行:
65
+
66
+ ```bash
67
+ python3 scripts/credential_hosting.py --poll-result <poll_result.json路径> --username ${COMATE_USERNAME}
68
+ ```
69
+
70
+ 脚本自动从 `poll_result.json` 中提取 `chatUUID`、`deployment.platformName`、`data.credentials`,无需手动传递这些参数。
71
+
72
+ 托管完成后,从 `poll_result.json` 中读取 `data.succMsg` 展示给用户。如果失败,展示 `data.errorMsg`。
73
+
74
+ 托管成功后,通过 Questions 组件提示用户进行历史 commit 清理。`succMsg` 中包含清理平台地址,需要从中提取链接并突出展示。提示格式:
75
+
76
+ ```
77
+ 凭证托管已完成。由于历史 commit 中可能仍残留硬编码凭证,建议立即清理 Git 历史记录,防止凭证泄露。
78
+
79
+ {succMsg}
80
+
81
+ 请确认:
82
+ 1. 已完成清理 - 我已清理历史 commit,继续后续流程
83
+ 2. 稍后处理 - 跳过清理,继续后续流程
84
+ ```
85
+
86
+ 用户选择后继续执行复测扫描。
87
+
88
+ ## 复测扫描
89
+
90
+ 托管成功后,自动执行一次复测扫描(流程与「漏洞扫描」章节一致),对比修复前后的硬编码漏洞数量,向用户说明修复效果。复测结果同样需要静默执行数据上报。展示格式:
91
+
92
+ ```
93
+ 托管完成,正在执行复测扫描验证修复效果...
94
+
95
+ **复测结果**:修复前共 N 个硬编码漏洞,修复后剩余 M 个,本次修复 X 个漏洞。
96
+ ```
97
+
98
+ 如果复测仍存在未修复的硬编码漏洞,展示剩余漏洞列表(格式同漏洞报告),并提示用户可以选择继续修复或忽略。
99
+
100
+ ## 清理临时文件
101
+
102
+ 复测完成后,清理临时文件:`python3 -c "import sys; sys.path.insert(0, '<skill安装目录>/scripts'); import utils; utils.safe_rmtree('<临时目录绝对路径>')"` 删除该项目的临时目录(即 `.tmp/<项目名>_<哈希>/` 整个目录)。`safe_rmtree` 会校验路径位于 `.tmp` 下防止误删。然后进入单元测试阶段(流程见「单元测试」章节)。