@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,236 @@
1
+ #!/bin/bash
2
+ # submit-acr.sh - AI 代码评审脚本 (Linux/macOS)
3
+ # 自动执行 AI 代码评审 + 问题修复的循环流程
4
+ #
5
+ # 使用方法:
6
+ # ./submit-acr.sh [CR编号] [最大循环次数] [AI评审超时秒数] [严重度阈值]
7
+ #
8
+ # 示例:
9
+ # ./submit-acr.sh # 自动检测 CR,使用默认参数
10
+ # ./submit-acr.sh 120247220 # 指定 CR
11
+ # ./submit-acr.sh 120247220 10 1200 5 # 完整参数
12
+
13
+ set -e
14
+
15
+ # 加载公共函数
16
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
17
+ source "$SCRIPT_DIR/common.sh"
18
+
19
+ # 触发 AI 评审
20
+ trigger_ai_review() {
21
+ local change_number=$1
22
+
23
+ local result
24
+ local stderr_output
25
+ local exit_code
26
+ stderr_output=$(mktemp)
27
+
28
+ # 临时禁用 set -e,避免命令失败时脚本退出
29
+ set +e
30
+ result=$("$ICODE_CLI" api start_ai_review --change-number "$change_number" -o json 2>"$stderr_output")
31
+ exit_code=$?
32
+ set -e
33
+
34
+ if [ $exit_code -ne 0 ]; then
35
+ # 检查是否有 API 错误信息
36
+ if grep -q "API_REQUEST_FAILED\|BAD_REQUEST" "$stderr_output" 2>/dev/null; then
37
+ local api_error
38
+ api_error=$(grep -oE '"message":"[^"]*"' "$stderr_output" | head -1 | sed 's/"message":"//;s/"$//')
39
+ log_error "API 调用失败: $api_error" >&2
40
+ else
41
+ log_error "触发 AI 评审失败" >&2
42
+ cat "$stderr_output" >&2
43
+ fi
44
+ rm -f "$stderr_output"
45
+ return 1
46
+ fi
47
+ rm -f "$stderr_output"
48
+
49
+ if [ -z "$result" ]; then
50
+ log_error "触发 AI 评审失败: 无返回结果" >&2
51
+ return 1
52
+ fi
53
+
54
+ local status
55
+ status=$(echo "$result" | "$ICODE_CLI" jq -r '.status' 2>/dev/null)
56
+
57
+ if [ "$status" != "OK" ]; then
58
+ local message
59
+ message=$(echo "$result" | "$ICODE_CLI" jq -r '.message' 2>/dev/null)
60
+ log_error "触发 AI 评审失败: $message" >&2
61
+ return 1
62
+ fi
63
+
64
+ echo "$result" | "$ICODE_CLI" jq -r '.conversationId' 2>/dev/null
65
+ }
66
+
67
+ # 获取 AI 评审结果
68
+ get_ai_review_result() {
69
+ local conversation_id=$1
70
+ "$ICODE_CLI" api get_ai_review --conversation-id "$conversation_id" -o json 2>/dev/null
71
+ }
72
+
73
+ # 检查 AI 评审状态
74
+ check_ai_review_status() {
75
+ local result=$1
76
+ echo "$result" | "$ICODE_CLI" jq -r '.data.crStatus' 2>/dev/null
77
+ }
78
+
79
+ # 统计需要修复的问题数量
80
+ count_ai_issues() {
81
+ local result=$1
82
+ local severity_threshold=$2
83
+ echo "$result" | "$ICODE_CLI" jq "
84
+ [.data.results[] |
85
+ select(.messageType == \"INTERLINEAR_COMMENT\") |
86
+ .processedContent |
87
+ select(.severityScore >= $severity_threshold)] | length
88
+ " 2>/dev/null || echo "0"
89
+ }
90
+
91
+ # 输出 AI 评审问题详情
92
+ print_ai_issues() {
93
+ local result=$1
94
+ local severity_threshold=$2
95
+
96
+ echo ""
97
+ log_warn "========== AI 评审问题 (severityScore >= $severity_threshold) =========="
98
+ echo ""
99
+
100
+ echo "$result" | "$ICODE_CLI" jq -r "
101
+ .data.results[] |
102
+ select(.messageType == \"INTERLINEAR_COMMENT\") |
103
+ .processedContent |
104
+ select(.severityScore >= $severity_threshold) |
105
+ \"【文件】\\(.fileName)\\n【行号】\\(.startLine)-\\(.endLine)\\n【严重度】\\(.severityScore)\\n【问题】\\(.message)\\n\"
106
+ " 2>/dev/null
107
+
108
+ log_warn "=========================================="
109
+ echo ""
110
+ }
111
+
112
+ # ========== 主流程 ==========
113
+
114
+ # 初始化环境
115
+ init_toolkit_env
116
+
117
+ CHANGE_NUMBER=${1:-""}
118
+ MAX_LOOPS=${2:-10}
119
+ AI_CR_TIMEOUT=${3:-1200}
120
+ SEVERITY_THRESHOLD=${4:-5}
121
+ POLL_INTERVAL=10
122
+
123
+ # 如果没有指定 CR 编号,自动检测
124
+ if [ -z "$CHANGE_NUMBER" ]; then
125
+ log_step "检测当前 CR..."
126
+ CHANGE_NUMBER=$(get_current_cr "$ICODE_CLI" "$REPO_NAME" "$USERNAME")
127
+
128
+ if [ -z "$CHANGE_NUMBER" ]; then
129
+ log_error "未找到当前 commit 对应的 CR"
130
+ log_warn "请先执行 submit-cr.sh 提交 CR,或手动指定 CR 编号"
131
+ exit 1
132
+ fi
133
+ fi
134
+
135
+ echo ""
136
+ log_info "========== AI CR 流程 =========="
137
+ log_info "CR 编号: $CHANGE_NUMBER"
138
+ log_info "最大循环次数: $MAX_LOOPS"
139
+ log_info "AI 评审超时: ${AI_CR_TIMEOUT}s"
140
+ log_info "严重度阈值: $SEVERITY_THRESHOLD"
141
+ log_info "===================================="
142
+ echo ""
143
+
144
+ # 主循环
145
+ LOOP_COUNT=0
146
+
147
+ while [ $LOOP_COUNT -lt $MAX_LOOPS ]; do
148
+ LOOP_COUNT=$((LOOP_COUNT + 1))
149
+
150
+ echo ""
151
+ log_phase "========== 第 $LOOP_COUNT 轮 (共 $MAX_LOOPS 轮) =========="
152
+ echo ""
153
+
154
+ log_phase "AI 代码评审"
155
+ log_step "触发 AI 评审..."
156
+
157
+ set +e
158
+ CONVERSATION_ID=$(trigger_ai_review "$CHANGE_NUMBER")
159
+ TRIGGER_EXIT_CODE=$?
160
+ set -e
161
+
162
+ if [ $TRIGGER_EXIT_CODE -ne 0 ] || [ -z "$CONVERSATION_ID" ]; then
163
+ log_error "触发 AI 评审失败"
164
+ exit 1
165
+ fi
166
+
167
+ log_info "会话 ID: $CONVERSATION_ID"
168
+ log_step "轮询 AI 评审结果..."
169
+
170
+ ELAPSED=0
171
+ AI_RESULT=""
172
+
173
+ while [ $ELAPSED -lt $AI_CR_TIMEOUT ]; do
174
+ AI_RESULT=$(get_ai_review_result "$CONVERSATION_ID")
175
+ AI_STATUS=$(check_ai_review_status "$AI_RESULT")
176
+
177
+ case "$AI_STATUS" in
178
+ "SUSS")
179
+ log_info "AI 评审完成"
180
+ break
181
+ ;;
182
+ "FAIL")
183
+ log_error "AI 评审执行失败"
184
+ exit 1
185
+ ;;
186
+ "TIMEOUT")
187
+ log_error "AI 评审执行超时"
188
+ exit 1
189
+ ;;
190
+ "EXECUTING")
191
+ log_info "AI 评审执行中... (${ELAPSED}s / ${AI_CR_TIMEOUT}s)"
192
+ sleep $POLL_INTERVAL
193
+ ELAPSED=$((ELAPSED + POLL_INTERVAL))
194
+ ;;
195
+ *)
196
+ log_warn "未知状态: $AI_STATUS,继续等待..."
197
+ sleep $POLL_INTERVAL
198
+ ELAPSED=$((ELAPSED + POLL_INTERVAL))
199
+ ;;
200
+ esac
201
+ done
202
+
203
+ if [ $ELAPSED -ge $AI_CR_TIMEOUT ]; then
204
+ log_error "轮询超时(${AI_CR_TIMEOUT}s),AI 评审未完成"
205
+ exit 1
206
+ fi
207
+
208
+ AI_ISSUE_COUNT=$(count_ai_issues "$AI_RESULT" "$SEVERITY_THRESHOLD")
209
+
210
+ if [ "$AI_ISSUE_COUNT" -eq 0 ]; then
211
+ echo ""
212
+ log_info "=========================================="
213
+ log_info "✓ AI CR 流程通过!"
214
+ log_info " - AI 评审: 无高优问题 (severityScore >= $SEVERITY_THRESHOLD)"
215
+ log_info "=========================================="
216
+ exit 0
217
+ fi
218
+
219
+ log_warn "AI 评审发现 $AI_ISSUE_COUNT 个需要修复的问题"
220
+ print_ai_issues "$AI_RESULT" "$SEVERITY_THRESHOLD"
221
+
222
+ if [ $LOOP_COUNT -lt $MAX_LOOPS ]; then
223
+ log_warn "请 Agent 修复上述 AI 评审问题"
224
+ log_warn "修复完成后:"
225
+ log_warn " 1. 使用 Edit 工具修复代码"
226
+ log_warn " 2. 执行 submit-cr.sh 提交"
227
+ log_warn " 3. 再次运行: $0 $CHANGE_NUMBER $MAX_LOOPS $AI_CR_TIMEOUT $SEVERITY_THRESHOLD"
228
+ exit 2
229
+ fi
230
+ done
231
+
232
+ echo ""
233
+ log_error "=========================================="
234
+ log_error "✗ AI CR 流程失败,已达到最大循环次数 ($MAX_LOOPS)"
235
+ log_error "=========================================="
236
+ exit 1
@@ -0,0 +1,104 @@
1
+ #!/bin/bash
2
+ # submit-cr.sh - 智能提交代码评审脚本 (Linux/macOS)
3
+ # 自动判断新建 CR 或追加到已有 CR(Amend 模式)
4
+ #
5
+ # 使用方法:
6
+ # ./submit-cr.sh [目标分支]
7
+ #
8
+ # 示例:
9
+ # ./submit-cr.sh # 默认 master 分支
10
+ # ./submit-cr.sh develop # 指定 develop 分支
11
+
12
+ set -e
13
+
14
+ # 加载公共函数
15
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
16
+ source "$SCRIPT_DIR/common.sh"
17
+
18
+ # 初始化环境
19
+ init_toolkit_env
20
+
21
+ # 获取本地信息
22
+ LOCAL_COMMIT=$(git rev-parse HEAD)
23
+ COMMIT_MSG=$(git log -1 --format="%s")
24
+ ICAFE_CARD=$(echo "$COMMIT_MSG" | grep -oE '^[A-Za-z0-9]+-[0-9]+' | head -1 || true)
25
+ DEFAULT_BRANCH=${1:-master}
26
+
27
+ echo ""
28
+ log_info "本地 Commit: $LOCAL_COMMIT"
29
+ log_info "Commit Message: $COMMIT_MSG"
30
+ log_info "iCafe 卡片号: ${ICAFE_CARD:-无}"
31
+ log_info "默认目标分支: $DEFAULT_BRANCH"
32
+ echo ""
33
+
34
+ # 查询远程 CR
35
+ log_step "查询远程 CR 列表..."
36
+ CR_LIST=$($ICODE_CLI api get_repo_reviews --repo "$REPO_NAME" --status NEW -o json 2>/dev/null || echo '{"data":{"changes":[]}}')
37
+
38
+ # 方式一:通过 commit hash 匹配
39
+ log_step "匹配已有 CR..."
40
+ MATCHED_BY_HASH=$(echo "$CR_LIST" | $ICODE_CLI jq -r ".data.changes[] | select(.owner.username == \"$USERNAME\" and .current_revision == \"$LOCAL_COMMIT\") | ._number" 2>/dev/null | head -1 || true)
41
+
42
+ # 方式二:通过 iCafe 卡片号匹配
43
+ MATCHED_BY_CARD=""
44
+ if [ -z "$MATCHED_BY_HASH" ] && [ -n "$ICAFE_CARD" ]; then
45
+ MATCHED_BY_CARD=$(echo "$CR_LIST" | $ICODE_CLI jq -r ".data.changes[] | select(.owner.username == \"$USERNAME\" and (.subject | startswith(\"$ICAFE_CARD\"))) | ._number" 2>/dev/null | head -1 || true)
46
+ fi
47
+
48
+ MATCHED_CR=${MATCHED_BY_HASH:-$MATCHED_BY_CARD}
49
+
50
+ if [ -n "$MATCHED_CR" ]; then
51
+ MATCHED_BRANCH=$(echo "$CR_LIST" | $ICODE_CLI jq -r ".data.changes[] | select(._number == $MATCHED_CR) | .branch" 2>/dev/null)
52
+
53
+ if [ -n "$MATCHED_BY_HASH" ]; then
54
+ log_info "通过 Commit Hash 匹配到 CR: #$MATCHED_CR"
55
+ else
56
+ log_info "通过 iCafe 卡片号 ($ICAFE_CARD) 匹配到 CR: #$MATCHED_CR"
57
+ fi
58
+ log_info "目标分支: $MATCHED_BRANCH"
59
+ echo ""
60
+
61
+ log_step "执行 Amend 模式..."
62
+
63
+ if [ -n "$(git status --porcelain)" ]; then
64
+ log_step "添加工作区修改..."
65
+ git add -A
66
+ log_step "Amend 提交..."
67
+ git commit --amend --no-edit
68
+ else
69
+ log_warn "工作区没有新修改,直接推送"
70
+ fi
71
+
72
+ log_step "推送 CR..."
73
+ $ICODE_CLI git push_cr --branch "$MATCHED_BRANCH"
74
+ else
75
+ log_info "未找到匹配的 CR"
76
+ log_info "目标分支: $DEFAULT_BRANCH"
77
+ echo ""
78
+
79
+ log_step "执行新建 CR 模式..."
80
+
81
+ if [ -n "$(git status --porcelain)" ]; then
82
+ log_step "添加工作区修改..."
83
+ git add -A
84
+
85
+ echo -e "${YELLOW}请输入 commit message:${NC}"
86
+ read -r NEW_COMMIT_MSG
87
+
88
+ if [ -z "$NEW_COMMIT_MSG" ]; then
89
+ log_error "commit message 不能为空"
90
+ exit 1
91
+ fi
92
+
93
+ log_step "创建新 commit..."
94
+ git commit -m "$NEW_COMMIT_MSG"
95
+ else
96
+ log_warn "工作区没有新修改,直接推送当前 commit"
97
+ fi
98
+
99
+ log_step "推送 CR..."
100
+ $ICODE_CLI git push_cr --branch "$DEFAULT_BRANCH"
101
+ fi
102
+
103
+ echo ""
104
+ log_info "CR 提交完成!"
@@ -0,0 +1,89 @@
1
+ #!/bin/bash
2
+ # test-preflight.sh - icode 前置检测测试
3
+
4
+ set -e
5
+
6
+ RED='\033[0;31m'
7
+ GREEN='\033[0;32m'
8
+ YELLOW='\033[1;33m'
9
+ BLUE='\033[0;34m'
10
+ NC='\033[0m'
11
+
12
+ PASS_COUNT=0
13
+ FAIL_COUNT=0
14
+
15
+ log_test() { echo -e "${BLUE}[TEST]${NC} $1"; }
16
+ log_pass() { echo -e "${GREEN}[PASS]${NC} $1"; PASS_COUNT=$((PASS_COUNT + 1)); }
17
+ log_fail() { echo -e "${RED}[FAIL]${NC} $1"; FAIL_COUNT=$((FAIL_COUNT + 1)); }
18
+ log_skip() { echo -e "${YELLOW}[SKIP]${NC} $1"; }
19
+
20
+ REQUIRED_ICODE_CLI_VERSION="0.1.8"
21
+
22
+ version_ge() {
23
+ [ "$(printf '%s\n' "$1" "$2" | sort -V | head -n1)" = "$2" ]
24
+ }
25
+
26
+ echo ""
27
+ echo "=========================================="
28
+ echo "icode 前置检测测试"
29
+ echo "=========================================="
30
+ echo ""
31
+
32
+ # ----- 测试 icode-cli -----
33
+ log_test "检测 icode-cli..."
34
+ CLI_PATH=""
35
+ if command -v icode-cli &> /dev/null; then
36
+ CLI_PATH="icode-cli"
37
+ log_pass "icode-cli 在 PATH 中"
38
+ elif [ -x "$HOME/.icode/bin/icode-cli" ]; then
39
+ CLI_PATH="$HOME/.icode/bin/icode-cli"
40
+ log_pass "icode-cli 在 ~/.icode/bin/ 中"
41
+ else
42
+ log_fail "icode-cli 未找到"
43
+ fi
44
+
45
+ if [ -n "$CLI_PATH" ]; then
46
+ CLI_VERSION=$("$CLI_PATH" version 2>/dev/null | grep -oE '[0-9]+\.[0-9]+\.[0-9]+' | head -1)
47
+ if [ -n "$CLI_VERSION" ]; then
48
+ if version_ge "$CLI_VERSION" "$REQUIRED_ICODE_CLI_VERSION"; then
49
+ log_pass "版本 $CLI_VERSION >= $REQUIRED_ICODE_CLI_VERSION"
50
+ else
51
+ log_fail "版本 $CLI_VERSION < $REQUIRED_ICODE_CLI_VERSION"
52
+ fi
53
+ fi
54
+ fi
55
+
56
+ echo ""
57
+
58
+ # ----- 测试登录状态 -----
59
+ log_test "检测登录状态..."
60
+ if [ -n "$CLI_PATH" ]; then
61
+ LOGIN_OUTPUT=$("$CLI_PATH" login 2>&1)
62
+ if echo "$LOGIN_OUTPUT" | grep -q "Logged in as"; then
63
+ USERNAME=$(echo "$LOGIN_OUTPUT" | grep "Logged in as" | awk '{print $NF}')
64
+ log_pass "已登录: $USERNAME"
65
+ elif echo "$LOGIN_OUTPUT" | grep -q "Not logged in"; then
66
+ log_fail "未登录"
67
+ else
68
+ log_skip "无法确定登录状态"
69
+ fi
70
+ else
71
+ log_skip "icode-cli 未安装"
72
+ fi
73
+
74
+ echo ""
75
+
76
+ # ----- 测试 git 仓库 -----
77
+ log_test "检测 git 仓库..."
78
+ if git rev-parse --is-inside-work-tree &> /dev/null; then
79
+ log_pass "当前目录是 git 仓库"
80
+ else
81
+ log_skip "当前目录不是 git 仓库"
82
+ fi
83
+
84
+ echo ""
85
+ echo "=========================================="
86
+ echo "测试结果: 通过 $PASS_COUNT / 失败 $FAIL_COUNT"
87
+ echo "=========================================="
88
+
89
+ [ $FAIL_COUNT -gt 0 ] && exit 1 || exit 0
@@ -0,0 +1,121 @@
1
+ ---
2
+ name: ku-operator
3
+ description: 操作百度内部知识库(Ku)系统的文档。支持文档内容查询、知识库目录查询、新建文档、移动文档等操作。当用户需要在知识库中创建文档、查看文档内容、浏览目录结构、或移动文档位置时使用此 Skill。
4
+ metadata:
5
+ enableWhen:
6
+ - isInternal
7
+ ---
8
+
9
+ # 知识库文档操作(Ku Operator)
10
+
11
+ 操作百度内部知识库系统的文档,支持文档 CRUD 操作。所有操作通过同目录下的 CLI 脚本执行。
12
+
13
+ ## 前置依赖
14
+
15
+ - **Skill 依赖 `get-ugate-token`**:认证通过 get-ugate-token skill 自动获取个人身份 token
16
+ - **环境变量 `COMATE_USERNAME`**:当前用户的百度用户名,认证和创建/移动文档时自动读取
17
+ - **当前用户名**: ${COMATE_USERNAME},即`COMATE_USERNAME=${COMATE_USERNAME}`
18
+ - **Python 依赖**:`requests` 库
19
+ - **CLI 工具 `dodo_cli bos upload`**:`create-doc` 上传图片/附件时自动调用
20
+ - **执行方式**:在 Skill 目录下使用 **`python3`** 直接运行脚本,不要 import 调用
21
+
22
+ ## 认证说明
23
+
24
+ 本 skill 依赖 `get-ugate-token` skill 进行个人身份认证。调用时自动获取 ugate token:
25
+ - 若本地已有有效的 token 缓存文件,直接使用,无需用户介入
26
+ - 若 token 不存在或已过期,`get-ugate-token` 会向用户推送授权卡片(如流消息),脚本以退出码 2 中断当前任务
27
+ - 用户完成授权后,重新发起操作即可
28
+
29
+ API 返回 401/403 时,脚本会提示用户重新触发授权流程并以退出码 2 退出。
30
+
31
+ ## 知识库 URL 与 ID 解析(重要)
32
+
33
+ ```
34
+ https://ku.baidu-int.com/knowledge/{spaceGuid}/{groupGuid}/{repoGuid}/{docGuid}
35
+ ```
36
+
37
+ | URL 段 | 含义 | 说明 |
38
+ |--------|------|------|
39
+ | `spaceGuid` | 空间 ID | 一般不需要使用 |
40
+ | `groupGuid` | 分组 ID | 一般不需要使用 |
41
+ | `repoGuid` | **知识库 ID** | 用于 `--repo-guid` 参数 |
42
+ | `docGuid` | **文档 ID** | 用于 `--doc-id` 参数,URL 最后一段 |
43
+
44
+ **路径段数判断链接类型:**
45
+ - **4 段**(含 docGuid)→ 文档链接,可直接 `query-content` 读取
46
+ - **3 段**(仅到 repoGuid)→ 知识库链接,需先 `query-repo` 查询目录
47
+
48
+ ## 重要概念:文档即目录
49
+
50
+ 知识库中**文档和目录是同一个概念**——任何文档都可以拥有子文档。读取文档后应通过 `query-repo --parent-doc-guid <该文档ID>` 检查是否有子文档,按需加载以提供完整结果。
51
+
52
+ ## 写入目标知识库确定策略
53
+
54
+ 当用户要求"写入知识库"但**未指定目标**时,按优先级:
55
+
56
+ 1. **当前会话中提及的知识库**:从 URL 解析 `repoGuid`/`docGuid`
57
+ 2. **项目关联的默认知识库**:读取 `knowledge/ku_doc/ku_doc_usage.md`(可能不存在)
58
+ 3. **询问用户**:请用户提供目标知识库文档的 URL
59
+
60
+ **写入范围约束:**
61
+ - 文档链接(4 段)→ 只能在该文档及其子目录下创建
62
+ - 知识库链接(3 段)→ 可在整个知识库范围内创建
63
+ - 用户明确指定其他位置时,以用户指令为准
64
+
65
+ ## CLI 子命令一览
66
+
67
+ 统一入口:`python3 scripts/ku_operator.py <子命令> [参数]`
68
+
69
+ | 子命令 | 功能 | 必填参数 | 常用可选参数 |
70
+ |--------|------|----------|-------------|
71
+ | `query-content` | 查询文档内容(Markdown 输出) | `--doc-id` 或 `--url`(二选一) | `--save-assets-dir`, `--no-download-assets`, `--raw-json` |
72
+ | `query-repo` | 查询知识库目录(文本树形输出) | `--repo-guid` | `--parent-doc-guid`, `--page` |
73
+ | `create-doc` | 新建文档 | `--repo-guid` | `--title`, `--content-file`, `--parent-doc-guid` |
74
+ | `copy-doc` | 复制文档 | `--doc-id` | `--to-repo-guid`, `--to-parent-guid`, `--new-title` |
75
+ | `move-doc` | 移动文档 | `--doc-id` + `--to-repo-guid` | `--to-parent-guid` |
76
+ | `delete-doc` | 删除文档 | `--doc-id` | — |
77
+ | `query-comment` | 查询文档评论(格式化文本输出) | `--doc-id` | `--type`, `--page`, `--raw-json` |
78
+ | `query-user-info` | 查询当前用户信息及个人知识库 | — | — |
79
+ | `upload-attachment` | 上传附件到文档正文 | `--doc-id` + `--file` | `--no-insert`, `--view-type` |
80
+ | `query-flowchart` | 查询文档流程图数据 | `--doc-id` | `--flowchart-id`, `--output` |
81
+ | `query-recent-view` | 查询文档浏览记录(格式化文本输出) | `--doc-id` | `--begin-time`, `--end-time`, `--page`, `--raw-json` |
82
+ | `add-member` | 添加文档成员 | `--doc-id` + `--usernames` + `--role` | — |
83
+ | `update-member` | 更新文档成员角色 | `--doc-id` + `--username` + `--role` | — |
84
+ | `query-permission` | 查询用户文档权限 | `--doc-id` + `--usernames` | — |
85
+ | `change-scope` | 修改文档公开/私密范围 | `--doc-id` + `--scope` | — |
86
+
87
+ **关键用法说明:**
88
+ - `query-content` 默认自动下载远程图片/附件到 `./ku_assets/{doc_id}/`,并替换 Markdown 中的 URL。读取文档后注意 stderr 资源下载摘要,按需用 Read 工具查看已下载的图片。
89
+ - `create-doc` 使用 `--content-file` 时自动上传本地图片/附件到 BOS。**Markdown 中图片/附件引用必须使用绝对路径**。
90
+ - `query-user-info` 返回 `personalRepoGuid`(个人知识库 ID)和 `personalRepoUrl`。
91
+ - 创建者/操作者用户名自动从 `COMATE_USERNAME` 读取。
92
+
93
+ ## API 详细文档
94
+
95
+ 各子命令的详细参数、输出格式、使用示例见 `references/` 目录:
96
+
97
+ | 文档 | 内容 |
98
+ |------|------|
99
+ | `references/query_content.md` | 文档内容查询详细说明 |
100
+ | `references/query_repo.md` | 知识库目录查询详细说明 |
101
+ | `references/create_doc.md` | 新建文档详细说明 |
102
+ | `references/copy_doc.md` | 复制文档详细说明 |
103
+ | `references/move_doc.md` | 移动文档详细说明 |
104
+ | `references/delete_doc.md` | 删除文档详细说明 |
105
+ | `references/query_comment.md` | 查询文档评论详细说明 |
106
+ | `references/query_user_info.md` | 用户信息查询详细说明 |
107
+ | `references/upload_attachment.md` | 上传附件到文档正文 |
108
+ | `references/query_flowchart.md` | 查询文档流程图数据 |
109
+ | `references/update_member.md` | 更新文档成员角色 |
110
+ | `references/query_permission.md` | 查询用户文档权限 |
111
+ | `references/change_scope.md` | 修改文档公开/私密范围 |
112
+
113
+ ## 错误处理
114
+
115
+ **可自行修复(重试):** 参数缺失、ID 格式错误(repoGuid/docGuid 搞反)、页码超出范围
116
+
117
+ **需告知用户(不重试):**
118
+ - 认证失败(401/403)→ 提示用户重新发起操作以触发 get-ugate-token 授权
119
+ - 文档不存在(404)→ 告知用户检查文档是否已被删除
120
+ - 无操作权限 → 告知用户联系知识库管理员
121
+ - 服务端错误(5xx)→ 告知用户稍后再试