@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,257 +1,84 @@
|
|
|
1
1
|
# HarmonyOS / ArkTS 项目分析规则
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
> **编码规范**:本规则不包含编码规范内容。Phase 2.5 精炼阶段会自动加载 `harmony-conventions` skill 作为规范约束。
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
## 模块发现策略
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
EntryAbility(应用入口)
|
|
9
|
-
↓
|
|
10
|
-
Pages(页面)
|
|
11
|
-
↓
|
|
12
|
-
@Components(自定义组件)
|
|
13
|
-
↓
|
|
14
|
-
@ViewModel / @Observed(状态管理)
|
|
15
|
-
↓
|
|
16
|
-
Service / Utils(服务/工具)
|
|
17
|
-
↓
|
|
18
|
-
Model(数据模型)
|
|
19
|
-
↓
|
|
20
|
-
Resources(资源文件)
|
|
21
|
-
```
|
|
22
|
-
|
|
23
|
-
## 目录扫描策略
|
|
24
|
-
|
|
25
|
-
### 1. 识别项目结构
|
|
26
|
-
|
|
27
|
-
**信号文件检测:**
|
|
28
|
-
- `build-profile.json5` → 构建配置
|
|
29
|
-
- `oh-package.json5` → 包管理
|
|
30
|
-
- `AppScope/` → 应用级配置
|
|
31
|
-
- `entry/` → 主模块
|
|
32
|
-
- `feature/` → 功能模块
|
|
33
|
-
- `common/` → 公共模块
|
|
34
|
-
|
|
35
|
-
### 2. 依赖提取
|
|
7
|
+
从 HarmonyOS 构建文件识别模块边界:
|
|
36
8
|
|
|
37
|
-
|
|
9
|
+
- `build-profile.json5` → `modules` 数组,列出所有 hap/hsp 模块及其 `srcPath`
|
|
10
|
+
- `oh-package.json5` → `dependencies` 识别三方库,`devDependencies` 识别工具链
|
|
11
|
+
- `AppScope/` → 应用级配置(`app.json5`),提取 bundleName / versionCode
|
|
12
|
+
- 典型模块类型:`entry`(主入口 HAP)/ `feature`(功能 HAP)/ `common`(HSP 公共库)
|
|
13
|
+
- 每个模块目录下有独立的 `oh-package.json5` 和 `src/main/module.json5`
|
|
38
14
|
|
|
39
|
-
|
|
40
|
-
|------|----------|
|
|
41
|
-
| UI | @ohos.arkui.UIContext |
|
|
42
|
-
| 网络 | @ohos.net.http |
|
|
43
|
-
| 数据存储 | @ohos.data.preferences, @ohos.data.relationalStore |
|
|
44
|
-
| 路由 | @ohos.router (router) |
|
|
45
|
-
| 多媒体 | @ohos.multimedia.image |
|
|
46
|
-
| 设备信息 | @ohos.device.info |
|
|
15
|
+
**不视为独立模块**:`EntryAbility.ts` / `Index.ets`(入口文件)、`utils/` / `common/` 工具目录合并为一个模块、`.preview/` / `oh_modules/` 跳过。
|
|
47
16
|
|
|
48
|
-
|
|
17
|
+
## 入口识别
|
|
49
18
|
|
|
50
|
-
- **
|
|
51
|
-
- **
|
|
52
|
-
-
|
|
53
|
-
-
|
|
54
|
-
- **Service**: `*/service/*.ets`, `*/services/*.ets`
|
|
55
|
-
- **Utils**: `*/utils/*.ets`, `*/common/*.ets`
|
|
19
|
+
- **UIAbility(页面入口)**:`module.json5` 中 `abilities` 数组,`exported: true` 且含 `ACTION_MAIN` 的 UIAbility
|
|
20
|
+
- **ServiceAbility(后台服务)**:`module.json5` 中 `extensionAbilities` 数组,`type: "service"`
|
|
21
|
+
- **页面入口**:`src/main/ets/pages/Index.ets`(默认首页)→ `@Entry @Component struct Index`
|
|
22
|
+
- **路由入口**:`router.pushUrl({ url: 'pages/XXX' })` 或 `Navigation` 组件 + `NavPathStack`
|
|
56
23
|
|
|
57
|
-
##
|
|
24
|
+
## 架构模式识别
|
|
58
25
|
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
**提取内容**:
|
|
64
|
-
- 模块列表(Entry/Feature/Common)
|
|
65
|
-
- 模块间依赖关系
|
|
66
|
-
- 每个模块的入口
|
|
67
|
-
|
|
68
|
-
**输出示例**:
|
|
69
|
-
```
|
|
70
|
-
### 模块结构
|
|
71
|
-
- **文件**: `build-profile.json5`
|
|
72
|
-
- **模块列表**:
|
|
73
|
-
| 模块名 | 类型 | 职责 |
|
|
74
|
-
|--------|------|------|
|
|
75
|
-
| entry | Entry | 主入口,包含 UIAbility 和主页面 |
|
|
76
|
-
| feature-home | Feature | 首页模块 |
|
|
77
|
-
| feature-user | Feature | 用户管理模块 |
|
|
78
|
-
| feature-settings | Feature | 设置模块 |
|
|
79
|
-
| common-utils | Common | 公共工具 |
|
|
80
|
-
| common-network | Common | 网络请求封装 |
|
|
81
|
-
- **模块依赖**:
|
|
82
|
-
entry → feature-home, feature-user, feature-settings
|
|
83
|
-
feature-user → common-network, common-utils
|
|
84
|
-
```
|
|
85
|
-
|
|
86
|
-
### 层 2: @Component 组件分析
|
|
87
|
-
|
|
88
|
-
**扫描文件**: `*/pages/*.ets`, `*/components/*.ets`
|
|
89
|
-
|
|
90
|
-
**提取内容**:
|
|
91
|
-
- 组件名 + `@Component` 装饰器
|
|
92
|
-
- `build()` 方法中的 UI 结构
|
|
93
|
-
- 状态变量(`@State`, `@Prop`, `@Link`, `@Provide`, `@Consume`)
|
|
94
|
-
- `@Watch` 回调
|
|
95
|
-
- `@Builder` 方法
|
|
96
|
-
|
|
97
|
-
**输出示例**:
|
|
98
|
-
```
|
|
99
|
-
### UserListPage
|
|
100
|
-
- **路径**: `entry/src/main/ets/pages/UserListPage.ets`
|
|
101
|
-
- **装饰器**: @Entry, @Component
|
|
102
|
-
- **状态变量**:
|
|
103
|
-
| 变量 | 装饰器 | 类型 | 初始值 | 说明 |
|
|
104
|
-
|------|--------|------|--------|------|
|
|
105
|
-
| userList | @State | UserVO[] | [] | 用户列表 |
|
|
106
|
-
| isLoading | @State | boolean | false | 加载状态 |
|
|
107
|
-
| searchQuery | @State | string | '' | 搜索关键词 |
|
|
108
|
-
| userService | - | UserService | new UserService() | 服务实例 |
|
|
109
|
-
- **@Watch**:
|
|
110
|
-
| 变量 | 回调 | 说明 |
|
|
111
|
-
|------|------|------|
|
|
112
|
-
| searchQuery | onSearchQueryChange | 防抖搜索 |
|
|
113
|
-
- **@Builder**:
|
|
114
|
-
| 名称 | 说明 |
|
|
115
|
-
|------|------|
|
|
116
|
-
| UserItemBuilder | 用户列表项 |
|
|
117
|
-
| EmptyViewBuilder | 空状态视图 |
|
|
118
|
-
- **UI 结构**:
|
|
119
|
-
Column() {
|
|
120
|
-
SearchBar({ placeholder: '搜索用户' })
|
|
121
|
-
.onChange((value) => this.searchQuery = value)
|
|
122
|
-
if (this.isLoading) { Progress() }
|
|
123
|
-
else if (this.userList.length === 0) { this.EmptyViewBuilder() }
|
|
124
|
-
else { List() { ForEach(this.userList, (item) => { this.UserItemBuilder(item) }) } }
|
|
125
|
-
}
|
|
126
|
-
```
|
|
127
|
-
|
|
128
|
-
### 层 3: ViewModel / 状态管理分析
|
|
129
|
-
|
|
130
|
-
**扫描文件**: `*/viewmodel/*.ets`
|
|
131
|
-
|
|
132
|
-
**输出示例**:
|
|
133
|
-
```
|
|
134
|
-
### UserViewModel
|
|
135
|
-
- **路径**: `feature-user/src/main/ets/viewmodel/UserViewModel.ts`
|
|
136
|
-
- **状态变量**:
|
|
137
|
-
| 变量 | 装饰器 | 类型 | 说明 |
|
|
138
|
-
|------|--------|------|------|
|
|
139
|
-
| users | @Provide | UserVO[] | 用户列表 |
|
|
140
|
-
| isLoading | @Provide | boolean | 加载状态 |
|
|
141
|
-
| currentPage | @State | number | 当前页码 |
|
|
142
|
-
- **方法**:
|
|
143
|
-
| 方法 | 签名 | 说明 |
|
|
144
|
-
|------|------|------|
|
|
145
|
-
| loadUsers | async () => Promise<void> | 加载用户列表 |
|
|
146
|
-
| searchUsers | (query: string) => void | 搜索用户 |
|
|
147
|
-
| deleteUser | (id: number) => Promise<void> | 删除用户 |
|
|
148
|
-
- **AppStorage**: 'userToken' (全局共享)
|
|
149
|
-
```
|
|
26
|
+
ArkUI 组件层次结构识别:
|
|
27
|
+
- `@Entry @Component` → 页面根组件(每个页面文件有且仅有一个)
|
|
28
|
+
- `@Component` → 普通自定义组件(可复用)
|
|
29
|
+
- `@Builder` 方法 → 轻量级 UI 构建函数(不含状态)
|
|
150
30
|
|
|
151
|
-
|
|
31
|
+
状态管理模式检测:
|
|
152
32
|
|
|
153
|
-
|
|
33
|
+
| 模式 | 识别特征 | 适用范围 |
|
|
34
|
+
|------|---------|---------|
|
|
35
|
+
| 组件内状态 | `@State` | 组件自身 |
|
|
36
|
+
| 父子通信 | `@Prop`(单向)/ `@Link`(双向) | 父子组件 |
|
|
37
|
+
| 跨组件共享 | `@Provide` + `@Consume` | 祖先到后代 |
|
|
38
|
+
| 全局状态 | `AppStorage.setOrCreate()` / `@StorageProp` | 整个应用 |
|
|
39
|
+
| 持久化状态 | `PersistentStorage.persistProp()` | 跨会话持久化 |
|
|
154
40
|
|
|
155
|
-
|
|
156
|
-
```
|
|
157
|
-
### 字符串资源
|
|
158
|
-
| Key | 中文 | 英文 |
|
|
159
|
-
|-----|------|------|
|
|
160
|
-
| app_name | 用户管理 | User Management |
|
|
161
|
-
| login_button | 登录 | Login |
|
|
162
|
-
| search_placeholder | 搜索 | Search |
|
|
41
|
+
## 数据流模式
|
|
163
42
|
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
| text_primary | #182431 | 主文本色 |
|
|
169
|
-
| background_color | #F1F3F5 | 背景色 |
|
|
43
|
+
- **组件状态流**:`@State` 变量修改 → ArkUI 框架自动触发 `build()` 重绘
|
|
44
|
+
- **跨组件流**:`@Provide('key') data` → `@Consume('key') data`(无需逐层传递)
|
|
45
|
+
- **AppStorage 全局流**:`AppStorage.set('key', value)` → `@StorageProp('key')` 自动同步
|
|
46
|
+
- **网络数据流**:`@ohos.net.http` HttpRequest → Promise.then() → `@State` 更新 → UI 重绘
|
|
170
47
|
|
|
171
|
-
|
|
172
|
-
| Key | 值 | 用途 |
|
|
173
|
-
|-----|------|------|
|
|
174
|
-
| spacing_xs | 4vp | 极小间距 |
|
|
175
|
-
| spacing_sm | 8vp | 小间距 |
|
|
176
|
-
| spacing_md | 16vp | 中间距 |
|
|
177
|
-
| spacing_lg | 24vp | 大间距 |
|
|
178
|
-
```
|
|
48
|
+
## 分析关注点
|
|
179
49
|
|
|
180
|
-
|
|
50
|
+
- **Ability 发现(UIAbility/ServiceAbility)**:`module.json5` 是权威来源,需枚举所有 `abilities` 和 `extensionAbilities`,识别入口和后台服务
|
|
51
|
+
- **ArkUI 组件树**:`@Entry` 组件的 `build()` 方法是页面 UI 结构的起点,需提取 1-2 层子组件
|
|
52
|
+
- **hap/hsp 模块结构**:HAP(可独立安装)vs HSP(共享包),区分模块类型影响分包策略分析
|
|
53
|
+
- **`oh-package.json5` 依赖**:三方库均通过此文件管理,需完整提取,识别 `@ohos.*` 系统能力调用
|
|
54
|
+
- **Navigation 组件**:API 9+ 推荐使用 `Navigation` + `NavPathStack` 替代旧版 `router`,需识别路由方案
|
|
55
|
+
- **资源文件**:`resources/base/element/*.json` 包含字符串/颜色/尺寸,影响国际化分析
|
|
181
56
|
|
|
182
|
-
|
|
57
|
+
## 输出示例
|
|
183
58
|
|
|
184
|
-
**输出示例**:
|
|
185
59
|
```
|
|
186
|
-
###
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
-
|
|
191
|
-
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
60
|
+
### 模块结构(build-profile.json5)
|
|
61
|
+
| 模块名 | 类型 | 入口 Ability | 职责 |
|
|
62
|
+
|--------|------|-------------|------|
|
|
63
|
+
| entry | HAP (Entry) | EntryAbility | 主入口,首页 + 导航 |
|
|
64
|
+
| feature-user | HAP (Feature) | - | 用户管理功能 |
|
|
65
|
+
| feature-settings | HAP (Feature) | - | 设置功能 |
|
|
66
|
+
| common-network | HSP | - | 网络请求公共库 |
|
|
67
|
+
| common-utils | HSP | - | 工具函数公共库 |
|
|
68
|
+
|
|
69
|
+
模块依赖: entry → feature-user, feature-settings
|
|
70
|
+
feature-* → common-network, common-utils
|
|
71
|
+
|
|
72
|
+
### 技术栈检测
|
|
73
|
+
- ArkUI 版本: API 11 (HarmonyOS 4.1)
|
|
74
|
+
- 路由方案: Navigation + NavPathStack(新版)
|
|
75
|
+
- 状态管理: @State / @Provide-@Consume / AppStorage
|
|
76
|
+
- 网络: @ohos.net.http + 自封装 HttpUtil
|
|
77
|
+
- 持久化: @ohos.data.preferences + relationalStore (RDB)
|
|
78
|
+
|
|
79
|
+
### Ability 清单
|
|
80
|
+
| Ability | 类型 | exported | 说明 |
|
|
81
|
+
|---------|------|---------|------|
|
|
82
|
+
| EntryAbility | UIAbility | true | 应用主入口 |
|
|
83
|
+
| BackgroundTaskAbility | ServiceExtensionAbility | false | 后台任务 |
|
|
196
84
|
```
|
|
197
|
-
|
|
198
|
-
## 输出模板
|
|
199
|
-
|
|
200
|
-
### README.md 章节结构
|
|
201
|
-
|
|
202
|
-
```markdown
|
|
203
|
-
# {应用名}
|
|
204
|
-
|
|
205
|
-
## 项目概述
|
|
206
|
-
应用功能描述
|
|
207
|
-
|
|
208
|
-
## 技术栈
|
|
209
|
-
| 技术 | 版本 | 用途 |
|
|
210
|
-
|------|------|------|
|
|
211
|
-
|
|
212
|
-
## 架构设计
|
|
213
|
-
### 架构图(ASCII)
|
|
214
|
-
### 模块依赖图
|
|
215
|
-
|
|
216
|
-
## 模块说明
|
|
217
|
-
Entry/Feature/Common 各模块职责
|
|
218
|
-
|
|
219
|
-
## 页面结构
|
|
220
|
-
页面列表 + 路由关系
|
|
221
|
-
|
|
222
|
-
## 组件文档
|
|
223
|
-
@Component 列表
|
|
224
|
-
|
|
225
|
-
## 资源文件
|
|
226
|
-
字符串/颜色/尺寸资源
|
|
227
|
-
|
|
228
|
-
## 构建 & 部署
|
|
229
|
-
DevEco Studio + hvigor 命令
|
|
230
|
-
```
|
|
231
|
-
|
|
232
|
-
## 模块边界识别
|
|
233
|
-
|
|
234
|
-
以下目录模式下的每个子目录视为独立模块(L2+ 分析时生成 MODULE-DOC.md):
|
|
235
|
-
|
|
236
|
-
| 层 | 扫描路径 | 模块判定规则 | MODULE-DOC slug 来源 |
|
|
237
|
-
|----|----------|-------------|---------------------|
|
|
238
|
-
| 页面层 | `entry/src/main/ets/pages/` | 每个子目录或文件 | 名称 kebab-case |
|
|
239
|
-
| 服务层 | `entry/src/main/ets/services/` | 每个子目录 | 目录名 kebab-case |
|
|
240
|
-
| 状态管理层 | `AppStorage`, `LocalStorage` | 按业务域分组 | 业务域 kebab-case |
|
|
241
|
-
| 组件层 | `entry/src/main/ets/components/` | 3+ 文件的子目录 | 目录名 kebab-case |
|
|
242
|
-
| Feature 模块 | 每个 feature 目录 | 独立模块 | 目录名 kebab-case |
|
|
243
|
-
|
|
244
|
-
**不视为独立模块的情况**:
|
|
245
|
-
- 单文件入口(如 `EntryAbility.ts`, `Index.ets`)
|
|
246
|
-
- 纯导出桶文件(仅有 re-export)
|
|
247
|
-
- 工具函数目录(`utils/`, `common/`)— 合并为一个模块
|
|
248
|
-
- `.preview/`, `oh_modules/` 跳过
|
|
249
|
-
|
|
250
|
-
## Token 管理
|
|
251
|
-
|
|
252
|
-
- 大模块(>15 文件)拆分为子任务
|
|
253
|
-
- 每个子任务分析 ≤10 文件
|
|
254
|
-
- 资源文件(JSON)单独分析
|
|
255
|
-
- `build-profile.json5` 和 `oh-package.json5` 单独分析
|
|
256
|
-
- `.preview/` 目录跳过
|
|
257
|
-
- `oh_modules/` 目录跳过
|