@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,296 +1,72 @@
1
1
  # Rust 项目分析规则
2
2
 
3
- ## 分析粒度
3
+ > **编码规范**:本规则不包含编码规范内容。Phase 2.5 精炼阶段会自动加载 `rust-conventions` skill 作为规范约束。
4
4
 
5
- Cargo crate 模块和 `src/` 下的模块层次进行分析。
5
+ ## 模块发现策略
6
6
 
7
- ```
8
- main.rs / lib.rs(入口)
9
-
10
- mod 声明(模块组织)
11
-
12
- pub API(公开接口)
13
-
14
- 内部模块(实现细节)
15
-
16
- error 模块(错误处理)
17
-
18
- config 模块(配置)
19
-
20
- tests(测试)
21
- ```
7
+ - **Workspace**:检查 `Cargo.toml` 的 `[workspace] members`,每个成员 crate 为独立分析单元
8
+ - **单 Crate**:`src/main.rs`(binary)或 `src/lib.rs`(library),按 `mod` 声明树展开
9
+ - **子模块发现**:`src/*/mod.rs` 或 `src/*.rs` 中的 `pub mod` 声明;每个有 3+ 文件的子目录视为独立模块
10
+ - **跳过**:`target/`、`*.generated.rs`、`tests/`(单独分析)
22
11
 
23
- ## 目录扫描策略
12
+ 依赖类型检测(从 `Cargo.toml` 判断):
13
+ - Web API:`actix-web` / `axum` / `warp` / `rocket`
14
+ - CLI:`clap` / `structopt`
15
+ - 异步:`tokio` / `async-std`(检测 `#[tokio::main]`)
24
16
 
25
- ### 1. 识别项目结构
17
+ ## 入口识别
26
18
 
27
- **信号文件检测:**
28
- - `Cargo.toml` → Rust 项目
29
- - `Cargo.lock` 锁定的依赖版本
30
- - Workspace: `[workspace] members` in `Cargo.toml`
31
- - Binary: `src/main.rs`
32
- - Library: `src/lib.rs`
33
- - Both: `src/main.rs` + `src/lib.rs`
19
+ | 标记 | 含义 |
20
+ |------|------|
21
+ | `fn main()` / `#[tokio::main] async fn main()` | 应用主入口 |
22
+ | `src/bin/*.rs` | 多二进制入口 |
23
+ | `pub fn` in `src/lib.rs` | 库公开 API 入口 |
24
+ | `.route("path", get/post(...))` (axum) | HTTP 路由入口 |
25
+ | `App::new().service(...)` (actix-web) | HTTP 路由注册 |
26
+ | `#[derive(Parser)] struct Cli` (clap) | CLI 子命令入口 |
34
27
 
35
- ### 2. 依赖提取
28
+ ## 架构模式识别
36
29
 
37
- `Cargo.toml` 提取:
38
-
39
- | 类别 | 常见依赖 |
30
+ | 模式 | 检测特征 |
40
31
  |------|----------|
41
- | 异步运行时 | tokio, async-std |
42
- | Web 框架 | actix-web, axum, warp, rocket |
43
- | 数据库 | sqlx, diesel, sea-orm |
44
- | 序列化 | serde, serde_json |
45
- | 错误处理 | anyhow, thiserror, eyre |
46
- | CLI | clap, structopt |
47
- | 日志 | tracing, log, env_logger |
48
- | HTTP 客户端 | reqwest, hyper |
49
- | 测试 | proptest, criterion |
50
- | 加密 | rustls, native-tls |
51
-
52
- ### 3. 按层扫描路径
32
+ | 分层(Handler/Service/Repo) | `handlers/` + `services/` + `repository/` 目录并存 |
33
+ | Trait 驱动 | 关键接口定义为 `pub trait`,多个 `impl Trait for Struct` |
34
+ | 单模块 | 所有代码在 `main.rs` 或少数顶层 `.rs` 文件,无子目录 |
35
+ | Clean Architecture | `domain/` + `application/` + `infrastructure/` 分离 |
36
+ | 状态机 | 存在 `enum State` + `match state` 的状态转移模式 |
53
37
 
54
- - **入口**: `src/main.rs`, `src/lib.rs`
55
- - **模块**: `src/` 下的 `mod.rs` 或同名 `.rs` 文件
56
- - **配置**: `src/config/`, `config/`
57
- - **错误**: `src/error/`, `src/errors/`
58
- - **模型**: `src/model/`, `src/models/`
59
- - **服务**: `src/service/`, `src/handler/`, `src/routes/`
60
- - **工具**: `src/utils/`, `src/common/`
38
+ ## 数据流模式
61
39
 
62
- ## 各层提取规则
40
+ - **HTTP 请求链**:Middleware/Layer → Handler → Service → Repository → DB(async)
41
+ - **CLI 执行链**:Cli::parse() → match subcommand → handler fn → output
42
+ - **异步任务链**:`tokio::spawn` → async fn → Channel → Receiver → 处理
43
+ - **错误传播链**:`?` 运算符逐层上抛,最终 `AppError → HTTP 状态码` 映射
63
44
 
64
- ### 层 1: 入口分析
45
+ ## 分析关注点
65
46
 
66
- **扫描文件**: `src/main.rs`, `src/lib.rs`
47
+ - **所有权图**:识别 `Arc<T>` / `Mutex<T>` / `RwLock<T>` 的共享状态,标注跨线程传递的数据
48
+ - **Trait 边界**:`pub trait` 定义 + 所有 `impl` 实现者,揭示抽象边界和可替换点
49
+ - **错误类型层次**:`thiserror::Error` 枚举的变体 + `From` 转换链 + HTTP 状态码映射
50
+ - **异步边界**:`Send + Sync` 约束是否满足;`async fn` 是否在 `spawn` 中使用
51
+ - **生命周期注解**:`'a` 参数暗示的引用持有关系,识别潜在的借用冲突区域
67
52
 
68
- **提取内容**:
69
- - `pub mod` 声明(模块组织)
70
- - `extern crate` 声明
71
- - `#[macro_use]` 导入
72
- - `main()` 函数逻辑(应用初始化流程)
53
+ ## 输出示例
73
54
 
74
- **输出示例**:
55
+ 模块树片段:
75
56
  ```
76
- ### 入口文件: src/main.rs
77
- - **模块声明**:
78
- | mod | 路径 | 说明 |
79
- |-----|------|------|
80
- | config | src/config.rs | 配置管理 |
81
- | error | src/error.rs | 错误类型 |
82
- | handlers | src/handlers/ | HTTP 处理器 |
83
- | models | src/models/ | 数据模型 |
84
- | db | src/db.rs | 数据库连接 |
85
- - **宏导入**: `#[macro_use] extern crate serde`
86
- - **main() 流程**:
87
- 加载配置 → 初始化日志 → 连接数据库 → 启动 HTTP 服务 (0.0.0.0:8080)
88
- ```
89
-
90
- ### 层 2: 公开 API 分析
91
-
92
- **扫描文件**: `src/lib.rs`, 各模块的 `pub` 声明
93
-
94
- **提取内容**:
95
- - `pub fn` — 公开函数签名
96
- - `pub struct` — 公开结构体(字段 + derive 宏)
97
- - `pub enum` — 公开枚举(变体 + 关联数据)
98
- - `pub trait` — Trait 定义(方法签名 + 实现者)
99
- - `impl` 块 — 方法实现
100
-
101
- **输出示例**:
102
- ```
103
- ### User struct
104
- - **路径**: `src/models/user.rs`
105
- - **定义**:
106
- ```rust
107
- #[derive(Debug, Clone, Serialize, Deserialize, FromRow)]
108
- pub struct User {
109
- pub id: i64,
110
- pub username: String,
111
- pub email: String,
112
- pub created_at: chrono::NaiveDateTime,
113
- }
114
- ```
115
- - **impl 块方法**:
116
- | 方法 | 签名 | 说明 |
117
- |------|------|------|
118
- | new | (username: &str, email: &str) → Self | 创建用户实例 |
119
- | from_row | (row: PgRow) → Result<Self> | 从数据库行转换 |
120
-
121
- ### UserRepository trait
122
- - **路径**: `src/repository/user_repository.rs`
123
- - **方法**:
124
- | 方法 | 签名 | 说明 |
125
- |------|------|------|
126
- | find_by_id | (&self, id: i64) → Result<Option<User>> | 按 ID 查询 |
127
- | find_by_email | (&self, email: &str) → Result<Option<User>> | 按邮箱查询 |
128
- | create | (&self, user: NewUser) → Result<User> | 创建用户 |
129
- | update | (&self, id: i64, user: UpdateUser) → Result<User> | 更新用户 |
130
- | delete | (&self, id: i64) → Result<()> | 删除用户 |
131
- - **实现者**: PgUserRepository
132
- ```
133
-
134
- ### 层 3: 错误处理分析
135
-
136
- **扫描文件**: `src/error.rs`, `src/errors/`
137
-
138
- **提取内容**:
139
- - 自定义 Error 枚举(变体 + 描述)
140
- - `thiserror` / `anyhow` 使用方式
141
- - 错误转换链(`From` / `impl Into`)
142
-
143
- **输出示例**:
144
- ```
145
- ### AppError
146
- - **路径**: `src/error.rs`
147
- - **定义**:
148
- ```rust
149
- #[derive(Debug, thiserror::Error)]
150
- pub enum AppError {
151
- #[error("Database error: {0}")]
152
- Database(#[from] sqlx::Error),
153
- #[error("Not found: {0}")]
154
- NotFound(String),
155
- #[error("Unauthorized")]
156
- Unauthorized,
157
- #[error("Validation error: {0}")]
158
- Validation(String),
159
- }
160
- ```
161
- - **HTTP 映射**: impl IntoResponse for AppError → 400/401/404/500
162
- ```
163
-
164
- ### 层 4: 异步模式分析
165
-
166
- **扫描文件**: 含 `async fn`, `tokio::spawn`, `channel` 的文件
167
-
168
- **提取内容**:
169
- - 异步运行时(tokio / async-std)
170
- - 并发模式(spawn, join!, select!, channel)
171
- - 生命周期管理
172
-
173
- **输出示例**:
174
- ```
175
- ### 并发模式
176
- - **运行时**: tokio (multi-threaded)
177
- - **spawn 任务**:
178
- | 任务 | 位置 | 说明 |
179
- |------|------|------|
180
- | background_sync | main.rs | 定期同步数据 |
181
- | notification_sender | handlers/mod.rs | 异步发送通知 |
182
- - **Channel**:
183
- | Channel | 类型 | 生产者 | 消费者 |
184
- |---------|------|--------|--------|
185
- | event_tx | mpsc::Sender<Event> | handlers | event_processor |
186
- ```
187
-
188
- ### 层 5: 模块组织分析
189
-
190
- **扫描文件**: `src/lib.rs`, `src/*/mod.rs`
191
-
192
- **输出示例**:
193
- ```
194
- ### 模块树
195
57
  src/
196
- ├── main.rs # 二进制入口
197
- ├── lib.rs # 库入口 (pub mod config, error, handlers, models, db)
198
- ├── config.rs # 配置管理 (env, clap)
199
- ├── error.rs # 错误类型 (thiserror)
200
- ├── db.rs # 数据库连接池 (sqlx::PgPool)
201
- ├── handlers/
202
- │ ├── mod.rs # Handler 注册
203
- │ ├── user.rs # 用户 API
204
- │ └── auth.rs # 认证 API
205
- ├── models/
206
- │ ├── mod.rs
207
- │ ├── user.rs # User struct
208
- │ └── auth.rs # LoginRequest, Token
209
- ├── repository/
210
- │ ├── mod.rs
211
- │ └── user_repository.rs
212
- └── services/
213
- ├── mod.rs
214
- └── auth_service.rs
58
+ ├── main.rs tokio::main,初始化: config → db pool → router → serve
59
+ ├── error.rs AppError(thiserror): Database/NotFound/Unauthorized/Validation HTTP 映射
60
+ ├── handlers/ — user.rs, auth.rs(axum Router 注册)
61
+ ├── models/ — User, NewUser, UpdateUser(Serialize/Deserialize/FromRow)
62
+ └── repository/ — UserRepository trait + PgUserRepository impl
215
63
  ```
216
64
 
217
- ### 层 6: 测试分析
218
-
219
- **扫描文件**: `tests/`, `#[cfg(test)]` 模块
220
-
221
- **提取内容**:
222
- - 单元测试函数列表
223
- - 集成测试列表
224
- - 测试工具(mock, fixture)
225
-
226
- **输出示例**:
65
+ 错误处理片段:
227
66
  ```
228
- ### 测试覆盖
229
- | 文件 | 测试名 | 类型 | 说明 |
230
- |------|--------|------|------|
231
- | src/models/user.rs | test_user_creation | 单元测试 | 用户创建验证 |
232
- | src/handlers/auth.rs | test_login_success | 单元测试 | 登录成功路径 |
233
- | tests/api_tests.rs | test_create_user | 集成测试 | 完整创建流程 |
234
- | tests/api_tests.rs | test_get_user_not_found | 集成测试 | 404 处理 |
235
- ```
236
-
237
- ## 输出模板
238
-
239
- ### README.md 章节结构
240
-
241
- ```markdown
242
- # {项目名}
243
-
244
- ## 项目概述
245
- 项目功能描述
246
-
247
- ## 技术栈
248
- | Crate | 版本 | 用途 |
249
- |-------|------|------|
250
-
251
- ## 架构设计
252
- ### 架构图(ASCII)
253
- ### 数据流图
254
-
255
- ## 模块结构
256
- 模块树 + 各模块职责
257
-
258
- ## 公开 API
259
- pub fn / pub struct / pub trait 列表
260
-
261
- ## 错误处理
262
- 错误类型层次 + HTTP 映射
263
-
264
- ## 配置
265
- 环境变量 + 配置文件
266
-
267
- ## 构建 & 运行
268
- cargo 命令
67
+ AppError variants:
68
+ Database(#[from] sqlx::Error) → 500
69
+ NotFound(String) → 404
70
+ Unauthorized → 401
71
+ Validation(String) → 400
269
72
  ```
270
-
271
- ## 模块边界识别
272
-
273
- 以下目录模式下的每个子目录视为独立模块(L2+ 分析时生成 MODULE-DOC.md):
274
-
275
- | 层 | 扫描路径 | 模块判定规则 | MODULE-DOC slug 来源 |
276
- |----|----------|-------------|---------------------|
277
- | 二进制入口层 | `src/bin/` | 每个文件 | 文件名去后缀 kebab-case |
278
- | API/服务层 | `src/` 公开函数按模块 | 每个子目录 | 目录名 kebab-case |
279
- | 组件层 | `src/` 子目录 | 3+ 文件的子目录 | 目录名 kebab-case |
280
- | Workspace 成员 | `Cargo.toml` workspace members | 每个成员 crate | crate 名 kebab-case |
281
-
282
- **不视为独立模块的情况**:
283
- - 单文件入口(如 `main.rs`, `lib.rs`)
284
- - 纯导出桶文件(`mod.rs` 仅有 re-export)
285
- - 工具模块(`util/`, `helper/`)— 合并为一个模块
286
- - 生成文件(`*.generated.rs`)跳过
287
- - `target/` 跳过
288
-
289
- ## Token 管理
290
-
291
- - 大模块(>15 文件)拆分为子任务
292
- - 每个子任务分析 ≤10 文件
293
- - `Cargo.toml` 依赖分析单独一个子任务
294
- - `target/` 目录跳过
295
- - 测试文件(`tests/`, `#[cfg(test)]` 模块)单独分析
296
- - 生成文件(`*.generated.rs`)跳过