@double-codeing/flow2spec 2.2.3 → 3.0.8

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 (61) hide show
  1. package/README.md +77 -53
  2. package/cli.js +254 -14
  3. package/docs/Flow2Spec-/344/275/277/347/224/250/346/241/210/344/276/213-/346/250/241/346/213/237/345/257/271/350/257/235.md +123 -134
  4. package/docs/Flow2Spec-/350/256/276/350/256/241/350/257/264/346/230/216.md +574 -0
  5. package/docs/Flow2Spec/344/275/277/347/224/250/350/257/264/346/230/216.md +116 -76
  6. package/docs/README-/344/275/223/347/263/273/344/270/216/345/216/237/347/220/206.md +85 -44
  7. package/docs/README-/345/221/275/344/273/244/350/257/264/346/230/216.md +548 -79
  8. package/docs/README-/347/233/256/345/275/225/344/270/216/350/267/257/345/276/204/347/272/246/345/256/232.md +33 -62
  9. package/lib/agents.js +15 -3
  10. package/lib/claudeSettingsAdapter.js +114 -0
  11. package/lib/codexAgentsAdapter.js +70 -0
  12. package/lib/flow2specConfig.js +229 -0
  13. package/lib/init.js +698 -25
  14. package/package.json +2 -2
  15. package/templates/AGENTS.md +98 -0
  16. package/templates/flow2spec.config.json +9 -0
  17. package/templates/hooks/f2s-config-inject.js +181 -0
  18. package/templates/knowledge/index.md +68 -0
  19. package/templates/knowledge/manifest-matchers.json +35 -0
  20. package/templates/knowledge/manifest-routing.json +45 -0
  21. package/templates/knowledge/matchers/m-doc-routing.json +11 -0
  22. package/templates/knowledge/matchers/m-f2s-config-precheck.json +15 -0
  23. package/templates/knowledge/matchers/m-implement-from-spec.json +10 -0
  24. package/templates/{template → knowledge/template}//345/220/216/347/253/257/346/212/200/346/234/257/346/250/241/347/211/210.md +3 -2
  25. package/templates/{template → knowledge/template}//347/273/210/347/250/277/346/250/241/347/211/210.md +5 -4
  26. package/templates/knowledge/topics/f2s-config-precheck.md +24 -0
  27. package/templates/knowledge/topics/f2s-fallback-triage.md +60 -0
  28. package/templates/knowledge/topics/f2s-implement-tech-design.md +21 -0
  29. package/templates/knowledge/topics/f2s-stock-docs-vs-req-docs.md +25 -0
  30. package/templates/rules/f2s-config-check.mdc +35 -0
  31. package/templates/rules/f2s-flow2spec-unified-entry.mdc +88 -0
  32. package/templates/rules/f2s-implement-tech-design.mdc +144 -0
  33. package/templates/rules/f2s-karpathy-guidelines.mdc +77 -0
  34. package/templates/rules/f2s-knowledge-preflight.mdc +70 -0
  35. package/templates/rules/f2s-stock-docs-vs-req-docs.mdc +16 -0
  36. package/templates/rules/f2s-task.mdc +202 -0
  37. package/templates/skills/f2s-ctx-build/SKILL.md +74 -173
  38. package/templates/skills/f2s-ctx-rm/SKILL.md +39 -43
  39. package/templates/skills/f2s-doc-add/SKILL.md +69 -106
  40. package/templates/skills/f2s-doc-arch/SKILL.md +20 -9
  41. package/templates/skills/f2s-doc-final/SKILL.md +29 -21
  42. package/templates/skills/f2s-doc-pdf/SKILL.md +17 -10
  43. package/templates/skills/f2s-git-commit/SKILL.md +189 -0
  44. package/templates/skills/f2s-karpathy-guidelines/SKILL.md +20 -0
  45. package/templates/skills/f2s-kb-feat/SKILL.md +72 -50
  46. package/templates/skills/f2s-kb-fix/SKILL.md +77 -46
  47. package/templates/skills/f2s-kb-merge/SKILL.md +9 -0
  48. package/templates/skills/f2s-kb-migrate/SKILL.md +356 -0
  49. package/templates/skills/f2s-kb-sync/SKILL.md +80 -59
  50. package/templates/skills/f2s-kb-upgrade/SKILL.md +225 -0
  51. package/templates/skills/f2s-req-backend/SKILL.md +35 -12
  52. package/templates/skills/f2s-req-clarify/SKILL.md +10 -2
  53. package/templates/skills/f2s-req-plan/SKILL.md +110 -0
  54. package/templates/skills/stock-docs-vs-req-docs/SKILL.md +10 -4
  55. package/docs/images//345/216/237/347/220/206/345/233/2761.png +0 -0
  56. package/docs/images//345/216/237/347/220/206/345/233/2762.png +0 -0
  57. package/docs/images//345/221/275/344/273/244/346/230/216/347/273/206/345/233/276.png +0 -0
  58. package/docs/images//346/227/245/345/270/270/346/223/215/344/275/234/346/265/201/347/250/213/345/233/276.png +0 -0
  59. package/docs/images//347/256/200/350/277/260/345/233/276.png +0 -0
  60. package/templates/rules/implement-tech-design.mdc +0 -177
  61. package/templates/rules/stock-docs-vs-req-docs.mdc +0 -14
@@ -0,0 +1,202 @@
1
+ ---
2
+ name: f2s-task
3
+ description: >
4
+ 变更追踪:代码变更时自动创建并维护 .task/ 下的任务清单,支持跨会话续作。
5
+ 仅当 flow2spec.config.json 中 changeTracking.feat / fix / implement 之一为 true 时,对应技能生效。
6
+ 触发词:changeTracking、任务追踪、变更追踪、续作、继续上次任务
7
+ alwaysApply: true
8
+ ---
9
+
10
+ # f2s-task(变更追踪规则)
11
+
12
+ ## 生效条件
13
+
14
+ 各技能按自身子项判断:
15
+
16
+ - `f2s-kb-feat`:读 `changeTracking.feat`
17
+ - `f2s-kb-fix`:读 `changeTracking.fix`
18
+ - `f2s-implement-tech-design`:读 `changeTracking.implement`
19
+
20
+ 若对应子项为 `false` 或字段不存在,**该技能内的变更追踪步骤不执行**,直接跳过。
21
+
22
+ > `f2s-req-plan` 命令不受此条件约束,始终执行(见 `skills/f2s-req-plan/SKILL.md`)。
23
+
24
+ ## 目录结构
25
+
26
+ ```
27
+ .task/
28
+ ├── todo.json ← 活跃任务索引,仅主 agent 写
29
+ ├── active/
30
+ │ └── <task-name>/
31
+ │ ├── task.md ← checklist(执行步骤)
32
+ │ ├── context.md ← 涉及文件路径、相关资料链接
33
+ │ └── user-todos.md ← 须用户执行的代办(改库、配环境等),见下文
34
+ └── completed/
35
+ └── <YYYYMMDD>-<task-name>/
36
+ ├── task.md
37
+ ├── context.md
38
+ └── user-todos.md ← 随任务一并归档,便于验收后逐项消项
39
+ ```
40
+
41
+ **归档目录命名**:`completed/` 下文件夹名为 **`<YYYYMMDD>-<task-name>`**(**本地日历日期 8 位在前**,`<task-name>` 与 `active/` 下一致、为 snake_case;便于按时间排序)。**新归档一律使用本格式**;仓库中已有的旧式 `<task-name>-<YYYYMMDD>` 目录可保留,择机人工重命名即可。
42
+
43
+ ## todo.json 结构
44
+
45
+ ```json
46
+ [
47
+ {
48
+ "name": "任务名称",
49
+ "folder": ".task/active/<task-name>/",
50
+ "keywords": ["关键词1", "关键词2"],
51
+ "linkedSkill": "f2s-kb-fix",
52
+ "createdAt": "YYYY-MM-DD"
53
+ }
54
+ ]
55
+ ```
56
+
57
+ **写权约束**:`todo.json` 仅由主 agent 写,禁止子 agent 修改。
58
+
59
+ ## 任务开始(代码变更前)
60
+
61
+ 1. 检查 `.task/todo.json` 是否存在活跃任务。
62
+ 2. 将用户输入与各条目 `keywords` 匹配:
63
+ - 命中一个 → 加载对应 `task.md`、`context.md`,**若存在** `user-todos.md` 则一并加载,展示剩余清单与未消用户代办
64
+ - 命中多个 → 列出候选,让用户选择
65
+ - 无命中 → 确认任务名称后创建新任务
66
+ 3. 创建新任务(无命中时):
67
+ a. 确认任务名称(snake_case,简短描述变更内容)
68
+ b. 在 `.task/active/<task-name>/` 创建文件夹
69
+ c. 将本次工作步骤写入 `task.md`
70
+ d. 将涉及文件路径和相关资料链接写入 `context.md`
71
+ e. **创建 `user-todos.md`**(固定文件名,与 `task.md` 同目录):见下文「`user-todos.md` 格式与写盘义务」;尚无代办时可写入占位说明
72
+ f. 在 `todo.json` 新增条目(仅主 agent 写)
73
+
74
+ ## 执行中
75
+
76
+ - 每完成一个步骤,**立即**用 `Edit` / `Write` 将 `task.md` 中对应 checkbox 由 `[ ]` 改为 `[x]`(与代码改动同等对待,**禁止**仅靠会话内口头宣称「已完成」代替磁盘更新)
77
+ - 禁止批量勾选或跳步
78
+ - **用户代办须落盘**:凡须任务责任人(用户)在本机、数据库、配置平台或流程上完成的项(例如执行 DDL/DML、填密钥、点审批、发版、补数据),**同一会话内**追加写入 `user-todos.md`(`Edit` 追加小节或列表项),**禁止**仅在对话里交代而不写入该文件;可与对话摘要并存,以磁盘文件为交接真值
79
+
80
+ ## 中断与会话结束(硬约束)
81
+
82
+ - **长记忆以 `task.md` 的 checkbox 为真值**:下一会话通过「首个仍为 `[ ]` 的步骤」定位进度;未写盘则续作失真。
83
+ - 本会话内每真实完成 `task.md` 所列一步:**当步**打钩,不得积压到归档前一次性勾选。
84
+ - 若用户结束对话、工具流中断、或预计无法继续:在结束前至少打钩**已真实完成**的步骤,并在「## 备注」写明阻塞原因或「下一会话从步骤 N 继续」;**禁止**在未更新 `task.md` 的情况下直接结束(否则等同丢失进度信号)。
85
+ - 中断前若本会话已识别出**用户代办**:**必须**写入或追加到 `user-todos.md`,避免下一会话丢失「交给用户的事」。
86
+ - 若本会话为子任务创建过 **`git worktree`** 或等价隔离目录:结束前按 **`f2s-flow2spec-unified-entry`**「Git worktree 与子任务工作目录卫生」完成移除或写明残留路径与删除命令(必要时写入 `user-todos.md`)。
87
+
88
+ ## 任务完成
89
+
90
+ **归档门禁(须先于移动目录自检)**:
91
+
92
+ - 将目录移入 `completed/` **当且仅当** `task.md` 的「## 步骤」下,与本次交付相关的条目**全部为 `[x]`**(或用户明确取消的项已在「## 备注」说明,且对应列表项已改为 `[x]` / 已删除该项并注明取消)。
93
+ - 若仍存在 `[ ]`:**禁止**移动 `active` → `completed/`、**禁止**从 `todo.json` 删除该条目;应先回到「执行中」补完或改清单后再归档。
94
+
95
+ 完成上述门禁后:
96
+
97
+ 1. 将 `.task/active/<task-name>/` 整体移至 `.task/completed/<YYYYMMDD>-<task-name>/`
98
+ 2. 从 `todo.json` 删除该条目
99
+ 3. 若 `todo.json` 变为空数组,删除该文件
100
+
101
+ ## 新会话续作
102
+
103
+ 新会话开始时,若存在 `.task/todo.json`:
104
+
105
+ 1. 读取全部活跃任务
106
+ 2. 将用户首条消息与各条目 `keywords` 匹配
107
+ 3. 命中则展示剩余 checklist,**若存在 `user-todos.md` 则摘要其中仍为 `- [ ]` 的用户代办**,并提示「检测到未完成任务,是否继续?」
108
+ 4. 用户确认后:**若 `linkedSkill` 非空,先加载对应技能规则文件(配置根 `skills/<linkedSkill>/SKILL.md`)作为执行上下文**,再按 `task.md` 剩余步骤继续——技能的落盘约束、文风规则、自检清单全部生效,与首次调用一致
109
+ 5. 无命中则不打扰,正常响应
110
+
111
+ **孤儿 `active/`(`todo.json` 缺失或损坏)**:若磁盘上仍存在 `.task/active/<task-name>/` 且其中 `task.md` 含未勾选步骤,应 `Read` 该 `task.md` 并提示用户是否续作;续作前宜按「任务开始」一节恢复或补写 `todo.json`(仅主 agent),避免进度仅存在于已归档目录而无法关联活跃索引。
112
+
113
+ ## task.md 格式
114
+
115
+ ```markdown
116
+ # <任务名>
117
+
118
+ ## 步骤
119
+ - [ ] 步骤1
120
+ - [ ] 步骤2
121
+ - [x] 步骤3(已完成)
122
+
123
+ ## 备注
124
+ <执行中的发现、决策等>
125
+ ```
126
+
127
+ ## context.md 格式
128
+
129
+ ```markdown
130
+ # <任务名> 上下文
131
+
132
+ ## 涉及文件
133
+ - `src/payment/callback.js`
134
+ - `src/payment/retry.js`
135
+
136
+ ## 相关资料
137
+ - `.Knowledge/req-docs/payment-spec.md`
138
+ - `.Knowledge/stock-docs/payment-arch.md`
139
+
140
+ ## 用户代办清单
141
+ - 见同目录 `user-todos.md`(须用户执行的项统一写在该文件,勿仅在对话中罗列)
142
+ ```
143
+
144
+ ## user-todos.md 格式与写盘义务
145
+
146
+ **路径**:`.task/active/<task-name>/user-todos.md`(归档后位于 `.task/completed/<YYYYMMDD>-<task-name>/user-todos.md`)。**固定文件名** `user-todos.md`,便于 Hook 与脚本引用。
147
+
148
+ **用途**:汇总 **Agent 无法代劳**、必须由用户(或持权人在平台)完成的项,例如:
149
+
150
+ - 在指定环境执行 SQL / 迁移脚本(可引用 `req-docs` 或仓库内 `.sql` 路径)
151
+ - 配置中心 / 环境变量 / 密钥 / 白名单
152
+ - 发布、审批、工单、外部系统开关
153
+
154
+ **写盘义务**:
155
+
156
+ 1. **创建任务时**(`f2s-task`「任务开始」步骤 3.e):创建该文件;可含简短说明 + 空列表。
157
+ 2. **执行中**:每出现一类新的用户代办,**当次**追加(推荐按日期分二级标题 `## YYYY-MM-DD`,下列 `- [ ]` 可勾选项或步骤编号)。
158
+ 3. **与 `task.md` 分工**:`task.md` 管 Agent 侧步骤 checkbox;`user-todos.md` 管用户侧待办;**勿**把「仅用户可执行」的长操作说明只写在 `task.md` 步骤正文代替本文件。
159
+ 4. **续作**:加载任务时 `Read` 本文件,向用户展示仍未勾选的 `- [ ]` 项(若有)。
160
+
161
+ **示例结构**:
162
+
163
+ ```markdown
164
+ # 用户代办清单
165
+
166
+ > Agent 追加;用户完成后可将对应 `- [ ]` 改为 `- [x]` 或删除该行。
167
+
168
+ ## 2026-05-09
169
+
170
+ - [ ] 在预发 MySQL 执行:`.Knowledge/req-docs/xxx.sql`(先备份)
171
+ - [ ] 在配置中心打开功能开关 `feature.foo.enabled`
172
+
173
+ ## 2026-05-10
174
+
175
+ - [ ] 生产发版后回写实际版本号到本文档备注
176
+ ```
177
+
178
+ ## 推荐 Hook 配置(Claude Code)
179
+
180
+ 在项目 `.claude/settings.json` 中添加,每次文件变更前将活跃任务注入上下文:
181
+
182
+ ```json
183
+ {
184
+ "hooks": {
185
+ "PreToolUse": [{
186
+ "matcher": "Edit|Write",
187
+ "hooks": [{
188
+ "type": "command",
189
+ "command": "node -e \"try{const f='.task/todo.json',fs=require('fs');if(fs.existsSync(f)){const t=JSON.parse(fs.readFileSync(f,'utf8'));if(t.length)console.log('[task] 活跃任务: '+t.map(x=>x.name).join(', '))}}catch(e){}\" 2>/dev/null || true"
190
+ }]
191
+ }]
192
+ }
193
+ }
194
+ ```
195
+
196
+ ## 禁止项
197
+
198
+ - 禁止子 agent 写入 `todo.json`
199
+ - 禁止在所有步骤完成前将任务移至 `completed/`
200
+ - 禁止批量勾选 checkbox(必须逐步勾选)
201
+ - 禁止在 `changeTracking.feat` / `changeTracking.fix` / `changeTracking.implement` 均为 `false` 或字段不存在时创建 `.task/` 目录(`f2s-req-plan` 不受此约束)
202
+ - 禁止在已使用 `.task/` 的任务中,将「须用户执行的代办」**仅**写在对话或仅写在 `task.md` 而**不**追加到 `user-todos.md`(无代办时文件可保持占位说明)
@@ -1,204 +1,105 @@
1
1
  ---
2
+ name: f2s-ctx-build
3
+ description: 根据 .Knowledge/stock-docs 文档生成知识路由主题与索引;触发:生成项目上下文、f2s-ctx-build、终稿生成上下文
2
4
 
3
- ## name: f2s-ctx-build
4
- description: 根据 stock-docs 文档生成 Rules、Skills 与文档索引;触发:生成项目上下文、f2s-ctx-build、终稿生成上下文
5
+ > 执行口径:本技能只维护 `.Knowledge`(`topics/index/manifest-routing/matchers` 分片),不改配置根 `rules/skills`。不再维护 `.Knowledge/manifest-matchers.json`(已废弃聚合文件;`flow2spec init` 会删除遗留副本)。
5
6
 
6
- > **「配置根」**:当前 agent 对应的 AI 工具配置目录(`flow2spec init` 写入,常见 `**.cursor/`**、`**.claude/**`、`**.codex/**`)。下文 `**配置根/...**` 指该目录下的相对路径。
7
+ # 根据文档生成项目上下文(topics/index/路由清单)
7
8
 
8
- # 根据文档生成项目上下文(Rules、Skills、文档索引)
9
+ ## 编排(主 / 子 agent)
9
10
 
10
- 用户会在本技能后附带**一个参数**:要么是一个 **URL**(如 `https://xxx.com/doc`),要么是一个**本地路径**,且路径应指向 **配置根/stock-docs/** 下的 Markdown(PDF/初稿/终稿/架构说明等**存量上下文源**,用于生成 Rules、Skills)。**不要**把 `**配置根/req-docs/`**(按方案实现代码的技术方案目录)当作本技能入参;若用户只持有该目录下的方案,应提示先将符合《终稿模版》的文档复制或整理到 `**配置根/stock-docs/**` 再执行。请按以下步骤执行,用你的**大模型能力**分析文档并生成完整架构。
11
+ - 两字段(`subAgent` / `switchAgentVerification`)语义以统一入口为唯一事实源:**Cursor/Claude** 读配置根 `rules/f2s-flow2spec-unified-entry.*`;**Codex** `.codex/topics/f2s-flow2spec-unified-entry.md`(与上同源,`flow2spec init` 镜像)。本 SKILL 不复述。
12
+ - **首选分支(小变更 → 主全流程)**:当本次改动 **≤ 2 个新 / 改主题**,**且 ≤ 1 个新 matcher**,**且无跨主题批量引用调整** 时,全流程在主 agent 完成,不拆子。
13
+ - **中大变更分支**(`subAgent=true` 且超出上述阈值):
14
+ - 主 agent 在主会话中列出**文件级契约**:子 A 只写 `.Knowledge/topics/<foo>.md`,子 B 只写 `.Knowledge/matchers/<m-foo>.json`,路径互不重叠;
15
+ - 子 agent 仅落盘契约内文件,不跨边界;
16
+ - **主 agent 单点**编辑 `.Knowledge/manifest-routing.json` / `.Knowledge/index.md`(补 `taskToTopicRules`、`topicPaths`、`matcherPath`、`topicDependencies`);
17
+ - 主 agent 做整体验收。
18
+ - **不推荐**:单个子 agent 同时改 manifest / index / 多份 topics / matchers;以及「子 A 写、子 B 验」。
19
+ - **「一子写、主验」**:仅在交付边界极窄(例如只产出 1 个新 matcher 分片草稿,manifest 引用仍由主写)时可接受。
20
+ - **写权硬约束**:`.Knowledge/manifest-routing.json` / `.Knowledge/index.md` **恒由主 agent 落盘**,子 agent 不得触碰。
21
+ - 默认落盘侧 agent 自验;本 SKILL 不绑定交叉校验。
11
22
 
12
- **文档产物阶段约定**:doc 中的产物一般分为 **原稿**、**初稿**、**终稿**;本技能生成的 **Rules、Skills 文件名与目录名不带 `_终稿` 等后缀**,与现有约定一致(如 `<主题>-context.mdc`、`<主题>-context/SKILL.md`)。
23
+ ## 输入
13
24
 
14
- **生成原则:拆解与分工**
15
- 本技能生成的所有产物须遵循以下两点,执行时即按此执行,而非事后补救:
25
+ - 接收一个参数:URL 或本地路径。
26
+ - 本地路径必须位于 `.Knowledge/stock-docs/`。
27
+ - 若传入 `.Knowledge/req-docs/`,提示用户先整理为 `stock-docs` 终稿后再执行。
16
28
 
17
- 1. **拆解**:根据文档篇幅与领域块数量,决定是「单 Rule + 单 Skill」还是「索引入口 + 多条专题 Rule/Skill」。篇幅长或含多块独立内容(如接口约定、消息队列、配置、公共工具等)时,应拆成索引入口 + 多条按场景/主题的 Rule 与 Skill,使单条更聚焦、按需加载。
18
- 2. **分工**:
19
- - **Rules**:承担**约束、约定、作用范围**;一条 alwaysApply 的索引入口 + 若干条用 globs 限定在相关路径的专题规则;正文写「必须/禁止/约定」类内容。
20
- - **Skills**:承担**领域知识、操作步骤、示例**;一个总览 skill + 若干专题 skill;description 写清触发词与使用场景,正文写概念、流程、方法表、示例。
29
+ ## 生成原则
21
30
 
22
- ---
31
+ 1. **拆解**:文档较长或包含多块独立能力时,拆分为多个 topic;避免把无关能力塞到同一主题。
32
+ 2. **分工**:
33
+ - `topics/`:规则与流程正文(可执行知识)
34
+ - `index.md`:主题索引与语义说明(人读入口)
35
+ - `manifest-routing.json` + `taskToTopicRules[].matcherPath` 指向的 `matchers/*.json`:任务路由与关键词词表(机读入口)
23
36
 
24
37
  ## 步骤 1:获取文档内容
25
38
 
26
- - 若用户给出的是 **HTTPS/HTTP URL**:使用你可用的网络请求能力(如 web fetch)拉取该 URL 的页面内容。若你所在环境无法访问该 URL(如内网),则回复用户说明「请将页面内容复制到项目内 `配置根/stock-docs/xxx.md`,再执行本技能并传入路径 `配置根/stock-docs/xxx.md`」。
27
- - 若用户给出的是**本地路径**:从配置根的父目录读取该文件(须为 `**配置根/stock-docs/…`**,如 `配置根/stock-docs/功能描述.md`)。若路径落在 `**配置根/req-docs/**`(技术方案目录),应提醒用户:本技能入参须为 **stock-docs** 下的存量源文档;请先将符合《终稿模版》的内容整理到 `**stock-docs/`** 再执行。
28
-
29
- 得到的内容可能是 Markdown、HTML 或富文本,请先提取出**正文**(若是 HTML 可提取 body 内的文本或转成可读的 Markdown)。
30
-
31
- ---
32
-
33
- ## 文档路径与链接约定(必守,避免引用错误)
34
-
35
- 生成任何产物时,**必须**按下列规则写文档路径与链接。**路径写错会导致 Cursor 中链接失效、AI 无法正确打开源文档,务必严格按表执行。**
36
-
39
+ - URL:抓取正文;无法访问时提示用户先落地到 `.Knowledge/stock-docs/*.md`。
40
+ - 本地路径:读取 Markdown 文档,提炼主题与能力边界。
37
41
 
38
- | 写入位置 | 文档所在目录(固定) | 引用该文档时的写法 |
39
- | ---------------------------- | ----------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
40
- | **配置根/rules/*.mdc** | 文档在 `配置根/stock-docs/<文件名>.md` | 链接 **必须** 写为 `[文档标题](../stock-docs/<文件名>.md)`,即 href 为 `**../stock-docs/<文件名>.md`**(从 配置根/rules 到 配置根/stock-docs 的相对路径)。 |
41
- | **配置根/skills/<主题>/SKILL.md** | 同上 | 链接 **必须** 写为 `[文档标题](../../stock-docs/<文件名>.md)`,即 href 为 `**../../stock-docs/<文件名>.md`**(从 配置根/skills/xxx 到 配置根/stock-docs 的相对路径)。 |
42
- | **配置根/docs-index.md** | 同上 | 文档路径列:显示可写 `配置根/stock-docs/<文件名>.md`;链接 href **必须** 为 `**stock-docs/<文件名>.md`**(因 docs-index 位于配置根下,同级的 **stock-docs** 目录即 `stock-docs/<文件名>.md`)。示例:`[配置根/stock-docs/技术方案设计.md](stock-docs/技术方案设计.md)`。 |
43
- | **frontmatter 的 sourceDoc** | 同上 | **必须** 写为 `**配置根/stock-docs/<文件名>.md`**(与用户传入的本地路径一致;若用户传的是相对路径如 `配置根/stock-docs/xxx.md`,即用该值)。 |
42
+ ## 步骤 2:语义分析(必须)
44
43
 
44
+ 从文档中提炼:
45
45
 
46
- **正确示例(按位置抄写格式):**
46
+ - 主题名与主题意图(可形成 topic id)
47
+ - 核心概念与关键流程
48
+ - 业务规则与边界条件
49
+ - 任务触发词(写入对应 `matchers/<matcherId>.json` 的 `includeAny`)
50
+ - 与现有主题的依赖关系(用于 `topicDependencies`)
47
51
 
48
- - Rule 内:`[技术方案设计](../stock-docs/技术方案设计.md)`
49
- - Skill 内:`[技术方案设计](../../stock-docs/技术方案设计.md)`
50
- - docs-index 表格单元格:`[配置根/stock-docs/技术方案设计.md](stock-docs/技术方案设计.md)`
51
- - frontmatter:`sourceDoc: 配置根/stock-docs/技术方案设计.md`
52
+ ## 步骤 3:写入 topics
52
53
 
53
- **常见错误(禁止):**
54
+ - 目标路径:`.Knowledge/topics/<topic>.md`
55
+ - 若已存在同主题:优先增量更新,避免重复主题。
56
+ - 若为新主题:新增文件并补充清晰标题、适用场景、规则与流程。
54
57
 
55
- - **禁止** Rule 内使用 `../../stock-docs/` 或 `req-docs/`(配置根下技术方案目录,非 stock-docs)—— 会 404。
56
- - **禁止** 在 Skill 内使用 `../stock-docs/` 或 `req-docs/`(配置根下技术方案目录,非 stock-docs)—— 会 404。
57
- - **禁止** 在 docs-index 内使用 `../stock-docs/` 或 `配置根/stock-docs/xxx.md` 作为链接 href —— 应仅为 `stock-docs/<文件名>.md`。
58
- - **禁止** 在链接或 sourceDoc 中混用目录:生成上下文的链出与 **sourceDoc** 仅指向 `**stock-docs/`**;勿把 `**配置根/req-docs/**` 下的技术方案当作本技能产物的链出目标。
59
- - **禁止** 在 sourceDoc 中写相对路径如 `../stock-docs/xxx.md` 或 `**配置根/req-docs/xxx.md`** —— 必须为 `配置根/stock-docs/<文件名>.md`。
60
-
61
- **记忆要点**:默认文档目录为 `**配置根/stock-docs/`**(与项目约定一致);Rule 内链出用 `../stock-docs/`,Skill 内链出用 `../../stock-docs/`,docs-index 内链出用 `stock-docs/`;sourceDoc 用 `配置根/stock-docs/<文件名>.md`。生成后自检所有链接与 sourceDoc,确保层级正确、与项目约定目录一致。
62
-
63
- ---
64
-
65
- ## 步骤 2:用大模型分析文档
66
-
67
- 请你**完整理解**该文档,并提炼出:
68
-
69
- - **主题/标题**:文档的核心主题,用作生成产物的命名(如「订单功能」→ 文件名/目录名用英文或拼音如 `order`,或保留中文如 `订单功能描述`)。
70
- - **核心概念**:术语表、名词解释、关键实体(如订单、创建、加入、完成、失败等)。
71
- - **状态与流转**:若有状态机、流程,请整理出状态名与流转条件。
72
- - **业务规则**:约束、限购、时效、支付与退款、库存等要点。
73
- - **关键流程**:用户侧或系统侧的主要流程(创建、加入、完成、失败处理等)。
74
-
75
- ---
58
+ ## 步骤 4:更新 index
76
59
 
77
- ## 步骤 3:生成并写入以下产物
78
-
79
- 请**直接创建或覆盖**以下文件,保证格式正确、内容由你分析后生成(不要照抄原文,要提炼与结构化)。生成前先根据**拆解与分工**原则判断:本次是生成「单 rule + skill」还是「索引入口 + 多条专题 rule/skill」。
80
-
81
- **路径提醒**:写入 Rule/Skill/docs-index 时,文档链接 href 和 sourceDoc **必须**严格按「文档路径与链接约定」表执行——Rule 仅用 `../stock-docs/<文件名>.md`,Skill 仅用 `../../stock-docs/<文件名>.md`,docs-index 仅用 `stock-docs/<文件名>.md`,sourceDoc 仅用 `配置根/stock-docs/<文件名>.md`。勿凭印象写错层级。
60
+ - 更新 `.Knowledge/index.md` 的主题路由表。
61
+ - 保证“同主题单行”。
62
+ - 主题路由表需维护“关联文档(摘要)”列:每个主题补充 1-3 条关键文档**可点击 Markdown 链接**(格式:`[标题](相对路径)`,优先 `stock-docs/req-docs`)。
63
+ - 若某主题暂无可公开文档,写“无”或“待补充”,禁止留空导致歧义。
64
+ - 若新增/删除主题,索引同步调整,避免孤儿路径。
82
65
 
83
- **main.mdc docs-index.md 的区别**
66
+ ## 步骤 5:更新路由清单(按需)
84
67
 
85
- - **main.mdc**(`配置根/rules/main.mdc`):**项目的总概述和索引**,固定命名 **main**,**唯一** alwaysApply rule。给 AI 看的「体系结构 + 模块一览 + 公共能力入口」,让 AI 大致知道项目结构,需要时再去读各模块的 rule/skill;并在正文中**强制约定**「先查 `docs-index.md` 再下钻」(见 3.0 正文第 4 点),以落实渐进式读取。
86
- - **docs-index.md**(`配置根/docs-index.md`):**需求/文档索引**,按文档列出的表格(文档路径、Rules、Skills、简要说明),供人与 AI 查「某文档对应哪些产物」。不参与 alwaysApply,**须由 main 正文显式要求 Agent 在定位文档↔产物时优先读取**,否则不会自动进入上下文。
68
+ - 本步骤由主 agent 落盘(写权硬约束),子 agent 不得执行。
69
+ - 更新 `manifest-routing.topicPaths`(topicId -> topic 文件路径)
70
+ - 更新 `manifest-routing.taskToTopicRules[]`(任务到主题集合 + matcherId)
71
+ - 更新 `manifest-routing.topicDependencies`(先读依赖后读主主题)
72
+ - 更新 `matchers/<matcherId>.json` 的 `includeAny`(关键词词表;路径须与 `taskToTopicRules[].matcherPath` 一致)
73
+ - 校验 `fallbackTopic`、`topicPaths`、`matcherId` 引用有效
74
+ - 仅做最小改动,不重写无关字段
87
75
 
88
- ### 3.0 main.mdc(项目总概述与索引,唯一 alwaysApply)
76
+ ## 路径与引用约束
89
77
 
90
- - **路径**:`配置根/rules/main.mdc`(**固定命名**,不可改为其他文件名)
91
- - **frontmatter**:`description: 项目总概述与索引,体系结构、模块一览、能力入口`,`alwaysApply: true`
92
- - **正文结构**(简短;含下述第 4 点为优先,总行数可略超 50 行,**不得省略第 4 点**):
93
- 1. **项目结构**:按当前项目实际目录与约定,用通用表述写接口与模块的划分(如对客接口、公共/功能模块等),**不要写仅本项目特有的结构名**(如某团队、某产品线专属目录名),以便本技能复用于其他项目。
94
- 2. **模块一览**(表格):列「模块名」「说明」「详细约定加载方式」。每行对应一个功能模块:说明该模块用途;加载方式写「打开项目约定的该模块路径时自动加载对应 rule;或查阅 配置根/stock-docs/xxx、配置根/skills/xxx」。
95
- 3. **公共能力入口**(若有):接口与上下文、消息队列、配置、公共工具等入口的简短描述 + 指向对应 rule,并写实现位置(按项目约定,如 ctx 注入、MQ 辅助、配置辅助、模型、公共工具等)。
96
- 4. **全文索引与渐进式读取(必填)**:须单独成段或小节,至少包含以下语义(可压缩措辞,不可删掉任一条):
97
- - **映射表位置**:「文档路径 ↔ Rules / Skills」的完整表在 `**配置根/docs-index.md`**(`docs-index` 非 alwaysApply,不会自动进上下文,须按需打开)。
98
- - **读取顺序**:当要根据**某份 stock-docs 文档、某需求/模块名**定位应遵循的规则或应加载的技能时,**应先读取 `docs-index.md`**,在表中找到对应行,再按 **Rules**、**Skills** 列给出的路径打开 `.mdc` / `SKILL.md`;需要长文细节时再打开 **stock-docs** 链出的源文档;仍不足再下钻**业务源码**。
99
- - **避免**:在未查 `docs-index.md`、未锁定相关 Rule/Skill 前,对工作区做**无范围**的大面积检索,或通读与当前问题**无关**的长文档。
100
- 5. 文末可再单列一行链接提示:**全文索引文件**:`配置根/docs-index.md`(与第 4 点呼应即可)。
101
- - **main.mdc 的更新时机**:每次执行本技能时,**可能**会更新 main.mdc,**也可能**不更新。
102
- - **会更新**:若本次文档属于「功能模块」或「公共模块说明」类,需在 main 的「模块一览」或「公共能力入口」中体现,则更新 main(若 main 不存在则先创建;若已存在则只更新与本次文档相关的部分,不删已有且无关的模块行)。
103
- - **不更新**:若本次文档不涉及项目总概述与索引(如单次需求说明、不纳入体系结构的文档),则**不修改** main.mdc,仅生成/更新该文档对应的专题 Rules、Skills 及 docs-index 即可。
78
+ - `sourceDoc` 或文档引用统一指向 `.Knowledge/stock-docs/<文件名>.md`
79
+ - 禁止把 `.Knowledge/req-docs/` 作为 topic 的 `sourceDoc`
80
+ - 禁止改写配置根 `rules/skills`
104
81
 
105
- ### 3.1 Rules(专题规则,一律非 alwaysApply)
82
+ ## 输出摘要(必须)
106
83
 
107
- - **路径**:`配置根/rules/<主题>-ctx.mdc`(或拆解后的多条,如 common-interface-ctx.mdc)
108
- - **按配置根区分(必守)**:
109
- - `**.cursor/`(Cursor)**:规则文件扩展名 `**.mdc`**;路径范围用 `**globs:**`;专题规则 `**alwaysApply: false**`;总览 `**main.mdc**` 唯一 `**alwaysApply: true**`。
110
- - `**.claude/`(Claude Code)**:规则须为 `**.md`**(Claude Code 不加载 `.mdc`);路径范围用 `**paths:**`,**不要**写 `**globs:`**;**不要**写 `**alwaysApply`**(无 `paths` 的规则与会话一并加载)。若项目同时存在 `.cursor/` 与 `.claude/`,生成或更新 `**.claude/rules/**` 时须按上表写 `**.md**` + `**paths:**`。`flow2spec init claude` 已对包内模板做自动转换,手工新增规则时请对齐官方文档。
111
- - **格式**(以 **Cursor `.mdc`** 为默认表述;**Claude** 将 `globs`→`paths`、扩展名 `.md` 即可):
112
- - frontmatter:`description: <一句话说明本规则>`,**禁止** `alwaysApply: true`(唯一 alwaysApply 为 main.mdc)
113
- - **globs(必填,仅 Cursor)**:按主题限定在相关路径,例如功能模块 → `globs: "**/functions/<模块名>/**"`;接口与 ctx → `globs: "**/functions/**/*.js"`;消息队列消费 → `globs: "**/qmq/**/*.js"` 或项目约定的 MQ 消费目录;公共工具 → `globs: "**/utils/common.js"` 或项目约定的工具路径。**Claude Code 下改为 `paths:`,键名同列表写法。**
114
- - `alwaysApply: false`(仅 Cursor;Claude 专题规则不写此项)
115
- - **版本管理(必填)**:`sourceDoc: <本次命令入参,即 配置根/stock-docs/xxx.md>`,`generatedAt: "<当前时间东八区北京时间,ISO 8601 如 2026-01-28T20:00:00+08:00>"`
116
- - 正文:提炼的**核心概念、关键流程、规则要点**(Markdown,简洁可读)+ **文档链接**(链接 href 必须为 `../stock-docs/<文件名>.md`,见「文档路径与链接约定」)
117
- - **与 main.mdc 的联动**:仅当本次**会更新** main.mdc 时(见 3.0「main.mdc 的更新时机」):若本次是功能模块,生成/更新该 rule 后**必须**在 main 的「模块一览」中增加或更新该模块行;若本次是公共模块说明,在 main 的「公共能力入口」中体现即可。若本次**不更新** main,则不改 main.mdc。
84
+ - 新增/更新的 topic 文件
85
+ - `index` 更新项
86
+ - 路由清单更新项(如有)
87
+ - 失败或跳过项及原因
118
88
 
119
- ### 3.2 Skills
89
+ ## 复杂场景示例
120
90
 
121
- - **路径**:`配置根/skills/<主题>/SKILL.md`(主题建议用英文或拼音,如 `order-context`,避免仅中文目录名)
122
- - **格式**:
123
- - frontmatter:`name: <主题>-context`,`description: <何时使用本技能,写清触发场景>`
124
- - **版本管理(必填)**:`sourceDoc: <本次命令入参,即 配置根/stock-docs/xxx.md>`,`generatedAt: "<当前时间东八区北京时间,ISO 8601 +08:00>"`
125
- - 正文:何时使用、核心概念(表或列表)、关键流程、业务规则要点、**详细文档链接**(链接 href 必须为 `../../stock-docs/<文件名>.md`,见「文档路径与链接约定」)。
91
+ 用户输入:`f2s-ctx-build .Knowledge/stock-docs/支付回调改造_终稿.md`,且现有 `topics/payment.md` 已存在。
126
92
 
127
- ### 3.3 docs-index.md(需求/文档索引)
93
+ - 若新文档与现有 `payment` 主题高度重合:原位更新 `topics/payment.md`,不要新建 `payment-v2.md`。
94
+ - 若新文档新增“重试补偿”子能力:可新增 `topics/payment-retry.md`,并在 `manifest-routing.topicDependencies` 中声明 `payment-retry -> payment`。
95
+ - 更新后同步 `index` 与路由清单,确保 `topicPaths`、`fallbackTopic`、`matcherId` 仍有效。
128
96
 
129
- - **路径**:`配置根/docs-index.md`
130
- - **操作**:若文件不存在,先创建表头:
131
- ```markdown
132
- # 需求/文档索引
133
-
134
- | 需求/模块 | 文档路径 | Rules | Skills | 简要说明 |
135
- | --------- | -------- | ----- | ------ | -------- |
136
- ```
137
- 然后**追加一行**,且**必须填写 Rules、Skills 列**:
138
- - **Rules**:本次生成的 Rule 路径,多个用顿号或空格分隔,如 `配置根/rules/<主题>-context.mdc` 或 `配置根/rules/common-interface-ctx.mdc`。注意:main.mdc 不在此列逐文档列出(main 为总索引,与单文档非一对一)。
139
- - **Skills**:本次生成的 Skill 路径,多个用顿号或空格分隔,如 `配置根/skills/<主题>-context/SKILL.md` 或 `配置根/skills/common-modules-context/SKILL.md`、`配置根/skills/common-modules-mq-usage/SKILL.md`。
140
- - **文档路径与链接(必守)**:文档路径列显示 `配置根/stock-docs/<文件名>.md`;链接 **必须** 为 `[配置根/stock-docs/<文件名>.md](stock-docs/<文件名>.md)`,即 href 只能是 `**stock-docs/<文件名>.md`**(见上文「文档路径与链接约定」)。勿写成 `../stock-docs/` 或误指 `**req-docs/**`。
141
- - 行示例:`| <文档标题> | [配置根/stock-docs/<文件名>.md](stock-docs/<文件名>.md) | <Rules 路径> | <Skills 路径> | <一两句摘要> |`
142
- - 若文件已存在且表头无 Rules、Skills 列,则先补全表头再追加;追加时仍须填写 Rules、Skills 列。
143
- - **同一文档只占一行**:若该文档路径(或文档标题)在表中已有行,则**更新该行**(覆盖 Rules、Skills、简要说明),不要追加新行,便于日后「修改文档后重新生成」时索引保持一对一。
144
-
145
- ### 3.4 更新与索源(版本管理)
146
-
147
- 版本管理服务于**更新 docs 时方便更新与索源**:
148
-
149
- - **索源**
150
- - **从产物找文档**:Rule/Skill 的 frontmatter 中 `sourceDoc` 即源文档路径,`generatedAt` 即本次生成时间。
151
- - **从文档找产物**:查 `配置根/docs-index.md` 中该文档所在行的 **Rules**、**Skills** 列,即由该文档生成的全部 Rule/Skill 路径。
152
- - **更新流程**
153
- - 修改某份文档后,对该文档**再次执行本技能**并传入同一路径(如 `配置根/stock-docs/技术方案设计.md`),即可覆盖并更新该文档对应的全部 Rules、Skills;文档索引中该文档所在行的 Rules、Skills、简要说明会一并更新。
154
- - 无需手动查找要改哪些 Rule/Skill:一次按 doc 执行即可。
155
-
156
- ### 3.5 按需拆解与加详(执行要点)
157
-
158
- 当文档**篇幅较长**或**领域清晰**(如同时包含「接口约定、消息队列、配置、公共工具」等多块独立内容)时,**必须**按前述拆解与分工做**拆分 + 适度加详**,使 Rules、Skills 按场景加载、单条更聚焦。
159
-
160
- **Rules 拆分建议:**
161
-
162
- - **唯一 alwaysApply** 为 **main.mdc**(见 3.0);不再为单文档单独建 alwaysApply 的「索引入口」rule。各文档对应的索引入口统一合并到 main.mdc 的「模块一览」或「公共能力入口」中。
163
- - 按**主题**拆成的多条 rule 一律 **alwaysApply: false**,每条用 **globs** 限定在相关路径,例如:
164
- - 功能模块 → `globs: "**/functions/<模块名>/**"`
165
- - 接口与 ctx 约定 → `globs: "**/functions/**/*.js"`
166
- - 消息队列约定 → `globs: "**/qmq/**/*.js"` 或项目约定的 MQ 消费目录
167
- - 公共工具约定 → `globs: "**/utils/common.js"` 或项目约定路径
168
- - 每条 rule 的 frontmatter 中 **且必须含** `sourceDoc`、`generatedAt`(同上),正文写该主题的**核心概念、关键流程、规则要点**,可带简短示例;单条建议 <50 行。生成功能模块 rule 后必须在 main.mdc 的「模块一览」中追加/更新对应行。
169
-
170
- **Skills 拆分建议:**
171
-
172
- - 保留 1 个**总览** skill:路径如 `配置根/skills/<主题>-context/SKILL.md`,内容为项目/文档总览、各能力入口、关键流程摘要,并在正文中说明「具体某类问题见 xxx-usage 技能」。
173
- - 按**高频场景**再拆 1 ~ 2 个专题 skill,例如:
174
- - 消息队列发送与消费 → 路径如 `配置根/skills/<主题>-mq-usage/SKILL.md`,description 写清触发词(如「消息队列、发送、topic/subject、消费、MQ 辅助」),正文写定义、发送、消费步骤与示例。
175
- - 公共工具方法 → 路径如 `配置根/skills/<主题>-utils-usage/SKILL.md`,description 写清触发词(如「公共工具、加密、日志、外部服务、风控、用户、支付、工具方法」),正文写完整方法表、分类、示例。
176
- - 各 skill 的 **description** 必须写清「何时使用、触发词」,便于 Cursor 按问题匹配到对应技能;每条 skill 的 frontmatter **必须含** `sourceDoc`、`generatedAt`(同上)。
177
-
178
- **加详要点:**
179
-
180
- - 在**专题** rule/skill 中写「必要细节」:示例代码、完整方法表、步骤与注意点;总览/索引入口保持简短,指向详细文档或专题 rule/skill。
181
- - 若文档本身较短、主题单一,则按 3.1、3.2 生成单 rule、单 skill 即可;此时仍须遵守**分工**:Rule 写约束与约定,Skill 写知识与步骤。
182
-
183
- ---
184
-
185
- ## 步骤 4:若输入是 URL,保存原文到项目
186
-
187
- 若用户提供的是 **URL**,请将你拉取到的**原始正文**保存到项目内 `**配置根/stock-docs/<主题>.md`**(或项目约定的文档目录),以便后续引用。主题名可从文档标题或 URL 路径推断,并做合法文件名处理。
188
-
189
- ---
97
+ ## 完成后自检
190
98
 
191
- ## 约束与注意
192
-
193
- - 所有路径均相对于**配置根的父目录**。
194
- - **文档路径与链接(必守)**:一律按上文「文档路径与链接约定」执行。Rule 内链到文档 **仅允许** `../stock-docs/<文件名>.md`;Skill 内链到文档 **仅允许** `../../stock-docs/<文件名>.md`;docs-index 内链到文档 **仅允许** `stock-docs/<文件名>.md`。sourceDoc 仅允许 `配置根/stock-docs/<文件名>.md`。勿将 `**配置根/req-docs/`** 下的技术方案当作本技能产物的链出目标(链出**仅**指向 **stock-docs**)。
195
- - **版本管理**:每条 Rule 与每条 Skill 的 frontmatter 必须含 `sourceDoc`(`配置根/stock-docs/xxx.md`)、`generatedAt`(东八区北京时间 ISO 8601 +08:00),便于更新时索源与重新生成。
196
- - 生成前可先确认 `配置根/rules`、`配置根/skills`、`配置根/stock-docs` 目录存在,不存在则创建。
197
- - **完成后自检(路径必查)**:
198
- 1. 每个 `.mdc` 中指向源文档的链接 href 是否为 `**../stock-docs/<文件名>.md`**(不是 `../../stock-docs/` 或误链到 `req-docs/`)。
199
- 2. 每个 `配置根/skills/**/SKILL.md` 中指向源文档的链接 href 是否为 `**../../stock-docs/<文件名>.md**`(不是 `../stock-docs/` 或误链到 `req-docs/`)。
200
- 3. `docs-index.md` 中该文档行的链接 href 是否为 `**stock-docs/<文件名>.md**`(不是 `../stock-docs/` 或裸路径)。
201
- 4. 所有 Rule/Skill 的 frontmatter 中 `sourceDoc` 是否为 `**配置根/stock-docs/<文件名>.md**`。
202
- 5. 链接目标与项目约定的文档目录一致(若约定为 `配置根/stock-docs/`,则勿用 `**配置根/req-docs/**` 作为链接目标)。
203
- 完成后用一句话总结:已生成 Rules、Skills、文档索引及(若适用)配置根/stock-docs 下的原文备份;并确认「文档路径与链接约定」已遵守。
99
+ 1. `.Knowledge/topics/*.md` 与 `manifest-routing.topicPaths` 一一对应。
100
+ 2. `index.md` 主题表与 topics 文件集合一致,且每个主题都包含“关联文档(摘要)”。
101
+ 3. 每个 `taskToTopicRules[].matcherPath` 文件存在且其中 `id` 与 `matcherId` 一致。
102
+ 4. 未触碰配置根 `rules/skills`。
103
+ 5. 中大变更时是否按文件级契约拆子(子 A / B 路径互不重叠)。
104
+ 6. `manifest-routing.json` / `.Knowledge/index.md` 由主 agent 单点落盘,无子 agent 越权写入。
204
105
 
@@ -1,63 +1,59 @@
1
1
  ---
2
2
  name: f2s-ctx-rm
3
- description: 删除某 stock-docs 文档对应的 Rules、Skills 及索引中的相关描述;触发:删除项目上下文、f2s-ctx-rm
3
+ description: 删除某 stock-docs 文档对应的知识主题与索引映射;触发:删除项目上下文、f2s-ctx-rm
4
4
  ---
5
- > **「配置根」**:当前 agent 对应的 AI 工具配置目录(`flow2spec init` 写入,常见 **`.cursor/`**、**`.claude/`**、**`.codex/`**)。下文 **`配置根/...`** 指该目录下的相对路径。
6
5
 
7
- # 删除文档对应的项目上下文(Rules、Skills、docs-index、main 中的相关描述)
6
+ > 执行口径:仅维护 `.Knowledge`,不改配置根 `rules/skills`。
8
7
 
9
- 用户在对话中提供**一个参数**:与 **f2s-ctx-build** 技能索源一致,为 **`配置根/stock-docs/`** 下某文档的**本地路径**(如 `配置根/stock-docs/技术方案设计.md`)或**文档路径/文件名中可匹配的片段**(如 `技术方案设计.md`)。请按以下步骤执行,**直接删除**匹配到的产物并更新索引与 main。
8
+ ## 编排(主 / agent)
10
9
 
11
- ---
12
-
13
- ## 步骤 1:解析用户输入路径
14
-
15
- - 用户给出的是**本地路径**(如 `配置根/stock-docs/技术方案设计.md`)或**文件名/片段**(如 `技术方案设计.md`)。
16
- - 用于在 docs-index 中匹配「文档路径」列:若文档路径列是链接 `[配置根/stock-docs/xxx.md](stock-docs/xxx.md)` 或纯路径 `配置根/stock-docs/xxx.md`,则匹配路径或文件名包含用户输入即可。
17
-
18
- ---
19
-
20
- ## 步骤 2:读取 docs-index 并匹配行
10
+ - 两字段(`subAgent` / `switchAgentVerification`)语义以统一入口为唯一事实源:**Cursor/Claude** 读配置根 `rules/f2s-flow2spec-unified-entry.*`;**Codex** 读 `.codex/topics/f2s-flow2spec-unified-entry.md`(与上同源,`flow2spec init` 镜像)。不在此复述。
11
+ - 默认主 agent 全流程执行(单点删除拆子收益低)。
12
+ - 拆子阈值:仅当 `subAgent=true` 且**批量删除一次 ≥ 5 主题**时,才拆子执行删除与清引用。
13
+ - 主必控:范围确认、`fallbackTopic` 重指。
14
+ - 写权硬约束:`manifest-routing.json` 与 `.Knowledge/index.md` 恒由主 agent 落盘。
15
+ - 验证:默认落盘侧自验;本 SKILL 不绑定交叉校验。
21
16
 
22
- - **路径**:`配置根/docs-index.md`(相对于配置根的父目录)。
23
- - **操作**:读取该文件,解析表格;找到**文档路径**列与用户输入**匹配**的所有行(一行即对应一份文档及其 Rules、Skills)。
24
- - 若**没有匹配到任何行**,则回复用户:「未在 docs-index 中找到与“<用户输入>”匹配的文档行,无需删除。」并结束。
17
+ # 删除文档对应的项目上下文
25
18
 
26
- ---
27
-
28
- ## 步骤 3:删除匹配行中的 Rules、Skills 及空目录
29
-
30
- 对**每一个**匹配到的行:
19
+ ## 输入
31
20
 
32
- 1. **Rules 列**:取该列内容,按顿号、逗号或空格拆成多个路径;每个路径相对于配置根的父目录(如 `配置根/rules/<主题>-context.mdc`)。**删除**这些文件(若文件不存在则忽略)。
33
- 2. **Skills 列**:取该列内容,同样拆成多个路径(如 `配置根/skills/<主题>-context/SKILL.md`)。**删除**这些文件;删除后**必须**检查该 Skill 所在的父目录,若目录已空(无其它文件),**必须删除该空目录**,避免留下空文件夹。
21
+ - 一个参数:`.Knowledge/stock-docs/<文件名>.md` 路径,或可匹配文件名片段。
34
22
 
35
- ---
23
+ ## 执行步骤
36
24
 
37
- ## 步骤 4:从 docs-index 中移除匹配行并写回
25
+ 1. 读取 `.Knowledge/index.md`,匹配目标文档相关主题。
26
+ 2. 删除对应 `.Knowledge/topics/<topic>.md` 文件。
27
+ 3. 从 `.Knowledge/index.md` 移除匹配项并写回。
28
+ 4. 更新路由清单:
29
+ - `.Knowledge/manifest-routing.json`:移除失效 `topicPaths`、`taskToTopicRules`、`topicDependencies` 引用
30
+ - 对应 `matchers/<matcherId>.json`:移除失效规则或 `includeAny` 词条(与已删 `task`/`matcherId` 对齐)
31
+ - 若删除了 `fallbackTopic`,必须指定新的兜底主题
38
32
 
39
- - **路径**:`配置根/docs-index.md`。
40
- - **操作**:从该文件的表格中**删除**所有在步骤 2 中匹配到的行,保留表头与分隔行,其余行不变。若删除后表格仅剩表头与分隔行,可保留空表或仅保留表头,由你决定,保持格式合法即可。
41
- - **写回**:将修改后的内容**写回** `配置根/docs-index.md`,确保文件已更新。
33
+ ## 输出摘要(必须)
42
34
 
43
- ---
35
+ - 已删除的 topic 文件列表
36
+ - `.Knowledge/index.md` 删除的条目
37
+ - 路由清单调整的字段
38
+ - 未执行项(若有)
44
39
 
45
- ## 步骤 5:更新 main.mdc,删除与该文档相关的公共描述
40
+ ## 复杂场景示例
46
41
 
47
- - **路径**:`配置根/rules/main.mdc`。
48
- - **操作**:读取 main.mdc,根据被删除的文档类型做**有选择的删除**,不改变 main 的固定结构与其它无关模块:
42
+ 用户输入文件名片段“支付”,匹配到 2 个主题文档。
49
43
 
50
- 1. **若被删除的文档对应「功能模块」**(如某业务/功能模块):在 main 的 **「模块一览」** 表格中,删除与该文档/该模块对应的那一行。不要动「项目结构」「公共能力入口」等其它部分。
51
- 2. **若被删除的文档对应「公共模块说明」**:删除 main 中的 **「公共能力入口」** 整节(从 `## 公共能力入口` 到下一个 `##` 或到 `**全文索引**` 之前的所有内容)。若删除后希望保留小节标题但内容为空,可保留 `## 公共能力入口` 下一行写「(暂无)」等,由你决定,保持 main 可读即可。
44
+ - 先列出两个候选并要求用户确认删除范围,避免误删。
45
+ - 删除后同步清理路由清单失效引用;若删到了 `fallbackTopic`,必须先指定新的兜底主题再落盘。
46
+ - 最终摘要中写清:删除了哪些 topic、保留了哪些 topic、为什么。
52
47
 
53
- - 若 main.mdc 不存在,则跳过本步骤。
54
- - **写回**:将修改后的 main.mdc 写回 `配置根/rules/main.mdc`。
48
+ ## 约束
55
49
 
56
- ---
50
+ - 匹配多义时先询问用户确认。
51
+ - 仅删除命中主题,不影响其它主题。
52
+ - `manifest-routing.json` 与 `.Knowledge/index.md` 恒由主 agent 落盘(写权硬约束);范围确认与 `fallbackTopic` 重指不可下放给子 agent。
57
53
 
58
- ## 约束与注意
54
+ ## 完成后自检
59
55
 
60
- - 所有路径均相对于**配置根的父目录**。
61
- - 只删除 docs-index 中**匹配到的行**对应的 Rules、Skills,以及 main 中**与该文档相关的**模块一览行或公共能力入口节,不要删除其它文档对应的规则或 main 的其它结构。
62
- - **拿捏不定时向用户确认**:若对某文件、某行或 main 中某段描述是否属于本次要删除的范围**拿捏不定**(例如匹配到多行、路径歧义、main 中模块与文档对应关系不明确等),**不要自行决定**,应列出选项并**向用户提问**「是否删除 xxx?」待用户确认后再执行。
63
- - 完成后用一句话总结:已删除与“<用户输入>”匹配的文档行、对应 Rules/Skills、并已更新 docs-index 与 main.mdc 中的相关描述。
56
+ 1. 被删 topic 是否仍被 `manifest` 引用(必须为否)。
57
+ 2. `index` 是否仍存在失效主题路径(必须为否)。
58
+ 3. `fallbackTopic` 是否仍有效。
59
+ 4. 未在低于拆子阈值(< 5 主题)时强行拆子;manifest / index 由主单点落盘。