@dtt_siye/atool 1.3.0 → 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 (28) hide show
  1. package/lib/install-skills.sh +16 -0
  2. package/lib/knowledge-graph.sh +483 -81
  3. package/lib/pre-scan.sh +70 -5
  4. package/package.json +1 -1
  5. package/skills/project-analyze/SKILL.md +34 -15
  6. package/skills/project-analyze/phases/phase2-understand.md +7 -1
  7. package/skills/project-analyze/phases/phase2.5-refine.md +284 -0
  8. package/skills/project-analyze/phases/phase4-synthesize.md +100 -119
  9. package/skills/project-analyze/phases/phase5-export.md +78 -32
  10. package/skills/project-analyze/prompts/understand-agent.md +17 -0
  11. package/skills/project-analyze/rules/android.md +61 -260
  12. package/skills/project-analyze/rules/devops.md +61 -421
  13. package/skills/project-analyze/rules/generic.md +53 -221
  14. package/skills/project-analyze/rules/go.md +60 -275
  15. package/skills/project-analyze/rules/harmony.md +64 -237
  16. package/skills/project-analyze/rules/java.md +47 -485
  17. package/skills/project-analyze/rules/mobile-flutter.md +57 -292
  18. package/skills/project-analyze/rules/mobile-react-native.md +65 -262
  19. package/skills/project-analyze/rules/mobile-swift.md +58 -303
  20. package/skills/project-analyze/rules/python.md +50 -296
  21. package/skills/project-analyze/rules/rust-tauri.md +51 -217
  22. package/skills/project-analyze/rules/rust.md +50 -274
  23. package/skills/project-analyze/rules/web-nextjs.md +61 -335
  24. package/skills/project-analyze/rules/web-react.md +50 -272
  25. package/skills/project-analyze/rules/web-vue.md +58 -352
  26. package/skills/project-analyze/rules/web.md +55 -347
  27. package/skills/requirements-writer/SKILL.md +48 -1
  28. package/skills/software-architecture/SKILL.md +73 -3
@@ -1,282 +1,83 @@
1
1
  # Android / Kotlin 项目分析规则
2
2
 
3
- ## 分析粒度
3
+ > **编码规范**:本规则不包含编码规范内容。Phase 2.5 精炼阶段会自动加载 `android-conventions` skill 作为规范约束。
4
4
 
5
- Feature Module 和 MVVM+ 分层架构进行分析。
5
+ ## 模块发现策略
6
6
 
7
- ```
8
- Application (Application 类)
9
-
10
- DI Module(依赖注入:Hilt / Koin)
11
-
12
- Navigation(导航:Jetpack Navigation / Compose Navigation)
13
-
14
- Activity / Fragment / Composable Screen
15
-
16
- ViewModel
17
-
18
- Repository
19
-
20
- Data Source(Remote: Retrofit + Local: Room / DataStore)
21
-
22
- Model / Entity(数据模型)
23
- ```
24
-
25
- ## 目录扫描策略
26
-
27
- ### 1. 识别项目类型
28
-
29
- **信号文件检测:**
30
- - 单模块: `app/` 下直接包含源码
31
- - 多模块: `settings.gradle` 中 `include` 列表
32
- - Compose 项目: `build.gradle` 中 `compose = true`
33
- - KMP 项目: `shared/` 模块 + `build.gradle.kts`
34
-
35
- ### 2. 识别架构模式
36
-
37
- - **MVVM + Repository**: ViewModel + Repository + Room
38
- - **MVI**: Intent → Reducer → State → View
39
- - **Clean Architecture**: Domain / Data / Presentation 三层
40
-
41
- ### 3. 依赖提取
42
-
43
- 从 `build.gradle` / `build.gradle.kts` 提取:
44
-
45
- | 类别 | 常见依赖 |
46
- |------|----------|
47
- | Compose | compose-bom, compose-ui, compose-material3 |
48
- | Navigation | navigation-compose, navigation-fragment |
49
- | DI | hilt-android, koin-android |
50
- | 网络 | retrofit, okhttp, ktor |
51
- | 图片 | coil-compose, glide |
52
- | 数据库 | room-runtime, datastore-preferences |
53
- | 异步 | kotlinx-coroutines, rxjava |
54
- | 序列化 | kotlin-serialization, moshi, gson |
55
- | DI | hilt-android-compiler, koin |
56
- | 测试 | junit, mockk, turbine |
57
-
58
- ### 4. 按层扫描路径
59
-
60
- - **UI 层**: `*/ui/`, `*/screens/`, `*/compose/`
61
- - **Activity/Fragment**: `*/activities/`, `*/fragments/`
62
- - **ViewModel**: `*/viewmodel/`, `*/viewmodels/`
63
- - **Repository**: `*/repository/`, `*/repositories/`
64
- - **数据源**: `*/data/remote/`, `*/data/local/`, `*/datasource/`
65
- - **Model**: `*/model/`, `*/models/`, `*/entity/`
66
- - **DI**: `*/di/`, `*/hilt/`
67
-
68
- ## 各层提取规则
7
+ 从 Gradle 构建文件识别模块边界:
69
8
 
70
- ### 1: UI
9
+ - `settings.gradle` / `settings.gradle.kts` → `include(":app", ":feature-home", ":core")` 列出所有模块
10
+ - 单模块项目:`app/src/main/java/` 下按 `feature/` 包名识别功能边界
11
+ - 多模块项目:每个 Gradle 子模块视为独立分析单元
12
+ - KMP 项目:`shared/` 模块单独分析,区分 `commonMain` / `androidMain` / `iosMain`
13
+ - `build.gradle.kts` 中 `compose = true` → Jetpack Compose 项目
14
+ - `libs.versions.toml` → Version Catalog,提取所有依赖版本
71
15
 
72
- #### Jetpack Compose
16
+ **不视为独立模块**:`MainActivity.kt` / `Application.kt`(入口文件)、`util/` / `helper/` / `extension/` 合并为一个模块、`*.generated.kt` / `BuildConfig` 跳过。
73
17
 
74
- **扫描文件**: `*Screen.kt`, `*Page.kt`, 含 `@Composable` 的文件
18
+ ## 入口识别
75
19
 
76
- **提取内容**:
77
- - `@Composable` 函数签名 + 参数
78
- - `Modifier`
79
- - 状态管理(`remember`, `mutableStateOf`, `collectAsState`)
80
- - 子 Composable 结构(1-2 层)
81
- - `@Preview` 注解
20
+ - **Application 入口**:`AndroidManifest.xml` 中 `android:name=".XXXApplication"` → 继承 `Application` 的类
21
+ - **Activity 入口**:`<intent-filter><action android:name="android.intent.action.MAIN" /></intent-filter>` → `MainActivity`
22
+ - **Hilt 注入**:`@HiltAndroidApp` 注解在 Application 类上
23
+ - **Navigation 入口**:`NavHostFragment` + `NavGraph`(`res/navigation/*.xml`)或 `NavHost` Composable
82
24
 
83
- **输出示例**:
84
- ```
85
- ### UserListScreen
86
- - **路径**: `ui/screens/user/UserListScreen.kt`
87
- - **签名**:
88
- ```kotlin
89
- @Composable
90
- fun UserListScreen(
91
- navController: NavController,
92
- viewModel: UserListViewModel = hiltViewModel()
93
- )
94
- ```
95
- - **状态收集**:
96
- | State | 来源 | 用途 |
97
- |-------|------|------|
98
- | users | viewModel.users.collectAsState() | 用户列表 |
99
- | isLoading | viewModel.isLoading.collectAsState() | 加载状态 |
100
- | searchQuery | viewModel.searchQuery.collectAsState() | 搜索关键词 |
101
- - **UI 结构**:
102
- Scaffold(topBar = UserListTopBar(), floatingActionButton = AddUserFAB())
103
- → LazyColumn(items = users)
104
- → UserListItem(user, onClick = { nav to detail })
105
- - **Modifier 链**: Modifier.fillMaxSize().padding(16.dp)
106
- ```
25
+ ## 架构模式识别
107
26
 
108
- #### XML Layout
27
+ | 架构 | 识别特征 |
28
+ |------|---------|
29
+ | MVVM + Repository | `ViewModel` + `Repository` + `Room` / `Retrofit` |
30
+ | MVI | `Intent` → `Reducer` → `State`(sealed class)→ View |
31
+ | Clean Architecture | `domain/` + `data/` + `presentation/` 三层目录 |
109
32
 
110
- **扫描文件**: `res/layout/*.xml`
33
+ DI 框架检测:
34
+ - **Hilt**:`build.gradle` 中 `hilt-android` + `@HiltViewModel` / `@AndroidEntryPoint`
35
+ - **Koin**:`koin-android` 依赖 + `startKoin { }` + `viewModel { }` DSL
111
36
 
112
- **提取内容**:
113
- - Layout 层级结构
114
- - include / merge 标签
115
- - 自定义 View
37
+ UI 框架检测:`compose-bom` 依赖 → Jetpack Compose;`res/layout/*.xml` → XML Layout;两者并存 → 混合。
116
38
 
117
- ### 层 2: ViewModel 层
39
+ ## 数据流模式
118
40
 
119
- **扫描文件**: `*ViewModel.kt`
41
+ - **Compose + StateFlow**:`ViewModel.uiState: StateFlow<UiState>` → `collectAsState()` → Composable 重组
42
+ - **LiveData(旧版)**:`ViewModel.liveData.observe(viewLifecycleOwner)` → Fragment/Activity 更新 UI
43
+ - **MVI**:`viewModel.processIntent(intent)` → `reducer(state, intent)` → `emit(newState)` → UI 收集
44
+ - **Repository 数据流**:`RemoteDataSource`(Retrofit)+ `LocalDataSource`(Room)→ Repository 聚合 → ViewModel
120
45
 
121
- **提取内容**:
122
- - ViewModel 类名 + 构造参数(`@AssistedInject`)
123
- - UI State 数据类(字段 + 类型)
124
- - Action / Intent(用户操作)
125
- - Effect / Event(一次性事件)
126
- - 依赖的 Repository
46
+ ## 分析关注点
127
47
 
128
- **输出示例**:
129
- ```
130
- ### UserListViewModel
131
- - **路径**: `ui/screens/user/UserListViewModel.kt`
132
- - **注入**: @HiltViewModel
133
- - **UI State**:
134
- ```kotlin
135
- data class UserListState(
136
- val users: List<UserVO> = emptyList(),
137
- val isLoading: Boolean = false,
138
- val searchQuery: String = "",
139
- val error: String? = null
140
- )
141
- ```
142
- - **Actions**:
143
- | Action | 参数 | 说明 |
144
- |--------|------|------|
145
- | loadUsers | - | 初始加载 |
146
- | searchUsers | query: String | 搜索过滤 |
147
- | deleteUser | userId: Long | 删除用户 |
148
- | refresh | - | 下拉刷新 |
149
- - **Effects**:
150
- | Effect | 载荷 | 说明 |
151
- |--------|------|------|
152
- | NavigateToDetail | userId: Long | 导航到详情 |
153
- | ShowToast | message: String | 显示提示 |
154
- - **依赖**: UserRepository
155
- ```
48
+ - **Gradle 模块发现**:`settings.gradle` 是多模块项目的入口,必须先解析模块依赖关系图
49
+ - **Activity/Fragment 入口**:通过 `AndroidManifest.xml` 枚举所有 Activity,识别 exported 的入口点
50
+ - **Jetpack Compose vs XML Layout**:`build.gradle` 中 `buildFeatures { compose = true }` 是关键标志
51
+ - **Hilt/Dagger 注入检测**:`@Module` + `@Provides` / `@Binds` → 识别依赖注入图,影响模块耦合分析
52
+ - **Room 数据库**:`@Database` + `@Entity` + `@Dao` → 数据层核心,需提取 Entity 关系和 Dao 方法
53
+ - **Navigation Component**:`NavGraph`(XML 或 Composable)是页面跳转关系的权威来源
156
54
 
157
- ### 层 3: Repository 层
55
+ ## 输出示例
158
56
 
159
- **扫描文件**: `*Repository.kt`
160
-
161
- **输出示例**:
162
- ```
163
- ### UserRepository
164
- - **路径**: `data/repository/UserRepositoryImpl.kt`
165
- - **接口**: `domain/repository/UserRepository.kt`
166
- - **数据源**: UserRemoteDataSource, UserLocalDataSource (Room)
167
- - **方法**:
168
- | 方法 | 签名 | 说明 |
169
- |------|------|------|
170
- | getUsers | suspend () → List<User> | 先本地后远程 |
171
- | getUserById | suspend (Long) → User | 查询详情 |
172
- | saveUsers | suspend (List<User>) → Unit | 缓存到本地 |
173
57
  ```
174
-
175
- ### 层 4: Room 数据库分析
176
-
177
- **扫描文件**: `*Entity.kt`, `*Dao.kt`, `*Database.kt`
178
-
179
- **输出示例**:
180
- ```
181
- ### AppDatabase
182
- - **文件**: `data/local/AppDatabase.kt`
183
- - **版本**: 3
184
- - **Entities**: UserEntity, SettingsEntity
185
- - **Dao**:
186
- | Dao | 方法 | 返回类型 |
187
- |-----|------|----------|
188
- | UserDao | getAllUsers() | Flow<List<UserEntity>> |
189
- | UserDao | getUserById(id) | Flow<UserEntity?> |
190
- | UserDao | insertUsers(users) | List<Long> |
191
- | UserDao | deleteUser(id) | Int |
192
- - **Migration**: 2→3 (添加 avatar 字段)
193
- ```
194
-
195
- ### 层 5: DI 分析
196
-
197
- **扫描文件**: `*Module.kt` (Hilt), `*Module.kt` (Koin)
198
-
199
- **输出示例**:
200
- ```
201
- ### Hilt Modules
58
+ ### 模块结构(多模块)
59
+ settings.gradle 模块:
60
+ :app → 主模块(Application + MainActivity)
61
+ :feature:home 首页功能模块
62
+ :feature:user → 用户功能模块
63
+ :core:network → 网络层(Retrofit + OkHttp)
64
+ :core:database→ 数据库层(Room)
65
+ :core:common → 公共工具
66
+
67
+ 模块依赖图:
68
+ :app :feature:home, :feature:user
69
+ :feature:* → :core:network, :core:database, :core:common
70
+
71
+ ### 技术栈检测
72
+ - UI: Jetpack Compose (compose-bom 2024.01.00)
73
+ - 架构: MVVM + Clean Architecture
74
+ - DI: Hilt (hilt-android 2.48)
75
+ - 数据库: Room 2.6.1
76
+ - 网络: Retrofit 2.9.0 + OkHttp 4.12
77
+
78
+ ### DI 模块概览
202
79
  | Module | Provides | Scope |
203
80
  |--------|----------|-------|
204
- | NetworkModule | OkHttpClient, Retrofit, ApiServices | Singleton |
205
- | DatabaseModule | AppDatabase, UserDAO | Singleton |
206
- | RepositoryModule | UserRepository | Singleton |
207
- ```
208
-
209
- ### 层 6: Navigation 分析
210
-
211
- **扫描文件**: `NavGraph.kt`, 含 `NavHost` 的文件
212
-
213
- **输出示例**:
214
- ```
215
- ### 导航图
216
- | 路由 | 目标 | 参数 | 动画 |
217
- |------|------|------|------|
218
- | user_list | UserListScreen | - | - |
219
- | user_detail | UserDetailScreen | userId: Long | slideInRight |
220
- | user_edit | UserEditScreen | userId: Long? | slideInRight |
81
+ | NetworkModule | OkHttpClient, Retrofit | Singleton |
82
+ | DatabaseModule | AppDatabase, UserDao | Singleton |
221
83
  ```
222
-
223
- ## 输出模板
224
-
225
- ### README.md 章节结构
226
-
227
- ```markdown
228
- # {App 名称}
229
-
230
- ## 项目概述
231
- App 功能描述
232
-
233
- ## 技术栈
234
- | 技术 | 版本 | 用途 |
235
- |------|------|------|
236
-
237
- ## 架构设计
238
- ### 架构图(ASCII)
239
- ### 数据流图
240
-
241
- ## 模块结构
242
- Gradle 模块依赖关系
243
-
244
- ## 导航结构
245
- 路由表 + 参数
246
-
247
- ## 数据模型
248
- Entity + DTO + UI State
249
-
250
- ## DI 配置
251
- Hilt / Koin 模块
252
-
253
- ## 构建 & 部署
254
- Gradle 命令 + 变体
255
- ```
256
-
257
- ## 模块边界识别
258
-
259
- 以下目录模式下的每个子目录视为独立模块(L2+ 分析时生成 MODULE-DOC.md):
260
-
261
- | 层 | 扫描路径 | 模块判定规则 | MODULE-DOC slug 来源 |
262
- |----|----------|-------------|---------------------|
263
- | UI 层 | `app/src/main/java/**/ui/`, `app/src/main/java/**/screens/` | 每个子目录 | 目录名 kebab-case |
264
- | Repository 层 | `app/src/main/java/**/repository/` | 每个子目录 | 目录名 kebab-case |
265
- | ViewModel 层 | `app/src/main/java/**/viewmodel/` | 每个子目录 | 目录名 kebab-case |
266
- | 组件层 | `app/src/main/java/**/components/` | 3+ 文件的子目录 | 目录名 kebab-case |
267
- | 数据模型层 | `app/src/main/java/**/model/` | 每个文件 | 文件名去后缀 kebab-case |
268
-
269
- **不视为独立模块的情况**:
270
- - 单文件入口(如 `MainActivity.kt`, `Application.kt`)
271
- - 纯导出桶文件(仅有 re-export)
272
- - 工具函数目录(`util/`, `helper/`, `extension/`)— 合并为一个模块
273
- - 生成文件(`*.generated.kt`, `BuildConfig`)跳过
274
-
275
- ## Token 管理
276
-
277
- - 大模块(>20 文件)拆分为子任务
278
- - 每个子任务分析 ≤10 文件
279
- - `build.gradle` 依赖分析单独一个子任务
280
- - layout XML / Compose 文件单独分组分析
281
- - 生成文件(`*.generated.kt`, `BuildConfig`)跳过
282
- - 测试文件(`androidTest/`, `test/`)单独分析