@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.
Files changed (28) hide show
  1. package/lib/install-skills.sh +16 -0
  2. package/lib/knowledge-graph.sh +483 -81
  3. package/lib/pre-scan.sh +70 -5
  4. package/package.json +1 -1
  5. package/skills/project-analyze/SKILL.md +34 -15
  6. package/skills/project-analyze/phases/phase2-understand.md +7 -1
  7. package/skills/project-analyze/phases/phase2.5-refine.md +284 -0
  8. package/skills/project-analyze/phases/phase4-synthesize.md +100 -119
  9. package/skills/project-analyze/phases/phase5-export.md +78 -32
  10. package/skills/project-analyze/prompts/understand-agent.md +17 -0
  11. package/skills/project-analyze/rules/android.md +61 -260
  12. package/skills/project-analyze/rules/devops.md +61 -421
  13. package/skills/project-analyze/rules/generic.md +53 -221
  14. package/skills/project-analyze/rules/go.md +60 -275
  15. package/skills/project-analyze/rules/harmony.md +64 -237
  16. package/skills/project-analyze/rules/java.md +47 -485
  17. package/skills/project-analyze/rules/mobile-flutter.md +57 -292
  18. package/skills/project-analyze/rules/mobile-react-native.md +65 -262
  19. package/skills/project-analyze/rules/mobile-swift.md +58 -303
  20. package/skills/project-analyze/rules/python.md +50 -296
  21. package/skills/project-analyze/rules/rust-tauri.md +51 -217
  22. package/skills/project-analyze/rules/rust.md +50 -274
  23. package/skills/project-analyze/rules/web-nextjs.md +61 -335
  24. package/skills/project-analyze/rules/web-react.md +50 -272
  25. package/skills/project-analyze/rules/web-vue.md +58 -352
  26. package/skills/project-analyze/rules/web.md +55 -347
  27. package/skills/requirements-writer/SKILL.md +48 -1
  28. package/skills/software-architecture/SKILL.md +73 -3
@@ -1,52 +1,43 @@
1
1
  # Web 项目分析规则
2
2
 
3
- 通用 Web 项目分析规则,适用于 React、Vue、Next.js、Svelte 等前端框架。如检测到具体框架(Vue 3 / React),会同时加载 `rules/web-vue.md` `rules/web-react.md` 作为补充。
3
+ > **编码规范**:本规则不包含编码规范内容。Phase 2.5 精炼阶段会自动加载 `web-conventions` skill 作为规范约束。
4
4
 
5
- ## 分析粒度
5
+ ## 模块发现策略
6
6
 
7
- 按页面、组件目录和功能模块进行分析,分层结构为:
7
+ 按路由/视图目录识别模块边界:
8
8
 
9
- ```
10
- 用户界面 (UI)
11
-
12
- 页面/路由 (Pages/Router)
13
-
14
- 组件 (Components)
15
-
16
- Hooks/Composables (逻辑复用)
17
-
18
- 状态管理 (Store/Context)
19
-
20
- 服务/API (Services)
21
-
22
- 工具/类型 (Utils/Types)
23
- ```
9
+ - **Next.js App Router**: `app/` 下每个一级路由目录(排除 `api/`、`layout.tsx`)为一个页面模块
10
+ - **Next.js Pages Router**: `pages/` 下每个文件/目录为一个路由模块
11
+ - **React SPA**: `src/pages/` 下每个文件为一个路由模块
12
+ - **Vue 项目**: `src/views/` 下每个子目录为一个页面模块
13
+ - **Feature-based 结构**: `src/features/{feature}/` 下的子目录
14
+ - **组件层**: `src/components/{name}/` 下有 3+ 文件的子目录
24
15
 
25
- ## 目录扫描策略
16
+ 不视为独立模块:单文件入口(`main.ts`, `App.vue`, `index.ts`)、纯导出桶文件、`utils/`/`helpers/` 目录(合并为一个模块)。
26
17
 
27
- ### 1. 识别框架类型
18
+ ## 入口识别
28
19
 
29
20
  **信号文件检测:**
30
- - Next.js: `app/` 或 `pages/` 目录 + `next.config.js` / `next.config.mjs`
31
- - React SPA: `src/App.tsx` + `react-router` 依赖
32
- - Vue/Nuxt: `src/views/` + `vue-router` 依赖,或 Nuxt 的 `pages/` 目录
33
- - SvelteKit: `src/routes/` + `svelte.config.js`
34
- - Vite 项目: `vite.config.ts` / `vite.config.js`
21
+
22
+ | 框架 | 信号文件 |
23
+ |------|----------|
24
+ | Next.js App Router | `app/layout.tsx` `app/layout.js` |
25
+ | Next.js Pages Router | `pages/_app.tsx` `pages/_app.js` |
26
+ | React SPA | `src/App.tsx` + `react-router` 依赖 |
27
+ | Vue/Nuxt | `src/views/` + `vue-router` 依赖,或 Nuxt 的 `pages/` |
28
+ | SvelteKit | `src/routes/` + `svelte.config.js` |
29
+ | Vite 项目 | `vite.config.ts` / `vite.config.js` |
35
30
 
36
31
  **微前端检测:**
37
- - qiankun: `main.js` 中包含 `registerMicroApps`,子应用有 `vue.config.js` 中 `devServer.headers`
38
- - Module Federation: `webpack.config.js` 中包含 `ModuleFederationPlugin`
32
+ - qiankun: `main.js` `registerMicroApps`
33
+ - Module Federation: `webpack.config.js` `ModuleFederationPlugin`
39
34
  - single-spa: `import-map.json` 或 `single-spa` 依赖
40
35
 
41
- **Monorepo 检测:**
42
- - `pnpm-workspace.yaml` → pnpm workspace
43
- - `lerna.json` → Lerna monorepo
44
- - `nx.json` → Nx monorepo
45
- - `package.json` 中 `workspaces` 字段
36
+ **Monorepo 检测:** `pnpm-workspace.yaml` / `lerna.json` / `nx.json` / `package.json workspaces`
46
37
 
47
- ### 2. 依赖提取
38
+ ## 架构模式识别
48
39
 
49
- 从 `package.json` 提取关键依赖并分类:
40
+ 从 `package.json` 提取依赖后判断架构:
50
41
 
51
42
  | 类别 | 依赖示例 |
52
43
  |------|----------|
@@ -54,337 +45,54 @@ Hooks/Composables (逻辑复用)
54
45
  | UI 库 | element-plus, antd, vuetify, shadcn/ui, tailwindcss |
55
46
  | 状态管理 | zustand, redux-toolkit, pinia, vuex, mobx |
56
47
  | 路由 | react-router, vue-router, @tanstack/router |
57
- | 请求库 | axios, fetch, swr, @tanstack/react-query |
58
- | 构建工具 | vite, webpack, turbopack, rollup |
59
- | CSS 方案 | tailwindcss, sass, styled-components, css-modules |
60
- | 测试 | vitest, jest, cypress, playwright |
61
- | 代码质量 | eslint, prettier, typescript, husky |
62
-
63
- ### 3. 按层扫描路径
48
+ | 请求库 | axios, swr, @tanstack/react-query |
49
+ | 构建工具 | vite, webpack, turbopack |
64
50
 
51
+ 按层扫描路径:
65
52
  - **页面层**: `src/pages/`, `app/`, `src/views/`, `src/routes/`
66
53
  - **组件层**: `src/components/`, `src/ui/`, `src/shared/`
67
- - **逻辑层**: `src/hooks/`, `src/composables/`, `src/directives/`
54
+ - **逻辑层**: `src/hooks/`, `src/composables/`
68
55
  - **状态层**: `src/stores/`, `src/store/`, `src/context/`, `src/redux/`
69
- - **服务层**: `src/services/`, `src/api/`, `src/request/`, `src/http/`
70
- - **工具层**: `src/utils/`, `src/lib/`, `src/helpers/`, `src/constants/`
71
- - **类型层**: `src/types/`, `src/interfaces/`, `src/schemas/`
72
- - **样式层**: `src/styles/`, `src/assets/css/`, `src/themes/`
73
- - **国际化**: `src/locales/`, `src/i18n/`, `src/lang/`
56
+ - **服务层**: `src/services/`, `src/api/`, `src/request/`
74
57
  - **权限**: `src/permission/`, `src/auth/`, `src/guards/`
58
+ - **国际化**: `src/locales/`, `src/i18n/`
75
59
 
76
- ### 4. 模块发现规则
60
+ ## 数据流模式
77
61
 
78
- - Next.js App Router: `app/` 下的每个一级目录(排除 `api/`, `layout.tsx`)为一个页面模块
79
- - Next.js Pages Router: `pages/` 下的每个文件/目录为一个路由模块
80
- - React SPA: `src/pages/` 下的每个文件为一个路由模块
81
- - Vue 项目: `src/views/` 下的每个子目录为一个页面模块
82
- - Feature-based 结构: `src/features/{feature}/` 下的子目录
83
- - 组件目录按子目录分组(如 `components/ui/`, `components/business/`)
62
+ 识别状态管理方案并记录跨 Store 依赖关系:
63
+ - **Redux Toolkit**: `src/store/slices/` — Slice → Selector → ExtraReducer (Thunk)
64
+ - **Zustand**: `src/stores/*.ts` — Store → persist middleware
65
+ - **Pinia**: `src/stores/modules/` — defineStore Options/Setup → 跨 Store 依赖
66
+ - **Context API**: `src/context/*.tsx` — Provider 嵌套层级
84
67
 
85
- ## 各层提取规则
68
+ 权限认证数据流:登录 → token 存储 → 请求拦截器注入 → 401 刷新链路
86
69
 
87
- ### 层 1: 路由/入口层
70
+ ## 分析关注点
88
71
 
89
- **扫描文件**: `src/router/index.ts`, `src/routes.ts`, `app/**/page.tsx`, `app/**/layout.tsx`
72
+ - **路由守卫**: `beforeEach` / `ProtectedRoute` 链路,权限模型(RBAC/ABAC)
73
+ - **版本检测**: React 18 vs 19(并发特性)、Vue 2 vs 3(Options vs Composition API)
74
+ - **构建工具**: Vite(`vite.config.ts`)vs Webpack vs Turbopack
75
+ - **国际化**: 支持的语言列表、i18n 框架(vue-i18n / react-i18next / next-intl)
76
+ - **微前端**: 主/子应用关系、共享状态方案、共享代码重复度
90
77
 
91
- **提取内容**:
92
- - 路由配置(路径 + 对应组件 + 路由 meta)
93
- - 嵌套路由结构
94
- - 路由守卫(权限检查、登录拦截)
95
- - 布局组件层级
78
+ ## 输出示例
96
79
 
97
- **输出示例**:
98
80
  ```
99
81
  ### 路由结构
100
-
101
82
  / (Layout: DefaultLayout)
102
- ├── /login → LoginPage [公开]
103
- ├── /dashboard → DashboardPage [需认证]
104
- ├── /system
105
- ├── /system/user → UserPage [admin]
106
- │ ├── /system/role → RolePage [admin]
107
- │ └── /system/menu → MenuPage [admin]
108
- └── /404 → NotFoundPage [公开]
83
+ ├── /login → LoginPage [公开]
84
+ ├── /dashboard → DashboardPage [需认证]
85
+ └── /system
86
+ ├── /system/user → UserPage [admin]
87
+ └── /system/role → RolePage [admin]
109
88
 
110
89
  ### 路由守卫链路
111
90
  router.beforeEach → 检查 token → 无 token → 跳转 /login
112
- → 有 token → 检查权限 → 放行 / 403
113
- ```
114
-
115
- ### 层 2: 状态管理层
116
-
117
- **扫描文件**: `src/stores/**/*.ts`, `src/store/**/*.ts`, `src/context/**/*.tsx`
118
-
119
- **提取内容**:
120
- - Store ID / 名称
121
- - State 接口(所有字段的类型和初始值)
122
- - Getters / 计算属性
123
- - Actions(参数 + 调用的 API + 修改的 state)
124
- - 跨 Store 依赖
125
- - 持久化配置
91
+ → 有 token → 检查权限 → 放行 / 403
126
92
 
127
- **输出示例**:
128
- ```
129
93
  ### useUserStore
130
- - **文件**: `src/stores/modules/user.ts`
131
- - **State 接口**:
132
- | 字段 | 类型 | 初始值 | 说明 |
133
- |------|------|--------|------|
134
- | token | string | '' | JWT token |
135
- | userInfo | UserInfo \| null | null | 当前用户信息 |
136
- | roles | string[] | [] | 角色列表 |
137
- - **Getters**:
138
- | 名称 | 返回类型 | 说明 |
139
- |------|----------|------|
140
- | isAdmin | boolean | 是否管理员 |
141
- | avatar | string | 用户头像 URL |
142
- - **Actions**:
143
- | Action | 参数 | 调用的 API | 说明 |
144
- |--------|------|-----------|------|
145
- | login | (data: LoginForm) | authApi.login() | 登录并存储 token |
146
- | getUserInfo | () | userApi.getInfo() | 获取用户信息 |
147
- | logout | () | - | 清空状态并跳转 |
148
- - **跨 Store 依赖**: usePermissionStore(登录后同步权限)
149
- - **持久化**: localStorage, key: 'user-store'
150
- ```
151
-
152
- ### 层 3: 服务/API 层
153
-
154
- **扫描文件**: `src/api/**/*.ts`, `src/services/**/*.ts`, `src/request/**/*.ts`
155
-
156
- **提取内容**:
157
- - API 基础配置(baseURL、超时、拦截器)
158
- - API 函数列表(路径 + 方法 + 参数 + 返回类型)
159
- - Token 注入方式
160
- - 错误处理策略
161
- - 请求/响应拦截器逻辑
162
-
163
- **输出示例**:
164
- ```
165
- ### API 基础配置
166
- - **实例文件**: `src/utils/request.ts`
167
- - **baseURL**: `/api/v1`
168
- - **超时**: 15000ms
169
- - **Token 注入**: 请求拦截器从 localStorage 读取 token,添加 `Authorization: Bearer {token}` header
170
- - **错误处理**: 401 → 跳转登录;403 → 提示无权限;500 → 提示服务器错误
171
-
172
- ### 用户模块 API
173
- | 函数 | 方法 | 路径 | 参数 | 返回类型 |
174
- |------|------|------|------|----------|
175
- | getUserPage | GET | /system/user/list | { pageNum, pageSize, ...query } | PageResult<UserVO> |
176
- | getUserDetail | GET | /system/user/:id | { id: string } | R<UserVO> |
177
- | createUser | POST | /system/user | CreateUserDTO | R<void> |
178
- | updateUser | PUT | /system/user | UpdateUserDTO | R<void> |
179
- | deleteUser | DELETE | /system/user/:id | { id: string } | R<void> |
180
- ```
181
-
182
- ### 层 4: 组件层
183
-
184
- **扫描文件**: `src/components/**/*.vue`, `src/components/**/*.tsx`
185
-
186
- **提取内容**:
187
- - 组件名称 + 路径
188
- - Props/参数定义(类型 + 是否必填 + 默认值)
189
- - Events/Emits(事件名 + 载荷类型)
190
- - Slots(插槽名 + 用途)
191
- - 依赖的 Store / API / 其他组件
192
- - 组件分类(基础组件 / 业务组件 / 页面组件)
193
-
194
- **输出示例**:
195
- ```
196
- ### UserList(业务组件)
197
- - **路径**: `src/views/system/user/index.vue`
198
- - **Props**:
199
- | Prop | Type | Required | Default | Description |
200
- |------|------|----------|---------|-------------|
201
- | loading | boolean | No | false | 加载状态 |
202
- - **Emits**:
203
- | Event | Payload | Description |
204
- |-------|---------|-------------|
205
- | refresh | () => void | 刷新列表 |
206
- | edit | (row: UserVO) => void | 编辑用户 |
207
- - **使用的 Store**: useUserStore
208
- - **使用的 API**: getUserPage(), deleteUser()
209
- - **依赖组件**: UserForm, DictTag, Pagination
210
- ```
211
-
212
- ### 层 5: Hooks/Composables 层
213
-
214
- **扫描文件**: `src/hooks/**/*.ts`, `src/composables/**/*.ts`
215
-
216
- **提取内容**:
217
- - Hook 名称 + 路径
218
- - 参数签名
219
- - 返回值签名
220
- - 内部使用的 API / Store
221
- - 副作用说明
222
-
223
- **输出示例**:
94
+ - State: token (string), userInfo (UserInfo|null), roles (string[])
95
+ - Actions: login() → authApi.login(), logout() → 清空状态
96
+ - Store 依赖: usePermissionStore(登录后同步权限)
97
+ - 持久化: localStorage, key: 'user-store'
224
98
  ```
225
- ### useTable
226
- - **路径**: `src/hooks/useTable.ts`
227
- - **签名**: `useTable<T>(fetchFn: (params) => Promise<PageResult<T>>, initialParams?)`
228
- - **返回值**:
229
- | 字段 | 类型 | 说明 |
230
- |------|------|------|
231
- | tableData | Ref<T[]> | 表格数据 |
232
- | loading | Ref<boolean> | 加载状态 |
233
- | pagination | Reactive<PageParams> | 分页参数 |
234
- | search | (params?) => void | 搜索方法 |
235
- | refresh | () => void | 刷新当前页 |
236
- ```
237
-
238
- ### 层 6: 权限/认证层
239
-
240
- **扫描文件**: `src/permission/**/*.ts`, `src/auth/**/*.ts`, `src/directives/**/*.ts`
241
-
242
- **提取内容**:
243
- - 认证流程(登录 → token 存储 → token 刷新)
244
- - 权限模型(RBAC / ABAC)
245
- - 权限指令(如 `v-permission`)
246
- - 路由守卫逻辑
247
-
248
- **输出示例**:
249
- ```
250
- ### 认证流程
251
- 用户登录 → POST /auth/login → 获取 token + refreshToken
252
- → 存储 localStorage → 设置 Axios header
253
- → 请求 401 → 使用 refreshToken 刷新 → 刷新失败 → 跳转登录页
254
-
255
- ### 权限模型
256
- RBAC(基于角色的访问控制)
257
- - 用户 → 角色 → 菜单/按钮权限
258
- - 权限存储在 usePermissionStore.permissions: string[](如 ['system:user:add'])
259
- - 指令 v-permission="['system:user:add']" 控制按钮显示
260
- ```
261
-
262
- ### 层 7: 国际化层
263
-
264
- **扫描文件**: `src/locales/**/*.ts`, `src/i18n/**/*.json`
265
-
266
- **提取内容**:
267
- - 支持的语言列表
268
- - i18n 框架(vue-i18n / react-i18next / next-intl)
269
- - 语言切换机制
270
- - 翻译文件结构
271
-
272
- ### 层 8: 样式/设计系统层
273
-
274
- **扫描文件**: `src/styles/**`, `src/assets/css/**`, `tailwind.config.*`, `theme.ts`
275
-
276
- **提取内容**:
277
- - CSS 变量定义(`:root` / `.dark`)
278
- - SCSS 变量(`$color-primary`)
279
- - Tailwind 配置(`theme.extend`)
280
- - UI 库主题定制
281
- - 暗色模式实现方式
282
- - 响应式断点
283
-
284
- **输出示例**:
285
- ```
286
- ### 颜色系统(从 styles/variables.scss 提取)
287
- | 变量名 | 值 | 用途 |
288
- |--------|------|------|
289
- | --el-color-primary | #00a3e0 | 主色调 |
290
- | --el-color-primary-light-3 | #33b7e9 | 主色调浅色 |
291
- | --el-color-success | #67c23a | 成功状态 |
292
- | --el-color-warning | #e6a23c | 警告状态 |
293
- | --el-color-danger | #f56c6c | 危险状态 |
294
-
295
- ### 暗色模式
296
- 通过 html.dark class 切换,CSS 变量在 `styles/dark.scss` 中覆盖
297
-
298
- ### 响应式断点
299
- | 名称 | 宽度 | 用途 |
300
- |------|------|------|
301
- | sm | ≥640px | 手机横屏 |
302
- | md | ≥768px | 平板 |
303
- | lg | ≥1024px | 桌面 |
304
- | xl | ≥1280px | 大屏 |
305
- ```
306
-
307
- ## 输出模板
308
-
309
- ### README.md 章节结构
310
-
311
- ```markdown
312
- # {项目名}
313
-
314
- ## 项目概述
315
- 业务描述 + 项目目标
316
-
317
- ## 技术栈
318
- | 技术 | 版本 | 用途 |
319
- |------|------|------|
320
-
321
- ## 架构设计
322
- ### 架构图(ASCII)
323
- ### 数据流图
324
- 用户操作 → 事件处理 → Store → API → 响应 → UI 更新
325
-
326
- ## 目录结构
327
- 带注释的文件树
328
-
329
- ## 路由结构
330
- 路由树 + 权限标注
331
-
332
- ## 状态管理
333
- Store 关系图 + 核心 Store 说明
334
-
335
- ## API 接口
336
- 按模块分组的 API 端点表
337
-
338
- ## 认证与权限
339
- 登录流程 + 权限模型
340
-
341
- ## 构建 & 部署
342
- 构建命令 + 环境变量 + 部署方式
343
-
344
- ## 开发指南
345
- 新增页面/组件/API 的步骤
346
- ```
347
-
348
- ### COMPONENT.md 章节结构
349
-
350
- ```markdown
351
- # 组件文档
352
-
353
- ## 基础组件
354
- 项目内封装的通用组件(不含第三方 UI 库)
355
-
356
- ## 业务组件
357
- 按功能模块分组的业务组件
358
-
359
- ## Hooks / Composables
360
- 可复用的逻辑 Hook
361
-
362
- ## 跨模块依赖关系
363
- 模块间调用关系的 ASCII 图
364
- ```
365
-
366
- ## 模块边界识别
367
-
368
- 以下目录模式下的每个子目录视为独立模块(L2+ 分析时生成 MODULE-DOC.md):
369
-
370
- | 层 | 扫描路径 | 模块判定规则 | MODULE-DOC slug 来源 |
371
- |----|----------|-------------|---------------------|
372
- | 页面/视图层 | `src/views/`, `src/pages/` | 每个子目录 | 目录名 kebab-case |
373
- | API/服务层 | `src/api/`, `src/services/` | 每个子目录 | 目录名 kebab-case |
374
- | 状态管理层 | `src/store/modules/`, `src/stores/` | 每个子目录 | 目录名 kebab-case |
375
- | 组件层 | `src/components/{name}/` | 3+ 文件的子目录 | 目录名 kebab-case |
376
- | Hooks 层 | `src/hooks/` | 每个文件 | 文件名去后缀 kebab-case |
377
-
378
- **不视为独立模块的情况**:
379
- - 单文件入口(如 `main.ts`, `App.vue`, `index.ts`)
380
- - 纯导出桶文件(`index.ts` 仅有 re-export)
381
- - 工具函数目录(`utils/`, `helpers/`)— 合并为一个模块
382
-
383
- ## Token 管理
384
-
385
- - 大组件目录(>15 文件)拆分为子任务
386
- - 每个子任务分析 ≤10 文件
387
- - `package.json` 分析单独一个子任务
388
- - 样式相关文件(CSS/Theme)单独一个子任务
389
- - 微前端项目:每个子应用作为独立分析单元
390
- - Monorepo 项目:每个 workspace 子包作为独立分析单元
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: requirements-writer
3
3
  description: "Guide users through writing PRDs and requirements documents with Multi-Agent architecture. 在需要撰写 PRD、需求文档、用户故事时使用。Supports Quick PRD (single feature) and Full PRD (multi-module project). Integrates with project-analyze for code-driven requirement reverse-engineering."
4
- version: 2.1.0
4
+ version: 2.2.0
5
5
  category: documentation
6
6
  ---
7
7
 
@@ -413,6 +413,52 @@ Then: 系统删除用户记录,返回 204,列表刷新且不再显示该用
413
413
 
414
414
  ---
415
415
 
416
+ ## Refine Mode(精炼模式 — 由 project-analyze Phase 2.5 调用)
417
+
418
+ ### 触发条件
419
+
420
+ Phase 2.5 通过 sub-agent prompt 内联激活,不由用户手动触发。当 `atool-analysis/modules/{name}/prd.md` 存在时自动进入。
421
+
422
+ ### 输入
423
+
424
+ | 文件 | 用途 |
425
+ |------|------|
426
+ | `atool-analysis/modules/{name}/prd.md` | Phase 2 初稿(4 节结构) |
427
+ | `atool-analysis/modules/{name}/api.md` | 接口定义 → 自动生成 AC |
428
+ | `atool-analysis/modules/{name}/data-model.md` | 数据模型 → 填充 §4 数据需求 |
429
+ | `.atool-docs/modules/{name}/data.json` | 结构化数据 → 提取依赖和业务术语 |
430
+
431
+ ### 精炼逻辑
432
+
433
+ 1. **保留**初稿的 §1 模块概述、§2 功能需求、§3 非功能需求、原 §4 非目标(移至 §6)
434
+ 2. **补全**缺失的 4 节:
435
+ - §4 数据需求:从 `data-model.md` 提取实体字段表 + 从 `api.md` 提取接口 Schema
436
+ - §5 跨模块依赖:从 `data.json` 的 `dependencies` 提取外部 API 契约 + 事件契约
437
+ - §7 风险与假设:从初稿内容推断技术风险 + 业务假设
438
+ - §8 需求追溯矩阵:从 §2 的 FR-ID 和 AC 自动生成 FR → US → AC 映射表
439
+ 3. **增强**已有节:
440
+ - §2 功能需求:补充 FR-{MOD}-NNN 编号 + Given-When-Then AC + UI 交互表(按钮行为/输入字段/四种状态)+ RBAC 矩阵
441
+ - §3 非功能需求:加 NFR-{MOD}-NNN 编号,标注 `[待系统级确认]`
442
+ 4. **输出**:原地覆盖 `atool-analysis/modules/{name}/prd.md`,结构与 Phase 1 MODULE PRD 模板完全一致(8 节)
443
+
444
+ ### 不做的事(硬性)
445
+
446
+ - ❌ 不运行 Phase D(DISCOVERY)— Phase 2 已完成发现
447
+ - ❌ 不运行 Phase 2(USER STORIES)— 精炼只到 PRD 粒度
448
+ - ❌ 不做交互式问答 — 所有信息从 Phase 2 产物中提取
449
+ - ❌ 不修改 README.md / api.md / data-model.md — 只精炼 prd.md
450
+
451
+ ### 输出质量门禁
452
+
453
+ 精炼后的 prd.md 必须通过以下检查(由 Phase 2.5 Gate 2 执行):
454
+ - 8 节结构完整(§1-§8 标题均存在)
455
+ - FR-{MOD}-NNN 编号存在
456
+ - 至少 1 个 Given-When-Then AC
457
+ - NFR-{MOD}-NNN 编号存在
458
+ - 覆盖率评分 ≥ 70%
459
+
460
+ ---
461
+
416
462
  ## 并行 Agent 规则
417
463
 
418
464
  - 每批最多 5 个 Agent 并行
@@ -432,4 +478,5 @@ Then: 系统删除用户记录,返回 204,列表刷新且不再显示该用
432
478
  | project-analyze | atool-analysis/ 存在时 | 读取分析结果作为数据源(后向增强模式) |
433
479
  | doc-standards-enforcer | 所有文档输出 | 验证格式/命名/frontmatter 合规 |
434
480
  | software-architecture | PRD 涉及架构决策 | 建议运行 /software-architecture |
481
+ | software-architecture | NFR-{MOD}-* 不可超出 NFR-SYS-* 范围 | 读取系统级 NFR 约束(Phase 4 生成后回扫确认) |
435
482
  | code-review | PRD 完成后需要验证代码一致性 | 建议运行 /code-review |
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: software-architecture
3
3
  description: Use when designing, reviewing, or scaffolding system architecture — covers architecture style selection, high-concurrency/HA design, DDD, clean architecture, microservice boundaries, and deployment strategy.
4
- version: 1.1.0
4
+ version: 1.2.0
5
5
  category: architecture
6
6
  ---
7
7
 
@@ -462,6 +462,76 @@ For existing projects requiring architecture assessment:
462
462
  4. Produce ADR or architecture improvement plan
463
463
  5. Validate output with `doc-standards-enforcer`
464
464
 
465
+ ### project-analyze 数据契约(Refine Mode 输入)
466
+
467
+ 以下文件是 Refine Mode 的输入数据源,project-analyze 必须确保这些文件在 Phase 2.5 调用前存在:
468
+
469
+ | 文件 | 内容 | 生成阶段 |
470
+ |------|------|---------|
471
+ | `.atool-docs/knowledge-graph.json` | 耦合度量、依赖图 | Phase 3 |
472
+ | `.atool-docs/multi-dimensional-analysis.json` | 五维分析数据 | Phase 3 |
473
+ | `.atool-docs/modules/*/data.json` | 模块级结构化数据 | Phase 2 |
474
+ | `atool-analysis/modules/*/prd.md` | 精炼后的模块 PRD(含 NFR-{MOD}-NNN) | Phase 2.5 |
475
+ | `atool-analysis/modules/*/dev-guide.md` | 精炼后的架构文档(含 ADR) | Phase 2.5 |
476
+
477
+ ---
478
+
479
+ ## Refine Mode(精炼模式 — 由 project-analyze Phase 2.5 调用)
480
+
481
+ ### 触发条件
482
+
483
+ Phase 2.5 通过 sub-agent prompt 内联激活,不由用户手动触发。在 requirements-writer Refine Mode 完成后自动进入。
484
+
485
+ ### 输入
486
+
487
+ | 文件 | 用途 |
488
+ |------|------|
489
+ | `atool-analysis/modules/{name}/README.md` | 模块业务概述 |
490
+ | `atool-analysis/modules/{name}/prd.md` | 精炼后的标准 PRD(8 节,含 NFR-{MOD}-NNN) |
491
+ | `atool-analysis/modules/{name}/api.md` | 接口定义 → API 契约设计 |
492
+ | `atool-analysis/modules/{name}/data-model.md` | 数据模型 → 数据所有权 |
493
+ | `atool-analysis/modules/{name}/dev-guide.md` | Phase 2 初稿 → 追加架构章节 |
494
+ | `.atool-docs/modules/{name}/data.json` | 结构化数据(含 refine_hints) |
495
+ | `{stack}-conventions` Architecture + API Design 节 | 栈级架构规范约束 |
496
+
497
+ ### 精炼逻辑
498
+
499
+ 在 `dev-guide.md` 基础上**追加**架构章节(不删除原有内容):
500
+
501
+ 1. **B-subset. 组件设计**(从 Output Format B 裁剪到模块级):
502
+ - 模块内部分层表(层名 / 职责 / 关键类)
503
+ - 边界定义(公开接口 vs 内部实现)
504
+ - 依赖方向约束
505
+
506
+ 2. **C-subset. 数据与交互设计**(从 Output Format C 裁剪到模块级):
507
+ - 数据所有权声明(本模块拥有哪些实体)
508
+ - 同步/异步通信边界表
509
+ - API 契约摘要(引用 api.md)
510
+
511
+ 3. **ADR(架构决策记录)**:
512
+ - 使用 G. ADR Template 的 7 节结构
513
+ - 至少 1 个 ADR(该模块最关键的架构决策)
514
+ - Status / Context / Decision / Options / Consequences / NFR Impact / Related
515
+
516
+ 4. **NFR 对齐**:
517
+ - 确保 prd.md 中的 NFR-{MOD}-NNN 与架构选择一致
518
+ - 首轮标注 `[待系统级确认]`(Phase 4 生成 NFR-SYS-NNN 后回扫替换)
519
+
520
+ ### 不做的事(硬性)
521
+
522
+ - ❌ 不生成 A(Architecture Summary)— 项目级,Phase 4 负责
523
+ - ❌ 不生成 D(Deployment)— 项目级,Phase 4 负责
524
+ - ❌ 不生成 E(Risk)/ F(Roadmap)— 项目级,Phase 4 负责
525
+ - ❌ 不做交互式 6 步决策工作流 — 信息从 Phase 2 产物中提取
526
+ - ❌ 不修改 prd.md / api.md / data-model.md — 只精炼 dev-guide.md
527
+
528
+ ### 输出质量门禁
529
+
530
+ 精炼后的 dev-guide.md 必须通过以下检查(由 Phase 2.5 Gate 3 执行):
531
+ - 包含"组件设计"或"Component Design"章节
532
+ - 包含至少 1 个 ADR 条目
533
+ - ADR 包含 Status + Decision + Consequences(7 节中最关键的 3 节)
534
+
465
535
  ---
466
536
 
467
537
  ## Guardrails
@@ -499,11 +569,11 @@ Do **not**:
499
569
 
500
570
  | 协作 Skill | 触发条件 | 交互方式 |
501
571
  |-----------|---------|---------|
502
- | **project-analyze** | 需要分析现有项目架构 | 先运行 `/project-analyze` 生成知识图谱,再用数据驱动架构评审 |
572
+ | **project-analyze** | Phase 2.5 Refine Mode 调用;Phase 4 聚合时引用 A/E/F 模板结构 | 读取模块文档 + 知识图谱 |
503
573
  | **code-review** | 架构合规性验证 | code-review Dimension 5 验证架构合规;重大违规时建议运行本 skill 深度评审 |
504
574
  | **doc-standards-enforcer** | 产出架构文档(ADR、HLD/LLD) | 架构交付物完成后,用 `doc-standards-enforcer` 验证文档格式 |
505
575
  | **doc-coauthoring** | 协作撰写技术规格或设计文档 | 本 skill 提供技术内容准确性,`doc-coauthoring` 管理协作流程 |
506
576
  | **project-query** | 需要查询架构分析详细数据(层违反、耦合度等) | 建议运行 |
507
- | **requirements-writer** | Architecture NFR 需要传递到模块 PRD | 系统级 NFR(NFR-SYS-*)作为模块级 NFR 的上游约束 |
577
+ | **requirements-writer** | NFR-SYS-* NFR-{MOD}-* 的上游约束 | 系统级 NFR 约束模块级 NFR 范围 |
508
578
  | **java-conventions** | Java/Spring 项目架构设计 | 加载栈级分层/命名/并发规范 |
509
579
  | **web-conventions** | 前端项目架构设计 | 加载前端项目结构/组件规范 |