@vima_tech/telos 1.4.0 → 1.4.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/.claude/commands/add-skill.md +180 -0
- package/.claude/commands/codeword.md +166 -0
- package/.claude/commands/skill.md +172 -0
- package/.claude/commands/telos.md +299 -0
- package/CLAUDE.md +449 -0
- package/README.md +12 -2
- package/README.zh.md +100 -7
- package/bin/telos.js +175 -59
- package/package.json +4 -2
- package/scripts/auto-distill.sh +24 -11
- package/scripts/bridge-to-coder.sh +45 -10
- package/scripts/feedback-hook.sh +34 -15
- package/scripts/telos-install.sh +11 -5
- package/skills/_kernel/codewords.md +264 -0
- package/skills/_kernel/skill-extraction.md +194 -27
- package/skills/_template/skill.yaml +2 -0
- package/skills/req-mining/skill.yaml +2 -0
- package/templates/user-config.json +67 -0
|
@@ -0,0 +1,299 @@
|
|
|
1
|
+
# 启动自飞轮
|
|
2
|
+
|
|
3
|
+
执行以下步骤,激活飞轮模式:
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Step 0:检查待蒸馏标记
|
|
8
|
+
|
|
9
|
+
读取 `.distill-needed/` 目录。如果存在标记文件:
|
|
10
|
+
- 列出所有待蒸馏项目
|
|
11
|
+
- 询问用户是否现在处理,还是先处理新文档
|
|
12
|
+
- 若用户选择现在蒸馏:读取 `skills/_kernel/distillation.md`,对每个标记项目执行蒸馏协议(展示预览,单次 y/n 确认),完成后删除标记文件
|
|
13
|
+
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
## Step 1:选择 Skill
|
|
17
|
+
|
|
18
|
+
通过 Bash 工具扫描已安装的 Skill:
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
for f in skills/*/skill.yaml; do
|
|
22
|
+
name=$(basename $(dirname "$f"))
|
|
23
|
+
[[ "$name" == _* ]] && continue
|
|
24
|
+
version=$(grep '^version:' "$f" 2>/dev/null | awk '{print $2}')
|
|
25
|
+
desc=$(grep '^description:' "$f" 2>/dev/null | cut -d: -f2- | xargs)
|
|
26
|
+
echo "$name|$version|$desc"
|
|
27
|
+
done
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
**@Skill 路由检测(优先于菜单,跳过选择步骤):**
|
|
31
|
+
|
|
32
|
+
在进入菜单逻辑前,检查激活消息是否包含 `@{word}` 模式:
|
|
33
|
+
|
|
34
|
+
**特殊指令:**
|
|
35
|
+
- `@?` 或 `@list`:列出所有可用 Skill,不激活,停止等待。
|
|
36
|
+
|
|
37
|
+
**即时纠正检测(最高优先级):**
|
|
38
|
+
消息同时含 `@{name}` 和纠正信号词(纠正/漏掉/补充/修正/应该/下次/记住/wrong/missed)时:
|
|
39
|
+
- 不执行材料分析
|
|
40
|
+
- 读取 `skills/_kernel/distillation.md` 的 Mini-蒸馏协议章节
|
|
41
|
+
- 对指定 Skill 执行即时纠正写入
|
|
42
|
+
- 完成后恢复等待
|
|
43
|
+
|
|
44
|
+
**群聊路由(多 Skill):**
|
|
45
|
+
消息含一个或多个 `@{name}` 且无纠正信号词时:
|
|
46
|
+
|
|
47
|
+
```bash
|
|
48
|
+
# 检测 --parallel 标志
|
|
49
|
+
PARALLEL=false
|
|
50
|
+
echo "$MESSAGE" | grep -qE '\-\-parallel\b' && PARALLEL=true
|
|
51
|
+
|
|
52
|
+
# 提取所有 @token,展开 @all(忽略 --parallel 本身)
|
|
53
|
+
SKILLS=()
|
|
54
|
+
for token in $MESSAGE_TOKENS; do
|
|
55
|
+
[[ "$token" =~ ^@(.+)$ ]] || continue
|
|
56
|
+
name="${BASH_REMATCH[1]}"
|
|
57
|
+
[[ "$name" == "all" || "$name" == "?" || "$name" == "list" ]] && continue
|
|
58
|
+
[[ -f "skills/$name/skill.yaml" ]] && SKILLS+=("$name") || echo "❌ @$name 不存在"
|
|
59
|
+
done
|
|
60
|
+
if echo "$MESSAGE" | grep -q '@all'; then
|
|
61
|
+
for f in skills/*/skill.yaml; do
|
|
62
|
+
n=$(basename $(dirname "$f")); [[ "$n" == _* ]] && continue; SKILLS+=("$n")
|
|
63
|
+
done
|
|
64
|
+
fi
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
- **SKILLS 为空:报错并列出可用 Skill,停止。
|
|
68
|
+
- **SKILLS 有一个**:单 Skill 模式,`{skill}` 设为该名称,继续 Step 2。
|
|
69
|
+
- **SKILLS 有多个**:进入群聊模式,将 `{skills}` 设为列表、`{parallel}` 设为 `$PARALLEL`,继续 Step 2。
|
|
70
|
+
|
|
71
|
+
材料 = 去除所有 `@token` 和 `--parallel` 后剩余文本;材料非空则 Step 4 直接执行分析。
|
|
72
|
+
|
|
73
|
+
---
|
|
74
|
+
|
|
75
|
+
根据扫描结果执行不同分支(仅在未触发 @Skill 路由时执行):
|
|
76
|
+
|
|
77
|
+
**未安装任何 Skill:**
|
|
78
|
+
```
|
|
79
|
+
❌ 尚未安装任何 Skill。
|
|
80
|
+
|
|
81
|
+
安装方式:
|
|
82
|
+
telos install req-mining
|
|
83
|
+
telos available # 查看所有可用 Skill
|
|
84
|
+
/add-skill # 快速创建新 Skill
|
|
85
|
+
```
|
|
86
|
+
停止,等待用户操作。
|
|
87
|
+
|
|
88
|
+
**只有一个 Skill:**
|
|
89
|
+
直接激活,输出 `✓ 使用 Skill:{name} v{version}`,将 `{skill}` 设为该 Skill 名称,继续 Step 2。
|
|
90
|
+
|
|
91
|
+
**多个 Skill:**
|
|
92
|
+
输出选择菜单:
|
|
93
|
+
```
|
|
94
|
+
━━━ 选择 Skill ━━━
|
|
95
|
+
|
|
96
|
+
1. {name1} v{ver} — {desc}
|
|
97
|
+
2. {name2} v{ver} — {desc}
|
|
98
|
+
...
|
|
99
|
+
|
|
100
|
+
输入编号激活(或 @{name} 单选 / @a @b 群聊 / @all 全开 / 0 退出):
|
|
101
|
+
```
|
|
102
|
+
等待用户输入,将选择结果设为 `{skill}` 或 `{skills}`,继续 Step 2。
|
|
103
|
+
|
|
104
|
+
---
|
|
105
|
+
|
|
106
|
+
## Step 2:加载运行时上下文
|
|
107
|
+
|
|
108
|
+
**单 Skill 模式**(`{skill}` 为单一名称):
|
|
109
|
+
|
|
110
|
+
按顺序读取:
|
|
111
|
+
1. `skills/{skill}/memory/failure-patterns.md`(若存在则加载,常驻知识)
|
|
112
|
+
2. `skills/{skill}/skill.yaml`
|
|
113
|
+
3. `skills/{skill}/domain.md`
|
|
114
|
+
|
|
115
|
+
**群聊模式**(`{skills}` 为列表):
|
|
116
|
+
|
|
117
|
+
对 `{skills}` 中每个 Skill,并行加载:
|
|
118
|
+
1. `skills/{name}/memory/failure-patterns.md`
|
|
119
|
+
2. `skills/{name}/skill.yaml`
|
|
120
|
+
3. `skills/{name}/domain.md`
|
|
121
|
+
|
|
122
|
+
输出加载确认:
|
|
123
|
+
```
|
|
124
|
+
✓ 已加载 Skills:
|
|
125
|
+
• @{name1} v{ver} — {desc}
|
|
126
|
+
• @{name2} v{ver} — {desc}
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
---
|
|
130
|
+
|
|
131
|
+
## Step 3:显示飞轮状态
|
|
132
|
+
|
|
133
|
+
**单 Skill 模式:**
|
|
134
|
+
```
|
|
135
|
+
━━━ Telos 就绪 ━━━
|
|
136
|
+
Skill:{skill} v{version}
|
|
137
|
+
待蒸馏项目:{N} 个
|
|
138
|
+
活跃项目:
|
|
139
|
+
• {project_id} — 阶段:{状态} | 假设:{N} 项
|
|
140
|
+
|
|
141
|
+
提供材料开始 Ring 1 分析:
|
|
142
|
+
• 直接粘贴文本 / 文件路径 / URL
|
|
143
|
+
━━━━━━━━━━━━━━━━━━━━
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
**群聊模式:**
|
|
147
|
+
```
|
|
148
|
+
━━━ 群聊开启 ━━━
|
|
149
|
+
Skills:@{name1} @{name2} ...
|
|
150
|
+
模式:{隔离顺序(默认)| 真并行(--parallel)}
|
|
151
|
+
项目:{project_id}
|
|
152
|
+
待蒸馏项目:{N} 个
|
|
153
|
+
|
|
154
|
+
提供材料,所有 Skill 将独立分析后汇总:
|
|
155
|
+
• 直接粘贴文本 / 文件路径 / URL
|
|
156
|
+
• 追加 --parallel 开启真并行子任务
|
|
157
|
+
• @{name} 纠正内容 → 即时更新该 Skill 的 memory / domain
|
|
158
|
+
━━━━━━━━━━━━━━━━━━━━
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
---
|
|
162
|
+
|
|
163
|
+
## Step 4:分析材料
|
|
164
|
+
|
|
165
|
+
**单 Skill 模式:**
|
|
166
|
+
用户提供材料后,执行 `skills/{skill}/domain.md` 中的分析协议,输出分析结果。
|
|
167
|
+
|
|
168
|
+
---
|
|
169
|
+
|
|
170
|
+
**群聊模式 · 伪并行(默认,`{parallel}` = false):**
|
|
171
|
+
|
|
172
|
+
核心原则:**上下文隔离**——每个 Skill 分析时只看材料,不看其他 Skill 的输出。
|
|
173
|
+
|
|
174
|
+
执行步骤:
|
|
175
|
+
1. 在开始任何分析前,为所有 Skill 读取并缓存:
|
|
176
|
+
- `skills/{name}/memory/failure-patterns.md`
|
|
177
|
+
- `skills/{name}/domain.md`
|
|
178
|
+
2. 逐个切换视角分析:
|
|
179
|
+
- 激活 `@{name}` 视角,加载其 domain.md + memory
|
|
180
|
+
- **明确遮蔽**:此时不参考任何已产生的其他 Skill 输出
|
|
181
|
+
- 完成分析,将结果缓存到 `{output_name}`
|
|
182
|
+
- 切换到下一个 Skill,重复
|
|
183
|
+
3. 所有 Skill 分析完毕后,**一次性并排展示**所有缓存结果:
|
|
184
|
+
|
|
185
|
+
```
|
|
186
|
+
[@{name1}]
|
|
187
|
+
{分析结论}
|
|
188
|
+
假设:… 信息缺口:…
|
|
189
|
+
|
|
190
|
+
[@{name2}]
|
|
191
|
+
{分析结论}
|
|
192
|
+
假设:… 信息缺口:…
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
4. 展示综合视图(见下)。
|
|
196
|
+
|
|
197
|
+
---
|
|
198
|
+
|
|
199
|
+
**群聊模式 · 真并行(`{parallel}` = true,用户追加 `--parallel`):**
|
|
200
|
+
|
|
201
|
+
核心原则:**实例隔离**——通过 Agent 工具派生独立子 Agent,各自在完全独立的上下文中运行,互不可见。
|
|
202
|
+
|
|
203
|
+
执行步骤:
|
|
204
|
+
|
|
205
|
+
**4-P1. 为每个 Skill 构建自包含 prompt(派生前必须完成)**
|
|
206
|
+
|
|
207
|
+
为每个 `{name}` 读取文件并组装:
|
|
208
|
+
```
|
|
209
|
+
[子任务 prompt for @{name}]
|
|
210
|
+
|
|
211
|
+
你是 [{name}] Skill,专注领域:{description}。
|
|
212
|
+
任务:独立分析下方材料,只从你的专业视角出发,不参考任何其他视角。
|
|
213
|
+
|
|
214
|
+
## 你的分析协议
|
|
215
|
+
{skills/{name}/domain.md 的完整内容}
|
|
216
|
+
|
|
217
|
+
## 你的经验记忆
|
|
218
|
+
{skills/{name}/memory/failure-patterns.md 的内容,若不存在则省略}
|
|
219
|
+
|
|
220
|
+
## 待分析材料
|
|
221
|
+
{用户提供的材料}
|
|
222
|
+
|
|
223
|
+
## 输出格式要求
|
|
224
|
+
以 [@{name}] 开头,按你的 domain.md 协议输出分析结论。
|
|
225
|
+
最后注明:假设清单、信息缺口。
|
|
226
|
+
不得引用或预测其他 Skill 的观点。
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
**4-P2. 并发派生所有子 Agent**
|
|
230
|
+
|
|
231
|
+
通过 Agent 工具,对每个 `{name}` 发起调用(`run_in_background: true`):
|
|
232
|
+
```
|
|
233
|
+
Agent(
|
|
234
|
+
description: "@{name} 独立分析",
|
|
235
|
+
prompt: {上方构建的自包含 prompt},
|
|
236
|
+
run_in_background: true
|
|
237
|
+
)
|
|
238
|
+
```
|
|
239
|
+
所有派生调用在同一消息中发出,实现真正并发。
|
|
240
|
+
|
|
241
|
+
**4-P3. 等待并收集结果**
|
|
242
|
+
|
|
243
|
+
等待所有子 Agent 返回(后台任务完成时自动通知)。
|
|
244
|
+
收集每个子 Agent 的输出文本,按 Agent 名称索引存入 `{results}`。
|
|
245
|
+
|
|
246
|
+
**4-P4. 并排展示**
|
|
247
|
+
|
|
248
|
+
将所有结果按 `[@{name}]` 标头格式并排输出:
|
|
249
|
+
```
|
|
250
|
+
[@{name1}] ⚡ 真并行
|
|
251
|
+
{子 Agent 返回的分析结论}
|
|
252
|
+
|
|
253
|
+
[@{name2}] ⚡ 真并行
|
|
254
|
+
{子 Agent 返回的分析结论}
|
|
255
|
+
```
|
|
256
|
+
|
|
257
|
+
---
|
|
258
|
+
|
|
259
|
+
**综合视图(两种模式共用):**
|
|
260
|
+
|
|
261
|
+
```
|
|
262
|
+
━━━ 综合视图 ━━━
|
|
263
|
+
模式:{隔离顺序 | ⚡ 真并行} · Skills: @{a} @{b} ...
|
|
264
|
+
|
|
265
|
+
共识:{各 Skill 一致认定的结论}
|
|
266
|
+
分歧:
|
|
267
|
+
• @{name1} 认为… ↔ @{name2} 认为…
|
|
268
|
+
建议下一步:{面向用户的行动建议}
|
|
269
|
+
|
|
270
|
+
状态:━━━ [Ring 1] | Skills: @{a} @{b} | 项目: {id} | 假设: N项 ━━━
|
|
271
|
+
```
|
|
272
|
+
|
|
273
|
+
---
|
|
274
|
+
|
|
275
|
+
**群聊中的纠正:**
|
|
276
|
+
用户输入 `@{name} 纠正内容` 时,执行即时 Mini-蒸馏(见 `skills/_kernel/distillation.md`),
|
|
277
|
+
不中断群聊,纠正完成后继续等待下一轮材料。
|
|
278
|
+
|
|
279
|
+
---
|
|
280
|
+
|
|
281
|
+
**别名:** 用户输入 `tos`、`/tos`、`telos`、`开始 telos`、`开启 telos` 时,等同于运行本命令。
|
|
282
|
+
|
|
283
|
+
**@Skill 会话中路由:** 飞轮已激活后,用户任意时刻输入 `@{skill} ...` 触发 Step 1 的 @Skill 快速路由逻辑,切换当前 Skill 并处理后续材料,无需重新 `tos`。
|
|
284
|
+
|
|
285
|
+
**自然语言激活(无感模式):**
|
|
286
|
+
用户在任意时刻说 "启动 telos"、"开始分析"、"帮我看看这份文档"、"专家会诊" 等暗号,也等同于运行本命令。
|
|
287
|
+
|
|
288
|
+
**暗号提示:**
|
|
289
|
+
若 `codewords.hint_on_start: true`,首次进入会话时输出:
|
|
290
|
+
```
|
|
291
|
+
━━━ Telos 已就绪 ━━━
|
|
292
|
+
你可以像日常聊天一样使用我。
|
|
293
|
+
几个常用暗号:
|
|
294
|
+
• 说"记下来" — 保存刚才聊的技巧
|
|
295
|
+
• 说"看看家底" — 查看你的技能库
|
|
296
|
+
• 说"暗号大全" — 查看所有可用暗号
|
|
297
|
+
随时说"对暗号"查看完整列表。
|
|
298
|
+
━━━━━━━━━━━━━━━━━━━━
|
|
299
|
+
```
|