@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.
- package/README.md +77 -53
- package/cli.js +254 -14
- 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
- package/docs/Flow2Spec-/350/256/276/350/256/241/350/257/264/346/230/216.md +574 -0
- package/docs/Flow2Spec/344/275/277/347/224/250/350/257/264/346/230/216.md +116 -76
- package/docs/README-/344/275/223/347/263/273/344/270/216/345/216/237/347/220/206.md +85 -44
- package/docs/README-/345/221/275/344/273/244/350/257/264/346/230/216.md +548 -79
- 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
- package/lib/agents.js +15 -3
- package/lib/claudeSettingsAdapter.js +114 -0
- package/lib/codexAgentsAdapter.js +70 -0
- package/lib/flow2specConfig.js +229 -0
- package/lib/init.js +698 -25
- package/package.json +2 -2
- package/templates/AGENTS.md +98 -0
- package/templates/flow2spec.config.json +9 -0
- package/templates/hooks/f2s-config-inject.js +181 -0
- package/templates/knowledge/index.md +68 -0
- package/templates/knowledge/manifest-matchers.json +35 -0
- package/templates/knowledge/manifest-routing.json +45 -0
- package/templates/knowledge/matchers/m-doc-routing.json +11 -0
- package/templates/knowledge/matchers/m-f2s-config-precheck.json +15 -0
- package/templates/knowledge/matchers/m-implement-from-spec.json +10 -0
- 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
- package/templates/{template → knowledge/template}//347/273/210/347/250/277/346/250/241/347/211/210.md +5 -4
- package/templates/knowledge/topics/f2s-config-precheck.md +24 -0
- package/templates/knowledge/topics/f2s-fallback-triage.md +60 -0
- package/templates/knowledge/topics/f2s-implement-tech-design.md +21 -0
- package/templates/knowledge/topics/f2s-stock-docs-vs-req-docs.md +25 -0
- package/templates/rules/f2s-config-check.mdc +35 -0
- package/templates/rules/f2s-flow2spec-unified-entry.mdc +88 -0
- package/templates/rules/f2s-implement-tech-design.mdc +144 -0
- package/templates/rules/f2s-karpathy-guidelines.mdc +77 -0
- package/templates/rules/f2s-knowledge-preflight.mdc +70 -0
- package/templates/rules/f2s-stock-docs-vs-req-docs.mdc +16 -0
- package/templates/rules/f2s-task.mdc +202 -0
- package/templates/skills/f2s-ctx-build/SKILL.md +74 -173
- package/templates/skills/f2s-ctx-rm/SKILL.md +39 -43
- package/templates/skills/f2s-doc-add/SKILL.md +69 -106
- package/templates/skills/f2s-doc-arch/SKILL.md +20 -9
- package/templates/skills/f2s-doc-final/SKILL.md +29 -21
- package/templates/skills/f2s-doc-pdf/SKILL.md +17 -10
- package/templates/skills/f2s-git-commit/SKILL.md +189 -0
- package/templates/skills/f2s-karpathy-guidelines/SKILL.md +20 -0
- package/templates/skills/f2s-kb-feat/SKILL.md +72 -50
- package/templates/skills/f2s-kb-fix/SKILL.md +77 -46
- package/templates/skills/f2s-kb-merge/SKILL.md +9 -0
- package/templates/skills/f2s-kb-migrate/SKILL.md +356 -0
- package/templates/skills/f2s-kb-sync/SKILL.md +80 -59
- package/templates/skills/f2s-kb-upgrade/SKILL.md +225 -0
- package/templates/skills/f2s-req-backend/SKILL.md +35 -12
- package/templates/skills/f2s-req-clarify/SKILL.md +10 -2
- package/templates/skills/f2s-req-plan/SKILL.md +110 -0
- package/templates/skills/stock-docs-vs-req-docs/SKILL.md +10 -4
- package/docs/images//345/216/237/347/220/206/345/233/2761.png +0 -0
- package/docs/images//345/216/237/347/220/206/345/233/2762.png +0 -0
- package/docs/images//345/221/275/344/273/244/346/230/216/347/273/206/345/233/276.png +0 -0
- 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
- package/docs/images//347/256/200/350/277/260/345/233/276.png +0 -0
- package/templates/rules/implement-tech-design.mdc +0 -177
- 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
|
-
|
|
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
|
-
|
|
7
|
+
# 根据文档生成项目上下文(topics/index/路由清单)
|
|
7
8
|
|
|
8
|
-
|
|
9
|
+
## 编排(主 / 子 agent)
|
|
9
10
|
|
|
10
|
-
|
|
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
|
-
|
|
23
|
+
## 输入
|
|
13
24
|
|
|
14
|
-
|
|
15
|
-
|
|
25
|
+
- 接收一个参数:URL 或本地路径。
|
|
26
|
+
- 本地路径必须位于 `.Knowledge/stock-docs/`。
|
|
27
|
+
- 若传入 `.Knowledge/req-docs/`,提示用户先整理为 `stock-docs` 终稿后再执行。
|
|
16
28
|
|
|
17
|
-
|
|
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
|
-
-
|
|
27
|
-
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
60
|
+
- 更新 `.Knowledge/index.md` 的主题路由表。
|
|
61
|
+
- 保证“同主题单行”。
|
|
62
|
+
- 主题路由表需维护“关联文档(摘要)”列:每个主题补充 1-3 条关键文档**可点击 Markdown 链接**(格式:`[标题](相对路径)`,优先 `stock-docs/req-docs`)。
|
|
63
|
+
- 若某主题暂无可公开文档,写“无”或“待补充”,禁止留空导致歧义。
|
|
64
|
+
- 若新增/删除主题,索引同步调整,避免孤儿路径。
|
|
82
65
|
|
|
83
|
-
|
|
66
|
+
## 步骤 5:更新路由清单(按需)
|
|
84
67
|
|
|
85
|
-
-
|
|
86
|
-
-
|
|
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
|
-
|
|
76
|
+
## 路径与引用约束
|
|
89
77
|
|
|
90
|
-
-
|
|
91
|
-
-
|
|
92
|
-
-
|
|
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
|
-
|
|
82
|
+
## 输出摘要(必须)
|
|
106
83
|
|
|
107
|
-
-
|
|
108
|
-
-
|
|
109
|
-
|
|
110
|
-
|
|
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
|
-
|
|
89
|
+
## 复杂场景示例
|
|
120
90
|
|
|
121
|
-
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
195
|
-
|
|
196
|
-
-
|
|
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
|
|
3
|
+
description: 删除某 stock-docs 文档对应的知识主题与索引映射;触发:删除项目上下文、f2s-ctx-rm
|
|
4
4
|
---
|
|
5
|
-
> **「配置根」**:当前 agent 对应的 AI 工具配置目录(`flow2spec init` 写入,常见 **`.cursor/`**、**`.claude/`**、**`.codex/`**)。下文 **`配置根/...`** 指该目录下的相对路径。
|
|
6
5
|
|
|
7
|
-
|
|
6
|
+
> 执行口径:仅维护 `.Knowledge`,不改配置根 `rules/skills`。
|
|
8
7
|
|
|
9
|
-
|
|
8
|
+
## 编排(主 / 子 agent)
|
|
10
9
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
-
|
|
16
|
-
-
|
|
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
|
-
|
|
23
|
-
- **操作**:读取该文件,解析表格;找到**文档路径**列与用户输入**匹配**的所有行(一行即对应一份文档及其 Rules、Skills)。
|
|
24
|
-
- 若**没有匹配到任何行**,则回复用户:「未在 docs-index 中找到与“<用户输入>”匹配的文档行,无需删除。」并结束。
|
|
17
|
+
# 删除文档对应的项目上下文
|
|
25
18
|
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
## 步骤 3:删除匹配行中的 Rules、Skills 及空目录
|
|
29
|
-
|
|
30
|
-
对**每一个**匹配到的行:
|
|
19
|
+
## 输入
|
|
31
20
|
|
|
32
|
-
|
|
33
|
-
2. **Skills 列**:取该列内容,同样拆成多个路径(如 `配置根/skills/<主题>-context/SKILL.md`)。**删除**这些文件;删除后**必须**检查该 Skill 所在的父目录,若目录已空(无其它文件),**必须删除该空目录**,避免留下空文件夹。
|
|
21
|
+
- 一个参数:`.Knowledge/stock-docs/<文件名>.md` 路径,或可匹配文件名片段。
|
|
34
22
|
|
|
35
|
-
|
|
23
|
+
## 执行步骤
|
|
36
24
|
|
|
37
|
-
|
|
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
|
-
|
|
40
|
-
- **操作**:从该文件的表格中**删除**所有在步骤 2 中匹配到的行,保留表头与分隔行,其余行不变。若删除后表格仅剩表头与分隔行,可保留空表或仅保留表头,由你决定,保持格式合法即可。
|
|
41
|
-
- **写回**:将修改后的内容**写回** `配置根/docs-index.md`,确保文件已更新。
|
|
33
|
+
## 输出摘要(必须)
|
|
42
34
|
|
|
43
|
-
|
|
35
|
+
- 已删除的 topic 文件列表
|
|
36
|
+
- `.Knowledge/index.md` 删除的条目
|
|
37
|
+
- 路由清单调整的字段
|
|
38
|
+
- 未执行项(若有)
|
|
44
39
|
|
|
45
|
-
##
|
|
40
|
+
## 复杂场景示例
|
|
46
41
|
|
|
47
|
-
|
|
48
|
-
- **操作**:读取 main.mdc,根据被删除的文档类型做**有选择的删除**,不改变 main 的固定结构与其它无关模块:
|
|
42
|
+
用户输入文件名片段“支付”,匹配到 2 个主题文档。
|
|
49
43
|
|
|
50
|
-
|
|
51
|
-
|
|
44
|
+
- 先列出两个候选并要求用户确认删除范围,避免误删。
|
|
45
|
+
- 删除后同步清理路由清单失效引用;若删到了 `fallbackTopic`,必须先指定新的兜底主题再落盘。
|
|
46
|
+
- 最终摘要中写清:删除了哪些 topic、保留了哪些 topic、为什么。
|
|
52
47
|
|
|
53
|
-
|
|
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
|
-
|
|
62
|
-
|
|
63
|
-
|
|
56
|
+
1. 被删 topic 是否仍被 `manifest` 引用(必须为否)。
|
|
57
|
+
2. `index` 是否仍存在失效主题路径(必须为否)。
|
|
58
|
+
3. `fallbackTopic` 是否仍有效。
|
|
59
|
+
4. 未在低于拆子阈值(< 5 主题)时强行拆子;manifest / index 由主单点落盘。
|