@dtt_siye/atool 1.2.1 → 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/VERSION +1 -1
- package/hooks/session-start +9 -12
- package/lib/export-analysis.sh +100 -0
- package/lib/install-kiro.sh +11 -6
- package/lib/install-skills.sh +16 -0
- package/lib/knowledge-graph.sh +490 -83
- package/lib/pre-scan.sh +70 -5
- package/package.json +1 -1
- package/skills/doc-standards-enforcer/SKILL.md +200 -220
- package/skills/doc-standards-enforcer/examples/valid-document-example.md +5 -5
- package/skills/doc-standards-enforcer/references/101-standards-summary.md +17 -17
- package/skills/project-analyze/SKILL.md +157 -124
- package/skills/project-analyze/phases/{phase0-discovery.md → archive/phase0-discovery.md} +6 -2
- package/skills/project-analyze/phases/{phase1-inventory.md → archive/phase1-inventory.md} +10 -0
- package/skills/project-analyze/phases/{phase2-deep-analysis.md → archive/phase2-deep-analysis.md} +20 -0
- package/skills/project-analyze/phases/{phase3-knowledge-graph.md → archive/phase3-knowledge-graph.md} +31 -0
- package/skills/project-analyze/phases/{phase3a-multi-dimensional.md → archive/phase3a-multi-dimensional.md} +13 -0
- package/skills/project-analyze/phases/{phase5-synthesis.md → archive/phase5-synthesis.md} +20 -0
- package/skills/project-analyze/phases/phase1-setup.md +182 -0
- package/skills/project-analyze/phases/phase2-understand.md +114 -0
- package/skills/project-analyze/phases/phase2.5-refine.md +284 -0
- package/skills/project-analyze/phases/phase3-graph.md +77 -0
- package/skills/project-analyze/phases/phase4-synthesize.md +241 -0
- package/skills/project-analyze/phases/phase5-export.md +207 -0
- package/skills/project-analyze/prompts/{deep-analysis-agent.md → archive/deep-analysis-agent.md} +14 -1
- package/skills/project-analyze/prompts/understand-agent.md +424 -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/README.md +1 -1
- package/skills/requirements-writer/SKILL.md +423 -282
- package/skills/requirements-writer/examples/prd-outline-example.md +5 -5
- package/skills/requirements-writer/templates/module-prd-template.md +15 -15
- package/skills/requirements-writer/templates/prd-outline-template.md +3 -3
- package/skills/requirements-writer/templates/user-story-template.md +23 -23
- package/skills/software-architecture/SKILL.md +318 -17
- package/templates/CLAUDE.md.android +17 -0
- package/templates/CLAUDE.md.devops +17 -0
- package/templates/CLAUDE.md.generic +17 -0
- package/templates/CLAUDE.md.go +17 -0
- package/templates/CLAUDE.md.harmony +17 -0
- package/templates/CLAUDE.md.java +17 -0
- package/templates/CLAUDE.md.mobile-flutter +17 -0
- package/templates/CLAUDE.md.mobile-react-native +17 -0
- package/templates/CLAUDE.md.mobile-swift +17 -0
- package/templates/CLAUDE.md.python +17 -0
- package/templates/CLAUDE.md.rust +17 -0
- package/templates/CLAUDE.md.rust-tauri +17 -0
- package/templates/CLAUDE.md.web +17 -0
- package/templates/cursor-rules.android.mdc +17 -0
- package/templates/cursor-rules.devops.mdc +17 -0
- package/templates/cursor-rules.generic.mdc +17 -0
- package/templates/cursor-rules.go.mdc +17 -0
- package/templates/cursor-rules.harmony.mdc +17 -0
- package/templates/cursor-rules.java.mdc +17 -0
- package/templates/cursor-rules.mobile-flutter.mdc +17 -0
- package/templates/cursor-rules.mobile-react-native.mdc +17 -0
- package/templates/cursor-rules.mobile-swift.mdc +17 -0
- package/templates/cursor-rules.python.mdc +17 -0
- package/templates/cursor-rules.rust-tauri.mdc +17 -0
- package/templates/cursor-rules.rust.mdc +17 -0
- package/templates/cursor-rules.web.mdc +17 -0
- package/templates/kiro-steering.android.md +6 -0
- package/templates/kiro-steering.devops.md +6 -0
- package/templates/kiro-steering.generic.md +6 -0
- package/templates/kiro-steering.go.md +6 -0
- package/templates/kiro-steering.harmony.md +6 -0
- package/templates/kiro-steering.java.md +6 -0
- package/templates/kiro-steering.mobile-flutter.md +6 -0
- package/templates/kiro-steering.mobile-react-native.md +6 -0
- package/templates/kiro-steering.mobile-swift.md +6 -0
- package/templates/kiro-steering.python.md +6 -0
- package/templates/kiro-steering.rust-tauri.md +6 -0
- package/templates/kiro-steering.rust.md +6 -0
- package/templates/kiro-steering.web.md +6 -0
- package/templates/shared/hard-rules.md +21 -0
- /package/skills/project-analyze/phases/{phase0.5-prescan.md → archive/phase0.5-prescan.md} +0 -0
- /package/skills/project-analyze/phases/{phase2a-l4-analysis.md → archive/phase2a-l4-analysis.md} +0 -0
- /package/skills/project-analyze/phases/{phase2b-l5-analysis.md → archive/phase2b-l5-analysis.md} +0 -0
- /package/skills/project-analyze/phases/{phase4-code-quality.md → archive/phase4-code-quality.md} +0 -0
- /package/skills/project-analyze/phases/{phase6-validation.md → archive/phase6-validation.md} +0 -0
- /package/skills/project-analyze/prompts/{code-review-agent.md → archive/code-review-agent.md} +0 -0
- /package/skills/project-analyze/prompts/{inventory-agent.md → archive/inventory-agent.md} +0 -0
- /package/skills/project-analyze/prompts/{l4-analysis-agent.md → archive/l4-analysis-agent.md} +0 -0
|
@@ -0,0 +1,241 @@
|
|
|
1
|
+
# Phase 4: SYNTHESIZE(主 Agent — 聚合模式)
|
|
2
|
+
|
|
3
|
+
**目标**:以 Phase 2.5 精炼后的模块文档 + 知识图谱为数据源,**聚合**为项目级交付物。Phase 4 不再从零生成模块级内容,而是聚合、补全项目级独有文档、并生成 PROJECT-DELIVERABLE.md 总览入口。
|
|
4
|
+
|
|
5
|
+
## 前置检查
|
|
6
|
+
|
|
7
|
+
1. 确认 `phases.phase2_understand == "completed"`(必须)
|
|
8
|
+
2. 检查 `phases.phase3_graph`:
|
|
9
|
+
- `"completed"` → 可使用图谱数据生成完整文档
|
|
10
|
+
- `"failed"` → 跳过图谱相关输出(data-flow.mmd、module-dependencies.mmd),其余正常生成
|
|
11
|
+
|
|
12
|
+
## 输入数据
|
|
13
|
+
|
|
14
|
+
- 模块文档(必须):`atool-analysis/modules/*/README.md`
|
|
15
|
+
- 模块精炼文档(必须):`atool-analysis/modules/*/prd.md`、`dev-guide.md`、`test-cases.md`
|
|
16
|
+
- 模块数据(必须):`.atool-docs/modules/*/data.json`
|
|
17
|
+
- 图谱数据(可选):`.atool-docs/knowledge-graph.json`
|
|
18
|
+
- 五维分析(可选):`.atool-docs/multi-dimensional-analysis.json`
|
|
19
|
+
|
|
20
|
+
## 步骤
|
|
21
|
+
|
|
22
|
+
### 4.1 聚合项目概述(overview/)
|
|
23
|
+
|
|
24
|
+
#### 4.1a summary.md(聚合)
|
|
25
|
+
|
|
26
|
+
从各模块 `README.md` 提取摘要,拼接为项目级概述:
|
|
27
|
+
- 第 1 段:Executive Summary(CEO/VP 可读级别,3-5 句)
|
|
28
|
+
- 第 2 段:模块清单表(模块名 / 职责 / 状态)
|
|
29
|
+
- 第 3 段:技术栈概述(从 `analysis-state.json` 的 `detected_stack` 提取)
|
|
30
|
+
|
|
31
|
+
#### 4.1b architecture.md(聚合 + 项目级补全)
|
|
32
|
+
|
|
33
|
+
从各模块精炼后的 `dev-guide.md` 的架构章节聚合:
|
|
34
|
+
1. **全局架构图**(Mermaid graph TB):从各模块的组件设计章节提取模块名和依赖关系,生成项目级视图
|
|
35
|
+
2. **各模块架构摘要**:每个模块一段(模块名 / 分层 / 关键 ADR)
|
|
36
|
+
3. **ADR 汇总**:从各模块 dev-guide.md 提取所有 ADR,汇总为项目级 ADR 列表
|
|
37
|
+
4. **项目级补全**(引用 software-architecture A/E/F 模板结构):
|
|
38
|
+
- A. Architecture Summary:Business Context + Technical Drivers + Style Decision
|
|
39
|
+
- E. Risk and Trade-offs:项目级风险登记表
|
|
40
|
+
- F. Evolution Roadmap:分阶段演进表
|
|
41
|
+
|
|
42
|
+
#### 4.1c tech-stack.md(保持不变)
|
|
43
|
+
|
|
44
|
+
从 Phase 1 pre-scan 数据聚合,无需精炼。
|
|
45
|
+
|
|
46
|
+
#### 4.1d getting-started.md(聚合)
|
|
47
|
+
|
|
48
|
+
从各模块 `dev-guide.md` 的快速启动部分聚合。
|
|
49
|
+
|
|
50
|
+
### 4.2 生成 Mermaid 图表(diagrams/)
|
|
51
|
+
|
|
52
|
+
将架构和数据流写成独立的 `.mmd` 文件:
|
|
53
|
+
- `atool-analysis/diagrams/architecture.mmd` — graph TB 整体架构
|
|
54
|
+
- `atool-analysis/diagrams/module-dependencies.mmd` — 模块依赖(从 data.json dependencies 聚合)
|
|
55
|
+
- `atool-analysis/diagrams/data-flow.mmd` — 核心数据流(从 data.json data_flows 聚合)
|
|
56
|
+
|
|
57
|
+
**如果 Phase 3 失败**:`module-dependencies.mmd` 和 `data-flow.mmd` 跳过(缺少图谱数据),在 `architecture.md` 中注明。
|
|
58
|
+
|
|
59
|
+
### 4.3 生成质量报告(quality/)
|
|
60
|
+
|
|
61
|
+
#### 4.3a `code-review.md`
|
|
62
|
+
从所有 data.json 的 `quality_issues` 聚合,按严重程度排序。包含:
|
|
63
|
+
- 总体质量评分
|
|
64
|
+
- 按维度分析(复杂度、耦合度、代码风格等)
|
|
65
|
+
- Top 10 最严重问题(文件路径 + 问题描述 + 建议修复方式)
|
|
66
|
+
|
|
67
|
+
**深化内容**(在上述基础分析之后追加):
|
|
68
|
+
|
|
69
|
+
##### 重构优先级矩阵
|
|
70
|
+
|
|
71
|
+
从所有 data.json 的 `quality_issues` 聚合,按 impact × effort 排序:
|
|
72
|
+
|
|
73
|
+
```
|
|
74
|
+
| 问题 | 影响范围(模块数) | 修复工作量(人天) | 业务风险 | 优先级 |
|
|
75
|
+
|------|-------------------|-------------------|---------|--------|
|
|
76
|
+
| {问题描述} | {N 个模块} | {X 人天} | HIGH/MED/LOW | P0-P3 |
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
##### 架构迁移路线图(如架构问题严重)
|
|
80
|
+
|
|
81
|
+
当架构维度评分 < 60 或存在循环依赖 > 3 处时生成:
|
|
82
|
+
|
|
83
|
+
```
|
|
84
|
+
Phase 1(1-2周): {快速修复}
|
|
85
|
+
- 目标:解耦循环依赖、修复分层违反
|
|
86
|
+
- 涉及模块:{列出}
|
|
87
|
+
- 风险:{评估}
|
|
88
|
+
- 验证方式:{依赖图无环 + 单元测试通过}
|
|
89
|
+
|
|
90
|
+
Phase 2(2-4周): {中期重构}
|
|
91
|
+
- 目标:抽取共享服务、统一错误处理
|
|
92
|
+
- 涉及模块:{列出}
|
|
93
|
+
- 风险:{评估}
|
|
94
|
+
- 验证方式:{集成测试通过 + 耦合度下降}
|
|
95
|
+
|
|
96
|
+
Phase 3(1-3月): {长期优化}
|
|
97
|
+
- 目标:架构模式迁移(如单体→模块化/微服务)
|
|
98
|
+
- 涉及模块:{全局}
|
|
99
|
+
- 风险:{评估}
|
|
100
|
+
- 验证方式:{E2E 测试 + 性能基准不退化}
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
##### 重构代码示例(Top 3 问题)
|
|
104
|
+
|
|
105
|
+
对 Top 3 严重问题,各提供:
|
|
106
|
+
- **文件:行号**:精确定位
|
|
107
|
+
- **当前代码**(关键片段,≤15 行)
|
|
108
|
+
- **重构后代码**(同等片段)
|
|
109
|
+
- **改进说明**:为什么这样改 + 预期收益(可量化:如圈复杂度从 X 降至 Y)
|
|
110
|
+
|
|
111
|
+
#### 4.3b `tech-debt.md`
|
|
112
|
+
技术债清单,按优先级排序。每项包含:影响范围、修复工作量估算、业务风险。
|
|
113
|
+
|
|
114
|
+
#### 4.3c `recommendations.md`
|
|
115
|
+
可行动的 Top 10 改进建议。每项包含:问题描述、建议行动、预期收益、工作量。
|
|
116
|
+
|
|
117
|
+
### 4.4 聚合项目级文档(project/)
|
|
118
|
+
|
|
119
|
+
#### 4.4a project/prd.md(聚合)
|
|
120
|
+
|
|
121
|
+
从各模块精炼后的 `prd.md` 聚合为项目级 PRD:
|
|
122
|
+
1. **Executive Summary**:项目整体业务目标 + 成功标准
|
|
123
|
+
2. **功能矩阵**:模块 × 功能 交叉表
|
|
124
|
+
3. **NFR 汇总**:
|
|
125
|
+
- 从各模块 NFR-{MOD}-NNN 归纳生成 NFR-SYS-NNN(系统级)
|
|
126
|
+
- NFR-SYS-NNN 必须覆盖所有模块 NFR 的范围
|
|
127
|
+
4. **全局用户流**:Mermaid journey 图
|
|
128
|
+
5. **非目标汇总**:各模块非目标聚合
|
|
129
|
+
6. **Phased Rollout Roadmap**
|
|
130
|
+
|
|
131
|
+
#### 4.4b project/deployment.md(项目级独有)
|
|
132
|
+
|
|
133
|
+
Phase 4 主 agent 直接引用 software-architecture D 模板结构生成(不启动 sub-agent):
|
|
134
|
+
- 部署拓扑(Mermaid)
|
|
135
|
+
- 环境配置矩阵(dev/staging/prod)
|
|
136
|
+
- CI/CD 流程
|
|
137
|
+
- 可观测性表
|
|
138
|
+
- 回滚策略
|
|
139
|
+
- 扩缩容规则
|
|
140
|
+
|
|
141
|
+
#### 4.4c project/testing-strategy.md(聚合 + 项目级补全)
|
|
142
|
+
|
|
143
|
+
Phase 4 主 agent 聚合各模块 `test-cases.md` + 补全:
|
|
144
|
+
- 模块级测试覆盖汇总
|
|
145
|
+
- 集成测试策略
|
|
146
|
+
- E2E 测试策略
|
|
147
|
+
- 性能测试策略
|
|
148
|
+
|
|
149
|
+
#### 4.4d project/runbook.md(聚合)
|
|
150
|
+
|
|
151
|
+
Phase 4 主 agent 聚合各模块 `dev-guide.md` 的运维相关章节。
|
|
152
|
+
|
|
153
|
+
### 4.5 生成安全和性能文档(quality/ 扩展)
|
|
154
|
+
|
|
155
|
+
#### 4.5a `quality/security-audit.md` — 安全审计总结
|
|
156
|
+
|
|
157
|
+
OWASP Top 10 逐项检查,从所有 data.json 的 `security_issues` 聚合:
|
|
158
|
+
|
|
159
|
+
```
|
|
160
|
+
| OWASP 项 | 检查结果 | 风险等级 | 发现问题数 | 代表性问题 | 修复建议 |
|
|
161
|
+
|-----------|---------|---------|-----------|-----------|---------|
|
|
162
|
+
| A01 Broken Access Control | ⚠️ 发现 | HIGH | 3 | UserController 缺少角色检查 | 添加 @PreAuthorize |
|
|
163
|
+
| A02 Cryptographic Failures | ✅ 未发现 | - | 0 | - | - |
|
|
164
|
+
| A03 Injection | ... | ... | ... | ... | ... |
|
|
165
|
+
| A04 Insecure Design | ... | ... | ... | ... | ... |
|
|
166
|
+
| A05 Security Misconfiguration | ... | ... | ... | ... | ... |
|
|
167
|
+
| A06 Vulnerable Components | ... | ... | ... | ... | ... |
|
|
168
|
+
| A07 Auth Failures | ... | ... | ... | ... | ... |
|
|
169
|
+
| A08 Software/Data Integrity | ... | ... | ... | ... | ... |
|
|
170
|
+
| A09 Logging/Monitoring Failures | ... | ... | ... | ... | ... |
|
|
171
|
+
| A10 SSRF | ... | ... | ... | ... | ... |
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
**安全建议 Top 5**:可行动的改进措施,按风险等级降序排列,每项包含:问题描述、影响评估、修复步骤、验证方式。
|
|
175
|
+
|
|
176
|
+
#### 4.5b `quality/performance-baseline.md` — 性能基准
|
|
177
|
+
|
|
178
|
+
从代码中推断的性能特征:
|
|
179
|
+
|
|
180
|
+
1. **API 延迟估算**:从代码中的缓存/索引/分页推断(无缓存的复杂查询标记为高风险)
|
|
181
|
+
2. **数据库查询分析**:N+1 查询风险点、缺失索引
|
|
182
|
+
3. **内存使用估算**:大对象/集合加载模式
|
|
183
|
+
4. **并发处理**:线程池/连接池配置评估
|
|
184
|
+
5. **建议优化点**:Top 5 性能改进建议(按预期收益排序,每项包含:问题/影响/建议/预期收益)
|
|
185
|
+
|
|
186
|
+
### 4.6 NFR 一致性回扫
|
|
187
|
+
|
|
188
|
+
在 `project/prd.md` 生成 NFR-SYS-NNN 后,对所有模块的 prd.md 执行回扫:
|
|
189
|
+
|
|
190
|
+
1. 读取 `project/prd.md` 中的 NFR-SYS-NNN 列表
|
|
191
|
+
2. 对每个 `modules/*/prd.md`:
|
|
192
|
+
- 将 `[待系统级确认]` 替换为 `(≤ NFR-SYS-NNN)`(匹配对应类别:性能→性能,安全→安全,可用性→可用性)
|
|
193
|
+
- 如果模块 NFR 数值超出系统 NFR 范围,标注 `[⚠️ 超出系统级约束 NFR-SYS-NNN]`
|
|
194
|
+
3. 记录回扫结果到 `analysis-state.json`:`nfr_backscan.conflicts_count`
|
|
195
|
+
|
|
196
|
+
### 4.7 架构违反率检测
|
|
197
|
+
|
|
198
|
+
如果 `.atool-docs/knowledge-graph.json` 存在:
|
|
199
|
+
|
|
200
|
+
```bash
|
|
201
|
+
VIOLATIONS=$(jq '[.edges[] | select(.type == "layer_violation")] | length' .atool-docs/knowledge-graph.json)
|
|
202
|
+
TOTAL=$(jq '.edges | length' .atool-docs/knowledge-graph.json)
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
如果 `VIOLATIONS / TOTAL > 0.30`(>30%):
|
|
206
|
+
- 记录到 `analysis-state.json`:`arch_violation_rate`
|
|
207
|
+
- 在 Phase 5 完成摘要中建议:`⚠️ 架构层违反率 {rate}%(>30%),建议运行 /software-architecture 进行深度架构审查`
|
|
208
|
+
|
|
209
|
+
### 4.8 生成 PROJECT-DELIVERABLE.md
|
|
210
|
+
|
|
211
|
+
生成 `atool-analysis/PROJECT-DELIVERABLE.md` 总览入口文件。
|
|
212
|
+
|
|
213
|
+
结构(硬性):
|
|
214
|
+
|
|
215
|
+
1. **标题 + 元信息**:项目名、生成时间、分析深度、技术栈、模块数/精炼数/降级数
|
|
216
|
+
2. **执行摘要**:3-5 段项目级业务概述(CEO/VP 可读)
|
|
217
|
+
3. **文档导航**:
|
|
218
|
+
- 项目级文档表(PRD / 架构 / 部署 / 测试策略 / 运维手册,含相对链接)
|
|
219
|
+
- 模块级文档表(每个模块一行,含 PRD/架构/API/数据模型/测试用例链接 + 精炼状态 ✅/⚠️)
|
|
220
|
+
- 质量报告表(code-review / tech-debt / security-audit / performance-baseline)
|
|
221
|
+
4. **全局架构概览**:从 `overview/architecture.md` 内联 Mermaid 图
|
|
222
|
+
5. **功能矩阵**:从 `project/prd.md` 内联核心功能表
|
|
223
|
+
6. **精炼覆盖率报告**:每个模块的 PRD 覆盖率 + 架构完整度 + 精炼状态(从 `analysis-state.json` 的 `refine_status` 读取)
|
|
224
|
+
7. **后续操作建议**:降级模块补全 / code-review / project-query / software-architecture(如架构违反率 >30%)
|
|
225
|
+
|
|
226
|
+
## 完成条件
|
|
227
|
+
|
|
228
|
+
- `overview/summary.md` 存在
|
|
229
|
+
- `overview/architecture.md` 存在且包含 Mermaid 图
|
|
230
|
+
- `project/prd.md` 存在且包含 NFR-SYS
|
|
231
|
+
- `project/deployment.md` 存在
|
|
232
|
+
- `project/testing-strategy.md` 存在
|
|
233
|
+
- `project/runbook.md` 存在
|
|
234
|
+
- `PROJECT-DELIVERABLE.md` 存在且包含所有模块链接
|
|
235
|
+
- NFR 一致性回扫已执行
|
|
236
|
+
- 更新 state:
|
|
237
|
+
|
|
238
|
+
```bash
|
|
239
|
+
jq '.phases.phase4_synthesize = "completed" | .deliverable_status.project_deliverable_md = "completed"' \
|
|
240
|
+
.atool-docs/analysis-state.json > tmp && mv tmp .atool-docs/analysis-state.json
|
|
241
|
+
```
|
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
# Phase 5: EXPORT(纯 Bash,无 AI)
|
|
2
|
+
|
|
3
|
+
**目标**:整理最终交付物目录,导出 JSON 数据供 aTool Monitor 消费,注册项目到全局注册表。
|
|
4
|
+
|
|
5
|
+
**执行时间目标**:< 10秒
|
|
6
|
+
|
|
7
|
+
## 前置检查
|
|
8
|
+
|
|
9
|
+
1. 确认 `phases.phase4_synthesize == "completed"`(必须)
|
|
10
|
+
2. 如果 `phases.phase5_export == "completed"` → 跳过
|
|
11
|
+
|
|
12
|
+
## 步骤
|
|
13
|
+
|
|
14
|
+
### 5.1 导出 data/ 目录(供 aTool Monitor 消费)
|
|
15
|
+
|
|
16
|
+
> **执行命令(必须通过 Bash 工具):**
|
|
17
|
+
> ```bash
|
|
18
|
+
> PROJECT_ROOT="$(pwd)"
|
|
19
|
+
> DOCS_DIR="$PROJECT_ROOT/.atool-docs"
|
|
20
|
+
> EXPORT_DIR="$PROJECT_ROOT/atool-analysis/data"
|
|
21
|
+
> mkdir -p "$EXPORT_DIR"
|
|
22
|
+
>
|
|
23
|
+
> # 1. 复制知识图谱
|
|
24
|
+
> if [ -f "$DOCS_DIR/knowledge-graph.json" ]; then
|
|
25
|
+
> cp "$DOCS_DIR/knowledge-graph.json" "$EXPORT_DIR/"
|
|
26
|
+
> echo "Exported: knowledge-graph.json"
|
|
27
|
+
> else
|
|
28
|
+
> echo "Skipped: knowledge-graph.json (not available)"
|
|
29
|
+
> fi
|
|
30
|
+
>
|
|
31
|
+
> # 2. 生成 modules.json(模块列表 + 基础指标)
|
|
32
|
+
> if ls "$DOCS_DIR"/modules/*/data.json 1>/dev/null 2>&1; then
|
|
33
|
+
> jq -s '[.[] | {
|
|
34
|
+
> slug: .module,
|
|
35
|
+
> layer: (.layer // "unknown"),
|
|
36
|
+
> file_count: ((.files // []) | length),
|
|
37
|
+
> api_count: ((.exposed_apis // []) | length),
|
|
38
|
+
> quality_score: (.quality_score // null),
|
|
39
|
+
> dependencies: [(.dependencies // [])[] | .target]
|
|
40
|
+
> }]' "$DOCS_DIR"/modules/*/data.json > "$EXPORT_DIR/modules.json"
|
|
41
|
+
> echo "Exported: modules.json ($(jq length "$EXPORT_DIR/modules.json") modules)"
|
|
42
|
+
> else
|
|
43
|
+
> echo "[]" > "$EXPORT_DIR/modules.json"
|
|
44
|
+
> echo "Exported: modules.json (empty — no data.json found)"
|
|
45
|
+
> fi
|
|
46
|
+
>
|
|
47
|
+
> # 3. 复制五维分析指标
|
|
48
|
+
> if [ -f "$DOCS_DIR/multi-dimensional-analysis.json" ]; then
|
|
49
|
+
> cp "$DOCS_DIR/multi-dimensional-analysis.json" "$EXPORT_DIR/metrics.json"
|
|
50
|
+
> echo "Exported: metrics.json"
|
|
51
|
+
> else
|
|
52
|
+
> echo "Skipped: metrics.json (not available)"
|
|
53
|
+
> fi
|
|
54
|
+
>
|
|
55
|
+
> echo "Data export complete: $(ls "$EXPORT_DIR" | tr '\n' ' ')"
|
|
56
|
+
> ```
|
|
57
|
+
|
|
58
|
+
### 5.2 生成 manifest.json
|
|
59
|
+
|
|
60
|
+
> **执行命令(必须通过 Bash 工具):**
|
|
61
|
+
> ```bash
|
|
62
|
+
> PROJECT_ROOT="$(pwd)"
|
|
63
|
+
> DOCS_DIR="$PROJECT_ROOT/.atool-docs"
|
|
64
|
+
> PROJECT_NAME=$(basename "$PROJECT_ROOT")
|
|
65
|
+
> STACK=$(jq -r '.stack // "unknown"' "$DOCS_DIR/analysis-state.json" 2>/dev/null || echo "unknown")
|
|
66
|
+
> DEPTH=$(jq -r '.depth // "L2"' "$DOCS_DIR/analysis-state.json" 2>/dev/null || echo "L2")
|
|
67
|
+
> MODULE_COUNT=$(jq -r '.modules | length' "$DOCS_DIR/analysis-state.json" 2>/dev/null || echo 0)
|
|
68
|
+
> FILE_COUNT=$(find "$PROJECT_ROOT" -type f \
|
|
69
|
+
> ! -path "*/node_modules/*" ! -path "*/.git/*" ! -path "*/target/*" \
|
|
70
|
+
> ! -path "*/dist/*" ! -path "*/build/*" ! -path "*/.atool-docs/*" \
|
|
71
|
+
> ! -path "*/atool-analysis/*" | wc -l | tr -d ' ')
|
|
72
|
+
>
|
|
73
|
+
> cat > "$PROJECT_ROOT/atool-analysis/manifest.json" << EOF
|
|
74
|
+
> {
|
|
75
|
+
> "name": "$PROJECT_NAME",
|
|
76
|
+
> "path": "$PROJECT_ROOT",
|
|
77
|
+
> "stack": "$STACK",
|
|
78
|
+
> "depth": "$DEPTH",
|
|
79
|
+
> "module_count": $MODULE_COUNT,
|
|
80
|
+
> "file_count": $FILE_COUNT,
|
|
81
|
+
> "analyzed_at": "$(date -u +%Y-%m-%dT%H:%M:%SZ)",
|
|
82
|
+
> "analysis_version": "5.1.0",
|
|
83
|
+
> "atool_analysis_schema": "1.0"
|
|
84
|
+
> }
|
|
85
|
+
> EOF
|
|
86
|
+
> echo "manifest.json written"
|
|
87
|
+
> ```
|
|
88
|
+
|
|
89
|
+
### 5.3 注册到 ~/.atool/projects.json
|
|
90
|
+
|
|
91
|
+
> **执行命令(必须通过 Bash 工具):**
|
|
92
|
+
> ```bash
|
|
93
|
+
> PROJECT_ROOT="$(pwd)"
|
|
94
|
+
> cd "$PROJECT_ROOT"
|
|
95
|
+
> if [ -f "lib/export-analysis.sh" ]; then
|
|
96
|
+
> source lib/export-analysis.sh
|
|
97
|
+
> register_project "$PROJECT_ROOT"
|
|
98
|
+
> else
|
|
99
|
+
> echo "WARNING: lib/export-analysis.sh not found — project not registered in ~/.atool/projects.json"
|
|
100
|
+
> echo "Manual registration: add entry to ~/.atool/projects.json"
|
|
101
|
+
> fi
|
|
102
|
+
> ```
|
|
103
|
+
|
|
104
|
+
### 5.4 生成 EXPORT-FULL.md(可选)
|
|
105
|
+
|
|
106
|
+
**触发条件**:用户使用 `--export` 参数,或在完成摘要中选择导出。
|
|
107
|
+
|
|
108
|
+
拼接逻辑(bash):
|
|
109
|
+
|
|
110
|
+
```bash
|
|
111
|
+
OUTPUT="atool-analysis/EXPORT-FULL.md"
|
|
112
|
+
|
|
113
|
+
# 1. 标题 + 元信息
|
|
114
|
+
echo "# $(jq -r '.project' .atool-docs/analysis-state.json) — 完整项目交付文档" > "$OUTPUT"
|
|
115
|
+
echo "" >> "$OUTPUT"
|
|
116
|
+
echo "> 自动生成于 $(date '+%Y-%m-%d %H:%M') | 单文件导出版" >> "$OUTPUT"
|
|
117
|
+
echo "" >> "$OUTPUT"
|
|
118
|
+
echo "---" >> "$OUTPUT"
|
|
119
|
+
|
|
120
|
+
# 2. 项目级文档
|
|
121
|
+
for FILE in \
|
|
122
|
+
"atool-analysis/overview/architecture.md" \
|
|
123
|
+
"atool-analysis/project/prd.md" \
|
|
124
|
+
; do
|
|
125
|
+
[ -f "$FILE" ] && { echo ""; echo "---"; echo ""; cat "$FILE"; } >> "$OUTPUT"
|
|
126
|
+
done
|
|
127
|
+
|
|
128
|
+
# 3. 模块级文档(按重要性排序)
|
|
129
|
+
for MOD in $(jq -r '.modules | sort_by(-.importance) | .[].name' .atool-docs/pre-scan/manifest.json); do
|
|
130
|
+
for DOC in prd.md dev-guide.md api.md data-model.md test-cases.md; do
|
|
131
|
+
FILE="atool-analysis/modules/$MOD/$DOC"
|
|
132
|
+
[ -f "$FILE" ] && { echo ""; echo "---"; echo ""; echo "## $MOD / $DOC"; echo ""; cat "$FILE"; } >> "$OUTPUT"
|
|
133
|
+
done
|
|
134
|
+
done
|
|
135
|
+
|
|
136
|
+
# 4. 项目级剩余文档
|
|
137
|
+
for FILE in \
|
|
138
|
+
"atool-analysis/project/deployment.md" \
|
|
139
|
+
"atool-analysis/project/testing-strategy.md" \
|
|
140
|
+
"atool-analysis/project/runbook.md" \
|
|
141
|
+
; do
|
|
142
|
+
[ -f "$FILE" ] && { echo ""; echo "---"; echo ""; cat "$FILE"; } >> "$OUTPUT"
|
|
143
|
+
done
|
|
144
|
+
|
|
145
|
+
# 5. 质量摘要(仅前 50 行 + 链接)
|
|
146
|
+
[ -f "atool-analysis/quality/code-review.md" ] && {
|
|
147
|
+
echo ""; echo "---"; echo ""
|
|
148
|
+
head -50 "atool-analysis/quality/code-review.md"
|
|
149
|
+
echo ""; echo "*完整报告见 quality/code-review.md*"
|
|
150
|
+
} >> "$OUTPUT"
|
|
151
|
+
|
|
152
|
+
# 6. 附录
|
|
153
|
+
echo ""; echo "---"; echo ""
|
|
154
|
+
echo "## 附录:精炼覆盖率报告" >> "$OUTPUT"
|
|
155
|
+
echo "" >> "$OUTPUT"
|
|
156
|
+
echo "| 模块 | PRD 覆盖率 | 架构门禁 | 状态 |" >> "$OUTPUT"
|
|
157
|
+
echo "|------|-----------|---------|------|" >> "$OUTPUT"
|
|
158
|
+
jq -r '.refine_status | to_entries[] | "| \(.key) | \(.value.prd_coverage // "N/A")% | \(.value.arch_gate // "N/A") | \(if .value.degraded then "⚠️ 降级" else "✅" end) |"' \
|
|
159
|
+
.atool-docs/analysis-state.json >> "$OUTPUT"
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
更新 state:
|
|
163
|
+
```bash
|
|
164
|
+
jq '.deliverable_status.export_single_file = "completed"' .atool-docs/analysis-state.json > tmp && mv tmp .atool-docs/analysis-state.json
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
### 5.5 更新 State + 打印完成摘要
|
|
168
|
+
|
|
169
|
+
> **执行命令(必须通过 Bash 工具):**
|
|
170
|
+
> ```bash
|
|
171
|
+
> DOCS_DIR="$(pwd)/.atool-docs"
|
|
172
|
+
> jq --arg ts "$(date -u +%Y-%m-%dT%H:%M:%SZ)" \
|
|
173
|
+
> '.phases.phase5_export = "completed" | .updated_at = $ts' \
|
|
174
|
+
> "$DOCS_DIR/analysis-state.json" > "$DOCS_DIR/analysis-state.json.tmp" \
|
|
175
|
+
> && mv "$DOCS_DIR/analysis-state.json.tmp" "$DOCS_DIR/analysis-state.json"
|
|
176
|
+
> ```
|
|
177
|
+
|
|
178
|
+
**打印完成摘要:**
|
|
179
|
+
|
|
180
|
+
```
|
|
181
|
+
✅ Phase 5 EXPORT 完成
|
|
182
|
+
|
|
183
|
+
📦 交付物:
|
|
184
|
+
- atool-analysis/PROJECT-DELIVERABLE.md — 总览入口(文档导航 + 架构概览 + 覆盖率报告)
|
|
185
|
+
- atool-analysis/EXPORT-FULL.md — 单文件导出版(如已生成)
|
|
186
|
+
|
|
187
|
+
📊 精炼覆盖率:
|
|
188
|
+
- 精炼模块:{M}/{N}
|
|
189
|
+
- 平均 PRD 覆盖率:{avg}%
|
|
190
|
+
- 降级模块:{list}(如有)
|
|
191
|
+
|
|
192
|
+
💡 后续操作:
|
|
193
|
+
- /project-query 查询分析结果(依赖分析、影响分析等)
|
|
194
|
+
- /requirements-writer 对降级模块补全 PRD
|
|
195
|
+
- /code-review 执行 8 维度深度代码审查
|
|
196
|
+
- /software-architecture 深度架构审查(如架构违反率 >30%)
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
其中 `{M}/{N}` 和 `{avg}` 从 `analysis-state.json` 的 `refine_status` 计算。如果 `refine_status` 不存在(旧版 state),显示 "N/A"。
|
|
200
|
+
|
|
201
|
+
## 完成条件
|
|
202
|
+
|
|
203
|
+
- `atool-analysis/manifest.json` 存在
|
|
204
|
+
- `atool-analysis/data/modules.json` 存在
|
|
205
|
+
- `atool-analysis/PROJECT-DELIVERABLE.md` 存在
|
|
206
|
+
- `phases.phase5_export = "completed"`
|
|
207
|
+
- 完成摘要已打印给用户
|
package/skills/project-analyze/prompts/{deep-analysis-agent.md → archive/deep-analysis-agent.md}
RENAMED
|
@@ -27,6 +27,10 @@
|
|
|
27
27
|
- 大文件(>500 行):{large_files_list} — 仅读取 pre-scan 标记的关键区域(函数体、类定义)
|
|
28
28
|
- confidence: "low" 文件:{low_confidence_files} — 必须全文读取验证
|
|
29
29
|
|
|
30
|
+
> **降级指令**:如果上方 Pre-Scan 摘要或 Inventory 数据为空/标记为缺失,说明 Phase 0.5/1 未执行。
|
|
31
|
+
> 此时你必须先读取模块内所有源文件,自行提取结构信息(imports, classes, functions),
|
|
32
|
+
> 然后再进行深度分析。**这不是正常流程**,应在 Phase 0.5/1 修复后避免。
|
|
33
|
+
|
|
30
34
|
## 技术栈规则
|
|
31
35
|
{rules_content}
|
|
32
36
|
|
|
@@ -104,4 +108,13 @@
|
|
|
104
108
|
|
|
105
109
|
### Depth-Specific Instructions
|
|
106
110
|
|
|
107
|
-
|
|
111
|
+
**重要:`{depth_specific_instructions}` 变量必须内联替换为完整指令内容,禁止只写"L3 分析"等抽象标签。**
|
|
112
|
+
|
|
113
|
+
具体填充方式(根据当前 depth 值):
|
|
114
|
+
- **L1**: 此 prompt 不使用(Phase 2 跳过)
|
|
115
|
+
- **L2**: 留空(使用上方标准模板即可)
|
|
116
|
+
- **L3**: 读取 `phases/phase2-deep-analysis.md` section "L3 追加指令" → **将完整代码块内容**(含所有 bullet points)内联到 `{depth_specific_instructions}` 位置
|
|
117
|
+
- **L4**: 读取 `phases/phase2a-l4-analysis.md` → 使用 `prompts/l4-analysis-agent.md` 独立 prompt,不走此模板
|
|
118
|
+
- **L5**: 读取 `phases/phase2b-l5-analysis.md` → 使用独立 prompt
|
|
119
|
+
|
|
120
|
+
**禁止行为**:用 "执行 L3 深度分析" 等一句话替代具体指令。sub-agent 无法理解 "L3" 的含义,必须展开为具体的分析要求。
|