@dtt_siye/atool 1.3.0 → 1.4.0

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 (47) hide show
  1. package/VERSION +1 -1
  2. package/hooks/doc-sync-reminder +4 -4
  3. package/hooks/hooks-cursor.json +20 -0
  4. package/hooks/hooks.json +21 -1
  5. package/hooks/pre-commit +191 -0
  6. package/hooks/prompt-guard +84 -35
  7. package/hooks/session-start +34 -12
  8. package/hooks/task-state-tracker +145 -0
  9. package/lib/common.sh +36 -23
  10. package/lib/compute-importance.sh +73 -0
  11. package/lib/install-cursor.sh +2 -2
  12. package/lib/install-hooks.sh +64 -0
  13. package/lib/install-skills.sh +19 -0
  14. package/lib/knowledge-graph.sh +483 -81
  15. package/lib/pre-scan.sh +81 -6
  16. package/package.json +1 -1
  17. package/skills/agent-audit/SKILL.md +180 -0
  18. package/skills/architecture-guard/SKILL.md +164 -0
  19. package/skills/architecture-guard/rules/violation-detection.md +90 -0
  20. package/skills/ci-feedback/SKILL.md +165 -0
  21. package/skills/project-analyze/SKILL.md +131 -23
  22. package/skills/project-analyze/phases/phase1-setup.md +15 -1
  23. package/skills/project-analyze/phases/phase2-understand.md +17 -2
  24. package/skills/project-analyze/phases/phase2.5-refine.md +293 -0
  25. package/skills/project-analyze/phases/phase3-graph.md +7 -1
  26. package/skills/project-analyze/phases/phase4-synthesize.md +117 -120
  27. package/skills/project-analyze/phases/phase5-export.md +117 -33
  28. package/skills/project-analyze/prompts/understand-agent.md +17 -0
  29. package/skills/project-analyze/rules/android.md +61 -260
  30. package/skills/project-analyze/rules/devops.md +61 -421
  31. package/skills/project-analyze/rules/generic.md +53 -221
  32. package/skills/project-analyze/rules/go.md +60 -275
  33. package/skills/project-analyze/rules/harmony.md +64 -237
  34. package/skills/project-analyze/rules/java.md +47 -485
  35. package/skills/project-analyze/rules/mobile-flutter.md +57 -292
  36. package/skills/project-analyze/rules/mobile-react-native.md +65 -262
  37. package/skills/project-analyze/rules/mobile-swift.md +58 -303
  38. package/skills/project-analyze/rules/python.md +50 -296
  39. package/skills/project-analyze/rules/rust-tauri.md +51 -217
  40. package/skills/project-analyze/rules/rust.md +50 -274
  41. package/skills/project-analyze/rules/web-nextjs.md +61 -335
  42. package/skills/project-analyze/rules/web-react.md +50 -272
  43. package/skills/project-analyze/rules/web-vue.md +58 -352
  44. package/skills/project-analyze/rules/web.md +55 -347
  45. package/skills/project-query/SKILL.md +681 -120
  46. package/skills/requirements-writer/SKILL.md +48 -1
  47. 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
- Entry/Feature/Common 模块和 ArkUI 组件层次进行分析。
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
- `oh-package.json5` 提取:
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
- ### 3. 按层扫描路径
17
+ ## 入口识别
49
18
 
50
- - **Pages**: `*/pages/*.ets`
51
- - **Components**: `*/components/*.ets`
52
- - **ViewModel**: `*/viewmodel/*.ets`, `*/viewmodels/*.ets`
53
- - **Model**: `*/model/*.ets`, `*/models/*.ets`
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
- ### 层 1: 模块结构分析
60
-
61
- **扫描文件**: `build-profile.json5`, `oh-package.json5`
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
- ### 层 4: 资源文件分析
31
+ 状态管理模式检测:
152
32
 
153
- **扫描文件**: `resources/base/element/*.json`
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
- | Key | | 用途 |
166
- |-----|------|------|
167
- | primary_color | #007DFF | 主色调 |
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
- ### 5: 网络请求分析
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
- **扫描文件**: `*/service/*Http*.ets`, `*/network/*.ets`
57
+ ## 输出示例
183
58
 
184
- **输出示例**:
185
59
  ```
186
- ### 网络配置
187
- - **文件**: `common-network/src/main/ets/utils/HttpUtil.ets`
188
- - **baseURL**: `https://api.example.com`
189
- - **超时**: 15000ms
190
- - **Header**: `Content-Type: application/json`, `Authorization: Bearer {token}`
191
- - **拦截器**:
192
- | 拦截器 | 说明 |
193
- |--------|------|
194
- | AuthInterceptor | 注入 token |
195
- | ErrorHandler | 统一错误处理 |
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/` 目录跳过