@comate/zulu 1.2.1-beta.2 → 1.3.0

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 (169) 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 +263 -79
  155. package/dist/bundle/index.js +3 -3
  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/assets/skills/{smart-commit → auto-commit-comate}/references/issue_type_mapping.json +0 -0
  164. /package/comate-engine/assets/skills/{smart-commit → auto-commit-comate}/references/query_reference.md +0 -0
  165. /package/comate-engine/assets/skills/{smart-commit → auto-commit-comate}/scripts/compat.py +0 -0
  166. /package/comate-engine/assets/skills/{smart-commit → auto-commit-comate}/scripts/create_card_cli.py +0 -0
  167. /package/comate-engine/assets/skills/{smart-commit → auto-commit-comate}/scripts/icafe/__init__.py +0 -0
  168. /package/comate-engine/assets/skills/{smart-commit → auto-commit-comate}/scripts/logger.py +0 -0
  169. /package/comate-engine/assets/skills/{smart-commit → auto-commit-comate}/scripts/recognize_card_cli.py +0 -0
@@ -0,0 +1,145 @@
1
+ #!/bin/bash
2
+ # common.sh - icode 公共函数库
3
+ # 被其他脚本 source 引用
4
+
5
+ # ========== 颜色定义 ==========
6
+ RED='\033[0;31m'
7
+ GREEN='\033[0;32m'
8
+ YELLOW='\033[1;33m'
9
+ BLUE='\033[0;34m'
10
+ CYAN='\033[0;36m'
11
+ NC='\033[0m' # No Color
12
+
13
+ # ========== 日志函数 ==========
14
+ log_info() {
15
+ echo -e "${GREEN}[INFO]${NC} $1"
16
+ }
17
+
18
+ log_warn() {
19
+ echo -e "${YELLOW}[WARN]${NC} $1"
20
+ }
21
+
22
+ log_error() {
23
+ echo -e "${RED}[ERROR]${NC} $1"
24
+ }
25
+
26
+ log_step() {
27
+ echo -e "${BLUE}[STEP]${NC} $1"
28
+ }
29
+
30
+ log_phase() {
31
+ echo -e "${CYAN}[PHASE]${NC} $1"
32
+ }
33
+
34
+ log_success() {
35
+ echo -e "${GREEN}[SUCCESS]${NC} $1"
36
+ }
37
+
38
+ # ========== icode-cli 检测 ==========
39
+ get_icode_cli() {
40
+ if command -v icode-cli &> /dev/null; then
41
+ echo "icode-cli"
42
+ elif [ -x "$HOME/.icode/bin/icode-cli" ]; then
43
+ echo "$HOME/.icode/bin/icode-cli"
44
+ else
45
+ log_error "icode-cli 未找到,请先安装"
46
+ log_error "安装命令: curl -fsSL http://icode-cli.bj.bcebos.com/install.sh | bash -s -- --no-skills"
47
+ exit 1
48
+ fi
49
+ }
50
+
51
+ # ========== Git 仓库检测 ==========
52
+ check_git_repo() {
53
+ if ! git rev-parse --is-inside-work-tree &> /dev/null; then
54
+ log_error "当前目录不是 git 仓库"
55
+ exit 1
56
+ fi
57
+ }
58
+
59
+ # ========== 登录状态检测 ==========
60
+ # 返回用户名,失败则退出
61
+ check_login() {
62
+ local cli=$1
63
+ log_step "检查登录状态..."
64
+
65
+ local login_output
66
+ login_output=$("$cli" login 2>&1)
67
+
68
+ if echo "$login_output" | grep -q "Not logged in"; then
69
+ log_error "未登录,请先完成认证"
70
+ echo "$login_output"
71
+ exit 1
72
+ fi
73
+
74
+ local username
75
+ # 匹配 "Already logged in as: username (method)" 或 "Logged in as: username (method)" 格式
76
+ username=$(echo "$login_output" | grep -oE 'logged in as: [^ ]+' | sed 's/logged in as: //')
77
+
78
+ if [ -z "$username" ]; then
79
+ log_error "无法获取用户名"
80
+ exit 1
81
+ fi
82
+
83
+ log_info "当前用户: $username"
84
+ echo "$username"
85
+ }
86
+
87
+ # ========== 获取仓库名 ==========
88
+ get_repo_name() {
89
+ local remote_url
90
+ remote_url=$(git remote get-url origin 2>/dev/null)
91
+
92
+ if [ -z "$remote_url" ]; then
93
+ log_error "无法获取 origin 远程地址"
94
+ exit 1
95
+ fi
96
+
97
+ local repo_name=""
98
+ if [[ "$remote_url" == ssh://* ]]; then
99
+ repo_name=$(echo "$remote_url" | sed -E 's|ssh://[^/]+/||')
100
+ elif [[ "$remote_url" == git@* ]]; then
101
+ repo_name=$(echo "$remote_url" | sed -E 's|git@[^:]+:||')
102
+ elif [[ "$remote_url" == http* ]]; then
103
+ repo_name=$(echo "$remote_url" | sed -E 's|https?://[^/]+/||')
104
+ else
105
+ log_error "无法解析远程 URL: $remote_url"
106
+ exit 1
107
+ fi
108
+
109
+ echo "${repo_name%.git}"
110
+ }
111
+
112
+ # ========== 获取当前 CR ==========
113
+ # 参数: $1=cli路径 $2=仓库名 $3=用户名
114
+ get_current_cr() {
115
+ local cli=$1
116
+ local repo_name=$2
117
+ local username=$3
118
+ local local_commit
119
+ local_commit=$(git rev-parse HEAD)
120
+
121
+ local cr_list
122
+ cr_list=$("$cli" api get_repo_reviews --repo "$repo_name" --status NEW -o json 2>/dev/null || echo '{"data":{"changes":[]}}')
123
+
124
+ echo "$cr_list" | "$cli" jq -r ".data.changes[] | select(.owner.username == \"$username\" and .current_revision == \"$local_commit\") | ._number" 2>/dev/null | head -1 || true
125
+ }
126
+
127
+ # ========== 初始化环境 ==========
128
+ # 执行常见的初始化检查,返回 ICODE_CLI, USERNAME, REPO_NAME
129
+ init_toolkit_env() {
130
+ check_git_repo
131
+
132
+ ICODE_CLI=$(get_icode_cli)
133
+ export ICODE_CLI
134
+
135
+ # 获取用户名(check_login 会输出日志,我们只要最后一行的用户名)
136
+ local login_result
137
+ login_result=$(check_login "$ICODE_CLI")
138
+ USERNAME=$(echo "$login_result" | tail -1)
139
+ export USERNAME
140
+
141
+ log_step "获取仓库信息..."
142
+ REPO_NAME=$(get_repo_name)
143
+ export REPO_NAME
144
+ log_info "仓库: $REPO_NAME"
145
+ }
@@ -0,0 +1,131 @@
1
+ #!/bin/bash
2
+ # fix-machine-check.sh - 修复机器检查问题脚本 (Linux/macOS)
3
+ # 自动检测 CR 的机器检查结果,输出问题详情,供 Agent 分析修复
4
+ #
5
+ # 使用方法:
6
+ # ./fix-machine-check.sh [CR编号] [最大重试次数]
7
+ #
8
+ # 示例:
9
+ # ./fix-machine-check.sh # 自动检测 CR,默认重试 5 次
10
+ # ./fix-machine-check.sh 120247220 # 指定 CR
11
+ # ./fix-machine-check.sh 120247220 10 # 指定 CR 和最大重试次数
12
+
13
+ set -e
14
+
15
+ # 加载公共函数
16
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
17
+ source "$SCRIPT_DIR/common.sh"
18
+
19
+ # 获取机器检查结果
20
+ get_machine_check() {
21
+ local change_number=$1
22
+ "$ICODE_CLI" api get_machine_check --change-number "$change_number" -o json 2>/dev/null
23
+ }
24
+
25
+ # 检查是否有失败项
26
+ check_has_failures() {
27
+ local result=$1
28
+ local failed_count
29
+ failed_count=$(echo "$result" | "$ICODE_CLI" jq '[.data.style.operations[]? | select(.status != "SUCCESS" or .score < 0)] | length' 2>/dev/null || echo "0")
30
+
31
+ [[ "$failed_count" -gt 0 ]]
32
+ }
33
+
34
+ # 输出失败项详情
35
+ print_failures() {
36
+ local result=$1
37
+
38
+ echo ""
39
+ log_warn "========== 机器检查失败项 =========="
40
+ echo ""
41
+
42
+ echo "$result" | "$ICODE_CLI" jq -r '
43
+ .data.style.operations[]? |
44
+ select(.status != "SUCCESS" or .score < 0) |
45
+ "【检查项】\(.name)\n【状态】\(.status)\n【评分】\(.score)\n【说明】\(.comment)\n"
46
+ ' 2>/dev/null
47
+
48
+ local line_comments
49
+ line_comments=$(echo "$result" | "$ICODE_CLI" jq -r '
50
+ .data.style.operations[]? |
51
+ select(.status != "SUCCESS" or .score < 0) |
52
+ select(.lineComments != null and .lineComments != {}) |
53
+ .lineComments | to_entries[] |
54
+ "【文件】\(.key)\n" + (.value[]? | " 行 \(.line): \(.message // .comment // "无详细信息")")
55
+ ' 2>/dev/null || true)
56
+
57
+ if [[ -n "$line_comments" ]]; then
58
+ echo ""
59
+ log_warn "========== 行内评论 =========="
60
+ echo "$line_comments"
61
+ fi
62
+
63
+ echo ""
64
+ log_warn "=================================="
65
+ echo ""
66
+ }
67
+
68
+ # ========== 主流程 ==========
69
+
70
+ # 初始化环境
71
+ init_toolkit_env
72
+
73
+ CHANGE_NUMBER=${1:-""}
74
+ MAX_RETRIES=${2:-5}
75
+
76
+ # 如果没有指定 CR 编号,自动检测
77
+ if [ -z "$CHANGE_NUMBER" ]; then
78
+ log_step "检测当前 CR..."
79
+ CHANGE_NUMBER=$(get_current_cr "$ICODE_CLI" "$REPO_NAME" "$USERNAME")
80
+
81
+ if [ -z "$CHANGE_NUMBER" ]; then
82
+ log_error "未找到当前 commit 对应的 CR"
83
+ log_warn "请先执行 submit-cr.sh 提交 CR,或手动指定 CR 编号"
84
+ exit 1
85
+ fi
86
+ fi
87
+
88
+ log_info "CR 编号: $CHANGE_NUMBER"
89
+ log_info "最大重试次数: $MAX_RETRIES"
90
+ echo ""
91
+
92
+ # 修复循环
93
+ RETRY_COUNT=0
94
+
95
+ while [ $RETRY_COUNT -lt $MAX_RETRIES ]; do
96
+ RETRY_COUNT=$((RETRY_COUNT + 1))
97
+
98
+ log_step "第 $RETRY_COUNT 次检查 (共 $MAX_RETRIES 次)..."
99
+
100
+ RESULT=$(get_machine_check "$CHANGE_NUMBER")
101
+
102
+ if [ -z "$RESULT" ]; then
103
+ log_error "无法获取机器检查结果"
104
+ exit 1
105
+ fi
106
+
107
+ if ! check_has_failures "$RESULT"; then
108
+ echo ""
109
+ log_info "=========================================="
110
+ log_info "✓ 机器检查全部通过!"
111
+ log_info "=========================================="
112
+ exit 0
113
+ fi
114
+
115
+ print_failures "$RESULT"
116
+
117
+ if [ $RETRY_COUNT -lt $MAX_RETRIES ]; then
118
+ log_warn "请 Agent 分析上述问题并修复代码"
119
+ log_warn "修复完成后:"
120
+ log_warn " 1. 使用 Edit 工具修复代码"
121
+ log_warn " 2. 执行 submit-cr.sh 提交"
122
+ log_warn " 3. 再次运行: $0 $CHANGE_NUMBER $MAX_RETRIES"
123
+ exit 2
124
+ fi
125
+ done
126
+
127
+ echo ""
128
+ log_error "=========================================="
129
+ log_error "✗ 修复失败,已达到最大重试次数 ($MAX_RETRIES)"
130
+ log_error "=========================================="
131
+ exit 1
@@ -0,0 +1,105 @@
1
+ #!/bin/bash
2
+ # merge-cr.sh - 合入代码评审脚本 (Linux/macOS)
3
+ # 尝试打分 +2 并合入,通过打分结果判断是否有合入权限
4
+ #
5
+ # 使用方法:
6
+ # ./merge-cr.sh [CR编号]
7
+ #
8
+ # 示例:
9
+ # ./merge-cr.sh # 自动检测 CR
10
+ # ./merge-cr.sh 120247220 # 指定 CR
11
+
12
+ set -e
13
+
14
+ # 加载公共函数
15
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
16
+ source "$SCRIPT_DIR/common.sh"
17
+
18
+ # 打分 +2
19
+ set_score() {
20
+ local repo_name=$1
21
+ local change_number=$2
22
+
23
+ local result
24
+ result=$("$ICODE_CLI" api set_review_score --repo "$repo_name" --change-number "$change_number" --score 2 -o json 2>/dev/null || echo '{"status":"FAIL"}')
25
+
26
+ local status
27
+ status=$(echo "$result" | "$ICODE_CLI" jq -r '.status' 2>/dev/null || echo "FAIL")
28
+
29
+ [ "$status" = "OK" ]
30
+ }
31
+
32
+ # 合入 CR
33
+ submit_cr() {
34
+ local repo_name=$1
35
+ local change_number=$2
36
+
37
+ local result
38
+ result=$("$ICODE_CLI" api submit_review --repo "$repo_name" --change-number "$change_number" -o json 2>/dev/null)
39
+
40
+ local status
41
+ status=$(echo "$result" | "$ICODE_CLI" jq -r '.status' 2>/dev/null || echo "FAIL")
42
+
43
+ local message
44
+ message=$(echo "$result" | "$ICODE_CLI" jq -r '.message' 2>/dev/null || echo "未知错误")
45
+
46
+ if [ "$status" = "OK" ]; then
47
+ return 0
48
+ else
49
+ echo "$message"
50
+ return 1
51
+ fi
52
+ }
53
+
54
+ # ========== 主流程 ==========
55
+
56
+ # 初始化环境
57
+ init_toolkit_env
58
+
59
+ CHANGE_NUMBER=${1:-""}
60
+
61
+ # 如果没有指定 CR 编号,自动检测
62
+ if [ -z "$CHANGE_NUMBER" ]; then
63
+ log_step "检测当前 CR..."
64
+ CHANGE_NUMBER=$(get_current_cr "$ICODE_CLI" "$REPO_NAME" "$USERNAME")
65
+
66
+ if [ -z "$CHANGE_NUMBER" ]; then
67
+ log_error "未找到当前 commit 对应的 CR"
68
+ log_warn "请先执行 submit-cr.sh 提交 CR,或手动指定 CR 编号"
69
+ exit 1
70
+ fi
71
+ fi
72
+
73
+ log_info "CR 编号: $CHANGE_NUMBER"
74
+ echo ""
75
+
76
+ # 尝试打分 +2(同时检测权限)
77
+ log_step "尝试打分 +2..."
78
+ if set_score "$REPO_NAME" "$CHANGE_NUMBER"; then
79
+ log_info "打分成功,有合入权限"
80
+ echo ""
81
+
82
+ log_step "尝试合入 CR..."
83
+ MERGE_ERROR=""
84
+ if MERGE_ERROR=$(submit_cr "$REPO_NAME" "$CHANGE_NUMBER"); then
85
+ echo ""
86
+ log_success "=========================================="
87
+ log_success "✓ CR #$CHANGE_NUMBER 合入成功!"
88
+ log_success "=========================================="
89
+ exit 0
90
+ else
91
+ echo ""
92
+ log_error "=========================================="
93
+ log_error "✗ CR 合入失败"
94
+ log_error "=========================================="
95
+ log_warn "失败原因: $MERGE_ERROR"
96
+ exit 1
97
+ fi
98
+ else
99
+ echo ""
100
+ log_error "=========================================="
101
+ log_error "✗ 打分失败,无合入权限"
102
+ log_error "=========================================="
103
+ log_warn "请联系仓库管理员添加权限,或找有权限的评审人帮忙合入"
104
+ exit 1
105
+ fi
@@ -0,0 +1,159 @@
1
+ #!/bin/bash
2
+ # ssh-setup.sh - SSH 密钥检测与配置
3
+ # 自动检测本地 SSH 密钥,如不存在则生成,并引导用户完成 iCode 绑定
4
+
5
+ set -e
6
+
7
+ # 获取脚本所在目录
8
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
9
+
10
+ # 引入公共函数
11
+ source "$SCRIPT_DIR/common.sh"
12
+
13
+ # ========== SSH 密钥路径 ==========
14
+ SSH_DIR="$HOME/.ssh"
15
+ ED25519_KEY="$SSH_DIR/id_ed25519"
16
+ ED25519_PUB="$SSH_DIR/id_ed25519.pub"
17
+ RSA_KEY="$SSH_DIR/id_rsa"
18
+ RSA_PUB="$SSH_DIR/id_rsa.pub"
19
+
20
+ # iCode 密钥管理页面
21
+ ICODE_KEYS_URL="https://console.cloud.baidu-int.com/devops/icode/account/keys"
22
+
23
+ # ========== 检测 SSH 密钥 ==========
24
+ detect_ssh_key() {
25
+ log_step "检测本地 SSH 密钥..."
26
+
27
+ if [ -f "$ED25519_KEY" ] && [ -f "$ED25519_PUB" ]; then
28
+ log_info "检测到已有 SSH 密钥: $ED25519_KEY"
29
+ echo "$ED25519_PUB"
30
+ return 0
31
+ fi
32
+
33
+ if [ -f "$RSA_KEY" ] && [ -f "$RSA_PUB" ]; then
34
+ log_info "检测到已有 SSH 密钥: $RSA_KEY"
35
+ echo "$RSA_PUB"
36
+ return 0
37
+ fi
38
+
39
+ log_warn "未检测到 SSH 密钥"
40
+ echo ""
41
+ return 0
42
+ }
43
+
44
+ # ========== 生成 SSH 密钥 ==========
45
+ generate_ssh_key() {
46
+ log_step "生成新的 SSH 密钥 (ed25519)..."
47
+
48
+ # 确保 .ssh 目录存在
49
+ if [ ! -d "$SSH_DIR" ]; then
50
+ mkdir -p "$SSH_DIR"
51
+ chmod 700 "$SSH_DIR"
52
+ log_info "创建目录: $SSH_DIR"
53
+ fi
54
+
55
+ # 生成密钥(无密码)
56
+ ssh-keygen -t ed25519 -f "$ED25519_KEY" -N "" -C "icode-$(whoami)@$(hostname)"
57
+
58
+ if [ -f "$ED25519_PUB" ]; then
59
+ log_success "SSH 密钥生成成功: $ED25519_KEY"
60
+ echo "$ED25519_PUB"
61
+ else
62
+ log_error "SSH 密钥生成失败"
63
+ exit 1
64
+ fi
65
+ }
66
+
67
+ # ========== 复制公钥到剪贴板 ==========
68
+ copy_to_clipboard() {
69
+ local pub_key_file=$1
70
+ local pub_key_content
71
+ pub_key_content=$(cat "$pub_key_file")
72
+
73
+ log_step "复制公钥到剪贴板..."
74
+
75
+ # macOS
76
+ if command -v pbcopy &> /dev/null; then
77
+ echo "$pub_key_content" | pbcopy
78
+ log_success "公钥已复制到剪贴板 (pbcopy)"
79
+ return 0
80
+ fi
81
+
82
+ # Linux - xclip
83
+ if command -v xclip &> /dev/null; then
84
+ echo "$pub_key_content" | xclip -selection clipboard
85
+ log_success "公钥已复制到剪贴板 (xclip)"
86
+ return 0
87
+ fi
88
+
89
+ # Linux - xsel
90
+ if command -v xsel &> /dev/null; then
91
+ echo "$pub_key_content" | xsel --clipboard
92
+ log_success "公钥已复制到剪贴板 (xsel)"
93
+ return 0
94
+ fi
95
+
96
+ # 无剪贴板工具 - 打印公钥
97
+ log_warn "未找到剪贴板工具,请手动复制以下公钥内容:"
98
+ echo ""
99
+ echo "========== 公钥内容开始 =========="
100
+ echo "$pub_key_content"
101
+ echo "========== 公钥内容结束 =========="
102
+ echo ""
103
+ return 1
104
+ }
105
+
106
+ # ========== 显示引导信息 ==========
107
+ show_guidance() {
108
+ local copied=$1
109
+
110
+ echo ""
111
+ log_phase "===== SSH 密钥配置完成 ====="
112
+ echo ""
113
+
114
+ if [ "$copied" = "true" ]; then
115
+ echo "✅ 公钥已复制到剪贴板"
116
+ else
117
+ echo "⚠️ 请手动复制上方的公钥内容"
118
+ fi
119
+
120
+ echo ""
121
+ echo "📋 下一步操作:"
122
+ echo " 1. 打开 iCode 密钥管理页面:"
123
+ echo " ${CYAN}${ICODE_KEYS_URL}${NC}"
124
+ echo ""
125
+ echo " 2. 点击「添加 SSH 密钥」"
126
+ echo ""
127
+ echo " 3. 粘贴公钥内容并保存"
128
+ echo ""
129
+ echo "💡 完成后可使用以下命令测试连接:"
130
+ echo " ssh -T git@icode.baidu.com"
131
+ echo ""
132
+ }
133
+
134
+ # ========== 主流程 ==========
135
+ main() {
136
+ log_phase "===== SSH 密钥配置 ====="
137
+ echo ""
138
+
139
+ # 1. 检测已有密钥
140
+ local pub_key_file
141
+ pub_key_file=$(detect_ssh_key)
142
+
143
+ # 2. 如果没有密钥,生成新的
144
+ if [ -z "$pub_key_file" ]; then
145
+ pub_key_file=$(generate_ssh_key)
146
+ fi
147
+
148
+ # 3. 复制公钥到剪贴板
149
+ local copied="false"
150
+ if copy_to_clipboard "$pub_key_file"; then
151
+ copied="true"
152
+ fi
153
+
154
+ # 4. 显示引导信息
155
+ show_guidance "$copied"
156
+ }
157
+
158
+ # 执行主流程
159
+ main "$@"