@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.
- package/VERSION +1 -1
- package/hooks/doc-sync-reminder +4 -4
- package/hooks/hooks-cursor.json +20 -0
- package/hooks/hooks.json +21 -1
- package/hooks/pre-commit +191 -0
- package/hooks/prompt-guard +84 -35
- package/hooks/session-start +34 -12
- package/hooks/task-state-tracker +145 -0
- package/lib/common.sh +36 -23
- package/lib/compute-importance.sh +73 -0
- package/lib/install-cursor.sh +2 -2
- package/lib/install-hooks.sh +64 -0
- package/lib/install-skills.sh +19 -0
- package/lib/knowledge-graph.sh +483 -81
- package/lib/pre-scan.sh +81 -6
- package/package.json +1 -1
- package/skills/agent-audit/SKILL.md +180 -0
- package/skills/architecture-guard/SKILL.md +164 -0
- package/skills/architecture-guard/rules/violation-detection.md +90 -0
- package/skills/ci-feedback/SKILL.md +165 -0
- package/skills/project-analyze/SKILL.md +131 -23
- package/skills/project-analyze/phases/phase1-setup.md +15 -1
- package/skills/project-analyze/phases/phase2-understand.md +17 -2
- package/skills/project-analyze/phases/phase2.5-refine.md +293 -0
- package/skills/project-analyze/phases/phase3-graph.md +7 -1
- package/skills/project-analyze/phases/phase4-synthesize.md +117 -120
- package/skills/project-analyze/phases/phase5-export.md +117 -33
- 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/project-query/SKILL.md +681 -120
- package/skills/requirements-writer/SKILL.md +48 -1
- 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
|
-
|
|
5
|
+
## 模块发现策略
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
main.rs /
|
|
9
|
-
|
|
10
|
-
|
|
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
|
-
|
|
17
|
+
## 入口识别
|
|
26
18
|
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
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
|
-
|
|
28
|
+
## 架构模式识别
|
|
36
29
|
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
| 类别 | 常见依赖 |
|
|
30
|
+
| 模式 | 检测特征 |
|
|
40
31
|
|------|----------|
|
|
41
|
-
|
|
|
42
|
-
|
|
|
43
|
-
|
|
|
44
|
-
|
|
|
45
|
-
|
|
|
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
|
-
|
|
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
|
-
|
|
45
|
+
## 分析关注点
|
|
65
46
|
|
|
66
|
-
|
|
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
|
-
├──
|
|
198
|
-
├──
|
|
199
|
-
├──
|
|
200
|
-
|
|
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
|
-
|
|
218
|
-
|
|
219
|
-
**扫描文件**: `tests/`, `#[cfg(test)]` 模块
|
|
220
|
-
|
|
221
|
-
**提取内容**:
|
|
222
|
-
- 单元测试函数列表
|
|
223
|
-
- 集成测试列表
|
|
224
|
-
- 测试工具(mock, fixture)
|
|
225
|
-
|
|
226
|
-
**输出示例**:
|
|
65
|
+
错误处理片段:
|
|
227
66
|
```
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
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`)跳过
|