adspecs 0.1.19 → 0.1.21
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/.adspecs/feature.json +16 -16
- package/.adspecs/feature.yml +28 -28
- package/.adspecs/paths.json +17 -17
- package/.adspecs/templates/04-/345/211/215/347/253/257/345/212/237/350/203/275/350/256/276/350/256/241/346/250/241/346/235/277.md +1 -1
- package/.adspecs/templates/05-/345/220/216/347/253/257/344/273/273/345/212/241/346/270/205/345/215/225/346/250/241/346/235/277.md +613 -724
- package/.adspecs/templates/05b-/345/211/215/347/253/257/344/273/273/345/212/241/346/270/205/345/215/225/346/250/241/346/235/277.md +51 -51
- package/.claude-plugin/marketplace.json +23 -23
- package/.claude-plugin/plugin.json +18 -18
- package/.qoder-plugin/plugin.json +31 -31
- package/CLAUDE.md +1 -5
- package/INSTALL.md +3 -3
- package/README.md +395 -395
- package/bin/adspecs.js +129 -129
- package/hooks/commit-queue.js +245 -245
- package/hooks/hooks.json +63 -63
- package/hooks/session-start.js +44 -44
- package/hooks/wiki-queue.js +127 -127
- package/package.json +61 -61
- package/references/ant6-front-standard/index.md +99 -99
- package/references/antd-front-demo/public/mockServiceWorker.js +361 -361
- package/references/ecp-end-standard/index.md +63 -63
- package/references/python-end-standard/01-Python/345/220/216/347/253/257/347/274/226/347/240/201/350/247/204/350/214/203.md +372 -372
- package/references/python-end-standard/02-/346/225/260/346/215/256/345/272/223/350/256/276/350/256/241/344/270/216/344/275/277/347/224/250/350/247/204/350/214/203.md +226 -226
- package/references/python-end-standard/03-Celery/345/274/202/346/255/245/344/273/273/345/212/241/350/247/204/350/214/203.md +237 -237
- package/references/python-end-standard/04-Redis/344/275/277/347/224/250/350/247/204/350/214/203.md +231 -231
- package/scripts/postinstall.js +107 -107
- package/scripts/sync-version.js +105 -105
- package/skills/.claude/.wiki-update-queue +26 -26
- package/skills/adspecs-constitution/SKILL.md +157 -0
- package/skills/adspecs-export-word/SKILL.md +498 -498
- package/skills/adspecs-export-word/references/md-to-docx.js +862 -862
- package/skills/adspecs-export-word/references/package-lock.json +220 -220
- package/skills/adspecs-export-word/references/package.json +10 -10
- package/skills/adspecs-front-prototype/SKILL.md +405 -405
- package/skills/adspecs-front-spec/SKILL.md +4 -4
- package/skills/adspecs-front-tasks/SKILL.md +213 -173
- package/skills/adspecs-plan/SKILL.md +59 -69
- package/skills/adspecs-prd/SKILL.md +13 -5
- package/skills/adspecs-prd-to-demo/SKILL.md +532 -0
- package/skills/adspecs-tasks/SKILL.md +175 -204
- package/skills/adspecs-update-status/SKILL.md +382 -382
- package/skills/adspecs-utest/SKILL.md +107 -116
- package/skills/grill-me/SKILL.md +7 -0
- package/skills/grill-me/agents/openai.yaml +5 -0
- package/skills/playwright-cli/SKILL.md +420 -0
- package/skills/playwright-cli/references/element-attributes.md +23 -0
- package/skills/playwright-cli/references/playwright-tests.md +39 -0
- package/skills/playwright-cli/references/request-mocking.md +87 -0
- package/skills/playwright-cli/references/running-code.md +241 -0
- package/skills/playwright-cli/references/session-management.md +225 -0
- package/skills/playwright-cli/references/storage-state.md +275 -0
- package/skills/playwright-cli/references/test-generation.md +433 -0
- package/skills/playwright-cli/references/tracing.md +139 -0
- package/skills/playwright-cli/references/video-recording.md +143 -0
- package/skills/playwright-trace/SKILL.md +171 -0
- package/skills/project-init/SKILL.md +93 -22
- package/skills/project-init/references/front-demo/.claude/settings.local.json +9 -0
- package/skills/wiki-update/SKILL.md +232 -232
- package/src/commands/doctor.js +197 -197
- package/src/commands/init.js +83 -83
- package/src/commands/plugin.js +165 -165
- package/src/commands/update.js +87 -87
- package/src/lib/area-scanner.js +129 -129
- package/src/lib/copier.js +104 -104
- package/src/lib/dir-utils.js +161 -133
- package/src/lib/json-merge.js +114 -114
- package/src/lib/paths-defaults.js +37 -37
- package/src/lib/prompts.js +428 -347
- package/src/lib/readme-gen.js +143 -143
- package/src/lib/report.js +338 -327
- package/src/lib/scaffolder.js +551 -518
- package/src/lib/short-name.js +36 -36
- package/src/utils.js +80 -80
- package/references/antd-front-demo/.env +0 -15
|
@@ -1,232 +1,232 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: wiki-update
|
|
3
|
-
description: >-
|
|
4
|
-
Use when docs/20-prd or docs/30-system-design markdown files are created or
|
|
5
|
-
modified and need to be synced to the wiki/ directory. Triggered by user
|
|
6
|
-
command or wiki-queue hook suggestion at session stop. Supports full and
|
|
7
|
-
incremental sync modes.
|
|
8
|
-
---
|
|
9
|
-
|
|
10
|
-
# Wiki Update
|
|
11
|
-
|
|
12
|
-
将 `{PRD_DIR}/` 和 `{DESIGN_DIR}/` 下的 Markdown 文档同步到 `{WIKI_DIR}/` 目录,保持目录结构一致。
|
|
13
|
-
|
|
14
|
-
## 路径配置加载
|
|
15
|
-
|
|
16
|
-
在开始执行之前,先确定源目录和目标目录:
|
|
17
|
-
|
|
18
|
-
1. 检查项目根目录是否存在 `.adspecs/paths.json`
|
|
19
|
-
2. 如果存在,读取其中的 `paths` 对象,提取本技能需要的配置键
|
|
20
|
-
3. 如果不存在或配置键缺失,使用下方表格中的默认值
|
|
21
|
-
|
|
22
|
-
| 配置键 | 默认值 | 用途 |
|
|
23
|
-
| ------------ | ----------------------- | --------------------- |
|
|
24
|
-
| `prd_dir` | `docs/20-prd` | PRD 文档源目录 |
|
|
25
|
-
| `design_dir` | `docs/30-system-design` | 系统设计文档源目录 |
|
|
26
|
-
| `wiki_dir` | `wiki` | Wiki 文档输出目标目录 |
|
|
27
|
-
|
|
28
|
-
将解析后的路径分别记为 `PRD_DIR`、`DESIGN_DIR` 和 `WIKI_DIR`,后续步骤中引用这些变量而非硬编码路径。
|
|
29
|
-
|
|
30
|
-
## When to Use
|
|
31
|
-
|
|
32
|
-
- 用户执行 `/wiki-update`
|
|
33
|
-
- 会话结束时 hook 提示 `[wiki-update] Run: /wiki-update --mode=incremental --flush`
|
|
34
|
-
- 需要更新项目 wiki 文档时
|
|
35
|
-
|
|
36
|
-
## 参数
|
|
37
|
-
|
|
38
|
-
| 参数 | 值 | 说明 |
|
|
39
|
-
| --------- | -------------- | --------------------------- |
|
|
40
|
-
| `--mode` | `full`(默认) | 全量扫描并同步所有 .md 文件 |
|
|
41
|
-
| `--mode` | `incremental` | 仅同步队列中的变更文件 |
|
|
42
|
-
| `--flush` | 无值 | 增量同步后清空队列文件 |
|
|
43
|
-
|
|
44
|
-
**示例调用:**
|
|
45
|
-
|
|
46
|
-
- `/wiki-update` — 全量同步
|
|
47
|
-
- `/wiki-update --mode=incremental --flush` — 增量同步并清空队列
|
|
48
|
-
|
|
49
|
-
## 目录映射
|
|
50
|
-
|
|
51
|
-
```
|
|
52
|
-
{PRD_DIR}/{子路径} → {WIKI_DIR}/20-prd/{子路径}
|
|
53
|
-
{DESIGN_DIR}/{子路径} → {WIKI_DIR}/30-system-design/{子路径}
|
|
54
|
-
```
|
|
55
|
-
|
|
56
|
-
**完整结构示例:**
|
|
57
|
-
|
|
58
|
-
```
|
|
59
|
-
{WIKI_DIR}/
|
|
60
|
-
├── 20-prd/
|
|
61
|
-
│ └── crm/
|
|
62
|
-
│ ├── customer-master-data/
|
|
63
|
-
│ │ └── M03-01_客户主数据需求规格说明书.md
|
|
64
|
-
│ ├── fo-order/
|
|
65
|
-
│ │ └── M08-01_履约单需求规格说明书.md
|
|
66
|
-
│ ├── product-master-data/
|
|
67
|
-
│ │ └── M01-01_产品主数据需求规格说明书.md
|
|
68
|
-
│ ├── sales-forecast/
|
|
69
|
-
│ │ └── M06-01_销售预测需求规格说明书.md
|
|
70
|
-
│ └── one-time-contract/
|
|
71
|
-
│ └── M07-02_单次合同需求规格说明书.md
|
|
72
|
-
└── 30-system-design/
|
|
73
|
-
└── crm/
|
|
74
|
-
├── M01-01-产品主数据_system-design.md
|
|
75
|
-
├── M01-01-产品主数据_tasks.md
|
|
76
|
-
├── M03-01-客户主数据_system-design.md
|
|
77
|
-
└── ...(所有 .md 文件)
|
|
78
|
-
```
|
|
79
|
-
|
|
80
|
-
## 文件过滤规则
|
|
81
|
-
|
|
82
|
-
| 文件类型 | 是否同步 | 原因 |
|
|
83
|
-
| ----------------- | -------- | -------------------------- |
|
|
84
|
-
| `*.md` | ✅ 同步 | Wiki 文档内容 |
|
|
85
|
-
| `*.html` | ❌ 跳过 | HTML 原型,非 wiki 格式 |
|
|
86
|
-
| `*.sql` | ❌ 跳过 | 数据库 schema,非文档 |
|
|
87
|
-
| `*.xlsx` | ❌ 跳过 | Excel 附件 |
|
|
88
|
-
| `checklists/*.md` | ✅ 同步 | checklist 也是文档的一部分 |
|
|
89
|
-
|
|
90
|
-
## 执行步骤
|
|
91
|
-
|
|
92
|
-
### Full 模式(全量同步)
|
|
93
|
-
|
|
94
|
-
```
|
|
95
|
-
┌─────────────────────────────────────┐
|
|
96
|
-
│ 1. 扫描源目录 │
|
|
97
|
-
│ Glob: {PRD_DIR}/**/*.md │
|
|
98
|
-
│ Glob: {DESIGN_DIR}/**/*.md │
|
|
99
|
-
│ │
|
|
100
|
-
│ 2. 对每个 .md 文件: │
|
|
101
|
-
│ ├─ Read 源文件内容 │
|
|
102
|
-
│ ├─ 计算 wiki 目标路径 │
|
|
103
|
-
│ └─ Write 到 {WIKI_DIR}/ 对应路径 │
|
|
104
|
-
│ │
|
|
105
|
-
│ 3. 输出同步报告 │
|
|
106
|
-
│ - 新增文件数 │
|
|
107
|
-
│ - 更新文件数 │
|
|
108
|
-
│ - 总文件数 │
|
|
109
|
-
└─────────────────────────────────────┘
|
|
110
|
-
```
|
|
111
|
-
|
|
112
|
-
**步骤 1 — 扫描源目录:**
|
|
113
|
-
|
|
114
|
-
使用 Glob 工具扫描两个源目录下所有 `.md` 文件:
|
|
115
|
-
|
|
116
|
-
```
|
|
117
|
-
Glob("{PRD_DIR}/**/*.md")
|
|
118
|
-
Glob("{DESIGN_DIR}/**/*.md")
|
|
119
|
-
```
|
|
120
|
-
|
|
121
|
-
**步骤 2 — 逐文件同步:**
|
|
122
|
-
|
|
123
|
-
对每个扫描到的文件:
|
|
124
|
-
|
|
125
|
-
1. 用 `Read` 读取完整内容
|
|
126
|
-
2. 计算目标路径:将源目录前缀替换为 `{WIKI_DIR}/`
|
|
127
|
-
- `{PRD_DIR}/crm/sales-forecast/M06-01_销售预测需求规格说明书.md` → `{WIKI_DIR}/20-prd/crm/sales-forecast/M06-01_销售预测需求规格说明书.md`
|
|
128
|
-
- `{DESIGN_DIR}/crm/M06-01-销售预测_system-design.md` → `{WIKI_DIR}/30-system-design/crm/M06-01-销售预测_system-design.md`
|
|
129
|
-
3. 用 `Write` 写入 wiki 目标路径(自动创建目录)
|
|
130
|
-
|
|
131
|
-
**步骤 3 — 输出报告:**
|
|
132
|
-
|
|
133
|
-
```
|
|
134
|
-
═══ [wiki-update] 全量同步完成 ═══════════
|
|
135
|
-
新增: 12 个文件
|
|
136
|
-
更新: 5 个文件
|
|
137
|
-
总计: 17 个文件
|
|
138
|
-
═══════════════════════════════════════════
|
|
139
|
-
```
|
|
140
|
-
|
|
141
|
-
### Incremental 模式(增量同步)
|
|
142
|
-
|
|
143
|
-
```
|
|
144
|
-
┌─────────────────────────────────────┐
|
|
145
|
-
│ 1. 读取队列文件 │
|
|
146
|
-
│ .claude/.wiki-update-queue │
|
|
147
|
-
│ │
|
|
148
|
-
│ 2. 过滤: 仅保留 {PRD_DIR}/ 或 │
|
|
149
|
-
│ {DESIGN_DIR}/ 下的 .md │
|
|
150
|
-
│ │
|
|
151
|
-
│ 3. 对每个文件: │
|
|
152
|
-
│ ├─ 检查源文件是否存在 │
|
|
153
|
-
│ ├─ Read + Write 到 wiki 路径 │
|
|
154
|
-
│ └─ 记录同步状态 │
|
|
155
|
-
│ │
|
|
156
|
-
│ 4. 若指定 --flush: │
|
|
157
|
-
│ └─ 清空 .wiki-update-queue │
|
|
158
|
-
│ │
|
|
159
|
-
│ 5. 输出同步报告 │
|
|
160
|
-
└─────────────────────────────────────┘
|
|
161
|
-
```
|
|
162
|
-
|
|
163
|
-
**步骤 1 — 读取队列:**
|
|
164
|
-
|
|
165
|
-
读取 `.claude/.wiki-update-queue`,每行一个文件路径。
|
|
166
|
-
|
|
167
|
-
**步骤 2 — 过滤文件:**
|
|
168
|
-
|
|
169
|
-
仅保留同时满足以下条件的文件:
|
|
170
|
-
|
|
171
|
-
- 路径包含 `{PRD_DIR}/` 或 `{DESIGN_DIR}/`
|
|
172
|
-
- 以 `.md` 结尾
|
|
173
|
-
|
|
174
|
-
**步骤 3 — 同步文件:**
|
|
175
|
-
|
|
176
|
-
同 full 模式的步骤 2,但仅处理过滤后的文件列表。
|
|
177
|
-
|
|
178
|
-
**步骤 4 — 清空队列(--flush):**
|
|
179
|
-
|
|
180
|
-
仅移除已处理的 wiki 相关条目,保留其他路径(如 `.java`、`.ts` 等非 wiki 文件路径):
|
|
181
|
-
|
|
182
|
-
1. 重新读取 `.claude/.wiki-update-queue`
|
|
183
|
-
2. 过滤掉已同步的文件路径(即匹配 `{PRD_DIR}/` 或 `{DESIGN_DIR}/` 且以 `.md` 结尾的行)
|
|
184
|
-
3. 将剩余行写回队列文件;若无剩余行,写入空字符串
|
|
185
|
-
|
|
186
|
-
**步骤 5 — 输出报告:**
|
|
187
|
-
|
|
188
|
-
```
|
|
189
|
-
═══ [wiki-update] 增量同步完成 ═══════════
|
|
190
|
-
同步: 3 个文件
|
|
191
|
-
跳过: 1 个文件(非 wiki 目录)
|
|
192
|
-
队列已清空 ✓
|
|
193
|
-
═══════════════════════════════════════════
|
|
194
|
-
```
|
|
195
|
-
|
|
196
|
-
## 路径计算逻辑
|
|
197
|
-
|
|
198
|
-
源路径到 wiki 路径的转换规则:
|
|
199
|
-
|
|
200
|
-
```
|
|
201
|
-
输入: {PRD_DIR}/crm/sales-forecast/M06-01_销售预测需求规格说明书.md
|
|
202
|
-
└─ 替换源目录前缀为 {WIKI_DIR}/
|
|
203
|
-
|
|
204
|
-
输出: {WIKI_DIR}/20-prd/crm/sales-forecast/M06-01_销售预测需求规格说明书.md
|
|
205
|
-
```
|
|
206
|
-
|
|
207
|
-
代码逻辑(伪代码):
|
|
208
|
-
|
|
209
|
-
```
|
|
210
|
-
wikiPath = sourcePath
|
|
211
|
-
.replace(/^\{PRD_DIR\}\//, '{WIKI_DIR}/20-prd/')
|
|
212
|
-
.replace(/^\{DESIGN_DIR\}\//, '{WIKI_DIR}/30-system-design/')
|
|
213
|
-
```
|
|
214
|
-
|
|
215
|
-
## 错误处理
|
|
216
|
-
|
|
217
|
-
| 情况 | 处理方式 |
|
|
218
|
-
| ---------------------- | ----------------------------------------- |
|
|
219
|
-
| 源文件不存在(已删除) | 跳过,输出 `[跳过] 文件不存在: {path}` |
|
|
220
|
-
| 队列为空 | 输出 `队列为空,无需同步`,直接结束 |
|
|
221
|
-
| wiki 目录不存在 | 自动创建 |
|
|
222
|
-
| 队列文件不存在 | 输出 `队列文件不存在`,提示使用 full 模式 |
|
|
223
|
-
|
|
224
|
-
## Common Mistakes
|
|
225
|
-
|
|
226
|
-
| 错误 | 正确做法 |
|
|
227
|
-
| ---------------------------------- | ---------------------------------------------- |
|
|
228
|
-
| 同步 .sql 或 .html 文件 | 仅同步 .md 文件 |
|
|
229
|
-
| 修改 wiki 目录结构(如扁平化) | 严格保持与 docs 相同的目录层级 |
|
|
230
|
-
| 增量模式忘记清空队列 | 指定 `--flush` 时务必清空 `.wiki-update-queue` |
|
|
231
|
-
| 将 `docs/300-specs/` 等同步到 wiki | 仅同步 `20-prd` 和 `30-system-design` |
|
|
232
|
-
| 使用文件复制命令 | 使用 Read + Write 确保跨平台兼容 |
|
|
1
|
+
---
|
|
2
|
+
name: wiki-update
|
|
3
|
+
description: >-
|
|
4
|
+
Use when docs/20-prd or docs/30-system-design markdown files are created or
|
|
5
|
+
modified and need to be synced to the wiki/ directory. Triggered by user
|
|
6
|
+
command or wiki-queue hook suggestion at session stop. Supports full and
|
|
7
|
+
incremental sync modes.
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Wiki Update
|
|
11
|
+
|
|
12
|
+
将 `{PRD_DIR}/` 和 `{DESIGN_DIR}/` 下的 Markdown 文档同步到 `{WIKI_DIR}/` 目录,保持目录结构一致。
|
|
13
|
+
|
|
14
|
+
## 路径配置加载
|
|
15
|
+
|
|
16
|
+
在开始执行之前,先确定源目录和目标目录:
|
|
17
|
+
|
|
18
|
+
1. 检查项目根目录是否存在 `.adspecs/paths.json`
|
|
19
|
+
2. 如果存在,读取其中的 `paths` 对象,提取本技能需要的配置键
|
|
20
|
+
3. 如果不存在或配置键缺失,使用下方表格中的默认值
|
|
21
|
+
|
|
22
|
+
| 配置键 | 默认值 | 用途 |
|
|
23
|
+
| ------------ | ----------------------- | --------------------- |
|
|
24
|
+
| `prd_dir` | `docs/20-prd` | PRD 文档源目录 |
|
|
25
|
+
| `design_dir` | `docs/30-system-design` | 系统设计文档源目录 |
|
|
26
|
+
| `wiki_dir` | `wiki` | Wiki 文档输出目标目录 |
|
|
27
|
+
|
|
28
|
+
将解析后的路径分别记为 `PRD_DIR`、`DESIGN_DIR` 和 `WIKI_DIR`,后续步骤中引用这些变量而非硬编码路径。
|
|
29
|
+
|
|
30
|
+
## When to Use
|
|
31
|
+
|
|
32
|
+
- 用户执行 `/wiki-update`
|
|
33
|
+
- 会话结束时 hook 提示 `[wiki-update] Run: /wiki-update --mode=incremental --flush`
|
|
34
|
+
- 需要更新项目 wiki 文档时
|
|
35
|
+
|
|
36
|
+
## 参数
|
|
37
|
+
|
|
38
|
+
| 参数 | 值 | 说明 |
|
|
39
|
+
| --------- | -------------- | --------------------------- |
|
|
40
|
+
| `--mode` | `full`(默认) | 全量扫描并同步所有 .md 文件 |
|
|
41
|
+
| `--mode` | `incremental` | 仅同步队列中的变更文件 |
|
|
42
|
+
| `--flush` | 无值 | 增量同步后清空队列文件 |
|
|
43
|
+
|
|
44
|
+
**示例调用:**
|
|
45
|
+
|
|
46
|
+
- `/wiki-update` — 全量同步
|
|
47
|
+
- `/wiki-update --mode=incremental --flush` — 增量同步并清空队列
|
|
48
|
+
|
|
49
|
+
## 目录映射
|
|
50
|
+
|
|
51
|
+
```
|
|
52
|
+
{PRD_DIR}/{子路径} → {WIKI_DIR}/20-prd/{子路径}
|
|
53
|
+
{DESIGN_DIR}/{子路径} → {WIKI_DIR}/30-system-design/{子路径}
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
**完整结构示例:**
|
|
57
|
+
|
|
58
|
+
```
|
|
59
|
+
{WIKI_DIR}/
|
|
60
|
+
├── 20-prd/
|
|
61
|
+
│ └── crm/
|
|
62
|
+
│ ├── customer-master-data/
|
|
63
|
+
│ │ └── M03-01_客户主数据需求规格说明书.md
|
|
64
|
+
│ ├── fo-order/
|
|
65
|
+
│ │ └── M08-01_履约单需求规格说明书.md
|
|
66
|
+
│ ├── product-master-data/
|
|
67
|
+
│ │ └── M01-01_产品主数据需求规格说明书.md
|
|
68
|
+
│ ├── sales-forecast/
|
|
69
|
+
│ │ └── M06-01_销售预测需求规格说明书.md
|
|
70
|
+
│ └── one-time-contract/
|
|
71
|
+
│ └── M07-02_单次合同需求规格说明书.md
|
|
72
|
+
└── 30-system-design/
|
|
73
|
+
└── crm/
|
|
74
|
+
├── M01-01-产品主数据_system-design.md
|
|
75
|
+
├── M01-01-产品主数据_tasks.md
|
|
76
|
+
├── M03-01-客户主数据_system-design.md
|
|
77
|
+
└── ...(所有 .md 文件)
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
## 文件过滤规则
|
|
81
|
+
|
|
82
|
+
| 文件类型 | 是否同步 | 原因 |
|
|
83
|
+
| ----------------- | -------- | -------------------------- |
|
|
84
|
+
| `*.md` | ✅ 同步 | Wiki 文档内容 |
|
|
85
|
+
| `*.html` | ❌ 跳过 | HTML 原型,非 wiki 格式 |
|
|
86
|
+
| `*.sql` | ❌ 跳过 | 数据库 schema,非文档 |
|
|
87
|
+
| `*.xlsx` | ❌ 跳过 | Excel 附件 |
|
|
88
|
+
| `checklists/*.md` | ✅ 同步 | checklist 也是文档的一部分 |
|
|
89
|
+
|
|
90
|
+
## 执行步骤
|
|
91
|
+
|
|
92
|
+
### Full 模式(全量同步)
|
|
93
|
+
|
|
94
|
+
```
|
|
95
|
+
┌─────────────────────────────────────┐
|
|
96
|
+
│ 1. 扫描源目录 │
|
|
97
|
+
│ Glob: {PRD_DIR}/**/*.md │
|
|
98
|
+
│ Glob: {DESIGN_DIR}/**/*.md │
|
|
99
|
+
│ │
|
|
100
|
+
│ 2. 对每个 .md 文件: │
|
|
101
|
+
│ ├─ Read 源文件内容 │
|
|
102
|
+
│ ├─ 计算 wiki 目标路径 │
|
|
103
|
+
│ └─ Write 到 {WIKI_DIR}/ 对应路径 │
|
|
104
|
+
│ │
|
|
105
|
+
│ 3. 输出同步报告 │
|
|
106
|
+
│ - 新增文件数 │
|
|
107
|
+
│ - 更新文件数 │
|
|
108
|
+
│ - 总文件数 │
|
|
109
|
+
└─────────────────────────────────────┘
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
**步骤 1 — 扫描源目录:**
|
|
113
|
+
|
|
114
|
+
使用 Glob 工具扫描两个源目录下所有 `.md` 文件:
|
|
115
|
+
|
|
116
|
+
```
|
|
117
|
+
Glob("{PRD_DIR}/**/*.md")
|
|
118
|
+
Glob("{DESIGN_DIR}/**/*.md")
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
**步骤 2 — 逐文件同步:**
|
|
122
|
+
|
|
123
|
+
对每个扫描到的文件:
|
|
124
|
+
|
|
125
|
+
1. 用 `Read` 读取完整内容
|
|
126
|
+
2. 计算目标路径:将源目录前缀替换为 `{WIKI_DIR}/`
|
|
127
|
+
- `{PRD_DIR}/crm/sales-forecast/M06-01_销售预测需求规格说明书.md` → `{WIKI_DIR}/20-prd/crm/sales-forecast/M06-01_销售预测需求规格说明书.md`
|
|
128
|
+
- `{DESIGN_DIR}/crm/M06-01-销售预测_system-design.md` → `{WIKI_DIR}/30-system-design/crm/M06-01-销售预测_system-design.md`
|
|
129
|
+
3. 用 `Write` 写入 wiki 目标路径(自动创建目录)
|
|
130
|
+
|
|
131
|
+
**步骤 3 — 输出报告:**
|
|
132
|
+
|
|
133
|
+
```
|
|
134
|
+
═══ [wiki-update] 全量同步完成 ═══════════
|
|
135
|
+
新增: 12 个文件
|
|
136
|
+
更新: 5 个文件
|
|
137
|
+
总计: 17 个文件
|
|
138
|
+
═══════════════════════════════════════════
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
### Incremental 模式(增量同步)
|
|
142
|
+
|
|
143
|
+
```
|
|
144
|
+
┌─────────────────────────────────────┐
|
|
145
|
+
│ 1. 读取队列文件 │
|
|
146
|
+
│ .claude/.wiki-update-queue │
|
|
147
|
+
│ │
|
|
148
|
+
│ 2. 过滤: 仅保留 {PRD_DIR}/ 或 │
|
|
149
|
+
│ {DESIGN_DIR}/ 下的 .md │
|
|
150
|
+
│ │
|
|
151
|
+
│ 3. 对每个文件: │
|
|
152
|
+
│ ├─ 检查源文件是否存在 │
|
|
153
|
+
│ ├─ Read + Write 到 wiki 路径 │
|
|
154
|
+
│ └─ 记录同步状态 │
|
|
155
|
+
│ │
|
|
156
|
+
│ 4. 若指定 --flush: │
|
|
157
|
+
│ └─ 清空 .wiki-update-queue │
|
|
158
|
+
│ │
|
|
159
|
+
│ 5. 输出同步报告 │
|
|
160
|
+
└─────────────────────────────────────┘
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
**步骤 1 — 读取队列:**
|
|
164
|
+
|
|
165
|
+
读取 `.claude/.wiki-update-queue`,每行一个文件路径。
|
|
166
|
+
|
|
167
|
+
**步骤 2 — 过滤文件:**
|
|
168
|
+
|
|
169
|
+
仅保留同时满足以下条件的文件:
|
|
170
|
+
|
|
171
|
+
- 路径包含 `{PRD_DIR}/` 或 `{DESIGN_DIR}/`
|
|
172
|
+
- 以 `.md` 结尾
|
|
173
|
+
|
|
174
|
+
**步骤 3 — 同步文件:**
|
|
175
|
+
|
|
176
|
+
同 full 模式的步骤 2,但仅处理过滤后的文件列表。
|
|
177
|
+
|
|
178
|
+
**步骤 4 — 清空队列(--flush):**
|
|
179
|
+
|
|
180
|
+
仅移除已处理的 wiki 相关条目,保留其他路径(如 `.java`、`.ts` 等非 wiki 文件路径):
|
|
181
|
+
|
|
182
|
+
1. 重新读取 `.claude/.wiki-update-queue`
|
|
183
|
+
2. 过滤掉已同步的文件路径(即匹配 `{PRD_DIR}/` 或 `{DESIGN_DIR}/` 且以 `.md` 结尾的行)
|
|
184
|
+
3. 将剩余行写回队列文件;若无剩余行,写入空字符串
|
|
185
|
+
|
|
186
|
+
**步骤 5 — 输出报告:**
|
|
187
|
+
|
|
188
|
+
```
|
|
189
|
+
═══ [wiki-update] 增量同步完成 ═══════════
|
|
190
|
+
同步: 3 个文件
|
|
191
|
+
跳过: 1 个文件(非 wiki 目录)
|
|
192
|
+
队列已清空 ✓
|
|
193
|
+
═══════════════════════════════════════════
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
## 路径计算逻辑
|
|
197
|
+
|
|
198
|
+
源路径到 wiki 路径的转换规则:
|
|
199
|
+
|
|
200
|
+
```
|
|
201
|
+
输入: {PRD_DIR}/crm/sales-forecast/M06-01_销售预测需求规格说明书.md
|
|
202
|
+
└─ 替换源目录前缀为 {WIKI_DIR}/
|
|
203
|
+
|
|
204
|
+
输出: {WIKI_DIR}/20-prd/crm/sales-forecast/M06-01_销售预测需求规格说明书.md
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
代码逻辑(伪代码):
|
|
208
|
+
|
|
209
|
+
```
|
|
210
|
+
wikiPath = sourcePath
|
|
211
|
+
.replace(/^\{PRD_DIR\}\//, '{WIKI_DIR}/20-prd/')
|
|
212
|
+
.replace(/^\{DESIGN_DIR\}\//, '{WIKI_DIR}/30-system-design/')
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
## 错误处理
|
|
216
|
+
|
|
217
|
+
| 情况 | 处理方式 |
|
|
218
|
+
| ---------------------- | ----------------------------------------- |
|
|
219
|
+
| 源文件不存在(已删除) | 跳过,输出 `[跳过] 文件不存在: {path}` |
|
|
220
|
+
| 队列为空 | 输出 `队列为空,无需同步`,直接结束 |
|
|
221
|
+
| wiki 目录不存在 | 自动创建 |
|
|
222
|
+
| 队列文件不存在 | 输出 `队列文件不存在`,提示使用 full 模式 |
|
|
223
|
+
|
|
224
|
+
## Common Mistakes
|
|
225
|
+
|
|
226
|
+
| 错误 | 正确做法 |
|
|
227
|
+
| ---------------------------------- | ---------------------------------------------- |
|
|
228
|
+
| 同步 .sql 或 .html 文件 | 仅同步 .md 文件 |
|
|
229
|
+
| 修改 wiki 目录结构(如扁平化) | 严格保持与 docs 相同的目录层级 |
|
|
230
|
+
| 增量模式忘记清空队列 | 指定 `--flush` 时务必清空 `.wiki-update-queue` |
|
|
231
|
+
| 将 `docs/300-specs/` 等同步到 wiki | 仅同步 `20-prd` 和 `30-system-design` |
|
|
232
|
+
| 使用文件复制命令 | 使用 Read + Write 确保跨平台兼容 |
|