smart-commit-copilot-cli 0.1.5 → 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 (149) hide show
  1. package/CHANGELOG.md +21 -0
  2. package/README.md +37 -7
  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.6-draft.md +72 -0
  8. package/docs/verification.md +15 -0
  9. package/examples/config/smart-commit.json +3 -1
  10. package/out/cliApp.js +3 -1
  11. package/out/cliApp.js.map +1 -1
  12. package/out/commands/bridge.js +54 -23
  13. package/out/commands/bridge.js.map +1 -1
  14. package/out/commitMessage/index.js +28 -8
  15. package/out/commitMessage/index.js.map +1 -1
  16. package/out/commitMessage/prompt.js +2 -0
  17. package/out/commitMessage/prompt.js.map +1 -1
  18. package/out/commitMessage/protocol.js +122 -8
  19. package/out/commitMessage/protocol.js.map +1 -1
  20. package/out/config/cliArgs.js +12 -0
  21. package/out/config/cliArgs.js.map +1 -1
  22. package/out/config/constants.js +1 -0
  23. package/out/config/constants.js.map +1 -1
  24. package/out/config/env.js +9 -0
  25. package/out/config/env.js.map +1 -1
  26. package/out/config/file.js +10 -0
  27. package/out/config/file.js.map +1 -1
  28. package/out/config/legacySmartCommit.js +14 -0
  29. package/out/config/legacySmartCommit.js.map +1 -1
  30. package/out/config/schema.js +18 -1
  31. package/out/config/schema.js.map +1 -1
  32. package/out/contracts.js +15 -6
  33. package/out/contracts.js.map +1 -1
  34. package/out/llm/responseCorrection.js +32 -0
  35. package/out/llm/responseCorrection.js.map +1 -0
  36. package/out/passHistory/index.js +51 -22
  37. package/out/passHistory/index.js.map +1 -1
  38. package/out/passHistory/store.js +29 -1
  39. package/out/passHistory/store.js.map +1 -1
  40. package/out/passHistory/types.js +23 -1
  41. package/out/passHistory/types.js.map +1 -1
  42. package/out/promptContext.js +19 -3
  43. package/out/promptContext.js.map +1 -1
  44. package/out/renderOutput.js +2 -0
  45. package/out/renderOutput.js.map +1 -1
  46. package/out/reporting/prompt.js +13 -1
  47. package/out/reporting/prompt.js.map +1 -1
  48. package/out/reporting/timeWindow.js +7 -0
  49. package/out/reporting/timeWindow.js.map +1 -1
  50. package/out/reporting/types.js +1 -0
  51. package/out/reporting/types.js.map +1 -1
  52. package/out/review/diffClassifier.js +535 -0
  53. package/out/review/diffClassifier.js.map +1 -0
  54. package/out/review/index.js +27 -11
  55. package/out/review/index.js.map +1 -1
  56. package/out/review/mockProvider.js +157 -8
  57. package/out/review/mockProvider.js.map +1 -1
  58. package/out/review/openaiProvider.js +10 -4
  59. package/out/review/openaiProvider.js.map +1 -1
  60. package/out/review/parser.js +13 -0
  61. package/out/review/parser.js.map +1 -1
  62. package/out/review/prompt.js +76 -4
  63. package/out/review/prompt.js.map +1 -1
  64. package/out/skills/types.js +3 -0
  65. package/out/skills/types.js.map +1 -0
  66. package/package.json +2 -1
  67. package/src/code-review-skills/c-code-review/SKILL.md +165 -0
  68. package/src/code-review-skills/c-code-review/references/build-and-tooling.md +16 -0
  69. package/src/code-review-skills/c-code-review/references/concurrency-and-signals.md +16 -0
  70. package/src/code-review-skills/c-code-review/references/error-handling-and-cleanup.md +16 -0
  71. package/src/code-review-skills/c-code-review/references/macros-headers-and-build-boundaries.md +16 -0
  72. package/src/code-review-skills/c-code-review/references/performance-and-data-movement.md +16 -0
  73. package/src/code-review-skills/c-code-review/references/pointers-memory-and-resource-lifecycle.md +18 -0
  74. package/src/code-review-skills/c-code-review/references/scoring-guide.md +40 -0
  75. package/src/code-review-skills/c-code-review/references/undefined-behavior-and-safety.md +17 -0
  76. package/src/code-review-skills/code-review/SKILL.md +150 -0
  77. package/src/code-review-skills/code-review/references/code-quality-checklist.md +53 -0
  78. package/src/code-review-skills/code-review/references/removal-plan.md +45 -0
  79. package/src/code-review-skills/code-review/references/scoring-guide.md +38 -0
  80. package/src/code-review-skills/code-review/references/security-checklist.md +53 -0
  81. package/src/code-review-skills/code-review/references/solid-checklist.md +55 -0
  82. package/src/code-review-skills/cpp-code-review/SKILL.md +165 -0
  83. package/src/code-review-skills/cpp-code-review/references/build-and-tooling.md +12 -0
  84. package/src/code-review-skills/cpp-code-review/references/concurrency-and-atomics.md +14 -0
  85. package/src/code-review-skills/cpp-code-review/references/exceptions-and-error-model.md +16 -0
  86. package/src/code-review-skills/cpp-code-review/references/memory-raii-and-lifetimes.md +19 -0
  87. package/src/code-review-skills/cpp-code-review/references/performance-and-hot-paths.md +16 -0
  88. package/src/code-review-skills/cpp-code-review/references/scoring-guide.md +41 -0
  89. package/src/code-review-skills/cpp-code-review/references/templates-api-and-abi.md +13 -0
  90. package/src/code-review-skills/cpp-code-review/references/undefined-behavior-and-safety.md +18 -0
  91. package/src/code-review-skills/csharp-code-review/SKILL.md +159 -0
  92. package/src/code-review-skills/csharp-code-review/references/async-and-cancellation.md +16 -0
  93. package/src/code-review-skills/csharp-code-review/references/concurrency.md +15 -0
  94. package/src/code-review-skills/csharp-code-review/references/exceptions-and-api-contracts.md +16 -0
  95. package/src/code-review-skills/csharp-code-review/references/memory-resources-and-interop.md +16 -0
  96. package/src/code-review-skills/csharp-code-review/references/nullable-types-and-patterns.md +15 -0
  97. package/src/code-review-skills/csharp-code-review/references/scoring-guide.md +41 -0
  98. package/src/code-review-skills/csharp-code-review/references/web-data-and-security.md +15 -0
  99. package/src/code-review-skills/frontend-code-review/SKILL.md +143 -0
  100. package/src/code-review-skills/frontend-code-review/references/accessibility-and-semantic-ux.md +33 -0
  101. package/src/code-review-skills/frontend-code-review/references/interaction-and-state-lifecycle.md +39 -0
  102. package/src/code-review-skills/frontend-code-review/references/rendering-performance-and-resource-loading.md +34 -0
  103. package/src/code-review-skills/frontend-code-review/references/scoring-guide.md +38 -0
  104. package/src/code-review-skills/frontend-code-review/references/security-and-data-boundary.md +34 -0
  105. package/src/code-review-skills/golang-code-review/SKILL.md +153 -0
  106. package/src/code-review-skills/golang-code-review/references/api-contract-and-maintainability.md +25 -0
  107. package/src/code-review-skills/golang-code-review/references/concurrency-and-lifecycle.md +25 -0
  108. package/src/code-review-skills/golang-code-review/references/error-handling-and-reliability.md +24 -0
  109. package/src/code-review-skills/golang-code-review/references/performance-and-allocation.md +25 -0
  110. package/src/code-review-skills/golang-code-review/references/scoring-guide.md +40 -0
  111. package/src/code-review-skills/golang-code-review/references/security-and-trust-boundary.md +20 -0
  112. package/src/code-review-skills/java-code-review/SKILL.md +153 -0
  113. package/src/code-review-skills/java-code-review/references/api-contract-and-maintainability.md +22 -0
  114. package/src/code-review-skills/java-code-review/references/concurrency-and-lifecycle.md +27 -0
  115. package/src/code-review-skills/java-code-review/references/error-handling-and-reliability.md +25 -0
  116. package/src/code-review-skills/java-code-review/references/performance-and-resource-usage.md +23 -0
  117. package/src/code-review-skills/java-code-review/references/scoring-guide.md +40 -0
  118. package/src/code-review-skills/java-code-review/references/security-and-trust-boundary.md +20 -0
  119. package/src/code-review-skills/mobile-code-review/SKILL.md +171 -0
  120. package/src/code-review-skills/mobile-code-review/references/async-state-and-side-effects.md +19 -0
  121. package/src/code-review-skills/mobile-code-review/references/lifecycle-and-navigation.md +19 -0
  122. package/src/code-review-skills/mobile-code-review/references/performance-and-resource-management.md +19 -0
  123. package/src/code-review-skills/mobile-code-review/references/resilience-and-device-conditions.md +19 -0
  124. package/src/code-review-skills/mobile-code-review/references/scoring-guide.md +38 -0
  125. package/src/code-review-skills/mobile-code-review/references/storage-permissions-and-security.md +19 -0
  126. package/src/code-review-skills/mobile-code-review/references/testing-and-regression-coverage.md +21 -0
  127. package/src/code-review-skills/php-code-review/SKILL.md +159 -0
  128. package/src/code-review-skills/php-code-review/references/inclusion-superglobals-and-scope.md +21 -0
  129. package/src/code-review-skills/php-code-review/references/language-types-and-autoload.md +19 -0
  130. package/src/code-review-skills/php-code-review/references/oop-magic-and-errors.md +17 -0
  131. package/src/code-review-skills/php-code-review/references/performance-data-access-and-testing.md +16 -0
  132. package/src/code-review-skills/php-code-review/references/request-lifecycle-and-runtime.md +15 -0
  133. package/src/code-review-skills/php-code-review/references/scoring-guide.md +39 -0
  134. package/src/code-review-skills/php-code-review/references/security-and-io-boundary.md +24 -0
  135. package/src/code-review-skills/python-code-review/SKILL.md +147 -0
  136. package/src/code-review-skills/python-code-review/references/exception-and-lifecycle.md +15 -0
  137. package/src/code-review-skills/python-code-review/references/input-and-data-security.md +20 -0
  138. package/src/code-review-skills/python-code-review/references/maintainability-and-testing.md +21 -0
  139. package/src/code-review-skills/python-code-review/references/performance-and-resource-usage.md +21 -0
  140. package/src/code-review-skills/python-code-review/references/scoring-guide.md +38 -0
  141. package/src/code-review-skills/rust-code-review/SKILL.md +165 -0
  142. package/src/code-review-skills/rust-code-review/references/api-traits-and-evolution.md +16 -0
  143. package/src/code-review-skills/rust-code-review/references/cargo-features-and-test-coverage.md +16 -0
  144. package/src/code-review-skills/rust-code-review/references/concurrency-async-and-sync.md +17 -0
  145. package/src/code-review-skills/rust-code-review/references/error-handling-and-reliability.md +17 -0
  146. package/src/code-review-skills/rust-code-review/references/macros-ffi-and-embedded.md +19 -0
  147. package/src/code-review-skills/rust-code-review/references/ownership-borrowing-and-unsafe.md +20 -0
  148. package/src/code-review-skills/rust-code-review/references/performance-and-allocations.md +18 -0
  149. package/src/code-review-skills/rust-code-review/references/scoring-guide.md +41 -0
@@ -0,0 +1,165 @@
1
+ ---
2
+ name: cpp-code-reviewer
3
+ review-domain: cpp
4
+ description: "C++ 专项代码审查技能,用于开发者在 commit 前审查库、二进制与 CMake/Conan 等工程改动。围绕 RAII 与对象生命周期、并发与内存模型、未定义行为、异常与 noexcept 契约、模板与 API/ABI、构建与工具链等问题给出可执行修复建议。默认只输出审查结论,不直接修改代码。"
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
+ - 当识别结果为 `cpp` 且与当前 skill 匹配时,按本 skill 的 C++ 专项标准审查
24
+ - 当识别结果与当前 skill 不匹配时,不要提示用户选错了 skill,也不要中止审查
25
+ - 不匹配时继续使用同一输出格式,但按现有通用 `code-review` 审查基线做稳妥审查
26
+ - 不匹配时减少对 CMake 布局、工具链版本与部署拓扑的特有假设
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 主要是 `.cpp`/`.hpp` 等源文件、`CMakeLists.txt`、Conan/vcpkg 配置等改动时,使用 C++ 专项视角
44
+ - 当前 diff 若明显偏前端、Java、Go、Python、PHP、Rust、C# 或类型不匹配,则直接回到通用稳妥审查
45
+ - 不因为用户选择了 C++ skill 就强行输出 C++ 专属问题
46
+
47
+ ### 2) 代码分析
48
+
49
+ #### a) 内存、RAII 与生命周期
50
+
51
+ 加载 `references/memory-raii-and-lifetimes.md`,检查 `new`/`delete`、智能指针、容器与迭代器失效、悬垂引用/指针、析构顺序与对象状态。
52
+
53
+ #### b) 并发与内存模型
54
+
55
+ 加载 `references/concurrency-and-atomics.md`,检查 `std::thread`、`mutex`/`lock_guard`、`atomic`、数据竞争、锁顺序与死锁风险。
56
+
57
+ #### c) 未定义行为与安全
58
+
59
+ 加载 `references/undefined-behavior-and-safety.md`,检查 `const` 正确性、别名与 `reinterpret_cast`、有符号溢出假设、空指针与边界。
60
+
61
+ #### d) 异常与错误模型
62
+
63
+ 加载 `references/exceptions-and-error-model.md`,检查 `noexcept` 契约、异常安全等级、析构与回调中的异常、错误码或 `std::expected` 等(若 diff 可见)。
64
+
65
+ #### e) 模板、API 与 ABI
66
+
67
+ 加载 `references/templates-api-and-abi.md`,检查 `concept`/`requires`、SFINAE、`inline`/ODR、`pimpl`、可见性与二进制兼容性风险。
68
+
69
+ #### f) 性能与热路径
70
+
71
+ 加载 `references/performance-and-hot-paths.md`,检查不必要拷贝、分配回退、算法复杂度、热路径锁竞争与缓存友好性。
72
+
73
+ #### g) 构建与工具链(若适用)
74
+
75
+ 加载 `references/build-and-tooling.md`,仅在 diff 出现 CMake/编译数据库/静态分析配置时检查目标、链接、警告与 Sanitizer 相关选项是否合理。
76
+
77
+ #### h) 通用工程基线补充
78
+
79
+ 完成 C++ 专项检查后,补充对通用 `code-review` 的以下基线检查:架构与设计,以及当 diff 包含删除时的冗余与残留引用。C++ 专项维度只负责语言、ABI 与工具链风险,不替代通用工程审查。
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 | 内存、RAII 与生命周期 | ✅ 无问题 / ⚠️ 存在问题(简述) |
111
+ | 2 | 并发与内存模型 | ✅ 无问题 / ⚠️ 存在问题(简述) |
112
+ | 3 | 未定义行为与安全 | ✅ 无问题 / ⚠️ 存在问题(简述) |
113
+ | 4 | 异常与错误模型 | ✅ 无问题 / ⚠️ 存在问题(简述) |
114
+ | 5 | 模板、API 与 ABI | ✅ 无问题 / ⚠️ 存在问题(简述) |
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
+ - 只在有明确代码路径支撑时输出问题,不猜具体编译器版本或未出现在 diff 中的第三方库行为。
150
+ - 如果共享分类结果提示应回到通用审查,则按通用基线保守审查,但仍然使用本 skill 的统一输出结构。
151
+ - 禁止在模板之外添加"亮点"、"优点"、"表扬"等额外章节。
152
+ - `## 总体评价` 只写 2-3 句连续段落,不用列表或子标题。
153
+
154
+ ## 参考文件
155
+
156
+ | 文件 | 用途 |
157
+ |------|------|
158
+ | `memory-raii-and-lifetimes.md` | RAII、智能指针、迭代器失效、生命周期检查项 |
159
+ | `concurrency-and-atomics.md` | 线程、互斥、原子与数据竞争检查项 |
160
+ | `undefined-behavior-and-safety.md` | UB、别名、`const`、边界检查项 |
161
+ | `exceptions-and-error-model.md` | 异常安全、`noexcept`、错误传播检查项 |
162
+ | `templates-api-and-abi.md` | 模板、concept、ODR、API/ABI 检查项 |
163
+ | `performance-and-hot-paths.md` | 热路径分配、拷贝、锁竞争与复杂度检查项 |
164
+ | `build-and-tooling.md` | CMake、编译选项、静态分析配置检查项 |
165
+ | `scoring-guide.md` | 评分模型、区间规则和提交建议 |
@@ -0,0 +1,12 @@
1
+ # 构建与工具链检查清单
2
+
3
+ ## CMake 与目标
4
+
5
+ - `add_library` / `target_link_libraries` 是否错误公开私有依赖、或链接顺序导致符号缺失(diff 可证)。
6
+ - 是否关闭关键警告或全局降低警告等级而无注释说明风险。
7
+
8
+ ## 工具配置
9
+
10
+ - `compile_commands.json`、`.clang-tidy` 等变更是否明显禁用重要检查项或误配包含路径导致静态分析失效。
11
+
12
+ 仅在 diff 涉及构建/配置文件时启用本清单;不臆测 CI 或未展示的生成器行为。
@@ -0,0 +1,14 @@
1
+ # 并发与内存模型检查清单
2
+
3
+ ## 线程与同步
4
+
5
+ - 新增跨线程共享可变状态是否缺少 `mutex`、`lock_guard`/`unique_lock` 或其它可证同步,导致数据竞争。
6
+ - 锁顺序是否引入可证死锁(嵌套锁、多把锁交叉获取)。
7
+ - 在持锁范围内是否调用可能重入或回调用户代码的路径,导致同锁再入或顺序反转。
8
+
9
+ ## 原子与可见性
10
+
11
+ - 对非原子类型的跨线程读写是否依赖「可见性」而无同步;`volatile` 是否被误当作线程同步手段。
12
+ - `memory_order` 使用是否明显过弱,导致发布/获取语义不足(仅在 diff 展示具体顺序时可证)。
13
+
14
+ 仅在 diff 能支撑结论时报告问题;不猜测运行时调度或硬件细节。
@@ -0,0 +1,16 @@
1
+ # 异常与错误模型检查清单
2
+
3
+ ## noexcept 与析构
4
+
5
+ - 标记为 `noexcept` 的函数、移动构造/赋值或析构中是否新增可能抛出的操作且无 `try`/降级策略。
6
+ - 析构函数中是否抛出异常(违反语言规则与惯例)。
7
+
8
+ ## 异常安全等级
9
+
10
+ - 提供强/基本保证的 API 是否在失败路径上留下损坏不变量、泄漏资源或部分构造对象未清理(diff 可证)。
11
+
12
+ ## 错误传播
13
+
14
+ - 若 diff 使用错误码、`std::expected` 或 `Outcome` 式 API,是否混用未检查返回值与异常两种模型导致遗漏错误处理。
15
+
16
+ 仅在 diff 能支撑结论时报告问题;不猜测调用方是否捕获异常。
@@ -0,0 +1,19 @@
1
+ # 内存、RAII 与生命周期检查清单
2
+
3
+ ## 裸资源与智能指针
4
+
5
+ - 新增 `new` 是否缺少对应 `delete`、或错误配对(数组 `new[]` 与标量 `delete` 混用)且 diff 可证。
6
+ - `std::unique_ptr` / `std::shared_ptr` 是否与原始指针双重拥有同一对象,或从已释放指针再构造智能指针。
7
+ - 自定义析构或 `reset` 顺序是否可能导致仍被引用的子对象先被销毁。
8
+
9
+ ## 容器与迭代器
10
+
11
+ - 在遍历容器的同时是否对该容器进行可能使迭代器失效的插入/删除/再分配,且未使用可证安全 API(如 `erase` 返回值)。
12
+ - 返回指向局部容器或临时对象的指针/引用/视图(如 `string_view` 指向已销毁临时量)。
13
+
14
+ ## 悬垂与生命周期
15
+
16
+ - 回调、异步或延后执行是否捕获指针/引用而 diff 显示其指向对象可能已析构。
17
+ - `std::move` 后是否仍使用移出对象状态而未重新赋值或文档保证。
18
+
19
+ 仅在 diff 能支撑结论时报告问题;不推断未展示的调用链或完整类层次。
@@ -0,0 +1,16 @@
1
+ # C++ 性能与热路径检查清单
2
+
3
+ ## 拷贝、移动与分配
4
+
5
+ - 热路径上是否引入了可避免的大对象拷贝、重复构造或退化为堆分配的临时对象。
6
+ - 容器增长、字符串拼接、`shared_ptr` 计数开销或类型擦除是否在 diff 可见范围内明显回退。
7
+
8
+ ## 算法与缓存友好性
9
+
10
+ - 算法复杂度是否在关键路径上退化;是否把原本批处理或顺序访问改成高频随机访问。
11
+ - 数据布局、迭代顺序与访问模式是否明显破坏缓存局部性或 SIMD 友好性。
12
+
13
+ ## 锁竞争与并行热路径
14
+
15
+ - 热路径是否在粗粒度锁、频繁原子操作或不必要的同步上退化。
16
+ - 现代 C++ 异步/协程路径中,生命周期、执行器假设与恢复点是否引入可证的性能或资源回退。
@@ -0,0 +1,41 @@
1
+ # 评分指南
2
+
3
+ 评分由**最严重的已确认问题**决定基准区间,再在区间内微调。
4
+
5
+ ## 第一步:确定基准区间
6
+
7
+ | 最严重问题 | 分值区间 |
8
+ |-----------|---------|
9
+ | 无问题 | 9.0-10.0 |
10
+ | 仅 P2/P3 | 7.5-9.0 |
11
+ | P1 | 4.0-7.0 |
12
+ | P0(逻辑崩溃、数据损坏、数据竞争、明显 UB) | 2.0-3.5 |
13
+ | P0(安全漏洞、权限绕过、密钥泄露) | 1.0-2.5 |
14
+
15
+ ## 第二步:在区间内调整
16
+
17
+ - **影响广度**:影响全量请求、全局状态或所有调用方取下限;仅局部边界触发取上限,差距约 0.5-1.0 分
18
+ - **问题数量**:每多一个独立同级别问题,向下移约 0.3-0.5 分
19
+ - **可逆性**:可快速定位、低风险修复的问题可上浮 0.3-0.5 分
20
+
21
+ > 多个问题时取区间下限附近;单个问题且影响有限时取区间上限附近。
22
+
23
+ ## C++ 语境硬上限
24
+
25
+ - 有任意 P0 -> 评分上限 3.5
26
+ - 可证的未定义行为(越界、错误别名、`reinterpret_cast` 破坏类型安全等)-> 评分上限 2.5
27
+ - 可证的数据竞争或未同步跨线程读写非原子共享状态 -> 评分上限 2.5
28
+ - 在 `noexcept` 或析构路径中新增可能抛出的操作且无兜底 -> 评分上限 3.0
29
+ - 裸 `new`/`delete` 配对错误或双重释放可证 -> 评分上限 2.5
30
+ - 硬编码真实凭证或 secret 泄露 -> 评分上限 2.0
31
+ - 纯文件删除(无逻辑变更)-> 评分记为 N/A
32
+ - 测试、bench、示例中的问题 -> 最高计为 P2,不纳入 P0/P1 计数
33
+
34
+ ## 评分语义
35
+
36
+ | 分值 | 提交建议 | 含义 |
37
+ |------|---------|------|
38
+ | 9.0-10.0 | ✅ 可以提交 | 无明显问题 |
39
+ | 7.5-9.0 | ✅ 可以提交,跟进修复 | 有轻微问题,不影响提交 |
40
+ | 4.0-7.0 | 🔧 修复后提交 | 存在 P1 问题,影响广取下限,影响窄取上限 |
41
+ | 1.0-3.5 | 🚫 禁止提交 | 存在 P0 问题,必须修复 |
@@ -0,0 +1,13 @@
1
+ # 模板、API 与 ABI 检查清单
2
+
3
+ ## 模板与约束
4
+
5
+ - 模板或 `concept`/`requires` 约束是否与实现不一致,导致 SFINAE 或约束过宽/过窄在 diff 中可证错误。
6
+ - 特化或偏特化是否破坏主模板文档约定或 ODR(同一模板在不同翻译单元定义不一致)。
7
+
8
+ ## API 可见性与演进
9
+
10
+ - 公共头文件中是否意外扩大 ABI 表面(内联实现变更、新增虚函数、改变类布局)且 diff 显示会影响二进制兼容。
11
+ - `pimpl` 或前向声明边界是否被破坏(在头文件中包含本应隐藏的实现细节)。
12
+
13
+ 仅在 diff 能支撑结论时报告问题;不推断未列出的链接单元或版本策略。
@@ -0,0 +1,18 @@
1
+ # 未定义行为与安全检查清单
2
+
3
+ ## 别名与类型安全
4
+
5
+ - `reinterpret_cast` 是否用于绕过类型系统且违反严格别名或可证对齐/生命周期要求。
6
+ - `const_cast` 去掉底层 `const` 后是否写入原本应为只读的对象。
7
+
8
+ ## 边界与算术
9
+
10
+ - 数组、`*_bound`/`at` 与裸指针算术是否在 diff 中显示可能越界或差一错误。
11
+ - 有符号整数溢出是否被当作可依赖行为(C++ 中通常为 UB,除非使用明确安全类型或检查)。
12
+
13
+ ## 空指针与未初始化
14
+
15
+ - 解引用前是否缺少可证非空检查,或从可能为空的 `optional`/指针直接取值。
16
+ - 未初始化读取、未默认成员在 ctor 外使用是否在 diff 中可见。
17
+
18
+ 仅在 diff 能支撑结论时报告问题;不推断优化级别或编译器特有行为。
@@ -0,0 +1,159 @@
1
+ ---
2
+ name: csharp-code-reviewer
3
+ review-domain: csharp
4
+ description: "C# / .NET 专项代码审查技能,用于开发者在 commit 前审查类库、服务与 Razor 等改动。围绕 IDisposable 与资源、异步与取消、可空与类型安全、异常与 API 契约、Web/EF 数据边界、并发同步等问题给出可执行修复建议。默认只输出审查结论,不直接修改代码。"
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
+ - 当识别结果为 `csharp` 且与当前 skill 匹配时,按本 skill 的 C# / .NET 专项标准审查
24
+ - 当识别结果与当前 skill 不匹配时,不要提示用户选错了 skill,也不要中止审查
25
+ - 不匹配时继续使用同一输出格式,但按现有通用 `code-review` 审查基线做稳妥审查
26
+ - 不匹配时减少对运行时版本、部署拓扑与未出现在 diff 中的框架行为的特有假设
27
+
28
+ ## 严重级别
29
+
30
+ | 等级 | 含义 | 处理 |
31
+ |------|------|------|
32
+ | **P0** | 安全漏洞、数据竞争、可证内存损坏、资源泄漏导致不可用、核心路径崩溃 | 必须修复后才能提交 |
33
+ | **P1** | 逻辑错误、功能异常、异步/可空误用导致高概率故障、明显 API 契约破坏、明显性能/可靠性回退 | 提交前修复 |
34
+ | **P2** | 可维护性问题、测试不足、非阻塞设计问题 | 当前批次修复或登记后续任务 |
35
+ | **P3** | 次要改进 | 可选 |
36
+
37
+ ## 工作流
38
+
39
+ ### 1) 确认审查范围
40
+
41
+ 先关注共享分类结果、`changedFiles` 与 diff 本身,再决定本次是否使用 C# 专项视角。
42
+
43
+ - 当前 diff 主要是 `.cs`、`.cshtml`、`.razor`、`.csproj` 等改动时,使用 C# 专项视角
44
+ - 当前 diff 若明显偏前端、Java、Go、Python、PHP、Rust、C++ 或类型不匹配,则直接回到通用稳妥审查
45
+ - 不因为用户选择了 C# skill 就强行输出 C# 专属问题
46
+
47
+ ### 2) 代码分析
48
+
49
+ #### a) 资源与非托管互操作
50
+
51
+ 加载 `references/memory-resources-and-interop.md`,检查 `IDisposable`、`using`/`await using`、`Span`/`Memory`、`unsafe` 与句柄生命周期。
52
+
53
+ #### b) 异步与取消
54
+
55
+ 加载 `references/async-and-cancellation.md`,检查 `async`/`await`、取消令牌传播、阻塞异步 API、死锁风险。
56
+
57
+ #### c) 可空与类型
58
+
59
+ 加载 `references/nullable-types-and-patterns.md`,检查可空引用类型、`null` 合并与模式匹配、泛型与 `record` 等可见契约。
60
+
61
+ #### d) 异常与 API 契约
62
+
63
+ 加载 `references/exceptions-and-api-contracts.md`,检查异常使用、公共 API 演进与日志敏感信息。
64
+
65
+ #### e) Web 与数据边界(若适用)
66
+
67
+ 加载 `references/web-data-and-security.md`,仅在 diff 出现 ASP.NET、EF 或序列化配置时检查授权、注入与数据访问边界。
68
+
69
+ #### f) 并发与同步
70
+
71
+ 加载 `references/concurrency.md`,检查 `lock`、`Interlocked`、并发集合与 `Task` 使用是否合理。
72
+
73
+ #### g) 通用工程基线补充
74
+
75
+ 完成 C# / .NET 专项检查后,补充对通用 `code-review` 的以下基线检查:架构与设计,以及当 diff 包含删除时的冗余与残留引用。C# 专项维度只负责运行时、框架与类型系统相关风险,不替代通用工程审查。
76
+
77
+ ### 3) 整理问题列表
78
+
79
+ 确认每条问题满足门槛(可定位、可自证、可修复)。同一根因的多处表现合并为一条。不为凑数量降低标准。
80
+
81
+ ### 4) 评分
82
+
83
+ 加载 `references/scoring-guide.md`,**每次审查必须根据该指南给出具体评分**:先按最严重问题确定基准区间,再按影响广度、问题数量、可逆性在区间内微调,最终输出一个具体分值(如 8.5、7.0),不得只写区间或省略评分;纯文件删除时记为 N/A。
84
+
85
+ ### 5) 输出格式
86
+
87
+ 按以下格式输出:
88
+
89
+ ```markdown
90
+ ## 审查摘要
91
+
92
+ **审查范围**:X 个文件,Y 行新增
93
+
94
+ **评分**:X / 10(必须为具体分值,如 8.5;仅纯删除时为 N/A)
95
+
96
+ **提交建议**:✅ 可以提交 / ✅ 可以提交,跟进修复 / 🔧 修复后提交 / 🚫 禁止提交
97
+
98
+ **问题统计**:P0 × 个 / P1 × 个 / P2 × 个 / P3 × 个
99
+
100
+ ---
101
+
102
+ ## 各维度结果
103
+
104
+ | # | 维度 | 结论 |
105
+ |---|------|------|
106
+ | 1 | 资源与非托管互操作 | ✅ 无问题 / ⚠️ 存在问题(简述) |
107
+ | 2 | 异步与取消 | ✅ 无问题 / ⚠️ 存在问题(简述) |
108
+ | 3 | 可空与类型 | ✅ 无问题 / ⚠️ 存在问题(简述) |
109
+ | 4 | 异常与 API 契约 | ✅ 无问题 / ⚠️ 存在问题(简述) |
110
+ | 5 | Web 与数据边界(若适用) | ✅ 无问题 / ⚠️ 存在问题(简述) / 不适用 |
111
+ | 6 | 并发与同步 | ✅ 无问题 / ⚠️ 存在问题(简述) |
112
+
113
+ ---
114
+
115
+ ## 问题列表
116
+
117
+ ### P0 🔴 严重
118
+
119
+
120
+ ### P1 🟠 高
121
+ 1. **[文件:行号] 问题标题**
122
+ - **问题**:一句话说明是什么问题
123
+ - **影响**:一句话说明会导致什么后果
124
+ - **修复**:具体方案
125
+
126
+ ### P2 🟡 中
127
+
128
+
129
+ ### P3 🟢 低
130
+
131
+
132
+ ---
133
+
134
+ ## 总体评价
135
+
136
+ 2-3 句话说明是否建议提交,以及还需要哪些修复或跟进。
137
+ ```
138
+
139
+ **输出规则:**
140
+
141
+ - 每次审查必须在「审查摘要」中给出根据 `references/scoring-guide.md` 计算的具体评分(X / 10),不得省略。
142
+ - 直接给问题,不写前言铺垫。
143
+ - 每条问题写清楚:位置、问题是什么、影响是什么、如何修复。
144
+ - 只在有明确代码路径支撑时输出问题,不猜具体 .NET SDK 版本或未出现在 diff 中的第三方包行为。
145
+ - 如果共享分类结果提示应回到通用审查,则按通用基线保守审查,但仍然使用本 skill 的统一输出结构。
146
+ - 禁止在模板之外添加"亮点"、"优点"、"表扬"等额外章节。
147
+ - `## 总体评价` 只写 2-3 句连续段落,不用列表或子标题。
148
+
149
+ ## 参考文件
150
+
151
+ | 文件 | 用途 |
152
+ |------|------|
153
+ | `memory-resources-and-interop.md` | IDisposable、Span、unsafe、句柄检查项 |
154
+ | `async-and-cancellation.md` | async/await、取消、阻塞与死锁检查项 |
155
+ | `nullable-types-and-patterns.md` | 可空引用、模式与泛型契约检查项 |
156
+ | `exceptions-and-api-contracts.md` | 异常、API 演进与日志检查项 |
157
+ | `web-data-and-security.md` | ASP.NET、EF、序列化边界检查项 |
158
+ | `concurrency.md` | lock、原子、并发集合与 Task 检查项 |
159
+ | `scoring-guide.md` | 评分模型、区间规则和提交建议 |
@@ -0,0 +1,16 @@
1
+ # C# 异步与取消检查清单
2
+
3
+ ## async / await
4
+
5
+ - `async void` 是否仅用于事件处理;业务路径是否误用导致异常无法向上传播。
6
+ - 是否在无必要时阻塞异步 API(`.Result`、`.Wait()`、`GetAwaiter().GetResult()`),尤其在库或 ASP.NET 请求线程上。
7
+ - `ConfigureAwait(false)` 在库代码中的使用是否与调用方同步上下文假设一致(diff 可见时判断)。
8
+
9
+ ## 取消与超时
10
+
11
+ - 长时间运行的异步操作是否接受并传播 `CancellationToken`;取消后是否正确收尾资源。
12
+ - 超时与取消是否区分语义,避免吞掉 `OperationCanceledException` 当普通失败。
13
+
14
+ ## 死锁与并发误用
15
+
16
+ - 是否在同步方法中错误地等待未完成的同线程延续导致死锁风险。
@@ -0,0 +1,15 @@
1
+ # C# 并发与同步检查清单
2
+
3
+ ## lock 与同步原语
4
+
5
+ - `lock` 目标是否私有且稳定;是否存在可证的死锁(嵌套锁顺序、跨 await 持锁)。
6
+ - `Monitor`、`Mutex`、信号量是否在失败路径释放。
7
+
8
+ ## 并发集合与原子
9
+
10
+ - `ConcurrentDictionary` 等用法是否仍需要额外同步(复合操作)。
11
+ - `Interlocked`、易失字段是否与内存可见性需求匹配。
12
+
13
+ ## 线程与 Task
14
+
15
+ - 是否不必要地 `Task.Run` 包装纯 CPU 同步代码导致线程池压力;后台任务是否在宿主关闭时可取消。
@@ -0,0 +1,16 @@
1
+ # C# 异常与 API 契约检查清单
2
+
3
+ ## 异常使用
4
+
5
+ - 是否用异常控制常规流程;是否在热路径抛出可避免的异常。
6
+ - `catch` 是否过宽并吞掉应传播的异常;`when` 过滤器是否合理。
7
+ - `OperationCanceledException` / `TaskCanceledException` 是否与取消语义区分处理。
8
+
9
+ ## 公共 API 演进
10
+
11
+ - 新增 `throw`、变更返回可空性、变更枚举值是否在 diff 中可证破坏二进制或源码兼容。
12
+ - `Obsolete` 迁移路径是否清晰。
13
+
14
+ ## 日志与敏感信息
15
+
16
+ - 异常消息或日志是否可能写入密钥、令牌或 PII(diff 可见时)。
@@ -0,0 +1,16 @@
1
+ # C# 资源、非托管与边界检查清单
2
+
3
+ ## IDisposable 与释放
4
+
5
+ - `using` / `await using` 是否覆盖所有需要释放的对象;是否存在可证泄漏路径。
6
+ - 实现 `IDisposable` 的类型是否正确实现释放模式(`Dispose(bool)`、`GC.SuppressFinalize`),终结器是否仅作兜底且逻辑安全。
7
+ - 重复 `Dispose` 是否仍安全(幂等)。
8
+
9
+ ## Span、Memory 与不安全代码
10
+
11
+ - `Span<T>` / `ReadOnlySpan<T>` 是否越界或指向已释放缓冲区;`stackalloc` 与异步混用是否导致悬垂。
12
+ - `unsafe` / `fixed` / 指针算术是否在 diff 可证范围内安全;`Marshal` 与句柄生命周期是否配对。
13
+
14
+ ## 终结器与顺序
15
+
16
+ - 析构顺序依赖是否脆弱;是否依赖其他对象的终结器顺序(应避免)。
@@ -0,0 +1,15 @@
1
+ # C# 可空引用、类型与模式检查清单
2
+
3
+ ## 可空引用类型
4
+
5
+ - `#nullable` 上下文与 `?`、`!` 使用是否与契约一致;是否引入可证的 `NullReferenceException` 路径。
6
+ - 公共 API 是否用可空注解准确表达允许 null 的契约。
7
+
8
+ ## null 与模式
9
+
10
+ - `?.`、`??`、`is null` 是否覆盖分支;是否误用 `!` 压制警告而无运行时保证。
11
+ - `record` / `init` / 主构造函数等是否与不可变意图一致,是否暴露可突变状态。
12
+
13
+ ## 泛型与约束
14
+
15
+ - 泛型约束是否足够;`default`、未约束泛型上的 `== null` 等是否语义正确。
@@ -0,0 +1,41 @@
1
+ # 评分指南
2
+
3
+ 评分由**最严重的已确认问题**决定基准区间,再在区间内微调。
4
+
5
+ ## 第一步:确定基准区间
6
+
7
+ | 最严重问题 | 分值区间 |
8
+ |-----------|---------|
9
+ | 无问题 | 9.0-10.0 |
10
+ | 仅 P2/P3 | 7.5-9.0 |
11
+ | P1 | 4.0-7.0 |
12
+ | P0(逻辑崩溃、数据损坏、数据竞争、可证资源泄漏) | 2.0-3.5 |
13
+ | P0(安全漏洞、权限绕过、密钥泄露) | 1.0-2.5 |
14
+
15
+ ## 第二步:在区间内调整
16
+
17
+ - **影响广度**:影响全量请求、全局状态或所有调用方取下限;仅局部边界触发取上限,差距约 0.5-1.0 分
18
+ - **问题数量**:每多一个独立同级别问题,向下移约 0.3-0.5 分
19
+ - **可逆性**:可快速定位、低风险修复的问题可上浮 0.3-0.5 分
20
+
21
+ > 多个问题时取区间下限附近;单个问题且影响有限时取区间上限附近。
22
+
23
+ ## C# / .NET 语境硬上限
24
+
25
+ - 有任意 P0 -> 评分上限 3.5
26
+ - 可证的数据竞争、`lock` 跨越 `await` 导致未定义行为风险 -> 评分上限 2.5
27
+ - Web/API 层可证的注入、越权或开放重定向 -> 评分上限 2.5
28
+ - `unsafe` / P/Invoke 引入可证内存损坏或句柄泄漏 -> 评分上限 2.5
29
+ - 公共库主路径新增无契约的 `throw` 或破坏可空契约导致调用方崩溃 -> 评分上限 3.0
30
+ - 硬编码真实凭证或 secret 泄露 -> 评分上限 2.0
31
+ - 纯文件删除(无逻辑变更)-> 评分记为 N/A
32
+ - 测试、示例中的问题 -> 最高计为 P2,不纳入 P0/P1 计数
33
+
34
+ ## 评分语义
35
+
36
+ | 分值 | 提交建议 | 含义 |
37
+ |------|---------|------|
38
+ | 9.0-10.0 | ✅ 可以提交 | 无明显问题 |
39
+ | 7.5-9.0 | ✅ 可以提交,跟进修复 | 有轻微问题,不影响提交 |
40
+ | 4.0-7.0 | 🔧 修复后提交 | 存在 P1 问题,影响广取下限,影响窄取上限 |
41
+ | 1.0-3.5 | 🚫 禁止提交 | 存在 P0 问题,必须修复 |
@@ -0,0 +1,15 @@
1
+ # C# Web、数据与边界检查清单(diff 可见时)
2
+
3
+ ## ASP.NET 与 HTTP
4
+
5
+ - 模型绑定、路由与授权特性是否一致;是否绕过授权检查(如误用 `[AllowAnonymous]`)。
6
+ - 用户输入是否在进入业务逻辑前完成校验与编码;重定向 URL 是否开放重定向风险。
7
+
8
+ ## EF 与数据访问
9
+
10
+ - 原始 SQL / `FromSqlRaw` 是否引入拼接注入;是否 N+1 或可证的过度加载。
11
+ - 敏感查询是否缺少过滤导致越权读取(diff 可证)。
12
+
13
+ ## 序列化与配置
14
+
15
+ - JSON/XML 反序列化是否扩大攻击面(多态、未知类型);配置密钥是否误入源码。