@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.
- package/lib/install-skills.sh +16 -0
- package/lib/knowledge-graph.sh +483 -81
- package/lib/pre-scan.sh +70 -5
- package/package.json +1 -1
- package/skills/project-analyze/SKILL.md +34 -15
- package/skills/project-analyze/phases/phase2-understand.md +7 -1
- package/skills/project-analyze/phases/phase2.5-refine.md +284 -0
- package/skills/project-analyze/phases/phase4-synthesize.md +100 -119
- package/skills/project-analyze/phases/phase5-export.md +78 -32
- package/skills/project-analyze/prompts/understand-agent.md +17 -0
- package/skills/project-analyze/rules/android.md +61 -260
- package/skills/project-analyze/rules/devops.md +61 -421
- package/skills/project-analyze/rules/generic.md +53 -221
- package/skills/project-analyze/rules/go.md +60 -275
- package/skills/project-analyze/rules/harmony.md +64 -237
- package/skills/project-analyze/rules/java.md +47 -485
- package/skills/project-analyze/rules/mobile-flutter.md +57 -292
- package/skills/project-analyze/rules/mobile-react-native.md +65 -262
- package/skills/project-analyze/rules/mobile-swift.md +58 -303
- package/skills/project-analyze/rules/python.md +50 -296
- package/skills/project-analyze/rules/rust-tauri.md +51 -217
- package/skills/project-analyze/rules/rust.md +50 -274
- package/skills/project-analyze/rules/web-nextjs.md +61 -335
- package/skills/project-analyze/rules/web-react.md +50 -272
- package/skills/project-analyze/rules/web-vue.md +58 -352
- package/skills/project-analyze/rules/web.md +55 -347
- package/skills/requirements-writer/SKILL.md +48 -1
- package/skills/software-architecture/SKILL.md +73 -3
|
@@ -1,283 +1,86 @@
|
|
|
1
1
|
# React Native 项目分析规则
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
> **编码规范**:本规则不包含编码规范内容。Phase 2.5 精炼阶段会自动加载 `react-native-conventions` skill 作为规范约束。
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
## 模块发现策略
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
App.tsx / App.js(入口)
|
|
9
|
-
↓
|
|
10
|
-
Navigation(导航)
|
|
11
|
-
↓
|
|
12
|
-
Screens(页面)
|
|
13
|
-
↓
|
|
14
|
-
Components(组件)
|
|
15
|
-
↓
|
|
16
|
-
Hooks / Context(逻辑复用)
|
|
17
|
-
↓
|
|
18
|
-
Services / API(数据层)
|
|
19
|
-
↓
|
|
20
|
-
Stores / State(状态管理)
|
|
21
|
-
↓
|
|
22
|
-
Utils / Types(工具/类型)
|
|
23
|
-
```
|
|
24
|
-
|
|
25
|
-
## 目录扫描策略
|
|
26
|
-
|
|
27
|
-
### 1. 识别项目类型
|
|
28
|
-
|
|
29
|
-
**信号文件检测:**
|
|
30
|
-
- `app.json` / `app.config.js` → Expo 项目
|
|
31
|
-
- `android/app/build.gradle` + `ios/Podfile` → Bare React Native
|
|
32
|
-
- `metro.config.js` → Metro bundler 配置
|
|
33
|
-
|
|
34
|
-
### 2. 识别导航方案
|
|
35
|
-
|
|
36
|
-
- React Navigation: `@react-navigation/native` 依赖
|
|
37
|
-
- Expo Router: `expo-router` 依赖 + `app/` 目录
|
|
38
|
-
- Native Stack / Tab / Drawer Navigator
|
|
39
|
-
- Deep Linking 配置
|
|
40
|
-
|
|
41
|
-
### 3. 识别状态管理
|
|
42
|
-
|
|
43
|
-
- Redux Toolkit: `@reduxjs/toolkit`, `react-redux`
|
|
44
|
-
- Zustand: `zustand`
|
|
45
|
-
- MobX: `mobx`, `mobx-react`
|
|
46
|
-
- Context API: React 内置
|
|
47
|
-
- Recoil: `recoil`
|
|
48
|
-
|
|
49
|
-
### 4. 依赖提取
|
|
50
|
-
|
|
51
|
-
从 `package.json` 提取:
|
|
52
|
-
|
|
53
|
-
| 类别 | 常见依赖 |
|
|
54
|
-
|------|----------|
|
|
55
|
-
| 导航 | @react-navigation/native, expo-router |
|
|
56
|
-
| 状态管理 | @reduxjs/toolkit, zustand, mobx |
|
|
57
|
-
| 网络 | axios, fetch, @tanstack/react-query |
|
|
58
|
-
| 存储 | @react-native-async-storage/async-storage, MMKV |
|
|
59
|
-
| UI | react-native-paper, native-base, tamagui |
|
|
60
|
-
| 动画 | react-native-reanimated, react-native-gesture-handler |
|
|
61
|
-
| 图片 | react-native-fast-image, expo-image |
|
|
62
|
-
| 原生模块 | 各种 react-native-* bridge 模块 |
|
|
63
|
-
|
|
64
|
-
### 5. 按层扫描路径
|
|
65
|
-
|
|
66
|
-
- **Screens**: `src/screens/`, `app/` (Expo Router)
|
|
67
|
-
- **Components**: `src/components/`
|
|
68
|
-
- **Navigation**: `src/navigation/`
|
|
69
|
-
- **Hooks**: `src/hooks/`
|
|
70
|
-
- **Services**: `src/services/`, `src/api/`
|
|
71
|
-
- **Store**: `src/store/`, `src/stores/`
|
|
72
|
-
- **Types**: `src/types/`
|
|
73
|
-
- **Utils**: `src/utils/`, `src/constants/`
|
|
74
|
-
- **Assets**: `src/assets/`, `assets/`
|
|
75
|
-
|
|
76
|
-
## 各层提取规则
|
|
77
|
-
|
|
78
|
-
### 层 1: Navigation 层
|
|
79
|
-
|
|
80
|
-
**扫描文件**: `src/navigation/**/*.tsx`, `app/**/*.tsx` (Expo Router)
|
|
81
|
-
|
|
82
|
-
**提取内容**:
|
|
83
|
-
- 导航类型(Stack / Tab / Drawer / Bottom Tabs)
|
|
84
|
-
- 路由配置(name + component + options)
|
|
85
|
-
- 屏幕参数类型定义
|
|
86
|
-
- 导航守卫(认证检查)
|
|
87
|
-
|
|
88
|
-
**输出示例**:
|
|
89
|
-
```
|
|
90
|
-
### 导航结构(React Navigation)
|
|
91
|
-
- **文件**: `src/navigation/AppNavigator.tsx`
|
|
92
|
-
- **类型**: Native Stack
|
|
93
|
-
- **路由配置**:
|
|
94
|
-
| 路由名 | 组件 | 参数类型 | 选项 |
|
|
95
|
-
|--------|------|----------|------|
|
|
96
|
-
| Login | LoginScreen | - | headerShown: false |
|
|
97
|
-
| Main | BottomTabs | - | gestureEnabled: false |
|
|
98
|
-
| Home | HomeScreen | - | tabBarIcon: home |
|
|
99
|
-
| Profile | ProfileScreen | - | tabBarIcon: person |
|
|
100
|
-
| UserDetail | UserDetailScreen | { userId: string } | title: '用户详情' |
|
|
101
|
-
| Settings | SettingsScreen | - | - |
|
|
102
|
-
- **认证守卫**: AuthProvider 包裹,未登录→Login,已登录→Main
|
|
103
|
-
```
|
|
104
|
-
|
|
105
|
-
### 层 2: Screen 层
|
|
106
|
-
|
|
107
|
-
**扫描文件**: `src/screens/**/*.tsx`
|
|
108
|
-
|
|
109
|
-
**提取内容**:
|
|
110
|
-
- Screen 组件名 + 路径
|
|
111
|
-
- Props(Navigation Props + 自定义 Props)
|
|
112
|
-
- 使用的 Hooks(useState, useEffect, 自定义 Hook)
|
|
113
|
-
- 使用的 API / Store
|
|
114
|
-
- UI 结构(主要子组件,1-2 层)
|
|
115
|
-
|
|
116
|
-
**输出示例**:
|
|
117
|
-
```
|
|
118
|
-
### HomeScreen
|
|
119
|
-
- **路径**: `src/screens/Home/HomeScreen.tsx`
|
|
120
|
-
- **Props**: StackScreenProps<HomeParamList, 'Home'>
|
|
121
|
-
- **使用的 Hooks**:
|
|
122
|
-
| Hook | 用途 |
|
|
123
|
-
|------|------|
|
|
124
|
-
| useFeedStore | 获取 feed 列表 |
|
|
125
|
-
| useRefresh | 下拉刷新 |
|
|
126
|
-
| useAuth | 获取当前用户 |
|
|
127
|
-
- **使用的 API**: getFeedItems(), getRecommendations()
|
|
128
|
-
- **UI 结构**:
|
|
129
|
-
FlatList
|
|
130
|
-
├── ListHeaderComponent: SearchBar + Banner
|
|
131
|
-
├── renderItem: FeedCard
|
|
132
|
-
└── onRefresh: handleRefresh
|
|
133
|
-
```
|
|
7
|
+
从 `package.json` 和目录结构识别模块边界:
|
|
134
8
|
|
|
135
|
-
|
|
9
|
+
- `package.json` → 解析 `dependencies` / `devDependencies`,识别导航、状态管理、原生模块
|
|
10
|
+
- `src/screens/` / `src/views/` → 每个子目录或文件视为独立页面模块
|
|
11
|
+
- `src/components/{name}/` → 3+ 文件的子目录视为独立组件模块
|
|
12
|
+
- `src/store/` / `src/stores/` → 状态管理模块
|
|
13
|
+
- `src/services/` / `src/api/` → 数据层模块
|
|
14
|
+
- `src/hooks/` → 每个文件视为独立 Hook 模块
|
|
15
|
+
- `app/` (Expo Router) → 基于文件系统的路由,每个文件视为一个页面
|
|
136
16
|
|
|
137
|
-
|
|
17
|
+
**不视为独立模块**:`App.tsx` / `index.js`(入口文件)、纯 re-export 的 `index.ts`、`src/utils/` / `src/helpers/` 合并为一个模块、`*.generated.ts` 跳过。
|
|
138
18
|
|
|
139
|
-
|
|
140
|
-
- 组件名 + 路径
|
|
141
|
-
- Props TypeScript interface
|
|
142
|
-
- 样式方案(StyleSheet.create / Styled Components / NativeWind)
|
|
143
|
-
- 子组件结构
|
|
19
|
+
## 入口识别
|
|
144
20
|
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
-
|
|
150
|
-
```typescript
|
|
151
|
-
interface FeedCardProps {
|
|
152
|
-
item: FeedItem;
|
|
153
|
-
onPress?: (item: FeedItem) => void;
|
|
154
|
-
showActions?: boolean;
|
|
155
|
-
}
|
|
156
|
-
```
|
|
157
|
-
- **子组件**: Avatar, Text, Image, ActionButtons
|
|
158
|
-
- **样式**: StyleSheet.create(内联样式)
|
|
159
|
-
```
|
|
21
|
+
| 类型 | 识别特征 |
|
|
22
|
+
|------|---------|
|
|
23
|
+
| Bare React Native | `android/app/build.gradle` + `ios/Podfile` + `metro.config.js` |
|
|
24
|
+
| Expo Managed | `app.json` / `app.config.js` + `expo` SDK |
|
|
25
|
+
| Expo with Router | `expo-router` 依赖 + `app/` 目录(文件系统路由) |
|
|
160
26
|
|
|
161
|
-
|
|
27
|
+
App 入口:`App.tsx` / `App.js` → Navigation Provider → Root Navigator。
|
|
162
28
|
|
|
163
|
-
|
|
29
|
+
## 架构模式识别
|
|
164
30
|
|
|
165
|
-
|
|
166
|
-
- Store 名称 + 类型
|
|
167
|
-
- State 接口
|
|
168
|
-
- Actions / Reducers
|
|
169
|
-
- 异步 Thunk
|
|
31
|
+
从 `package.json` 检测导航和状态管理方案:
|
|
170
32
|
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
-
|
|
175
|
-
-
|
|
176
|
-
| 字段 | 类型 | 说明 |
|
|
177
|
-
|------|------|------|
|
|
178
|
-
| items | FeedItem[] | Feed 列表 |
|
|
179
|
-
| loading | boolean | 加载状态 |
|
|
180
|
-
| error | string \| null | 错误信息 |
|
|
181
|
-
| hasMore | boolean | 是否有更多 |
|
|
182
|
-
- **Reducers**: appendItems, clearFeed
|
|
183
|
-
- **Async Thunks**: fetchFeedItems, loadMore
|
|
184
|
-
```
|
|
33
|
+
| 导航方案 | 识别依赖 |
|
|
34
|
+
|---------|---------|
|
|
35
|
+
| React Navigation | `@react-navigation/native` + Stack/Tab/Drawer |
|
|
36
|
+
| Expo Router | `expo-router`(文件系统路由,`app/` 目录) |
|
|
37
|
+
| React Native Navigation | `react-native-navigation` (Wix) |
|
|
185
38
|
|
|
186
|
-
|
|
39
|
+
| 状态管理 | 识别依赖 |
|
|
40
|
+
|---------|---------|
|
|
41
|
+
| Redux Toolkit | `@reduxjs/toolkit` + `react-redux` |
|
|
42
|
+
| Zustand | `zustand` |
|
|
43
|
+
| MobX | `mobx` + `mobx-react` / `mobx-react-lite` |
|
|
44
|
+
| Recoil | `recoil` |
|
|
45
|
+
| Context API | 无第三方库,仅 React 内置 |
|
|
187
46
|
|
|
188
|
-
|
|
47
|
+
## 数据流模式
|
|
189
48
|
|
|
190
|
-
|
|
191
|
-
-
|
|
192
|
-
-
|
|
193
|
-
-
|
|
49
|
+
- **Redux Toolkit**:`dispatch(action)` → `reducer` → `store.state` → `useSelector()` 重渲染
|
|
50
|
+
- **Zustand**:`useStore(selector)` → `setState()` → 订阅者重渲染(更轻量)
|
|
51
|
+
- **React Query**:`useQuery()` / `useMutation()` → 服务端状态缓存 + 自动同步
|
|
52
|
+
- **原生模块桥接**:JS → `NativeModules.XXX.method()` → 原生代码执行 → Promise/Callback 返回
|
|
194
53
|
|
|
195
|
-
|
|
54
|
+
## 分析关注点
|
|
196
55
|
|
|
197
|
-
|
|
56
|
+
- **原生模块边界(Native Module Boundary)**:检测 `NativeModules`、`NativeEventEmitter`、`requireNativeComponent`,列出所有 JS ↔ Native 桥接点
|
|
57
|
+
- **导航结构**:React Navigation 需提取完整的 Navigator 嵌套树(Stack/Tab/Drawer 嵌套关系);Expo Router 分析 `app/` 目录文件结构
|
|
58
|
+
- **Bridge 检测**:`android/app/src/main/java/**/*Module.kt` + `ios/**/*Bridge.m` / `*Module.mm`,识别 @ReactMethod 方法
|
|
59
|
+
- **Expo vs Bare 区别**:Expo Managed 不允许自定义原生代码;Bare 可以,需分析原生模块
|
|
60
|
+
- **Metro 配置**:`metro.config.js` 中的 `resolver.extraNodeModules` 可能影响模块别名解析
|
|
61
|
+
- **平台特定文件**:`*.ios.tsx` / `*.android.tsx` 需识别平台差异实现
|
|
198
62
|
|
|
199
|
-
|
|
200
|
-
- Native Module 名称
|
|
201
|
-
- 导出方法(@ReactMethod)
|
|
202
|
-
- 参数类型和返回类型
|
|
203
|
-
- 线程配置
|
|
63
|
+
## 输出示例
|
|
204
64
|
|
|
205
|
-
**输出示例**:
|
|
206
|
-
```
|
|
207
|
-
### BiometricModule
|
|
208
|
-
- **方法**:
|
|
209
|
-
| 方法 | 参数 | 返回 | 说明 |
|
|
210
|
-
|------|------|------|------|
|
|
211
|
-
| authenticate | (reason: string) | Promise<boolean> | 生物识别认证 |
|
|
212
|
-
| isAvailable | () | Promise<boolean> | 检查设备支持 |
|
|
213
|
-
- **平台**: iOS (TouchID/FaceID), Android (BiometricPrompt)
|
|
214
65
|
```
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
## 技术栈
|
|
236
|
-
| 技术 | 版本 | 用途 |
|
|
237
|
-
|------|------|------|
|
|
238
|
-
|
|
239
|
-
## 架构设计
|
|
240
|
-
### 架构图(ASCII)
|
|
241
|
-
### 数据流图
|
|
242
|
-
|
|
243
|
-
## 导航结构
|
|
244
|
-
路由树 + 参数 + 导航方式
|
|
245
|
-
|
|
246
|
-
## 状态管理
|
|
247
|
-
Store 关系图
|
|
248
|
-
|
|
249
|
-
## 模块详解
|
|
250
|
-
按 Screen 分组
|
|
251
|
-
|
|
252
|
-
## 原生模块
|
|
253
|
-
Bridge 方法列表
|
|
254
|
-
|
|
255
|
-
## 依赖管理
|
|
256
|
-
关键 npm 依赖
|
|
66
|
+
### 项目类型
|
|
67
|
+
- 类型: Expo Managed (SDK 50)
|
|
68
|
+
- 导航: Expo Router (文件系统路由)
|
|
69
|
+
app/
|
|
70
|
+
(auth)/login.tsx
|
|
71
|
+
(auth)/register.tsx
|
|
72
|
+
(tabs)/index.tsx → 首页
|
|
73
|
+
(tabs)/profile.tsx → 个人中心
|
|
74
|
+
user/[id].tsx → 动态路由
|
|
75
|
+
|
|
76
|
+
### 技术栈检测
|
|
77
|
+
- 状态管理: Zustand (zustand 4.4.6)
|
|
78
|
+
- 网络: Axios + React Query (@tanstack/react-query 5.0)
|
|
79
|
+
- 原生模块: expo-camera, expo-notifications, react-native-mmkv
|
|
80
|
+
|
|
81
|
+
### 原生模块边界
|
|
82
|
+
| 模块 | 平台 | JS 调用方式 | 说明 |
|
|
83
|
+
|------|------|------------|------|
|
|
84
|
+
| BiometricModule | iOS + Android | NativeModules.Biometric.authenticate() | 生物识别 |
|
|
85
|
+
| PushNotification | iOS + Android | expo-notifications API | 推送通知 |
|
|
257
86
|
```
|
|
258
|
-
|
|
259
|
-
## 模块边界识别
|
|
260
|
-
|
|
261
|
-
以下目录模式下的每个子目录视为独立模块(L2+ 分析时生成 MODULE-DOC.md):
|
|
262
|
-
|
|
263
|
-
| 层 | 扫描路径 | 模块判定规则 | MODULE-DOC slug 来源 |
|
|
264
|
-
|----|----------|-------------|---------------------|
|
|
265
|
-
| 页面/视图层 | `src/screens/`, `src/views/` | 每个子目录或文件 | 名称 kebab-case |
|
|
266
|
-
| API/服务层 | `src/services/`, `src/api/` | 每个子目录 | 目录名 kebab-case |
|
|
267
|
-
| 状态管理层 | `src/store/`, `src/stores/` | 每个子目录 | 目录名 kebab-case |
|
|
268
|
-
| 组件层 | `src/components/{name}/` | 3+ 文件的子目录 | 目录名 kebab-case |
|
|
269
|
-
| Hooks 层 | `src/hooks/` | 每个文件 | 文件名去后缀 kebab-case |
|
|
270
|
-
|
|
271
|
-
**不视为独立模块的情况**:
|
|
272
|
-
- 单文件入口(如 `App.tsx`, `index.js`)
|
|
273
|
-
- 纯导出桶文件(`index.ts` 仅有 re-export)
|
|
274
|
-
- 工具函数目录(`src/utils/`, `src/helpers/`)— 合并为一个模块
|
|
275
|
-
- 生成文件(`*.generated.ts`)跳过
|
|
276
|
-
|
|
277
|
-
## Token 管理
|
|
278
|
-
|
|
279
|
-
- 大模块(>20 文件)拆分为子任务
|
|
280
|
-
- 每个子任务分析 ≤10 文件
|
|
281
|
-
- `package.json` 分析单独一个子任务
|
|
282
|
-
- `android/` 和 `ios/` 原生代码只分析 bridge 文件
|
|
283
|
-
- 自动生成的文件(`*.generated.ts`)跳过
|