@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,317 +1,71 @@
|
|
|
1
1
|
# Python 项目分析规则
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
> **编码规范**:本规则不包含编码规范内容。Phase 2.5 精炼阶段会自动加载 `python-conventions` skill 作为规范约束。
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
## 模块发现策略
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
Views / Handlers(视图/处理器)
|
|
13
|
-
↓
|
|
14
|
-
Services / Use Cases(业务逻辑)
|
|
15
|
-
↓
|
|
16
|
-
Models / Schemas(数据模型)
|
|
17
|
-
↓
|
|
18
|
-
Repositories / DAL(数据访问)
|
|
19
|
-
↓
|
|
20
|
-
Config / Settings(配置)
|
|
21
|
-
↓
|
|
22
|
-
Middleware / Guards(中间件)
|
|
23
|
-
```
|
|
24
|
-
|
|
25
|
-
## 目录扫描策略
|
|
26
|
-
|
|
27
|
-
### 1. 识别框架类型
|
|
7
|
+
- **包结构**:每个含 `__init__.py` 的目录为一个包(Python 模块)
|
|
8
|
+
- **Django Apps**:`INSTALLED_APPS` 中的每个 app 为独立分析单元
|
|
9
|
+
- **FastAPI Routers**:`app/routers/` 下每个文件或子目录为路由模块
|
|
10
|
+
- **依赖检测**:从 `pyproject.toml` / `requirements.txt` / `Pipfile` 提取框架类型
|
|
11
|
+
- **跳过**:`__pycache__/`、`.venv/`、`migrations/`、`alembic/versions/`
|
|
28
12
|
|
|
29
|
-
|
|
30
|
-
- Django
|
|
31
|
-
- FastAPI
|
|
32
|
-
- Flask
|
|
33
|
-
- 纯 Python: 无框架特征,按包结构分析
|
|
13
|
+
框架信号文件:
|
|
14
|
+
- Django:`manage.py` + `settings.py` + `*/urls.py`
|
|
15
|
+
- FastAPI:`main.py` 中含 `from fastapi import FastAPI`
|
|
16
|
+
- Flask:`app.py` 中含 `from flask import Flask`
|
|
34
17
|
|
|
35
|
-
|
|
18
|
+
## 入口识别
|
|
36
19
|
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
20
|
+
| 标记 | 含义 |
|
|
21
|
+
|------|------|
|
|
22
|
+
| `manage.py` / `main.py` / `app.py` | 应用主入口 |
|
|
23
|
+
| `*/urls.py` (Django) | URL 路由入口 |
|
|
24
|
+
| `@router.get/post/...` (FastAPI) | HTTP API 入口 |
|
|
25
|
+
| `@app.route` (Flask) | HTTP 路由入口 |
|
|
26
|
+
| `@celery.task` / `@shared_task` | 异步任务入口 |
|
|
27
|
+
| `management/commands/*.py` (Django) | CLI 命令入口 |
|
|
40
28
|
|
|
41
|
-
|
|
29
|
+
## 架构模式识别
|
|
42
30
|
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
| 类别 | 常见依赖 |
|
|
31
|
+
| 模式 | 检测特征 |
|
|
46
32
|
|------|----------|
|
|
47
|
-
|
|
|
48
|
-
|
|
|
49
|
-
|
|
|
50
|
-
|
|
|
51
|
-
|
|
|
52
|
-
| 认证 | python-jose, passlib, pyjwt |
|
|
53
|
-
| 任务队列 | celery, arq, huey |
|
|
54
|
-
| 测试 | pytest, httpx, factory-boy |
|
|
55
|
-
| 代码质量 | mypy, ruff, black, isort |
|
|
56
|
-
|
|
57
|
-
### 4. 按框架分层扫描
|
|
58
|
-
|
|
59
|
-
#### Django
|
|
60
|
-
|
|
61
|
-
- **URL 配置**: `*/urls.py`
|
|
62
|
-
- **Views**: `*/views.py`, `*/views/`
|
|
63
|
-
- **Models**: `*/models.py`, `*/models/`
|
|
64
|
-
- **Serializers**: `*/serializers.py`
|
|
65
|
-
- **Admin**: `*/admin.py`
|
|
66
|
-
- **Forms**: `*/forms.py`
|
|
67
|
-
- **Middleware**: `*/middleware.py`
|
|
68
|
-
- **Management Commands**: `*/management/commands/`
|
|
69
|
-
- **Templates**: `*/templates/`
|
|
70
|
-
- **Tests**: `*/tests/`, `tests.py`
|
|
71
|
-
|
|
72
|
-
#### FastAPI
|
|
73
|
-
|
|
74
|
-
- **Routers**: `*/routers/`, `*/routes/`, `*/api/`
|
|
75
|
-
- **Schemas**: `*/schemas.py`, `*/models.py`
|
|
76
|
-
- **Services**: `*/services/`, `*/crud.py`
|
|
77
|
-
- **Dependencies**: `*/dependencies.py`
|
|
78
|
-
- **Config**: `*/config.py`, `core/config.py`
|
|
79
|
-
- **Middleware**: `*/middleware.py`
|
|
80
|
-
|
|
81
|
-
#### Flask
|
|
82
|
-
|
|
83
|
-
- **Routes**: `*/routes.py`, `*/views.py`
|
|
84
|
-
- **Blueprints**: `*/blueprints/`
|
|
85
|
-
- **Models**: `*/models.py`
|
|
86
|
-
- **Templates**: `*/templates/`
|
|
87
|
-
- **Extensions**: `*/extensions.py`
|
|
88
|
-
|
|
89
|
-
## 各层提取规则
|
|
90
|
-
|
|
91
|
-
### 层 1: 路由层
|
|
92
|
-
|
|
93
|
-
**扫描文件**: `urls.py` (Django), `routers/*.py` (FastAPI), `routes.py` (Flask)
|
|
33
|
+
| Django MVT | `models.py` + `views.py` + `urls.py` + `templates/` 并存 |
|
|
34
|
+
| FastAPI 三层 | `routers/` + `services/` + `crud.py` / `repositories/` 分离 |
|
|
35
|
+
| 仓储模式 | 存在 `repositories/` 目录或 `*Repository` 类 |
|
|
36
|
+
| Clean Architecture | 存在 `domain/` + `application/` + `infrastructure/` 目录分层 |
|
|
37
|
+
| 单体 Flask | 所有路由在单 `app.py` 或少量 Blueprint 中 |
|
|
94
38
|
|
|
95
|
-
|
|
96
|
-
- 路由配置(HTTP 方法 + 路径 + 处理函数)
|
|
97
|
-
- 路由分组(Router prefix, Blueprint name)
|
|
98
|
-
- URL 参数类型
|
|
99
|
-
- 中间件应用
|
|
39
|
+
## 数据流模式
|
|
100
40
|
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
-
|
|
105
|
-
- **Router 前缀**: /api/v1
|
|
106
|
-
- **路由分组**:
|
|
107
|
-
| 前缀 | Router | 处理文件 | 标签 |
|
|
108
|
-
|------|--------|----------|------|
|
|
109
|
-
| /auth | auth_router | routers/auth.py | 认证 |
|
|
110
|
-
| /users | users_router | routers/users.py | 用户管理 |
|
|
111
|
-
| /items | items_router | routers/items.py | 物品管理 |
|
|
112
|
-
- **端点列表**:
|
|
113
|
-
| 方法 | 路径 | 处理函数 | 认证 | 说明 |
|
|
114
|
-
|------|------|----------|------|------|
|
|
115
|
-
| POST | /auth/login | login | 否 | 登录获取 token |
|
|
116
|
-
| POST | /auth/register | register | 否 | 注册 |
|
|
117
|
-
| GET | /users/me | get_current_user | JWT | 获取当前用户 |
|
|
118
|
-
| GET | /users/{user_id} | get_user | JWT+Admin | 获取用户详情 |
|
|
119
|
-
| POST | /items/ | create_item | JWT | 创建物品 |
|
|
120
|
-
```
|
|
121
|
-
|
|
122
|
-
### 层 2: Views / Handlers 层
|
|
123
|
-
|
|
124
|
-
**扫描文件**: `views.py`, `views/*.py` (Django), `routers/*.py` (FastAPI)
|
|
125
|
-
|
|
126
|
-
**提取内容**:
|
|
127
|
-
- 视图函数/类签名
|
|
128
|
-
- 请求参数(路径参数 + 查询参数 + 请求体)
|
|
129
|
-
- 响应模型
|
|
130
|
-
- 依赖注入(FastAPI Depends)
|
|
131
|
-
- 装饰器(`@login_required`, `@permission_required`, `@router.get`)
|
|
132
|
-
|
|
133
|
-
**输出示例**:
|
|
134
|
-
```
|
|
135
|
-
### create_item(FastAPI Router)
|
|
136
|
-
- **文件**: `app/api/routers/items.py`
|
|
137
|
-
- **签名**:
|
|
138
|
-
```python
|
|
139
|
-
@router.post("/", response_model=ItemResponse, status_code=201)
|
|
140
|
-
async def create_item(
|
|
141
|
-
item: ItemCreate,
|
|
142
|
-
current_user: User = Depends(get_current_user),
|
|
143
|
-
db: AsyncSession = Depends(get_db),
|
|
144
|
-
) -> ItemResponse:
|
|
145
|
-
```
|
|
146
|
-
- **依赖注入**:
|
|
147
|
-
| 参数 | 来源 | 说明 |
|
|
148
|
-
|------|------|------|
|
|
149
|
-
| item | Request Body (ItemCreate) | 创建物品的数据 |
|
|
150
|
-
| current_user | Depends(get_current_user) | JWT 认证 |
|
|
151
|
-
| db | Depends(get_db) | 数据库会话 |
|
|
152
|
-
- **响应**: ItemResponse (201 Created)
|
|
153
|
-
- **异常**: 401 Unauthorized, 422 Validation Error
|
|
154
|
-
```
|
|
41
|
+
- **HTTP 请求链**:Middleware → Router/URL → View/Handler → Service → ORM → DB
|
|
42
|
+
- **异步任务链**:Celery Task → Service → Repository → DB
|
|
43
|
+
- **Django Admin 链**:Admin → ModelAdmin → QuerySet → DB
|
|
44
|
+
- **依赖注入链**(FastAPI):Route → Depends(auth) → Depends(db) → CRUD → DB
|
|
155
45
|
|
|
156
|
-
|
|
46
|
+
## 分析关注点
|
|
157
47
|
|
|
158
|
-
|
|
48
|
+
- **装饰器入口**:`@router.get/post`、`@login_required`、`@permission_required` 标记 API 入口和权限边界
|
|
49
|
+
- **Pydantic Schema 映射**:识别 Request Schema → ORM Model → Response Schema 的转换链
|
|
50
|
+
- **Django Signal**:`post_save` / `pre_delete` 等 Signal 连接的副作用(隐式依赖)
|
|
51
|
+
- **异步 vs 同步**:混用 `async def` 和同步视图时标记潜在阻塞风险
|
|
52
|
+
- **多数据库**:`DATABASES` 配置中多个 DB 别名,或 SQLAlchemy 多 engine
|
|
159
53
|
|
|
160
|
-
|
|
54
|
+
## 输出示例
|
|
161
55
|
|
|
162
|
-
|
|
56
|
+
FastAPI 路由提取片段:
|
|
163
57
|
```
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
| 字段 | 类型 | 约束 | 说明 |
|
|
169
|
-
|------|------|------|------|
|
|
170
|
-
| id | Integer | PK, autoincrement | 主键 |
|
|
171
|
-
| email | String(255) | unique, not null | 邮箱 |
|
|
172
|
-
| hashed_password | String(255) | not null | 密码哈希 |
|
|
173
|
-
| is_active | Boolean | default=True | 是否激活 |
|
|
174
|
-
| created_at | DateTime | default=now() | 创建时间 |
|
|
175
|
-
- **关系**:
|
|
176
|
-
| 关系 | 类型 | 目标 | 反向引用 |
|
|
177
|
-
|------|------|------|----------|
|
|
178
|
-
| items | one-to-many | Item | owner |
|
|
58
|
+
/api/v1
|
|
59
|
+
POST /auth/login → login() 无认证
|
|
60
|
+
GET /users/me → get_current_user() JWT
|
|
61
|
+
POST /items/ → create_item() JWT → ItemService → ItemRepository
|
|
179
62
|
```
|
|
180
63
|
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
**输出示例**:
|
|
184
|
-
```
|
|
185
|
-
### ItemCreate (Pydantic Schema)
|
|
186
|
-
- **路径**: `app/schemas/item.py`
|
|
187
|
-
- **字段**:
|
|
188
|
-
| 字段 | 类型 | 约束 | 说明 |
|
|
189
|
-
|------|------|------|------|
|
|
190
|
-
| title | str | min_length=1, max_length=100 | 物品标题 |
|
|
191
|
-
| description | str \| None | default=None | 描述 |
|
|
192
|
-
| price | float | gt=0 | 价格 |
|
|
193
|
-
- **Config**: from_attributes = True (ORM mode)
|
|
194
|
-
```
|
|
195
|
-
|
|
196
|
-
### 层 4: Service / CRUD 层
|
|
197
|
-
|
|
198
|
-
**扫描文件**: `services/*.py`, `crud.py`
|
|
199
|
-
|
|
200
|
-
**提取内容**:
|
|
201
|
-
- Service 类/函数签名
|
|
202
|
-
- CRUD 操作(增删改查方法)
|
|
203
|
-
- 业务逻辑摘要
|
|
204
|
-
- 依赖的其他 Service / Repository
|
|
205
|
-
|
|
206
|
-
**输出示例**:
|
|
64
|
+
Django App 模块片段:
|
|
207
65
|
```
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|------|------|------|
|
|
214
|
-
| create_item | (db, item_data, user_id) → Item | 创建物品,校验分类存在 |
|
|
215
|
-
| get_item | (db, item_id) → Item \| None | 获取物品详情 |
|
|
216
|
-
| list_items | (db, skip, limit, filters) → list[Item] | 分页查询 |
|
|
217
|
-
| delete_item | (db, item_id, user_id) → bool | 删除(仅所有者) |
|
|
66
|
+
App: users
|
|
67
|
+
models.py → User, Profile (AbstractUser)
|
|
68
|
+
views.py → UserViewSet (ModelViewSet)
|
|
69
|
+
urls.py → /users/, /users/{id}/
|
|
70
|
+
signals.py → post_save(User) → send_welcome_email
|
|
218
71
|
```
|
|
219
|
-
|
|
220
|
-
### 层 5: 认证/安全层
|
|
221
|
-
|
|
222
|
-
**扫描文件**: `auth/*.py`, `core/security.py`, `core/config.py`
|
|
223
|
-
|
|
224
|
-
**提取内容**:
|
|
225
|
-
- 认证方式(JWT / Session / OAuth2)
|
|
226
|
-
- Token 生成/验证逻辑
|
|
227
|
-
- 密码哈希方式
|
|
228
|
-
- 权限检查机制
|
|
229
|
-
|
|
230
|
-
**输出示例**:
|
|
231
|
-
```
|
|
232
|
-
### 认证配置
|
|
233
|
-
- **文件**: `app/core/security.py`
|
|
234
|
-
- **Token**: JWT (HS256)
|
|
235
|
-
- 过期时间: 30 分钟 (access_token)
|
|
236
|
-
- 密钥: settings.SECRET_KEY
|
|
237
|
-
- **密码**: bcrypt (passlib)
|
|
238
|
-
- **OAuth2**: FastAPI OAuth2PasswordBearer
|
|
239
|
-
- **权限**: role-based (admin / user)
|
|
240
|
-
```
|
|
241
|
-
|
|
242
|
-
### 层 6: 中间件层
|
|
243
|
-
|
|
244
|
-
**扫描文件**: `middleware.py`, `app/middleware/*.py`
|
|
245
|
-
|
|
246
|
-
**输出示例**:
|
|
247
|
-
```
|
|
248
|
-
### 中间件链
|
|
249
|
-
| 顺序 | 中间件 | 用途 |
|
|
250
|
-
|------|--------|------|
|
|
251
|
-
| 1 | CORSMiddleware | 跨域处理 |
|
|
252
|
-
| 2 | RequestTimingMiddleware | 请求计时 |
|
|
253
|
-
| 3 | AuthMiddleware | Token 解析(非 JWT 路由跳过) |
|
|
254
|
-
| 4 | RateLimitMiddleware | 限流 |
|
|
255
|
-
```
|
|
256
|
-
|
|
257
|
-
## 输出模板
|
|
258
|
-
|
|
259
|
-
### README.md 章节结构
|
|
260
|
-
|
|
261
|
-
```markdown
|
|
262
|
-
# {项目名}
|
|
263
|
-
|
|
264
|
-
## 项目概述
|
|
265
|
-
系统功能描述
|
|
266
|
-
|
|
267
|
-
## 技术栈
|
|
268
|
-
| 技术 | 版本 | 用途 |
|
|
269
|
-
|------|------|------|
|
|
270
|
-
|
|
271
|
-
## 架构设计
|
|
272
|
-
### 架构图(ASCII)
|
|
273
|
-
### 数据流图
|
|
274
|
-
请求 → Middleware → Router → Handler → Service → Repository → DB
|
|
275
|
-
|
|
276
|
-
## API 接口文档
|
|
277
|
-
按模块分组的端点表
|
|
278
|
-
|
|
279
|
-
## 数据模型
|
|
280
|
-
ORM 模型关系图
|
|
281
|
-
|
|
282
|
-
## 认证与权限
|
|
283
|
-
认证流程 + 权限模型
|
|
284
|
-
|
|
285
|
-
## 配置说明
|
|
286
|
-
环境变量 + 配置文件
|
|
287
|
-
|
|
288
|
-
## 构建 & 部署
|
|
289
|
-
Docker + 命令
|
|
290
|
-
```
|
|
291
|
-
|
|
292
|
-
## 模块边界识别
|
|
293
|
-
|
|
294
|
-
以下目录模式下的每个子目录视为独立模块(L2+ 分析时生成 MODULE-DOC.md):
|
|
295
|
-
|
|
296
|
-
| 层 | 扫描路径 | 模块判定规则 | MODULE-DOC slug 来源 |
|
|
297
|
-
|----|----------|-------------|---------------------|
|
|
298
|
-
| Django Apps | 每个 Django app 目录 | 独立模块 | app 名 kebab-case |
|
|
299
|
-
| FastAPI Routers | `app/routers/` | 每个文件或子目录 | 路由前缀 kebab-case |
|
|
300
|
-
| API 层 | `app/api/`, `app/routers/` | 每个子目录 | 目录名 kebab-case |
|
|
301
|
-
| 模板层 | `app/templates/` | 每个子目录 | 目录名 kebab-case |
|
|
302
|
-
| 数据模型层 | `app/models.py` | 按类分组 | 类名 kebab-case |
|
|
303
|
-
|
|
304
|
-
**不视为独立模块的情况**:
|
|
305
|
-
- 单文件入口(如 `main.py`, `app.py`, `manage.py`)
|
|
306
|
-
- 纯导出桶文件(`__init__.py` 仅有 import)
|
|
307
|
-
- 工具函数目录(`utils/`, `helpers/`)— 合并为一个模块
|
|
308
|
-
- `__pycache__/`, `.venv/` 跳过
|
|
309
|
-
|
|
310
|
-
## Token 管理
|
|
311
|
-
|
|
312
|
-
- 大模块(>15 文件)拆分为子任务
|
|
313
|
-
- 每个子任务分析 ≤10 文件
|
|
314
|
-
- `requirements.txt` / `pyproject.toml` 依赖分析单独一个子任务
|
|
315
|
-
- 迁移文件(`migrations/`, `alembic/versions/`)跳过分析
|
|
316
|
-
- 测试文件单独分析
|
|
317
|
-
- `__pycache__/`, `.venv/` 跳过
|
|
@@ -1,243 +1,77 @@
|
|
|
1
1
|
# Tauri 2 项目分析规则
|
|
2
2
|
|
|
3
3
|
本规则适用于 `rust-tauri` 技术栈(Tauri 2 桌面应用 = Rust 后端 + Web 前端)。
|
|
4
|
-
与 `rust.md` 和 `web.md`(或 `web-react.md`/`web-vue.md`)配合使用。
|
|
5
4
|
|
|
6
|
-
|
|
5
|
+
> **编码规范**:本规则不包含编码规范内容。Phase 2.5 精炼阶段会自动加载 `rust-conventions` skill(后端)和对应的 `web-conventions` skill(前端)作为规范约束。
|
|
7
6
|
|
|
8
|
-
|
|
7
|
+
## 模块发现策略
|
|
9
8
|
|
|
10
|
-
|
|
11
|
-
项目根目录/
|
|
12
|
-
├── src/ ← 前端(Web UI)— 使用 web*.md 规则
|
|
13
|
-
│ ├── App.tsx
|
|
14
|
-
│ ├── main.tsx
|
|
15
|
-
│ ├── components/
|
|
16
|
-
│ ├── hooks/
|
|
17
|
-
│ ├── stores/
|
|
18
|
-
│ └── services/ ← IPC 调用封装层(重点分析)
|
|
19
|
-
│
|
|
20
|
-
├── src-tauri/ ← 后端(Rust)— 使用 rust.md 规则
|
|
21
|
-
│ ├── Cargo.toml
|
|
22
|
-
│ ├── tauri.conf.json ← Tauri 配置(重点分析)
|
|
23
|
-
│ ├── capabilities/ ← 权限声明
|
|
24
|
-
│ └── src/
|
|
25
|
-
│ ├── main.rs
|
|
26
|
-
│ ├── lib.rs ← 命令注册
|
|
27
|
-
│ └── commands/ ← Tauri 命令模块(重点分析)
|
|
28
|
-
```
|
|
29
|
-
|
|
30
|
-
## 目录扫描策略
|
|
9
|
+
Tauri 项目采用**双根目录**扫描,前后端分别发现模块:
|
|
31
10
|
|
|
32
|
-
|
|
11
|
+
| 根目录 | 适用规则 | 特有关注点 |
|
|
12
|
+
|-------|---------|----------|
|
|
13
|
+
| `src/` | 对应 `web*.md` 规则 | `src/services/` IPC 封装层 |
|
|
14
|
+
| `src-tauri/src/` | `rust.md` 规则 | `commands/` 目录、`lib.rs` 命令注册 |
|
|
33
15
|
|
|
34
|
-
|
|
35
|
-
-
|
|
36
|
-
-
|
|
16
|
+
模块判定:
|
|
17
|
+
- 前端:`src/pages/`, `src/views/` 每个子目录;`src/components/` 3+ 文件子目录;`src/services/` 每个文件
|
|
18
|
+
- 后端:`src-tauri/src/commands/` 每个文件 / 子目录;其他子目录 3+ 文件时独立成模块
|
|
37
19
|
|
|
38
|
-
|
|
39
|
-
- 复用 `rust.md` 规则
|
|
40
|
-
- 额外关注 `commands/` 目录(Tauri 命令)
|
|
41
|
-
- 分析 `lib.rs` 的命令注册
|
|
20
|
+
排除:`src-tauri/target/`(构建产物)、`node_modules/`。`src-tauri/src/lib.rs` 视为命令注册桶文件,不单独成模块。
|
|
42
21
|
|
|
43
|
-
|
|
22
|
+
## 入口识别
|
|
44
23
|
|
|
45
|
-
|
|
24
|
+
- **Rust 入口**: `src-tauri/src/main.rs` 和 `src-tauri/src/lib.rs`(`tauri::Builder` 配置链)
|
|
25
|
+
- **命令注册**: `lib.rs` 中 `invoke_handler(tauri::generate_handler![...])` 的命令列表
|
|
26
|
+
- **前端入口**: `src/main.tsx` / `src/main.ts`(Tauri 插件初始化位置)
|
|
27
|
+
- **配置入口**: `src-tauri/tauri.conf.json`(窗口、权限、插件配置)
|
|
46
28
|
|
|
47
|
-
|
|
48
|
-
|------|------|------|
|
|
49
|
-
| 应用名 | `.productName` | 桌面应用名称 |
|
|
50
|
-
| 版本 | `.version` | 应用版本 |
|
|
51
|
-
| 标识符 | `.identifier` | 应用唯一标识 |
|
|
52
|
-
| 窗口配置 | `.app.windows[]` | 窗口标题/尺寸/属性 |
|
|
53
|
-
| 插件 | `.plugins` | 使用的 Tauri 插件 |
|
|
54
|
-
| 安全 | `.app.security` | CSP 等安全配置 |
|
|
29
|
+
## 架构模式识别
|
|
55
30
|
|
|
56
|
-
|
|
31
|
+
**IPC 桥接层**(Tauri 特有核心模式):
|
|
32
|
+
- Rust 端:`#[tauri::command]` 标注函数 → 注册到 `invoke_handler` → 暴露给前端
|
|
33
|
+
- 前端端:`invoke('command_name', args)` → 通过 Tauri IPC 桥 → 调用 Rust 函数
|
|
34
|
+
- 封装层:`src/services/` 包装 `invoke()` 调用,提供 TypeScript 类型
|
|
57
35
|
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
| 序列化 | serde, serde_json |
|
|
62
|
-
| 异步 | tokio |
|
|
63
|
-
| 系统 API | sysinfo, windows, cocoa |
|
|
64
|
-
| 文件系统 | notify, walkdir |
|
|
65
|
-
| 数据库 | sqlx, rusqlite |
|
|
66
|
-
| 网络 | reqwest |
|
|
67
|
-
| 日志 | tracing, log |
|
|
36
|
+
**权限声明**(Tauri 2 capabilities 机制):
|
|
37
|
+
- `src-tauri/capabilities/` 目录声明命令所需权限
|
|
38
|
+
- 识别文件系统 scope、窗口操作权限、系统 API 访问范围
|
|
68
39
|
|
|
69
|
-
|
|
40
|
+
**双框架边界**:
|
|
41
|
+
- 前端组件(React/Vue/Svelte)不直接调用 Rust,通过 `services/` 层隔离
|
|
42
|
+
- Rust 命令模块按功能域拆分(`commands/system.rs`, `commands/file.rs` 等)
|
|
70
43
|
|
|
71
|
-
|
|
72
|
-
- 查找所有 `#[tauri::command]` 标注的函数
|
|
73
|
-
- 提取命令名、参数、返回类型
|
|
74
|
-
- 分析命令间的调用关系
|
|
75
|
-
- 检查命令是否在 `lib.rs` 中注册
|
|
44
|
+
## 数据流模式
|
|
76
45
|
|
|
77
|
-
**前端 IPC 调用扫描**:
|
|
78
|
-
- 查找所有 `invoke()` 调用
|
|
79
|
-
- 提取命令名和传递的参数
|
|
80
|
-
- 分析 `services/` 目录的封装模式
|
|
81
|
-
|
|
82
|
-
**IPC 桥接验证**:
|
|
83
|
-
- 对比 Rust 命令定义和前端 invoke 调用
|
|
84
|
-
- 检查是否存在未注册的命令、未调用的命令
|
|
85
|
-
- 验证参数类型匹配
|
|
86
|
-
|
|
87
|
-
输出示例:
|
|
88
46
|
```
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
| 命令名 | Rust 函数 | 参数 | 返回值 | 前端调用位置 | 状态 |
|
|
92
|
-
|--------|-----------|------|--------|-------------|------|
|
|
93
|
-
| get_system_info | commands/system.rs::get_system_info | - | SysInfo | services/system.ts | 已注册 ✓ |
|
|
94
|
-
| read_file | commands/file.rs::read_file | path: String | String | services/file.ts | 已注册 ✓ |
|
|
95
|
-
| save_config | commands/config.rs::save_config | config: AppConfig | Result<()> | services/config.ts | 未注册 ✗ |
|
|
96
|
-
|
|
97
|
-
### IPC 类型映射
|
|
98
|
-
|
|
99
|
-
| Rust 类型 | TypeScript 类型 | 用途 |
|
|
100
|
-
|-----------|----------------|------|
|
|
101
|
-
| SysInfo | SysInfo | 系统信息 |
|
|
102
|
-
| AppConfig | AppConfig | 应用配置 |
|
|
47
|
+
用户操作 → 前端组件 → src/services/ (invoke) → IPC 桥 → Rust commands/ → 系统 API / 文件系统 / 数据库
|
|
103
48
|
```
|
|
104
49
|
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
- 检查每个命令所需的权限
|
|
110
|
-
- 分析文件系统访问范围
|
|
111
|
-
- 检查窗口操作权限
|
|
112
|
-
- 验证最小权限原则
|
|
50
|
+
**类型映射检查**:
|
|
51
|
+
- Rust `struct`(`#[derive(Serialize, Deserialize)]`)→ TypeScript `interface`
|
|
52
|
+
- 枚举类型的前后端对应关系
|
|
53
|
+
- 错误类型从 Rust `Result<T, E>` 到前端 `Promise<T>` 的转换
|
|
113
54
|
|
|
114
|
-
|
|
55
|
+
## 分析关注点
|
|
115
56
|
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
- IPC 封装: `src/services/`(**Tauri 特有关注点**)
|
|
122
|
-
- 工具: `src/utils/`, `src/helpers/`
|
|
57
|
+
1. **IPC 注册完整性**:对比 `lib.rs` 注册的命令列表 vs `src/services/` 中实际调用的命令,发现未注册或孤立命令
|
|
58
|
+
2. **类型一致性**:Rust struct 字段名(snake_case)与 TypeScript 接口字段名(camelCase,经 serde rename)是否对应
|
|
59
|
+
3. **权限最小化**:`capabilities/` 中声明的权限是否超出实际需要
|
|
60
|
+
4. **异步模式**:Rust 命令是否正确使用 `async fn` + `tokio`;前端是否正确处理 Promise 错误
|
|
61
|
+
5. **状态管理**:`tauri::State<T>` 共享状态的线程安全性(`Mutex<T>` vs `RwLock<T>`)
|
|
123
62
|
|
|
124
|
-
|
|
125
|
-
- 入口: `src-tauri/src/main.rs`, `src-tauri/src/lib.rs`
|
|
126
|
-
- 命令: `src-tauri/src/commands/`(**Tauri 特有关注点**)
|
|
127
|
-
- 状态: `src-tauri/src/state.rs`
|
|
128
|
-
- 模型: `src-tauri/src/models/`
|
|
129
|
-
- 错误: `src-tauri/src/error.rs`
|
|
130
|
-
- 工具: `src-tauri/src/utils/`
|
|
63
|
+
## 输出示例
|
|
131
64
|
|
|
132
|
-
## 各层提取规则
|
|
133
|
-
|
|
134
|
-
### 层 1: 入口分析
|
|
135
|
-
|
|
136
|
-
**扫描文件**: `src-tauri/src/lib.rs`, `src-tauri/src/main.rs`, `src/main.tsx`
|
|
137
|
-
|
|
138
|
-
**提取内容**:
|
|
139
|
-
- Rust: `tauri::Builder` 配置链(注册的命令、插件、状态)
|
|
140
|
-
- Rust: `invoke_handler` 中的命令注册列表
|
|
141
|
-
- 前端: Tauri 插件注册、窗口管理
|
|
142
|
-
|
|
143
|
-
输出示例:
|
|
144
|
-
```
|
|
145
|
-
### Tauri 应用初始化 (src-tauri/src/lib.rs)
|
|
146
|
-
- **注册命令**: get_system_info, read_file, save_config, list_processes
|
|
147
|
-
- **插件**: app-window, fs, dialog, process
|
|
148
|
-
- **状态**: AppState (包含系统信息缓存)
|
|
149
|
-
- **事件监听**: window-resized, theme-changed
|
|
150
65
|
```
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
-
|
|
160
|
-
-
|
|
161
|
-
-
|
|
162
|
-
|
|
163
|
-
### 层 3: 前端 IPC 层分析
|
|
164
|
-
|
|
165
|
-
**扫描文件**: `src/services/*.ts`
|
|
166
|
-
|
|
167
|
-
对每个服务文件提取:
|
|
168
|
-
- 封装的 invoke 调用列表
|
|
169
|
-
- TypeScript 类型定义(与 Rust 类型对应)
|
|
170
|
-
- 错误处理策略
|
|
171
|
-
- Loading 状态管理
|
|
172
|
-
|
|
173
|
-
### 层 4: 共享类型分析
|
|
174
|
-
|
|
175
|
-
检查 Rust 和 TypeScript 之间的类型对应关系:
|
|
176
|
-
- Rust `struct` → TypeScript `interface`
|
|
177
|
-
- 枚举类型的映射
|
|
178
|
-
- 序列化/反序列化约定
|
|
179
|
-
|
|
180
|
-
## 输出模板
|
|
181
|
-
|
|
182
|
-
### README.md 章节结构
|
|
183
|
-
|
|
184
|
-
```markdown
|
|
185
|
-
# {项目名}
|
|
186
|
-
|
|
187
|
-
## 项目概述
|
|
188
|
-
Tauri 2 桌面应用描述
|
|
189
|
-
|
|
190
|
-
## 技术栈
|
|
191
|
-
| 技术 | 版本 | 用途 |
|
|
192
|
-
|------|------|------|
|
|
193
|
-
| Tauri | 2.x | 桌面框架 |
|
|
194
|
-
| Rust | edition 2021 | 后端语言 |
|
|
195
|
-
| React/Vue | x.x | 前端框架 |
|
|
196
|
-
|
|
197
|
-
## 架构设计
|
|
198
|
-
### 双架构图(前端 + 后端 + IPC 桥接)
|
|
199
|
-
### 数据流图(用户操作 → 前端 → IPC → Rust → 系统 API)
|
|
200
|
-
|
|
201
|
-
## 项目结构
|
|
202
|
-
双目录树 + 各模块职责
|
|
203
|
-
|
|
204
|
-
## IPC 命令列表
|
|
205
|
-
命令名 | 参数 | 返回值 | 说明
|
|
206
|
-
|
|
207
|
-
## 前端模块
|
|
208
|
-
页面/组件/状态/服务层
|
|
209
|
-
|
|
210
|
-
## Rust 模块
|
|
211
|
-
命令/状态/模型/错误处理
|
|
212
|
-
|
|
213
|
-
## 权限配置
|
|
214
|
-
使用的 capabilities 和 scope
|
|
215
|
-
|
|
216
|
-
## 构建 & 运行
|
|
217
|
-
pnpm tauri dev / pnpm tauri build
|
|
66
|
+
### IPC 命令清单
|
|
67
|
+
| 命令名 | Rust 文件 | 参数 | 返回值 | 前端调用位置 | 状态 |
|
|
68
|
+
|---------------|-----------------------------|--------------|-----------|--------------------|--------|
|
|
69
|
+
| get_system_info | commands/system.rs | — | SysInfo | services/system.ts | 已注册 ✓ |
|
|
70
|
+
| read_file | commands/file.rs | path: String | String | services/file.ts | 已注册 ✓ |
|
|
71
|
+
| save_config | commands/config.rs | config: AppConfig | Result<()> | services/config.ts | 未注册 ✗ |
|
|
72
|
+
|
|
73
|
+
### Tauri 应用初始化(src-tauri/src/lib.rs)
|
|
74
|
+
- **注册命令**: get_system_info, read_file, save_config
|
|
75
|
+
- **插件**: fs, dialog, process
|
|
76
|
+
- **共享状态**: AppState(系统信息缓存)
|
|
218
77
|
```
|
|
219
|
-
|
|
220
|
-
## 模块边界识别
|
|
221
|
-
|
|
222
|
-
以下目录模式下的每个子目录视为独立模块(L2+ 分析时生成 MODULE-DOC.md):
|
|
223
|
-
|
|
224
|
-
| 层 | 扫描路径 | 模块判定规则 | MODULE-DOC slug 来源 |
|
|
225
|
-
|----|----------|-------------|---------------------|
|
|
226
|
-
| 前端页面 | `src/pages/`, `src/views/` | 每个子目录 | 目录名 kebab-case |
|
|
227
|
-
| 前端组件 | `src/components/` | 3+ 文件的子目录 | 目录名 kebab-case |
|
|
228
|
-
| IPC 封装 | `src/services/` | 每个文件 | 文件名去后缀 |
|
|
229
|
-
| Rust 命令 | `src-tauri/src/commands/` | 每个文件/子目录 | 文件名/目录名 |
|
|
230
|
-
| Rust 模块 | `src-tauri/src/` 其他子目录 | 3+ 文件 | 目录名 |
|
|
231
|
-
|
|
232
|
-
**不视为独立模块的情况**:
|
|
233
|
-
- `src-tauri/src/main.rs`(纯入口)
|
|
234
|
-
- `src-tauri/src/lib.rs`(命令注册桶文件)
|
|
235
|
-
- `src-tauri/target/`(构建产物,跳过)
|
|
236
|
-
- `node_modules/`(跳过)
|
|
237
|
-
|
|
238
|
-
## Token 管理
|
|
239
|
-
|
|
240
|
-
- 前端和后端分析分别作为独立任务
|
|
241
|
-
- IPC 层分析作为第三个独立任务(桥接前后端)
|
|
242
|
-
- 大模块(>15 文件)拆分为子任务
|
|
243
|
-
- `target/` 和 `node_modules/` 跳过
|