@dtt_siye/atool 1.4.0 → 1.5.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 (38) hide show
  1. package/README.md +97 -214
  2. package/README.md.atool-backup.20260410_114701 +299 -0
  3. package/VERSION +1 -1
  4. package/bin/atool.js +55 -9
  5. package/install.sh +14 -4
  6. package/lib/install-cursor.sh +22 -0
  7. package/lib/install-kiro.sh +26 -2
  8. package/lib/pre-scan.sh +3 -1
  9. package/lib/project-init.sh +28 -9
  10. package/package.json +1 -1
  11. package/skills/ai-project-architecture/SKILL.md +33 -534
  12. package/skills/ai-project-architecture/rules/architecture-validation.md +200 -0
  13. package/skills/ai-project-architecture/rules/compliance-check.md +83 -0
  14. package/skills/ai-project-architecture/rules/iron-laws.md +188 -0
  15. package/skills/ai-project-architecture/rules/migration.md +94 -0
  16. package/skills/ai-project-architecture/rules/refactoring.md +91 -0
  17. package/skills/ai-project-architecture/rules/testing.md +249 -0
  18. package/skills/ai-project-architecture/rules/verification.md +111 -0
  19. package/skills/atool-init/SKILL.md +24 -4
  20. package/skills/project-analyze/SKILL.md +29 -8
  21. package/skills/project-analyze/phases/phase1-setup.md +61 -4
  22. package/skills/project-analyze/phases/phase2-understand.md +129 -27
  23. package/skills/project-analyze/phases/phase3-graph.md +32 -4
  24. package/skills/project-analyze/prompts/understand-agent.md +156 -298
  25. package/skills/project-analyze/rules/java.md +69 -1
  26. package/skills/project-query/SKILL.md +64 -734
  27. package/skills/project-query/rules/aggregate-stats.md +301 -0
  28. package/skills/project-query/rules/data-lineage.md +228 -0
  29. package/skills/project-query/rules/impact-analysis.md +218 -0
  30. package/skills/project-query/rules/neighborhood.md +234 -0
  31. package/skills/project-query/rules/node-lookup.md +97 -0
  32. package/skills/project-query/rules/path-query.md +135 -0
  33. package/skills/software-architecture/SKILL.md +39 -501
  34. package/skills/software-architecture/rules/concurrency-ha.md +346 -0
  35. package/skills/software-architecture/rules/ddd.md +450 -0
  36. package/skills/software-architecture/rules/decision-workflow.md +155 -0
  37. package/skills/software-architecture/rules/deployment.md +508 -0
  38. package/skills/software-architecture/rules/styles.md +232 -0
@@ -1,16 +1,29 @@
1
- # Phase 2 UNDERSTAND Sub-Agent Prompt Template
1
+ # Phase 2 UNDERSTAND Sub-Agent Prompt Templates
2
2
 
3
3
  > **派发方**:Phase 2 控制器(主 agent)
4
- > **执行方**:sub-agent(每个模块 1 个)
4
+ > **执行方**:sub-agent(每个模块 2 个 stage)
5
5
  > **输出目标**:三层文档 → `atool-analysis/modules/{module-name}/` + `.atool-docs/modules/{module-name}/`
6
6
 
7
7
  ---
8
8
 
9
- ## Prompt Template
9
+ ## 设计原则
10
+
11
+ **原始问题**:单次 prompt 要求 AI 同时产出 7 个文件(425 行指令),AI 实际只能产出 1 个巨型文件。
12
+
13
+ **解决方案**:拆为 2 个 stage,每个 stage 只产出 1-3 个文件,降低单次指令复杂度。
14
+
15
+ - **Stage 1**(~150 行):提取结构化数据 → `data.json` + `README.md`(必须先完成)
16
+ - **Stage 2**(~120 行):基于 data.json 生成详细文档 → `api.md` + `data-model.md` + `dev-guide.md` + `prd.md` + `test-cases.md`
17
+
18
+ Stage 2 依赖 Stage 1 的 `data.json`,不可并行。Stage 2 中的 5 个文件可在一个 sub-agent 中顺序生成(每个文件有明确的独立章节)。
19
+
20
+ ---
21
+
22
+ ## Stage 1 Prompt(结构化数据提取 + 业务摘要)
10
23
 
11
24
  ```
12
25
  ## 任务
13
- 深度分析模块「{module_name}」,生成三层文档(业务摘要 + 开发指引 + PRD + 测试用例 + 机器数据)。
26
+ 分析模块「{module_name}」,提取结构化数据并撰写业务摘要。
14
27
 
15
28
  ## 已有数据(来自 Phase 1 pre-scan)
16
29
 
@@ -48,361 +61,206 @@
48
61
 
49
62
  ---
50
63
 
51
- ## 输出文件 1atool-analysis/modules/{module_name}/README.md
52
- (层1: 业务摘要 — 产品经理/业务人员必须能看懂)
64
+ ## 输出文件 1:.atool-docs/modules/{module_name}/data.json
65
+
66
+ 生成以下 JSON(所有字段必须存在,空值用 `[]` 或 `{}`):
67
+
68
+ ```json
69
+ {{
70
+ "module": "{module_name}",
71
+ "layer": "presentation|service|repository|domain|infrastructure|ui",
72
+ "business_domain": "用中文描述此模块的业务领域",
73
+ "responsibility": "用中文一句话描述核心职责",
74
+ "files": ["从 pre-scan 提取的实际源文件路径"],
75
+ "dependencies": [
76
+ {{"target": "other-module", "type": "imports", "files": ["具体引用文件"]}}
77
+ ],
78
+ "exposed_apis": [
79
+ {{"name": "方法名", "path": "/api/路径", "method": "POST", "file": "Controller文件名"}}
80
+ ],
81
+ "data_entities": [
82
+ {{"name": "实体名", "fields": ["字段列表"], "file": "Entity文件名"}}
83
+ ],
84
+ "data_flows": [
85
+ {{"trigger": "业务触发场景", "path": "Controller → Service → Repository → DB", "direction": "inbound|outbound"}}
86
+ ],
87
+ "quality_issues": [
88
+ {{"type": "high_complexity|dead_code|code_duplication|missing_error_handling", "file": "文件名", "detail": "具体问题描述", "severity": "high|medium|low"}}
89
+ ],
90
+ "quality_score": 0.75,
91
+ "business_terms": [
92
+ {{"term": "业务术语", "identifier": "代码标识符", "meaning": "业务含义"}}
93
+ ],
94
+ "security_issues": [
95
+ {{"type": "sql_injection|xss|hardcoded_secret|missing_auth", "file": "文件名", "line": 42, "detail": "具体漏洞描述", "severity": "high|medium|low"}}
96
+ ],
97
+ "test_coverage_estimate": {{
98
+ "has_tests": true,
99
+ "test_files": ["测试文件路径"],
100
+ "test_framework": "框架名",
101
+ "estimated_coverage": "high|medium|low|none",
102
+ "untested_apis": [],
103
+ "untested_functions": []
104
+ }},
105
+ "existing_docs": {{
106
+ "found": [],
107
+ "gaps": [],
108
+ "inconsistencies": []
109
+ }},
110
+ "refine_hints": {{
111
+ "detected_patterns": ["MVC", "CQRS"],
112
+ "key_decisions": ["从代码识别的设计决策"],
113
+ "cross_module_deps": ["跨模块依赖描述"]
114
+ }}
115
+ }}
116
+ ```
117
+
118
+ ## 输出文件 2:atool-analysis/modules/{module_name}/README.md
53
119
 
54
- 必须包含以下 4 节,**禁止出现代码块、类名、函数名**(那是 dev-guide.md 的内容):
120
+ 业务摘要,**严格控制在 150 行以内**。禁止出现代码块、类名、函数名。
121
+
122
+ 必须包含以下 4 节:
55
123
 
56
124
  ### 这个模块是做什么的
57
125
  2-3 句话,用纯业务语言描述。
58
- 示例:「用户服务负责管理系统中所有用户的注册、登录和个人信息维护,是系统的核心身份管理模块。」
59
126
 
60
127
  ### 它解决什么问题
61
128
  从业务视角描述,说清楚没有它会发生什么。
62
- 示例:「如果没有用户服务,系统无法识别谁在操作,也无法控制不同角色的访问权限。」
63
129
 
64
130
  ### 核心业务场景
65
- 3-5 个具体场景,主谓宾句式。每个场景 2-3 句描述完整业务流程。
66
- 示例:
67
- 1. **新用户注册**:用户提交注册信息后,系统验证邮箱唯一性,创建账户,发送验证邮件。
68
- 2. **用户登录**:用户输入凭证后,系统验证身份,生成会话令牌,记录登录日志。
131
+ 3-5 个具体场景,主谓宾句式。
69
132
 
70
133
  ### 关键业务概念
71
- ≤10 个,每个用 2 句话解释。表格格式:概念 | 含义 | 使用场景。
134
+ ≤10 个,表格格式:概念 | 含义 | 使用场景。
72
135
 
73
136
  ---
74
137
 
75
- ## 输出文件 2:atool-analysis/modules/{module_name}/api.md
76
- (层2a: 接口文档 调用方视角)
77
-
78
- 每个公开接口必须包含:
79
- - **签名**(方法名 + 参数类型 + 返回类型)
80
- - **用途**(一句话说清楚做什么)
81
- - **请求头**(Content-Type、Authorization、自定义 Header 等,标明必填/可选)
82
- - **参数说明**(每个参数:名称、类型、是否必填、含义)
83
- - **请求体 Schema**(JSON 格式,每个字段包含完整定义):
84
- | 字段名 | 类型 | 必填 | 校验规则 | 示例值 | 说明 |
85
- |--------|------|------|----------|--------|------|
86
- - **返回值说明**:
87
- - 成功响应(200/201):完整结构 + 每个字段含义
88
- - 失败响应(4xx/5xx):每种错误的响应结构
89
- - **完整错误码表**:
90
- | HTTP Status | Error Code | 触发条件 | 用户提示 | 解决方案 |
91
- |-------------|------------|----------|----------|----------|
92
- - **curl 调用示例**(包含请求和响应):
93
- ```bash
94
- # 请求
95
- curl -X POST http://localhost:8080/api/users \
96
- -H "Content-Type: application/json" \
97
- -H "Authorization: Bearer {token}" \
98
- -d '{"name": "张三", "email": "zhangsan@example.com"}'
99
-
100
- # 成功响应 (201)
101
- {"id": 1, "name": "张三", "email": "zhangsan@example.com", "createdAt": "..."}
102
-
103
- # 失败响应 (409)
104
- {"error": "DUPLICATE_EMAIL", "message": "该邮箱已注册"}
105
- ```
106
- - **频率限制**(如有,从代码中的 rate limiter/throttle 配置推断):
107
- - 限制规则(如 100 次/分钟)
108
- - 超限响应(429 状态码 + 响应体)
109
- - 重试策略(Retry-After header)
110
- - **版本兼容性**(如有,从 URL 路径版本号或 Header 版本控制推断)
138
+ ## 禁止行为
139
+ - 禁止在 README.md 中出现代码块、类名、函数名
140
+ - 禁止使用未替换的模板占位符
141
+ - 禁止编造不存在的 API、类、方法
111
142
 
112
- 没有公开 API 的模块可跳过此文件(在 README.md 中注明)。
143
+ ## 完成标志
144
+ 输出完成后,你必须声明:
145
+ "Stage 1 完成:data.json + README.md 已生成。"
146
+ ```
113
147
 
114
148
  ---
115
149
 
116
- ## 输出文件 3:atool-analysis/modules/{module_name}/data-model.md
117
- (层2b: 数据模型 — 仅当模块有数据实体时生成)
150
+ ## Stage 2 Prompt(详细文档生成)
118
151
 
119
- 必须包含:
120
-
121
- ### ER 关系图
122
- - **Mermaid ER 图**(erDiagram 格式,展示实体关系,包含字段类型和关系基数)
123
-
124
- ### 实体字段详表
125
- 对每个实体,提供完整字段定义表:
126
-
127
- | 字段名 | 类型 | 约束 | 默认值 | 索引 | 业务含义 | 验证规则 |
128
- |--------|------|------|--------|------|----------|----------|
129
-
130
- 约束列可选值:`NOT NULL`、`UNIQUE`、`PK`、`FK(表名.字段)`、组合约束
131
- 索引列可选值:`PRIMARY`、`UNIQUE`、`INDEX`、`COMPOSITE(字段列表)`、无
132
-
133
- ### 枚举值定义
134
- 对状态、类型等枚举字段,列出所有可选值:
135
-
136
- | 枚举字段 | 可选值 | 含义 | 状态流转规则 |
137
- |----------|--------|------|-------------|
138
-
139
- 示例:
140
- | `order_status` | `PENDING` | 待支付 | 创建后初始状态 |
141
- | | `PAID` | 已支付 | PENDING → PAID(支付成功) |
142
- | | `CANCELLED` | 已取消 | PENDING → CANCELLED(超时/手动) |
143
- | | `COMPLETED` | 已完成 | PAID → COMPLETED(确认收货) |
152
+ ```
153
+ ## 任务
154
+ 基于模块「{module_name}」的结构化数据,生成 5 个详细文档。
144
155
 
145
- 如有状态流转逻辑,附 Mermaid stateDiagram。
156
+ ## 输入数据
146
157
 
147
- ### 关联关系说明
148
- 对每对关联实体:
149
- - 关系类型:1:1 / 1:N / N:M
150
- - 关联字段:外键字段名 + 被引用字段
151
- - 级联策略:`CASCADE` / `SET NULL` / `RESTRICT` / `NO ACTION`(从 ORM 注解或 migration 文件推断)
152
- - 业务含义:用业务语言解释为什么需要这个关联
158
+ ### data.json(Stage 1 已生成)
159
+ 请先读取 .atool-docs/modules/{module_name}/data.json
153
160
 
154
- ### 数据量估算
155
- 从代码中的分页参数、批处理大小、缓存策略推断:
156
- - 预估单表数据量级(百/千/万/百万)
157
- - 分页默认值(pageSize)
158
- - 批处理大小(batchSize)
159
- - 缓存 TTL
161
+ ### 需要时读取的源文件
162
+ 如果 data.json 中的信息不足以完成某个文档,按需读取以下文件:
163
+ - API 相关:读取 exposed_apis 中列出的 Controller 文件
164
+ - 数据模型:读取 data_entities 中列出的 Entity 文件
165
+ - 架构约束:读取 dependencies 和 data_flows 涉及的关键文件
160
166
 
161
- ### 数据库迁移
162
- 如果可从 migration/flyway/liquibase/alembic 文件推断:
163
- - 迁移文件列表
164
- - 版本演进历史(关键 schema 变更)
167
+ ## 项目上下文
168
+ - 技术栈:{stack}
169
+ - 项目名:{project_name}
170
+ - 模块路径:{module_path}
165
171
 
166
- 没有数据实体的模块可跳过此文件。
172
+ ## 输出语言
173
+ 所有文档**必须中文**。
174
+ 例外(保持英文):代码块、文件路径、技术标识符、API 路径、包名。
167
175
 
168
176
  ---
169
177
 
170
- ## 输出文件 4:atool-analysis/modules/{module_name}/dev-guide.md
171
- (层2c: 开发指引 新开发者操作手册)
178
+ ## 输出文件 1:atool-analysis/modules/{module_name}/api.md
179
+ (接口文档调用方视角)
172
180
 
173
- > ⚠️ 此为初稿。Phase 2.5 将由 software-architecture 追加组件设计和 ADR 章节。
174
- > 初稿重点:准确描述开发操作流程和现有架构约束,不必追求架构文档的完整性。
181
+ data.json 中每个 exposed_api,生成文档:
182
+ - **签名** + **用途** + **参数说明表** + **返回值结构** + **错误码表** + **curl 示例**
183
+ - 无公开 API 的模块:在 README.md 注明,不生成此文件
175
184
 
176
- 必须包含以下 4 节:
185
+ ## 输出文件 2:atool-analysis/modules/{module_name}/data-model.md
186
+ (数据模型 — 仅当 data_entities 非空时生成)
177
187
 
178
- ### 如何添加新功能
179
- 具体到哪个文件、哪个类、按什么模式添加。附代码模板(不是完整实现,而是骨架)。
180
- 示例:「添加新的用户查询接口:1. 在 `UserController.java` 添加新的 @GetMapping 方法 → 2. 在 `UserService.java` 添加业务逻辑 → 3. 在 `UserRepository.java` 添加查询方法」
188
+ 包含:ER 关系图(Mermaid)+ 字段详表 + 枚举定义 + 关联关系 + 数据量估算
189
+ 无数据实体时跳过此文件。
181
190
 
182
- ### 如何修改数据模型
183
- 数据库迁移步骤、ORM 映射更新方式。
191
+ ## 输出文件 3:atool-analysis/modules/{module_name}/dev-guide.md
192
+ (开发指引 — Zero-KT 标准,新开发者操作手册)
184
193
 
185
- ### 常见 Bug 排查
186
- 按症状组织(3-5 个):
187
- | 症状 | 可能原因 | 排查步骤 | 解决方案 |
194
+ > ⚠️ 此为初稿。Phase 2.5 将由 software-architecture 追加组件设计和 ADR 章节。
188
195
 
189
- ### 架构约束
190
- 不允许做什么、为什么。
191
- 示例:「禁止在 Controller 层直接操作 Repository — 必须经过 Service 层,因为 Service 包含事务管理和业务校验逻辑。」
196
+ 必须包含 4 节:
197
+ 1. **如何添加新功能**:具体到文件/类/模式,附代码骨架(含实际包路径和类名,从 data.json 的 files 提取)
198
+ 2. **如何修改数据模型**:迁移步骤、ORM 映射更新(引用实际 Entity 类名和字段)
199
+ 3. **常见 Bug 排查**:按症状组织(3-5 个),表格格式:症状 | 可能原因 | 排查命令 | 修复方法
200
+ 4. **架构约束**:不允许做什么、为什么(如"Controller 不允许直接调用 Mapper"、"Entity 不允许引用 Service")
192
201
 
193
- ---
194
-
195
- ## 输出文件 5:atool-analysis/modules/{module_name}/prd.md
196
- (层2d: 模块级 PRD — 按钮级别功能定义)
202
+ ## 输出文件 4:atool-analysis/modules/{module_name}/prd.md
203
+ (模块级 PRD — 按钮级别功能定义,客户交付级初稿)
197
204
 
198
205
  > ⚠️ 此为初稿。Phase 2.5 将按 requirements-writer 的 8 节标准模板精炼。
199
- > 初稿重点:准确提取业务逻辑和功能点,不必追求格式完美。
200
-
201
- 质量标准:开发者拿到此文档 + api.md + data-model.md,无需再问产品经理任何问题即可完成全部开发。
202
-
203
- 必须包含以下 4 节:
204
-
205
- ### 1. 模块概述
206
- - **业务问题**(1-2 句,为什么需要这个模块)
207
- - **解决方案**(1-2 句,这个模块怎么解决)
208
- - **成功标准**(3-5 个可度量 KPI,从代码中的监控指标/日志/计数器推断)
209
- 示例:「注册转化率 > 80%」「API 平均响应时间 < 200ms」「错误率 < 0.1%」
210
-
211
- ### 2. 功能需求(按页面/功能点组织)
212
- 对每个功能点/页面:
213
-
214
- #### 2.x {功能名}
215
- - **用户故事**:As a [角色], I want to [操作] so that [收益]
216
- - **验收标准**:
217
- - [ ] 条件1
218
- - [ ] 条件2
219
- - **UI 交互定义**(从代码中的组件/模板/路由推断):
220
- - 页面布局(文字描述或 ASCII 线框图)
221
- - 按钮行为:`[按钮名]` → 触发 `{API}` → 成功/失败反馈
222
- - 输入字段:
223
- | 字段 | 类型 | 必填 | 校验规则 | 默认值 | 占位文本 |
224
- |------|------|------|----------|--------|----------|
225
- - 四种状态:加载中 / 空数据 / 错误 / 正常(每种状态的 UI 表现)
226
- - 权限控制:哪些角色可见/可操作(从代码中的 RBAC/权限注解推断)
227
- - **边界条件**:
228
- - 并发场景(如多用户同时操作同一资源)
229
- - 数据量极端情况(空列表/超大列表/超长文本)
230
- - 网络异常处理(超时/断线/重试策略)
231
-
232
- ### 3. 非功能需求
233
- - **性能**:API 响应时间要求(从代码中的超时设置/缓存配置/异步处理推断)
234
- - **安全**:认证方式 / 授权粒度 / 数据脱敏规则(从代码的安全配置推断)
235
- - **兼容性**:浏览器/设备/API 版本兼容(从代码中的 polyfill/UA 检测/版本号推断)
236
-
237
- ### 4. 非目标(Not in Scope)
238
- 本模块明确不负责的功能(从代码中的 TODO/FIXME、未实现接口、注释中的 "out of scope" 推断)。
239
- 列出每项非目标及推断依据。
240
-
241
- ---
242
-
243
- ## 输出文件 6:atool-analysis/modules/{module_name}/test-cases.md
244
- (层2e: 模块级测试用例 — QA 直接可用)
245
-
246
- 质量标准:QA 团队可直接用此文档编写自动化测试脚本。
247
-
248
- 必须包含以下 4 节:
249
-
250
- ### 1. 功能测试用例
251
- 对每个核心 API/功能,生成完整用例表:
252
-
253
- | 用例 ID | 场景 | 前置条件 | 操作步骤 | 预期结果 | 优先级 |
254
- |---------|------|----------|----------|----------|--------|
255
- | TC-{module}-001 | 正常创建用户 | 用户已登录+有权限 | POST /api/users {...} | 201 + 返回用户对象 | P0 |
256
- | TC-{module}-002 | 缺少必填字段 | 同上 | POST /api/users {} | 400 + 错误消息 | P0 |
257
- | TC-{module}-003 | 重复邮箱 | 邮箱已存在 | POST /api/users {...} | 409 + 冲突消息 | P1 |
258
-
259
- 优先级定义:
260
- - P0:核心正常路径,必须通过
261
- - P1:常见异常路径,必须通过
262
- - P2:边界条件,应当通过
263
- - P3:极端场景,建议通过
264
-
265
- ### 2. 边界测试
266
- 针对每个输入字段,覆盖以下边界条件:
267
- - 空值/null/undefined
268
- - 超长字符串(>255 字符、>65535 字符)
269
- - 特殊字符(SQL 注入 payload:`' OR 1=1 --`、XSS payload:`<script>alert(1)</script>`)
270
- - 超大数值(Integer.MAX_VALUE、负数、0、小数)
271
- - 并发竞争(两个请求同时创建相同资源 → 预期仅一个成功)
272
- - 空列表 / 超大分页(pageSize=0、pageSize=10000)
273
-
274
- ### 3. 安全测试
275
- - 未授权访问(无 Token → 401)
276
- - 角色越权(普通用户访问管理员接口 → 403)
277
- - CSRF 防护验证
278
- - XSS payload 注入(在所有输入字段)
279
- - SQL 注入 payload(在所有查询参数)
280
- - 敏感数据泄露(response 中不应包含密码/密钥/内部路径)
281
- - 水平越权(用户 A 访问用户 B 的资源 → 403/404)
282
-
283
- ### 4. 集成测试建议
284
- - 依赖模块的 Mock 策略(哪些模块需要 mock、推荐 mock 方式)
285
- - 端到端场景描述(完整业务流程的测试路径)
286
- - 测试数据准备(需要预置哪些数据、推荐的 seed 脚本)
287
-
288
- ---
289
-
290
- ## 已有文档检测
291
-
292
- 在生成文档前,先检查模块目录中是否存在以下文件:
293
- - README.md、PRD.md、CHANGELOG.md、API.md、docs/*.md
294
-
295
- 如果存在,读取其内容并与代码实现进行对比:
296
- 1. 代码中已实现但文档未描述的功能 → 补充到 prd.md,标注 `[补齐:代码中已实现但文档未记录]`
297
- 2. 文档中描述但代码未实现的功能 → 在 prd.md 中标注 `[待实现:文档有描述但代码中未找到实现]`
298
- 3. 文档与代码不一致的地方 → 标注 `[不一致:文档说X,代码实际做Y]`
299
-
300
- 将检测结果写入 data.json 的 `existing_docs` 字段。
301
-
302
- ---
303
-
304
- ## 输出文件 7:.atool-docs/modules/{module_name}/data.json
305
- (层3: 机器数据 — Phase 3 图谱构建使用)
306
-
307
- ```json
308
- {
309
- "module": "{module_name}",
310
- "layer": "presentation|service|repository|domain|infrastructure|ui",
311
- "business_domain": "用中文描述此模块的业务领域",
312
- "responsibility": "用中文一句话描述核心职责",
313
- "files": ["src/path/to/file1.java", "src/path/to/file2.java"],
314
- "dependencies": [
315
- {"target": "other-module", "type": "imports", "files": ["具体引用文件"]}
316
- ],
317
- "exposed_apis": [
318
- {"name": "createUser", "path": "/api/users", "method": "POST", "file": "UserController.java"}
319
- ],
320
- "data_entities": [
321
- {"name": "User", "fields": ["id", "name", "email", "role"], "file": "User.java"}
322
- ],
323
- "data_flows": [
324
- {"trigger": "用户注册", "path": "Controller → Service → Repository → DB", "direction": "inbound"}
325
- ],
326
- "quality_issues": [
327
- {"type": "high_complexity", "file": "UserService.java", "detail": "方法 createUser 圈复杂度 15", "severity": "medium"}
328
- ],
329
- "quality_score": 0.75,
330
- "business_terms": [
331
- {"term": "审批流", "identifier": "approval_flow", "meaning": "多级审批的流程定义"}
332
- ],
333
- "security_issues": [
334
- {"type": "sql_injection|xss|hardcoded_secret|insecure_deserialization|path_traversal|missing_auth", "file": "UserController.java", "line": 42, "detail": "用户输入直接拼接到 SQL 查询中,未使用参数化查询", "severity": "high|medium|low"}
335
- ],
336
- "test_coverage_estimate": {
337
- "has_tests": true,
338
- "test_files": ["tests/user.test.ts", "tests/user.spec.ts"],
339
- "test_framework": "jest|junit|pytest|go_test|...",
340
- "estimated_coverage": "high|medium|low|none",
341
- "untested_apis": ["DELETE /api/users/{id}", "PATCH /api/users/{id}/role"],
342
- "untested_functions": ["UserService.batchImport", "UserService.exportCsv"]
343
- },
344
- "existing_docs": {
345
- "found": ["README.md", "docs/api.md"],
346
- "gaps": ["PRD 缺失用户删除功能描述", "API 文档缺少错误码表"],
347
- "inconsistencies": ["文档说支持批量删除,代码中未实现", "文档中的字段名与代码不一致:文档用 userName,代码用 username"]
348
- }
349
- ,
350
- "refine_hints": {
351
- "detected_patterns": ["MVC", "CQRS", "Event-Driven"],
352
- "key_decisions": ["选择 Redis 作为缓存层因为...", "使用 JWT 而非 Session 因为..."],
353
- "cross_module_deps": ["依赖 user-service 的 /api/users/{id}", "消费 order-events 队列"]
354
- }
355
- }
356
- ```
357
206
 
358
- **refine_hints 说明**:为 Phase 2.5 精炼提供线索,避免精炼 agent 重新读源码。
359
- - `detected_patterns`: sub-agent 识别到的架构模式名称
360
- - `key_decisions`: 从代码中识别的关键设计决策(原始描述,无需 ADR 格式)
361
- - `cross_module_deps`: 跨模块依赖的具体描述(API 路径、事件名、共享实体)
362
-
363
- 字段说明:
364
- - `layer`:架构层(从路径和类名推断)
365
- - `quality_score`:0.0-1.0(从 quality_issues 的数量和严重程度计算)
366
- - `quality_issues`:实际发现的代码质量问题(不是通用建议)
367
- - `security_issues`:实际发现的安全问题(从代码扫描中发现的具体漏洞,不是通用建议)
368
- - `test_coverage_estimate`:测试覆盖估算(从测试文件存在性和测试用例覆盖的 API/函数推断)
369
- - `existing_docs`:已有文档检测结果(发现的文档、缺失内容、与代码的不一致)
370
- - 所有数组字段如果为空则使用空数组 `[]`,不要省略字段
371
- - 所有对象字段如果无数据则使用空对象 `{}` 或保留结构填充默认值,不要省略字段
207
+ 必须包含 4 节:
208
+ 1. **模块概述**:业务问题 + 解决方案 + 成功标准(可度量 KPI,如"用户下单到支付完成 < 3步")
209
+ 2. **功能需求**:按页面/功能点组织,每个功能点含:
210
+ - 功能编号(FR-{MOD}-001 格式,{MOD}为模块缩写大写)
211
+ - 用户故事(As a... I want... So that...)
212
+ - 验收标准(Given-When-Then 格式,至少 1 条)
213
+ - UI 交互描述(按钮/表单/列表的具体行为)
214
+ - 权限要求
215
+ 3. **非功能需求**:每条标注编号(NFR-{MOD}-001),覆盖性能/安全/兼容性,给出具体量化指标
216
+ - 性能示例:API 响应 < 200ms(P95),列表加载 < 1s
217
+ - 安全示例:所有写入 API 需鉴权,敏感数据加密存储
218
+ 4. **非目标**:明确不负责的功能(防止需求蔓延)
219
+
220
+ **质量要求**:prd.md 必须 50 行。如果功能较少,每个功能点的验收标准和 UI 交互描述必须更详细。
221
+
222
+ ## 输出文件 5:atool-analysis/modules/{module_name}/test-cases.md
223
+ (测试用例 — QA 直接可用)
224
+
225
+ 必须包含 4 节:
226
+ 1. **功能测试用例**:用例表(ID/场景/前置条件/操作/预期/优先级)
227
+ 2. **边界测试**:空值/超长/特殊字符/并发
228
+ 3. **安全测试**:未授权/越权/XSS/SQL注入
229
+ 4. **集成测试建议**:Mock 策略/E2E 场景/测试数据
372
230
 
373
231
  ---
374
232
 
375
233
  ## 禁止行为
376
- - 禁止在 README.md 中出现代码块、类名、函数名(那是 dev-guide.md 和 api.md 的内容)
377
- - 禁止使用未替换的模板占位符(com/example/、{{PROJECT_NAME}}、xxx、TODO、...)
378
234
  - 禁止使用通用建议替代实际分析结果(如"建议添加单元测试")
379
- - 禁止重新提取 pre-scan 已包含的结构信息
235
+ - 禁止使用未替换的模板占位符
380
236
  - 禁止编造不存在的 API、类、方法
237
+ - 禁止在 api.md 中遗漏 data.json 中列出的任何 exposed_api
381
238
 
382
- ## 深度级别追加指令
383
- {depth_instructions}
239
+ ## 完成标志
240
+ 输出完成后,你必须声明:
241
+ "Stage 2 完成:api.md + data-model.md + dev-guide.md + prd.md + test-cases.md 已生成。"
384
242
  ```
385
243
 
386
244
  ---
387
245
 
388
246
  ## Depth-Specific Instructions
389
247
 
390
- **重要:`{depth_instructions}` 变量必须内联替换为完整指令内容,禁止只写"L3 分析"等抽象标签。**
248
+ **重要:`{depth_instructions}` 变量必须内联替换到 Stage 1 prompt 末尾。**
391
249
 
392
250
  具体填充方式(根据当前 depth 值):
393
251
 
394
252
  - **L1**: 此 prompt 不使用(Phase 2 跳过,使用 pre-scan 数据直接生成 lite 文档)
395
253
  - **L2**: 留空(使用上方标准模板即可)
396
- - **L3**: 内联以下内容:
254
+ - **L3**: 内联以下内容到 Stage 1 末尾:
397
255
  ```
398
256
  ## L3 深度追加要求
399
- 在标准输出之外,dev-guide.md 额外包含:
257
+ dev-guide.md 额外包含:
400
258
  1. 每个核心函数的完整签名 + 参数说明 + 返回值 + 调用链
401
259
  2. 设计模式识别(Factory/Strategy/Observer 等)+ 为什么选择此模式
402
260
  3. 设计决策记录(ADR 格式):每个重要决策的 选择/替代方案/理由/权衡
403
261
  4. 模块内部架构图(Mermaid 类图或组件图)
404
262
  ```
405
- - **L4**: 内联以下内容:
263
+ - **L4**: 内联以下内容到 Stage 1 末尾:
406
264
  ```
407
265
  ## L4 函数级追加要求
408
266
  在 L3 基础上,额外分析:
@@ -411,7 +269,7 @@
411
269
  3. 安全审计点(SQL 注入、XSS、未验证输入、硬编码凭证)
412
270
  4. data.json 额外字段:call_chains[], performance_hotspots[], security_issues[]
413
271
  ```
414
- - **L5**: 内联以下内容:
272
+ - **L5**: 内联以下内容到 Stage 1 末尾:
415
273
  ```
416
274
  ## L5 跨模块追加要求
417
275
  在 L4 基础上,额外分析:
@@ -4,13 +4,81 @@
4
4
 
5
5
  ## 模块发现策略
6
6
 
7
- - **Maven 多模块**:检查根 `pom.xml` 的 `<modules>` 标签,每个 `<module>` 为独立分析单元
7
+ ### 基础发现
8
+
9
+ - **Maven 多模块**:检查根 `pom.xml` 的 `<modules>` 标签,识别所有 `<module>`
8
10
  - **Gradle 多模块**:检查 `settings.gradle` / `settings.gradle.kts` 的 `include` 声明
9
11
  - **包路径推断**:从 `pom.xml` `<groupId>` 推断(跳过 `org.springframework.*` 等框架 groupId),备选读首个 `.java` 文件的 `package` 声明;禁止使用 `com.example` 等占位符
10
12
  - **Java 版本推断**:从 `<java.version>` / `sourceCompatibility` 提取;禁止默认使用 JDK 17+
11
13
 
12
14
  模块间依赖拓扑:从所有模块 pom.xml/build.gradle 提取,检测循环依赖(标记 Critical)。
13
15
 
16
+ ### Maven 多模块聚合规则(关键)
17
+
18
+ **问题**:Maven 多模块项目通常包含大量基础设施 starter(如 `dtt-spring-boot-starter-mybatis`),这些不应作为独立分析单元。需要将子模块聚合为有业务含义的分析模块。
19
+
20
+ **聚合规则**(按优先级):
21
+
22
+ 1. **业务模块**(`module-*` / `*-service` / `*-api`)→ 保持独立分析单元
23
+ - 匹配模式:目录名含 `module-`、`service`、`api`、`app`、`application`
24
+ - 示例:`dtt-module-mall`、`dtt-module-system`、`dtt-gateway` → 各自独立
25
+
26
+ 2. **框架/基础设施模块**(`framework`、`common`、`*-starter-*`)→ **聚合为单个 `framework` 模块**
27
+ - 匹配模式:目录名含 `framework`、`common`、`starter`、`lib`、`core`、`shared`、`infrastructure`
28
+ - 示例:`dtt-framework/dtt-common` + `dtt-framework/dtt-spring-boot-starter-mybatis` + ... → 聚合为 `dtt-framework`
29
+ - 聚合后只分析框架的公共 API 和扩展点,不逐个分析 starter
30
+
31
+ 3. **依赖管理模块**(`dependencies` / `bom` / `parent`)→ **跳过**(无源码)
32
+ - 匹配模式:目录名含 `dependencies`、`bom`、`parent`,且该目录下无 `.java` 文件
33
+ - 示例:`dtt-dependencies` → 跳过
34
+
35
+ 4. **脚手架/模板模块**(`scaffold` / `template` / `demo`)→ **跳过**
36
+ - 匹配模式:目录名含 `scaffold`、`template`、`demo`、`example`、`sample`
37
+
38
+ **聚合后的模块列表呈现**:
39
+
40
+ ```
41
+ 原始发现:71 个子模块
42
+ 聚合后:16 个分析模块
43
+
44
+ 业务模块(12 个):
45
+ ✅ dtt-gateway — API 网关
46
+ ✅ dtt-module-system — 系统管理
47
+ ✅ dtt-module-infra — 基础设施
48
+ ✅ dtt-module-member — 会员管理
49
+ ✅ dtt-module-bpm — 流程引擎
50
+ ✅ dtt-module-pay — 支付
51
+ ✅ dtt-module-report — 报表
52
+ ✅ dtt-module-mp — 微信小程序
53
+ ✅ dtt-module-mall — 商城
54
+ ✅ dtt-module-crm — CRM
55
+ ✅ dtt-module-erp — ERP
56
+ ✅ dtt-module-ai — AI
57
+ ✅ dtt-module-iot — IoT
58
+ ✅ dtt-module-invest — 投资
59
+
60
+ 框架模块(1 个):
61
+ 📦 dtt-framework — 聚合 20 个 starter(common/mybatis/redis/mq/...)
62
+
63
+ 已跳过(1 个):
64
+ ⏭️ dtt-dependencies — 纯依赖管理,无源码
65
+ ```
66
+
67
+ **聚合决策树**(AI 在 Phase 1 执行时遵循):
68
+
69
+ ```
70
+ 对每个发现的子模块:
71
+ 1. 该目录下是否有 .java 源文件?
72
+ → 否:标记 "skip",跳过
73
+ → 是:继续
74
+ 2. 目录名是否匹配 framework/starter/common/core/lib/shared?
75
+ → 是:归入 "framework" 聚合模块
76
+ → 否:继续
77
+ 3. 目录名是否匹配 module-*/service/api/app?
78
+ → 是:保持为独立业务模块
79
+ → 否:归入最近的父级业务模块
80
+ ```
81
+
14
82
  ## 入口识别
15
83
 
16
84
  | 标记 | 含义 |