adspecs 0.1.16 → 0.1.18

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.
@@ -0,0 +1,1289 @@
1
+ ---
2
+ name: project-init
3
+ description: "初始化项目目录结构,收集项目元信息(项目名称、目录、公司、密级),生成 .adspecs/project.json。支持四种模式:简易模式(仅 docs + wiki)、经典模式(+ front-demo)、完整模式(所有目录)、轻量模式(Python+SQLite+React+AntD6 全栈 demo,固定技术栈)。经典/完整模式支持 front-demo 技术栈选择(Vue 或 Ant Design React)。项目目录可选:未提供时直接在当前工作目录创建。Use when the user asks to initialize a project, create project scaffold, set up a new development environment, or recreate the project directory structure."
4
+ argument-hint: "[--project-name <名称>] [--project-dir <目录>] [--company <公司>] [--mode simple|classic|full|demo] [--front-demo vue|antd]"
5
+ ---
6
+
7
+ # 项目初始化 (Project Init)
8
+
9
+ ## 概述
10
+
11
+ 在当前会话工作目录下搭建项目的目录结构。支持三种初始化模式,用户可根据需要选择:
12
+
13
+ | 模式 | 初始化区域 | 说明 |
14
+ | -------- | ---------------------------------------------------------- | ------------------------------------------------------- |
15
+ | 简易模式 | `docs/` + `wiki/` | 仅文档目录和模板,适合产品经理和技术设计阶段 |
16
+ | 经典模式 | `docs/` + `wiki/` + `front-demo/` | 文档 + 前端演示,适合需求设计和原型验证,适用于产品经理 |
17
+ | 完整模式 | `docs/` + `wiki/` + `web-ui/` + `service/` + `front-demo/` | 所有目录和文件,适合产品经理和开发人员 |
18
+ | 轻量模式 | `docs/` + `wiki/` + `web-ui/` + `service/` + `front-demo/` | 固定技术栈(Python + SQLite + React + AntD6)全栈 demo,适合快速原型验证与功能演示 |
19
+
20
+ 各区域说明:
21
+
22
+ | 区域 | 说明 | 创建方式 | 适用模式 |
23
+ | ------------- | ----------------------------- | ------------------------------------------------------------------------------------------------------------------ | ------------------ |
24
+ | `docs/` | 文档目录树(11 个一级子目录) | 创建骨架 + README.md(40 经典/完整/轻量模式从 references 复制,简易模式仅创建空目录;模板已迁移至 .adspecs/templates/) | 简易 / 经典 / 完整 / 轻量 |
25
+ | `wiki/` | 基线文件目录 | 创建骨架 + README.md | 简易 / 经典 / 完整 / 轻量 |
26
+ | `front-demo/` | PM 设计阶段前端演示项目 | 从 references 复制(支持 Vue 或 Ant Design React;轻量模式固定 Ant Design React) | 经典 / 完整 / 轻量 |
27
+ | `web-ui/` | 前端正式项目 | 从插件根目录 references/web-ui 复制 | 完整 / 轻量 |
28
+ | `service/` | 后端服务模块目录 | 创建 service 目录 + README.md | 完整 / 轻量 |
29
+ | `.adspecs/` | 插件运行时配置与脚本 | 从插件根目录 .adspecs 完整复制(含 extensions.yml、feature.json、scripts/) | 简易 / 经典 / 完整 / 轻量 |
30
+
31
+ ## 适用场景
32
+
33
+ 当用户要求:
34
+
35
+ - 初始化项目、创建项目骨架、搭建开发环境
36
+ - 在新机器或新目录重建项目结构
37
+ - 为新项目创建标准目录布局
38
+ - 在当前目录下直接生成项目结构(未提供项目名称时)
39
+
40
+ ## 用户输入
41
+
42
+ ```text
43
+ $ARGUMENTS
44
+ ```
45
+
46
+ ### 项目信息收集(必选,交互式提示)
47
+
48
+ 每次执行本技能时,**必须**通过 AskUserQuestion 工具收集以下项目信息(即使 `$ARGUMENTS` 已提供部分参数,未提供的字段仍需交互收集),**不可跳过此步骤**。
49
+
50
+ #### 必收集字段
51
+
52
+ | 字段 | 变量名 | 说明 | 约束 | 默认值 |
53
+ | -------------- | -------------------- | ---------------------------------- | -------------------------------------------------- | ------------------------ |
54
+ | **项目名称** | `project_name` | 项目完整名称(中文/英文均可) | 必填,不可留空 | — |
55
+ | **项目目录** | `project_dir` | 项目文件目录名,用于创建项目根目录 | 仅允许字母、数字、连字符、下划线 | 留空 = 当前目录 |
56
+ | **公司名称** | `company_name` | 所属公司名称 | 任意字符 | "XX有限公司" |
57
+ | **项目短名称** | `project_short_name` | 用于文件命名前缀和模块编号前缀 | **仅允许英文字母和数字**(不含连字符、空格、中文) | 从 project_name 自动推导 |
58
+ | **文件密级** | `confidentiality` | 文件保密等级 | 可选值:公开 / 内部资料 / 机密 / 绝密 | "内部资料" |
59
+
60
+ #### 收集方式
61
+
62
+ 使用 **AskUserQuestion** 工具分两次收集:
63
+
64
+ **第一次(核心信息)**:
65
+
66
+ ```
67
+ questions: [
68
+ {
69
+ question: "请输入项目名称:",
70
+ header: "项目名称",
71
+ options: [
72
+ { label: "示例:华峰铝业CRM平台", description: "项目完整名称,支持中英文" },
73
+ { label: "示例:my-project", description: "英文项目名称" }
74
+ ],
75
+ multiSelect: false
76
+ },
77
+ {
78
+ question: "请输入项目目录名(留空则在当前目录直接创建):",
79
+ header: "项目目录",
80
+ options: [
81
+ { label: "留空(当前目录)", description: "不创建子目录,直接在当前工作目录下生成项目结构" },
82
+ { label: "输入目录名", description: "在当前目录下创建同名子目录作为项目根目录(仅字母、数字、连字符、下划线)" }
83
+ ],
84
+ multiSelect: false
85
+ }
86
+ ]
87
+ ```
88
+
89
+ **第二次(补充信息)**:
90
+
91
+ ```
92
+ questions: [
93
+ {
94
+ question: "请输入公司名称(不填默认"XX有限公司"):",
95
+ header: "公司名称",
96
+ options: [
97
+ { label: "XX有限公司", description: "默认值,后续可修改 .adspecs/project.json" },
98
+ { label: "输入公司名称", description: "自定义公司名称" }
99
+ ],
100
+ multiSelect: false
101
+ },
102
+ {
103
+ question: "请选择文件密级(不选默认"内部资料"):",
104
+ header: "文件密级",
105
+ options: [
106
+ { label: "内部资料(默认)", description: "仅限公司内部使用" },
107
+ { label: "公开", description: "可对外公开" },
108
+ { label: "机密", description: "限授权人员访问" },
109
+ { label: "绝密", description: "最高保密等级" }
110
+ ],
111
+ multiSelect: false
112
+ }
113
+ ]
114
+ ```
115
+
116
+ #### project_short_name 自动推导规则
117
+
118
+ `project_short_name` 不由用户直接输入,而是自动推导:
119
+
120
+ 1. 从 `project_name` 中提取所有英文字母和数字(去除中文、空格、连字符、下划线等)
121
+ 2. 转为小写
122
+ 3. 如果结果为空(项目名称全中文),则从 `project_dir` 推导(去除连字符和下划线)
123
+ 4. 如果仍为空,使用 `project` 作为默认值
124
+
125
+ **示例**:
126
+
127
+ | project_name | project_dir | project_short_name |
128
+ | ------------------- | ------------ | ------------------ |
129
+ | "华峰铝业 CRM 平台" | "hflv-crm" | "hflvcrm" |
130
+ | "my-project" | "my-project" | "myproject" |
131
+ | "CRM 客户关系管理" | "" | "crm" |
132
+ | "智慧园区管理" | "park" | "park" |
133
+
134
+ #### $ARGUMENTS 快捷参数
135
+
136
+ 以下参数可通过 `$ARGUMENTS` 直接传入,跳过对应的交互提示:
137
+
138
+ | 参数 | 对应字段 | 示例 |
139
+ | ----------------------- | ------------ | ------------------------------ |
140
+ | `--project-name <名称>` | project_name | `--project-name "华峰铝业CRM"` |
141
+ | `--project-dir <目录>` | project_dir | `--project-dir hflv-crm` |
142
+ | `--company <公司名称>` | company_name | `--company "华峰集团"` |
143
+
144
+ ### 初始化模式(必选,交互式提示)
145
+
146
+ 通过 **AskUserQuestion** 工具询问用户选择初始化模式:
147
+
148
+ - **简易模式**:仅初始化文档目录(docs/ + wiki/),不初始化 web-ui、service、front-demo
149
+ - **经典模式**:简易模式基础上完成 front-demo 初始化
150
+ - **完整模式**:初始化所有目录和文件
151
+ - **轻量模式**:固定技术栈(Python + SQLite + React + Ant Design 6)全栈 demo,包含完整前后端程序,适合快速功能演示
152
+
153
+ 如果 `$ARGUMENTS` 中包含 `--mode` 参数,可直接解析使用:
154
+
155
+ - `--mode simple` → 简易模式
156
+ - `--mode classic` → 经典模式
157
+ - `--mode full` → 完整模式
158
+ - `--mode demo` → 轻量模式
159
+
160
+ ### 前端演示技术栈(经典/完整模式时必选,轻量模式固定)
161
+
162
+ 当用户选择**经典模式**或**完整模式**时,通过 **AskUserQuestion** 工具询问前端演示项目的技术栈:
163
+
164
+ - **front-demo**(Vue 技术栈,**默认**)→ 从插件根目录 `references/front-demo/` 复制
165
+ - **antd-front-demo**(Ant Design React 技术栈)→ 从插件根目录 `references/antd-front-demo/` 复制
166
+
167
+ 如果 `$ARGUMENTS` 中包含 `--front-demo` 参数,可直接解析使用:
168
+
169
+ - `--front-demo vue` → front-demo(Vue 技术栈)
170
+ - `--front-demo antd` → antd-front-demo(Ant Design React 技术栈)
171
+
172
+ 简易模式下忽略此参数。
173
+
174
+ **轻量模式**前端技术栈固定为 **Ant Design React**(`FRONT_DEMO_SOURCE = "antd-front-demo"`),无需询问用户。
175
+
176
+ ### 可选参数(通过 $ARGUMENTS 传入)
177
+
178
+ | 参数 | 默认值 | 说明 |
179
+ | -------------- | --------------------------------------------- | ---------------------------------------------------------- |
180
+ | `--modules` | `3100-crm-mdm:mdm,3103-crm-contract:contract` | 逗号分隔的后端模块列表,格式 `{port}-crm-{name}:{package}` |
181
+ | `--mode` | (交互式选择) | 初始化模式:`simple` / `classic` / `full` / `demo` |
182
+ | `--front-demo` | `vue` | 前端演示技术栈:`vue` / `antd`(轻量模式下自动为 `antd`) |
183
+
184
+ ### 最终项目路径
185
+
186
+ 项目基于**用户当前会话工作目录**(`pwd`)创建,根据 `project_dir` 确定目标路径:
187
+
188
+ - 如果 `project_dir` 非空 → `TARGET = $(pwd)/{project_dir}`,在该子目录下创建项目结构
189
+ - 如果 `project_dir` 为空 → `TARGET = $(pwd)`,直接在当前工作目录下创建项目结构
190
+
191
+ **简易模式:**
192
+
193
+ ```
194
+ {pwd}/(或 {pwd}/{project_dir}/)
195
+ ├── .adspecs/
196
+ ├── docs/
197
+ └── wiki/
198
+ ```
199
+
200
+ **经典模式:**
201
+
202
+ ```
203
+ {pwd}/(或 {pwd}/{project_dir}/)
204
+ ├── .adspecs/
205
+ ├── docs/
206
+ ├── wiki/
207
+ └── front-demo/
208
+ ```
209
+
210
+ **完整模式:**
211
+
212
+ ```
213
+ {pwd}/(或 {pwd}/{project_dir}/)
214
+ ├── .adspecs/
215
+ ├── docs/
216
+ ├── wiki/
217
+ ├── web-ui/
218
+ ├── service/
219
+ └── front-demo/
220
+ ```
221
+
222
+ ## 执行前检查
223
+
224
+ **重要**:以下步骤 **每次执行都必须完整走一遍**,不可因为上下文中已有相关信息而跳过任何交互提示。即使当前目录已存在项目结构,也必须重新询问用户。
225
+
226
+ 1. **收集项目信息**(必选,不可跳过):
227
+ - 解析 `$ARGUMENTS` 中的 `--project-name`、`--project-dir`、`--company` 参数
228
+ - 对未通过参数提供的字段,使用 **AskUserQuestion** 工具按"项目信息收集"章节的方式分两次收集
229
+ - 收集完成后,对 `project_short_name` 执行自动推导(按"project_short_name 自动推导规则")
230
+ - 对 `company_name` 和 `confidentiality`,如果用户未填写,使用默认值("XX有限公司" 和 "内部资料")
231
+ - 记录收集结果:`PROJECT_NAME`、`PROJECT_DIR`、`COMPANY_NAME`、`PROJECT_SHORT_NAME`、`CONFIDENTIALITY`
232
+ - 解析 `--modules` 列表(有则用,无则用默认值)
233
+ - 解析 `--mode` 参数(有则用,无则交互式选择)
234
+ - 解析 `--front-demo` 参数(有则用,经典/完整模式下无则交互式选择)
235
+
236
+ 2. **选择初始化模式**:
237
+ - 使用 **AskUserQuestion** 工具询问初始化模式(简易 / 经典 / 完整)
238
+ - **AskUserQuestion 调用示例**:
239
+
240
+ ```
241
+ questions: [
242
+ {
243
+ question: "请选择项目初始化模式:",
244
+ header: "初始化模式",
245
+ options: [
246
+ { label: "简易模式", description: "仅初始化文档目录和模板(docs/ + wiki/),适合产品经理和技术设计阶段" },
247
+ { label: "经典模式", description: "文档 + 前端演示项目(docs/ + wiki/ + front-demo/),适合需求设计和原型验证,适用于产品经理" },
248
+ { label: "完整模式", description: "所有目录和文件(docs/ + wiki/ + web-ui/ + service/ + front-demo/),适合正式开发阶段,适用于开发人员" },
249
+ { label: "轻量模式", description: "固定技术栈 Python + SQLite + React + AntD6 全栈 demo(docs + wiki + web-ui + service + front-demo),适合快速功能演示" }
250
+ ],
251
+ multiSelect: false
252
+ }
253
+ ]
254
+ ```
255
+
256
+ 3. **选择前端演示技术栈**(仅经典/完整模式,轻量模式固定 Ant Design React 无需选择):
257
+ - 使用 **AskUserQuestion** 工具询问前端演示技术栈
258
+ - **AskUserQuestion 调用示例**:
259
+
260
+ ```
261
+ questions: [
262
+ {
263
+ question: "请选择前端演示项目的技术栈:",
264
+ header: "前端技术栈",
265
+ options: [
266
+ { label: "Vue(默认)", description: "Vue 3 + Vite + TypeScript + Element Plus 技术栈" },
267
+ { label: "Ant Design React", description: "React + Ant Design 技术栈" },
268
+ { label: "跳过", description: "不创建前端演示项目,仅初始化文档目录和模板" }
269
+ ],
270
+ multiSelect: false
271
+ }
272
+ ]
273
+ ```
274
+
275
+ - 记录选择结果:`FRONT_DEMO_SOURCE` = `front-demo`(Vue)或 `antd-front-demo`(Ant Design React)
276
+
277
+ 4. **计算最终路径**:
278
+ - 如果 `PROJECT_DIR` 非空 → `TARGET = $(pwd)/{PROJECT_DIR}`
279
+ - 如果 `PROJECT_DIR` 为空 → `TARGET = $(pwd)`(直接使用当前工作目录)
280
+ 5. **检查目标路径是否存在**:
281
+ - 如果 `TARGET` 不存在 → 直接创建目录,跳到第 7 步
282
+ - 如果 `TARGET` 存在 → 进入**冲突处理流程**(第 6 步)
283
+ 6. **冲突处理流程**(按模式扫描对应区域):
284
+ - 根据模式扫描 `TARGET` 下对应区域目录的存在情况:
285
+ - **简易模式**:扫描 `.adspecs/`、`docs/`、`wiki/`
286
+ - **经典模式**:扫描 `.adspecs/`、`docs/`、`wiki/`、`front-demo/`
287
+ - **完整模式**:扫描 `.adspecs/`、`docs/`、`wiki/`、`web-ui/`、`service/`、`front-demo/`
288
+ - **轻量模式**:扫描 `.adspecs/`、`docs/`、`wiki/`、`web-ui/`、`service/`、`front-demo/`(同完整模式扫描范围)
289
+ - 如果对应区域均不存在 → 视为空目录,直接继续,跳到第 7 步
290
+ - 如果有任意区域已存在 → 使用 **AskUserQuestion** 工具询问用户对**每个已存在的区域**的处理方式,提供以下两个选项:
291
+ - **重新创建**:删除该区域现有文件,使用最新模板重新创建
292
+ - **跳过**:保留该区域现有文件,不做任何修改
293
+ - 将用户选择记录到区域决策映射中,供后续各阶段使用:
294
+
295
+ **简易模式区域决策:**
296
+
297
+ ```
298
+ 区域决策 = {
299
+ .adspecs: "recreate" | "skip" | "create",
300
+ docs: "recreate" | "skip" | "create", # create = 原本不存在,直接创建
301
+ wiki: "recreate" | "skip" | "create",
302
+ }
303
+ 子目录决策 = {
304
+ conventions_decision: "update" | "skip", # docs 为 skip 且 40-project_conventions/ 有文件时
305
+ templates_decision: "update" | "skip", # .adspecs 为 skip 且 templates/ 有文件时
306
+ }
307
+ ```
308
+
309
+ **经典模式区域决策:**
310
+
311
+ ```
312
+ 区域决策 = {
313
+ .adspecs: "recreate" | "skip" | "create",
314
+ docs: "recreate" | "skip" | "create",
315
+ wiki: "recreate" | "skip" | "create",
316
+ front_demo: "recreate" | "skip" | "create",
317
+ }
318
+ 子目录决策 = {
319
+ conventions_decision: "update" | "skip", # docs 为 skip 且 40-project_conventions/ 有文件时
320
+ templates_decision: "update" | "skip", # .adspecs 为 skip 且 templates/ 有文件时
321
+ }
322
+ ```
323
+
324
+ **完整模式区域决策:**
325
+
326
+ ```
327
+ 区域决策 = {
328
+ .adspecs: "recreate" | "skip" | "create",
329
+ docs: "recreate" | "skip" | "create",
330
+ wiki: "recreate" | "skip" | "create",
331
+ web_ui: "recreate" | "skip" | "create",
332
+ service: "recreate" | "skip" | "create",
333
+ front_demo: "recreate" | "skip" | "create",
334
+ }
335
+ 子目录决策 = {
336
+ conventions_decision: "update" | "skip", # docs 为 skip 且 40-project_conventions/ 有文件时
337
+ templates_decision: "update" | "skip", # .adspecs 为 skip 且 templates/ 有文件时
338
+ }
339
+ ```
340
+
341
+ **轻量模式区域决策:**(同完整模式,但前端技术栈固定 + 规范目录自动按技术栈复制)
342
+
343
+ ```
344
+ 区域决策 = {
345
+ .adspecs: "recreate" | "skip" | "create",
346
+ docs: "recreate" | "skip" | "create",
347
+ wiki: "recreate" | "skip" | "create",
348
+ web_ui: "recreate" | "skip" | "create",
349
+ service: "recreate" | "skip" | "create",
350
+ front_demo: "recreate" | "skip" | "create", # 固定 antd-front-demo
351
+ }
352
+ 子目录决策 = {
353
+ conventions_decision: "update" | "skip", # docs 为 skip 且 40-project_conventions/ 有文件时
354
+ templates_decision: "update" | "skip", # .adspecs 为 skip 且 templates/ 有文件时
355
+ }
356
+ 固定技术栈:
357
+ FRONT_DEMO_SOURCE = "antd-front-demo" # Ant Design React(无需询问用户)
358
+ FRONTEND_STANDARD_SOURCE = "ant6-front-standard"
359
+ BACKEND_STANDARD_SOURCE = "python-end-standard"
360
+ ```
361
+
362
+ - **AskUserQuestion 调用示例**(所有模式,当 `.adspecs/`、`docs/` 和 `web-ui/` 已存在时):
363
+
364
+ ```
365
+ questions: [
366
+ {
367
+ question: "docs/ 目录已存在,如何处理?",
368
+ header: "docs/",
369
+ options: [
370
+ { label: "重新创建", description: "删除现有 docs/ 目录,使用最新模板重新创建" },
371
+ { label: "更新", description: "保留现有 docs/ 目录,按新内容覆盖" },
372
+ { label: "跳过", description: "保留现有 docs/ 目录,不做任何修改" }
373
+ ],
374
+ multiSelect: false
375
+ },
376
+ {
377
+ question: "web-ui/ 目录已存在,如何处理?",
378
+ header: "web-ui/",
379
+ options: [
380
+ { label: "重新创建", description: "删除现有 web-ui/ 目录,从模板重新复制" },
381
+ { label: "更新", description: "保留现有 web-ui/ 目录,按新内容覆盖" },
382
+ { label: "跳过", description: "保留现有 web-ui/ 目录,不做任何修改" }
383
+ ],
384
+ multiSelect: false
385
+ },
386
+ {
387
+ question: ".adspecs/ 目录已存在,如何处理?",
388
+ header: ".adspecs/",
389
+ options: [
390
+ { label: "重新创建", description: "删除现有 .adspecs/ 目录,从模板重新复制" },
391
+ { label: "更新", description: "保留现有 .adspecs/ 目录,按新内容覆盖" },
392
+ { label: "跳过", description: "保留现有 .adspecs/ 目录,不做任何修改" }
393
+ ],
394
+ multiSelect: false
395
+ }
396
+ ]
397
+ ```
398
+
399
+ - **补充检查(模式升级检测)**:当 `docs/` 已存在且 `docs` 决策为 `skip` 时,如果当前模式为**经典模式**、**完整模式**或**轻量模式**,需额外检查 `docs/40-project_conventions/` 的内容状态:
400
+ - 检查 `docs/40-project_conventions/` 下是否存在实际文件(非空目录)
401
+ - 如果 `40-project_conventions/` 仅包含空子目录(简易模式的产物:`end-integration/` + `frontend-integration/`,或仅 `frontend-standard/` 为空目录)→ 根据前端技术栈选择自动从 references 补充复制 `frontend-standard/` 的文件内容(Vue → `ecp-front-standard/`,Ant Design React → `ant6-front-standard/`),并输出:`📦 补充:检测到 40-project_conventions/ 为空目录(简易模式产物),已按前端技术栈补充 frontend-standard/`
402
+ - 如果 `40-project_conventions/` 已包含文件 → 不做额外处理
403
+
404
+ - **子目录更新检查(40-project_conventions/)**:当 `docs/` 已存在且 `docs` 决策为 `skip`,且 `docs/40-project_conventions/` 下已包含实际文件时,需额外询问用户是否更新此子目录:
405
+ - 使用 **AskUserQuestion** 工具询问:
406
+
407
+ ```
408
+ questions: [
409
+ {
410
+ question: "docs/40-project_conventions/ 目录已存在且包含文件,是否使用最新规范文件更新?",
411
+ header: "40-conventions",
412
+ options: [
413
+ { label: "更新", description: "使用 references 中最新的规范文件覆盖现有内容(已有文件将被替换)" },
414
+ { label: "跳过", description: "保留现有 40-project_conventions/ 内容,不做任何修改" }
415
+ ],
416
+ multiSelect: false
417
+ }
418
+ ]
419
+ ```
420
+
421
+ - 记录子决策:`conventions_decision` = `"update"` | `"skip"`
422
+ - 如果 `40-project_conventions/` 不存在或仅包含空目录 → 跳过此检查,`conventions_decision` = `"skip"`
423
+
424
+ - **子目录更新检查(.adspecs/templates/)**:当 `.adspecs/` 已存在且 `.adspecs` 决策为 `skip`,且 `.adspecs/templates/` 下已包含实际文件时,需额外询问用户是否更新模板目录:
425
+ - 使用 **AskUserQuestion** 工具询问:
426
+
427
+ ```
428
+ questions: [
429
+ {
430
+ question: ".adspecs/templates/ 目录已存在且包含文件,是否使用最新模板文件更新?",
431
+ header: "templates/",
432
+ options: [
433
+ { label: "更新", description: "使用 references 中最新的模板文件覆盖现有内容(已有模板将被替换)" },
434
+ { label: "跳过", description: "保留现有 .adspecs/templates/ 内容,不做任何修改" }
435
+ ],
436
+ multiSelect: false
437
+ }
438
+ ]
439
+ ```
440
+
441
+ - 记录子决策:`templates_decision` = `"update"` | `"skip"`
442
+ - 如果 `.adspecs/templates/` 不存在或仅包含空目录 → 跳过此检查,`templates_decision` = `"skip"`
443
+
444
+ 7. **输出初始化计划摘要**,包含项目信息(项目名称、项目短名称、公司名称、文件密级、项目目录)、初始化模式、前端技术栈(如适用)、每个区域的操作(创建 / 重新创建 / 跳过)、子目录更新决策(40-project_conventions/ 和 templates/ 的更新/跳过)、feature.json/project.json 属性补全计划以及补充检查结果,等待用户确认后继续执行
445
+
446
+ ## 工作流程
447
+
448
+ ### 阶段 1:创建 docs/ 目录结构
449
+
450
+ **适用模式:简易 / 经典 / 完整 / 轻量**
451
+
452
+ 根据区域决策执行:
453
+
454
+ - `docs` 决策为 `skip` → 输出 `⏭ 阶段 1 跳过:docs/ 已存在,保留现有内容`,但需检查 `conventions_decision` 子决策:
455
+ - 如果 `conventions_decision` = `"update"` → 根据前端技术栈选择从 `references/ecp-front-standard/`(Vue)或 `references/ant6-front-standard/`(Ant Design React)复制到 `$TARGET/docs/40-project_conventions/frontend-standard/`,覆盖更新前端规范文件,输出:`🔄 阶段 1 补充更新:docs/40-project_conventions/frontend-standard/ 已按前端技术栈更新`
456
+ - 如果 `conventions_decision` = `"skip"` → 不做额外处理
457
+ - 处理完子决策后进入阶段 2
458
+ - `docs` 决策为 `recreate` → 执行 `rm -rf "$TARGET/docs"`,然后按下方步骤完整重建
459
+ - `docs` 决策为 `create` → 直接按下方步骤创建
460
+
461
+ 创建以下完整目录树。大部分目录使用 `mkdir -p` 创建并写入 `README.md`;其中 `40-project_conventions/` 在经典/完整模式下根据前端技术栈选择复制 `ecp-front-standard/`(Vue)或 `ant6-front-standard/`(Ant Design React)到 `frontend-standard/` 子目录,轻量模式下同时复制 `python-end-standard/` 到 `end-standard/` 和 `ant6-front-standard/` 到 `frontend-standard/`,在简易模式下仅创建空子目录结构。模板文件(原 `50-templates/`)已迁移至 `.adspecs/templates/`,随阶段 6 的 `.adspecs/` 复制一并完成。
462
+
463
+ #### 目录结构
464
+
465
+ ```
466
+ docs/
467
+ ├── 00-planning/
468
+ ├── 00-customer-requirements/
469
+ ├── 10-architecture/
470
+ ├── 20-prd/
471
+ ├── 30-system-design/
472
+ ├── 40-project_conventions/
473
+ │ ├── frontend-standard/ # 经典/完整模式按前端技术栈复制(Vue→ecp-front-standard,AntD→ant6-front-standard);轻量模式固定 ant6-front-standard;简易模式为空
474
+ │ └── end-standard/ # 轻量模式固定 python-end-standard;其他模式为空
475
+ ├── 70-scripts/
476
+ │ └── depoly/
477
+ ├── 80-development/
478
+ │ ├── 801-dev/
479
+ │ └── 802-test/
480
+ │ └── 800-log/
481
+ ├── 100-help/
482
+ └── 300-specs/
483
+ ```
484
+
485
+ #### README.md 内容模板
486
+
487
+ 每个一级子目录的 `README.md` 使用以下格式:
488
+
489
+ ```markdown
490
+ # {目录名称}
491
+
492
+ {用途说明}
493
+
494
+ ## 目录说明
495
+
496
+ | 子目录 | 说明 |
497
+ | -------- | ------ |
498
+ | {子目录} | {说明} |
499
+
500
+ ## 文件命名规范
501
+
502
+ {命名规则说明}
503
+
504
+ ## 修订记录
505
+
506
+ | 日期 | 版本 | 修改内容 | 修改人 |
507
+ | ------- | ---- | -------- | ------ |
508
+ | {today} | 1.0 | 初始创建 | system |
509
+ ```
510
+
511
+ 各目录 README.md 具体内容:
512
+
513
+ **00-planning/**:
514
+
515
+ - 用途: 规划阶段文档,存放平台级规划产物(业务场景、子模块依赖关系、统一数据模型等)
516
+ - 命名规范: `{seq}-{name}.md`(如 `01-smom-wms_business_architecture.md`)
517
+
518
+ **00-customer-requirements/**:
519
+
520
+ - 用途: 客户需求文档,存放客户原始需求、会议纪要、需求沟通记录
521
+ - 子目录: `crm/` — CRM 模块客户需求
522
+
523
+ **10-architecture/**:
524
+
525
+ - 用途: 架构文档,系统架构设计、模块依赖关系、统一数据模型
526
+ - 命名规范: `{seq}-{name}.md`(如 `01-smom-wms_business_architecture.md`)
527
+
528
+ **20-prd/**:
529
+
530
+ - 用途: PRD 文档,产品需求说明书
531
+ - 子目录: `crm/` — CRM 模块 PRD
532
+ - 命名规范: `{module-code}-{module-name}/` 下存放
533
+
534
+ **30-system-design/**:
535
+
536
+ - 用途: 系统设计,后端系统设计、SQL Schema、前端设计、TDD 任务清单
537
+ - 子目录: `crm/` — CRM 模块系统设计
538
+ - 命名规范: `{module-code}-{module-name}_system-design.md`、`{module-code}-{module-name}_schema.sql`
539
+
540
+ **40-project_conventions/**(经典/完整/轻量模式按技术栈复制规范,简易模式仅创建空子目录):
541
+
542
+ - 用途: 项目约定,前后端集成开发规范和接口约定
543
+ - 子目录:
544
+ - `frontend-standard/` — 前端约定(按技术栈来源不同)
545
+ - `end-standard/` — 后端约定(仅轻量模式复制 Python 后端规范)
546
+ - 来源规则(经典/完整模式):
547
+ - 前端演示技术栈选择 **Vue(默认)** → 复制 `$PLUGIN_DIR/references/ecp-front-standard/` 到 `$TARGET/docs/40-project_conventions/frontend-standard/`
548
+ - 前端演示技术栈选择 **Ant Design React** → 复制 `$PLUGIN_DIR/references/ant6-front-standard/` 到 `$TARGET/docs/40-project_conventions/frontend-standard/`
549
+ - 来源规则(轻量模式):
550
+ - 前端规范:复制 `$PLUGIN_DIR/references/ant6-front-standard/` 到 `$TARGET/docs/40-project_conventions/frontend-standard/`
551
+ - 后端规范:复制 `$PLUGIN_DIR/references/python-end-standard/` 到 `$TARGET/docs/40-project_conventions/end-standard/`
552
+ - 来源规则(简易模式): 仅创建空目录结构 `frontend-standard/`,不复制文件
553
+
554
+ **70-scripts/**:
555
+
556
+ - 用途: 脚本,部署脚本和工具脚本
557
+ - 子目录: `depoly/` — 部署相关脚本
558
+
559
+ **80-development/**:
560
+
561
+ - 用途: 开发产物,开发工件和测试工件归档
562
+ - 子目录: `801-dev/` 开发工件, `802-test/` 测试工件
563
+ - 子目录: `800-log/` 开发日志,AI 会话记录和开发历史追踪
564
+ - 命名规范: `{YYYYMMDD}_{主题}.md` 或 `{YYYYMMDD_HHmmss}_{主题}.md`
565
+
566
+ **100-help/**:
567
+
568
+ - 用途: 帮助文档,使用手册和参考指南
569
+ - 内容: `使用手册.md`
570
+
571
+ **300-specs/**:
572
+
573
+ - 用途: 功能规格说明书,p{module}-{seq}\_{name}\_spec.md 格式
574
+ - 命名规范: `p{module}-{seq}_{name}_spec.md`,配套 `p{module}-{seq}_{name}_sim-data.md`
575
+
576
+ #### 执行命令
577
+
578
+ ```bash
579
+ SKILL_DIR="<SKILL.md 所在目录>" # 即 project-init skill 目录
580
+ PLUGIN_DIR="$(cd "$SKILL_DIR/../.." && pwd)" # adspecs 插件根目录
581
+ # 根据 project_dir 是否为空确定目标路径
582
+ TARGET="$(pwd)/{PROJECT_DIR}" # PROJECT_DIR 非空时
583
+ # 或 TARGET="$(pwd)" # PROJECT_DIR 为空时
584
+ mkdir -p "$TARGET"
585
+
586
+ # 如果 docs 决策为 recreate,先删除现有目录
587
+ # rm -rf "$TARGET/docs"
588
+
589
+ # --- 创建空骨架目录(需要 README.md 的目录) ---
590
+ mkdir -p "$TARGET/docs/00-planning"
591
+ mkdir -p "$TARGET/docs/00-customer-requirements"
592
+ mkdir -p "$TARGET/docs/10-architecture"
593
+ mkdir -p "$TARGET/docs/20-prd"
594
+ mkdir -p "$TARGET/docs/30-system-design"
595
+ mkdir -p "$TARGET/docs/70-scripts/depoly"
596
+ mkdir -p "$TARGET/docs/80-development/800-log"
597
+ mkdir -p "$TARGET/docs/80-development/801-dev"
598
+ mkdir -p "$TARGET/docs/80-development/802-test"
599
+ mkdir -p "$TARGET/docs/100-help"
600
+ mkdir -p "$TARGET/docs/300-specs"
601
+
602
+ # --- 从 references 复制已有文件的目录 ---
603
+ # 40-project_conventions:根据模式决定处理方式
604
+ if [ "{mode}" = "simple" ]; then
605
+ # 简易模式:仅创建空子目录结构,不复制 references 文件
606
+ mkdir -p "$TARGET/docs/40-project_conventions/frontend-standard"
607
+ elif [ "{mode}" = "demo" ]; then
608
+ # 轻量模式:固定技术栈 Python + SQLite + React + AntD6,前后端规范都复制
609
+ mkdir -p "$TARGET/docs/40-project_conventions/frontend-standard"
610
+ mkdir -p "$TARGET/docs/40-project_conventions/end-standard"
611
+ cp -r "$PLUGIN_DIR/references/ant6-front-standard/." "$TARGET/docs/40-project_conventions/frontend-standard/"
612
+ cp -r "$PLUGIN_DIR/references/python-end-standard/." "$TARGET/docs/40-project_conventions/end-standard/"
613
+ else
614
+ # 经典/完整模式:按前端技术栈选择复制前端规范到 frontend-standard/
615
+ if [ "$FRONT_DEMO_SOURCE" = "antd-front-demo" ]; then
616
+ # Ant Design React 技术栈
617
+ FRONTEND_STANDARD_SOURCE="ant6-front-standard"
618
+ else
619
+ # Vue 技术栈(默认)
620
+ FRONTEND_STANDARD_SOURCE="ecp-front-standard"
621
+ fi
622
+ mkdir -p "$TARGET/docs/40-project_conventions/frontend-standard"
623
+ cp -r "$PLUGIN_DIR/references/$FRONTEND_STANDARD_SOURCE/." "$TARGET/docs/40-project_conventions/frontend-standard/"
624
+ fi
625
+
626
+ # 注意:模板文件已迁移至 .adspecs/templates/,随阶段 6 的 .adspecs/ 复制一并完成,无需单独复制
627
+ ```
628
+
629
+ 然后使用 Write 工具为**骨架目录**生成 `README.md`(经典/完整模式下 40 已有文件无需生成;简易模式下 40 仅有空目录结构,需生成 README.md)。
630
+
631
+ `SKILL_DIR` 的确定方式:**SKILL.md 所在目录**即为 `SKILL_DIR`。`PLUGIN_DIR = SKILL_DIR/../..`(adspecs 插件根目录),所有 references 资源均基于 `$PLUGIN_DIR/references/` 访问(references 已迁移至插件根目录)。
632
+
633
+ 完成后输出:
634
+
635
+ - 新建时(简易模式):`✅ 阶段 1 完成:docs/ 目录结构已创建(11 个一级子目录,40 仅创建空目录;模板在 .adspecs/templates/ 随阶段 6 复制)`
636
+ - 新建时(经典/完整模式):`✅ 阶段 1 完成:docs/ 目录结构已创建(11 个一级子目录,其中 40 从 references 复制;模板在 .adspecs/templates/ 随阶段 6 复制)`
637
+ - 新建时(轻量模式):`✅ 阶段 1 完成:docs/ 目录结构已创建(11 个一级子目录,40 按 Python+React 技术栈复制前后端规范;模板在 .adspecs/templates/ 随阶段 6 复制)`
638
+ - 重建时:`🔄 阶段 1 完成:docs/ 目录结构已重新创建(删除旧目录后重建)`
639
+ - 跳过时:`⏭ 阶段 1 跳过:docs/ 已存在,保留现有内容`
640
+ - 跳过但更新 40 时:`⏭ 阶段 1 跳过:docs/ 已存在 + 🔄 40-project_conventions/ 已从 references 更新`
641
+
642
+ ---
643
+
644
+ ### 阶段 2:创建 wiki/ 基线文件目录
645
+
646
+ **适用模式:简易 / 经典 / 完整 / 轻量**
647
+
648
+ 根据区域决策执行:
649
+
650
+ - `wiki` 决策为 `skip` → 输出 `⏭ 阶段 2 跳过:wiki/ 已存在,保留现有内容`,进入阶段 3
651
+ - `wiki` 决策为 `recreate` → 执行 `rm -rf "$TARGET/wiki"`,然后按下方步骤完整重建
652
+ - `wiki` 决策为 `create` → 直接按下方步骤创建
653
+
654
+ 创建 `wiki/` 目录,用于存放项目基线文件(与 `docs/` 下的 `300-specs/` 不同,顶层 `wiki/` 用于存放跨模块或项目级别的基线规格文件)。
655
+
656
+ #### 目录结构
657
+
658
+ ```
659
+ wiki/
660
+ └── README.md
661
+ ```
662
+
663
+ #### README.md 内容
664
+
665
+ 使用 Write 工具生成 `wiki/README.md`,内容如下:
666
+
667
+ ```markdown
668
+ # wiki
669
+
670
+ 基线文件目录,用于存放项目级别的基线规格文件,包括功能规格、接口规格、数据规格等。
671
+
672
+ ## 目录说明
673
+
674
+ | 子目录 | 说明 |
675
+ | ------------ | ------------------------ |
676
+ | (按需创建) | 按模块或主题组织基线文件 |
677
+
678
+ ## 文件命名规范
679
+
680
+ `{module}-{name}_spec.md`
681
+
682
+ ## 修订记录
683
+
684
+ | 日期 | 版本 | 修改内容 | 修改人 |
685
+ | ------- | ---- | -------- | ------ |
686
+ | {today} | 1.0 | 初始创建 | system |
687
+ ```
688
+
689
+ #### 执行命令
690
+
691
+ ```bash
692
+ # TARGET="$(pwd)/{PROJECT_DIR}" # PROJECT_DIR 非空时
693
+ # 或 TARGET="$(pwd)" # PROJECT_DIR 为空时
694
+
695
+ # 如果 wiki 决策为 recreate,先删除现有目录
696
+ # rm -rf "$TARGET/wiki"
697
+
698
+ mkdir -p "$TARGET/wiki"
699
+ ```
700
+
701
+ 然后使用 Write 工具生成 `wiki/README.md`。
702
+
703
+ 完成后输出:
704
+
705
+ - 新建时:`✅ 阶段 2 完成:wiki/ 基线文件目录已创建`
706
+ - 重建时:`🔄 阶段 2 完成:wiki/ 基线文件目录已重新创建`
707
+ - 跳过时:`⏭ 阶段 2 跳过:wiki/ 已存在,保留现有内容`
708
+
709
+ ---
710
+
711
+ ### 阶段 3:创建 web-ui/ 前端项目
712
+
713
+ **适用模式:完整 / 轻量**
714
+
715
+ **模式检查**:如果当前模式 ≠ 完整模式 且 ≠ 轻量模式 → 输出 `⏭ 阶段 3 跳过(当前为{模式名},web-ui/ 仅在完整/轻量模式下初始化)`,直接进入阶段 4。
716
+
717
+ 根据区域决策执行:
718
+
719
+ - `web_ui` 决策为 `skip` → 输出 `⏭ 阶段 3 跳过:web-ui/ 已存在,保留现有内容`,进入阶段 4
720
+ - `web_ui` 决策为 `recreate` → 执行 `rm -rf "$TARGET/web-ui"`,然后按下方步骤完整重建
721
+ - `web_ui` 决策为 `create` → 直接按下方步骤创建
722
+
723
+ 从 references 完整复制 `web-ui` 目录下的是所有文件,web-ui 是ECP管理后台壳工程到目标目录。
724
+
725
+ #### 源路径
726
+
727
+ 从插件根目录的 `references/` 目录复制。`PLUGIN_DIR = SKILL_DIR/../..`(adspecs 插件根目录)。
728
+
729
+ #### 执行命令
730
+
731
+ ```bash
732
+ SKILL_DIR="<SKILL.md 所在目录>"
733
+ PLUGIN_DIR="$(cd "$SKILL_DIR/../.." && pwd)" # adspecs 插件根目录
734
+ # TARGET="$(pwd)/{PROJECT_DIR}" # PROJECT_DIR 非空时
735
+ # 或 TARGET="$(pwd)" # PROJECT_DIR 为空时
736
+
737
+ # 如果 web_ui 决策为 recreate,先删除现有目录
738
+ # rm -rf "$TARGET/web-ui"
739
+
740
+ # 从插件根目录 references 复制完整目录
741
+ cp -r "$PLUGIN_DIR/references/web-ui" "$TARGET/web-ui"
742
+
743
+ # 清理不需要的大文件/目录
744
+ rm -rf "$TARGET/web-ui/node_modules" 2>/dev/null
745
+ rm -rf "$TARGET/web-ui/.git" 2>/dev/null
746
+
747
+ # 统计复制的文件数量
748
+ find "$TARGET/web-ui" -type f | wc -l
749
+ ```
750
+
751
+ **注意**:
752
+
753
+ - 排除 `node_modules/` — 应在目标环境通过 `npm install` 重新安装
754
+ - 排除 `.git/` — 目标项目应独立管理版本控制
755
+
756
+ 完成后输出:
757
+
758
+ - 新建时:`✅ 阶段 3 完成:web-ui/ 前端项目创建({N} 个文件)`
759
+ - 重建时:`🔄 阶段 3 完成:web-ui/ 前端项目已重新创建({N} 个文件)`
760
+ - 跳过时:`⏭ 阶段 3 跳过:web-ui/ 已存在,保留现有内容`
761
+
762
+ ---
763
+
764
+ ### 阶段 4:创建后端服务模块
765
+
766
+ **适用模式:完整 / 轻量**
767
+
768
+ **模式检查**:如果当前模式 ≠ 完整模式 且 ≠ 轻量模式 → 输出 `⏭ 阶段 4 跳过(当前为{模式名},service/ 仅在完整/轻量模式下初始化)`,直接进入阶段 5。
769
+
770
+ 根据区域决策执行:
771
+
772
+ - `service` 决策为 `skip` → 输出 `⏭ 阶段 4 跳过:service/ 已存在,保留现有内容`,进入阶段 5
773
+ - `service` 决策为 `recreate` → 执行 `rm -rf "$TARGET/service"`,然后按下方步骤完整重建
774
+ - `service` 决策为 `create` → 直接按下方步骤创建
775
+
776
+ 根据参数中的模块列表,为每个模块创建 `service/` 目录并放置一个 `README.md` 说明文件。
777
+
778
+ 仅创建一个 `service/` 目录和一个 `README.md` 说明文件,不创建其他文件。
779
+
780
+ #### README.md 内容模板
781
+
782
+ 使用 Write 工具为每个模块生成 `service/{port}-crm-{name}/service/README.md`,内容如下:
783
+
784
+ ```markdown
785
+ 这是后端服务模块放置目录,在完成技术架构设计后,所有后端服务模块的源代码将放置在此目录下。
786
+ ```
787
+
788
+ 然后使用 Write 工具生成 `service/README.md`。
789
+
790
+ 完成后输出:
791
+
792
+ - 新建时:`✅ 阶段 4 完成:service 目录已创建`
793
+ - 重建时:`🔄 阶段 4 完成:service 目录已重新创建`
794
+ - 跳过时:`⏭ 阶段 4 跳过:service/ 已存在,保留现有内容`
795
+
796
+ ---
797
+
798
+ ### 阶段 5:创建 front-demo/ 前端演示项目
799
+
800
+ **适用模式:经典 / 完整 / 轻量**
801
+
802
+ **模式检查**:如果当前模式 = 简易模式 → 输出 `⏭ 阶段 5 跳过(当前为简易模式,front-demo/ 仅在经典/完整/轻量模式下初始化)`,直接进入阶段 6。
803
+
804
+ 根据区域决策执行:
805
+
806
+ - `front_demo` 决策为 `skip` → 输出 `⏭ 阶段 5 跳过:front-demo/ 已存在,保留现有内容`,进入阶段 6
807
+ - `front_demo` 决策为 `recreate` → 执行 `rm -rf "$TARGET/front-demo"`,然后按下方步骤完整重建
808
+ - `front_demo` 决策为 `create` → 直接按下方步骤创建
809
+
810
+ 根据用户选择的**前端演示技术栈**,从 references 复制对应的前端演示项目到目标目录:
811
+
812
+ | 技术栈选择 | 源目录 | 说明 |
813
+ | ---------------- | ----------------------------- | --------------------------------------------- |
814
+ | Vue(默认) | `$PLUGIN_DIR/references/front-demo/` | Vue 3 + Vite + TypeScript + Element Plus |
815
+ | Ant Design React | `$PLUGIN_DIR/references/antd-front-demo/` | React + Vite + TypeScript + Ant Design6技术栈 |
816
+
817
+ #### 执行命令
818
+
819
+ ```bash
820
+ SKILL_DIR="<SKILL.md 所在目录>"
821
+ PLUGIN_DIR="$(cd "$SKILL_DIR/../.." && pwd)" # adspecs 插件根目录
822
+ # TARGET="$(pwd)/{PROJECT_DIR}" # PROJECT_DIR 非空时
823
+ # 或 TARGET="$(pwd)" # PROJECT_DIR 为空时
824
+
825
+ # 根据前端技术栈选择确定源目录
826
+ FRONT_DEMO_SOURCE="front-demo" # Vue 技术栈(默认)
827
+ # 或 FRONT_DEMO_SOURCE="antd-front-demo" # Ant Design React 技术栈
828
+
829
+ # 如果 front_demo 决策为 recreate,先删除现有目录
830
+ # rm -rf "$TARGET/front-demo"
831
+
832
+ # 从插件根目录 references 复制完整目录
833
+ cp -r "$PLUGIN_DIR/references/$FRONT_DEMO_SOURCE" "$TARGET/front-demo"
834
+
835
+ # 清理不需要的大文件/目录
836
+ rm -rf "$TARGET/front-demo/node_modules" 2>/dev/null
837
+ rm -rf "$TARGET/front-demo/.git" 2>/dev/null
838
+ rm -rf "$TARGET/front-demo/.vite" 2>/dev/null
839
+
840
+ # 统计复制的文件数量
841
+ find "$TARGET/front-demo" -type f | wc -l
842
+ ```
843
+
844
+ **注意**:
845
+
846
+ - 排除 `node_modules/` — 应在目标环境通过 `npm install` 重新安装
847
+ - 排除 `.git/` — 目标项目应独立管理版本控制
848
+ - 排除 `.vite/` — Vite 缓存目录,无需复制
849
+
850
+ 完成后输出:
851
+
852
+ - 新建时:`✅ 阶段 5 完成:front-demo/ 已复制({技术栈名},{N} 个文件)`
853
+ - 重建时:`🔄 阶段 5 完成:front-demo/ 已重新复制({技术栈名},{N} 个文件)`
854
+ - 跳过时:`⏭ 阶段 5 跳过:front-demo/ 已存在,保留现有内容`
855
+
856
+ ---
857
+
858
+ ### 阶段 6:创建 .adspecs/ 配置与脚本目录
859
+
860
+ **适用模式:简易 / 经典 / 完整 / 轻量**
861
+
862
+ 根据区域决策执行:
863
+
864
+ - `.adspecs` 决策为 `skip` → 输出 `⏭ 阶段 6 跳过:.adspecs/ 已存在,保留现有内容`,但需检查以下子决策和属性补全:
865
+ - 如果 `templates_decision` = `"update"` → 执行 `cp -r "$PLUGIN_DIR/.adspecs/templates/"* "$TARGET/.adspecs/templates/"`,从插件根目录覆盖更新 `templates/` 下的模板文件,输出:`🔄 阶段 6 补充更新:.adspecs/templates/ 已从插件根目录更新`
866
+ - 如果 `templates_decision` = `"skip"` → 不做额外处理
867
+ - 执行 **feature.json 与 project.json 属性补全检查**(见下方)
868
+ - 处理完子决策和属性补全后进入阶段 7
869
+ - `.adspecs` 决策为 `recreate` → 先备份已存在的 `feature.json` 和 `project.json`,然后执行 `rm -rf "$TARGET/.adspecs"`,按下方步骤完整重建,最后恢复备份文件并执行属性补全检查(见下方"feature.json 与 project.json 属性补全")
870
+ - `.adspecs` 决策为 `create` → 直接按下方步骤创建
871
+
872
+ 从插件根目录完整复制 `.adspecs` 目录到目标项目根目录,包含插件运行时配置(extensions.yml、feature.json)和辅助脚本(PowerShell 脚本)。
873
+
874
+ #### 源路径
875
+
876
+ `PLUGIN_DIR/.adspecs/`(其中 `PLUGIN_DIR` 为 adspecs 插件根目录,即 `SKILL_DIR/../..`)
877
+
878
+ #### 目录结构
879
+
880
+ ```
881
+ .adspecs/
882
+ ├── extensions.yml
883
+ ├── feature.json
884
+ ├── project.json # 阶段 6 从 references 复制,阶段 6.5 用当前会话数据合并更新
885
+ ├── templates/
886
+ │ ├── 01-业务需求分析模板.md
887
+ │ ├── 02-产品需求说明书模板.md
888
+ │ ├── 03-系统设计模板.md
889
+ │ ├── ... (共 20 个标准模板)
890
+ │ └── 20-工作说明书SOW模板.md
891
+ └── scripts/
892
+ └── powershell/
893
+ ├── check-prerequisites.ps1
894
+ ├── common.ps1
895
+ ├── create-new-feature.ps1
896
+ ├── setup-plan.ps1
897
+ └── setup-tasks.ps1
898
+ ```
899
+
900
+ #### 执行命令
901
+
902
+ ```bash
903
+ SKILL_DIR="<SKILL.md 所在目录>" # 即 project-init skill 目录
904
+ PLUGIN_DIR="$(cd "$SKILL_DIR/../.." && pwd)" # adspecs 插件根目录
905
+
906
+ # 如果 adspecs 决策为 recreate,先备份已有文件再删除
907
+ # BACKUP_FEATURE=""
908
+ # BACKUP_PROJECT=""
909
+ # [ -f "$TARGET/.adspecs/feature.json" ] && BACKUP_FEATURE=$(cat "$TARGET/.adspecs/feature.json")
910
+ # [ -f "$TARGET/.adspecs/project.json" ] && BACKUP_PROJECT=$(cat "$TARGET/.adspecs/project.json")
911
+ # rm -rf "$TARGET/.adspecs"
912
+
913
+ # 从插件根目录完整复制
914
+ cp -r "$PLUGIN_DIR/.adspecs" "$TARGET/.adspecs"
915
+
916
+ # 如果 recreate 且有备份,恢复 feature.json 和 project.json 并执行属性补全
917
+ # (通过 Read + Write 工具完成 JSON 属性合并)
918
+
919
+ # 统计复制的文件数量
920
+ find "$TARGET/.adspecs" -type f | wc -l
921
+ ```
922
+
923
+ #### feature.json 与 project.json 属性补全
924
+
925
+ 当 `.adspecs/` 决策为 `recreate` 或 `skip` 时,如果目标项目中已存在 `feature.json` 或 `project.json`,**不直接替换**,而是执行属性补全检查:
926
+
927
+ **补全规则:**
928
+
929
+ 1. 读取目标项目中已有的 JSON 文件(`$TARGET/.adspecs/feature.json` 或 `$TARGET/.adspecs/project.json`)
930
+ 2. 读取插件根目录中的初始版本(`$PLUGIN_DIR/.adspecs/feature.json` 或 `$PLUGIN_DIR/.adspecs/project.json`,其中 `PLUGIN_DIR = SKILL_DIR/../..`)
931
+ 3. 对比两个文件的顶层属性键:
932
+ - 如果已有文件**缺少** references 中的某个属性键 → 从 references 中补充该属性(使用 references 的默认值)
933
+ - 如果已有文件中的属性键已存在(即使值不同)→ **保留已有值**,不覆盖
934
+ - 如果已有文件中有 references 中不存在的额外属性 → **保留**,不删除
935
+ 4. 如果有属性被补全 → 使用 Write 工具写回合并后的 JSON,输出补全信息
936
+ 5. 如果属性已完全一致 → 不做修改
937
+
938
+ **recreate 场景处理:**
939
+
940
+ 在 `recreate` 流程中,由于需要先删除整个 `.adspecs/` 目录再重建,处理步骤如下:
941
+
942
+ 1. 删除前:读取并缓存 `$TARGET/.adspecs/feature.json` 和 `$TARGET/.adspecs/project.json` 的内容(如果存在)
943
+ 2. 执行 `rm -rf` 和 `cp -r` 完成重建
944
+ 3. 重建后:如果之前缓存了文件内容,将缓存的已有内容与新复制的 references 版本进行属性合并,写回目标文件
945
+
946
+ **feature.json 属性清单(references 初始版本):**
947
+
948
+ | 属性键 | 类型 | 说明 |
949
+ | ---------- | ------ | ----------------------------------------------- |
950
+ | `active` | string | 当前活动特性目录路径 |
951
+ | `features` | array | 特性列表,每项含 `directory`、`name`、`created` |
952
+
953
+ **project.json 属性清单(references 初始版本):**
954
+
955
+ | 属性键 | 类型 | 说明 |
956
+ | -------------------- | ------ | ------------------------------ |
957
+ | `project_name` | string | 项目完整名称 |
958
+ | `project_dir` | string | 项目目录名 |
959
+ | `project_short_name` | string | 项目短名称(仅英文字母和数字) |
960
+ | `company_name` | string | 公司名称 |
961
+ | `company_logo` | string | 公司 Logo 路径 |
962
+ | `confidentiality` | string | 文件密级 |
963
+
964
+ **补全示例输出:**
965
+
966
+ - 有属性补全时:`🔧 阶段 6 属性补全:feature.json 已补充缺失属性 [active, features]`
967
+ - 无缺失时:`✅ 阶段 6:feature.json 属性完整,无需补全`
968
+ - 文件不存在时:`✅ 阶段 6:feature.json 已从 references 创建`
969
+
970
+ 完成后输出:
971
+
972
+ - 新建时:`✅ 阶段 6 完成:.adspecs/ 配置与脚本目录已复制({N} 个文件)`
973
+ - 重建时:`🔄 阶段 6 完成:.adspecs/ 已重新复制({N} 个文件)`
974
+ - 重建且有文件恢复时:`🔄 阶段 6 完成:.adspecs/ 已重新复制 + 🔧 feature.json/project.json 已恢复并补全属性`
975
+ - 跳过时:`⏭ 阶段 6 跳过:.adspecs/ 已存在,保留现有内容`
976
+ - 跳过但更新模板时:`⏭ 阶段 6 跳过:.adspecs/ 已存在 + 🔄 templates/ 已从插件根目录更新`
977
+ - 跳过但属性补全时:`⏭ 阶段 6 跳过:.adspecs/ 已存在 + 🔧 feature.json/project.json 已补全缺失属性`
978
+
979
+ ---
980
+
981
+ ### 阶段 6.5:生成 .adspecs/project.json
982
+
983
+ **适用模式:简易 / 经典 / 完整 / 轻量**
984
+
985
+ 在所有目录创建完成后,生成 `.adspecs/project.json` 项目元数据文件,为下游技能(如 adspecs-export-word)提供项目信息。
986
+
987
+ #### 执行步骤
988
+
989
+ 1. 检查 `$TARGET/.adspecs/project.json` 是否已存在:
990
+ - 如果已存在 → 读取现有内容,与本次收集的字段进行合并:
991
+ - 已有文件中**已存在**的属性 → 用本次收集的最新值更新(如 `project_name`、`company_name` 等)
992
+ - 已有文件中**额外的自定义属性**(如用户手动添加的字段)→ 保留不删除
993
+ - references 初始版本中有但已有文件中**缺失**的属性 → 从 references 补充默认值
994
+ - 如果不存在 → 创建新文件
995
+
996
+ 2. 使用 Write 工具生成 `$TARGET/.adspecs/project.json`,内容如下:
997
+
998
+ ```json
999
+ {
1000
+ "project_name": "{PROJECT_NAME}",
1001
+ "project_short_name": "{PROJECT_SHORT_NAME}",
1002
+ "project_dir": "{PROJECT_DIR}",
1003
+ "company_name": "{COMPANY_NAME}",
1004
+ "company_logo": "",
1005
+ "confidentiality": "{CONFIDENTIALITY}",
1006
+ "created_at": "{today}"
1007
+ }
1008
+ ```
1009
+
1010
+ #### 字段说明
1011
+
1012
+ | 字段 | 来源 | 说明 |
1013
+ | -------------------- | --------------- | ---------------------------------- |
1014
+ | `project_name` | 用户输入 | 项目完整名称 |
1015
+ | `project_short_name` | 自动推导 | 仅英文字母和数字,用于文件命名前缀 |
1016
+ | `project_dir` | 用户输入 | 项目目录名,空字符串表示当前目录 |
1017
+ | `company_name` | 用户输入/默认值 | 公司名称,默认 "XX有限公司" |
1018
+ | `company_logo` | 留空 | 公司 Logo 路径,用户后续可手动填写 |
1019
+ | `confidentiality` | 用户选择/默认值 | 文件密级,默认 "内部资料" |
1020
+ | `created_at` | 当前日期 | 项目创建日期 |
1021
+
1022
+ 完成后输出:`✅ 阶段 6.5 完成:项目元数据已生成 .adspecs/project.json`
1023
+
1024
+ ---
1025
+
1026
+ ### 阶段 7:生成路径配置文件
1027
+
1028
+ **适用模式:简易 / 经典 / 完整 / 轻量**
1029
+
1030
+ 在所有目录创建完成后,生成 `.adspecs/paths.json` 路径配置文件,为下游技能提供可配置的目录映射。
1031
+
1032
+ #### 执行步骤
1033
+
1034
+ 1. 检查 `$TARGET/.adspecs/` 目录是否存在,不存在则创建:
1035
+
1036
+ ```bash
1037
+ mkdir -p "$TARGET/.adspecs"
1038
+ ```
1039
+
1040
+ 2. 检查 `$TARGET/.adspecs/paths.json` 是否已存在:
1041
+ - 如果已存在 → 输出 `⏭ 路径配置文件已存在,跳过生成:.adspecs/paths.json`,不覆盖用户自定义配置
1042
+ - 如果不存在 → 使用 Write 工具生成默认配置
1043
+
1044
+ 3. 使用 Write 工具生成 `$TARGET/.adspecs/paths.json`,内容如下:
1045
+
1046
+ ```json
1047
+ {
1048
+ "$schema": "adspecs plugin path configuration",
1049
+ "version": 1,
1050
+ "paths": {
1051
+ "biz_analysis_dir": "docs/00-customer-requirements",
1052
+ "architecture_dir": "docs/10-architecture",
1053
+ "research_output_dir": "docs/02-prd",
1054
+ "sow_dir": "docs/05-sow",
1055
+ "prd_dir": "docs/20-prd",
1056
+ "design_dir": "docs/30-system-design",
1057
+ "test_report_dir": "docs/80-development",
1058
+ "export_dir": "docs/90-export",
1059
+ "wiki_dir": "wiki"
1060
+ }
1061
+ }
1062
+ ```
1063
+
1064
+ #### 配置键说明
1065
+
1066
+ | 配置键 | 默认值 | 使用此路径的技能 |
1067
+ | --------------------- | ------------------------------- | ------------------------------------------------------------------------------------------------------------------------------ |
1068
+ | `biz_analysis_dir` | `docs/00-customer-requirements` | adspecs-new-requirement |
1069
+ | `architecture_dir` | `docs/10-architecture` | adspecs-architecture-planning(输出)、adspecs-new-requirement(输入:识别二级模块) |
1070
+ | `research_output_dir` | `docs/02-prd` | adspecs-requirement-research |
1071
+ | `sow_dir` | `docs/05-sow` | adspecs-write-sow |
1072
+ | `prd_dir` | `docs/20-prd` | adspecs-prd、adspecs-plan(输入)、adspecs-front-spec(输入)、wiki-update(源) |
1073
+ | `design_dir` | `docs/30-system-design` | adspecs-plan(输出)、adspecs-tasks、adspecs-front-spec(输出)、adspecs-front-tasks、adspecs-utest(输入)、wiki-update(源) |
1074
+ | `test_report_dir` | `docs/80-development` | adspecs-utest(测试报告) |
1075
+ | `export_dir` | `docs/90-export` | adspecs-export-word(Word 导出输出) |
1076
+ | `wiki_dir` | `wiki` | wiki-update(输出目标) |
1077
+
1078
+ 完成后输出:`✅ 阶段 7 完成:路径配置文件已生成 .adspecs/paths.json(可编辑以自定义输出路径)`
1079
+
1080
+ ### 阶段 8:输出初始化报告
1081
+
1082
+ 所有阶段完成后,输出结构化的初始化报告:
1083
+
1084
+ ````markdown
1085
+ ## 项目初始化完成 🎉
1086
+
1087
+ 项目名称: {PROJECT_NAME}
1088
+ 项目短名称: {PROJECT_SHORT_NAME}
1089
+ 公司名称: {COMPANY_NAME}
1090
+ 文件密级: {CONFIDENTIALITY}
1091
+ 初始化模式: {简易模式 / 经典模式 / 完整模式 / 轻量模式}
1092
+ 前端技术栈: {Vue / Ant Design React}(经典/完整模式时显示;轻量模式固定 Ant Design React)
1093
+ 工作目录: {pwd}
1094
+ 项目目录: {PROJECT_DIR 或 "当前目录"}
1095
+ 目标路径: {TARGET}
1096
+
1097
+ ### 区域执行结果
1098
+
1099
+ **简易模式:**
1100
+
1101
+ | 区域 | 状态 | 说明 |
1102
+ | ------------------------- | --------------------------------- | -------------------------------------------------------------------------- |
1103
+ | .adspecs/ | ✅ 已创建 / 🔄 已重建 / ⏭ 已跳过 | 插件配置、脚本、模板(extensions.yml、feature.json、templates/、scripts/) |
1104
+ | └ templates/ | 🔄 已更新 / ⏭ 已跳过 | .adspecs/ 跳过时,模板子目录的更新决策 |
1105
+ | └ feature.json | 🔧 已补全 / ✅ 已完整 / ✅ 已创建 | 属性补全检查(已有属性保留,缺失属性补充) |
1106
+ | docs/ | ✅ 已创建 / 🔄 已重建 / ⏭ 已跳过 | 11 个骨架目录,40 仅创建空目录 |
1107
+ | └ 40-project_conventions/ | 🔄 已更新 / ⏭ 已跳过 | docs/ 跳过时,40 子目录的更新决策 |
1108
+ | wiki/ | ✅ 已创建 / 🔄 已重建 / ⏭ 已跳过 | 基线文件目录 + README.md |
1109
+ | .adspecs/project.json | ✅ 已生成 / 🔄 已更新 | 项目元数据文件(已有字段合并,缺失属性补全) |
1110
+ | .adspecs/paths.json | ✅ 已生成 / ⏭ 已存在跳过 | 路径配置文件 |
1111
+
1112
+ **经典模式:**
1113
+
1114
+ | 区域 | 状态 | 说明 |
1115
+ | ------------------------- | --------------------------------- | -------------------------------------------------------------------------- |
1116
+ | .adspecs/ | ✅ 已创建 / 🔄 已重建 / ⏭ 已跳过 | 插件配置、脚本、模板(extensions.yml、feature.json、templates/、scripts/) |
1117
+ | └ templates/ | 🔄 已更新 / ⏭ 已跳过 | .adspecs/ 跳过时,模板子目录的更新决策 |
1118
+ | └ feature.json | 🔧 已补全 / ✅ 已完整 / ✅ 已创建 | 属性补全检查(已有属性保留,缺失属性补充) |
1119
+ | docs/ | ✅ 已创建 / 🔄 已重建 / ⏭ 已跳过 | 11 个骨架目录 + 40 从 references 复制 |
1120
+ | └ 40-project_conventions/ | 🔄 已更新 / ⏭ 已跳过 | docs/ 跳过时,40 子目录的更新决策 |
1121
+ | wiki/ | ✅ 已创建 / 🔄 已重建 / ⏭ 已跳过 | 基线文件目录 + README.md |
1122
+ | front-demo/ | ✅ 已创建 / 🔄 已重建 / ⏭ 已跳过 | {技术栈名},{N} 个文件 |
1123
+ | .adspecs/project.json | ✅ 已生成 / 🔄 已更新 | 项目元数据文件(已有字段合并,缺失属性补全) |
1124
+ | .adspecs/paths.json | ✅ 已生成 / ⏭ 已存在跳过 | 路径配置文件 |
1125
+
1126
+ **完整模式:**
1127
+
1128
+ | 区域 | 状态 | 说明 |
1129
+ | ------------------------- | --------------------------------- | -------------------------------------------------------------------------- |
1130
+ | .adspecs/ | ✅ 已创建 / 🔄 已重建 / ⏭ 已跳过 | 插件配置、脚本、模板(extensions.yml、feature.json、templates/、scripts/) |
1131
+ | └ templates/ | 🔄 已更新 / ⏭ 已跳过 | .adspecs/ 跳过时,模板子目录的更新决策 |
1132
+ | └ feature.json | 🔧 已补全 / ✅ 已完整 / ✅ 已创建 | 属性补全检查(已有属性保留,缺失属性补充) |
1133
+ | docs/ | ✅ 已创建 / 🔄 已重建 / ⏭ 已跳过 | 11 个骨架目录 + 40 从 references 复制 |
1134
+ | └ 40-project_conventions/ | 🔄 已更新 / ⏭ 已跳过 | docs/ 跳过时,40 子目录的更新决策 |
1135
+ | wiki/ | ✅ 已创建 / 🔄 已重建 / ⏭ 已跳过 | 基线文件目录 + README.md |
1136
+ | web-ui/ | ✅ 已创建 / 🔄 已重建 / ⏭ 已跳过 | {N} 个文件 |
1137
+ | service/ | ✅ 已创建 / 🔄 已重建 / ⏭ 已跳过 | 模块 service 目录 + README.md |
1138
+ | front-demo/ | ✅ 已创建 / 🔄 已重建 / ⏭ 已跳过 | {技术栈名},{N} 个文件 |
1139
+ | .adspecs/project.json | ✅ 已生成 / 🔄 已更新 | 项目元数据文件(已有字段合并,缺失属性补全) |
1140
+ | .adspecs/paths.json | ✅ 已生成 / ⏭ 已存在跳过 | 路径配置文件 |
1141
+
1142
+ **轻量模式:**
1143
+
1144
+ | 区域 | 状态 | 说明 |
1145
+ | ------------------------- | --------------------------------- | -------------------------------------------------------------------------- |
1146
+ | .adspecs/ | ✅ 已创建 / 🔄 已重建 / ⏭ 已跳过 | 插件配置、脚本、模板(extensions.yml、feature.json、templates/、scripts/) |
1147
+ | └ templates/ | 🔄 已更新 / ⏭ 已跳过 | .adspecs/ 跳过时,模板子目录的更新决策 |
1148
+ | └ feature.json | 🔧 已补全 / ✅ 已完整 / ✅ 已创建 | 属性补全检查(已有属性保留,缺失属性补充) |
1149
+ | docs/ | ✅ 已创建 / 🔄 已重建 / ⏭ 已跳过 | 11 个骨架目录 + 40 按 Python+React 技术栈复制前后端规范 |
1150
+ | └ 40-project_conventions/ | 🔄 已更新 / ⏭ 已跳过 | docs/ 跳过时,40 子目录的更新决策 |
1151
+ | wiki/ | ✅ 已创建 / 🔄 已重建 / ⏭ 已跳过 | 基线文件目录 + README.md |
1152
+ | web-ui/ | ✅ 已创建 / 🔄 已重建 / ⏭ 已跳过 | React + AntD6 前端项目,{N} 个文件 |
1153
+ | service/ | ✅ 已创建 / 🔄 已重建 / ⏭ 已跳过 | Python 后端服务目录 + README.md |
1154
+ | front-demo/ | ✅ 已创建 / 🔄 已重建 / ⏭ 已跳过 | Ant Design React,{N} 个文件 |
1155
+ | .adspecs/project.json | ✅ 已生成 / 🔄 已更新 | 项目元数据文件(已有字段合并,缺失属性补全) |
1156
+ | .adspecs/paths.json | ✅ 已生成 / ⏭ 已存在跳过 | 路径配置文件 |
1157
+
1158
+ 状态说明:
1159
+
1160
+ - ✅ 已创建:目录原本不存在,新建完成
1161
+ - 🔄 已重建:目录原本存在,按用户选择删除后重新创建
1162
+ - 🔄 已更新:父目录跳过,但子目录按用户选择使用 references 最新文件覆盖更新
1163
+ - 🔧 已补全:已有文件属性与 references 对比后,补充缺失属性(已有属性不覆盖)
1164
+ - ⏭ 已跳过:目录原本存在,按用户选择保留未动
1165
+
1166
+ ### 目录树总览
1167
+
1168
+ **简易模式:**
1169
+ {pwd}/{PROJECT_DIR}/(或直接 {pwd}/)
1170
+ ├── .adspecs/ (插件配置、脚本、模板 + project.json)
1171
+ ├── docs/ (11 个子目录)
1172
+ └── wiki/ (基线文件目录)
1173
+
1174
+ **经典模式:**
1175
+ {pwd}/{PROJECT_DIR}/(或直接 {pwd}/)
1176
+ ├── .adspecs/ (插件配置、脚本、模板 + project.json)
1177
+ ├── docs/ (11 个子目录)
1178
+ ├── wiki/ (基线文件目录)
1179
+ └── front-demo/ ({技术栈名}前端演示项目)
1180
+
1181
+ **完整模式:**
1182
+ {pwd}/{PROJECT_DIR}/(或直接 {pwd}/)
1183
+ ├── .adspecs/ (插件配置、脚本、模板 + project.json)
1184
+ ├── docs/ (11 个子目录)
1185
+ ├── wiki/ (基线文件目录)
1186
+ ├── web-ui/ (Vue3 壳工程)
1187
+ ├── service/
1188
+ │ └── README.md
1189
+ └── front-demo/ ({技术栈名}前端演示项目)
1190
+
1191
+ **轻量模式:**(Python + SQLite + React + AntD6 全栈 demo)
1192
+ {pwd}/{PROJECT_DIR}/(或直接 {pwd}/)
1193
+ ├── .adspecs/ (插件配置、脚本、模板 + project.json)
1194
+ ├── docs/ (11 个子目录 + 40-project_conventions/ 含 Python 后端规范 + React 前端规范)
1195
+ ├── wiki/ (基线文件目录)
1196
+ ├── web-ui/ (React + AntD6 前端项目)
1197
+ ├── service/ (Python + SQLite 后端服务)
1198
+ └── front-demo/ (Ant Design React 前端演示项目)
1199
+
1200
+ ### 后续步骤
1201
+
1202
+ **简易模式:**
1203
+
1204
+ 1. 在目标目录执行 `git init` 初始化 Git 仓库
1205
+ 2. 根据项目需要调整 `.adspecs/templates/` 下的文档模板
1206
+ 3. `docs/40-project_conventions/` 当前为空目录(简易模式不复制),进入开发阶段时从 references 补充或重新执行 `/project-init` 选择经典/完整模式自动补充
1207
+ 4. 根据需要编辑 `.adspecs/project.json` 补充公司 Logo 路径等信息
1208
+ 5. 根据自己需要调整 `.adspecs/paths.json` 路径配置文件
1209
+ 6. 对当前项目的重新初始化`/init`更新或手动按需修改 `CLAUDE.md`
1210
+
1211
+ **经典模式:**
1212
+
1213
+ 1. 在目标目录执行 `git init` 初始化 Git 仓库
1214
+ 2. 在前端演示目录执行 `npm install` 安装依赖:
1215
+
1216
+ ```bash
1217
+ cd {TARGET}/front-demo && npm install
1218
+ ```
1219
+
1220
+ 3. 根据项目需要调整 `.adspecs/templates/` 下的文档模板和 `docs/40-project_conventions/` 约定文档
1221
+ 4. 根据需要编辑 `.adspecs/project.json` 补充公司 Logo 路径等信息
1222
+ 5. 根据自己需要调整 `.adspecs/paths.json` 路径配置文件
1223
+ 6. 对当前项目的重新初始化`/init`更新或手动按需修改 `CLAUDE.md`
1224
+
1225
+ **完整模式:**
1226
+
1227
+ 1. 在目标目录执行 `git init` 初始化 Git 仓库
1228
+ 2. 在前端目录执行 `npm install` 安装依赖:
1229
+
1230
+ ```bash
1231
+ cd {TARGET}/web-ui && npm install
1232
+ cd {TARGET}/front-demo && npm install
1233
+ ```
1234
+
1235
+ 3. 根据项目需要调整 `.adspecs/templates/` 下的文档模板和 `docs/40-project_conventions/` 前后端编码规范约定文档
1236
+ 4. 根据需要编辑 `.adspecs/project.json` 补充公司 Logo 路径等信息
1237
+ 5. 根据自己需要调整 `.adspecs/paths.json` 路径配置文件
1238
+ 6. 对当前项目的重新初始化`/init`更新或手动按需修改 `CLAUDE.md`
1239
+
1240
+ **轻量模式:**(Python + SQLite + React + AntD6 全栈 demo)
1241
+
1242
+ 1. 在目标目录执行 `git init` 初始化 Git 仓库
1243
+ 2. 安装前端依赖:
1244
+
1245
+ ```bash
1246
+ cd {TARGET}/web-ui && npm install
1247
+ cd {TARGET}/front-demo && npm install
1248
+ ```
1249
+
1250
+ 3. 安装后端依赖(Python 环境):
1251
+
1252
+ ```bash
1253
+ cd {TARGET}/service
1254
+ python -m venv venv
1255
+ source venv/bin/activate # Windows: venv\Scripts\activate
1256
+ pip install -r requirements.txt
1257
+ ```
1258
+
1259
+ 4. 根据项目需要调整 `.adspecs/templates/` 下的文档模板和 `docs/40-project_conventions/` 前后端编码规范约定文档
1260
+ 5. 根据需要编辑 `.adspecs/project.json` 补充公司 Logo 路径等信息
1261
+ 6. 根据自己需要调整 `.adspecs/paths.json` 路径配置文件
1262
+ 7. 对当前项目的重新初始化`/init`更新或手动按需修改 `CLAUDE.md`
1263
+
1264
+ ## 完成标志
1265
+
1266
+ - [ ] 已收集项目信息(project_name, project_dir, company_name, project_short_name, confidentiality)
1267
+ - [ ] project_short_name 已按自动推导规则生成(仅英文字母和数字)
1268
+ - [ ] company_name 和 confidentiality 已使用默认值(如用户未填写)
1269
+ - [ ] 已选择初始化模式(简易 / 经典 / 完整 / 轻量)
1270
+ - [ ] 已选择前端演示技术栈(经典/完整模式:Vue / Ant Design React;轻量模式固定 Ant Design React)
1271
+ - [ ] 已按模式检查目标路径下对应区域的存在情况
1272
+ - [ ] 对已存在的区域已通过 AskUserQuestion 获取用户选择(重新创建 / 跳过)
1273
+ - [ ] docs/ 目录结构已创建/重建/跳过(按用户决策执行;简易模式下 40-project_conventions/ 仅创建空目录,经典/完整模式从 references 复制前端规范,轻量模式复制前后端规范)
1274
+ - [ ] 模式升级补充检查已完成(docs/ 跳过时,经典/完整/轻量模式自动检测并补充空的 40-project_conventions/)
1275
+ - [ ] 40-project_conventions/ 子目录更新检查已完成(docs/ 跳过且目录已包含文件时,已通过 AskUserQuestion 获取更新/跳过决策并按决策执行)
1276
+ - [ ] wiki/ 基线文件目录已创建/重建/跳过
1277
+ - [ ] web-ui/ 已从 references 完整复制/重建/跳过(仅完整/轻量模式,排除 node_modules、.git)
1278
+ - [ ] service/ 目录已创建/重建/跳过(仅完整/轻量模式)
1279
+ - [ ] front-demo/ 已从 references 按技术栈选择复制/重建/跳过(经典/完整/轻量模式,排除 node_modules、.git、.vite)
1280
+ - [ ] .adspecs/ 配置与脚本目录已从插件根目录完整复制/重建/跳过
1281
+ - [ ] .adspecs/templates/ 子目录更新检查已完成(.adspecs/ 跳过且模板目录已包含文件时,已通过 AskUserQuestion 获取更新/跳过决策并按决策执行)
1282
+ - [ ] feature.json 属性补全检查已完成(recreate/skip 时,已对比 references 初始版本并补全缺失属性,已有属性不覆盖)
1283
+ - [ ] project.json 属性补全检查已完成(recreate/skip 时,已对比 references 初始版本并补全缺失属性)
1284
+ - [ ] .adspecs/project.json 项目元数据文件已生成或更新
1285
+ - [ ] .adspecs/paths.json 路径配置文件已生成(含 architecture_dir 和 export_dir,或已存在时跳过)
1286
+ - [ ] 初始化报告已输出(包含项目信息、模式、技术栈、各区域状态)
1287
+ ````
1288
+
1289
+ ---