@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,243 +1,75 @@
|
|
|
1
1
|
# 通用项目分析规则
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
当无法识别具体技术栈或项目不遵循常见框架模式时使用。作为所有规则文件的兜底。
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
> **编码规范**:generic 无对应 conventions skill,Phase 2.5 精炼阶段跳过规范约束加载。
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
## 模块发现策略
|
|
8
8
|
|
|
9
|
-
|
|
10
|
-
项目根目录
|
|
11
|
-
├── 配置文件(package.json, Makefile, Cargo.toml 等)
|
|
12
|
-
├── src/ 或 lib/(源码目录)
|
|
13
|
-
│ ├── 模块 A
|
|
14
|
-
│ ├── 模块 B
|
|
15
|
-
│ └── 公共代码
|
|
16
|
-
├── tests/ 或 test/(测试目录)
|
|
17
|
-
├── docs/(文档目录)
|
|
18
|
-
└── scripts/(脚本目录)
|
|
19
|
-
```
|
|
20
|
-
|
|
21
|
-
## 目录扫描策略
|
|
9
|
+
**信号文件优先级检测**(用于推断技术栈,再路由到对应规则):
|
|
22
10
|
|
|
23
|
-
|
|
11
|
+
| 信号文件 | 推断技术栈 |
|
|
12
|
+
|---------|----------|
|
|
13
|
+
| `package.json` | Node.js / JavaScript |
|
|
14
|
+
| `pyproject.toml` / `requirements.txt` | Python |
|
|
15
|
+
| `go.mod` | Go |
|
|
16
|
+
| `Cargo.toml` | Rust |
|
|
17
|
+
| `pom.xml` / `build.gradle` | Java |
|
|
18
|
+
| `Gemfile` | Ruby |
|
|
19
|
+
| `composer.json` | PHP |
|
|
20
|
+
| `Makefile` / `CMakeLists.txt` | C/C++ |
|
|
21
|
+
| `pubspec.yaml` | Dart / Flutter |
|
|
22
|
+
| 无信号文件 | 按目录结构推断(见下) |
|
|
24
23
|
|
|
25
|
-
|
|
26
|
-
- `
|
|
27
|
-
-
|
|
28
|
-
-
|
|
29
|
-
-
|
|
30
|
-
- `pom.xml` / `build.gradle` → Java 项目
|
|
31
|
-
- `Gemfile` → Ruby 项目
|
|
32
|
-
- `composer.json` → PHP 项目
|
|
33
|
-
- `Makefile` / `CMakeLists.txt` → C/C++ 项目
|
|
34
|
-
- `build.gradle.kts` → Kotlin 项目
|
|
35
|
-
- `pubspec.yaml` → Dart/Flutter 项目
|
|
36
|
-
- 无信号文件 → 按目录结构推断
|
|
24
|
+
**通用目录模块发现规则**(无法路由到具体规则时):
|
|
25
|
+
- `src/` 下每个一级子目录视为一个功能模块
|
|
26
|
+
- 包含 3+ 源码文件的目录视为独立模块
|
|
27
|
+
- 单文件项目作为一个整体模块分析
|
|
28
|
+
- 递归扫描最大深度 3 层
|
|
37
29
|
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
```
|
|
41
|
-
node_modules/ vendor/ build/ dist/
|
|
42
|
-
.git/ __pycache__/ .cache/ target/
|
|
43
|
-
.idea/ .vscode/ .settings/ .DS_Store
|
|
44
|
-
.venv/ venv/ env/ oh_modules/
|
|
45
|
-
*.egg-info/ .eggs/ coverage/ .next/
|
|
46
|
-
out/ bin/ obj/ .gradle/
|
|
47
|
-
```
|
|
30
|
+
排除目录:`node_modules/`, `vendor/`, `build/`, `dist/`, `.git/`, `__pycache__/`, `target/`, `.venv/`, `venv/`, `.next/`, `out/`
|
|
48
31
|
|
|
49
|
-
|
|
32
|
+
## 入口识别
|
|
50
33
|
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
- **配置**: `src/config/`, `config/`, `conf/`
|
|
57
|
-
- **测试**: `tests/`, `test/`, `__tests__/`, `src/test/`
|
|
34
|
+
按优先级尝试:
|
|
35
|
+
1. `src/main.*`, `src/index.*`, `index.*`, `main.*`, `app.*`
|
|
36
|
+
2. 配置文件中的 `main` / `entry` / `bin` 字段(package.json、Cargo.toml 等)
|
|
37
|
+
3. `Makefile` / `Taskfile` 的默认 target
|
|
38
|
+
4. 无入口时:以所有顶级源码文件为入口节点
|
|
58
39
|
|
|
59
|
-
##
|
|
40
|
+
## 架构模式识别
|
|
60
41
|
|
|
61
|
-
|
|
42
|
+
- **分层结构**:检测 `src/domain/`, `src/application/`, `src/infrastructure/` 模式(DDD / Clean Architecture)
|
|
43
|
+
- **模块聚合**:检测 `src/modules/`, `src/features/` 模式(Feature-based 组织)
|
|
44
|
+
- **核心-插件**:检测 `src/core/` + `src/plugins/` 模式
|
|
45
|
+
- **公共层识别**:`src/common/`, `src/shared/`, `src/utils/` — 合并为一个"公共"模块,不单独拆分
|
|
62
46
|
|
|
63
|
-
|
|
47
|
+
## 数据流模式
|
|
64
48
|
|
|
65
|
-
|
|
66
|
-
-
|
|
67
|
-
-
|
|
68
|
-
- 初始化逻辑摘要
|
|
69
|
-
- 暴露的公开 API
|
|
49
|
+
- 扫描 import / require 语句建立模块依赖图
|
|
50
|
+
- 识别单向数据流(入口 → 业务逻辑 → 数据访问 → 外部 IO)
|
|
51
|
+
- 检测循环依赖(A → B → A)标记为需关注问题
|
|
70
52
|
|
|
71
|
-
|
|
72
|
-
```
|
|
73
|
-
### 入口文件
|
|
74
|
-
- **文件**: `src/index.ts`
|
|
75
|
-
- **语言**: TypeScript
|
|
76
|
-
- **导入模块**: ./config, ./core/App, ./routes
|
|
77
|
-
- **公开 API**:
|
|
78
|
-
| 名称 | 类型 | 说明 |
|
|
79
|
-
|------|------|------|
|
|
80
|
-
| createApp | (config: AppConfig) => App | 创建应用实例 |
|
|
81
|
-
| version | string | 版本号 |
|
|
82
|
-
```
|
|
53
|
+
## 分析关注点
|
|
83
54
|
|
|
84
|
-
|
|
55
|
+
1. **模块边界清晰度**:目录命名是否反映业务职责,还是技术类型(`utils/` vs `user-service/`)
|
|
56
|
+
2. **依赖方向**:是否存在底层模块依赖高层模块的逆向依赖
|
|
57
|
+
3. **入口清晰度**:是否有明确的应用入口,还是分散在多个文件中
|
|
58
|
+
4. **构建可重现性**:是否有锁文件(`package-lock.json`, `Cargo.lock`, `go.sum`)
|
|
59
|
+
5. **测试覆盖信号**:是否存在 `tests/`, `__tests__/`, `*.test.*` 目录,测试比例粗估
|
|
85
60
|
|
|
86
|
-
|
|
87
|
-
- 递归扫描源码目录(最大深度 3 层)
|
|
88
|
-
- 每个包含 3+ 源码文件的目录视为一个功能模块
|
|
89
|
-
- `src/` 下的每个一级子目录为一个模块
|
|
90
|
-
- 单文件项目作为一个整体模块
|
|
61
|
+
## 输出示例
|
|
91
62
|
|
|
92
|
-
**输出示例**:
|
|
93
63
|
```
|
|
94
64
|
### 模块列表
|
|
95
|
-
| 模块
|
|
96
|
-
|
|
97
|
-
| core
|
|
98
|
-
| utils | src/utils/
|
|
99
|
-
| api
|
|
100
|
-
| models | src/models/ | 4 | TypeScript | 数据模型定义 |
|
|
101
|
-
```
|
|
102
|
-
|
|
103
|
-
### 层 3: 核心类/函数分析
|
|
104
|
-
|
|
105
|
-
**扫描文件**: 每个模块内的主要源码文件
|
|
106
|
-
|
|
107
|
-
**提取内容**:
|
|
108
|
-
- 类/函数/接口名称
|
|
109
|
-
- 签名(参数 + 返回类型)
|
|
110
|
-
- 职责描述
|
|
111
|
-
- 依赖的其他模块
|
|
112
|
-
|
|
113
|
-
**输出示例**:
|
|
114
|
-
```
|
|
115
|
-
### 核心导出
|
|
116
|
-
- **文件**: `src/core/engine.ts`
|
|
117
|
-
- **导出**:
|
|
118
|
-
| 名称 | 类型 | 签名 | 说明 |
|
|
119
|
-
|------|------|------|------|
|
|
120
|
-
| Engine | Class | constructor(config: Config) | 核心引擎类 |
|
|
121
|
-
| process | Method | (input: Data): Promise<Result> | 处理数据 |
|
|
122
|
-
| validate | Function | (data: unknown): data is ValidData | 数据校验 |
|
|
123
|
-
- **依赖**: `src/config`, `src/utils/logger`, `src/models`
|
|
124
|
-
```
|
|
125
|
-
|
|
126
|
-
### 层 4: 依赖分析
|
|
127
|
-
|
|
128
|
-
**扫描文件**: 各种包管理器的依赖文件
|
|
129
|
-
|
|
130
|
-
**提取内容**:
|
|
131
|
-
- 依赖管理器类型和版本
|
|
132
|
-
- 运行时依赖列表(名称 + 版本)
|
|
133
|
-
- 开发依赖列表
|
|
134
|
-
- 对等依赖(peerDependencies)
|
|
135
|
-
|
|
136
|
-
**输出示例**:
|
|
137
|
-
```
|
|
138
|
-
### 依赖信息
|
|
139
|
-
- **管理器**: npm (package.json)
|
|
140
|
-
- **运行时依赖**:
|
|
141
|
-
| 包名 | 版本 | 用途 |
|
|
142
|
-
|------|------|------|
|
|
143
|
-
| express | 4.18.2 | Web 框架 |
|
|
144
|
-
| zod | 3.22.4 | 数据验证 |
|
|
145
|
-
| dayjs | 1.11.9 | 日期处理 |
|
|
146
|
-
```
|
|
65
|
+
| 模块 | 路径 | 文件数 | 主要语言 | 职责描述 |
|
|
66
|
+
|-------|-------------|-------|-----------|--------------|
|
|
67
|
+
| core | src/core/ | 12 | TypeScript | 核心逻辑和框架 |
|
|
68
|
+
| utils | src/utils/ | 8 | TypeScript | 工具函数集合 |
|
|
69
|
+
| api | src/api/ | 6 | TypeScript | 外部 API 封装 |
|
|
147
70
|
|
|
148
|
-
###
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
**提取内容**:
|
|
153
|
-
- 构建命令(build、test、lint、dev)
|
|
154
|
-
- 环境变量配置
|
|
155
|
-
- 关键配置项
|
|
156
|
-
|
|
157
|
-
**输出示例**:
|
|
158
|
-
```
|
|
159
|
-
### 构建配置
|
|
160
|
-
- **构建工具**: TypeScript + tsx
|
|
161
|
-
- **脚本命令**:
|
|
162
|
-
| 命令 | 执行内容 | 说明 |
|
|
163
|
-
|------|----------|------|
|
|
164
|
-
| npm run dev | tsx watch src/index.ts | 开发模式 |
|
|
165
|
-
| npm run build | tsc && node build.js | 生产构建 |
|
|
166
|
-
| npm run test | vitest run | 运行测试 |
|
|
167
|
-
| npm run lint | eslint src/ --ext .ts | 代码检查 |
|
|
168
|
-
```
|
|
169
|
-
|
|
170
|
-
## 输出模板
|
|
171
|
-
|
|
172
|
-
### README.md 章节结构
|
|
173
|
-
|
|
174
|
-
```markdown
|
|
175
|
-
# {项目名}
|
|
176
|
-
|
|
177
|
-
## 项目概述
|
|
178
|
-
项目功能描述(从 README 或配置文件 description 提取)
|
|
179
|
-
|
|
180
|
-
## 技术栈
|
|
181
|
-
| 技术 | 版本 | 用途 |
|
|
182
|
-
|------|------|------|
|
|
183
|
-
|
|
184
|
-
## 架构设计
|
|
185
|
-
### 架构图(ASCII)
|
|
186
|
-
展示模块关系的 ASCII 图
|
|
187
|
-
|
|
188
|
-
### 目录结构
|
|
189
|
-
带注释的文件树
|
|
190
|
-
|
|
191
|
-
## 模块说明
|
|
192
|
-
每个模块的职责、核心 API、依赖关系
|
|
193
|
-
|
|
194
|
-
## 构建 & 运行
|
|
195
|
-
构建命令、环境变量、运行方式
|
|
196
|
-
|
|
197
|
-
## 开发指南
|
|
198
|
-
如何修改/扩展项目
|
|
199
|
-
```
|
|
200
|
-
|
|
201
|
-
### COMPONENT.md 章节结构
|
|
202
|
-
|
|
203
|
-
```markdown
|
|
204
|
-
# 模块文档
|
|
205
|
-
|
|
206
|
-
## 模块索引
|
|
207
|
-
按功能分组的模块列表
|
|
208
|
-
|
|
209
|
-
## 各模块详情
|
|
210
|
-
### {模块名}
|
|
211
|
-
- 路径 + 语言
|
|
212
|
-
- 公开 API 表格
|
|
213
|
-
- 依赖关系
|
|
214
|
-
- 使用示例
|
|
71
|
+
### 入口文件
|
|
72
|
+
- **文件**: `src/index.ts`
|
|
73
|
+
- **导入模块**: ./config, ./core/App, ./routes
|
|
74
|
+
- **公开 API**: createApp(config), version
|
|
215
75
|
```
|
|
216
|
-
|
|
217
|
-
## 模块边界识别
|
|
218
|
-
|
|
219
|
-
以下目录模式下的每个子目录视为独立模块(L2+ 分析时生成 MODULE-DOC.md):
|
|
220
|
-
|
|
221
|
-
| 层 | 扫描路径 | 模块判定规则 | MODULE-DOC slug 来源 |
|
|
222
|
-
|----|----------|-------------|---------------------|
|
|
223
|
-
| 源码层 | `src/` 一级子目录 | 3+ 文件的子目录 | 目录名 kebab-case |
|
|
224
|
-
| API/服务层 | `src/api/`, `src/services/` | 每个子目录 | 目录名 kebab-case |
|
|
225
|
-
| 状态管理层 | `src/store/`, `src/state/` | 每个子目录 | 目录名 kebab-case |
|
|
226
|
-
| 组件层 | `src/components/` | 3+ 文件的子目录 | 目录名 kebab-case |
|
|
227
|
-
| 自动推断 | 其他目录 | 3+ 源码文件 | 目录名 kebab-case |
|
|
228
|
-
|
|
229
|
-
**不视为独立模块的情况**:
|
|
230
|
-
- 单文件入口(如 `main.ts`, `index.js`, `app.py`)
|
|
231
|
-
- 纯导出桶文件(仅有 re-export)
|
|
232
|
-
- 工具函数目录(`utils/`, `helpers/`, `lib/`)— 合并为一个模块
|
|
233
|
-
- 生成文件(`*.generated.*`, `*.min.*`)跳过
|
|
234
|
-
|
|
235
|
-
## Token 管理
|
|
236
|
-
|
|
237
|
-
- 大目录(>20 文件)拆分为子任务
|
|
238
|
-
- 每个子任务分析 ≤10 文件
|
|
239
|
-
- 二进制文件、图片、压缩包跳过
|
|
240
|
-
- 超大文件(>100KB)跳过内容分析,只记录文件名和大小
|
|
241
|
-
- 生成文件(`*.generated.*`, `*.min.*`)跳过
|
|
242
|
-
- 测试文件单独分组分析
|
|
243
|
-
- 配置文件(JSON/YAML/TOML)单独分析
|
|
@@ -1,289 +1,74 @@
|
|
|
1
1
|
# Go 项目分析规则
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
internal/
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
- **Web API**: `gin`, `echo`, `fiber`, `chi` 依赖
|
|
36
|
-
- **gRPC**: `google.golang.org/grpc`, `protobuf` 依赖
|
|
37
|
-
- **CLI**: `cobra`, `urfave/cli` 依赖
|
|
38
|
-
- **微服务**: `go-micro`, `kratos` 依赖
|
|
39
|
-
|
|
40
|
-
### 3. 依赖提取
|
|
41
|
-
|
|
42
|
-
从 `go.mod` 提取:
|
|
43
|
-
|
|
44
|
-
| 类别 | 常见依赖 |
|
|
3
|
+
> **编码规范**:本规则不包含编码规范内容。Phase 2.5 精炼阶段会自动加载 `go-conventions` skill 作为规范约束。
|
|
4
|
+
|
|
5
|
+
## 模块发现策略
|
|
6
|
+
|
|
7
|
+
- **Go Module**:从 `go.mod` 读取 module 名和 Go 版本
|
|
8
|
+
- **标准布局**(golang-standards/project-layout):
|
|
9
|
+
- `cmd/{name}/` — 每个子目录为一个可执行模块
|
|
10
|
+
- `internal/{name}/` — 每个子目录为一个内部包模块
|
|
11
|
+
- `pkg/{name}/` — 每个子目录为一个可导出包模块
|
|
12
|
+
- **非标准布局**:按目录内 `.go` 文件数量判断(3+ 文件视为独立模块)
|
|
13
|
+
- **跳过**:`vendor/`、`*_gen.go`、`*.pb.go`、`*_test.go`(单独分组分析)
|
|
14
|
+
|
|
15
|
+
项目类型检测(从 `go.mod` 依赖判断):
|
|
16
|
+
- Web API:`gin` / `echo` / `fiber` / `chi`
|
|
17
|
+
- gRPC:`google.golang.org/grpc` + `protobuf`
|
|
18
|
+
- CLI:`cobra` / `urfave/cli`
|
|
19
|
+
- 微服务:`go-micro` / `kratos`
|
|
20
|
+
|
|
21
|
+
## 入口识别
|
|
22
|
+
|
|
23
|
+
| 标记 | 含义 |
|
|
24
|
+
|------|------|
|
|
25
|
+
| `cmd/*/main.go` | 各可执行程序入口 |
|
|
26
|
+
| `func main()` | 应用启动入口(初始化顺序:config → logger → db → server) |
|
|
27
|
+
| `r.GET/POST/...` / `e.GET/POST/...` | HTTP 路由注册(Gin / Echo) |
|
|
28
|
+
| `pb.Register*Server()` | gRPC 服务注册入口 |
|
|
29
|
+
| `cobra.Command.Run` | CLI 子命令入口 |
|
|
30
|
+
| `go func()` / `goroutine` 启动点 | 异步任务入口 |
|
|
31
|
+
|
|
32
|
+
## 架构模式识别
|
|
33
|
+
|
|
34
|
+
| 模式 | 检测特征 |
|
|
45
35
|
|------|----------|
|
|
46
|
-
|
|
|
47
|
-
|
|
|
48
|
-
|
|
|
49
|
-
|
|
|
50
|
-
|
|
|
51
|
-
| 测试 | testify, mockgen |
|
|
52
|
-
| 数据库驱动 | pgx, go-sql-driver/mysql |
|
|
53
|
-
| 缓存 | go-redis |
|
|
54
|
-
| 消息队列 | amqp, sarama |
|
|
55
|
-
| DI | wire, fx |
|
|
56
|
-
| 验证 | go-playground/validator |
|
|
57
|
-
|
|
58
|
-
### 4. 按层扫描路径
|
|
59
|
-
|
|
60
|
-
- **入口**: `cmd/` 下的 main.go
|
|
61
|
-
- **Handler**: `internal/handler/`, `internal/http/`, `internal/controller/`
|
|
62
|
-
- **Service**: `internal/service/`, `internal/usecase/`, `internal/biz/`
|
|
63
|
-
- **Repository**: `internal/repository/`, `internal/store/`, `internal/data/`
|
|
64
|
-
- **Model**: `internal/model/`, `internal/domain/`, `internal/entity/`
|
|
65
|
-
- **Middleware**: `internal/middleware/`
|
|
66
|
-
- **Config**: `internal/config/`, `config/`
|
|
67
|
-
- **公共包**: `pkg/` 下的子目录
|
|
68
|
-
- **API 定义**: `api/` (Protobuf / OpenAPI)
|
|
69
|
-
|
|
70
|
-
## 各层提取规则
|
|
36
|
+
| 标准分层 | `handler/` + `service/` + `repository/` + `model/` 目录并存 |
|
|
37
|
+
| Clean/Hexagonal | `domain/` + `usecase/` + `infrastructure/` 分离 |
|
|
38
|
+
| Kratos 框架 | `internal/biz/` + `internal/data/` + `internal/service/` |
|
|
39
|
+
| 单一 package | 所有代码在 `main` package,无子目录分层 |
|
|
40
|
+
| Interface 驱动 | 每层定义 interface,`wire` / `fx` 进行依赖注入 |
|
|
71
41
|
|
|
72
|
-
|
|
42
|
+
## 数据流模式
|
|
73
43
|
|
|
74
|
-
|
|
44
|
+
- **HTTP 请求链**:Middleware → Handler → Service → Repository → DB
|
|
45
|
+
- **gRPC 请求链**:Interceptor → gRPC Handler → UseCase → Repository → DB
|
|
46
|
+
- **异步任务链**:goroutine → Channel → Worker → Repository → DB
|
|
47
|
+
- **消息消费链**:Kafka/AMQP Consumer → Service → Repository → DB
|
|
75
48
|
|
|
76
|
-
|
|
77
|
-
- Handler 函数签名
|
|
78
|
-
- 路由注册(路由路径 + HTTP 方法 + Handler 函数)
|
|
79
|
-
- 请求/响应结构体
|
|
80
|
-
- 使用的 Service
|
|
81
|
-
- 中间件链
|
|
49
|
+
## 分析关注点
|
|
82
50
|
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
-
|
|
87
|
-
-
|
|
88
|
-
- **Handler 方法**:
|
|
89
|
-
| 方法 | 签名 | 说明 |
|
|
90
|
-
|------|------|------|
|
|
91
|
-
| CreateUser | (c *gin.Context) | 创建用户 |
|
|
92
|
-
| GetUser | (c *gin.Context) | 获取用户详情 |
|
|
93
|
-
| ListUsers | (c *gin.Context) | 分页查询 |
|
|
94
|
-
| UpdateUser | (c *gin.Context) | 更新用户 |
|
|
95
|
-
| DeleteUser | (c *gin.Context) | 删除用户 |
|
|
96
|
-
|
|
97
|
-
### 路由注册
|
|
98
|
-
- **文件**: `internal/router/router.go`
|
|
99
|
-
- **路由表**:
|
|
100
|
-
| 方法 | 路径 | Handler | 中间件 | 说明 |
|
|
101
|
-
|------|------|---------|--------|------|
|
|
102
|
-
| POST | /api/v1/users | CreateUser | Auth, Admin | 创建用户 |
|
|
103
|
-
| GET | /api/v1/users/:id | GetUser | Auth | 获取用户 |
|
|
104
|
-
| GET | /api/v1/users | ListUsers | Auth | 用户列表 |
|
|
105
|
-
| PUT | /api/v1/users/:id | UpdateUser | Auth, Admin | 更新用户 |
|
|
106
|
-
| DELETE | /api/v1/users/:id | DeleteUser | Auth, Admin | 删除用户 |
|
|
107
|
-
```
|
|
108
|
-
|
|
109
|
-
### 层 2: Service 层
|
|
51
|
+
- **Interface 边界**:识别 Service / Repository 的 interface 定义,标注实现类(依赖方向关键)
|
|
52
|
+
- **goroutine 泄漏风险**:扫描 `go func()` 未配合 `context.Done()` 或 WaitGroup 的模式
|
|
53
|
+
- **并发原语**:`sync.Mutex` / `sync.RWMutex` / `chan` / `errgroup` 的使用位置和模式
|
|
54
|
+
- **错误传递**:是否使用 `fmt.Errorf("... %w", err)` 包装,还是直接返回裸 error
|
|
55
|
+
- **DI 框架**:`wire` 的 `ProviderSet` 或 `fx.Provide()` 揭示完整依赖图
|
|
110
56
|
|
|
111
|
-
|
|
57
|
+
## 输出示例
|
|
112
58
|
|
|
113
|
-
|
|
114
|
-
- Service interface 定义
|
|
115
|
-
- 方法签名(参数 + 返回值)
|
|
116
|
-
- 实现类的业务逻辑摘要
|
|
117
|
-
- 依赖的 Repository / 其他 Service
|
|
118
|
-
|
|
119
|
-
**输出示例**:
|
|
59
|
+
Handler/路由提取片段:
|
|
120
60
|
```
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
| Create | (ctx, CreateUserReq) (*User, error) | 创建用户(校验+哈希密码+存储) |
|
|
127
|
-
| GetByID | (ctx, int64) (*User, error) | 按 ID 查询 |
|
|
128
|
-
| List | (ctx, ListUsersReq) ([]*User, int64, error) | 分页列表(返回总数) |
|
|
129
|
-
| Update | (ctx, int64, UpdateUserReq) (*User, error) | 更新用户 |
|
|
130
|
-
| Delete | (ctx, int64) error | 删除用户 |
|
|
131
|
-
- **实现**: userServiceImpl
|
|
132
|
-
- **依赖**: UserRepository, PasswordEncoder, CacheService
|
|
61
|
+
UserHandler internal/handler/user_handler.go
|
|
62
|
+
POST /api/v1/users → CreateUser() [Auth, Admin]
|
|
63
|
+
GET /api/v1/users/:id → GetUser() [Auth]
|
|
64
|
+
GET /api/v1/users → ListUsers() [Auth]
|
|
65
|
+
→ 依赖注入: UserService (interface)
|
|
133
66
|
```
|
|
134
67
|
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
**扫描文件**: `internal/repository/*.go`
|
|
138
|
-
|
|
139
|
-
**提取内容**:
|
|
140
|
-
- Repository interface 定义
|
|
141
|
-
- 数据库操作方法(SQL / GORM / Ent)
|
|
142
|
-
- 数据源类型
|
|
143
|
-
|
|
144
|
-
**输出示例**:
|
|
68
|
+
并发模式片段:
|
|
145
69
|
```
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
| 方法 | 签名 | SQL/GORM | 说明 |
|
|
151
|
-
|------|------|---------|------|
|
|
152
|
-
| Create | (ctx, *User) error | INSERT INTO users (...) | 创建 |
|
|
153
|
-
| FindByID | (ctx, int64) (*User, error) | SELECT * FROM users WHERE id=$1 | 按 ID 查询 |
|
|
154
|
-
| FindByEmail | (ctx, string) (*User, error) | SELECT * FROM users WHERE email=$1 | 按邮箱查询 |
|
|
155
|
-
| Update | (ctx, *User) error | UPDATE users SET ... WHERE id=$1 | 更新 |
|
|
156
|
-
| Delete | (ctx, int64) error | DELETE FROM users WHERE id=$1 | 删除 |
|
|
157
|
-
| List | (ctx, offset, limit int) ([]*User, int64, error) | SELECT + COUNT | 分页列表 |
|
|
70
|
+
并发分析
|
|
71
|
+
goroutine: service/notification.go — 异步发送通知(配合 errgroup)
|
|
72
|
+
sync.Mutex: cache/in_memory.go — 缓存读写锁
|
|
73
|
+
channel: service/event.go — mpsc::Sender<Event>,生产者: handlers,消费者: event_processor
|
|
158
74
|
```
|
|
159
|
-
|
|
160
|
-
### 层 4: Model 层
|
|
161
|
-
|
|
162
|
-
**扫描文件**: `internal/model/*.go`
|
|
163
|
-
|
|
164
|
-
**提取内容**:
|
|
165
|
-
- struct 定义(字段 + 类型 + tag)
|
|
166
|
-
- GORM / Ent model 注解
|
|
167
|
-
- 验证 tag(`binding`, `validate`)
|
|
168
|
-
|
|
169
|
-
**输出示例**:
|
|
170
|
-
```
|
|
171
|
-
### User Model
|
|
172
|
-
- **路径**: `internal/model/user.go`
|
|
173
|
-
- **定义**:
|
|
174
|
-
```go
|
|
175
|
-
type User struct {
|
|
176
|
-
ID int64 `json:"id" gorm:"primaryKey;autoIncrement"`
|
|
177
|
-
Username string `json:"username" gorm:"uniqueIndex;size:50;not null" binding:"required,min=3,max=50"`
|
|
178
|
-
Email string `json:"email" gorm:"uniqueIndex;size:100;not null" binding:"required,email"`
|
|
179
|
-
Password string `json:"-" gorm:"size:255;not null" binding:"required,min=6"`
|
|
180
|
-
Role string `json:"role" gorm:"size:20;default:'user'" binding:"omitempty,oneof=admin user"`
|
|
181
|
-
CreatedAt time.Time `json:"created_at" gorm:"autoCreateTime"`
|
|
182
|
-
UpdatedAt time.Time `json:"updated_at" gorm:"autoUpdateTime"`
|
|
183
|
-
}
|
|
184
|
-
```
|
|
185
|
-
- **表名**: `users`
|
|
186
|
-
- **索引**: username (unique), email (unique)
|
|
187
|
-
```
|
|
188
|
-
|
|
189
|
-
### 层 5: 中间件层
|
|
190
|
-
|
|
191
|
-
**扫描文件**: `internal/middleware/*.go`
|
|
192
|
-
|
|
193
|
-
**提取内容**:
|
|
194
|
-
- 中间件函数签名
|
|
195
|
-
- 处理链路
|
|
196
|
-
- 应用位置
|
|
197
|
-
|
|
198
|
-
**输出示例**:
|
|
199
|
-
```
|
|
200
|
-
### 中间件链
|
|
201
|
-
| 顺序 | 中间件 | 用途 | 应用范围 |
|
|
202
|
-
|------|--------|------|----------|
|
|
203
|
-
| 1 | Logger | 请求日志(zap) | 全局 |
|
|
204
|
-
| 2 | Recovery | Panic 恢复 | 全局 |
|
|
205
|
-
| 3 | CORS | 跨域处理 | 全局 |
|
|
206
|
-
| 4 | Auth | JWT Token 验证 | /api/* |
|
|
207
|
-
| 5 | RBAC | 角色权限检查 | 管理接口 |
|
|
208
|
-
```
|
|
209
|
-
|
|
210
|
-
### 层 6: 并发模式分析
|
|
211
|
-
|
|
212
|
-
**扫描文件**: 含 `goroutine`, `chan`, `select`, `sync` 的文件
|
|
213
|
-
|
|
214
|
-
**提取内容**:
|
|
215
|
-
- goroutine 使用场景
|
|
216
|
-
- channel 类型和方向
|
|
217
|
-
- sync 原语(Mutex, WaitGroup, Once)
|
|
218
|
-
|
|
219
|
-
**输出示例**:
|
|
220
|
-
```
|
|
221
|
-
### 并发模式
|
|
222
|
-
| 模式 | 位置 | 说明 |
|
|
223
|
-
|------|------|------|
|
|
224
|
-
| goroutine + channel | service/notification.go | 异步发送通知 |
|
|
225
|
-
| sync.Mutex | cache/in_memory.go | 缓存读写锁 |
|
|
226
|
-
| sync.WaitGroup | service/batch.go | 批量操作等待 |
|
|
227
|
-
| errgroup | service/sync.go | 并发错误处理 |
|
|
228
|
-
```
|
|
229
|
-
|
|
230
|
-
## 输出模板
|
|
231
|
-
|
|
232
|
-
### README.md 章节结构
|
|
233
|
-
|
|
234
|
-
```markdown
|
|
235
|
-
# {项目名}
|
|
236
|
-
|
|
237
|
-
## 项目概述
|
|
238
|
-
服务功能描述
|
|
239
|
-
|
|
240
|
-
## 技术栈
|
|
241
|
-
| 技术 | 版本 | 用途 |
|
|
242
|
-
|------|------|------|
|
|
243
|
-
|
|
244
|
-
## 架构设计
|
|
245
|
-
### 架构图(ASCII)
|
|
246
|
-
### 数据流图
|
|
247
|
-
|
|
248
|
-
## 目录结构
|
|
249
|
-
cmd/ internal/ pkg/ 说明
|
|
250
|
-
|
|
251
|
-
## API 路由
|
|
252
|
-
路由表 + 中间件链
|
|
253
|
-
|
|
254
|
-
## 数据模型
|
|
255
|
-
struct 定义 + 关系
|
|
256
|
-
|
|
257
|
-
## 配置
|
|
258
|
-
环境变量 + 配置文件
|
|
259
|
-
|
|
260
|
-
## 构建 & 运行
|
|
261
|
-
go build / go run / make
|
|
262
|
-
```
|
|
263
|
-
|
|
264
|
-
## 模块边界识别
|
|
265
|
-
|
|
266
|
-
以下目录模式下的每个子目录视为独立模块(L2+ 分析时生成 MODULE-DOC.md):
|
|
267
|
-
|
|
268
|
-
| 层 | 扫描路径 | 模块判定规则 | MODULE-DOC slug 来源 |
|
|
269
|
-
|----|----------|-------------|---------------------|
|
|
270
|
-
| 命令入口层 | `cmd/{name}/` | 每个子目录 | 目录名 kebab-case |
|
|
271
|
-
| 内部包层 | `internal/{name}/` | 每个子目录 | 目录名 kebab-case |
|
|
272
|
-
| 公共包层 | `pkg/{name}/` | 每个子目录 | 目录名 kebab-case |
|
|
273
|
-
| API 层 | `api/` | 每个文件 | 文件名去后缀 kebab-case |
|
|
274
|
-
| 组件层 | 同 API/内部包层 | 3+ 文件的子目录 | 目录名 kebab-case |
|
|
275
|
-
|
|
276
|
-
**不视为独立模块的情况**:
|
|
277
|
-
- 单文件入口(如 `main.go`, `cmd/root.go`)
|
|
278
|
-
- 纯导出桶文件(仅有 re-export)
|
|
279
|
-
- 工具函数目录(`util/`, `helper/`)— 合并为一个模块
|
|
280
|
-
- `vendor/` 跳过
|
|
281
|
-
|
|
282
|
-
## Token 管理
|
|
283
|
-
|
|
284
|
-
- 大包(>15 文件)拆分为子任务
|
|
285
|
-
- 每个子任务分析 ≤10 文件
|
|
286
|
-
- `go.mod` 依赖分析单独一个子任务
|
|
287
|
-
- 生成文件(`*_gen.go`, `*.pb.go`)可跳过或简要分析
|
|
288
|
-
- `vendor/` 目录跳过
|
|
289
|
-
- `*_test.go` 文件单独分组分析
|