weflow-cli 1.8.1 → 1.9.0
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/CHANGELOG.md +359 -0
- package/OPERATIONS.md +79 -0
- package/README.en.md +9 -2
- package/README.md +12 -2
- package/bin/weflow-cli-electron.cjs +2 -0
- package/bin/weflow-cli.ts +648 -79
- package/dist/bin/weflow-cli.js +675 -78
- package/dist/bin/weflow-cli.js.map +1 -1
- package/dist/mcp-server/http.d.ts +14 -0
- package/dist/mcp-server/http.d.ts.map +1 -0
- package/dist/mcp-server/http.js +84 -0
- package/dist/mcp-server/http.js.map +1 -0
- package/dist/mcp-server/httpConfig.d.ts +50 -0
- package/dist/mcp-server/httpConfig.d.ts.map +1 -0
- package/dist/mcp-server/httpConfig.js +104 -0
- package/dist/mcp-server/httpConfig.js.map +1 -0
- package/dist/mcp-server/index.d.ts +13 -1
- package/dist/mcp-server/index.d.ts.map +1 -1
- package/dist/mcp-server/index.js +39 -373
- package/dist/mcp-server/index.js.map +1 -1
- package/dist/src/panel/server.d.ts.map +1 -1
- package/dist/src/panel/server.js +26 -1
- package/dist/src/panel/server.js.map +1 -1
- package/dist/src/services/assistantEval.d.ts +69 -0
- package/dist/src/services/assistantEval.d.ts.map +1 -1
- package/dist/src/services/assistantEval.js +270 -8
- package/dist/src/services/assistantEval.js.map +1 -1
- package/dist/src/services/assistantScenes.d.ts +81 -0
- package/dist/src/services/assistantScenes.d.ts.map +1 -0
- package/dist/src/services/assistantScenes.js +322 -0
- package/dist/src/services/assistantScenes.js.map +1 -0
- package/dist/src/services/assistantService.d.ts +14 -4
- package/dist/src/services/assistantService.d.ts.map +1 -1
- package/dist/src/services/assistantService.js +82 -6
- package/dist/src/services/assistantService.js.map +1 -1
- package/dist/src/services/assistantSkills.d.ts +94 -0
- package/dist/src/services/assistantSkills.d.ts.map +1 -0
- package/dist/src/services/assistantSkills.js +330 -0
- package/dist/src/services/assistantSkills.js.map +1 -0
- package/dist/src/services/assistantTools.d.ts +7 -0
- package/dist/src/services/assistantTools.d.ts.map +1 -1
- package/dist/src/services/assistantTools.js +770 -61
- package/dist/src/services/assistantTools.js.map +1 -1
- package/dist/src/services/assistantTrace.d.ts +4 -0
- package/dist/src/services/assistantTrace.d.ts.map +1 -1
- package/dist/src/services/assistantTrace.js +9 -0
- package/dist/src/services/assistantTrace.js.map +1 -1
- package/dist/src/services/configService.d.ts +7 -0
- package/dist/src/services/configService.d.ts.map +1 -1
- package/dist/src/services/configService.js +4 -2
- package/dist/src/services/configService.js.map +1 -1
- package/dist/src/services/outboundSend.d.ts +53 -0
- package/dist/src/services/outboundSend.d.ts.map +1 -0
- package/dist/src/services/outboundSend.js +90 -0
- package/dist/src/services/outboundSend.js.map +1 -0
- package/dist/src/services/pythonBridge.d.ts.map +1 -1
- package/dist/src/services/pythonBridge.js +1 -0
- package/dist/src/services/pythonBridge.js.map +1 -1
- package/dist/src/utils/python.js +2 -2
- package/dist/src/utils/python.js.map +1 -1
- package/docs/BRANCHES.md +37 -0
- package/docs/DECISIONS.md +350 -0
- package/docs/EXTENDING.md +29 -3
- package/docs/MCP.md +56 -2
- package/docs/PROJECT_STATE.md +121 -9
- package/mcp-server/http.ts +108 -0
- package/mcp-server/httpConfig.ts +126 -0
- package/mcp-server/index.ts +344 -681
- package/package.json +1 -1
- package/resources/panel/ball-position.cjs +48 -2
- package/resources/panel/index.html +6 -4
- package/resources/panel/main.cjs +137 -5
- package/resources/panel/mascot-base.png +0 -0
- package/resources/panel/mascot-iris.png +0 -0
- package/resources/panel/mascot-peek.png +0 -0
- package/resources/panel/panel.css +107 -63
- package/resources/panel/preload.cjs +26 -0
- package/resources/panel/renderer.js +167 -10
- package/scripts/_utils.py +47 -1
- package/scripts/backfill_articles.py +202 -21
- package/scripts/biz_daily.py +8 -31
- package/scripts/bonds.py +331 -0
- package/scripts/chat_notes.py +551 -470
- package/scripts/chat_stats.py +8 -7
- package/scripts/compile_wiki.py +24 -2
- package/scripts/export_chat_html.py +3 -1
- package/scripts/mcp_bridge.py +6 -7
- package/scripts/wechat_voice.py +9 -0
- package/scripts/wiki_lint.py +30 -7
- package/src/panel/server.ts +25 -1
- package/src/services/assistantEval.ts +323 -12
- package/src/services/assistantScenes.ts +342 -0
- package/src/services/assistantService.ts +81 -6
- package/src/services/assistantSkills.ts +364 -0
- package/src/services/assistantTools.ts +738 -59
- package/src/services/assistantTrace.ts +9 -0
- package/src/services/configService.ts +412 -403
- package/src/services/outboundSend.ts +126 -0
- package/src/services/pythonBridge.ts +1 -0
- package/src/utils/python.ts +2 -2
|
@@ -0,0 +1,330 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 助手能用的技能包(Skills)—— 发现、解析、四态降级、正文读取。
|
|
3
|
+
*
|
|
4
|
+
* **技能是内容,不是代码**:本模块只把 `SKILL.md` 当**资料**交给模型(给路径、给正文),
|
|
5
|
+
* 不执行其中任何东西、不给模型增加任何新工具。这是 P4「插件/适配器机制」验收标准的
|
|
6
|
+
* 保守落地:「第三方扩展无法直接读取配置、数据库或任意文件;扩展能被单独禁用」。
|
|
7
|
+
* 想给助手加能力要走 `docs/EXTENDING.md` 的 Recipe A(加工具),不是往技能里塞脚本。
|
|
8
|
+
*
|
|
9
|
+
* 口径来源:技能格式与 Anthropic Agent Skills 一致(`name` + `description` frontmatter),
|
|
10
|
+
* 我们只**读**它,不发明新格式 —— 这样用户已经装在 `~/.claude/skills` 下的技能直接可用。
|
|
11
|
+
*
|
|
12
|
+
* 三个实测得来的硬约束(别按直觉改):
|
|
13
|
+
* 1. **只解析文件开头那一段 `---`**。实测用户的技能正文里也有 `categories:`/`created:`/
|
|
14
|
+
* `tags:` 这些行(`memory-organizer`、`obsidian-wiki-workflow`),扫全文会把它们当字段读进来。
|
|
15
|
+
* 2. **必须处理 YAML 块标量**。真实技能里 `description: >-` / `description: |` 后面跟着缩进的
|
|
16
|
+
* 多行正文,不处理的话 description 就变成 `>-` 两个字。
|
|
17
|
+
* 3. **ID 规范要比 Anthropic 宽**。他们的 `^[a-z0-9]+(-[a-z0-9]+)*$` 会把用户自己的
|
|
18
|
+
* `clz_docx_to_mp`、`agent-dialog_management`、`ylx_onehub_usage_monitor` 判为不合规 ——
|
|
19
|
+
* 那些是真实在用的技能,所以不合规只**警告**,不丢弃。
|
|
20
|
+
*/
|
|
21
|
+
import { existsSync, readdirSync, readFileSync, statSync } from 'fs';
|
|
22
|
+
import { join } from 'path';
|
|
23
|
+
import { homedir } from 'os';
|
|
24
|
+
import { configService } from './configService.js';
|
|
25
|
+
import { expandHomePath } from '../utils/pathUtils.js';
|
|
26
|
+
/** 技能正文一次最多交给模型多少字(`read_skill`):足够长,又不至于把上下文吃掉 */
|
|
27
|
+
export const SKILL_BODY_LIMIT = 8192;
|
|
28
|
+
/**
|
|
29
|
+
* 我们接受的 ID:小写字母、数字、点、下划线、连字符 —— 比 Anthropic 规范宽(见文件头第 3 条)。
|
|
30
|
+
*/
|
|
31
|
+
const ID_RE = /^[a-z0-9][a-z0-9._-]*$/;
|
|
32
|
+
/**
|
|
33
|
+
* Anthropic Agent Skills 的严格规范。**只用来说话,不用来拒绝**:
|
|
34
|
+
* 不合规的 ID 照样能用(用户的 `clz_docx_to_mp` 就在用),但 `skill check` 要讲出来,
|
|
35
|
+
* 免得他以为这些能直接搬去别的 Agent 用。
|
|
36
|
+
*/
|
|
37
|
+
const SPEC_ID_RE = /^[a-z0-9]+(-[a-z0-9]+)*$/;
|
|
38
|
+
// ---------- 根目录 ----------
|
|
39
|
+
/**
|
|
40
|
+
* 技能根目录清单。优先级:环境变量 > 配置键 > 默认两个根。
|
|
41
|
+
*
|
|
42
|
+
* 默认两个根是有意的:`~/.claude/skills` 让用户**已有的**技能立刻可用,
|
|
43
|
+
* `~/.weflow-cli/skills` 是本项目自己的落脚点(现在多半是空的)。
|
|
44
|
+
*
|
|
45
|
+
* 注意 `configService.get()` 只展开**开头**那个 `~`,逗号分隔的清单里第二个 `~` 它不管,
|
|
46
|
+
* 所以这里逐段自己调 `expandHomePath`(踩过:不展开会让第二个根静默不存在)。
|
|
47
|
+
*/
|
|
48
|
+
export function skillRoots() {
|
|
49
|
+
const env = String(process.env.WEFLOW_ASSISTANT_SKILL_DIRS || '').trim();
|
|
50
|
+
const raw = env || String(configService.get('skillDirs') || '').trim();
|
|
51
|
+
if (raw) {
|
|
52
|
+
return raw.split(/[,;]/)
|
|
53
|
+
.map(part => expandHomePath(part.trim().replace(/^["']|["']$/g, '')))
|
|
54
|
+
.filter(Boolean);
|
|
55
|
+
}
|
|
56
|
+
return [join(homedir(), '.claude', 'skills'), join(homedir(), '.weflow-cli', 'skills')];
|
|
57
|
+
}
|
|
58
|
+
/** 配置键 `skillDisabled`:用户侧的禁用名单(技能自己也能声明 `enabled: false`) */
|
|
59
|
+
export function disabledIds() {
|
|
60
|
+
const raw = String(configService.get('skillDisabled') || '').trim();
|
|
61
|
+
if (!raw)
|
|
62
|
+
return [];
|
|
63
|
+
return raw.split(/[,;]/).map(part => part.trim()).filter(Boolean);
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* 只解析开头那一段 `---`。返回 null 表示**这一段不成立**(不是"没有字段")——
|
|
67
|
+
* 调用方要把这种情况报出来,不要当成"这个技能没写描述"。
|
|
68
|
+
*/
|
|
69
|
+
export function parseFrontmatter(text) {
|
|
70
|
+
const t = String(text || '').replace(/^/, '');
|
|
71
|
+
const lines = t.split(/\r?\n/);
|
|
72
|
+
if (!/^---[ \t]*$/.test(lines[0] || ''))
|
|
73
|
+
return null;
|
|
74
|
+
let end = -1;
|
|
75
|
+
for (let i = 1; i < lines.length; i += 1) {
|
|
76
|
+
if (/^---[ \t]*$/.test(lines[i])) {
|
|
77
|
+
end = i;
|
|
78
|
+
break;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
if (end === -1)
|
|
82
|
+
return null; // 开头有 --- 却没有收尾:残缺,宁可报错也不猜
|
|
83
|
+
const fields = {};
|
|
84
|
+
const lists = {};
|
|
85
|
+
let blockKey = null; // 正在收的块标量(`description: >-` 这类)
|
|
86
|
+
let blockMode = 'folded';
|
|
87
|
+
let blockLines = [];
|
|
88
|
+
let listKey = null; // 正在收的列表(`triggers:` 这类)
|
|
89
|
+
const closeBlock = () => {
|
|
90
|
+
if (!blockKey)
|
|
91
|
+
return;
|
|
92
|
+
// `>` 折行(空格连接),`|` 保留换行。`-` 后缀(`>-`/`|-`)表示去掉末尾换行,这里一并处理。
|
|
93
|
+
fields[blockKey] = (blockMode === 'literal' ? blockLines.join('\n') : blockLines.join(' ')).trim();
|
|
94
|
+
blockKey = null;
|
|
95
|
+
blockLines = [];
|
|
96
|
+
};
|
|
97
|
+
const closeList = () => {
|
|
98
|
+
if (listKey && lists[listKey]?.length === 0)
|
|
99
|
+
lists[listKey] = [];
|
|
100
|
+
listKey = null;
|
|
101
|
+
};
|
|
102
|
+
for (let i = 1; i < end; i += 1) {
|
|
103
|
+
const raw = lines[i];
|
|
104
|
+
const line = raw.replace(/\s+$/, '');
|
|
105
|
+
if (!line.trim() || /^\s*#/.test(line))
|
|
106
|
+
continue;
|
|
107
|
+
const indented = /^\s/.test(line);
|
|
108
|
+
if (indented) {
|
|
109
|
+
const item = /^\s+-\s*(.*)$/.exec(line);
|
|
110
|
+
if (item && listKey) {
|
|
111
|
+
lists[listKey].push(stripQuotes(item[1].trim()));
|
|
112
|
+
continue;
|
|
113
|
+
}
|
|
114
|
+
if (blockKey) {
|
|
115
|
+
blockLines.push(line.replace(/^\s+/, ''));
|
|
116
|
+
continue;
|
|
117
|
+
}
|
|
118
|
+
continue; // 嵌套映射(如 `metadata:` 下缩进的 `type: skill`)——只认扁平的,嵌套的忽略
|
|
119
|
+
}
|
|
120
|
+
closeBlock();
|
|
121
|
+
closeList();
|
|
122
|
+
const m = /^([A-Za-z][A-Za-z0-9_.-]*)\s*:\s*(.*)$/.exec(line);
|
|
123
|
+
if (!m)
|
|
124
|
+
continue;
|
|
125
|
+
const key = m[1];
|
|
126
|
+
const value = m[2].trim();
|
|
127
|
+
if (/^[|>][-+]?$/.test(value)) {
|
|
128
|
+
blockKey = key;
|
|
129
|
+
blockMode = value.startsWith('|') ? 'literal' : 'folded';
|
|
130
|
+
continue;
|
|
131
|
+
}
|
|
132
|
+
if (value === '') {
|
|
133
|
+
// 空值:后面若是缩进的 `- ` 就是列表,否则就是个空字段
|
|
134
|
+
lists[key] = lists[key] || [];
|
|
135
|
+
listKey = key;
|
|
136
|
+
fields[key] = '';
|
|
137
|
+
continue;
|
|
138
|
+
}
|
|
139
|
+
fields[key] = stripQuotes(value);
|
|
140
|
+
}
|
|
141
|
+
closeBlock();
|
|
142
|
+
closeList();
|
|
143
|
+
return { fields, lists };
|
|
144
|
+
}
|
|
145
|
+
function stripQuotes(value) {
|
|
146
|
+
return String(value || '').replace(/^["']|["']$/g, '');
|
|
147
|
+
}
|
|
148
|
+
// ---------- 扫描 ----------
|
|
149
|
+
export function scanSkills(roots = skillRoots()) {
|
|
150
|
+
const skills = [];
|
|
151
|
+
const unreadable = [];
|
|
152
|
+
const conflicts = [];
|
|
153
|
+
const missingRoots = [];
|
|
154
|
+
const seen = new Map();
|
|
155
|
+
for (const root of roots) {
|
|
156
|
+
let entries = [];
|
|
157
|
+
try {
|
|
158
|
+
if (!existsSync(root) || !statSync(root).isDirectory()) {
|
|
159
|
+
missingRoots.push(root);
|
|
160
|
+
continue;
|
|
161
|
+
}
|
|
162
|
+
entries = readdirSync(root);
|
|
163
|
+
}
|
|
164
|
+
catch {
|
|
165
|
+
missingRoots.push(root);
|
|
166
|
+
continue;
|
|
167
|
+
}
|
|
168
|
+
for (const entry of entries) {
|
|
169
|
+
const file = join(root, entry, 'SKILL.md');
|
|
170
|
+
const dir = join(root, entry);
|
|
171
|
+
// 只认 `<root>/<id>/SKILL.md`。**符号链接是跟的**(有意):在 git 仓库里开发技能、
|
|
172
|
+
// 再 `ln -s` 到技能根目录是常见做法,拒掉会让人觉得"我的技能怎么不见了"。
|
|
173
|
+
// 软链是用户自己放的(扩展造不出来),而 `read_skill` 只可能读到名字叫 `SKILL.md`
|
|
174
|
+
// 的文件,所以这条不是一个可被扩展利用的越界口子。
|
|
175
|
+
try {
|
|
176
|
+
if (!statSync(dir).isDirectory())
|
|
177
|
+
continue;
|
|
178
|
+
if (!existsSync(file) || !statSync(file).isFile())
|
|
179
|
+
continue;
|
|
180
|
+
}
|
|
181
|
+
catch {
|
|
182
|
+
continue;
|
|
183
|
+
}
|
|
184
|
+
let text = '';
|
|
185
|
+
try {
|
|
186
|
+
text = readFileSync(file, 'utf8');
|
|
187
|
+
}
|
|
188
|
+
catch (error) {
|
|
189
|
+
unreadable.push({ file, reason: `读不了:${error.message}` });
|
|
190
|
+
continue;
|
|
191
|
+
}
|
|
192
|
+
const fm = parseFrontmatter(text);
|
|
193
|
+
if (!fm) {
|
|
194
|
+
unreadable.push({ file, reason: '开头的 --- frontmatter 段缺失或不闭合' });
|
|
195
|
+
continue;
|
|
196
|
+
}
|
|
197
|
+
const notes = [];
|
|
198
|
+
const id = entry;
|
|
199
|
+
if (!ID_RE.test(id)) {
|
|
200
|
+
// 连我们这套宽规则都不满足(大写、空格、中文…):仍然保留,但要说出来
|
|
201
|
+
notes.push('ID 含非规范字符(不是小写字母/数字/点/下划线/连字符),本机可用,但别的 Agent 可能不认');
|
|
202
|
+
}
|
|
203
|
+
else if (!SPEC_ID_RE.test(id)) {
|
|
204
|
+
// 实测用户有 3 个这种 ID(clz_docx_to_mp 等)。可用,但搬去别的 Agent 会不合规。
|
|
205
|
+
notes.push('ID 不符合 Anthropic Agent Skills 规范(只允许小写字母/数字/单个连字符),本机可用,搬去别的 Agent 可能不认');
|
|
206
|
+
}
|
|
207
|
+
const description = String(fm.fields.description || '').trim();
|
|
208
|
+
if (!description)
|
|
209
|
+
notes.push('frontmatter 里没有 description —— 模型只能靠它判断这个技能是干什么的');
|
|
210
|
+
if (seen.has(id)) {
|
|
211
|
+
conflicts.push({ id, winner: seen.get(id), loser: file });
|
|
212
|
+
continue; // 靠前的根胜出;后一个只报冲突,不覆盖
|
|
213
|
+
}
|
|
214
|
+
seen.set(id, file);
|
|
215
|
+
skills.push({
|
|
216
|
+
id,
|
|
217
|
+
name: String(fm.fields.name || id).trim() || id,
|
|
218
|
+
description,
|
|
219
|
+
version: String(fm.fields.version || '').trim(),
|
|
220
|
+
file,
|
|
221
|
+
root,
|
|
222
|
+
selfDisabled: String(fm.fields.enabled || '').trim().toLowerCase() === 'false',
|
|
223
|
+
triggers: fm.lists.triggers || [],
|
|
224
|
+
notes,
|
|
225
|
+
});
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
skills.sort((a, b) => a.id.localeCompare(b.id));
|
|
229
|
+
return { skills, unreadable, conflicts, missingRoots };
|
|
230
|
+
}
|
|
231
|
+
export function findSkill(id, scan = scanSkills()) {
|
|
232
|
+
return scan.skills.find(s => s.id === id);
|
|
233
|
+
}
|
|
234
|
+
// ---------- 四态降级 ----------
|
|
235
|
+
export function skillState(skill, disabled = disabledIds()) {
|
|
236
|
+
if (skill.selfDisabled || disabled.includes(skill.id))
|
|
237
|
+
return 'disabled';
|
|
238
|
+
return 'ready';
|
|
239
|
+
}
|
|
240
|
+
/**
|
|
241
|
+
* 把技能渲染成给模型的一句话。四态,每一态都**说实话**:
|
|
242
|
+
* 缺文件不阻断(照 WeChatBridge 的做法:继续做,但要求模型在回答里说明这块没做)。
|
|
243
|
+
*/
|
|
244
|
+
export function describeSkill(id, scan = scanSkills()) {
|
|
245
|
+
const skill = findSkill(id, scan);
|
|
246
|
+
if (!skill) {
|
|
247
|
+
return {
|
|
248
|
+
state: 'missing',
|
|
249
|
+
line: `技能「${id}」不可用(本机没有这个技能),请直接完成,并在回答里说明哪部分没做。`,
|
|
250
|
+
};
|
|
251
|
+
}
|
|
252
|
+
const state = skillState(skill);
|
|
253
|
+
if (state === 'disabled') {
|
|
254
|
+
return { state, line: `技能「${skill.name}」已被用户禁用,不要使用它。` };
|
|
255
|
+
}
|
|
256
|
+
return {
|
|
257
|
+
state,
|
|
258
|
+
line: `技能「${skill.name}」:说明文件在 \`${skill.file}\`,请先读它再严格按其执行。`,
|
|
259
|
+
};
|
|
260
|
+
}
|
|
261
|
+
/**
|
|
262
|
+
* 解析 `{{skill:<id>}}` 行内引用。**只认这一种形式**,别的 `{{...}}` 原样保留
|
|
263
|
+
* (本仓没有模板引擎,不要让人以为这是通用的)。
|
|
264
|
+
* 未知 id **不静默删掉** —— 显式告诉模型"你引用了不存在的技能"。
|
|
265
|
+
*/
|
|
266
|
+
export function renderSkillRefs(text, scan = scanSkills()) {
|
|
267
|
+
return String(text || '').replace(/\{\{skill:([^}]+)\}\}/g, (_all, rawId) => {
|
|
268
|
+
const id = rawId.trim();
|
|
269
|
+
const { line } = describeSkill(id, scan);
|
|
270
|
+
return line;
|
|
271
|
+
});
|
|
272
|
+
}
|
|
273
|
+
/** 一个场景/一段文本实际引用了哪些技能:行内引用 ∪ 显式声明(去重、保序) */
|
|
274
|
+
export function referencedSkillIds(text, declared = []) {
|
|
275
|
+
const ids = [];
|
|
276
|
+
const push = (id) => { if (id && !ids.includes(id))
|
|
277
|
+
ids.push(id); };
|
|
278
|
+
for (const m of String(text || '').matchAll(/\{\{skill:([^}]+)\}\}/g))
|
|
279
|
+
push(m[1].trim());
|
|
280
|
+
for (const id of declared)
|
|
281
|
+
push(String(id || '').trim());
|
|
282
|
+
return ids;
|
|
283
|
+
}
|
|
284
|
+
/**
|
|
285
|
+
* 读某个技能的 `SKILL.md` 正文。
|
|
286
|
+
*
|
|
287
|
+
* **路径限界**:只从扫描结果里取路径,绝不接受调用方拼出来的路径。也就是说
|
|
288
|
+
* `read_skill('../config.json')` 这类根本走不到文件系统 —— 因为 `../config.json`
|
|
289
|
+
* 不是任何一个扫描出来的技能 id。这条是 P4 验收标准的现场,有测试逐个盯着。
|
|
290
|
+
*/
|
|
291
|
+
export function readSkillBody(id, scan = scanSkills()) {
|
|
292
|
+
const skill = findSkill(id, scan);
|
|
293
|
+
if (!skill)
|
|
294
|
+
return { ok: false, text: `本机没有技能「${id}」。可以用 list_skills 看有哪些。` };
|
|
295
|
+
if (skillState(skill) === 'disabled') {
|
|
296
|
+
return { ok: false, text: `技能「${skill.id}」已被禁用,不读取它的内容。` };
|
|
297
|
+
}
|
|
298
|
+
let text = '';
|
|
299
|
+
try {
|
|
300
|
+
text = readFileSync(skill.file, 'utf8');
|
|
301
|
+
}
|
|
302
|
+
catch (error) {
|
|
303
|
+
return { ok: false, text: `技能「${skill.id}」的说明文件读不了:${error.message}` };
|
|
304
|
+
}
|
|
305
|
+
const truncated = text.length > SKILL_BODY_LIMIT;
|
|
306
|
+
return {
|
|
307
|
+
ok: true,
|
|
308
|
+
text: truncated ? `${text.slice(0, SKILL_BODY_LIMIT)}\n\n…(正文过长,已截断到 ${SKILL_BODY_LIMIT} 字)` : text,
|
|
309
|
+
truncated,
|
|
310
|
+
};
|
|
311
|
+
}
|
|
312
|
+
// ---------- 提示词目录 ----------
|
|
313
|
+
/** 只列名字 + 描述 + 状态。27 个技能的正文全塞进每轮提示词是浪费,正文按需 `read_skill`。 */
|
|
314
|
+
export function skillCatalogueLines(scan = scanSkills(), limit = 40) {
|
|
315
|
+
const disabled = disabledIds();
|
|
316
|
+
const usable = scan.skills.filter(s => skillState(s, disabled) === 'ready');
|
|
317
|
+
const lines = usable.slice(0, limit).map(s => {
|
|
318
|
+
const desc = s.description.length > 80 ? `${s.description.slice(0, 80)}…` : s.description;
|
|
319
|
+
return `· ${s.id}(${s.name}):${desc || '(无描述)'}`;
|
|
320
|
+
});
|
|
321
|
+
const hidden = usable.length - lines.length;
|
|
322
|
+
const off = scan.skills.length - usable.length;
|
|
323
|
+
const notes = [];
|
|
324
|
+
if (hidden > 0)
|
|
325
|
+
notes.push(`另有 ${hidden} 个技能未列出`);
|
|
326
|
+
if (off > 0)
|
|
327
|
+
notes.push(`${off} 个技能被禁用`);
|
|
328
|
+
return notes.length ? [...lines, `(${notes.join(';')})`] : lines;
|
|
329
|
+
}
|
|
330
|
+
//# sourceMappingURL=assistantSkills.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"assistantSkills.js","sourceRoot":"","sources":["../../../src/services/assistantSkills.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,11 @@
|
|
|
1
1
|
import type { AssistantMemory } from './assistantMemory.js';
|
|
2
|
+
/**
|
|
3
|
+
* 总览索引在哪:**在概念目录的上一层**——`Wiki/Concepts/` 的兄弟是 `Wiki/00-Overview.md`。
|
|
4
|
+
*
|
|
5
|
+
* 抽成函数是为了能直接测:这段路径写错过一次(写成 `join(dir, '00-Overview.md')`,于是一直读不到),
|
|
6
|
+
* 而当时那条测试只能断言「有内容或没有」这种形状——真实机器上有索引、CI 上没有,两条路都绿。
|
|
7
|
+
*/
|
|
8
|
+
export declare function wikiIndexPath(conceptDir: string): string;
|
|
2
9
|
/**
|
|
3
10
|
* 概念名 → 文件名。**与 `compile_wiki` 是同一套规则**(非法字符换下划线、截到 60 字)。
|
|
4
11
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"assistantTools.d.ts","sourceRoot":"","sources":["../../../src/services/assistantTools.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;
|
|
1
|
+
{"version":3,"file":"assistantTools.d.ts","sourceRoot":"","sources":["../../../src/services/assistantTools.ts"],"names":[],"mappings":"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"}
|