@dtt_siye/atool 1.2.1 → 1.3.1

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 (97) hide show
  1. package/VERSION +1 -1
  2. package/hooks/session-start +9 -12
  3. package/lib/export-analysis.sh +100 -0
  4. package/lib/install-kiro.sh +11 -6
  5. package/lib/install-skills.sh +16 -0
  6. package/lib/knowledge-graph.sh +490 -83
  7. package/lib/pre-scan.sh +70 -5
  8. package/package.json +1 -1
  9. package/skills/doc-standards-enforcer/SKILL.md +200 -220
  10. package/skills/doc-standards-enforcer/examples/valid-document-example.md +5 -5
  11. package/skills/doc-standards-enforcer/references/101-standards-summary.md +17 -17
  12. package/skills/project-analyze/SKILL.md +157 -124
  13. package/skills/project-analyze/phases/{phase0-discovery.md → archive/phase0-discovery.md} +6 -2
  14. package/skills/project-analyze/phases/{phase1-inventory.md → archive/phase1-inventory.md} +10 -0
  15. package/skills/project-analyze/phases/{phase2-deep-analysis.md → archive/phase2-deep-analysis.md} +20 -0
  16. package/skills/project-analyze/phases/{phase3-knowledge-graph.md → archive/phase3-knowledge-graph.md} +31 -0
  17. package/skills/project-analyze/phases/{phase3a-multi-dimensional.md → archive/phase3a-multi-dimensional.md} +13 -0
  18. package/skills/project-analyze/phases/{phase5-synthesis.md → archive/phase5-synthesis.md} +20 -0
  19. package/skills/project-analyze/phases/phase1-setup.md +182 -0
  20. package/skills/project-analyze/phases/phase2-understand.md +114 -0
  21. package/skills/project-analyze/phases/phase2.5-refine.md +284 -0
  22. package/skills/project-analyze/phases/phase3-graph.md +77 -0
  23. package/skills/project-analyze/phases/phase4-synthesize.md +241 -0
  24. package/skills/project-analyze/phases/phase5-export.md +207 -0
  25. package/skills/project-analyze/prompts/{deep-analysis-agent.md → archive/deep-analysis-agent.md} +14 -1
  26. package/skills/project-analyze/prompts/understand-agent.md +424 -0
  27. package/skills/project-analyze/rules/android.md +61 -260
  28. package/skills/project-analyze/rules/devops.md +61 -421
  29. package/skills/project-analyze/rules/generic.md +53 -221
  30. package/skills/project-analyze/rules/go.md +60 -275
  31. package/skills/project-analyze/rules/harmony.md +64 -237
  32. package/skills/project-analyze/rules/java.md +47 -485
  33. package/skills/project-analyze/rules/mobile-flutter.md +57 -292
  34. package/skills/project-analyze/rules/mobile-react-native.md +65 -262
  35. package/skills/project-analyze/rules/mobile-swift.md +58 -303
  36. package/skills/project-analyze/rules/python.md +50 -296
  37. package/skills/project-analyze/rules/rust-tauri.md +51 -217
  38. package/skills/project-analyze/rules/rust.md +50 -274
  39. package/skills/project-analyze/rules/web-nextjs.md +61 -335
  40. package/skills/project-analyze/rules/web-react.md +50 -272
  41. package/skills/project-analyze/rules/web-vue.md +58 -352
  42. package/skills/project-analyze/rules/web.md +55 -347
  43. package/skills/requirements-writer/README.md +1 -1
  44. package/skills/requirements-writer/SKILL.md +423 -282
  45. package/skills/requirements-writer/examples/prd-outline-example.md +5 -5
  46. package/skills/requirements-writer/templates/module-prd-template.md +15 -15
  47. package/skills/requirements-writer/templates/prd-outline-template.md +3 -3
  48. package/skills/requirements-writer/templates/user-story-template.md +23 -23
  49. package/skills/software-architecture/SKILL.md +318 -17
  50. package/templates/CLAUDE.md.android +17 -0
  51. package/templates/CLAUDE.md.devops +17 -0
  52. package/templates/CLAUDE.md.generic +17 -0
  53. package/templates/CLAUDE.md.go +17 -0
  54. package/templates/CLAUDE.md.harmony +17 -0
  55. package/templates/CLAUDE.md.java +17 -0
  56. package/templates/CLAUDE.md.mobile-flutter +17 -0
  57. package/templates/CLAUDE.md.mobile-react-native +17 -0
  58. package/templates/CLAUDE.md.mobile-swift +17 -0
  59. package/templates/CLAUDE.md.python +17 -0
  60. package/templates/CLAUDE.md.rust +17 -0
  61. package/templates/CLAUDE.md.rust-tauri +17 -0
  62. package/templates/CLAUDE.md.web +17 -0
  63. package/templates/cursor-rules.android.mdc +17 -0
  64. package/templates/cursor-rules.devops.mdc +17 -0
  65. package/templates/cursor-rules.generic.mdc +17 -0
  66. package/templates/cursor-rules.go.mdc +17 -0
  67. package/templates/cursor-rules.harmony.mdc +17 -0
  68. package/templates/cursor-rules.java.mdc +17 -0
  69. package/templates/cursor-rules.mobile-flutter.mdc +17 -0
  70. package/templates/cursor-rules.mobile-react-native.mdc +17 -0
  71. package/templates/cursor-rules.mobile-swift.mdc +17 -0
  72. package/templates/cursor-rules.python.mdc +17 -0
  73. package/templates/cursor-rules.rust-tauri.mdc +17 -0
  74. package/templates/cursor-rules.rust.mdc +17 -0
  75. package/templates/cursor-rules.web.mdc +17 -0
  76. package/templates/kiro-steering.android.md +6 -0
  77. package/templates/kiro-steering.devops.md +6 -0
  78. package/templates/kiro-steering.generic.md +6 -0
  79. package/templates/kiro-steering.go.md +6 -0
  80. package/templates/kiro-steering.harmony.md +6 -0
  81. package/templates/kiro-steering.java.md +6 -0
  82. package/templates/kiro-steering.mobile-flutter.md +6 -0
  83. package/templates/kiro-steering.mobile-react-native.md +6 -0
  84. package/templates/kiro-steering.mobile-swift.md +6 -0
  85. package/templates/kiro-steering.python.md +6 -0
  86. package/templates/kiro-steering.rust-tauri.md +6 -0
  87. package/templates/kiro-steering.rust.md +6 -0
  88. package/templates/kiro-steering.web.md +6 -0
  89. package/templates/shared/hard-rules.md +21 -0
  90. /package/skills/project-analyze/phases/{phase0.5-prescan.md → archive/phase0.5-prescan.md} +0 -0
  91. /package/skills/project-analyze/phases/{phase2a-l4-analysis.md → archive/phase2a-l4-analysis.md} +0 -0
  92. /package/skills/project-analyze/phases/{phase2b-l5-analysis.md → archive/phase2b-l5-analysis.md} +0 -0
  93. /package/skills/project-analyze/phases/{phase4-code-quality.md → archive/phase4-code-quality.md} +0 -0
  94. /package/skills/project-analyze/phases/{phase6-validation.md → archive/phase6-validation.md} +0 -0
  95. /package/skills/project-analyze/prompts/{code-review-agent.md → archive/code-review-agent.md} +0 -0
  96. /package/skills/project-analyze/prompts/{inventory-agent.md → archive/inventory-agent.md} +0 -0
  97. /package/skills/project-analyze/prompts/{l4-analysis-agent.md → archive/l4-analysis-agent.md} +0 -0
@@ -1,315 +1,80 @@
1
1
  # Flutter / Dart 项目分析规则
2
2
 
3
- ## 分析粒度
3
+ > **编码规范**:本规则不包含编码规范内容。Phase 2.5 精炼阶段会自动加载 `flutter-conventions` skill 作为规范约束。
4
4
 
5
- Feature 模块和分层架构(Pages / Widgets / Providers / Services / Models)进行分析。
5
+ ## 模块发现策略
6
6
 
7
- ```
8
- MaterialApp / runApp
9
-
10
- Navigator / GoRouter(路由)
11
-
12
- Pages / Screens(页面)
13
-
14
- Widgets(组件)
15
-
16
- ChangeNotifier / Riverpod / Bloc(状态管理)
17
-
18
- Repository / Service(数据层)
19
-
20
- Models / Entities(数据模型)
21
- ```
22
-
23
- ## 目录扫描策略
24
-
25
- ### 1. 识别项目结构
26
-
27
- **信号文件检测:**
28
- - `pubspec.yaml` → Flutter/Dart 项目
29
- - `lib/` → Dart 源码目录
30
- - `android/`, `ios/`, `web/`, `macos/`, `linux/`, `windows/` → 平台目录
31
-
32
- ### 2. 识别状态管理方案
33
-
34
- **从 `pubspec.yaml` 的 dependencies 检测:**
35
- - Provider: `provider` 依赖
36
- - Riverpod: `flutter_riverpod`, `hooks_riverpod` 依赖
37
- - BLoC: `flutter_bloc`, `equatable` 依赖
38
- - GetX: `get` 依赖
39
- - MobX: `mobx`, `flutter_mobx` 依赖
40
-
41
- ### 3. 识别路由方案
42
-
43
- - GoRouter: `go_router` 依赖 + `GoRouter` 配置
44
- - AutoRoute: `auto_route` 依赖 + `@RoutePage()` 注解
45
- - Navigator 1.0: `Navigator.push()` 调用
46
- - GetX: `Get.to()` / `GetPage()` 调用
47
-
48
- ### 4. 依赖提取
49
-
50
- 从 `pubspec.yaml` 提取:
51
-
52
- | 类别 | 常见依赖 |
53
- |------|----------|
54
- | 网络 | dio, http, retrofit |
55
- | 状态管理 | provider, riverpod, flutter_bloc, get |
56
- | 路由 | go_router, auto_route |
57
- | 本地存储 | shared_preferences, hive, isar, drift |
58
- | DI | get_it, injectable, riverpod |
59
- | UI | cached_network_image, shimmer, lottie |
60
- | 序列化 | json_serializable, freezed, dart_mappable |
61
-
62
- ### 5. 按层扫描路径
63
-
64
- - **Pages/Screens**: `lib/screens/`, `lib/pages/`, `lib/views/`
65
- - **Widgets**: `lib/widgets/`, `lib/components/`, `lib/ui/`
66
- - **状态管理**: `lib/providers/`, `lib/bloc/`, `lib/cubit/`, `lib/notifiers/`
67
- - **Models**: `lib/models/`, `lib/entities/`
68
- - **Services**: `lib/services/`, `lib/repositories/`
69
- - **Routes**: `lib/routes/`, `lib/navigation/`, `lib/app_router.dart`
70
- - **Utils**: `lib/utils/`, `lib/helpers/`, `lib/constants/`
71
- - **Theme**: `lib/theme/`, `lib/styles/`
72
-
73
- ## 各层提取规则
74
-
75
- ### 层 1: 路由层
76
-
77
- **扫描文件**: `lib/app_router.dart`, `lib/routes/**/*.dart`, `lib/navigation/**/*.dart`
78
-
79
- **提取内容**:
80
- - 路由配置(路径 + 对应 Widget + 参数)
81
- - 嵌套路由(ShellRoute / 子路由)
82
- - 路由守卫(重定向逻辑、认证检查)
83
- - Deep Link 配置
84
-
85
- **输出示例**:
86
- ```
87
- ### 路由结构(GoRouter)
88
- - **文件**: `lib/app_router.dart`
89
- - **路由配置**:
90
- | 路径 | 目标 Widget | 参数 | 守卫 |
91
- |------|-------------|------|------|
92
- | / | SplashScreen | - | - |
93
- | /login | LoginPage | - | 已登录→重定向/home |
94
- | /home | HomePage | - | 需认证 |
95
- | /profile/:userId | ProfilePage | userId: String | 需认证 |
96
- | /settings | SettingsPage | - | 需认证 |
97
- - **嵌套路由**: /home 下包含 /home/feed, /home/search, /home/profile (BottomNavigation)
98
- - **认证守卫**: redirect 检查 authProvider.isAuthenticated
99
- ```
100
-
101
- ### 层 2: 页面层
102
-
103
- **扫描文件**: `lib/pages/**/*.dart`, `lib/screens/**/*.dart`
104
-
105
- **提取内容**:
106
- - 页面 Widget 类名 + 路径
107
- - State 管理方式(StatefulWidget / StatelessWidget + Provider)
108
- - `build()` 方法中的主要子 Widget(1-2 层)
109
- - 生命周期方法(initState, dispose)
110
- - 使用的 Provider / Bloc
111
-
112
- **输出示例**:
113
- ```
114
- ### HomePage
115
- - **路径**: `lib/pages/home/home_page.dart`
116
- - **类型**: StatefulWidget
117
- - **State**: _HomePageState
118
- - **build() 主要结构**:
119
- Scaffold(
120
- appBar: AppBar(title: Text('首页')),
121
- body: _buildBody(), // TabBarView(FeedPage, SearchPage, ProfilePage)
122
- bottomNavigationBar: MainBottomNavBar(onTap: _onTabTapped),
123
- )
124
- - **Provider 依赖**: feedProvider (Watch), authProvider (Read)
125
- - **生命周期**:
126
- | 方法 | 行为 |
127
- |------|------|
128
- | initState() | 初始化 TabController, 加载用户信息 |
129
- | dispose() | 释放 TabController |
130
- ```
131
-
132
- ### 层 3: Widget 层
7
+ 从 `pubspec.yaml` 和 `lib/` 目录结构识别模块边界:
133
8
 
134
- **扫描文件**: `lib/widgets/**/*.dart`, `lib/components/**/*.dart`
9
+ - `pubspec.yaml` → 解析 `dependencies` / `dev_dependencies`,识别状态管理和路由方案
10
+ - `lib/features/{name}/` → Feature-first 目录结构,每个 feature 子目录视为独立模块
11
+ - `lib/screens/` / `lib/pages/` → 每个子目录视为独立模块
12
+ - `lib/services/` / `lib/repositories/` → 数据层模块
13
+ - `lib/widgets/` / `lib/components/` → 3+ 文件的子目录视为独立组件模块
14
+ - 平台目录(`android/`, `ios/`, `web/`)→ 跳过,不分析原生代码
135
15
 
136
- **提取内容**:
137
- - Widget 类名 + 类型(StatefulWidget / StatelessWidget)
138
- - 构造参数(命名参数 + 类型 + 默认值)
139
- - `build()` 方法中的子 Widget
140
- - 动画配置(AnimationController, Tween)
16
+ **不视为独立模块**:`main.dart` / `app.dart`(入口文件)、纯 re-export 桶文件、`lib/utils/` / `lib/helpers/` 合并为一个模块、`*.g.dart` / `*.freezed.dart` 生成文件跳过。
141
17
 
142
- **输出示例**:
143
- ```
144
- ### UserAvatar
145
- - **路径**: `lib/widgets/user_avatar.dart`
146
- - **类型**: StatelessWidget
147
- - **构造参数**:
148
- | 参数 | 类型 | 必填 | 默认值 | 说明 |
149
- |------|------|------|--------|------|
150
- | avatarUrl | String? | No | null | 头像 URL |
151
- | size | double | No | 48.0 | 头像尺寸 |
152
- | name | String | Yes | - | 用于生成默认头像 |
153
- - **子 Widget**: CachedNetworkImage + fallback (首字母头像)
154
- ```
155
-
156
- ### 层 4: 状态管理层
157
-
158
- #### Provider
159
-
160
- **扫描文件**: `lib/providers/**/*.dart`
161
-
162
- **提取内容**:
163
- - Provider 名称 + 类型(ChangeNotifier / FutureProvider / StateNotifier)
164
- - State 字段(名称 + 类型)
165
- - 方法(签名 + 说明)
166
-
167
- **输出示例**:
168
- ```
169
- ### AuthProvider(ChangeNotifier)
170
- - **路径**: `lib/providers/auth_provider.dart`
171
- - **State**:
172
- | 字段 | 类型 | 说明 |
173
- |------|------|------|
174
- | user | User? | 当前用户 |
175
- | isLoading | bool | 加载状态 |
176
- | isAuthenticated | bool | 是否已认证(getter) |
177
- - **方法**:
178
- | 方法 | 签名 | 说明 |
179
- |------|------|------|
180
- | login | (String email, String password) → Future<void> | 登录 |
181
- | logout | () → Future<void> | 登出 |
182
- | updateProfile | (UpdateProfileDTO) → Future<void> | 更新资料 |
183
- - **持久化**: SharedPreferences (token), Hive (user)
184
- ```
18
+ ## 入口识别
185
19
 
186
- #### BLoC
20
+ - **App 入口**:`lib/main.dart` → `runApp(...)` → `MaterialApp` / `CupertinoApp` / `WidgetsApp`
21
+ - **路由入口**:`MaterialApp(home:)` 或 `MaterialApp.router(routerConfig:)`
22
+ - **GoRouter**:`app_router.dart` 中 `GoRouter(routes:)` 定义,含 `initialLocation`
23
+ - **AutoRoute**:`@AutoRouterConfig()` 注解 + `AppRouter.gr.dart` 生成文件
187
24
 
188
- **扫描文件**: `lib/bloc/**/*.dart`, `lib/cubit/**/*.dart`
25
+ ## 架构模式识别
189
26
 
190
- **提取内容**:
191
- - Bloc/Cubit 名称
192
- - State 类(字段 + 类型)
193
- - Event/输入(名称 + 关联字段)
194
- - Emitted States(每个 Event 触发的 State 变化)
27
+ 从 `pubspec.yaml` dependencies 检测状态管理方案:
195
28
 
196
- **输出示例**:
197
- ```
198
- ### AuthBloc
199
- - **路径**: `lib/bloc/auth/auth_bloc.dart`
200
- - **State**: `AuthState(user: User?, status: AuthStatus, error: String?)`
201
- - **Events**:
202
- | Event | 字段 | 触发的 State 变化 |
203
- |-------|------|-------------------|
204
- | AuthLoginRequested | email, password | status: loading → authenticated / failure |
205
- | AuthLogoutRequested | - | status: authenticated → unauthenticated |
206
- | AuthRefreshRequested | - | 重新获取用户信息 |
207
- ```
29
+ | 状态管理 | 识别依赖 | 目录特征 |
30
+ |---------|---------|---------|
31
+ | Provider | `provider` | `lib/providers/` |
32
+ | Riverpod | `flutter_riverpod` / `hooks_riverpod` | `lib/providers/` + `@riverpod` 注解 |
33
+ | BLoC | `flutter_bloc` + `equatable` | `lib/bloc/` / `lib/cubit/` |
34
+ | GetX | `get` | `lib/controllers/` + `Get.to()` |
35
+ | MobX | `mobx` + `flutter_mobx` | `lib/stores/` + `@observable` |
208
36
 
209
- ### 5: Service / Repository
37
+ 路由方案检测:`go_router` GoRouter;`auto_route` AutoRoute;`Get.to()` GetX;无路由库 → Navigator 1.0。
210
38
 
211
- **扫描文件**: `lib/services/**/*.dart`, `lib/repositories/**/*.dart`
39
+ 整体架构判断:`lib/features/` 存在 → Feature-first;`lib/data/` + `lib/domain/` + `lib/presentation/` → Clean Architecture;无明显分层 → 扁平结构。
212
40
 
213
- **提取内容**:
214
- - 类名 + 依赖注入方式
215
- - 方法签名 + API 端点映射
216
- - 错误处理策略
41
+ ## 数据流模式
217
42
 
218
- **输出示例**:
219
- ```
220
- ### UserRepository
221
- - **路径**: `lib/repositories/user_repository.dart`
222
- - **依赖**: Dio (http client), UserLocalDataSource
223
- - **方法**:
224
- | 方法 | HTTP | 路径 | 返回类型 |
225
- |------|------|------|----------|
226
- | getUserProfile() | GET | /api/user/profile | Future<User> |
227
- | updateProfile(data) | PUT | /api/user/profile | Future<User> |
228
- | changePassword(data) | POST | /api/user/password | Future<void> |
229
- ```
43
+ - **Provider/Riverpod**:`ChangeNotifier.notifyListeners()` → `Consumer` / `ref.watch()` 重建
44
+ - **BLoC**:`Event` → `Bloc.add()` → `emit(State)` → `BlocBuilder` 重建
45
+ - **GetX**:`Rx` 变量 + `.obs` → `Obx(() => ...)` 响应式重建
46
+ - **数据层**:Repository 模式 → `Dio` / `http` 网络请求 → JSON 序列化(`json_serializable` / `freezed`)
230
47
 
231
- ### 层 6: 样式/主题层
48
+ ## 分析关注点
232
49
 
233
- **扫描文件**: `lib/theme/**/*.dart`, `lib/styles/**/*.dart`
50
+ - **`lib/` 目录结构**:是理解项目架构的核心,需完整列出一级和二级目录
51
+ - **Widget 树入口**:`runApp()` → 根 Widget → 路由配置,是所有页面的起点
52
+ - **`pubspec.yaml` 依赖**:完整提取 dependencies 和 dev_dependencies,识别框架版本
53
+ - **Flutter Bloc/Provider/Riverpod 检测**:状态管理方案决定数据流分析策略
54
+ - **生成文件识别**:`*.g.dart` / `*.freezed.dart` 跳过分析,但需识别其对应的源文件
55
+ - **平台特定代码**:`android/` / `ios/` 中的原生模块仅在有 MethodChannel 桥接时分析
234
56
 
235
- **提取内容**:
236
- - ThemeData 配置
237
- - 颜色定义(ColorScheme)
238
- - 字体配置(TextTheme)
239
- - 间距系统
240
- - 自定义组件主题
57
+ ## 输出示例
241
58
 
242
- **输出示例**:
243
- ```
244
- ### AppTheme
245
- - **文件**: `lib/theme/app_theme.dart`
246
- - **颜色**:
247
- | Token | 值 | 用途 |
248
- |-------|------|------|
249
- | primaryColor | Color(0xFF6750A4) | 主色调 |
250
- | onPrimaryColor | Color(0xFFFFFFFF) | 主色上的文字 |
251
- | errorColor | Color(0xFFB3261E) | 错误色 |
252
- - **字体**:
253
- | 用途 | 字体族 | 字号 | 字重 |
254
- |------|--------|------|------|
255
- | headlineLarge | Roboto | 32sp | Bold |
256
- | bodyMedium | Roboto | 14sp | Normal |
257
59
  ```
60
+ ### 项目结构(Feature-first)
61
+ lib/
62
+ features/
63
+ auth/ → 认证模块(login, register, forgot_password)
64
+ home/ → 首页模块(feed, search)
65
+ profile/ → 用户模块(view, edit, settings)
66
+ shared/
67
+ widgets/ → 公共组件
68
+ services/ → 网络/存储服务
258
69
 
259
- ## 输出模板
70
+ ### 技术栈检测
71
+ - 状态管理: Riverpod (flutter_riverpod 2.4.0) + hooks_riverpod
72
+ - 路由: GoRouter (go_router 12.1.1), initialLocation: /splash
73
+ - 网络: Dio (dio 5.3.2) + Retrofit
74
+ - 序列化: freezed + json_serializable
260
75
 
261
- ### README.md 章节结构
262
-
263
- ```markdown
264
- # {项目名}
265
-
266
- ## 项目概述
267
- App 功能描述
268
-
269
- ## 技术栈
270
- | 技术 | 版本 | 用途 |
271
- |------|------|------|
272
-
273
- ## 架构设计
274
- ### 架构图(ASCII)
275
- ### 数据流图
276
-
277
- ## 路由结构
278
- 路由树 + 参数 + 守卫
279
-
280
- ## 状态管理
281
- Provider/BLoC 关系图
282
-
283
- ## 模块详解
284
- 按 Feature 分组
285
-
286
- ## 依赖管理
287
- pubspec.yaml 关键依赖
76
+ ### 数据流(Riverpod)
77
+ 用户操作 → ref.read(provider.notifier).method()
78
+ → StateNotifier.state = newState
79
+ ref.watch(provider) 重建 UI
288
80
  ```
289
-
290
- ## 模块边界识别
291
-
292
- 以下目录模式下的每个子目录视为独立模块(L2+ 分析时生成 MODULE-DOC.md):
293
-
294
- | 层 | 扫描路径 | 模块判定规则 | MODULE-DOC slug 来源 |
295
- |----|----------|-------------|---------------------|
296
- | 页面/视图层 | `lib/features/{name}/`, `lib/screens/` | 每个子目录 | 目录名 kebab-case |
297
- | API/服务层 | `lib/services/`, `lib/repositories/` | 每个子目录或文件 | 名称 kebab-case |
298
- | 状态管理层 | `lib/providers/`, `lib/notifiers/` | 每个文件 | 文件名去后缀 kebab-case |
299
- | 组件层 | `lib/widgets/` | 3+ 文件的子目录 | 目录名 kebab-case |
300
- | 数据模型层 | `lib/models/` | 每个文件 | 文件名去后缀 kebab-case |
301
-
302
- **不视为独立模块的情况**:
303
- - 单文件入口(如 `main.dart`, `app.dart`)
304
- - 纯导出桶文件(仅有 re-export)
305
- - 工具函数目录(`lib/utils/`, `lib/helpers/`)— 合并为一个模块
306
- - 生成文件(`*.g.dart`, `*.freezed.dart`)跳过
307
- - 平台目录(`android/`, `ios/`)跳过
308
-
309
- ## Token 管理
310
-
311
- - 大模块(>20 文件)拆分为子任务
312
- - 每个子任务分析 ≤10 文件
313
- - `pubspec.yaml` 分析单独一个子任务
314
- - 生成的文件(`*.g.dart`, `*.freezed.dart`)跳过或简要分析
315
- - 平台目录(android/, ios/)不分析