ai-scaffold-pro 2.0.2 → 2.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/i18n/en.json CHANGED
@@ -410,6 +410,8 @@
410
410
  "dim2_action_step3": "Classify by severity: ❌ Fatal (must fix immediately) / ⚠️ Important (should fix soon) / 💡 Suggestion (optional optimization)",
411
411
  "dim2_action_step4": "Ask user whether to execute fixes; proceed with corrections after confirmation",
412
412
  "dim3_title": "Dimension 3: Implementation Rationality Analysis",
413
+ "dim4_title": "Dimension 4: Performance & Security Check",
414
+ "dim4_desc": "Automatically invoke performance_check skill to detect memory leaks, OOM, ANR, UI lag, and security vulnerabilities. Executes immediately after Dimension 2 scan to ensure comprehensive code quality coverage.",
413
415
  "dim3_desc": "Detect **clearly unreasonable** aspects in code implementation, even if they don't violate explicit rule entries:",
414
416
  "dim3_table_header": "| # | Check Item | Check Method | Rationality Standard |",
415
417
  "dim3_row1": "| 1 | Dead code/unused classes/methods | Search for public classes/methods not referenced by any code | Public classes/methods with no callers, no route targets, no reflection references |",
package/i18n/zh.json CHANGED
@@ -410,6 +410,8 @@
410
410
  "dim2_action_step3": "按严重程度分级:❌ 致命违规(必须立即修正) / ⚠️ 重要违规(应尽快修正) / 💡 改进建议(可选优化)",
411
411
  "dim2_action_step4": "询问用户是否执行修正,确认后按修正方案逐项修改",
412
412
  "dim3_title": "维度 3:实现合理性分析",
413
+ "dim4_title": "维度 4:性能与安全检查",
414
+ "dim4_desc": "自动调用 performance_check skill 执行内存泄漏、OOM、ANR、卡顿和安全漏洞检测。在维度2扫描后立即执行,确保代码质量全面覆盖。",
413
415
  "dim3_desc": "检测代码实现中**明显不合理**的地方,即使这些地方不一定违反了明确的规则条文:",
414
416
  "dim3_table_header": "| # | 检查项 | 检查方法 | 合理性判定标准 |",
415
417
  "dim3_row1": "| 1 | 死代码/未使用的类/方法 | 搜索未被任何代码引用的 public 类/方法 | 项目中无人调用、无路由指向、无反射引用的公开类/方法即为潜在死代码 |",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ai-scaffold-pro",
3
- "version": "2.0.2",
3
+ "version": "2.0.4",
4
4
  "description": "AI Coding Skeleton — CLI + LLM协作架构: CLI搭建骨架 → AI深度初始化",
5
5
  "bin": {
6
6
  "ai-scaffold-pro": "bin/cli.js"
@@ -112,7 +112,36 @@ tools: Read, Grep, Glob, Write, Edit
112
112
  3. {{t "proactive_correction.dim3_action_step3"}}
113
113
  4. {{t "proactive_correction.dim3_action_step4"}}
114
114
 
115
- #### {{t "proactive_correction.impl_checklist_title"}}
115
+ ### {{t "proactive_correction.dim4_title"}}
116
+
117
+ {{t "proactive_correction.dim4_desc"}}
118
+
119
+ **自动调用**: 在维度2扫描后,自动调用 `{{DIR}}/skills/performance_check/SKILL.md` 执行性能与安全检查
120
+
121
+ **检查范围**:
122
+ | 检查类型 | 检查项 | 严重度 |
123
+ |---------|---------|--------|
124
+ | 内存泄漏 | Context/Listener/Bitmap/Handler泄漏 | ❌ 致命 |
125
+ | OOM风险 | Bitmap/集合/线程池无限增长 | ❌ 致命 |
126
+ | 启动速度 | Application/首屏加载耗时 | ️ 警告 |
127
+ | ANR风险 | 主线程网络/数据库/IO操作 | ❌ 致命 |
128
+ | 卡顿检测 | RecyclerView/动画/绘制卡顿 | ⚠️ 警告 |
129
+ | 代码安全 | 硬编码密钥/明文存储/HTTP传输 | ❌ 致命 |
130
+
131
+ **执行流程**:
132
+ 1. 收集待检查文件列表(从git diff或proactive-correction传入)
133
+ 2. 委派performance_check skill逐项扫描
134
+ 3. 按严重度分类输出报告(致命 → 警告 → 建议)
135
+ 4. 对致命问题提供修复方案
136
+ 5. 用户确认后执行修复
137
+ 6. 修复后重新扫描验证
138
+
139
+ **与code_review的区别**:
140
+ - `code_review` 关注代码规范和架构约束
141
+ - `performance_check` 关注性能指标和安全漏洞
142
+ - 两者互补,覆盖完整的代码质量检查
143
+
144
+ {{t "proactive_correction.impl_checklist_title"}}
116
145
 
117
146
  {{t "proactive_correction.impl_checklist_header"}}
118
147
  |---|---------|---------|------|----------|
@@ -0,0 +1,398 @@
1
+ ---
2
+ name: performance_check
3
+ description: Performance and security audit for code quality. Checks memory leaks, OOM risks, startup speed, ANR, lag, and security vulnerabilities. Auto-triggered by proactive-correction agent.
4
+ ---
5
+
6
+ # Performance & Security Check — 性能与安全检查
7
+
8
+ > **触发方式**: 由 `proactive-correction` agent 在维度4中自动调用
9
+ >
10
+ > **检查范围**: 内存泄漏、OOM风险、启动速度、ANR、卡顿、代码安全
11
+
12
+ ---
13
+
14
+ ## 1. 内存泄漏检测 (Memory Leak Detection)
15
+
16
+ ### 1.1 Android/Java/Kotlin 内存泄漏
17
+
18
+ | # | 检查项 | 检测方法 | 严重度 |
19
+ |---|--------|---------|--------|
20
+ | ML-1 | Context泄漏 | 检查静态字段持有Activity/Context引用 | ❌ 致命 |
21
+ | ML-2 | 监听器未移除 | 检查onDestroy中是否移除Listener/Observer | ❌ 致命 |
22
+ | ML-3 | Handler泄漏 | 检查Handler是否为静态内部类或使用WeakReference | ❌ 致命 |
23
+ | ML-4 | 静态集合未清理 | 检查static List/Map是否无限增长 | ❌ 致命 |
24
+ | ML-5 | Bitmap未recycle | 检查Bitmap使用后是否调用recycle() | ️ 警告 |
25
+ | ML-6 | Cursor未关闭 | 检查数据库Cursor是否在finally中关闭 | ❌ 致命 |
26
+ | ML-7 | WebView泄漏 | 检查WebView是否在onDestroy中销毁 | ❌ 致命 |
27
+ | ML-8 | 单例持有Activity引用 | 检查单例模式是否持有Activity/View引用 | ❌ 致命 |
28
+
29
+ **检测模式**:
30
+ ```kotlin
31
+ // 错误示例
32
+ class MyActivity : Activity() {
33
+ companion object {
34
+ var instance: MyActivity? = null // 静态持有Activity
35
+ }
36
+
37
+ override fun onCreate() {
38
+ instance = this // 泄漏!
39
+ }
40
+ }
41
+
42
+ // ✅ 正确示例
43
+ class MyActivity : Activity() {
44
+ override fun onDestroy() {
45
+ super.onDestroy()
46
+ // 清理所有引用
47
+ listener?.remove()
48
+ handler?.removeCallbacksAndMessages(null)
49
+ }
50
+ }
51
+ ```
52
+
53
+ ### 1.2 iOS/Swift 内存泄漏
54
+
55
+ | # | 检查项 | 检测方法 | 严重度 |
56
+ |---|--------|---------|--------|
57
+ | ML-iOS1 | 强引用循环 | 检查delegate/closure是否使用weak | ❌ 致命 |
58
+ | ML-iOS2 | Block循环引用 | 检查Block中是否使用__weak self | 致命 |
59
+ | ML-iOS3 | NotificationCenter未移除 | 检查dealloc中是否removeObserver | ❌ 致命 |
60
+ | ML-iOS4 | Timer未invalidate | 检查Timer使用后是否invalidate | ❌ 致命 |
61
+ | ML-iOS5 | Delegate强引用 | 检查delegate属性是否为weak | ❌ 致命 |
62
+
63
+ ### 1.3 C++/NDK 内存泄漏
64
+
65
+ | # | 检查项 | 检测方法 | 严重度 |
66
+ |---|--------|---------|--------|
67
+ | ML-NDK1 | malloc/free不匹配 | 检查每个malloc是否有对应的free | ❌ 致命 |
68
+ | ML-NDK2 | new/delete不匹配 | 检查每个new是否有对应的delete | ❌ 致命 |
69
+ | ML-NDK3 | JNI LocalRef泄漏 | 检查LocalRef使用后是否DeleteLocalRef | ❌ 致命 |
70
+ | ML-NDK4 | 异常路径未释放 | 检查goto/error路径是否释放资源 | ❌ 致命 |
71
+
72
+ ---
73
+
74
+ ## 2. OOM风险检测 (Out of Memory Risk)
75
+
76
+ ### 2.1 Bitmap OOM
77
+
78
+ | # | 检查项 | 检测方法 | 严重度 |
79
+ |---|--------|---------|--------|
80
+ | OOM-1 | 大图未压缩 | 检查Bitmap加载是否使用inSampleSize | 致命 |
81
+ | OOM-2 | 频繁创建Bitmap | 检查循环中是否创建Bitmap | ❌ 致命 |
82
+ | OOM-3 | 未使用图片缓存 | 检查是否使用Glide/Picasso/Fresco | ️ 警告 |
83
+ | OOM-4 | 内存泄漏的Bitmap | 检查Bitmap是否被静态引用 | ❌ 致命 |
84
+
85
+ **检测模式**:
86
+ ```kotlin
87
+ // ❌ 错误示例 - 直接加载大图
88
+ val bitmap = BitmapFactory.decodeResource(resources, R.drawable.huge_image)
89
+
90
+ // ✅ 正确示例 - 采样加载
91
+ val options = BitmapFactory.Options().apply {
92
+ inSampleSize = calculateInSampleSize(this, reqWidth, reqHeight)
93
+ }
94
+ val bitmap = BitmapFactory.decodeResource(resources, R.drawable.huge_image, options)
95
+ ```
96
+
97
+ ### 2.2 集合OOM
98
+
99
+ | # | 检查项 | 检测方法 | 严重度 |
100
+ |---|--------|---------|--------|
101
+ | OOM-5 | List无限增长 | 检查List是否无限制add | ❌ 致命 |
102
+ | OOM-6 | 缓存无上限 | 检查LruCache是否设置maxSize | ❌ 致命 |
103
+ | OOM-7 | 字符串拼接 | 检查循环中是否使用+拼接字符串 | ⚠️ 警告 |
104
+
105
+ ### 2.3 线程OOM
106
+
107
+ | # | 检查项 | 检测方法 | 严重度 |
108
+ |---|--------|---------|--------|
109
+ | OOM-8 | 线程池无界 | 检查ThreadPoolExecutor是否设置maxPoolSize | ❌ 致命 |
110
+ | OOM-9 | 频繁创建线程 | 检查是否使用Thread而非线程池 | ️ 警告 |
111
+
112
+ ---
113
+
114
+ ## 3. 启动速度优化 (Startup Speed)
115
+
116
+ ### 3.1 Application初始化
117
+
118
+ | # | 检查项 | 检测方法 | 严重度 |
119
+ |---|--------|---------|--------|
120
+ | ST-1 | Application.onCreate耗时 | 检查onCreate中是否有耗时操作 | 致命 |
121
+ | ST-2 | 同步初始化过多 | 检查是否所有SDK都在主线程初始化 | ❌ 致命 |
122
+ | ST-3 | 未使用懒加载 | 检查是否可以延迟初始化的组件 | ️ 警告 |
123
+ | ST-4 | ContentProvider阻塞 | 检查自定义ContentProvider的onCreate | ❌ 致命 |
124
+
125
+ **优化建议**:
126
+ ```kotlin
127
+ // 错误示例 - 所有初始化在Application
128
+ class MyApplication : Application() {
129
+ override fun onCreate() {
130
+ super.onCreate()
131
+ SDK1.init(this) // 耗时100ms
132
+ SDK2.init(this) // 耗时200ms
133
+ SDK3.init(this) // 耗时150ms
134
+ // 总耗时450ms,严重拖慢启动!
135
+ }
136
+ }
137
+
138
+ // ✅ 正确示例 - 延迟初始化
139
+ class MyApplication : Application() {
140
+ override fun onCreate() {
141
+ super.onCreate()
142
+ // 只初始化必需的SDK
143
+ EssentialSDK.init(this)
144
+
145
+ // 其他SDK延迟到首页展示后
146
+ lifecycle.addObserver(object : DefaultLifecycleObserver {
147
+ override fun onResume(owner: LifecycleOwner) {
148
+ // 延迟初始化非必需SDK
149
+ thread { OptionalSDK.init(this@MyApplication) }
150
+ }
151
+ })
152
+ }
153
+ }
154
+ ```
155
+
156
+ ### 3.2 首屏加载
157
+
158
+ | # | 检查项 | 检测方法 | 严重度 |
159
+ |---|--------|---------|--------|
160
+ | ST-5 | 首屏同步网络请求 | 检查onCreate中是否有网络请求 | ❌ 致命 |
161
+ | ST-6 | 布局层级过深 | 检查XML布局嵌套层级(>5层) | ⚠️ 警告 |
162
+ | ST-7 | 首屏加载大图 | 检查首屏是否加载未压缩图片 | ❌ 致命 |
163
+ | ST-8 | 未使用异步加载 | 检查数据加载是否在主线程 | ❌ 致命 |
164
+
165
+ ---
166
+
167
+ ## 4. ANR检测 (Application Not Responding)
168
+
169
+ ### 4.1 主线程耗时操作
170
+
171
+ | # | 检查项 | 检测方法 | 严重度 |
172
+ |---|--------|---------|--------|
173
+ | ANR-1 | 主线程网络请求 | 检查是否在主线程执行HTTP请求 | ❌ 致命 |
174
+ | ANR-2 | 主线程数据库操作 | 检查是否在主线程执行SQL查询 | 致命 |
175
+ | ANR-3 | 主线程文件IO | 检查是否在主线程读写文件 | ❌ 致命 |
176
+ | ANR-4 | 主线程复杂计算 | 检查是否在主线程执行耗时计算 | ❌ 致命 |
177
+ | ANR-5 | 主线程sleep | 检查是否有Thread.sleep在主线程 | ❌ 致命 |
178
+ | ANR-6 | 锁竞争阻塞 | 检查synchronized块是否耗时>5s | ❌ 致命 |
179
+
180
+ **检测模式**:
181
+ ```kotlin
182
+ // ❌ 错误示例 - 主线程网络请求
183
+ class MainActivity : AppCompatActivity() {
184
+ override fun onCreate(savedInstanceState: Bundle?) {
185
+ super.onCreate(savedInstanceState)
186
+ val response = httpClient.execute(request) // ANR风险!
187
+ updateUI(response)
188
+ }
189
+ }
190
+
191
+ // ✅ 正确示例 - 异步网络请求
192
+ class MainActivity : AppCompatActivity() {
193
+ override fun onCreate(savedInstanceState: Bundle?) {
194
+ super.onCreate(savedInstanceState)
195
+ lifecycleScope.launch {
196
+ val response = withContext(Dispatchers.IO) {
197
+ httpClient.execute(request)
198
+ }
199
+ updateUI(response)
200
+ }
201
+ }
202
+ }
203
+ ```
204
+
205
+ ### 4.2 Broadcast/Service阻塞
206
+
207
+ | # | 检查项 | 检测方法 | 严重度 |
208
+ |---|--------|---------|--------|
209
+ | ANR-7 | BroadcastReceiver耗时 | 检查onReceive中是否有耗时操作 | ❌ 致命 |
210
+ | ANR-8 | Service onStartCommand耗时 | 检查Service是否在主线程执行耗时任务 | ❌ 致命 |
211
+
212
+ ---
213
+
214
+ ## 5. 卡顿检测 (UI Lag/Jank)
215
+
216
+ ### 5.1 RecyclerView卡顿
217
+
218
+ | # | 检查项 | 检测方法 | 严重度 |
219
+ |---|--------|---------|--------|
220
+ | LAG-1 | onBindViewHolder耗时 | 检查是否在主线程执行复杂操作 | ❌ 致命 |
221
+ | LAG-2 | 未使用ViewHolder复用 | 检查onCreateViewHolder频率 | ❌ 致命 |
222
+ | LAG-3 | 嵌套RecyclerView | 检查是否有多层RecyclerView嵌套 | ⚠️ 警告 |
223
+ | LAG-4 | 图片未异步加载 | 检查是否在onBind中同步加载图片 | ❌ 致命 |
224
+ | LAG-5 | 频繁notifyDataSetChanged | 检查是否使用notifyItemInserted等精确更新 | ⚠️ 警告 |
225
+
226
+ ### 5.2 动画卡顿
227
+
228
+ | # | 检查项 | 检测方法 | 严重度 |
229
+ |---|--------|---------|--------|
230
+ | LAG-6 | 属性动画复杂 | 检查是否同时执行多个属性动画 | ️ 警告 |
231
+ | LAG-7 | 未使用硬件加速 | 检查View是否设置setLayerType | 💡 建议 |
232
+ | LAG-8 | 过度绘制 | 检查布局是否有过多背景叠加 | ⚠️ 警告 |
233
+
234
+ ### 5.3 绘制卡顿
235
+
236
+ | # | 检查项 | 检测方法 | 严重度 |
237
+ |---|--------|---------|--------|
238
+ | LAG-9 | onDraw耗时 | 检查自定义View的onDraw是否耗时>16ms | ❌ 致命 |
239
+ | LAG-10 | invalidate频繁 | 检查是否过度调用invalidate | ️ 警告 |
240
+ | LAG-11 | 布局测量耗时 | 检查onMeasure/onLayout是否复杂 | ❌ 致命 |
241
+
242
+ ---
243
+
244
+ ## 6. 代码安全检测 (Security)
245
+
246
+ ### 6.1 敏感数据泄露
247
+
248
+ | # | 检查项 | 检测方法 | 严重度 |
249
+ |---|--------|---------|--------|
250
+ | SEC-1 | 硬编码密钥 | 检查代码中是否有API Key/Secret | ❌ 致命 |
251
+ | SEC-2 | 明文存储密码 | 检查SharedPreferences是否明文存密码 | ❌ 致命 |
252
+ | SEC-3 | Log泄露敏感信息 | 检查Log中是否打印Token/密码 | ❌ 致命 |
253
+ | SEC-4 | WebView明文传参 | 检查WebView URL是否包含敏感参数 | ❌ 致命 |
254
+ | SEC-5 | Clipboard敏感数据 | 检查是否复制密码到剪贴板 | ❌ 致命 |
255
+
256
+ **检测模式**:
257
+ ```kotlin
258
+ // 错误示例 - 硬编码密钥
259
+ object Config {
260
+ const val API_KEY = "sk-123456789abcdef" // 危险!
261
+ const val API_SECRET = "secret_key_here" // 危险!
262
+ }
263
+
264
+ // ✅ 正确示例 - 从安全位置读取
265
+ object Config {
266
+ val API_KEY: String
267
+ get() = BuildConfig.API_KEY // 从BuildConfig读取
268
+ }
269
+ ```
270
+
271
+ ### 6.2 加密与传输安全
272
+
273
+ | # | 检查项 | 检测方法 | 严重度 |
274
+ |---|--------|---------|--------|
275
+ | SEC-6 | HTTP明文传输 | 检查是否使用HTTPS | ❌ 致命 |
276
+ | SEC-7 | 弱加密算法 | 检查是否使用MD5/DES等弱加密 | 致命 |
277
+ | SEC-8 | 证书校验跳过 | 检查是否trustAllCertificates | ❌ 致命 |
278
+ | SEC-9 | 随机数不安全 | 检查是否使用Random而非SecureRandom | ⚠️ 警告 |
279
+
280
+ ### 6.3 权限安全
281
+
282
+ | # | 检查项 | 检测方法 | 严重度 |
283
+ |---|--------|---------|--------|
284
+ | SEC-10 | 过度权限申请 | 检查是否申请不必要的危险权限 | ️ 警告 |
285
+ | SEC-11 | 运行时权限未检查 | 检查使用前是否检查权限 | ❌ 致命 |
286
+ | SEC-12 | Exported组件未保护 | 检查Activity/Service是否误设exported=true | ❌ 致命 |
287
+
288
+ ---
289
+
290
+ ## 7. 检查执行流程
291
+
292
+ ### 7.1 触发条件
293
+
294
+ 由 `proactive-correction` agent 在以下场景自动调用:
295
+
296
+ 1. **代码修改完成后** - 扫描修改的文件是否存在性能问题
297
+ 2. **plan_mode每步完成后** - 纠错检查点扫描
298
+ 3. **用户明确要求** - "检查性能问题" / "性能审查"
299
+ 4. **定期全量扫描** - proactive-correction维度4扫描
300
+
301
+ ### 7.2 检查流程
302
+
303
+ ```
304
+ 1. 收集待检查文件列表
305
+ ├─ 从 git diff 获取变更文件
306
+ ├─ 或从 proactive-correction 传入文件列表
307
+
308
+ 2. 按优先级逐项检查
309
+ ├─ 第一优先级: ❌ 致命问题 (内存泄漏、ANR、OOM)
310
+ ├─ 第二优先级: ⚠️ 警告问题 (启动速度、卡顿)
311
+ └─ 第三优先级: 💡 建议优化 (代码安全、最佳实践)
312
+
313
+ 3. 输出检查报告
314
+ ├─ 按严重度分类
315
+ ├─ 每个问题包含: 位置、原因、修复方案
316
+ └─ 统计问题数量
317
+ ```
318
+
319
+ ### 7.3 输出格式
320
+
321
+ ```markdown
322
+ ## 🔍 Performance & Security Check
323
+
324
+ **检查范围**: [文件列表]
325
+ **检查结果**: ✅ 通过 / ⚠️ N 警告 / N 致命问题
326
+
327
+ ### ❌ 致命问题
328
+
329
+ **问题 1**: [问题标题]
330
+ - **位置**: `file:line`
331
+ - **类型**: [内存泄漏/ANR/OOM/安全]
332
+ - **原因**: [问题原因说明]
333
+ - **当前代码**:
334
+ ```kotlin
335
+ // 问题代码
336
+ ```
337
+ - **修复方案**:
338
+ ```kotlin
339
+ // 修复后代码
340
+ ```
341
+
342
+ ### ⚠️ 警告
343
+
344
+ ### 💡 建议优化
345
+
346
+ ### ✅ 通过检查项
347
+ ```
348
+
349
+ ---
350
+
351
+ ## 8. 平台特定检查
352
+
353
+ ### 8.1 Android 平台
354
+
355
+ - **StrictMode检测**: 使用StrictMode检测主线程IO和网络
356
+ - **LeakCanary集成**: 建议集成LeakCanary自动检测内存泄漏
357
+ - **Method Profiling**: 使用Android Profiler分析耗时方法
358
+ - **Layout Inspector**: 检查布局层级和过度绘制
359
+
360
+ ### 8.2 iOS 平台
361
+
362
+ - **Instruments检测**: 使用Leaks/Allocations工具检测内存
363
+ - **Time Profiler**: 分析耗时方法调用
364
+ - **Main Thread Checker**: 检测主线程违规操作
365
+
366
+ ### 8.3 Flutter 平台
367
+
368
+ - **DevTools检测**: 使用Flutter DevTools分析性能
369
+ - **Widget重建**: 检查不必要的Widget重建
370
+ - **Isolate使用**: 检查耗时操作是否使用Isolate
371
+
372
+ ---
373
+
374
+ ## 9. 修复验证
375
+
376
+ ### 9.1 修复后验证
377
+
378
+ 修复性能问题后,必须:
379
+
380
+ 1. **重新扫描**: 运行performance_check验证问题已解决
381
+ 2. **性能测试**: 使用工具验证性能指标改善
382
+ 3. **回归检查**: 确认修复未引入新问题
383
+
384
+ ### 9.2 性能指标要求
385
+
386
+ | 指标 | 要求 | 检测方法 |
387
+ |------|------|---------|
388
+ | 冷启动时间 | < 2秒 | adb shell am start -W |
389
+ | 首屏渲染 | < 1秒 | 手动计时或工具 |
390
+ | 内存占用 | < 应用限制 | Android Studio Profiler |
391
+ | 帧率 | ≥ 55 FPS | GPU渲染模式分析 |
392
+ | ANR率 | < 0.1% | Firebase/友盟统计 |
393
+
394
+ ---
395
+
396
+ **版本**: v1.0.0
397
+ **最后更新**: 2026-05-31
398
+ **维护者**: ai_scaffold 团队
@@ -472,17 +472,49 @@ const platformVars = await getPlatformVars(detection.platform, lang);
472
472
  {{PLATFORM_SUGGESTION_CHECKS}}
473
473
  ```
474
474
 
475
+ #### performance_check/SKILL.md
476
+ **直接复制模板文件**,无需修改:
477
+ ```bash
478
+ cp {{DIR}}/skills/performance_check/SKILL.md.template {{DIR}}/skills/performance_check/SKILL.md
479
+ ```
480
+
481
+ 该skill包含完整的性能与安全检查能力:
482
+ - 内存泄漏检测(Android/iOS/C++)
483
+ - OOM风险检测(Bitmap/集合/线程池)
484
+ - 启动速度优化(Application/首屏加载)
485
+ - ANR检测(主线程耗时操作)
486
+ - 卡顿检测(RecyclerView/动画/绘制)
487
+ - 代码安全(敏感数据/加密/权限)
488
+
475
489
  ### 3.4 生成 references/ 文档
476
490
 
477
491
  **Step 1**: 脚本已生成 `_scan.json`(在Phase 1.1完成)
478
492
 
479
493
  **Step 2**: AI逐模块生成文档
480
494
 
495
+ **重要**: 必须为 _scan.json 中的**所有模块**生成文档,不能遗漏!
496
+
481
497
  对于每个模块,执行:
482
498
  ```
483
499
  1. 读取 _scan.json 中该模块的结构信息
484
500
  2. 逐个读取该模块的源文件(限制每个模块最多10个关键文件)
485
501
  3. 基于源码理解生成 {module}.md
502
+ 4. 确认文件已保存到 {{DIR}}/references/{module}.md
503
+ ```
504
+
505
+ **模块列表获取**:
506
+ ```
507
+ const scanData = JSON.parse(readFile('{{DIR}}/references/_scan.json'));
508
+ const allModules = scanData.modules; // 获取所有模块
509
+
510
+ console.log(`📋 共发现 ${allModules.length} 个模块:`);
511
+ allModules.forEach((m, i) => console.log(` ${i+1}. ${m.name}`));
512
+
513
+ // 逐个生成
514
+ for (const module of allModules) {
515
+ console.log(`🔍 正在生成模块文档: ${module.name} (${i+1}/${allModules.length})`);
516
+ generateModuleDoc(module);
517
+ }
486
518
  ```
487
519
 
488
520
  **{module}.md 模板**:
@@ -657,6 +689,7 @@ graph TD
657
689
  技能文件:
658
690
  - [ ] {{DIR}}/skills/plan_mode/SKILL.md 已生成
659
691
  - [ ] {{DIR}}/skills/code_review/SKILL.md 已生成
692
+ - [ ] {{DIR}}/skills/performance_check/SKILL.md 已生成(性能与安全检查)
660
693
  - [ ] plan_mode 中包含平台特定的任务模板
661
694
 
662
695
  Agent文件:
@@ -671,8 +704,10 @@ Agent文件:
671
704
  - [ ] {{DIR}}/references/_scan.json 已生成
672
705
  - [ ] {{DIR}}/references/dependencies.md 已生成
673
706
  - [ ] {{DIR}}/references/conventions.md 已生成
674
- - [ ] 至少生成了 3 个核心模块的 {module}.md 文档
707
+ - [ ] **已为 _scan.json 中的所有模块生成文档**(不是只生成3个!)
708
+ - [ ] 验证: {{DIR}}/references/ 目录下的 {module}.md 文件数量 = _scan.json 中的 modules 数量
675
709
  - [ ] 所有模块文档中的"模块概述"不为空
710
+ - [ ] 所有模块文档中的"元信息"表格完整填写
676
711
 
677
712
  入口文件:
678
713
  - [ ] {{ENTRY}} 已从极简版替换为完整版
@@ -700,7 +735,7 @@ Agent文件:
700
735
 
701
736
  📊 生成统计:
702
737
  - 规则文件: 2 个 (project_rule.md, conflict_resolution.md)
703
- - 技能文件: 2 个 (plan_mode, code_review)
738
+ - 技能文件: 3 个 (plan_mode, code_review, performance_check)
704
739
  - Agent文件: {3或4} 个 (arch-review, resource-sync, proactive-correction{{#if HAS_NDK}}, cpp-memory-review{{/if}})
705
740
  - 引用文档: {N+2} 个 ({N}个模块 + dependencies.md + conventions.md)
706
741
  - Hook脚本: 2 个