specline 1.4.0 → 2.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +132 -125
- package/adapters/claude/deploy.json +12 -0
- package/adapters/claude/hooks/hooks.json +12 -0
- package/adapters/claude/hooks.json +12 -0
- package/adapters/claude/orchestration.md +17 -0
- package/adapters/codex/agent.toml.hbs +7 -0
- package/adapters/codex/deploy.json +12 -0
- package/adapters/codex/hooks.json +12 -0
- package/adapters/codex/orchestration.md +18 -0
- package/adapters/cursor/deploy.json +12 -0
- package/adapters/cursor/hooks.json +9 -0
- package/adapters/cursor/orchestration.md +17 -0
- package/adapters/opencode/deploy.json +12 -0
- package/adapters/opencode/orchestration.md +18 -0
- package/adapters/opencode/plugin.js +10 -0
- package/cli.mjs +161 -558
- package/core/agents/specline-backend-dev.yaml +45 -0
- package/core/agents/specline-code-reviewer.yaml +67 -0
- package/core/agents/specline-config-dev.yaml +50 -0
- package/core/agents/specline-config-reviewer.yaml +70 -0
- package/core/agents/specline-explore-assistant.yaml +79 -0
- package/core/agents/specline-frontend-dev.yaml +45 -0
- package/core/agents/specline-spec-creator.yaml +58 -0
- package/core/agents/specline-spec-reviewer.yaml +58 -0
- package/core/agents/specline-test-runner.yaml +62 -0
- package/core/agents/specline-test-writer.yaml +67 -0
- package/core/bootstrap/using-specline.md +14 -0
- package/core/gates/pipeline-gate-checks/a1-covers-ref.sh +125 -0
- package/core/gates/pipeline-gate-checks/a2-a3-reverse.sh +171 -0
- package/core/gates/pipeline-gate-checks/c1-exception.sh +71 -0
- package/core/gates/pipeline-gate-checks/c2-vague.sh +60 -0
- package/core/gates/pipeline-gate-checks/common.sh +68 -0
- package/core/gates/pipeline-gate-checks/d1-cycle.sh +149 -0
- package/core/gates/pipeline-gate-checks/d3-type-file.sh +260 -0
- package/core/gates/pipeline-gate.sh +1456 -0
- package/core/hooks/session-start.sh +259 -0
- package/core/skills/specline-apply-change/SKILL.md +197 -0
- package/core/skills/specline-archive-change/SKILL.md +173 -0
- package/core/skills/specline-explore/SKILL.md +504 -0
- package/core/skills/specline-knowledge/SKILL.md +539 -0
- package/core/skills/specline-pipeline/SKILL.md +604 -0
- package/core/skills/specline-pipeline/references/error-recovery-details.md +49 -0
- package/core/skills/specline-pipeline/references/event-log-spec.md +59 -0
- package/core/skills/specline-pipeline/references/pipeline-state-schema.md +87 -0
- package/core/skills/specline-pipeline/templates/subagent-prompts.md +397 -0
- package/core/skills/specline-propose/SKILL.md +186 -0
- package/core/skills/specline-quickfix/SKILL.md +289 -0
- package/core/templates/AGENTS.md.hbs +5 -0
- package/core/templates/specline/config.yaml +15 -0
- package/lib/deploy-claude.mjs +80 -0
- package/lib/deploy-codex.mjs +77 -0
- package/lib/deploy-opencode.mjs +93 -0
- package/lib/deploy.mjs +668 -0
- package/lib/gate.mjs +103 -0
- package/lib/hash.mjs +13 -0
- package/lib/hook.mjs +105 -0
- package/lib/init.mjs +122 -0
- package/lib/lock.mjs +99 -0
- package/lib/merge.mjs +188 -0
- package/lib/paths.mjs +40 -0
- package/lib/platforms.mjs +74 -0
- package/lib/render-agents.mjs +88 -0
- package/lib/render.mjs +126 -0
- package/lib/sync.mjs +253 -0
- package/lib/tty-select.mjs +89 -0
- package/package.json +4 -1
- package/templates/.cursor/README.md +18 -0
- package/templates/.cursor/agents/specline-code-reviewer.md +18 -2
- package/templates/.cursor/agents/specline-spec-creator.md +51 -2
- package/templates/.cursor/agents/specline-test-runner.md +10 -1
- package/templates/.cursor/agents/specline-test-writer.md +58 -7
- package/templates/.cursor/hooks/specline-pipeline-gate-checks/a2-a3-reverse.sh +1 -1
- package/templates/.cursor/hooks/specline-pipeline-gate.sh +118 -0
- package/templates/.cursor/skills/specline-pipeline/SKILL.md +10 -4
- package/templates/.cursor/skills/specline-propose/SKILL.md +3 -3
|
@@ -0,0 +1,539 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: specline-knowledge
|
|
3
|
+
description: >-
|
|
4
|
+
面向 AI 的项目知识库管理。检测 AGENTS.md 入口文件,追踪引用的知识文件链,
|
|
5
|
+
对比代码自行判断新鲜度,按需生成/更新六类知识文件(术语表/架构/约定/决策/参考/操作指南)。
|
|
6
|
+
Use when the user wants to check, generate, or update AI-oriented project knowledge files.
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# /specline-knowledge 知识库管理 Skill
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
## Layer 1: 速览与定位
|
|
14
|
+
|
|
15
|
+
**一句话定位**:管理面向 AI 的项目知识库——找入口、查新鲜度、按需生成六类知识文件。
|
|
16
|
+
|
|
17
|
+
**入口**:`/specline-knowledge [可选: 文件名]`
|
|
18
|
+
|
|
19
|
+
**你做**:
|
|
20
|
+
|
|
21
|
+
- 定位 AGENTS.md(或 CLAUDE.md / CURSOR.md)
|
|
22
|
+
- 解析入口文件中的知识文件引用链
|
|
23
|
+
- 读取源文件,自行对比判断每个知识文件的新鲜度
|
|
24
|
+
- 按用户选择生成/更新六类知识文件
|
|
25
|
+
|
|
26
|
+
**你不做**:
|
|
27
|
+
|
|
28
|
+
- 往知识文件中添加任何元数据(哈希、时间戳、front matter)
|
|
29
|
+
- 与 pipeline / quickfix 自动联动
|
|
30
|
+
- 修改项目源代码
|
|
31
|
+
|
|
32
|
+
**核心原则**:知识文件是 AI 的速览地图,不是完整文档。新鲜度由 AI 阅读理解判断,不由时间戳驱动。
|
|
33
|
+
|
|
34
|
+
---
|
|
35
|
+
|
|
36
|
+
## Layer 2: Happy Path
|
|
37
|
+
|
|
38
|
+
### Step 1: 定位入口文件
|
|
39
|
+
|
|
40
|
+
按优先级搜索项目根目录:
|
|
41
|
+
|
|
42
|
+
```text
|
|
43
|
+
AGENTS.md → CLAUDE.md → CURSOR.md → .cursor/rules/
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
**找到入口文件**:
|
|
47
|
+
|
|
48
|
+
- 读取内容,提取其中的 markdown 链接 `[text](path)` 作为知识文件引用链
|
|
49
|
+
- 进入 Step 2
|
|
50
|
+
|
|
51
|
+
**未找到任何入口文件**:
|
|
52
|
+
|
|
53
|
+
- 提示用户:「未找到 AGENTS.md 或其他入口文件。是否需要我创建一个?入口文件是知识库的导航地图,记录所有知识文件的位置。」
|
|
54
|
+
- 用户确认 → 使用下方 `agents-entry-template` 创建 AGENTS.md(只创建入口文件,不立即生成子知识文件)
|
|
55
|
+
- 用户拒绝 → 结束,提示可随时再次调用
|
|
56
|
+
|
|
57
|
+
**多个入口文件并存**:
|
|
58
|
+
|
|
59
|
+
- 列出所有存在的入口文件及其位置
|
|
60
|
+
- 询问用户以哪个为主入口
|
|
61
|
+
|
|
62
|
+
---
|
|
63
|
+
|
|
64
|
+
### Step 2: 解析知识文件
|
|
65
|
+
|
|
66
|
+
如果用户传入了文件名参数(如 `/specline-knowledge architecture.md`),只检查该文件。
|
|
67
|
+
|
|
68
|
+
否则,扫描入口文件中的引用链 + `docs/knowledge/` 目录:
|
|
69
|
+
|
|
70
|
+
**引用链解析**:
|
|
71
|
+
|
|
72
|
+
- 提取入口文件中所有 `[text](相对路径)` 格式的链接
|
|
73
|
+
- 过滤出指向知识文件类型的链接(`.md` 文件)
|
|
74
|
+
- 逐文件追踪引用(如果被引用的文件内部又有链接,递归追踪)
|
|
75
|
+
|
|
76
|
+
**目录扫描**:
|
|
77
|
+
|
|
78
|
+
- 检查 `docs/knowledge/` 目录下所有 `.md` 文件
|
|
79
|
+
- 如果文件存在但入口文件无引用 → 标记为「孤儿知识文件」
|
|
80
|
+
|
|
81
|
+
**展示给用户**:
|
|
82
|
+
|
|
83
|
+
```text
|
|
84
|
+
知识库状态:
|
|
85
|
+
✅ docs/knowledge/glossary.md — 新鲜
|
|
86
|
+
⚠️ docs/knowledge/architecture.md — 部分过时(src/auth/ 路径已变更)
|
|
87
|
+
⚠️ docs/knowledge/reference.md — 缺失(入口引用了但文件不存在)
|
|
88
|
+
|
|
89
|
+
孤儿文件(未被入口引用):
|
|
90
|
+
📄 docs/knowledge/old-notes.md — 存在但不在 AGENTS.md 中
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
---
|
|
94
|
+
|
|
95
|
+
### Step 3: 判断新鲜度
|
|
96
|
+
|
|
97
|
+
**不做任何额外的技术检测**——不加哈希、不加时间戳、不加 front matter。
|
|
98
|
+
|
|
99
|
+
做法:
|
|
100
|
+
|
|
101
|
+
1. 读取知识文件的内容
|
|
102
|
+
2. 找出文件中描述的核心模块/文件/概念
|
|
103
|
+
3. 直接读取对应的源代码文件
|
|
104
|
+
4. AI 自行对比:知识描述和实际代码还匹配吗?
|
|
105
|
+
|
|
106
|
+
**标记规则**:
|
|
107
|
+
|
|
108
|
+
| 标记 | 含义 | 触发条件 |
|
|
109
|
+
|------|------|---------|
|
|
110
|
+
| ✅ 新鲜 | 描述与代码一致 | 提到的模块存在、结构正确、接口匹配 |
|
|
111
|
+
| ⚠️ 部分过时 | 部分内容不准确 | 路径变了、函数重命名了、部分描述不对 |
|
|
112
|
+
| ❌ 严重过时 | 大部分不匹配 | 被引用的文件不存在、架构发生根本变化 |
|
|
113
|
+
|
|
114
|
+
**新鲜度判断提示词**(每次判断时在脑中执行):
|
|
115
|
+
|
|
116
|
+
> 这个知识文件中描述的模块路径、接口签名、概念定义,和我刚读完的源代码还一致吗?如果不一致,差异有多大?
|
|
117
|
+
|
|
118
|
+
---
|
|
119
|
+
|
|
120
|
+
### Step 4: 生成/更新知识文件
|
|
121
|
+
|
|
122
|
+
**展示可选列表**,让用户勾选需要的类型:
|
|
123
|
+
|
|
124
|
+
```text
|
|
125
|
+
可生成的知识文件:
|
|
126
|
+
[ ] GLOSSARY — 从代码中推断术语定义
|
|
127
|
+
[ ] ARCHITECTURE — 从目录结构和 import 关系分析
|
|
128
|
+
[ ] CONVENTIONS — 从代码风格和配置中提取约定
|
|
129
|
+
[ ] DECISIONS — 从已归档 change 的 design.md 提取
|
|
130
|
+
[ ] REFERENCE — 从导出函数、CLI 参数提取关键接口
|
|
131
|
+
[ ] HOWTOS — 从 scripts/ 和常见模式提取操作指南
|
|
132
|
+
|
|
133
|
+
默认路径:docs/knowledge/
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
**用户选择后**,按下方模板为每种类型生成内容。
|
|
137
|
+
|
|
138
|
+
**生成原则**:
|
|
139
|
+
- 知识文件是纯 Markdown,无 front matter / 元数据
|
|
140
|
+
- 只基于代码中真实存在的内容推断
|
|
141
|
+
- 不确定的地方加上 `<!-- UNVERIFIED: 描述 -->` 注释
|
|
142
|
+
- 每个关键陈述尽量暗示推断来源
|
|
143
|
+
- 内容控制在给 AI 速览的粒度,不写成完整文档
|
|
144
|
+
|
|
145
|
+
**更新策略**:
|
|
146
|
+
- 已有文件被判定为 ⚠️ 或 ❌ → 询问「保留手写版本 / 用 AI 重新生成 / 跳过」
|
|
147
|
+
- 目标文件不存在 → 直接生成
|
|
148
|
+
|
|
149
|
+
---
|
|
150
|
+
|
|
151
|
+
### Step 5: 更新入口文件
|
|
152
|
+
|
|
153
|
+
生成/更新知识文件后,检查 AGENTS.md 是否包含对应的引用:
|
|
154
|
+
|
|
155
|
+
- 无需引用的文件 → 追加引用到 AGENTS.md 的对应章节
|
|
156
|
+
- 已有引用 → 确认路径是否正确
|
|
157
|
+
|
|
158
|
+
```markdown
|
|
159
|
+
# AGENTS.md 中追加的格式:
|
|
160
|
+
|
|
161
|
+
## 系统架构
|
|
162
|
+
- [架构说明](docs/knowledge/architecture.md)
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
**冲突处理**:
|
|
166
|
+
|
|
167
|
+
| 场景 | 处理 |
|
|
168
|
+
|------|------|
|
|
169
|
+
| AGENTS.md 已有内容(非 Specline 创建) | 追加知识索引段落到末尾,不覆盖原有内容 |
|
|
170
|
+
| 知识文件存在但 AGENTS 无引用 | 提示「孤儿文件」,询问是否纳入管理 |
|
|
171
|
+
| 用户手动删了引用 | 不自动恢复,下次扫描时提示 |
|
|
172
|
+
|
|
173
|
+
---
|
|
174
|
+
|
|
175
|
+
## Layer 3: 六类知识文件详解
|
|
176
|
+
|
|
177
|
+
### 术语表 (GLOSSARY)
|
|
178
|
+
|
|
179
|
+
**文件**:`docs/knowledge/glossary.md`
|
|
180
|
+
|
|
181
|
+
**推断来源**:
|
|
182
|
+
- `type` / `interface` / `class` / `enum` 定义
|
|
183
|
+
- README 中的概念说明
|
|
184
|
+
- spec 文档中的术语
|
|
185
|
+
|
|
186
|
+
**生成内容**:
|
|
187
|
+
|
|
188
|
+
```markdown
|
|
189
|
+
# 术语表
|
|
190
|
+
|
|
191
|
+
<!-- 以下术语从项目代码中推断,基于类型定义和文档中出现的概念 -->
|
|
192
|
+
|
|
193
|
+
## <概念名>
|
|
194
|
+
- **是什么**:一句话定义
|
|
195
|
+
- **在哪里**:定义位置(文件:行号)
|
|
196
|
+
- **相关术语**:关联的其他概念
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
**示例**(以本项目为例):
|
|
200
|
+
|
|
201
|
+
```markdown
|
|
202
|
+
# 术语表
|
|
203
|
+
|
|
204
|
+
## Template
|
|
205
|
+
- **是什么**:Specline 的源文件目录(templates/.cursor/),npm 发布时打包
|
|
206
|
+
- **在哪里**:项目根目录 templates/
|
|
207
|
+
- **相关术语**:.cursor/(运行时副本)、sync(同步机制)
|
|
208
|
+
|
|
209
|
+
## Change
|
|
210
|
+
- **是什么**:Specline 中的一次变更单元,包含 proposal/design/tasks/specs
|
|
211
|
+
- **在哪里**:specline/changes/<name>/
|
|
212
|
+
- **相关术语**:Pipeline、Archive、Gate
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
---
|
|
216
|
+
|
|
217
|
+
### 系统架构 (ARCHITECTURE)
|
|
218
|
+
|
|
219
|
+
**文件**:`docs/knowledge/architecture.md`
|
|
220
|
+
|
|
221
|
+
**推断来源**:
|
|
222
|
+
- 顶级目录结构
|
|
223
|
+
- 模块间 import 关系
|
|
224
|
+
- package.json / requirements.txt / go.mod 依赖
|
|
225
|
+
- tsconfig / 项目配置中的模块映射
|
|
226
|
+
|
|
227
|
+
**生成内容**:
|
|
228
|
+
|
|
229
|
+
```markdown
|
|
230
|
+
# 系统架构
|
|
231
|
+
|
|
232
|
+
## 模块地图
|
|
233
|
+
|
|
234
|
+
### <模块路径> — <模块名>
|
|
235
|
+
<一句话职责描述>
|
|
236
|
+
- 入口: <入口文件>
|
|
237
|
+
- 依赖: <依赖的模块>
|
|
238
|
+
- 被依赖: <哪些模块依赖它>
|
|
239
|
+
|
|
240
|
+
## 依赖关系图
|
|
241
|
+
|
|
242
|
+
\`\`\`
|
|
243
|
+
<ASCII 依赖图>
|
|
244
|
+
\`\`\`
|
|
245
|
+
```
|
|
246
|
+
|
|
247
|
+
---
|
|
248
|
+
|
|
249
|
+
### 编码约定 (CONVENTIONS)
|
|
250
|
+
|
|
251
|
+
**文件**:`docs/knowledge/conventions.md`
|
|
252
|
+
|
|
253
|
+
**推断来源**:
|
|
254
|
+
- `.eslintrc` / `.prettierrc` / `pyproject.toml` 等配置
|
|
255
|
+
- 代码风格的一致性模式
|
|
256
|
+
- 已有的 `.cursor/rules/` 中的规则
|
|
257
|
+
- 错误处理模式、命名约定等
|
|
258
|
+
|
|
259
|
+
**生成内容**:
|
|
260
|
+
|
|
261
|
+
```markdown
|
|
262
|
+
# 编码约定
|
|
263
|
+
|
|
264
|
+
## 代码风格
|
|
265
|
+
- <从配置文件提取的规则>
|
|
266
|
+
|
|
267
|
+
## 命名约定
|
|
268
|
+
- <从代码模式推断的命名习惯>
|
|
269
|
+
|
|
270
|
+
## 错误处理
|
|
271
|
+
- <从代码推断的错误处理模式>
|
|
272
|
+
|
|
273
|
+
## 已有规则
|
|
274
|
+
- <引用 .cursor/rules/ 中的规则文件>
|
|
275
|
+
```
|
|
276
|
+
|
|
277
|
+
---
|
|
278
|
+
|
|
279
|
+
### 设计决策 (DECISIONS)
|
|
280
|
+
|
|
281
|
+
**文件**:`docs/knowledge/decisions/<YYYY-MM-DD-<title>>.md`
|
|
282
|
+
|
|
283
|
+
**推断来源**:
|
|
284
|
+
- `specline/changes/archive/` 中已归档 change 的 `design.md`
|
|
285
|
+
- 如果项目不使用 Specline → 跳过此类
|
|
286
|
+
|
|
287
|
+
**生成内容**:
|
|
288
|
+
|
|
289
|
+
```markdown
|
|
290
|
+
# <决策标题>
|
|
291
|
+
|
|
292
|
+
- **日期**:YYYY-MM-DD
|
|
293
|
+
- **状态**:已采纳
|
|
294
|
+
- **决策**:<我们做了什么选择>
|
|
295
|
+
- **理由**:<为什么这么选>
|
|
296
|
+
- **替代方案**:<考虑过但放弃的方案及其被放弃的原因>
|
|
297
|
+
- **来源**:<从哪个 change 的 design.md 提取>
|
|
298
|
+
```
|
|
299
|
+
|
|
300
|
+
---
|
|
301
|
+
|
|
302
|
+
### API 参考 (REFERENCE)
|
|
303
|
+
|
|
304
|
+
**文件**:`docs/knowledge/reference.md`
|
|
305
|
+
|
|
306
|
+
**推断来源**:
|
|
307
|
+
- 导出函数/类/接口的签名
|
|
308
|
+
- CLI 参数定义
|
|
309
|
+
- 配置文件 schema
|
|
310
|
+
- 关键常量和枚举
|
|
311
|
+
|
|
312
|
+
**生成内容**:
|
|
313
|
+
|
|
314
|
+
```markdown
|
|
315
|
+
# 关键接口参考
|
|
316
|
+
|
|
317
|
+
## <函数名 / 类名>
|
|
318
|
+
- **签名**:\`functionName(param: Type) => ReturnType\`
|
|
319
|
+
- **用途**:一句话描述
|
|
320
|
+
- **位置**:文件:行号
|
|
321
|
+
```
|
|
322
|
+
|
|
323
|
+
**示例**:
|
|
324
|
+
|
|
325
|
+
```markdown
|
|
326
|
+
# 关键接口参考
|
|
327
|
+
|
|
328
|
+
## specline gate
|
|
329
|
+
- **入口**:\`specline gate <action> [--change <name>]\`
|
|
330
|
+
- **支持动作**:list / bind / unbind / new / artifacts / check
|
|
331
|
+
- **位置**:core/gates/pipeline-gate.sh(通过 CLI 命令 `specline gate` 调用)
|
|
332
|
+
```
|
|
333
|
+
|
|
334
|
+
---
|
|
335
|
+
|
|
336
|
+
### 操作指南 (HOWTOS)
|
|
337
|
+
|
|
338
|
+
**文件**:`docs/knowledge/howtos/<主题>.md`
|
|
339
|
+
|
|
340
|
+
**推断来源**:
|
|
341
|
+
- `scripts/` 目录下的脚本
|
|
342
|
+
- package.json 中的 npm scripts
|
|
343
|
+
- README 中的操作说明
|
|
344
|
+
|
|
345
|
+
**生成内容**:
|
|
346
|
+
|
|
347
|
+
```markdown
|
|
348
|
+
# <操作名称>
|
|
349
|
+
|
|
350
|
+
## 背景
|
|
351
|
+
<什么时候需要做这个操作>
|
|
352
|
+
|
|
353
|
+
## 步骤
|
|
354
|
+
|
|
355
|
+
### 1. <步骤名称>
|
|
356
|
+
\`\`\`bash
|
|
357
|
+
<命令>
|
|
358
|
+
\`\`\`
|
|
359
|
+
<预期输出>
|
|
360
|
+
|
|
361
|
+
### 2. <步骤名称>
|
|
362
|
+
...
|
|
363
|
+
```
|
|
364
|
+
|
|
365
|
+
---
|
|
366
|
+
|
|
367
|
+
## Layer 4: 模板
|
|
368
|
+
|
|
369
|
+
以下模板在生成对应文件时使用。
|
|
370
|
+
|
|
371
|
+
### AGENTS.md 入口模板
|
|
372
|
+
|
|
373
|
+
```markdown
|
|
374
|
+
# Project Knowledge Index
|
|
375
|
+
|
|
376
|
+
> 本文件是面向 AI 的项目知识库导航地图。每个 AI agent 应首先阅读本文件以了解项目上下文。
|
|
377
|
+
> 由 specline-knowledge 管理。
|
|
378
|
+
|
|
379
|
+
## 系统架构
|
|
380
|
+
- [架构说明](docs/knowledge/architecture.md)
|
|
381
|
+
|
|
382
|
+
## 术语表
|
|
383
|
+
- [术语定义](docs/knowledge/glossary.md)
|
|
384
|
+
|
|
385
|
+
## 编码约定
|
|
386
|
+
- [代码约定](docs/knowledge/conventions.md)
|
|
387
|
+
|
|
388
|
+
## 设计决策
|
|
389
|
+
- [决策记录](docs/knowledge/decisions/)
|
|
390
|
+
|
|
391
|
+
## API 参考
|
|
392
|
+
- [关键接口](docs/knowledge/reference.md)
|
|
393
|
+
|
|
394
|
+
## 操作指南
|
|
395
|
+
- [操作指南](docs/knowledge/howtos/)
|
|
396
|
+
```
|
|
397
|
+
|
|
398
|
+
### 术语表模板
|
|
399
|
+
|
|
400
|
+
```markdown
|
|
401
|
+
# 术语表
|
|
402
|
+
|
|
403
|
+
<!-- 以下术语从项目代码中推断生成 -->
|
|
404
|
+
|
|
405
|
+
## <概念名>
|
|
406
|
+
- **是什么**:<一句话定义>
|
|
407
|
+
- **在哪定义**:<文件路径:行号>
|
|
408
|
+
- **相关术语**:<关联概念>
|
|
409
|
+
```
|
|
410
|
+
|
|
411
|
+
### 架构模板
|
|
412
|
+
|
|
413
|
+
```markdown
|
|
414
|
+
# 系统架构
|
|
415
|
+
|
|
416
|
+
<!-- 以下架构从目录结构和 import 关系推断 -->
|
|
417
|
+
|
|
418
|
+
## 项目结构
|
|
419
|
+
|
|
420
|
+
\`\`\`
|
|
421
|
+
<顶级目录树>
|
|
422
|
+
\`\`\`
|
|
423
|
+
|
|
424
|
+
## 模块地图
|
|
425
|
+
|
|
426
|
+
### <模块路径> — <模块名称>
|
|
427
|
+
<职责描述>
|
|
428
|
+
- **入口**:<文件>
|
|
429
|
+
- **依赖**:<列表>
|
|
430
|
+
```
|
|
431
|
+
|
|
432
|
+
### 约定模板
|
|
433
|
+
|
|
434
|
+
```markdown
|
|
435
|
+
# 编码约定
|
|
436
|
+
|
|
437
|
+
<!-- 以下约定从代码风格、配置文件和一致性模式中推断 -->
|
|
438
|
+
|
|
439
|
+
## 代码风格
|
|
440
|
+
- <规则>
|
|
441
|
+
|
|
442
|
+
## 命名约定
|
|
443
|
+
- <约定>
|
|
444
|
+
|
|
445
|
+
## 错误处理
|
|
446
|
+
- <模式>
|
|
447
|
+
```
|
|
448
|
+
|
|
449
|
+
### 决策记录模板
|
|
450
|
+
|
|
451
|
+
```markdown
|
|
452
|
+
# <决策标题>
|
|
453
|
+
|
|
454
|
+
- **日期**:YYYY-MM-DD
|
|
455
|
+
- **状态**:已采纳
|
|
456
|
+
- **决策**:<内容>
|
|
457
|
+
- **理由**:<原因>
|
|
458
|
+
- **替代方案**:<被放弃的方案及理由>
|
|
459
|
+
- **来源**:<源文档路径>
|
|
460
|
+
```
|
|
461
|
+
|
|
462
|
+
### 参考模板
|
|
463
|
+
|
|
464
|
+
```markdown
|
|
465
|
+
# 关键接口参考
|
|
466
|
+
|
|
467
|
+
<!-- 以下接口从代码导出中提取 -->
|
|
468
|
+
|
|
469
|
+
## <名称>
|
|
470
|
+
- **签名**:\`<signature>\`
|
|
471
|
+
- **用途**:<描述>
|
|
472
|
+
- **位置**:<文件:行号>
|
|
473
|
+
```
|
|
474
|
+
|
|
475
|
+
### 操作指南模板
|
|
476
|
+
|
|
477
|
+
```markdown
|
|
478
|
+
# <操作名称>
|
|
479
|
+
|
|
480
|
+
## 背景
|
|
481
|
+
<何时需要此操作>
|
|
482
|
+
|
|
483
|
+
## 步骤
|
|
484
|
+
1. \`\`\`bash
|
|
485
|
+
<命令>
|
|
486
|
+
\`\`\`
|
|
487
|
+
|
|
488
|
+
## 常见问题
|
|
489
|
+
- <问题及解决>
|
|
490
|
+
```
|
|
491
|
+
|
|
492
|
+
---
|
|
493
|
+
|
|
494
|
+
## Layer 5: 异常与边界
|
|
495
|
+
|
|
496
|
+
### 边界判断
|
|
497
|
+
|
|
498
|
+
| 情况 | 处理方式 |
|
|
499
|
+
|------|---------|
|
|
500
|
+
| 入口文件不存在且用户拒绝创建 | 结束,提示可随时再次调用 |
|
|
501
|
+
| 入口文件存在但无任何引用链接 | 提示「入口文件未包含任何知识文件引用」,询问是否扫描 `docs/knowledge/` 目录 |
|
|
502
|
+
| 知识文件全部新鲜 | 报告「所有知识文件均为最新 ✓」,结束 |
|
|
503
|
+
| 用户传入的文件参数不存在 | 提示「文件 X 不在入口文件的引用链中」,列出已引用的文件供选择 |
|
|
504
|
+
| AGENTS.md 已有非 specline-knowledge 内容 | 追加知识索引段落,不覆盖原有内容 |
|
|
505
|
+
| 知识文件存在但缺少入口引用 | 标记为孤儿文件,询问是否纳入管理 |
|
|
506
|
+
| 用户手写了知识文件(无 AI 生成标记) | AI 仍可判断新鲜度(读代码对比),更新时询问保留/替换/合并 |
|
|
507
|
+
| 用户项目不使用 Specline(无 changes/archive/) | DECISIONS 类型自动跳过,提示原因 |
|
|
508
|
+
| 项目无 package.json / 无显式模块结构 | ARCHITECTURE 类型降级为目录树 + 文件说明 |
|
|
509
|
+
| 项目代码量极小(< 10 源文件) | 提示「项目规模较小,知识文件可能收益有限」,仍允许生成 |
|
|
510
|
+
|
|
511
|
+
---
|
|
512
|
+
|
|
513
|
+
## Anti-Rationalization 表格
|
|
514
|
+
|
|
515
|
+
| 借口 | 现实 |
|
|
516
|
+
|------|------|
|
|
517
|
+
| 「AI 直接读代码就行,不需要知识文件」 | 代码能告诉你"是什么",但"为什么"和"全局关系"散落在各处。知识文件给 AI 一张速览地图,节省每次重新扫描的 token 和时间。 |
|
|
518
|
+
| 「新鲜度让用户自己判断吧」 | 用户很难记住「glossary.md 引用了哪几个源文件,那些文件改了没」。AI 并行读取对比是自然优势。 |
|
|
519
|
+
| 「ALL 知识文件都生成一遍,一步到位」 | 不同项目需要不同类型的知识。小型脚本可能只需要 GLOSSARY,大型 monorepo 需要全部六类。让用户选择,别替用户决定。 |
|
|
520
|
+
| 「判断新鲜度时保守一点,不确定就标记 ⚠️」 | 频繁的假过期警报会让用户不信任标记。只有确实发现不一致时才标记 ⚠️,无法判断就说「无法判断」。 |
|
|
521
|
+
| 「给知识文件加上时间戳/hash 更精确」 | 额外的元数据增加认知负担和维护成本。AI 阅读对比代码已经足够好,简单方案就是好方案。 |
|
|
522
|
+
| 「这个文件和 AGENTS.md 的链接断了,自动修」 | AGENTS.md 是用户的主入口文件。自动修改可能覆盖用户的手动编排意图。提示用户,让用户决定。 |
|
|
523
|
+
|
|
524
|
+
---
|
|
525
|
+
|
|
526
|
+
## Verification Checklist
|
|
527
|
+
|
|
528
|
+
技能实现完成后,自查:
|
|
529
|
+
|
|
530
|
+
- [ ] 入口文件检测优先级正确:AGENTS.md → CLAUDE.md → CURSOR.md → .cursor/rules/
|
|
531
|
+
- [ ] 能正确解析 markdown 链接 `[text](path)` 作为引用链
|
|
532
|
+
- [ ] 新鲜度判断仅靠 AI 阅读理解对比,不添加任何元数据
|
|
533
|
+
- [ ] 六类知识文件(GLOSSARY/ARCHITECTURE/CONVENTIONS/DECISIONS/REFERENCE/HOWTOS)全部支持
|
|
534
|
+
- [ ] 生成的知识文件为纯 Markdown,无 front matter / 元数据
|
|
535
|
+
- [ ] 不确定的内容标记了 `<!-- UNVERIFIED -->`
|
|
536
|
+
- [ ] 与 pipeline/quickfix 无联动,纯手动触发
|
|
537
|
+
- [ ] 支持按需检查(指定文件名)和全量扫描两种模式
|
|
538
|
+
- [ ] 冲突处理覆盖:已有入口文件、已有同名知识文件、孤儿文件
|
|
539
|
+
- [ ] 未覆盖/不适用的情况有降级策略(代码量极小、无模块结构等)
|