@comate/zulu 1.4.0-beta.2 → 1.4.0-beta.4

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 (206) hide show
  1. package/comate-engine/assets/skills/auto-commit/SKILL.md +241 -0
  2. package/comate-engine/assets/skills/auto-commit/references/data_structures.md +183 -0
  3. package/comate-engine/assets/skills/auto-commit/references/interaction_instruction.md +220 -0
  4. package/comate-engine/assets/skills/auto-commit/references/issue_type_mapping.json +19 -0
  5. package/comate-engine/assets/skills/auto-commit/references/query_reference.md +176 -0
  6. package/comate-engine/assets/skills/auto-commit/scripts/build_git_commit_payload.py +195 -0
  7. package/comate-engine/assets/skills/auto-commit/scripts/build_icafe_cards_payload.py +80 -0
  8. package/comate-engine/assets/skills/auto-commit/scripts/cache_manager.py +69 -0
  9. package/comate-engine/assets/skills/auto-commit/scripts/create_card_cli.py +67 -0
  10. package/comate-engine/assets/skills/auto-commit/scripts/git_diff_cli.py +201 -0
  11. package/comate-engine/assets/skills/auto-commit/scripts/git_utils.py +230 -0
  12. package/comate-engine/assets/skills/auto-commit/scripts/icafe/__init__.py +66 -0
  13. package/comate-engine/assets/skills/auto-commit/scripts/icafe/client.py +473 -0
  14. package/comate-engine/assets/skills/auto-commit/scripts/icafe/farseer.py +52 -0
  15. package/comate-engine/assets/skills/auto-commit/scripts/icafe/matching.py +784 -0
  16. package/comate-engine/assets/skills/auto-commit/scripts/logger.py +32 -0
  17. package/comate-engine/assets/skills/auto-commit/scripts/match_card_cli.py +41 -0
  18. package/comate-engine/assets/skills/auto-commit/scripts/payload_validators.py +309 -0
  19. package/comate-engine/assets/skills/auto-commit/scripts/recognize_card_cli.py +63 -0
  20. package/comate-engine/assets/skills/{automation-browser-comate → automation-browser}/SKILL.md +1 -0
  21. package/comate-engine/assets/skills/{cnap-comate → cnap}/SKILL.md +1 -0
  22. package/comate-engine/assets/skills/code-review/SKILL.md +202 -0
  23. package/comate-engine/assets/skills/code-review/agents/correctness-reviewer.md +62 -0
  24. package/comate-engine/assets/skills/code-review/agents/custom-reviewer.md +53 -0
  25. package/comate-engine/assets/skills/code-review/agents/meta-reviewer.md +84 -0
  26. package/comate-engine/assets/skills/code-review/agents/reliability-reviewer.md +72 -0
  27. package/comate-engine/assets/skills/code-review/agents/reuse-reviewer.md +101 -0
  28. package/comate-engine/assets/skills/code-review/agents/style-reviewer.md +65 -0
  29. package/comate-engine/assets/skills/code-review/evals/SKILL.md +334 -0
  30. package/comate-engine/assets/skills/code-review/evals/agents/gt-generator.md +76 -0
  31. package/comate-engine/assets/skills/code-review/evals/agents/miner.md +87 -0
  32. package/comate-engine/assets/skills/code-review/evals/agents/score-judge.md +168 -0
  33. package/comate-engine/assets/skills/code-review/evals/references/cli-query-template.md +114 -0
  34. package/comate-engine/assets/skills/code-review/evals/references/gt-schema.md +77 -0
  35. package/comate-engine/assets/skills/code-review/references/custom-rules/RULE_TEMPLATE.md +141 -0
  36. package/comate-engine/assets/skills/code-review/references/dispatch-template.md +142 -0
  37. package/comate-engine/assets/skills/code-review/references/output-schema.md +197 -0
  38. package/comate-engine/assets/skills/code-review/references/report-format.md +41 -0
  39. package/comate-engine/assets/skills/code-review/references/rules/Go/GO_AUTH_RULES.md +29 -0
  40. package/comate-engine/assets/skills/code-review/references/rules/Go/GO_CORRECTNESS_RULES.md +111 -0
  41. package/comate-engine/assets/skills/code-review/references/rules/Go/GO_RESOURCE_CONCURRENCY_RULES.md +190 -0
  42. package/comate-engine/assets/skills/code-review/references/rules/Go/GO_STYLE_RULES.md +354 -0
  43. package/comate-engine/assets/skills/code-review/references/rules/Java/JAVA_AUTH_RULES.md +34 -0
  44. package/comate-engine/assets/skills/code-review/references/rules/Java/JAVA_CORRECTNESS_RULES.md +207 -0
  45. package/comate-engine/assets/skills/code-review/references/rules/Java/JAVA_RESOURCE_CONCURRENCY_RULES.md +220 -0
  46. package/comate-engine/assets/skills/code-review/references/rules/Java/JAVA_STYLE_RULES.md +306 -0
  47. package/comate-engine/assets/skills/code-review/references/rules/Js/JS_AUTH_RULES.md +48 -0
  48. package/comate-engine/assets/skills/code-review/references/rules/Js/JS_CORRECTNESS_RULES.md +364 -0
  49. package/comate-engine/assets/skills/code-review/references/rules/Js/JS_RESOURCE_CONCURRENCY_RULES.md +180 -0
  50. package/comate-engine/assets/skills/code-review/references/rules/Js/JS_STYLE_RULES.md +350 -0
  51. package/comate-engine/assets/skills/code-review/references/rules/Python/PYTHON_AUTH_RULES.md +38 -0
  52. package/comate-engine/assets/skills/code-review/references/rules/Python/PYTHON_CORRECTNESS_RULES.md +255 -0
  53. package/comate-engine/assets/skills/code-review/references/rules/Python/PYTHON_RESOURCE_CONCURRENCY_RULES.md +180 -0
  54. package/comate-engine/assets/skills/code-review/references/rules/Python/PYTHON_STYLE_RULES.md +195 -0
  55. package/comate-engine/assets/skills/code-review/references/telemetry.md +27 -0
  56. package/comate-engine/assets/skills/{code-security-comate → code-security}/SKILL.md +1 -0
  57. package/comate-engine/assets/skills/{comate-docs-comate → comate-docs}/SKILL.md +1 -1
  58. package/comate-engine/assets/skills/create-automation-tasks-comate/SKILL.md +300 -0
  59. package/comate-engine/assets/skills/create-automation-tasks-comate/references/backend_dev.md +109 -0
  60. package/comate-engine/assets/skills/create-automation-tasks-comate/references/env_setup.md +130 -0
  61. package/comate-engine/assets/skills/create-automation-tasks-comate/references/frontend_dev.md +74 -0
  62. package/comate-engine/assets/skills/create-automation-tasks-comate/references/git_operations.md +88 -0
  63. package/comate-engine/assets/skills/create-automation-tasks-comate/references/long_running_task.md +96 -0
  64. package/comate-engine/assets/skills/create-automation-tasks-comate/references/testing_strategy.md +94 -0
  65. package/comate-engine/assets/skills/create-automation-tasks-comate/scripts/check_config.py +397 -0
  66. package/comate-engine/assets/skills/{create-image-comate → create-image}/SKILL.md +14 -9
  67. package/comate-engine/assets/skills/{create-rule-comate → create-rule}/SKILL.md +1 -0
  68. package/comate-engine/assets/skills/{create-skill-comate → create-skill}/SKILL.md +2 -3
  69. package/comate-engine/assets/skills/{figma2code-comate → figma2code}/SKILL.md +1 -0
  70. package/comate-engine/assets/skills/{get-ugate-token-comate → get-ugate-token}/SKILL.md +97 -13
  71. package/comate-engine/assets/skills/get-ugate-token/getUgateToken.py +244 -0
  72. package/comate-engine/assets/skills/{icafe-comate → icafe}/SKILL.md +1 -13
  73. package/comate-engine/assets/skills/{icode-comate → icode}/SKILL.md +1 -0
  74. package/comate-engine/fallbackServer.js +1 -1
  75. package/comate-engine/node_modules/@baidu/comate-browser-use/dist/launch-chrome/index.js +1 -1
  76. package/comate-engine/node_modules/@baidu/comate-browser-use/package.json +5 -5
  77. package/comate-engine/node_modules/@comate/plugin-shared-internals/dist/index.js +3 -3
  78. package/comate-engine/package.json +1 -1
  79. package/comate-engine/server.js +137 -77
  80. package/dist/bundle/index.js +20 -9
  81. package/package.json +1 -1
  82. package/comate-engine/assets/skills/get-ugate-token-comate/getUgateToken.py +0 -150
  83. /package/comate-engine/assets/skills/{cnap-comate → cnap}/references/cases.md +0 -0
  84. /package/comate-engine/assets/skills/{cnap-comate → cnap}/references/deploy-troubleshoot.md +0 -0
  85. /package/comate-engine/assets/skills/{cnap-comate → cnap}/references/install.md +0 -0
  86. /package/comate-engine/assets/skills/{cnap-comate → cnap}/references/kubectl.md +0 -0
  87. /package/comate-engine/assets/skills/{cnap-comate → cnap}/references/login.md +0 -0
  88. /package/comate-engine/assets/skills/{cnap-comate → cnap}/references/oncall.md +0 -0
  89. /package/comate-engine/assets/skills/{cnap-comate → cnap}/scripts/install_cnap_cli.sh +0 -0
  90. /package/comate-engine/assets/skills/{code-security-comate → code-security}/references/credential_hosting.md +0 -0
  91. /package/comate-engine/assets/skills/{code-security-comate → code-security}/references/vul_repair-go_sql_injection.md +0 -0
  92. /package/comate-engine/assets/skills/{code-security-comate → code-security}/references/vul_repair-java_sql_injection.md +0 -0
  93. /package/comate-engine/assets/skills/{code-security-comate → code-security}/references/vul_repair-php_sql_injection.md +0 -0
  94. /package/comate-engine/assets/skills/{code-security-comate → code-security}/references/vul_repair-python_sql_injection.md +0 -0
  95. /package/comate-engine/assets/skills/{code-security-comate → code-security}/references/vul_repair_sensitive.md +0 -0
  96. /package/comate-engine/assets/skills/{code-security-comate → code-security}/scripts/credential_hosting.py +0 -0
  97. /package/comate-engine/assets/skills/{code-security-comate → code-security}/scripts/credential_poll.py +0 -0
  98. /package/comate-engine/assets/skills/{code-security-comate → code-security}/scripts/http_client.py +0 -0
  99. /package/comate-engine/assets/skills/{code-security-comate → code-security}/scripts/parse_scan_result.py +0 -0
  100. /package/comate-engine/assets/skills/{code-security-comate → code-security}/scripts/repair_vulnerability.py +0 -0
  101. /package/comate-engine/assets/skills/{code-security-comate → code-security}/scripts/report_chat.py +0 -0
  102. /package/comate-engine/assets/skills/{code-security-comate → code-security}/scripts/scan_vulnerability.py +0 -0
  103. /package/comate-engine/assets/skills/{code-security-comate → code-security}/scripts/utils.py +0 -0
  104. /package/comate-engine/assets/skills/{comate-docs-comate → comate-docs}/references/doc-map-extended.md +0 -0
  105. /package/comate-engine/assets/skills/{comate-docs-comate → comate-docs}/references/models-and-billing.md +0 -0
  106. /package/comate-engine/assets/skills/{comate-docs-comate → comate-docs}/references/product-overview.md +0 -0
  107. /package/comate-engine/assets/skills/{create-skill-comate → create-skill}/LICENSE.txt +0 -0
  108. /package/comate-engine/assets/skills/{create-skill-comate → create-skill}/agents/analyzer.md +0 -0
  109. /package/comate-engine/assets/skills/{create-skill-comate → create-skill}/agents/comparator.md +0 -0
  110. /package/comate-engine/assets/skills/{create-skill-comate → create-skill}/agents/grader.md +0 -0
  111. /package/comate-engine/assets/skills/{create-skill-comate → create-skill}/assets/eval_review.html +0 -0
  112. /package/comate-engine/assets/skills/{create-skill-comate → create-skill}/eval-viewer/generate_review.py +0 -0
  113. /package/comate-engine/assets/skills/{create-skill-comate → create-skill}/eval-viewer/viewer.html +0 -0
  114. /package/comate-engine/assets/skills/{create-skill-comate → create-skill}/references/schemas.md +0 -0
  115. /package/comate-engine/assets/skills/{create-skill-comate → create-skill}/scripts/__init__.py +0 -0
  116. /package/comate-engine/assets/skills/{create-skill-comate → create-skill}/scripts/__pycache__/__init__.cpython-311.pyc +0 -0
  117. /package/comate-engine/assets/skills/{create-skill-comate → create-skill}/scripts/__pycache__/aggregate_benchmark.cpython-311.pyc +0 -0
  118. /package/comate-engine/assets/skills/{create-skill-comate → create-skill}/scripts/aggregate_benchmark.py +0 -0
  119. /package/comate-engine/assets/skills/{create-skill-comate → create-skill}/scripts/generate_report.py +0 -0
  120. /package/comate-engine/assets/skills/{create-skill-comate → create-skill}/scripts/package_skill.py +0 -0
  121. /package/comate-engine/assets/skills/{create-skill-comate → create-skill}/scripts/quick_validate.py +0 -0
  122. /package/comate-engine/assets/skills/{create-skill-comate → create-skill}/scripts/utils.py +0 -0
  123. /package/comate-engine/assets/skills/{create-subagent-comate → create-subagent}/SKILL.md +0 -0
  124. /package/comate-engine/assets/skills/{figma2code-comate → figma2code}/references/codeConnect.md +0 -0
  125. /package/comate-engine/assets/skills/{figma2code-comate → figma2code}/references/designToken.md +0 -0
  126. /package/comate-engine/assets/skills/{figma2code-comate → figma2code}/references/image2design.md +0 -0
  127. /package/comate-engine/assets/skills/{find-skills-comate → find-skills}/SKILL.md +0 -0
  128. /package/comate-engine/assets/skills/{find-skills-comate → find-skills}/scripts/fetch_skills.py +0 -0
  129. /package/comate-engine/assets/skills/{find-skills-comate → find-skills}/scripts/get_download_url.py +0 -0
  130. /package/comate-engine/assets/skills/{find-skills-comate → find-skills}/scripts/install_skill.py +0 -0
  131. /package/comate-engine/assets/skills/{find-skills-comate → find-skills}/scripts/preview_skill.py +0 -0
  132. /package/comate-engine/assets/skills/{icafe-comate → icafe}/references/ai-workflows.md +0 -0
  133. /package/comate-engine/assets/skills/{icafe-comate → icafe}/references/commands.md +0 -0
  134. /package/comate-engine/assets/skills/{icafe-comate → icafe}/references/error-handling.md +0 -0
  135. /package/comate-engine/assets/skills/{icafe-comate → icafe}/references/git-auto-bindcard-workflow.md +0 -0
  136. /package/comate-engine/assets/skills/{icafe-comate → icafe}/references/git-bindcard-workflow.md +0 -0
  137. /package/comate-engine/assets/skills/{icafe-comate → icafe}/references/iql-syntax.md +0 -0
  138. /package/comate-engine/assets/skills/{icafe-comate → icafe}/references/platform-concepts.md +0 -0
  139. /package/comate-engine/assets/skills/{icafe-comate → icafe}/references/smart-create-workflow.md +0 -0
  140. /package/comate-engine/assets/skills/{icafe-comate → icafe}/references/smart-find-workflow.md +0 -0
  141. /package/comate-engine/assets/skills/{icafe-comate → icafe}/references/smart-update-workflow.md +0 -0
  142. /package/comate-engine/assets/skills/{icode-comate → icode}/references/api/add_reviewers.md +0 -0
  143. /package/comate-engine/assets/skills/{icode-comate → icode}/references/api/build_fetch_command.md +0 -0
  144. /package/comate-engine/assets/skills/{icode-comate → icode}/references/api/check_repo_permission.md +0 -0
  145. /package/comate-engine/assets/skills/{icode-comate → icode}/references/api/create_branch.md +0 -0
  146. /package/comate-engine/assets/skills/{icode-comate → icode}/references/api/create_draft_comment.md +0 -0
  147. /package/comate-engine/assets/skills/{icode-comate → icode}/references/api/get_ai_cr_result.md +0 -0
  148. /package/comate-engine/assets/skills/{icode-comate → icode}/references/api/get_ai_review.md +0 -0
  149. /package/comate-engine/assets/skills/{icode-comate → icode}/references/api/get_diff_content.md +0 -0
  150. /package/comate-engine/assets/skills/{icode-comate → icode}/references/api/get_diff_file.md +0 -0
  151. /package/comate-engine/assets/skills/{icode-comate → icode}/references/api/get_machine_check.md +0 -0
  152. /package/comate-engine/assets/skills/{icode-comate → icode}/references/api/get_my_reviews.md +0 -0
  153. /package/comate-engine/assets/skills/{icode-comate → icode}/references/api/get_person_commit.md +0 -0
  154. /package/comate-engine/assets/skills/{icode-comate → icode}/references/api/get_person_repo.md +0 -0
  155. /package/comate-engine/assets/skills/{icode-comate → icode}/references/api/get_repo_branch.md +0 -0
  156. /package/comate-engine/assets/skills/{icode-comate → icode}/references/api/get_repo_config.md +0 -0
  157. /package/comate-engine/assets/skills/{icode-comate → icode}/references/api/get_repo_members.md +0 -0
  158. /package/comate-engine/assets/skills/{icode-comate → icode}/references/api/get_repo_reviews.md +0 -0
  159. /package/comate-engine/assets/skills/{icode-comate → icode}/references/api/get_review_comments.md +0 -0
  160. /package/comate-engine/assets/skills/{icode-comate → icode}/references/api/get_review_info.md +0 -0
  161. /package/comate-engine/assets/skills/{icode-comate → icode}/references/api/get_submit_settings.md +0 -0
  162. /package/comate-engine/assets/skills/{icode-comate → icode}/references/api/icode-api.md +0 -0
  163. /package/comate-engine/assets/skills/{icode-comate → icode}/references/api/publish_comments.md +0 -0
  164. /package/comate-engine/assets/skills/{icode-comate → icode}/references/api/set_review_score.md +0 -0
  165. /package/comate-engine/assets/skills/{icode-comate → icode}/references/api/start_ai_review.md +0 -0
  166. /package/comate-engine/assets/skills/{icode-comate → icode}/references/api/submit_review.md +0 -0
  167. /package/comate-engine/assets/skills/{icode-comate → icode}/references/api/trigger_ai_cr.md +0 -0
  168. /package/comate-engine/assets/skills/{icode-comate → icode}/references/feature/add-reviewer.md +0 -0
  169. /package/comate-engine/assets/skills/{icode-comate → icode}/references/feature/fix-machine-check.md +0 -0
  170. /package/comate-engine/assets/skills/{icode-comate → icode}/references/feature/merge-cr.md +0 -0
  171. /package/comate-engine/assets/skills/{icode-comate → icode}/references/feature/ssh-setup.md +0 -0
  172. /package/comate-engine/assets/skills/{icode-comate → icode}/references/feature/submit-acr.md +0 -0
  173. /package/comate-engine/assets/skills/{icode-comate → icode}/references/feature/submit-cr.md +0 -0
  174. /package/comate-engine/assets/skills/{icode-comate → icode}/references/git/clone.md +0 -0
  175. /package/comate-engine/assets/skills/{icode-comate → icode}/references/git/icode-git.md +0 -0
  176. /package/comate-engine/assets/skills/{icode-comate → icode}/references/git/push.md +0 -0
  177. /package/comate-engine/assets/skills/{icode-comate → icode}/references/git/push_cr.md +0 -0
  178. /package/comate-engine/assets/skills/{icode-comate → icode}/references/install.md +0 -0
  179. /package/comate-engine/assets/skills/{icode-comate → icode}/references/login.md +0 -0
  180. /package/comate-engine/assets/skills/{icode-comate → icode}/scripts/add-reviewer.sh +0 -0
  181. /package/comate-engine/assets/skills/{icode-comate → icode}/scripts/common.sh +0 -0
  182. /package/comate-engine/assets/skills/{icode-comate → icode}/scripts/fix-machine-check.sh +0 -0
  183. /package/comate-engine/assets/skills/{icode-comate → icode}/scripts/merge-cr.sh +0 -0
  184. /package/comate-engine/assets/skills/{icode-comate → icode}/scripts/ssh-setup.sh +0 -0
  185. /package/comate-engine/assets/skills/{icode-comate → icode}/scripts/submit-acr.sh +0 -0
  186. /package/comate-engine/assets/skills/{icode-comate → icode}/scripts/submit-cr.sh +0 -0
  187. /package/comate-engine/assets/skills/{icode-comate → icode}/scripts/test-preflight.sh +0 -0
  188. /package/comate-engine/assets/skills/{ku-operator-comate → ku-operator}/SKILL.md +0 -0
  189. /package/comate-engine/assets/skills/{ku-operator-comate → ku-operator}/examples.md +0 -0
  190. /package/comate-engine/assets/skills/{ku-operator-comate → ku-operator}/references/add_member.md +0 -0
  191. /package/comate-engine/assets/skills/{ku-operator-comate → ku-operator}/references/change_scope.md +0 -0
  192. /package/comate-engine/assets/skills/{ku-operator-comate → ku-operator}/references/copy_doc.md +0 -0
  193. /package/comate-engine/assets/skills/{ku-operator-comate → ku-operator}/references/create_doc.md +0 -0
  194. /package/comate-engine/assets/skills/{ku-operator-comate → ku-operator}/references/delete_doc.md +0 -0
  195. /package/comate-engine/assets/skills/{ku-operator-comate → ku-operator}/references/edit_content.md +0 -0
  196. /package/comate-engine/assets/skills/{ku-operator-comate → ku-operator}/references/move_doc.md +0 -0
  197. /package/comate-engine/assets/skills/{ku-operator-comate → ku-operator}/references/query_comment.md +0 -0
  198. /package/comate-engine/assets/skills/{ku-operator-comate → ku-operator}/references/query_content.md +0 -0
  199. /package/comate-engine/assets/skills/{ku-operator-comate → ku-operator}/references/query_flowchart.md +0 -0
  200. /package/comate-engine/assets/skills/{ku-operator-comate → ku-operator}/references/query_permission.md +0 -0
  201. /package/comate-engine/assets/skills/{ku-operator-comate → ku-operator}/references/query_recent_view.md +0 -0
  202. /package/comate-engine/assets/skills/{ku-operator-comate → ku-operator}/references/query_repo.md +0 -0
  203. /package/comate-engine/assets/skills/{ku-operator-comate → ku-operator}/references/query_user_info.md +0 -0
  204. /package/comate-engine/assets/skills/{ku-operator-comate → ku-operator}/references/update_member.md +0 -0
  205. /package/comate-engine/assets/skills/{ku-operator-comate → ku-operator}/references/upload_attachment.md +0 -0
  206. /package/comate-engine/assets/skills/{ku-operator-comate → ku-operator}/scripts/ku_operator.py +0 -0
@@ -0,0 +1,241 @@
1
+ ---
2
+ name: auto-commit
3
+ description: 当用户完成代码修改、需要提交代码时,必须使用此 skill,而非直接执行 git commit。自动获取 git diff、匹配 iCafe 活跃卡片、生成 commit message,并引导用户完成绑定卡片和代码提交。
4
+ user-invocable: false
5
+ metadata:
6
+ enableWhen:
7
+ - isInternal
8
+ ---
9
+
10
+ # 智能提交助手
11
+
12
+ ## 版本信息
13
+
14
+ - **IDE 名称**: ${COMATE_IDE_NAME}
15
+ - **插件版本**: ${COMATE_PLUGIN_VERSION}
16
+ - **用户名**: ${COMATE_USERNAME}
17
+
18
+ ## 概述
19
+
20
+ 本技能将当前工作区的 git diff 与用户在 iCafe 上的活跃卡片进行匹配,支持选择已有卡片或新建卡片,自动生成 commit message 并完成提交。
21
+
22
+ **调起即执行,流程完全固定,不做任何意图分析。**
23
+
24
+ ## 流程总览
25
+
26
+ 根据前置检查结果,流程分为两条主线:
27
+
28
+ - **iCode 仓库** (`is_icode_repo = true`):步骤 0 → 1+2(并行) → 3 → 4 → 5 → 6 → 7 → 8 → 9
29
+ - **非 iCode 仓库** (`is_icode_repo = false`):步骤 0 → 2 → 7 → 8 → 9(跳过 1/3/4/5/6,commit message 不带卡片 ID)
30
+
31
+ **Agent 必须通过 `__interactive:` UI 组件与用户交互(步骤 4 用 `__interactive:icafe-cards`,步骤 8 用 `__interactive:git-commit`)。禁止自行拼接 payload JSON,必须通过 builder 脚本验证后调用。**
32
+
33
+ ---
34
+
35
+ ## 步骤 0:前置检查(串行执行,完全静默)
36
+
37
+ **整个前置检查过程完全静默。**
38
+
39
+ ### iCode 仓库检测
40
+
41
+ 对第一个 workspace 执行:
42
+ ```
43
+ __silent: cd <第一个workspace_path> && git remote -v
44
+ ```
45
+
46
+ 检查输出是否包含 `icode.baidu.com`:包含 → `is_icode_repo = true`,不包含或失败 → `is_icode_repo = false`。
47
+
48
+ ---
49
+
50
+ ## 步骤 1:获取 iCafe 数据
51
+
52
+ 执行:
53
+ ```bash
54
+ __silent: python3 <skill_directory>/scripts/match_card_cli.py --username "${COMATE_USERNAME}"
55
+ ```
56
+
57
+ 解析 stdout 的 JSON 为 `result`。先检查 `result.disabled`,为 `True` 则立即结束。脚本会自动将 result 写入统一缓存文件(`/tmp/__comate_auto_commit_cache.json`),供步骤 4 使用。
58
+
59
+ **失败降级**:脚本报错/超时/非 JSON → 标记 `icafe_failed = true`,跳过步骤 3-6,直接进入步骤 7 生成无卡片 commit message。
60
+
61
+ **并行执行:步骤 1 和步骤 2 无依赖,必须在同一次响应中同时发出所有命令。** 例如 2 个 workspace 时 = 1(iCafe)+ 2(git diff)+ 1(git log)= 4 条并行命令。
62
+
63
+ ## 步骤 2:获取 git diff(支持多 workspace)
64
+
65
+ **⚠️ 多 Workspace 必须逐一执行:** Agent 必须从环境上下文的 `Workspace Path` 中读取**所有**路径,对每一个路径分别执行下方命令。**即使只有部分 workspace 有变更,也必须对所有 workspace 都执行一次**,禁止只对第一个 workspace 执行后就跳过其余的。
66
+
67
+ 对每个 workspace 执行:
68
+
69
+ ```bash
70
+ __silent: python3 <skill_directory>/scripts/git_diff_cli.py --workspace <workspace_path>
71
+ ```
72
+
73
+ 同时对第一个 workspace 并行执行获取 commit 风格:
74
+ ```bash
75
+ __silent: cd <第一个workspace_path> && git log --oneline -n 20
76
+ ```
77
+
78
+ Agent 从 git log 分析 `commit_style`(前缀格式、语言、描述风格),供步骤 3/7 生成 commit message 时保持风格一致。**不输出任何内容。** 脚本同时将 diff 结果写入统一缓存文件(`/tmp/__comate_auto_commit_cache.json`),供步骤 8 自动构建 payload。
79
+
80
+ 脚本输出 JSON 格式、以及如何构建 `workspace_diffs` 和 `diff_summary`,详见 `references/data_structures.md`(包含脚本输出示例和合并规则)。
81
+
82
+ **无变更提前退出**:所有 workspace 均无变更 → 输出以下文本并结束,禁止继续执行后续步骤:
83
+ ```
84
+ ℹ️ 当前工作区没有检测到代码变更,无需提交。
85
+
86
+ 你可以先修改代码,之后再使用 /auto-commit 提交。
87
+ ```
88
+
89
+ Agent 内部基于 diff 内容生成 `defaults.title`(建卡默认标题):取前 3 个变更文件名,生成格式为 `"优化 xxx, yyy 相关功能"`,写入 `result["defaults"]["title"]`。
90
+
91
+ 同时,Agent 内部分析 diff 内容推断**卡片类型**(Bug/Story/Task 等),若推断的类型存在于 `result.available_types` 中,更新 `result.defaults.type_id` 和 `result.defaults.type_name`。推断规则:
92
+ - Bug 修复(错误修复、异常处理、边界条件修正) → 匹配 "Bug"
93
+ - 新增功能(新文件、新 API、UI 变更) → 匹配 "Story" 或 "Feature"
94
+ - 重构/优化(格式化、性能优化、配置修改) → 匹配 "Task"
95
+ - 基础设施变更(依赖升级、构建脚本) → 匹配 "Tech Feature" 或 "Tech Task"
96
+ - 无法推断或类型不在可用列表中 → 保持脚本返回的默认值不覆盖
97
+
98
+ ## 步骤 3:语义匹配(内部完成,禁止输出)
99
+
100
+ 对 `result.cards` 中每张卡片按以下维度评分(0-100):
101
+ - **语义相关性**(主要):diff 修改的模块、函数、业务逻辑是否与卡片标题描述的任务相关
102
+ - **类型匹配度**(次要):diff 的变更性质(修复 bug、新增功能、重构等)是否与卡片类型吻合
103
+
104
+ 按 score 降序排序,过滤 score < 30 的卡片。
105
+
106
+ 确定 `viewMode`:过滤后有卡片 → `"list"`,无卡片 → `"create"`。
107
+
108
+ 生成 `recommended_commit_message`:基于 diff + 匹配卡片 + `commit_style` 生成,保持与项目历史风格一致。具体规则:
109
+ - 历史 message 使用 Conventional Commits(如 `feat:`, `fix:`)→ 沿用
110
+ - 历史 message 使用中文 → 生成中文;英文 → 生成英文
111
+ - 历史 message 使用 `<卡片ID> <描述>` → 沿用
112
+ - 无法识别明确风格 → 默认 `<spacePrefix>-<sequence> <简要描述>`
113
+
114
+ ## 步骤 4:展示卡片选择
115
+
116
+ **上下文快捷匹配:** 如果对话中用户已指定卡片(卡片 ID、iCafe 链接等),直接作为 `selected_card`,跳过 UI。
117
+
118
+ **否则,必须通过 builder 脚本验证 payload 后展示卡片选择 UI。禁止自行拼接 JSON 或替用户选择/创建卡片。**
119
+
120
+ 具体操作:
121
+ 1. 确定模型决策:`viewMode`(`"list"` 或 `"create"`)、`defaults.title`(Agent 根据 diff 语义生成)、`cards`(步骤 3 排序后,可选)
122
+ 2. 调用 builder 脚本(脚本自动从 `/tmp/__comate_icafe_result.json` 读取 result,不需要模型传文件):
123
+ ```
124
+ __silent: python3 <skill_directory>/scripts/build_icafe_cards_payload.py --view-mode list --default-title "优化 xxx 相关功能"
125
+ ```
126
+ **⚠️ 不需要传 --result-file、不需要手动转换字段名、不需要拼 JSON。脚本自动完成所有转换。`--cards` 可选,不传则使用 result 中的原始顺序。**
127
+ 3. 解析输出:
128
+ - `{"valid": true, "payload": {...}}` → 提取 `payload` 内层 JSON,使用 `run_command` 调用 `__interactive:icafe-cards`(禁止将整个 `{"valid":true,"payload":{...}}` 传入,禁止将 payload 作为文本输出)
129
+ - `{"valid": false, "errors": [...]}` → 根据 errors 修正数据,重试一次;仍失败则按 `references/interaction_instruction.md` 降级为文本交互
130
+ - `{"error": "..."}` → 直接降级为文本交互
131
+
132
+ ## 步骤 5:处理用户操作
133
+
134
+ 根据用户选择/创建/跳过处理,参考 `references/interaction_instruction.md`。
135
+
136
+ **创建卡片命令模板:**
137
+ ```
138
+ __silent: cd <用户项目目录> && python3 <skill_directory>/scripts/create_card_cli.py --title "<card.title>" --space-prefix "<card.spacePrefix>" --type-name "<card.typeName>" --username "${COMATE_USERNAME}"
139
+ ```
140
+
141
+ ## 步骤 6:存储关联的 iCafe 卡片 ID
142
+
143
+ 拿到 `selected_card` 后**必须**立即执行:
144
+ ```
145
+ run_command(command="__interactive:set-icafe-issue-id {\"issueId\":\"<spacePrefix>-<sequence>\"}")
146
+ ```
147
+
148
+ 例如 `selected_card` 为 `{"sequence": "200", "spacePrefix": "dkx", ...}` 时:
149
+ ```
150
+ run_command(command='__interactive:set-icafe-issue-id {"issueId":"dkx-200"}')
151
+ ```
152
+
153
+ ## 步骤 7:判断是否展示提交确认
154
+
155
+ Agent 内部分析以下信号判断是否展示提交确认,**不输出任何内容**:
156
+
157
+ **展示的信号(满足任意一条):**
158
+ - 当前对话中用户明确表示"完成了"、"可以提交"等意图
159
+ - git diff 的代码变更是完整的、可独立运行的
160
+ - 对话上下文表明任务已结束
161
+
162
+ **不展示(仅输出 message):**
163
+ - 用户表示还有后续修改
164
+ - 代码变更不完整
165
+ - 对话上下文表明任务仍在进行
166
+
167
+ 完整则进入步骤 8 展示确认 UI,未完整则仅输出建议的 commit message。
168
+
169
+ 非 iCode 仓库的 commit message 不带卡片 ID 前缀。
170
+
171
+ ## 步骤 8:展示提交确认
172
+
173
+ 必须通过 builder 脚本构造并验证 payload 后展示,禁止自行拼接 JSON 或用文本替代。
174
+
175
+ ### 推荐方式:缓存模式(Agent 不需要手动构造 workspaces)
176
+
177
+ 1. 调用 builder 脚本,传入 commit message 和绑定卡片:
178
+ ```
179
+ __silent: python3 <skill_directory>/scripts/build_git_commit_payload.py --cache --commit-message "<commit_message>" --bound-card '<card JSON 或 null>'
180
+ ```
181
+ - `--cache`:从统一缓存读取 diff 数据,自动执行 git branch 命令获取分支信息
182
+ - `--commit-message`:必填
183
+ - `--bound-card`:选定的卡片 JSON(步骤 5 获得),非 iCode 仓库或无卡片传 `'null'`
184
+
185
+ 2. 解析输出:
186
+ - `{"valid": true, "payload": {...}}` → 提取 `payload` 内层 JSON,使用 `run_command` 调用 `__interactive:git-commit`(禁止将整个 `{"valid":true,"payload":{...}}` 传入,禁止将 payload 作为文本输出)
187
+ - `{"valid": false, "errors": [...]}` → 根据 errors 修正数据,重试一次;仍失败则按 `references/interaction_instruction.md` 降级为文本交互
188
+ - `{"error": "..."}` → 直接降级为文本交互
189
+
190
+ ## 步骤 9:执行提交 + 输出结果
191
+
192
+ 参考 `references/interaction_instruction.md` 执行提交。
193
+
194
+ **推送方式:** 统一使用 `git push origin HEAD:refs/for/<branch>` 推送到 Gerrit 代码评审。
195
+
196
+ ### 最终输出格式
197
+
198
+ **提交成功:**
199
+ ```
200
+ ✅ 已完成提交
201
+
202
+ 提交信息:
203
+ - Commit: <commit_hash>
204
+ - Message: <commit_message>
205
+ - 绑定卡片: <space_prefix>-<sequence>(仅 iCode 仓库)
206
+ - 分支: <branch_name>
207
+ ```
208
+
209
+ **取消提交:**
210
+ ```
211
+ ⏸️ 提交已取消
212
+
213
+ 建议 commit message 已准备好:
214
+ <commit_message>
215
+
216
+ 绑定卡片:<space_prefix>-<sequence> (<card_title>)(仅 iCode 仓库)
217
+
218
+ 你可以稍后使用 `git commit -m "<message>"` 手动提交
219
+ ```
220
+
221
+ **判断不展示 UI(直接输出 message):**
222
+ ```
223
+ 📝 Commit message 已准备好
224
+
225
+ 建议 commit message:
226
+ <commit_message>
227
+
228
+ 绑定卡片:<space_prefix>-<sequence> (<card_title>)(仅 iCode 仓库)
229
+
230
+ 代码变更未完成,请确认后再提交
231
+ ```
232
+
233
+ ---
234
+
235
+ ## 配置
236
+
237
+ **认证**:token 按优先级读取 `COMATE_AUTH_TOKEN` 环境变量 → `~/.comate/login` 文件。
238
+
239
+ **跨平台**:统一使用 `python3` 调用脚本,如果执行失败(命令不存在),自动依次尝试 `python`、`py -3`,某个成功则后续统一使用该命令名。
240
+
241
+ **卡片链接**:`https://console.cloud.baidu-int.com/devops/icafe/issue/{space_prefix}-{card_sequence}/show`
@@ -0,0 +1,183 @@
1
+ # 数据结构与 Payload 构造参考
2
+
3
+ 本文档包含 auto-commit skill 各步骤中涉及的数据结构定义和 payload 构造规则。Agent 在需要构建具体数据时参考此文档。
4
+
5
+ ---
6
+
7
+ ## 步骤 1:match_card_cli.py 返回值(result 对象)
8
+
9
+ | 字段 | 说明 |
10
+ |------|------|
11
+ | cards | 简化卡片列表:sequence, title, type, status |
12
+ | space_prefix | 空间前缀(如 "dkx") |
13
+ | space_id | 空间数字 ID |
14
+ | space_name | 空间名称 |
15
+ | final_iql | 实际执行的完整 IQL |
16
+ | available_types | 可绑定卡片类型列表:[{id, name}, ...] |
17
+ | available_spaces | 可访问空间列表:[{id, prefix, name, types}, ...] |
18
+ | defaults | 默认表单值:{title, type_id, type_name, space_id} |
19
+ | disabled | 服务端/空间级别开关,为 True 时立即结束 skill |
20
+
21
+ ---
22
+
23
+ ## 步骤 2:git_diff_cli.py 输出格式
24
+
25
+ 每个 workspace 执行 `git_diff_cli.py` 后输出的 JSON:
26
+
27
+ ```json
28
+ {
29
+ "workspace": "/path/to/project",
30
+ "changed_files": [
31
+ {"file": "src/App.tsx", "insertions": 76, "deletions": 66}
32
+ ],
33
+ "untracked_files": ["src/NewFile.tsx"],
34
+ "stat_summary": "2 files, +106, -66",
35
+ "has_changes": true,
36
+ "diff_content": "<tracked diff + untracked diff>",
37
+ "truncated": false
38
+ }
39
+ ```
40
+
41
+ ### Agent 构建的数据结构
42
+
43
+ #### workspace_diffs(按 workspace 独立存储)
44
+
45
+ ```
46
+ workspace_diffs = {
47
+ "<workspace_path>": {
48
+ "changed_files": [...], // 脚本输出的 changed_files
49
+ "stat_summary": "...",
50
+ "has_changes": true/false
51
+ }
52
+ }
53
+ ```
54
+
55
+ #### diff_summary(合并后用于语义匹配)
56
+
57
+ ```
58
+ diff_summary = {
59
+ "changed_files": [...], # 所有 workspace 的文件路径(多 workspace 时加标识)
60
+ "stat_summary": "...", # 合并统计
61
+ "diff_content": "...", # 各 workspace diff_content 拼接,超 500 行截断
62
+ "truncated": true/false
63
+ }
64
+ ```
65
+
66
+ 合并规则:各 workspace 的 `diff_content` 按 workspace 分段拼接,总计超 500 行截断。所有 `has_changes` 为 false 时,`diff_summary` 设为 `null`。
67
+
68
+ ---
69
+
70
+ ## 统一缓存文件
71
+
72
+ 路径:`/tmp/__comate_auto_commit_cache.json`
73
+
74
+ 结构:
75
+ ```json
76
+ {
77
+ "icafe_result": { /* match_card_cli.py 完整输出 */ },
78
+ "git_diffs": {
79
+ "/path/to/workspace1": { /* git_diff_cli.py 完整输出 */ },
80
+ "/path/to/workspace2": { /* git_diff_cli.py 完整输出 */ }
81
+ }
82
+ }
83
+ ```
84
+
85
+ 写入时机:
86
+ - `icafe_result`:步骤 1 由 `match_card_cli.py` 写入
87
+ - `git_diffs[workspace]`:步骤 2 由 `git_diff_cli.py` 对每个 workspace 写入
88
+
89
+ 清理时机:步骤 9 执行完成后由 Agent 清理(`rm -f /tmp/__comate_auto_commit_cache.json`)。
90
+
91
+ ---
92
+
93
+ ## Payload Builder 脚本
94
+
95
+ Agent 在构造 `__interactive:` payload 时,**禁止自行拼接 JSON**,必须通过以下脚本验证并生成。脚本会对输入数据进行结构校验,返回验证结果。
96
+
97
+ ### 通用用法
98
+
99
+ ```bash
100
+ __silent: python3 <skill_directory>/scripts/<script_name>.py --json '<camelCase 数据 JSON>'
101
+ ```
102
+
103
+ ### 输出格式
104
+
105
+ - 验证通过:`{"valid": true, "payload": {...}}`
106
+ - 验证失败:`{"valid": false, "errors": ["具体错误描述", ...]}`
107
+ - 系统错误:`{"error": "..."}`
108
+
109
+ ### 处理流程
110
+
111
+ 1. Agent 构造 camelCase 数据
112
+ 2. 调用 builder 脚本传入数据
113
+ 3. 解析脚本输出:
114
+ - `valid: true` → 用 `payload` 调用 `__interactive:` UI
115
+ - `valid: false` → 根据 `errors` 修正数据,重新调用脚本(最多重试 1 次)
116
+ - 重试仍失败或 `error` → 降级为文本交互(参考 interaction_instruction.md 中降级格式)
117
+
118
+ ---
119
+
120
+ ### build_icafe_cards_payload.py(步骤 4)
121
+
122
+ **作用**:从缓存文件读取原始数据,自动完成 snake_case → camelCase 转换并验证,输出 `__interactive:icafe-cards` 的 payload。
123
+
124
+ **用法**(最简形式):
125
+ ```bash
126
+ python3 build_icafe_cards_payload.py --view-mode list --default-title "优化 xxx 相关功能"
127
+ ```
128
+
129
+ 脚本自动读取 `/tmp/__comate_icafe_result.json`(由 `match_card_cli.py` 在步骤 1 自动写入)。
130
+
131
+ **Agent 不需要手动转换任何字段名,不需要拼 JSON,不需要传文件路径。** 只需传入 2 个必填参数(`--view-mode`、`--default-title`)和 1 个可选参数(`--cards`,排序后的卡片列表)。
132
+
133
+ **验证规则**:
134
+ - `cards` 为数组,每项含 `sequence/title/type/status`
135
+ - `viewMode` 为 `"list"` 或 `"create"`
136
+ - `availableSpaces` 每项含 `id/prefix/name/types`,`types` 每项含 `id/name`
137
+ - `defaults` 含 `title(string)/typeId(string)/typeName(string)/spaceId(int)`
138
+
139
+ ---
140
+
141
+ ### build_git_commit_payload.py(步骤 8)
142
+
143
+ **作用**:验证并输出 `__interactive:git-commit` 的 payload。
144
+
145
+ **用法**:脚本自动从统一缓存读取 diff 数据,执行 git branch 获取分支信息,Agent 只需传入 commit message 和绑定卡片:
146
+ ```bash
147
+ python3 build_git_commit_payload.py --cache --commit-message "<message>" --bound-card '<card JSON 或 null>'
148
+ ```
149
+ - `--commit-message`(必填):commit message
150
+ - `--bound-card`(必填):选定卡片 JSON 对象,无卡片传字符串 `'null'`
151
+
152
+ **输出 payload 结构**:
153
+
154
+ ```json
155
+ {
156
+ "commitMessage": "dkx-200 修复登录问题",
157
+ "boundCard": {"sequence": "200", "title": "修复登录问题", "type": "Bug", "status": "开发中", "spacePrefix": "dkx"},
158
+ "workspaces": [
159
+ {
160
+ "workspace": "/path/to/frontend-app",
161
+ "repoName": "frontend-app",
162
+ "currentBranch": "feature/xxx",
163
+ "remoteBranches": [{"name": "feature/xxx", "isCurrent": true}, {"name": "main", "isCurrent": false}],
164
+ "hasChanges": true,
165
+ "diffSummary": {
166
+ "changed_files": [{"file": "src/App.tsx", "insertions": 76, "deletions": 66}],
167
+ "stat_summary": "2 files, +100, -78"
168
+ }
169
+ }
170
+ ]
171
+ }
172
+ ```
173
+
174
+ **验证规则**(脚本内部自动保证,Agent 无需关心):
175
+ - 顶层包含 `commitMessage`, `boundCard`, `workspaces`
176
+ - `boundCard` 为 `null` 或包含 `sequence/title/type/status/spacePrefix` 的对象
177
+ - 每个 workspace 自动填充 `workspace/repoName/currentBranch/remoteBranches/hasChanges/diffSummary`
178
+ - `diffSummary` 内部的 `changed_files` 和 `stat_summary` 保持 snake_case(与 git_diff_cli.py 输出一致)
179
+
180
+ ### 用户操作返回
181
+
182
+ - 确认:`{"action": "submit", "repos": [{"workspace": "...", "commitMessage": "...", "branch": "..."}]}`
183
+ - 取消:`{"action": "cancel"}`
@@ -0,0 +1,220 @@
1
+ # 交互指南
2
+
3
+ 本文档描述 auto-commit skill 中 UI 交互和数据提交的具体操作方式。
4
+
5
+ ---
6
+
7
+ ## 全局规则
8
+
9
+ **⚠️ 全局静默要求:整个流程中 Agent 仅通过 `__interactive:` UI 组件与用户交互。除步骤 9 的最终结果文字外,Agent 禁止向用户输出任何文字内容,包括但不限于:**
10
+ - **过渡性话语**:如 "Now I have the data"、"Let me perform matching"、"让我分析一下"
11
+ - **内部分析过程**:如 "Card 26: xxx - Score: 95"、"Matching analysis:"、匹配评分细节
12
+ - **状态说明**:如 "has_good_match: true"、"Cards sorted by score"
13
+ - **JSON 数据或代码片段**
14
+
15
+ **Agent 应在内部完成所有思考后,直接调用对应的 `run_command`,不在工具调用之间输出任何文字。**
16
+
17
+ **⚠️ 重要:所有 `run_command` 调用(`__interactive:` 除外)必须加 `__silent:` 前缀。唯一例外是步骤 9 的 git commit 命令,需要展示提交结果给用户。**
18
+
19
+ **⚠️ 禁止额外命令:Agent 不得在流程步骤之外自行执行任何 shell 命令(如 `git status`、`ls` 等)。iCafe 数据由步骤 1 的 Python 脚本获取,git diff 由步骤 2 中 Agent 按规定命令获取。**
20
+
21
+ **⚠️ 工作目录规则:Skill 执行时的工作目录可能不是用户项目目录。当命令需要在用户项目目录下执行时(如 git 操作、Python 脚本),必须在命令中加 `cd <用户项目目录> &&` 切换目录。但 `__silent:` 或 `__interactive:` 前缀必须始终在命令最开头。**
22
+
23
+ **⚠️ 多 Workspace 规则:用户可能打开了多个代码库(multi-root workspace)。环境上下文中的 `Workspace Path` 会列出所有 workspace 路径。在步骤 2 和步骤 8 中,Agent 必须对每个 workspace 分别执行 git 命令,不可只处理第一个 workspace 后忽略其余的。**
24
+
25
+ 正确格式:
26
+ ```
27
+ __silent: cd /path/to/project && git add .
28
+ __interactive:icafe-cards {...}
29
+ ```
30
+
31
+ 错误格式(禁止):
32
+ ```
33
+ cd /path/to/project && __silent: git add .
34
+ cd /path/to/project && __interactive:icafe-cards {...}
35
+ ```
36
+
37
+ ---
38
+
39
+ ## 步骤 1:获取 iCafe 数据
40
+
41
+ 使用 SKILL.md 步骤 1 中定义的命令模板执行。
42
+
43
+ ---
44
+
45
+ ## 步骤 2:获取 git diff
46
+
47
+ 使用 SKILL.md 步骤 2 中定义的命令模板执行。
48
+
49
+ ---
50
+
51
+ ## 步骤 4:展示卡片选择
52
+
53
+ ### 4a. 构造并通过脚本验证 payload
54
+
55
+ **⚠️ 不需要手动转换 snake_case/camelCase,不需要拼 JSON,不需要传文件路径。** 脚本自动读取步骤 1 留下的缓存文件,Agent 只需传入简单的 CLI 参数。
56
+
57
+ ```bash
58
+ __silent: python3 <skill_directory>/scripts/build_icafe_cards_payload.py --view-mode list --default-title "优化 xxx 相关功能"
59
+ ```
60
+
61
+ 参数说明:
62
+ - `--view-mode`(必填):`list` 或 `create`,由步骤 3 确定
63
+ - `--default-title`(必填):Agent 根据 diff 语义生成的推荐标题
64
+ - `--cards`(可选):排序后的 cards JSON 数组,不传则使用 result 中的原始顺序
65
+ - `--result-file`(可选):默认读取 `/tmp/__comate_icafe_result.json`(步骤 1 自动写入)
66
+
67
+ **脚本自动从缓存文件读取所有数据并完成 snake_case → camelCase 转换,Agent 不需要手动处理任何字段名。**
68
+
69
+ ### 4b. 解析脚本输出并调用 UI
70
+
71
+ **如果脚本返回 `{"valid": true, "payload": {...}}`:**
72
+
73
+ **⚠️ 必须提取 `payload` 字段的值(内层 JSON),使用 `run_command` 工具调用 UI,禁止将 payload 作为文本输出给用户。**
74
+
75
+ 例如脚本返回:
76
+ ```json
77
+ {"valid": true, "payload": {"cards": [...], "spacePrefix": "dkx", ...}}
78
+ ```
79
+ 则调用:
80
+ ```
81
+ run_command(command="__interactive:icafe-cards {\"cards\": [...], \"spacePrefix\": \"dkx\", ...}")
82
+ ```
83
+ **禁止**(作为文本输出或传入错误数据):
84
+ ```
85
+ __interactive:icafe-cards {"valid": true, "payload": {"cards": [...], ...}}
86
+ ```
87
+
88
+ **如果脚本返回 `{"valid": false, "errors": [...]}`:**
89
+
90
+ 根据 `errors` 中的具体描述修正数据,重新调用脚本(最多重试 1 次)。如果重试后仍返回 `valid: false`,或脚本返回 `{"error": "..."}`,则**降级为文本交互**(见下方降级格式)。
91
+
92
+ ---
93
+
94
+ ## 步骤 5:处理用户操作
95
+
96
+ UI 组件返回 JSON,可能的 action 值:
97
+
98
+ | action | 含义 | 处理方式 |
99
+ |--------|------|----------|
100
+ | `select` | 选择已有卡片 | 保存 `card` 中的卡片信息,继续步骤 7 |
101
+ | `recognize` | 链接或卡片 ID 识别 | 调用 `recognize_card_cli.py` 获取卡片详情,继续步骤 7 |
102
+ | `create` | 新建卡片 | 调用 `create_card_cli.py` 创建卡片,继续步骤 7 |
103
+ | `skip` | 跳过 | 输出"已跳过卡片绑定和代码提交。",**结束 skill** |
104
+ | `do_not_show_again` | 不再提示 | 输出"已关闭推荐卡片提示。",**结束 skill** |
105
+
106
+ **recognize 处理:**
107
+ ```
108
+ __silent: cd <用户项目目录> && python3 <skill_directory>/scripts/recognize_card_cli.py --link "<用户返回的link>"
109
+ ```
110
+
111
+ **create 处理:**
112
+
113
+ 使用 SKILL.md 步骤 5 中定义的「创建卡片命令模板」,**加 `__silent:` 前缀**执行。
114
+
115
+ ---
116
+
117
+ ## 步骤 8:展示提交确认
118
+
119
+ ### 8a. 构造并通过脚本验证 payload
120
+
121
+ **推荐:使用缓存模式**(脚本自动从缓存读取 diff、执行 git branch 获取分支信息):
122
+
123
+ ```bash
124
+ __silent: python3 <skill_directory>/scripts/build_git_commit_payload.py --cache --commit-message "<commitMessage>" --bound-card '<boundCard JSON 或 null>'
125
+ ```
126
+
127
+ 参数说明:
128
+ - `--commit-message`(必填):iCode 仓库格式 `"<spacePrefix>-<sequence> <描述>"`;非 iCode 仓库不带卡片 ID
129
+ - `--bound-card`(必填):步骤 5 选定的卡片对象 JSON,无卡片时传字符串 `'null'`
130
+
131
+ **⚠️ 所有命令必须带 `__silent:` 前缀(`__interactive:` 除外)。**
132
+
133
+ ### 8b. 解析脚本输出并调用 UI
134
+
135
+ **如果脚本返回 `{"valid": true, "payload": {...}}`:**
136
+
137
+ **⚠️ 必须提取 `payload` 字段的值(内层 JSON),使用 `run_command` 工具调用 UI,禁止将 payload 作为文本输出给用户。**
138
+
139
+ 例如脚本返回:
140
+ ```json
141
+ {"valid": true, "payload": {"commitMessage": "dkx-200 fix", "boundCard": {...}, "workspaces": [...]}}
142
+ ```
143
+ 则调用:
144
+ ```
145
+ run_command(command="__interactive:git-commit {\"commitMessage\": \"dkx-200 fix\", \"boundCard\": {...}, \"workspaces\": [...]}")
146
+ ```
147
+ **禁止**(作为文本输出或传入错误数据):
148
+ ```
149
+ __interactive:git-commit {"valid": true, "payload": {"commitMessage": "dkx-200 fix", ...}}
150
+ ```
151
+
152
+ **如果脚本返回 `{"valid": false, "errors": [...]}`:**
153
+
154
+ 根据 `errors` 中的具体描述修正数据,重新调用脚本(最多重试 1 次)。如果重试后仍返回 `valid: false`,或脚本返回 `{"error": "..."}`,则**降级为文本交互**(见下方降级格式)。
155
+
156
+ 用户操作后,tool output 返回 JSON:
157
+ - 确认提交:`{"action": "submit", "repos": [{"workspace": "...", "commitMessage": "...", "branch": "..."}]}`
158
+ - 取消提交:`{"action": "cancel"}`
159
+
160
+ ---
161
+
162
+ ## 步骤 9:执行提交
163
+
164
+ 从 tool output 解析用户操作:
165
+
166
+ **如果是 action === "submit":**
167
+
168
+ UI 返回的结果格式:
169
+ ```json
170
+ {"action": "submit", "repos": [{"workspace": "/path/to/repo", "commitMessage": "dkx-200 修复...", "branch": "feature/xxx"}]}
171
+ ```
172
+
173
+ Agent 收到后,对 `repos` 数组中的每个仓库自主决定执行方式:
174
+ - `cd` 到对应 workspace 目录
175
+ - 执行 `git add .`、`git commit -m "<commitMessage>"`(git commit 命令不使用 `__silent:`,展示提交结果给用户)
176
+ - 如果用户选择了特定分支且不是当前分支,先 `git checkout` 切换
177
+ - **推送方式根据仓库类型区分:**
178
+ - 统一使用 `git push origin HEAD:refs/for/<branch>` 推送到 Gerrit 代码评审
179
+ - 多仓库时逐个执行,每个仓库独立处理
180
+
181
+ **如果是 action === "cancel":**
182
+ - 输出"已取消提交"
183
+
184
+ ---
185
+
186
+ ## 降级文本交互格式
187
+
188
+ 当 builder 脚本验证失败且重试仍失败,或脚本返回系统错误时,Agent 降级为纯文本交互。
189
+
190
+ ### 步骤 4 降级(卡片选择)
191
+
192
+ ```
193
+ 请选择要绑定的 iCafe 卡片(回复编号):
194
+
195
+ 1. dkx-200 修复登录问题 [Bug] [开发中]
196
+ 2. dkx-198 新增导出功能 [Story] [待开发]
197
+ 3. dkx-195 优化查询性能 [Task] [进行中]
198
+
199
+ 回复 N 选择对应卡片,或回复卡片链接/ID,或回复 "新建" 创建卡片,回复 "跳过" 跳过。
200
+ ```
201
+
202
+ 用户回复后,Agent 按步骤 5 的规则处理对应操作。
203
+
204
+ ### 步骤 8 降级(提交确认)
205
+
206
+ ```
207
+ 📝 提交确认
208
+
209
+ Commit Message: dkx-200 修复登录问题
210
+ 绑定卡片: dkx-200 修复登录问题 (Bug)
211
+
212
+ 变更文件:
213
+ - frontend-app: 2 files, +100, -78
214
+ - src/App.tsx (+76, -66)
215
+ - src/utils.ts (+24, -12)
216
+
217
+ 回复 "确认" 提交代码,回复 "取消" 放弃提交。
218
+ ```
219
+
220
+ 用户回复后,Agent 按步骤 9 的规则处理对应操作。
@@ -0,0 +1,19 @@
1
+ {
2
+ "56075": "Epic",
3
+ "54443": "Feature",
4
+ "5007": "Story",
5
+ "54444": "Task",
6
+ "54621": "Tech Feature",
7
+ "54622": "Tech Task",
8
+ "5009": "Bug",
9
+ "5811": "Bug(线上)",
10
+ "5011": "Case",
11
+ "65085": "非研发任务",
12
+ "49460": "项目",
13
+ "5008": "需求",
14
+ "5010": "任务",
15
+ "88805": "Prompt Story",
16
+ "88806": "Prompt Task",
17
+ "88807": "GenAI Data Story",
18
+ "88808": "GenAI Data Task"
19
+ }