smart-commit-copilot-cli 0.1.4 → 0.1.6

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 (150) hide show
  1. package/CHANGELOG.md +32 -0
  2. package/README.md +41 -11
  3. package/docs/configuration.md +23 -2
  4. package/docs/contracts.md +10 -2
  5. package/docs/getting-started.md +18 -4
  6. package/docs/publish.md +1 -1
  7. package/docs/releases/0.1.5-draft.md +44 -0
  8. package/docs/releases/0.1.6-draft.md +72 -0
  9. package/docs/verification.md +15 -0
  10. package/examples/config/smart-commit.json +3 -1
  11. package/out/cliApp.js +3 -1
  12. package/out/cliApp.js.map +1 -1
  13. package/out/commands/bridge.js +54 -23
  14. package/out/commands/bridge.js.map +1 -1
  15. package/out/commitMessage/index.js +28 -8
  16. package/out/commitMessage/index.js.map +1 -1
  17. package/out/commitMessage/prompt.js +2 -0
  18. package/out/commitMessage/prompt.js.map +1 -1
  19. package/out/commitMessage/protocol.js +122 -8
  20. package/out/commitMessage/protocol.js.map +1 -1
  21. package/out/config/cliArgs.js +12 -0
  22. package/out/config/cliArgs.js.map +1 -1
  23. package/out/config/constants.js +1 -0
  24. package/out/config/constants.js.map +1 -1
  25. package/out/config/env.js +9 -0
  26. package/out/config/env.js.map +1 -1
  27. package/out/config/file.js +10 -0
  28. package/out/config/file.js.map +1 -1
  29. package/out/config/legacySmartCommit.js +14 -0
  30. package/out/config/legacySmartCommit.js.map +1 -1
  31. package/out/config/schema.js +18 -1
  32. package/out/config/schema.js.map +1 -1
  33. package/out/contracts.js +15 -6
  34. package/out/contracts.js.map +1 -1
  35. package/out/llm/responseCorrection.js +32 -0
  36. package/out/llm/responseCorrection.js.map +1 -0
  37. package/out/passHistory/index.js +51 -22
  38. package/out/passHistory/index.js.map +1 -1
  39. package/out/passHistory/store.js +29 -1
  40. package/out/passHistory/store.js.map +1 -1
  41. package/out/passHistory/types.js +23 -1
  42. package/out/passHistory/types.js.map +1 -1
  43. package/out/promptContext.js +19 -3
  44. package/out/promptContext.js.map +1 -1
  45. package/out/renderOutput.js +2 -0
  46. package/out/renderOutput.js.map +1 -1
  47. package/out/reporting/prompt.js +13 -1
  48. package/out/reporting/prompt.js.map +1 -1
  49. package/out/reporting/timeWindow.js +7 -0
  50. package/out/reporting/timeWindow.js.map +1 -1
  51. package/out/reporting/types.js +1 -0
  52. package/out/reporting/types.js.map +1 -1
  53. package/out/review/diffClassifier.js +535 -0
  54. package/out/review/diffClassifier.js.map +1 -0
  55. package/out/review/index.js +27 -11
  56. package/out/review/index.js.map +1 -1
  57. package/out/review/mockProvider.js +157 -8
  58. package/out/review/mockProvider.js.map +1 -1
  59. package/out/review/openaiProvider.js +10 -4
  60. package/out/review/openaiProvider.js.map +1 -1
  61. package/out/review/parser.js +13 -0
  62. package/out/review/parser.js.map +1 -1
  63. package/out/review/prompt.js +76 -4
  64. package/out/review/prompt.js.map +1 -1
  65. package/out/skills/types.js +3 -0
  66. package/out/skills/types.js.map +1 -0
  67. package/package.json +2 -1
  68. package/src/code-review-skills/c-code-review/SKILL.md +165 -0
  69. package/src/code-review-skills/c-code-review/references/build-and-tooling.md +16 -0
  70. package/src/code-review-skills/c-code-review/references/concurrency-and-signals.md +16 -0
  71. package/src/code-review-skills/c-code-review/references/error-handling-and-cleanup.md +16 -0
  72. package/src/code-review-skills/c-code-review/references/macros-headers-and-build-boundaries.md +16 -0
  73. package/src/code-review-skills/c-code-review/references/performance-and-data-movement.md +16 -0
  74. package/src/code-review-skills/c-code-review/references/pointers-memory-and-resource-lifecycle.md +18 -0
  75. package/src/code-review-skills/c-code-review/references/scoring-guide.md +40 -0
  76. package/src/code-review-skills/c-code-review/references/undefined-behavior-and-safety.md +17 -0
  77. package/src/code-review-skills/code-review/SKILL.md +150 -0
  78. package/src/code-review-skills/code-review/references/code-quality-checklist.md +53 -0
  79. package/src/code-review-skills/code-review/references/removal-plan.md +45 -0
  80. package/src/code-review-skills/code-review/references/scoring-guide.md +38 -0
  81. package/src/code-review-skills/code-review/references/security-checklist.md +53 -0
  82. package/src/code-review-skills/code-review/references/solid-checklist.md +55 -0
  83. package/src/code-review-skills/cpp-code-review/SKILL.md +165 -0
  84. package/src/code-review-skills/cpp-code-review/references/build-and-tooling.md +12 -0
  85. package/src/code-review-skills/cpp-code-review/references/concurrency-and-atomics.md +14 -0
  86. package/src/code-review-skills/cpp-code-review/references/exceptions-and-error-model.md +16 -0
  87. package/src/code-review-skills/cpp-code-review/references/memory-raii-and-lifetimes.md +19 -0
  88. package/src/code-review-skills/cpp-code-review/references/performance-and-hot-paths.md +16 -0
  89. package/src/code-review-skills/cpp-code-review/references/scoring-guide.md +41 -0
  90. package/src/code-review-skills/cpp-code-review/references/templates-api-and-abi.md +13 -0
  91. package/src/code-review-skills/cpp-code-review/references/undefined-behavior-and-safety.md +18 -0
  92. package/src/code-review-skills/csharp-code-review/SKILL.md +159 -0
  93. package/src/code-review-skills/csharp-code-review/references/async-and-cancellation.md +16 -0
  94. package/src/code-review-skills/csharp-code-review/references/concurrency.md +15 -0
  95. package/src/code-review-skills/csharp-code-review/references/exceptions-and-api-contracts.md +16 -0
  96. package/src/code-review-skills/csharp-code-review/references/memory-resources-and-interop.md +16 -0
  97. package/src/code-review-skills/csharp-code-review/references/nullable-types-and-patterns.md +15 -0
  98. package/src/code-review-skills/csharp-code-review/references/scoring-guide.md +41 -0
  99. package/src/code-review-skills/csharp-code-review/references/web-data-and-security.md +15 -0
  100. package/src/code-review-skills/frontend-code-review/SKILL.md +143 -0
  101. package/src/code-review-skills/frontend-code-review/references/accessibility-and-semantic-ux.md +33 -0
  102. package/src/code-review-skills/frontend-code-review/references/interaction-and-state-lifecycle.md +39 -0
  103. package/src/code-review-skills/frontend-code-review/references/rendering-performance-and-resource-loading.md +34 -0
  104. package/src/code-review-skills/frontend-code-review/references/scoring-guide.md +38 -0
  105. package/src/code-review-skills/frontend-code-review/references/security-and-data-boundary.md +34 -0
  106. package/src/code-review-skills/golang-code-review/SKILL.md +153 -0
  107. package/src/code-review-skills/golang-code-review/references/api-contract-and-maintainability.md +25 -0
  108. package/src/code-review-skills/golang-code-review/references/concurrency-and-lifecycle.md +25 -0
  109. package/src/code-review-skills/golang-code-review/references/error-handling-and-reliability.md +24 -0
  110. package/src/code-review-skills/golang-code-review/references/performance-and-allocation.md +25 -0
  111. package/src/code-review-skills/golang-code-review/references/scoring-guide.md +40 -0
  112. package/src/code-review-skills/golang-code-review/references/security-and-trust-boundary.md +20 -0
  113. package/src/code-review-skills/java-code-review/SKILL.md +153 -0
  114. package/src/code-review-skills/java-code-review/references/api-contract-and-maintainability.md +22 -0
  115. package/src/code-review-skills/java-code-review/references/concurrency-and-lifecycle.md +27 -0
  116. package/src/code-review-skills/java-code-review/references/error-handling-and-reliability.md +25 -0
  117. package/src/code-review-skills/java-code-review/references/performance-and-resource-usage.md +23 -0
  118. package/src/code-review-skills/java-code-review/references/scoring-guide.md +40 -0
  119. package/src/code-review-skills/java-code-review/references/security-and-trust-boundary.md +20 -0
  120. package/src/code-review-skills/mobile-code-review/SKILL.md +171 -0
  121. package/src/code-review-skills/mobile-code-review/references/async-state-and-side-effects.md +19 -0
  122. package/src/code-review-skills/mobile-code-review/references/lifecycle-and-navigation.md +19 -0
  123. package/src/code-review-skills/mobile-code-review/references/performance-and-resource-management.md +19 -0
  124. package/src/code-review-skills/mobile-code-review/references/resilience-and-device-conditions.md +19 -0
  125. package/src/code-review-skills/mobile-code-review/references/scoring-guide.md +38 -0
  126. package/src/code-review-skills/mobile-code-review/references/storage-permissions-and-security.md +19 -0
  127. package/src/code-review-skills/mobile-code-review/references/testing-and-regression-coverage.md +21 -0
  128. package/src/code-review-skills/php-code-review/SKILL.md +159 -0
  129. package/src/code-review-skills/php-code-review/references/inclusion-superglobals-and-scope.md +21 -0
  130. package/src/code-review-skills/php-code-review/references/language-types-and-autoload.md +19 -0
  131. package/src/code-review-skills/php-code-review/references/oop-magic-and-errors.md +17 -0
  132. package/src/code-review-skills/php-code-review/references/performance-data-access-and-testing.md +16 -0
  133. package/src/code-review-skills/php-code-review/references/request-lifecycle-and-runtime.md +15 -0
  134. package/src/code-review-skills/php-code-review/references/scoring-guide.md +39 -0
  135. package/src/code-review-skills/php-code-review/references/security-and-io-boundary.md +24 -0
  136. package/src/code-review-skills/python-code-review/SKILL.md +147 -0
  137. package/src/code-review-skills/python-code-review/references/exception-and-lifecycle.md +15 -0
  138. package/src/code-review-skills/python-code-review/references/input-and-data-security.md +20 -0
  139. package/src/code-review-skills/python-code-review/references/maintainability-and-testing.md +21 -0
  140. package/src/code-review-skills/python-code-review/references/performance-and-resource-usage.md +21 -0
  141. package/src/code-review-skills/python-code-review/references/scoring-guide.md +38 -0
  142. package/src/code-review-skills/rust-code-review/SKILL.md +165 -0
  143. package/src/code-review-skills/rust-code-review/references/api-traits-and-evolution.md +16 -0
  144. package/src/code-review-skills/rust-code-review/references/cargo-features-and-test-coverage.md +16 -0
  145. package/src/code-review-skills/rust-code-review/references/concurrency-async-and-sync.md +17 -0
  146. package/src/code-review-skills/rust-code-review/references/error-handling-and-reliability.md +17 -0
  147. package/src/code-review-skills/rust-code-review/references/macros-ffi-and-embedded.md +19 -0
  148. package/src/code-review-skills/rust-code-review/references/ownership-borrowing-and-unsafe.md +20 -0
  149. package/src/code-review-skills/rust-code-review/references/performance-and-allocations.md +18 -0
  150. package/src/code-review-skills/rust-code-review/references/scoring-guide.md +41 -0
@@ -14,11 +14,11 @@ function createMockReviewProvider(config = {}) {
14
14
  return JSON.stringify({
15
15
  score: Math.min(input.threshold, 4),
16
16
  decision: "block",
17
- summary: `Mock review blocked the change set (${summaryHint}).`,
17
+ summary: localizeReviewText(input.reviewLanguage, "block-summary", summaryHint),
18
18
  details: [
19
19
  {
20
20
  severity: "P1",
21
- message: "Mock blocking issue."
21
+ message: localizeReviewText(input.reviewLanguage, "block-detail")
22
22
  }
23
23
  ]
24
24
  });
@@ -27,11 +27,11 @@ function createMockReviewProvider(config = {}) {
27
27
  return JSON.stringify({
28
28
  score: Math.max(input.threshold + 1, 9),
29
29
  decision: "block",
30
- summary: `Mock review reported issues but still assigned a high score (${summaryHint}).`,
30
+ summary: localizeReviewText(input.reviewLanguage, "block-high-score-summary", summaryHint),
31
31
  details: [
32
32
  {
33
33
  severity: "P2",
34
- message: "Mock non-blocking issue."
34
+ message: localizeReviewText(input.reviewLanguage, "block-high-score-detail")
35
35
  }
36
36
  ]
37
37
  });
@@ -40,31 +40,180 @@ function createMockReviewProvider(config = {}) {
40
40
  return JSON.stringify({
41
41
  score: null,
42
42
  decision: "pass",
43
- summary: `Mock review marked this change set as not requiring a numeric score (${summaryHint}).`,
43
+ summary: localizeReviewText(input.reviewLanguage, "na-summary", summaryHint),
44
44
  details: []
45
45
  });
46
46
  }
47
47
  return JSON.stringify({
48
48
  score: Math.max(input.threshold + 1, 8),
49
49
  decision: "pass",
50
- summary: `Mock review passed the change set (${summaryHint}).`,
50
+ summary: localizeReviewText(input.reviewLanguage, "pass-summary", summaryHint),
51
51
  details: []
52
52
  });
53
53
  },
54
54
  async repairReview(input, invalidResponse, issues) {
55
55
  const summaryHint = input.changedFiles.length > 0 ? `${input.changedFiles.length} changed file(s)` : "no changed files";
56
+ void invalidResponse;
56
57
  return JSON.stringify({
57
58
  score: Math.max(input.threshold + 1, 8),
58
59
  decision: "pass",
59
- summary: `Mock repair produced a valid review (${summaryHint}).`,
60
+ summary: localizeReviewText(input.reviewLanguage, "repair-summary", summaryHint),
60
61
  details: [
61
62
  {
62
63
  severity: "OTHER",
63
- message: `Repair issues handled: ${issues.join(" | ")}`
64
+ message: localizeReviewText(input.reviewLanguage, "repair-detail", issues.join(" | "))
64
65
  }
65
66
  ]
66
67
  });
67
68
  }
68
69
  };
69
70
  }
71
+ function localizeReviewText(language, key, value = "") {
72
+ switch (language) {
73
+ case "zh":
74
+ return localizeChineseText(key, value);
75
+ case "hi":
76
+ return localizeHindiText(key, value);
77
+ case "ru":
78
+ return localizeRussianText(key, value);
79
+ case "ko":
80
+ return localizeKoreanText(key, value);
81
+ case "ja":
82
+ return localizeJapaneseText(key, value);
83
+ default:
84
+ return localizeEnglishText(key, value);
85
+ }
86
+ }
87
+ function localizeEnglishText(key, value) {
88
+ switch (key) {
89
+ case "pass-summary":
90
+ return `Mock review passed the change set (${value}).`;
91
+ case "block-summary":
92
+ return `Mock review blocked the change set (${value}).`;
93
+ case "block-detail":
94
+ return "Mock blocking issue.";
95
+ case "block-high-score-summary":
96
+ return `Mock review reported issues but still assigned a high score (${value}).`;
97
+ case "block-high-score-detail":
98
+ return "Mock non-blocking issue.";
99
+ case "na-summary":
100
+ return `Mock review marked this change set as not requiring a numeric score (${value}).`;
101
+ case "repair-summary":
102
+ return `Mock repair produced a valid review (${value}).`;
103
+ case "repair-detail":
104
+ return `Repair issues handled: ${value}`;
105
+ default:
106
+ return value;
107
+ }
108
+ }
109
+ function localizeChineseText(key, value) {
110
+ switch (key) {
111
+ case "pass-summary":
112
+ return `模拟审查已通过此次变更(${value})。`;
113
+ case "block-summary":
114
+ return `模拟审查阻止了此次变更(${value})。`;
115
+ case "block-detail":
116
+ return "模拟阻断问题。";
117
+ case "block-high-score-summary":
118
+ return `模拟审查发现了问题,但仍给出了高分(${value})。`;
119
+ case "block-high-score-detail":
120
+ return "模拟非阻断问题。";
121
+ case "na-summary":
122
+ return `模拟审查认为此次变更无需数字评分(${value})。`;
123
+ case "repair-summary":
124
+ return `模拟修复已生成有效审查结果(${value})。`;
125
+ case "repair-detail":
126
+ return `已处理修复问题:${value}`;
127
+ default:
128
+ return value;
129
+ }
130
+ }
131
+ function localizeHindiText(key, value) {
132
+ switch (key) {
133
+ case "pass-summary":
134
+ return `मॉक समीक्षा पास हुई (${value})।`;
135
+ case "block-summary":
136
+ return `मॉक समीक्षा ने बदलाव रोका (${value})।`;
137
+ case "block-detail":
138
+ return "मॉक अवरोधक समस्या।";
139
+ case "block-high-score-summary":
140
+ return `मॉक समीक्षा ने समस्या बताई लेकिन उच्च स्कोर दिया (${value})।`;
141
+ case "block-high-score-detail":
142
+ return "मॉक गैर-अवरोधक समस्या।";
143
+ case "na-summary":
144
+ return `मॉक समीक्षा ने कहा कि संख्यात्मक स्कोर आवश्यक नहीं है (${value})।`;
145
+ case "repair-summary":
146
+ return `मॉक सुधार ने वैध समीक्षा बनाई (${value})।`;
147
+ case "repair-detail":
148
+ return `सुधार समस्याएँ संभाली गईं: ${value}`;
149
+ default:
150
+ return value;
151
+ }
152
+ }
153
+ function localizeRussianText(key, value) {
154
+ switch (key) {
155
+ case "pass-summary":
156
+ return `Тестовая проверка пройдена (${value}).`;
157
+ case "block-summary":
158
+ return `Тестовая проверка заблокировала изменение (${value}).`;
159
+ case "block-detail":
160
+ return "Тестовая блокирующая проблема.";
161
+ case "block-high-score-summary":
162
+ return `Тестовая проверка нашла проблемы, но оставила высокий балл (${value}).`;
163
+ case "block-high-score-detail":
164
+ return "Тестовая неблокирующая проблема.";
165
+ case "na-summary":
166
+ return `Тестовая проверка не требует числовой оценки (${value}).`;
167
+ case "repair-summary":
168
+ return `Тестовое исправление подготовило корректный результат проверки (${value}).`;
169
+ case "repair-detail":
170
+ return `Исправленные проблемы: ${value}`;
171
+ default:
172
+ return value;
173
+ }
174
+ }
175
+ function localizeKoreanText(key, value) {
176
+ switch (key) {
177
+ case "pass-summary":
178
+ return `모의 검토가 변경을 통과시켰습니다 (${value}).`;
179
+ case "block-summary":
180
+ return `모의 검토가 변경을 차단했습니다 (${value}).`;
181
+ case "block-detail":
182
+ return "모의 차단 이슈입니다.";
183
+ case "block-high-score-summary":
184
+ return `모의 검토가 이슈를 찾았지만 높은 점수를 유지했습니다 (${value}).`;
185
+ case "block-high-score-detail":
186
+ return "모의 비차단 이슈입니다.";
187
+ case "na-summary":
188
+ return `모의 검토가 숫자 점수가 필요하지 않다고 판단했습니다 (${value}).`;
189
+ case "repair-summary":
190
+ return `모의 복구가 유효한 검토 결과를 만들었습니다 (${value}).`;
191
+ case "repair-detail":
192
+ return `복구 이슈를 처리했습니다: ${value}`;
193
+ default:
194
+ return value;
195
+ }
196
+ }
197
+ function localizeJapaneseText(key, value) {
198
+ switch (key) {
199
+ case "pass-summary":
200
+ return `モックレビューは変更を通過と判定しました(${value})。`;
201
+ case "block-summary":
202
+ return `モックレビューは変更をブロックしました(${value})。`;
203
+ case "block-detail":
204
+ return "モックのブロッキング問題です。";
205
+ case "block-high-score-summary":
206
+ return `モックレビューは問題を報告しましたが高得点のままでした(${value})。`;
207
+ case "block-high-score-detail":
208
+ return "モックの非ブロッキング問題です。";
209
+ case "na-summary":
210
+ return `モックレビューは数値スコア不要と判定しました(${value})。`;
211
+ case "repair-summary":
212
+ return `モック修復で有効なレビュー結果を生成しました(${value})。`;
213
+ case "repair-detail":
214
+ return `修復対象の問題を処理しました: ${value}`;
215
+ default:
216
+ return value;
217
+ }
218
+ }
70
219
  //# sourceMappingURL=mockProvider.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"mockProvider.js","sourceRoot":"","sources":["../../src/review/mockProvider.ts"],"names":[],"mappings":";;AAGA,4DAsEC;AAtED,SAAgB,wBAAwB,CAAC,SAA4B,EAAE;IACrE,OAAO;QACL,IAAI,EAAE,MAAM;QACZ,KAAK,CAAC,cAAc,CAAC,KAA2B;YAC9C,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,WAAW,EAAE,IAAI,OAAO,CAAC,GAAG,CAAC,wBAAwB,EAAE,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;YAC7G,MAAM,WAAW,GAAG,KAAK,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,YAAY,CAAC,MAAM,kBAAkB,CAAC,CAAC,CAAC,kBAAkB,CAAC;YAExH,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;gBACvB,OAAO,UAAU,CAAC;YACpB,CAAC;YAED,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;gBACrB,OAAO,IAAI,CAAC,SAAS,CAAC;oBACpB,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC;oBACnC,QAAQ,EAAE,OAAO;oBACjB,OAAO,EAAE,uCAAuC,WAAW,IAAI;oBAC/D,OAAO,EAAE;wBACP;4BACE,QAAQ,EAAE,IAAI;4BACd,OAAO,EAAE,sBAAsB;yBAChC;qBACF;iBACF,CAAC,CAAC;YACL,CAAC;YAED,IAAI,IAAI,KAAK,kBAAkB,EAAE,CAAC;gBAChC,OAAO,IAAI,CAAC,SAAS,CAAC;oBACpB,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,EAAE,CAAC,CAAC;oBACvC,QAAQ,EAAE,OAAO;oBACjB,OAAO,EAAE,gEAAgE,WAAW,IAAI;oBACxF,OAAO,EAAE;wBACP;4BACE,QAAQ,EAAE,IAAI;4BACd,OAAO,EAAE,0BAA0B;yBACpC;qBACF;iBACF,CAAC,CAAC;YACL,CAAC;YAED,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;gBAClB,OAAO,IAAI,CAAC,SAAS,CAAC;oBACpB,KAAK,EAAE,IAAI;oBACX,QAAQ,EAAE,MAAM;oBAChB,OAAO,EAAE,wEAAwE,WAAW,IAAI;oBAChG,OAAO,EAAE,EAAE;iBACZ,CAAC,CAAC;YACL,CAAC;YAED,OAAO,IAAI,CAAC,SAAS,CAAC;gBACpB,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,EAAE,CAAC,CAAC;gBACvC,QAAQ,EAAE,MAAM;gBAChB,OAAO,EAAE,sCAAsC,WAAW,IAAI;gBAC9D,OAAO,EAAE,EAAE;aACZ,CAAC,CAAC;QACL,CAAC;QACD,KAAK,CAAC,YAAY,CAAC,KAA2B,EAAE,eAAuB,EAAE,MAAgB;YACvF,MAAM,WAAW,GAAG,KAAK,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,YAAY,CAAC,MAAM,kBAAkB,CAAC,CAAC,CAAC,kBAAkB,CAAC;YACxH,OAAO,IAAI,CAAC,SAAS,CAAC;gBACpB,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,EAAE,CAAC,CAAC;gBACvC,QAAQ,EAAE,MAAM;gBAChB,OAAO,EAAE,wCAAwC,WAAW,IAAI;gBAChE,OAAO,EAAE;oBACP;wBACE,QAAQ,EAAE,OAAO;wBACjB,OAAO,EAAE,0BAA0B,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;qBACxD;iBACF;aACF,CAAC,CAAC;QACL,CAAC;KACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"mockProvider.js","sourceRoot":"","sources":["../../src/review/mockProvider.ts"],"names":[],"mappings":"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"}
@@ -14,8 +14,11 @@ function createOpenAICompatibleReviewProvider(config) {
14
14
  promptAugmentation: (0, promptContext_1.buildPromptAugmentation)({
15
15
  repositoryPath: input.repositoryPath,
16
16
  skill: config.review.skill,
17
- categoryLabel: "review skill"
18
- })
17
+ categoryLabel: "review skill",
18
+ builtinCategory: "code-review"
19
+ }),
20
+ selectedSkillId: config.review.skill.id,
21
+ selectedSkillPath: config.review.skill.path
19
22
  }),
20
23
  temperature: 0.1,
21
24
  taskLabel: "review"
@@ -28,8 +31,11 @@ function createOpenAICompatibleReviewProvider(config) {
28
31
  promptAugmentation: (0, promptContext_1.buildPromptAugmentation)({
29
32
  repositoryPath: input.repositoryPath,
30
33
  skill: config.review.skill,
31
- categoryLabel: "review skill"
32
- })
34
+ categoryLabel: "review skill",
35
+ builtinCategory: "code-review"
36
+ }),
37
+ selectedSkillId: config.review.skill.id,
38
+ selectedSkillPath: config.review.skill.path
33
39
  }),
34
40
  temperature: 0.1,
35
41
  taskLabel: "review"
@@ -1 +1 @@
1
- {"version":3,"file":"openaiProvider.js","sourceRoot":"","sources":["../../src/review/openaiProvider.ts"],"names":[],"mappings":";;AAOA,oFAgCC;AAtCD,0DAAkE;AAClE,oDAA2D;AAE3D,qCAA0E;AAG1E,SAAgB,oCAAoC,CAAC,MAAiB;IACpE,OAAO;QACL,IAAI,EAAE,mBAAmB;QACzB,KAAK,CAAC,cAAc,CAAC,KAA2B;YAC9C,OAAO,IAAA,8CAA2B,EAAC;gBACjC,MAAM;gBACN,QAAQ,EAAE,IAAA,4BAAmB,EAAC,KAAK,EAAE;oBACnC,kBAAkB,EAAE,IAAA,uCAAuB,EAAC;wBAC1C,cAAc,EAAE,KAAK,CAAC,cAAc;wBACpC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK;wBAC1B,aAAa,EAAE,cAAc;qBAC9B,CAAC;iBACH,CAAC;gBACF,WAAW,EAAE,GAAG;gBAChB,SAAS,EAAE,QAAQ;aACpB,CAAC,CAAC;QACL,CAAC;QACD,KAAK,CAAC,YAAY,CAAC,KAA2B,EAAE,eAAuB,EAAE,MAAgB;YACvF,OAAO,IAAA,8CAA2B,EAAC;gBACjC,MAAM;gBACN,QAAQ,EAAE,IAAA,kCAAyB,EAAC,KAAK,EAAE,eAAe,EAAE,MAAM,EAAE;oBAClE,kBAAkB,EAAE,IAAA,uCAAuB,EAAC;wBAC1C,cAAc,EAAE,KAAK,CAAC,cAAc;wBACpC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK;wBAC1B,aAAa,EAAE,cAAc;qBAC9B,CAAC;iBACH,CAAC;gBACF,WAAW,EAAE,GAAG;gBAChB,SAAS,EAAE,QAAQ;aACpB,CAAC,CAAC;QACL,CAAC;KACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"openaiProvider.js","sourceRoot":"","sources":["../../src/review/openaiProvider.ts"],"names":[],"mappings":";;AAOA,oFAsCC;AA5CD,0DAAkE;AAClE,oDAA2D;AAE3D,qCAA0E;AAG1E,SAAgB,oCAAoC,CAAC,MAAiB;IACpE,OAAO;QACL,IAAI,EAAE,mBAAmB;QACzB,KAAK,CAAC,cAAc,CAAC,KAA2B;YAC9C,OAAO,IAAA,8CAA2B,EAAC;gBACjC,MAAM;gBACN,QAAQ,EAAE,IAAA,4BAAmB,EAAC,KAAK,EAAE;oBACnC,kBAAkB,EAAE,IAAA,uCAAuB,EAAC;wBAC1C,cAAc,EAAE,KAAK,CAAC,cAAc;wBACpC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK;wBAC1B,aAAa,EAAE,cAAc;wBAC7B,eAAe,EAAE,aAAa;qBAC/B,CAAC;oBACF,eAAe,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;oBACvC,iBAAiB,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI;iBAC5C,CAAC;gBACF,WAAW,EAAE,GAAG;gBAChB,SAAS,EAAE,QAAQ;aACpB,CAAC,CAAC;QACL,CAAC;QACD,KAAK,CAAC,YAAY,CAAC,KAA2B,EAAE,eAAuB,EAAE,MAAgB;YACvF,OAAO,IAAA,8CAA2B,EAAC;gBACjC,MAAM;gBACN,QAAQ,EAAE,IAAA,kCAAyB,EAAC,KAAK,EAAE,eAAe,EAAE,MAAM,EAAE;oBAClE,kBAAkB,EAAE,IAAA,uCAAuB,EAAC;wBAC1C,cAAc,EAAE,KAAK,CAAC,cAAc;wBACpC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK;wBAC1B,aAAa,EAAE,cAAc;wBAC7B,eAAe,EAAE,aAAa;qBAC/B,CAAC;oBACF,eAAe,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;oBACvC,iBAAiB,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI;iBAC5C,CAAC;gBACF,WAAW,EAAE,GAAG;gBAChB,SAAS,EAAE,QAAQ;aACpB,CAAC,CAAC;QACL,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -2,7 +2,9 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.parseReviewResponse = parseReviewResponse;
4
4
  exports.validateReviewResult = validateReviewResult;
5
+ exports.validateReviewContentLanguage = validateReviewContentLanguage;
5
6
  exports.shouldBlockReviewResult = shouldBlockReviewResult;
7
+ const protocol_1 = require("../commitMessage/protocol");
6
8
  const validSeverities = new Set(["P0", "P1", "P2", "P3", "OTHER"]);
7
9
  function parseReviewResponse(raw, provider) {
8
10
  const trimmed = raw.trim();
@@ -44,6 +46,17 @@ function validateReviewResult(result, threshold) {
44
46
  }
45
47
  return issues;
46
48
  }
49
+ function validateReviewContentLanguage(result, language) {
50
+ const issues = (0, protocol_1.validateLanguageText)(result.summary, language, "summary", {
51
+ allowChineseInBackticks: true
52
+ });
53
+ for (const [index, detail] of result.details.entries()) {
54
+ issues.push(...(0, protocol_1.validateLanguageText)(detail.message, language, `details[${index}].message`, {
55
+ allowChineseInBackticks: true
56
+ }));
57
+ }
58
+ return issues;
59
+ }
47
60
  function shouldBlockReviewResult(result, threshold) {
48
61
  if (result.score === null) {
49
62
  return result.decision === "block";
@@ -1 +1 @@
1
- {"version":3,"file":"parser.js","sourceRoot":"","sources":["../../src/review/parser.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"parser.js","sourceRoot":"","sources":["../../src/review/parser.ts"],"names":[],"mappings":"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"}
@@ -2,18 +2,19 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.buildReviewMessages = buildReviewMessages;
4
4
  exports.buildReviewRepairMessages = buildReviewRepairMessages;
5
+ const diffClassifier_1 = require("./diffClassifier");
5
6
  function buildReviewMessages(input, options = {}) {
6
7
  return [
7
8
  {
8
9
  role: "system",
9
10
  content: [
10
11
  "You are a senior code reviewer.",
12
+ "You must obey the requested review language for all natural-language review fields.",
11
13
  "Return strict JSON only.",
12
14
  'The JSON shape must be: {"score": number|null, "decision": "pass"|"block", "summary": string, "details": Array<{ "severity": "P0"|"P1"|"P2"|"P3"|"OTHER", "message": string, "filePath"?: string, "lineNumber"?: number }>}.',
13
15
  "Use the provided threshold to decide whether the change should pass or block.",
14
16
  "When score is numeric, score compared with threshold is the final pass/block standard, so decision must match the score-based outcome.",
15
- 'Use decision alone only when score is null.',
16
- ...(options.promptAugmentation?.length ? ["", ...options.promptAugmentation] : [])
17
+ 'Use decision alone only when score is null.'
17
18
  ].join(" ")
18
19
  },
19
20
  {
@@ -25,6 +26,8 @@ function buildReviewMessages(input, options = {}) {
25
26
  `Commit message: ${input.commitMessage ?? "(none)"}`,
26
27
  `Changed files (${input.changedFiles.length}):`,
27
28
  ...input.changedFiles.map((file) => `- ${file}`),
29
+ ...buildReviewPromptAugmentationSection(options.promptAugmentation),
30
+ ...buildReviewDiffDomainSection(input, options),
28
31
  "",
29
32
  "Staged diff:",
30
33
  input.diff
@@ -38,11 +41,11 @@ function buildReviewRepairMessages(input, invalidResponse, issues, options = {})
38
41
  role: "system",
39
42
  content: [
40
43
  "You are repairing a malformed code review response.",
44
+ "You must obey the requested review language for all natural-language review fields.",
41
45
  "Return strict JSON only.",
42
46
  'The JSON shape must be: {"score": number|null, "decision": "pass"|"block", "summary": string, "details": Array<{ "severity": "P0"|"P1"|"P2"|"P3"|"OTHER", "message": string, "filePath"?: string, "lineNumber"?: number }>}.',
43
47
  "When score is numeric, score compared with threshold is the final pass/block standard, so decision must match the score-based outcome.",
44
- 'Use decision alone only when score is null.',
45
- ...(options.promptAugmentation?.length ? ["", ...options.promptAugmentation] : [])
48
+ 'Use decision alone only when score is null.'
46
49
  ].join(" ")
47
50
  },
48
51
  {
@@ -52,6 +55,8 @@ function buildReviewRepairMessages(input, invalidResponse, issues, options = {})
52
55
  `Review language: ${input.reviewLanguage}`,
53
56
  `Threshold: ${input.threshold}`,
54
57
  `Commit message: ${input.commitMessage ?? "(none)"}`,
58
+ ...buildReviewPromptAugmentationSection(options.promptAugmentation),
59
+ ...buildReviewDiffDomainSection(input, options),
55
60
  "",
56
61
  "Previous invalid response:",
57
62
  invalidResponse,
@@ -62,4 +67,71 @@ function buildReviewRepairMessages(input, invalidResponse, issues, options = {})
62
67
  }
63
68
  ];
64
69
  }
70
+ function buildReviewPromptAugmentationSection(promptAugmentation) {
71
+ if (!promptAugmentation?.length) {
72
+ return [];
73
+ }
74
+ return ["", "Review skill guidance:", ...promptAugmentation];
75
+ }
76
+ function buildReviewDiffDomainSection(input, options) {
77
+ const detection = (0, diffClassifier_1.analyzeReviewSkillDomain)({
78
+ skill: buildReviewSkillForDetection(options.selectedSkillId, options.selectedSkillPath),
79
+ changedFiles: input.changedFiles,
80
+ diff: input.diff
81
+ });
82
+ return [
83
+ "",
84
+ "Detected diff domain:",
85
+ `- selected skill domain: ${detection.selectedSkillDomain}`,
86
+ `- detected diff domain: ${detection.detectedDomain}`,
87
+ `- confidence: ${detection.confidence}`,
88
+ `- matches selected skill: ${detection.matchesSelectedSkill ? "yes" : "no"}`,
89
+ `- fallback to generic review: ${detection.shouldFallbackToGeneric ? "yes" : "no"}`,
90
+ ...(detection.reasons.length > 0
91
+ ? [
92
+ "- classification reasons:",
93
+ ...detection.reasons.map((reason) => ` - ${reason}`)
94
+ ]
95
+ : []),
96
+ "Domain rules:",
97
+ "- Treat the detected diff domain as a classification hint for the review.",
98
+ "- If fallback to generic review is yes, keep the same JSON schema and do not mention skill mismatch.",
99
+ "- If fallback to generic review is yes, reduce language-specific assumptions and review the diff using generic correctness, reliability, security, maintainability, and testing standards."
100
+ ];
101
+ }
102
+ function buildReviewSkillForDetection(selectedSkillId, selectedSkillPath) {
103
+ return {
104
+ id: selectedSkillId ?? "code-review",
105
+ reviewDomain: resolveSelectedReviewSkillDomain(selectedSkillId, selectedSkillPath)
106
+ };
107
+ }
108
+ function resolveSelectedReviewSkillDomain(selectedSkillId, selectedSkillPath) {
109
+ if (selectedSkillPath?.trim()) {
110
+ return "generic";
111
+ }
112
+ switch ((selectedSkillId ?? "code-review").trim()) {
113
+ case "frontend-code-review":
114
+ return "frontend";
115
+ case "mobile-code-review":
116
+ return "mobile";
117
+ case "c-code-review":
118
+ return "c";
119
+ case "java-code-review":
120
+ return "java";
121
+ case "golang-code-review":
122
+ return "golang";
123
+ case "python-code-review":
124
+ return "python";
125
+ case "php-code-review":
126
+ return "php";
127
+ case "rust-code-review":
128
+ return "rust";
129
+ case "cpp-code-review":
130
+ return "cpp";
131
+ case "csharp-code-review":
132
+ return "csharp";
133
+ default:
134
+ return "generic";
135
+ }
136
+ }
65
137
  //# sourceMappingURL=prompt.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"prompt.js","sourceRoot":"","sources":["../../src/review/prompt.ts"],"names":[],"mappings":";;AAEA,kDAgCC;AAED,8DAkCC;AApED,SAAgB,mBAAmB,CACjC,KAA2B,EAC3B,UAAsD,EAAE;IAExD,OAAO;QACL;YACE,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE;gBACP,iCAAiC;gBACjC,0BAA0B;gBAC1B,8NAA8N;gBAC9N,+EAA+E;gBAC/E,wIAAwI;gBACxI,6CAA6C;gBAC7C,GAAG,CAAC,OAAO,CAAC,kBAAkB,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;aACnF,CAAC,IAAI,CAAC,GAAG,CAAC;SACZ;QACD;YACE,IAAI,EAAE,MAAM;YACZ,OAAO,EAAE;gBACP,eAAe,KAAK,CAAC,cAAc,EAAE;gBACrC,oBAAoB,KAAK,CAAC,cAAc,EAAE;gBAC1C,cAAc,KAAK,CAAC,SAAS,EAAE;gBAC/B,mBAAmB,KAAK,CAAC,aAAa,IAAI,QAAQ,EAAE;gBACpD,kBAAkB,KAAK,CAAC,YAAY,CAAC,MAAM,IAAI;gBAC/C,GAAG,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC;gBAChD,EAAE;gBACF,cAAc;gBACd,KAAK,CAAC,IAAI;aACX,CAAC,IAAI,CAAC,IAAI,CAAC;SACb;KACF,CAAC;AACJ,CAAC;AAED,SAAgB,yBAAyB,CACvC,KAA2B,EAC3B,eAAuB,EACvB,MAAgB,EAChB,UAAsD,EAAE;IAExD,OAAO;QACL;YACE,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE;gBACP,qDAAqD;gBACrD,0BAA0B;gBAC1B,8NAA8N;gBAC9N,wIAAwI;gBACxI,6CAA6C;gBAC7C,GAAG,CAAC,OAAO,CAAC,kBAAkB,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;aACnF,CAAC,IAAI,CAAC,GAAG,CAAC;SACZ;QACD;YACE,IAAI,EAAE,MAAM;YACZ,OAAO,EAAE;gBACP,eAAe,KAAK,CAAC,cAAc,EAAE;gBACrC,oBAAoB,KAAK,CAAC,cAAc,EAAE;gBAC1C,cAAc,KAAK,CAAC,SAAS,EAAE;gBAC/B,mBAAmB,KAAK,CAAC,aAAa,IAAI,QAAQ,EAAE;gBACpD,EAAE;gBACF,4BAA4B;gBAC5B,eAAe;gBACf,EAAE;gBACF,gBAAgB;gBAChB,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,EAAE,CAAC;aACvC,CAAC,IAAI,CAAC,IAAI,CAAC;SACb;KACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"prompt.js","sourceRoot":"","sources":["../../src/review/prompt.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/skills/types.ts"],"names":[],"mappings":""}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "smart-commit-copilot-cli",
3
- "version": "0.1.4",
3
+ "version": "0.1.6",
4
4
  "private": false,
5
5
  "description": "CLI for AI-assisted commit review, commit message generation, Git workflow automation, and work reports.",
6
6
  "license": "MIT",
@@ -10,6 +10,7 @@
10
10
  },
11
11
  "files": [
12
12
  "out",
13
+ "src/code-review-skills",
13
14
  "src/git-commit-message-skills",
14
15
  "README.md",
15
16
  "CHANGELOG.md",
@@ -0,0 +1,165 @@
1
+ ---
2
+ name: c-code-reviewer
3
+ review-domain: c
4
+ description: "C 语言专项代码审查技能,用于开发者在 commit 前审查底层模块、系统库封装和构建脚本改动。围绕指针与数组边界、手动内存与资源管理、未定义行为、错误码与清理路径、宏与头文件契约、并发与数据竞争、构建与告警配置等问题给出可执行修复建议。默认只输出审查结论,不直接修改代码。"
5
+ ---
6
+
7
+ # C 代码审查
8
+
9
+ ## 问题门槛
10
+
11
+ 每条问题必须满足以下三点,否则不输出:
12
+
13
+ 1. **可定位**:能指向具体文件和新增行号
14
+ 2. **可自证**:仅凭当前 diff 和可见上下文即可成立,不依赖 diff 之外的假设
15
+ 3. **可修复**:给出具体修复方案,而非泛泛建议
16
+
17
+ 同一根因的多处表现合并为一条,不重复列举。
18
+
19
+ ## 审查模式
20
+
21
+ 你会收到一段共享的 diff 类型识别结果。
22
+
23
+ - 当识别结果为 `c` 且与当前 skill 匹配时,按本 skill 的 C 专项标准审查
24
+ - 当识别结果与当前 skill 不匹配时,不要提示用户选错了 skill,也不要中止审查
25
+ - 不匹配时继续使用同一输出格式,但按现有通用 `code-review` 审查基线做稳妥审查
26
+ - 不匹配时减少对编译器扩展、目标平台、ABI 与未出现在 diff 中的构建系统行为的特有假设
27
+
28
+ ## 严重级别
29
+
30
+ | 等级 | 含义 | 处理 |
31
+ |------|------|------|
32
+ | **P0** | 安全漏洞、可证内存损坏、数据竞争、资源双重释放、核心路径不可用 | 必须修复后才能提交 |
33
+ | **P1** | 逻辑错误、功能异常、泄漏或清理路径破坏、明显性能/可靠性回退 | 提交前修复 |
34
+ | **P2** | 可维护性问题、测试不足、非阻塞设计问题 | 当前批次修复或登记后续任务 |
35
+ | **P3** | 次要改进 | 可选 |
36
+
37
+ ## 工作流
38
+
39
+ ### 1) 确认审查范围
40
+
41
+ 先关注共享分类结果、`changedFiles` 与 diff 本身,再决定本次是否使用 C 专项视角。
42
+
43
+ - 当前 diff 主要是 `.c`、`.h`、`Makefile`、`meson.build`、`configure.ac` 或面向 C 目标的构建改动时,使用 C 专项视角
44
+ - 当前 diff 若明显偏前端、Java、Go、Python、PHP、Rust、C++、C# 或类型不匹配,则直接回到通用稳妥审查
45
+ - 不因为用户选择了 C skill 就强行输出 C 专属问题
46
+
47
+ ### 2) 代码分析
48
+
49
+ #### a) 指针、内存与资源生命周期
50
+
51
+ 加载 `references/pointers-memory-and-resource-lifecycle.md`,检查指针所有权、数组边界、`malloc`/`free`、句柄与早返回路径。
52
+
53
+ #### b) 未定义行为与安全
54
+
55
+ 加载 `references/undefined-behavior-and-safety.md`,检查整数溢出假设、越界、别名、未初始化、格式化字符串与危险库调用。
56
+
57
+ #### c) 错误处理与清理路径
58
+
59
+ 加载 `references/error-handling-and-cleanup.md`,检查返回码、`errno`、`goto cleanup`、部分初始化失败与资源回滚。
60
+
61
+ #### d) 并发与信号(若适用)
62
+
63
+ 加载 `references/concurrency-and-signals.md`,仅在 diff 出现 `pthread`、原子、共享状态或信号处理时检查竞态、锁顺序与 async-signal-safety。
64
+
65
+ #### e) 宏、头文件与构建边界
66
+
67
+ 加载 `references/macros-headers-and-build-boundaries.md`,检查头文件暴露、宏副作用、重复求值、包含顺序与条件编译边界。
68
+
69
+ #### f) 性能与数据移动
70
+
71
+ 加载 `references/performance-and-data-movement.md`,检查不必要拷贝、重复扫描、热路径上的内存移动与缓冲区扩容。
72
+
73
+ #### g) 构建与工具链(若适用)
74
+
75
+ 加载 `references/build-and-tooling.md`,仅在 diff 出现 Make/Meson/CMake/编译告警或 Sanitizer 配置时检查标准版本、警告等级与调试选项是否合理。
76
+
77
+ #### h) 通用工程基线补充
78
+
79
+ 完成 C 专项检查后,补充对通用 `code-review` 的以下基线检查:架构与设计,以及当 diff 包含删除时的冗余与残留引用。C 专项维度只负责语言、内存与构建风险,不替代通用工程审查。
80
+
81
+ ### 3) 整理问题列表
82
+
83
+ 确认每条问题满足门槛(可定位、可自证、可修复)。同一根因的多处表现合并为一条。不为凑数量降低标准。
84
+
85
+ ### 4) 评分
86
+
87
+ 加载 `references/scoring-guide.md`,**每次审查必须根据该指南给出具体评分**:先按最严重问题确定基准区间,再按影响广度、问题数量、可逆性在区间内微调,最终输出一个具体分值(如 8.5、7.0),不得只写区间或省略评分;纯文件删除时记为 N/A。
88
+
89
+ ### 5) 输出格式
90
+
91
+ 按以下格式输出:
92
+
93
+ ```markdown
94
+ ## 审查摘要
95
+
96
+ **审查范围**:X 个文件,Y 行新增
97
+
98
+ **评分**:X / 10(必须为具体分值,如 8.5;仅纯删除时为 N/A)
99
+
100
+ **提交建议**:✅ 可以提交 / ✅ 可以提交,跟进修复 / 🔧 修复后提交 / 🚫 禁止提交
101
+
102
+ **问题统计**:P0 × 个 / P1 × 个 / P2 × 个 / P3 × 个
103
+
104
+ ---
105
+
106
+ ## 各维度结果
107
+
108
+ | # | 维度 | 结论 |
109
+ |---|------|------|
110
+ | 1 | 指针、内存与资源生命周期 | ✅ 无问题 / ⚠️ 存在问题(简述) |
111
+ | 2 | 未定义行为与安全 | ✅ 无问题 / ⚠️ 存在问题(简述) |
112
+ | 3 | 错误处理与清理路径 | ✅ 无问题 / ⚠️ 存在问题(简述) |
113
+ | 4 | 并发与信号(若适用) | ✅ 无问题 / ⚠️ 存在问题(简述) / 不适用 |
114
+ | 5 | 宏、头文件与构建边界 | ✅ 无问题 / ⚠️ 存在问题(简述) |
115
+ | 6 | 性能与数据移动 | ✅ 无问题 / ⚠️ 存在问题(简述) |
116
+ | 7 | 构建与工具链(若适用) | ✅ 无问题 / ⚠️ 存在问题(简述) / 不适用 |
117
+
118
+ ---
119
+
120
+ ## 问题列表
121
+
122
+ ### P0 🔴 严重
123
+
124
+
125
+ ### P1 🟠 高
126
+ 1. **[文件:行号] 问题标题**
127
+ - **问题**:一句话说明是什么问题
128
+ - **影响**:一句话说明会导致什么后果
129
+ - **修复**:具体方案
130
+
131
+ ### P2 🟡 中
132
+
133
+
134
+ ### P3 🟢 低
135
+
136
+
137
+ ---
138
+
139
+ ## 总体评价
140
+
141
+ 2-3 句话说明是否建议提交,以及还需要哪些修复或跟进。
142
+ ```
143
+
144
+ **输出规则:**
145
+
146
+ - 每次审查必须在「审查摘要」中给出根据 `references/scoring-guide.md` 计算的具体评分(X / 10),不得省略。
147
+ - 直接给问题,不写前言铺垫。
148
+ - 每条问题写清楚:位置、问题是什么、影响是什么、如何修复。
149
+ - 只在有明确代码路径支撑时输出问题,不猜具体 libc、编译器版本或未出现在 diff 中的外部依赖行为。
150
+ - 如果共享分类结果提示应回到通用审查,则按通用基线保守审查,但仍然使用本 skill 的统一输出结构。
151
+ - 禁止在模板之外添加"亮点"、"优点"、"表扬"等额外章节。
152
+ - `## 总体评价` 只写 2-3 句连续段落,不用列表或子标题。
153
+
154
+ ## 参考文件
155
+
156
+ | 文件 | 用途 |
157
+ |------|------|
158
+ | `pointers-memory-and-resource-lifecycle.md` | 指针所有权、手动内存与资源释放检查项 |
159
+ | `undefined-behavior-and-safety.md` | 越界、整数、格式化字符串与 UB 检查项 |
160
+ | `error-handling-and-cleanup.md` | 返回码、`errno`、清理路径与回滚检查项 |
161
+ | `concurrency-and-signals.md` | pthread、原子、信号处理与竞态检查项 |
162
+ | `macros-headers-and-build-boundaries.md` | 宏副作用、头文件契约与条件编译检查项 |
163
+ | `performance-and-data-movement.md` | 内存移动、扫描次数与热路径分配检查项 |
164
+ | `build-and-tooling.md` | 构建系统、警告等级与 Sanitizer 检查项 |
165
+ | `scoring-guide.md` | 评分模型、区间规则和提交建议 |