@gird/ccli 2.15.0 → 2.18.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.
Files changed (91) hide show
  1. package/README.md +22 -6
  2. package/dist/agent/ai.js +10 -345
  3. package/dist/agent/ai.js.map +1 -1
  4. package/dist/agent/providers/anthropic.js +258 -0
  5. package/dist/agent/providers/anthropic.js.map +1 -0
  6. package/dist/agent/providers/gemini.js +14 -0
  7. package/dist/agent/providers/gemini.js.map +1 -0
  8. package/dist/agent/providers/openai.js +110 -0
  9. package/dist/agent/providers/openai.js.map +1 -0
  10. package/dist/agent/tool-projection.js +57 -0
  11. package/dist/agent/tool-projection.js.map +1 -0
  12. package/dist/cli/args/index.js +4 -0
  13. package/dist/cli/args/index.js.map +1 -1
  14. package/dist/cli/clipboard-image.js +51 -0
  15. package/dist/cli/clipboard-image.js.map +1 -0
  16. package/dist/cli/image-compress.js +62 -0
  17. package/dist/cli/image-compress.js.map +1 -0
  18. package/dist/cli/image-reference.js +190 -0
  19. package/dist/cli/image-reference.js.map +1 -0
  20. package/dist/cli/repl/index.js +110 -60
  21. package/dist/cli/repl/index.js.map +1 -1
  22. package/dist/cli/run/event-renderer.js +57 -0
  23. package/dist/cli/run/event-renderer.js.map +1 -0
  24. package/dist/cli/run/hooks.js +58 -19
  25. package/dist/cli/run/hooks.js.map +1 -1
  26. package/dist/cli/run/index.js +218 -9
  27. package/dist/cli/run/index.js.map +1 -1
  28. package/dist/cli/run/task.js +58 -1
  29. package/dist/cli/run/task.js.map +1 -1
  30. package/dist/cli/run/todo-panel.js +13 -0
  31. package/dist/cli/run/todo-panel.js.map +1 -1
  32. package/dist/cli/session/checkpoint.js +252 -0
  33. package/dist/cli/session/checkpoint.js.map +1 -0
  34. package/dist/cli/session/index.js +1 -1
  35. package/dist/cli/session/index.js.map +1 -1
  36. package/dist/cli/slash/index.js +26 -2
  37. package/dist/cli/slash/index.js.map +1 -1
  38. package/dist/cli/slash/session/load.js +3 -0
  39. package/dist/cli/slash/session/load.js.map +1 -1
  40. package/dist/cli/slash/session/replay.js +118 -0
  41. package/dist/cli/slash/session/replay.js.map +1 -0
  42. package/dist/cli/slash/session/save.js +1 -0
  43. package/dist/cli/slash/session/save.js.map +1 -1
  44. package/dist/cli/slash/system/agent.js +38 -104
  45. package/dist/cli/slash/system/agent.js.map +1 -1
  46. package/dist/cli/slash/system/compact.js +26 -5
  47. package/dist/cli/slash/system/compact.js.map +1 -1
  48. package/dist/cli/slash/system/goal.js +34 -34
  49. package/dist/cli/slash/system/goal.js.map +1 -1
  50. package/dist/cli/slash/system/help.js +3 -0
  51. package/dist/cli/slash/system/help.js.map +1 -1
  52. package/dist/cli/slash/system/plan.js +140 -0
  53. package/dist/cli/slash/system/plan.js.map +1 -0
  54. package/dist/cli/slash/system/revert.js +133 -0
  55. package/dist/cli/slash/system/revert.js.map +1 -0
  56. package/dist/config/config.js +57 -4
  57. package/dist/config/config.js.map +1 -1
  58. package/dist/config/plugins.js +378 -0
  59. package/dist/config/plugins.js.map +1 -0
  60. package/dist/config/skills.js +68 -6
  61. package/dist/config/skills.js.map +1 -1
  62. package/dist/harness/index.js +334 -0
  63. package/dist/harness/index.js.map +1 -0
  64. package/dist/harness/records.js +98 -0
  65. package/dist/harness/records.js.map +1 -0
  66. package/dist/index.js +87 -42
  67. package/dist/index.js.map +1 -1
  68. package/dist/tools/bash-background.js +2 -2
  69. package/dist/tools/bash-background.js.map +1 -1
  70. package/dist/tools/bash.js +3 -2
  71. package/dist/tools/bash.js.map +1 -1
  72. package/dist/tools/edit-file.js +8 -2
  73. package/dist/tools/edit-file.js.map +1 -1
  74. package/dist/tools/glob.js +4 -3
  75. package/dist/tools/glob.js.map +1 -1
  76. package/dist/tools/grep.js +4 -3
  77. package/dist/tools/grep.js.map +1 -1
  78. package/dist/tools/index.js +20 -0
  79. package/dist/tools/index.js.map +1 -1
  80. package/dist/tools/list-dir.js +3 -2
  81. package/dist/tools/list-dir.js.map +1 -1
  82. package/dist/tools/read-file.js +3 -2
  83. package/dist/tools/read-file.js.map +1 -1
  84. package/dist/tools/shared.js.map +1 -1
  85. package/dist/tools/todo.js +17 -5
  86. package/dist/tools/todo.js.map +1 -1
  87. package/dist/tools/web-fetch.js +95 -0
  88. package/dist/tools/web-fetch.js.map +1 -0
  89. package/dist/tools/write-file.js +8 -2
  90. package/dist/tools/write-file.js.map +1 -1
  91. package/package.json +1 -1
@@ -0,0 +1,378 @@
1
+ /**
2
+ * 插件包(Plugins)—— 比单个 skill / MCP / hook 更大的**分发单元**。
3
+ *
4
+ * 一个插件就是一个目录,里面放一个 `plugin.json` 清单,把团队要用的
5
+ * 技能(skills)、MCP server、生命周期钩子(hooks)打包在一起。放进插件目录、
6
+ * 启用后,这些能力就一次性合并进当前会话——新人不用再手动拷 skills / 抄配置。
7
+ *
8
+ * 两个来源,同名时项目覆盖用户:
9
+ * 用户插件 ~/.ccli/plugins/<名>/plugin.json
10
+ * 项目插件 <cwd>/.ccli/plugins/<名>/plugin.json
11
+ *
12
+ * 贡献如何生效:
13
+ * - skills:清单里的相对路径(文件或目录)→ 由 loadSkills 以 'plugin' 来源装载
14
+ * (优先级:共享 < 插件 < 用户 < 项目)。
15
+ * - mcpServers / hooks:由 loadConfig 折叠进最终配置
16
+ * (mcpServers 会被显式配置覆盖;hooks 排在配置钩子之前)。
17
+ *
18
+ * 本步只做「发现 + 读取 + 聚合贡献 + 列表」。安装器 / 启停命令留作后续步;
19
+ * 现在停用一个插件,把它 plugin.json 里的 "enabled" 设为 false 即可。
20
+ */
21
+ import { cpSync, mkdirSync, readdirSync, readFileSync, rmSync, statSync, writeFileSync, } from 'node:fs';
22
+ import { homedir } from 'node:os';
23
+ import { isAbsolute, join, relative, resolve } from 'node:path';
24
+ import { HOOK_EVENTS } from './config.js';
25
+ const PLUGINS_REL = join('.ccli', 'plugins');
26
+ /** 安全读取目录:不存在 / 无权限一律按空处理。 */
27
+ function safeReaddir(dir) {
28
+ try {
29
+ return readdirSync(dir);
30
+ }
31
+ catch {
32
+ return [];
33
+ }
34
+ }
35
+ function isDir(p) {
36
+ try {
37
+ return statSync(p).isDirectory();
38
+ }
39
+ catch {
40
+ return false;
41
+ }
42
+ }
43
+ function isFile(p) {
44
+ try {
45
+ return statSync(p).isFile();
46
+ }
47
+ catch {
48
+ return false;
49
+ }
50
+ }
51
+ /** target 是否落在 dir 之内(含 dir 自身),用于拦截 `../` 越界路径。 */
52
+ function within(dir, target) {
53
+ const rel = relative(dir, target);
54
+ return rel === '' || (!rel.startsWith('..') && !isAbsolute(rel));
55
+ }
56
+ /** 从任意值中挑出合法钩子(与 config.ts 的规则一致,插件不应绕过校验)。 */
57
+ function pickHooks(raw, errors) {
58
+ if (raw === undefined)
59
+ return [];
60
+ if (!Array.isArray(raw)) {
61
+ errors.push('hooks 应为数组,已忽略');
62
+ return [];
63
+ }
64
+ const out = [];
65
+ for (const item of raw) {
66
+ if (!item || typeof item !== 'object')
67
+ continue;
68
+ if (!HOOK_EVENTS.includes(item.event)) {
69
+ errors.push(`hooks 含未知事件 ${String(item.event)},已忽略该条`);
70
+ continue;
71
+ }
72
+ if (typeof item.command !== 'string' || item.command.length === 0) {
73
+ errors.push('hooks 含空 command,已忽略该条');
74
+ continue;
75
+ }
76
+ const def = { event: item.event, command: item.command };
77
+ if (typeof item.matcher === 'string' && item.matcher.length > 0) {
78
+ def.matcher = item.matcher;
79
+ }
80
+ if (typeof item.timeout === 'number' &&
81
+ Number.isFinite(item.timeout) &&
82
+ item.timeout > 0) {
83
+ def.timeout = item.timeout;
84
+ }
85
+ out.push(def);
86
+ }
87
+ return out;
88
+ }
89
+ /** 校验 mcpServers:仅保留 value 为对象的条目。 */
90
+ function pickMcpServers(raw, errors) {
91
+ if (raw === undefined)
92
+ return {};
93
+ if (!raw || typeof raw !== 'object' || Array.isArray(raw)) {
94
+ errors.push('mcpServers 应为对象,已忽略');
95
+ return {};
96
+ }
97
+ const out = {};
98
+ for (const [name, cfg] of Object.entries(raw)) {
99
+ if (cfg && typeof cfg === 'object' && !Array.isArray(cfg)) {
100
+ out[name] = cfg;
101
+ }
102
+ else {
103
+ errors.push(`mcpServers.${name} 非对象,已忽略`);
104
+ }
105
+ }
106
+ return out;
107
+ }
108
+ /** 解析 skills 声明为存在且未越界的绝对路径。 */
109
+ function resolveSkillPaths(raw, dir, errors) {
110
+ if (raw === undefined)
111
+ return [];
112
+ if (!Array.isArray(raw)) {
113
+ errors.push('skills 应为字符串数组,已忽略');
114
+ return [];
115
+ }
116
+ const out = [];
117
+ for (const entry of raw) {
118
+ if (typeof entry !== 'string' || entry.trim() === '')
119
+ continue;
120
+ const abs = resolve(dir, entry);
121
+ if (!within(dir, abs)) {
122
+ errors.push(`skills 路径越出插件目录,已忽略:${entry}`);
123
+ continue;
124
+ }
125
+ if (!isFile(abs) && !isDir(abs)) {
126
+ errors.push(`skills 路径不存在,已忽略:${entry}`);
127
+ continue;
128
+ }
129
+ out.push(abs);
130
+ }
131
+ return out;
132
+ }
133
+ /** 读取并解析单个插件目录;清单缺失或严重非法返回 null。 */
134
+ function loadOne(dir, source) {
135
+ const manifestPath = join(dir, 'plugin.json');
136
+ if (!isFile(manifestPath))
137
+ return null;
138
+ const errors = [];
139
+ let manifest;
140
+ try {
141
+ manifest = JSON.parse(readFileSync(manifestPath, 'utf8'));
142
+ }
143
+ catch (e) {
144
+ return {
145
+ name: baseName(dir),
146
+ version: '',
147
+ description: '',
148
+ enabled: false,
149
+ source,
150
+ dir,
151
+ manifestPath,
152
+ skillPaths: [],
153
+ mcpServers: {},
154
+ hooks: [],
155
+ errors: [`plugin.json 解析失败:${e?.message ?? String(e)}`],
156
+ };
157
+ }
158
+ const name = typeof manifest.name === 'string' && manifest.name.trim()
159
+ ? manifest.name.trim()
160
+ : baseName(dir);
161
+ if (!manifest.name || typeof manifest.name !== 'string') {
162
+ errors.push('plugin.json 缺少 name,已回退用目录名');
163
+ }
164
+ const enabled = manifest.enabled !== false; // 缺省启用
165
+ return {
166
+ name,
167
+ version: typeof manifest.version === 'string' ? manifest.version : '',
168
+ description: typeof manifest.description === 'string'
169
+ ? manifest.description
170
+ : '',
171
+ enabled,
172
+ source,
173
+ dir,
174
+ manifestPath,
175
+ skillPaths: resolveSkillPaths(manifest.skills, dir, errors),
176
+ mcpServers: pickMcpServers(manifest.mcpServers, errors),
177
+ hooks: pickHooks(manifest.hooks, errors),
178
+ errors,
179
+ };
180
+ }
181
+ /** 跨平台提取路径最后一段。 */
182
+ function baseName(p) {
183
+ const parts = p.split(/[/\\]/).filter(Boolean);
184
+ return parts[parts.length - 1] ?? p;
185
+ }
186
+ /** 扫描一个 plugins 根目录下的所有插件子目录。 */
187
+ function loadFromRoot(root, source) {
188
+ const out = [];
189
+ for (const entry of safeReaddir(root)) {
190
+ const dir = join(root, entry);
191
+ if (!isDir(dir))
192
+ continue;
193
+ const p = loadOne(dir, source);
194
+ if (p)
195
+ out.push(p);
196
+ }
197
+ return out;
198
+ }
199
+ /**
200
+ * 装载全部插件:用户 → 项目(同名时项目覆盖用户)。
201
+ * homeDir 仅供测试注入,默认取真实家目录。
202
+ */
203
+ export function loadPlugins(cwd = process.cwd(), homeDir = homedir()) {
204
+ const user = loadFromRoot(join(homeDir, PLUGINS_REL), 'user');
205
+ const project = loadFromRoot(join(cwd, PLUGINS_REL), 'project');
206
+ const byName = new Map();
207
+ for (const p of user)
208
+ byName.set(p.name.toLowerCase(), p);
209
+ for (const p of project)
210
+ byName.set(p.name.toLowerCase(), p); // 项目覆盖用户
211
+ return [...byName.values()].sort((a, b) => a.name.localeCompare(b.name));
212
+ }
213
+ /**
214
+ * 聚合已启用插件的 mcpServers 与 hooks,供 loadConfig 折叠进最终配置。
215
+ * 迭代顺序保证项目插件的 mcpServer 覆盖同名的用户插件(因已排序 + Object.assign)。
216
+ */
217
+ export function pluginContributions(plugins) {
218
+ const mcpServers = {};
219
+ const hooks = [];
220
+ for (const p of plugins) {
221
+ if (!p.enabled)
222
+ continue;
223
+ Object.assign(mcpServers, p.mcpServers);
224
+ hooks.push(...p.hooks);
225
+ }
226
+ return { mcpServers, hooks };
227
+ }
228
+ /** 插件名是否安全(能直接当目录名,不含分隔符 / 上跳)。 */
229
+ function isSafePluginName(name) {
230
+ return name.length > 0 && !/[/\\]/.test(name) && name !== '.' && name !== '..';
231
+ }
232
+ /**
233
+ * 安装插件:把一个插件目录拷进 `~/.ccli/plugins/<名>/`(或项目级)。
234
+ * 已存在同名则覆盖(升级语义)。纯文件操作,不校验清单里的具体贡献。
235
+ */
236
+ export function installPlugin(src, opts = {}) {
237
+ const cwd = opts.cwd ?? process.cwd();
238
+ const homeDir = opts.homeDir ?? homedir();
239
+ const srcDir = resolve(cwd, src);
240
+ if (!isDir(srcDir)) {
241
+ return { ok: false, message: `源不是目录:${src}` };
242
+ }
243
+ const manifestPath = join(srcDir, 'plugin.json');
244
+ if (!isFile(manifestPath)) {
245
+ return { ok: false, message: `源目录缺少 plugin.json:${src}` };
246
+ }
247
+ let manifest;
248
+ try {
249
+ manifest = JSON.parse(readFileSync(manifestPath, 'utf8'));
250
+ }
251
+ catch (e) {
252
+ return {
253
+ ok: false,
254
+ message: `plugin.json 解析失败:${e?.message ?? String(e)}`,
255
+ };
256
+ }
257
+ const name = typeof manifest.name === 'string' && manifest.name.trim()
258
+ ? manifest.name.trim()
259
+ : baseName(srcDir);
260
+ if (!isSafePluginName(name)) {
261
+ return { ok: false, message: `插件名不合法:${name}` };
262
+ }
263
+ const root = opts.project
264
+ ? join(cwd, PLUGINS_REL)
265
+ : join(homeDir, PLUGINS_REL);
266
+ const dest = join(root, name);
267
+ // 防止自我吞噬:源与目标重叠时拒绝(否则先 rm 会删掉源)
268
+ if (within(dest, srcDir) || within(srcDir, dest)) {
269
+ return { ok: false, message: `源与安装目标重叠,已取消:${dest}` };
270
+ }
271
+ const existed = isDir(dest);
272
+ try {
273
+ rmSync(dest, { recursive: true, force: true });
274
+ mkdirSync(root, { recursive: true });
275
+ cpSync(srcDir, dest, { recursive: true });
276
+ }
277
+ catch (e) {
278
+ return { ok: false, message: `安装失败:${e?.message ?? String(e)}` };
279
+ }
280
+ return {
281
+ ok: true,
282
+ name,
283
+ dest,
284
+ message: `${existed ? '已更新(覆盖旧版本)' : '已安装'} ${name} → ${dest}`,
285
+ };
286
+ }
287
+ /**
288
+ * 卸载插件:删除其目录。定位到生效的那个(同名时项目优先),删掉整个目录。
289
+ * 若同名还被更低优先级的目录遮蔽(如删了项目级、用户级仍在),提示可再次卸载。
290
+ */
291
+ export function uninstallPlugin(name, opts = {}) {
292
+ const cwd = opts.cwd ?? process.cwd();
293
+ const homeDir = opts.homeDir ?? homedir();
294
+ const target = loadPlugins(cwd, homeDir).find((p) => p.name.toLowerCase() === name.toLowerCase());
295
+ if (!target) {
296
+ return { ok: false, message: `未找到插件:${name}` };
297
+ }
298
+ try {
299
+ rmSync(target.dir, { recursive: true, force: true });
300
+ }
301
+ catch (e) {
302
+ return { ok: false, message: `卸载失败:${e?.message ?? String(e)}` };
303
+ }
304
+ // 删除后再看是否还有同名(更低优先级)残留,如实告知
305
+ const shadow = loadPlugins(cwd, homeDir).find((p) => p.name.toLowerCase() === name.toLowerCase());
306
+ const tail = shadow
307
+ ? `;仍存在同名的${shadow.source === 'user' ? '用户' : '项目'}级插件,可再次卸载`
308
+ : '';
309
+ return {
310
+ ok: true,
311
+ message: `已卸载插件 ${target.name}(${target.dir})${tail}`,
312
+ };
313
+ }
314
+ /**
315
+ * 启用 / 停用一个已安装插件:改写其 plugin.json 的 `enabled` 字段。
316
+ * 同名同时存在于用户与项目时,作用于生效的那个(项目优先)。
317
+ */
318
+ export function setPluginEnabled(name, enabled, opts = {}) {
319
+ const cwd = opts.cwd ?? process.cwd();
320
+ const homeDir = opts.homeDir ?? homedir();
321
+ const target = loadPlugins(cwd, homeDir).find((p) => p.name.toLowerCase() === name.toLowerCase());
322
+ if (!target) {
323
+ return { ok: false, message: `未找到插件:${name}` };
324
+ }
325
+ if (target.enabled === enabled) {
326
+ return {
327
+ ok: true,
328
+ message: `插件 ${target.name} 已是${enabled ? '启用' : '停用'}状态`,
329
+ };
330
+ }
331
+ let manifest;
332
+ try {
333
+ manifest = JSON.parse(readFileSync(target.manifestPath, 'utf8'));
334
+ }
335
+ catch (e) {
336
+ return {
337
+ ok: false,
338
+ message: `plugin.json 解析失败:${e?.message ?? String(e)}`,
339
+ };
340
+ }
341
+ manifest.enabled = enabled;
342
+ try {
343
+ writeFileSync(target.manifestPath, JSON.stringify(manifest, null, 2) + '\n', 'utf8');
344
+ }
345
+ catch (e) {
346
+ return { ok: false, message: `写入失败:${e?.message ?? String(e)}` };
347
+ }
348
+ return {
349
+ ok: true,
350
+ message: `已${enabled ? '启用' : '停用'}插件 ${target.name}`,
351
+ };
352
+ }
353
+ /**
354
+ * `ccli plugin [list]` 诊断命令:列出发现的插件、来源、启停与贡献数量。
355
+ * @returns 进程退出码(恒 0,纯展示)
356
+ */
357
+ export function printPlugins(cwd = process.cwd()) {
358
+ const plugins = loadPlugins(cwd);
359
+ if (plugins.length === 0) {
360
+ console.log('没有已安装的插件。在 ~/.ccli/plugins/<名>/ 或 <项目>/.ccli/plugins/<名>/ ' +
361
+ '放置 plugin.json 即可定义。');
362
+ return 0;
363
+ }
364
+ const TAG = { user: '用户', project: '项目' };
365
+ console.log('已安装插件:');
366
+ for (const p of plugins) {
367
+ const state = p.enabled ? '启用' : '停用';
368
+ const ver = p.version ? `@${p.version}` : '';
369
+ const desc = p.description ? ` — ${p.description}` : '';
370
+ console.log(` ${p.name}${ver} [${TAG[p.source]}·${state}]${desc}`);
371
+ console.log(` 技能 ${p.skillPaths.length} · MCP ${Object.keys(p.mcpServers).length} · 钩子 ${p.hooks.length}`);
372
+ for (const err of p.errors) {
373
+ console.log(` ⚠ ${err}`);
374
+ }
375
+ }
376
+ return 0;
377
+ }
378
+ //# sourceMappingURL=plugins.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugins.js","sourceRoot":"","sources":["../../src/config/plugins.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,OAAO,EACH,MAAM,EACN,SAAS,EACT,WAAW,EACX,YAAY,EACZ,MAAM,EACN,QAAQ,EACR,aAAa,GAChB,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEhE,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AA0C1C,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;AAE7C,8BAA8B;AAC9B,SAAS,WAAW,CAAC,GAAW;IAC5B,IAAI,CAAC;QACD,OAAO,WAAW,CAAC,GAAG,CAAC,CAAC;IAC5B,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,EAAE,CAAC;IACd,CAAC;AACL,CAAC;AAED,SAAS,KAAK,CAAC,CAAS;IACpB,IAAI,CAAC;QACD,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;IACrC,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,KAAK,CAAC;IACjB,CAAC;AACL,CAAC;AAED,SAAS,MAAM,CAAC,CAAS;IACrB,IAAI,CAAC;QACD,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IAChC,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,KAAK,CAAC;IACjB,CAAC;AACL,CAAC;AAED,oDAAoD;AACpD,SAAS,MAAM,CAAC,GAAW,EAAE,MAAc;IACvC,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IAClC,OAAO,GAAG,KAAK,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;AACrE,CAAC;AAED,+CAA+C;AAC/C,SAAS,SAAS,CAAC,GAAY,EAAE,MAAgB;IAC7C,IAAI,GAAG,KAAK,SAAS;QAAE,OAAO,EAAE,CAAC;IACjC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QACtB,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAC9B,OAAO,EAAE,CAAC;IACd,CAAC;IACD,MAAM,GAAG,GAAc,EAAE,CAAC;IAC1B,KAAK,MAAM,IAAI,IAAI,GAAY,EAAE,CAAC;QAC9B,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ;YAAE,SAAS;QAChD,IAAI,CAAE,WAAiC,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YAC3D,MAAM,CAAC,IAAI,CAAC,eAAe,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YACvD,SAAS;QACb,CAAC;QACD,IAAI,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAChE,MAAM,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;YACtC,SAAS;QACb,CAAC;QACD,MAAM,GAAG,GAAY,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC;QAClE,IAAI,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9D,GAAG,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;QAC/B,CAAC;QACD,IACI,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ;YAChC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC;YAC7B,IAAI,CAAC,OAAO,GAAG,CAAC,EAClB,CAAC;YACC,GAAG,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;QAC/B,CAAC;QACD,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAClB,CAAC;IACD,OAAO,GAAG,CAAC;AACf,CAAC;AAED,sCAAsC;AACtC,SAAS,cAAc,CACnB,GAAY,EACZ,MAAgB;IAEhB,IAAI,GAAG,KAAK,SAAS;QAAE,OAAO,EAAE,CAAC;IACjC,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QACxD,MAAM,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;QACnC,OAAO,EAAE,CAAC;IACd,CAAC;IACD,MAAM,GAAG,GAAoC,EAAE,CAAC;IAChD,KAAK,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAA8B,CAAC,EAAE,CAAC;QACvE,IAAI,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;YACxD,GAAG,CAAC,IAAI,CAAC,GAAG,GAAsB,CAAC;QACvC,CAAC;aAAM,CAAC;YACJ,MAAM,CAAC,IAAI,CAAC,cAAc,IAAI,UAAU,CAAC,CAAC;QAC9C,CAAC;IACL,CAAC;IACD,OAAO,GAAG,CAAC;AACf,CAAC;AAED,gCAAgC;AAChC,SAAS,iBAAiB,CACtB,GAAY,EACZ,GAAW,EACX,MAAgB;IAEhB,IAAI,GAAG,KAAK,SAAS;QAAE,OAAO,EAAE,CAAC;IACjC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QACtB,MAAM,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;QAClC,OAAO,EAAE,CAAC;IACd,CAAC;IACD,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,KAAK,MAAM,KAAK,IAAI,GAAG,EAAE,CAAC;QACtB,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE;YAAE,SAAS;QAC/D,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAChC,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC;YACpB,MAAM,CAAC,IAAI,CAAC,uBAAuB,KAAK,EAAE,CAAC,CAAC;YAC5C,SAAS;QACb,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;YAC9B,MAAM,CAAC,IAAI,CAAC,oBAAoB,KAAK,EAAE,CAAC,CAAC;YACzC,SAAS;QACb,CAAC;QACD,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAClB,CAAC;IACD,OAAO,GAAG,CAAC;AACf,CAAC;AAED,oCAAoC;AACpC,SAAS,OAAO,CAAC,GAAW,EAAE,MAAoB;IAC9C,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC;IAC9C,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC;QAAE,OAAO,IAAI,CAAC;IAEvC,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,IAAI,QAAwB,CAAC;IAC7B,IAAI,CAAC;QACD,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC,CAAC;IAC9D,CAAC;IAAC,OAAO,CAAM,EAAE,CAAC;QACd,OAAO;YACH,IAAI,EAAE,QAAQ,CAAC,GAAG,CAAC;YACnB,OAAO,EAAE,EAAE;YACX,WAAW,EAAE,EAAE;YACf,OAAO,EAAE,KAAK;YACd,MAAM;YACN,GAAG;YACH,YAAY;YACZ,UAAU,EAAE,EAAE;YACd,UAAU,EAAE,EAAE;YACd,KAAK,EAAE,EAAE;YACT,MAAM,EAAE,CAAC,oBAAoB,CAAC,EAAE,OAAO,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;SAC1D,CAAC;IACN,CAAC;IAED,MAAM,IAAI,GACN,OAAO,QAAQ,CAAC,IAAI,KAAK,QAAQ,IAAI,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE;QACrD,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE;QACtB,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;IACxB,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI,OAAO,QAAQ,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QACtD,MAAM,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;IAC/C,CAAC;IACD,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,KAAK,KAAK,CAAC,CAAC,OAAO;IAEnD,OAAO;QACH,IAAI;QACJ,OAAO,EACH,OAAO,QAAQ,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;QAChE,WAAW,EACP,OAAO,QAAQ,CAAC,WAAW,KAAK,QAAQ;YACpC,CAAC,CAAC,QAAQ,CAAC,WAAW;YACtB,CAAC,CAAC,EAAE;QACZ,OAAO;QACP,MAAM;QACN,GAAG;QACH,YAAY;QACZ,UAAU,EAAE,iBAAiB,CAAC,QAAQ,CAAC,MAAM,EAAE,GAAG,EAAE,MAAM,CAAC;QAC3D,UAAU,EAAE,cAAc,CAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;QACvD,KAAK,EAAE,SAAS,CAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;QACxC,MAAM;KACT,CAAC;AACN,CAAC;AAED,mBAAmB;AACnB,SAAS,QAAQ,CAAC,CAAS;IACvB,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC/C,OAAO,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;AACxC,CAAC;AAED,iCAAiC;AACjC,SAAS,YAAY,CAAC,IAAY,EAAE,MAAoB;IACpD,MAAM,GAAG,GAAmB,EAAE,CAAC;IAC/B,KAAK,MAAM,KAAK,IAAI,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;QACpC,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAC9B,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;YAAE,SAAS;QAC1B,MAAM,CAAC,GAAG,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QAC/B,IAAI,CAAC;YAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACvB,CAAC;IACD,OAAO,GAAG,CAAC;AACf,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,WAAW,CACvB,MAAc,OAAO,CAAC,GAAG,EAAE,EAC3B,UAAkB,OAAO,EAAE;IAE3B,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,EAAE,MAAM,CAAC,CAAC;IAC9D,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC,EAAE,SAAS,CAAC,CAAC;IAEhE,MAAM,MAAM,GAAG,IAAI,GAAG,EAAwB,CAAC;IAC/C,KAAK,MAAM,CAAC,IAAI,IAAI;QAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC;IAC1D,KAAK,MAAM,CAAC,IAAI,OAAO;QAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS;IACvE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AAC7E,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,OAAuB;IAIvD,MAAM,UAAU,GAAoC,EAAE,CAAC;IACvD,MAAM,KAAK,GAAc,EAAE,CAAC;IAC5B,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACtB,IAAI,CAAC,CAAC,CAAC,OAAO;YAAE,SAAS;QACzB,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,UAAU,CAAC,CAAC;QACxC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;IAC3B,CAAC;IACD,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;AACjC,CAAC;AAED,mCAAmC;AACnC,SAAS,gBAAgB,CAAC,IAAY;IAClC,OAAO,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,IAAI,CAAC;AACnF,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,aAAa,CACzB,GAAW,EACX,OAII,EAAE;IAEN,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IACtC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,OAAO,EAAE,CAAC;IAC1C,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IAEjC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;QACjB,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,GAAG,EAAE,EAAE,CAAC;IAClD,CAAC;IACD,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IACjD,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC;QACxB,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,qBAAqB,GAAG,EAAE,EAAE,CAAC;IAC9D,CAAC;IACD,IAAI,QAAwB,CAAC;IAC7B,IAAI,CAAC;QACD,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC,CAAC;IAC9D,CAAC;IAAC,OAAO,CAAM,EAAE,CAAC;QACd,OAAO;YACH,EAAE,EAAE,KAAK;YACT,OAAO,EAAE,oBAAoB,CAAC,EAAE,OAAO,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE;SACzD,CAAC;IACN,CAAC;IACD,MAAM,IAAI,GACN,OAAO,QAAQ,CAAC,IAAI,KAAK,QAAQ,IAAI,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE;QACrD,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE;QACtB,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC3B,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC;QAC1B,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,UAAU,IAAI,EAAE,EAAE,CAAC;IACpD,CAAC;IAED,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO;QACrB,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC;QACxB,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;IACjC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAE9B,gCAAgC;IAChC,IAAI,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC;QAC/C,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,gBAAgB,IAAI,EAAE,EAAE,CAAC;IAC1D,CAAC;IAED,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC;IAC5B,IAAI,CAAC;QACD,MAAM,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAC/C,SAAS,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACrC,MAAM,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9C,CAAC;IAAC,OAAO,CAAM,EAAE,CAAC;QACd,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,OAAO,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;IACrE,CAAC;IACD,OAAO;QACH,EAAE,EAAE,IAAI;QACR,IAAI;QACJ,IAAI;QACJ,OAAO,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,MAAM,IAAI,EAAE;KACjE,CAAC;AACN,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,eAAe,CAC3B,IAAY,EACZ,OAA2C,EAAE;IAE7C,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IACtC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,OAAO,EAAE,CAAC;IAC1C,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,IAAI,CACzC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,IAAI,CAAC,WAAW,EAAE,CACrD,CAAC;IACF,IAAI,CAAC,MAAM,EAAE,CAAC;QACV,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,IAAI,EAAE,EAAE,CAAC;IACnD,CAAC;IACD,IAAI,CAAC;QACD,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACzD,CAAC;IAAC,OAAO,CAAM,EAAE,CAAC;QACd,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,OAAO,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;IACrE,CAAC;IACD,4BAA4B;IAC5B,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,IAAI,CACzC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,IAAI,CAAC,WAAW,EAAE,CACrD,CAAC;IACF,MAAM,IAAI,GAAG,MAAM;QACf,CAAC,CAAC,UAAU,MAAM,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,WAAW;QAC7D,CAAC,CAAC,EAAE,CAAC;IACT,OAAO;QACH,EAAE,EAAE,IAAI;QACR,OAAO,EAAE,SAAS,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,GAAG,IAAI,IAAI,EAAE;KACxD,CAAC;AACN,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAC5B,IAAY,EACZ,OAAgB,EAChB,OAA2C,EAAE;IAE7C,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IACtC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,OAAO,EAAE,CAAC;IAC1C,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,IAAI,CACzC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,IAAI,CAAC,WAAW,EAAE,CACrD,CAAC;IACF,IAAI,CAAC,MAAM,EAAE,CAAC;QACV,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,IAAI,EAAE,EAAE,CAAC;IACnD,CAAC;IACD,IAAI,MAAM,CAAC,OAAO,KAAK,OAAO,EAAE,CAAC;QAC7B,OAAO;YACH,EAAE,EAAE,IAAI;YACR,OAAO,EAAE,MAAM,MAAM,CAAC,IAAI,MAAM,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI;SAC5D,CAAC;IACN,CAAC;IACD,IAAI,QAAwB,CAAC;IAC7B,IAAI,CAAC;QACD,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC,CAAC;IACrE,CAAC;IAAC,OAAO,CAAM,EAAE,CAAC;QACd,OAAO;YACH,EAAE,EAAE,KAAK;YACT,OAAO,EAAE,oBAAoB,CAAC,EAAE,OAAO,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE;SACzD,CAAC;IACN,CAAC;IACD,QAAQ,CAAC,OAAO,GAAG,OAAO,CAAC;IAC3B,IAAI,CAAC;QACD,aAAa,CACT,MAAM,CAAC,YAAY,EACnB,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EACxC,MAAM,CACT,CAAC;IACN,CAAC;IAAC,OAAO,CAAM,EAAE,CAAC;QACd,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,OAAO,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;IACrE,CAAC;IACD,OAAO;QACH,EAAE,EAAE,IAAI;QACR,OAAO,EAAE,IAAI,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,MAAM,MAAM,CAAC,IAAI,EAAE;KACxD,CAAC;AACN,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,MAAc,OAAO,CAAC,GAAG,EAAE;IACpD,MAAM,OAAO,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;IACjC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,CAAC,GAAG,CACP,4DAA4D;YACxD,sBAAsB,CAC7B,CAAC;QACF,OAAO,CAAC,CAAC;IACb,CAAC;IACD,MAAM,GAAG,GAAiC,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IACxE,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACtB,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACtB,MAAM,KAAK,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;QACtC,MAAM,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7C,MAAM,IAAI,GAAG,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACxD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,GAAG,GAAG,MAAM,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,KAAK,IAAI,IAAI,EAAE,CAAC,CAAC;QACrE,OAAO,CAAC,GAAG,CACP,UAAU,CAAC,CAAC,UAAU,CAAC,MAAM,UAAU,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,MAAM,SAAS,CAAC,CAAC,KAAK,CAAC,MAAM,EAAE,CACnG,CAAC;QACF,KAAK,MAAM,GAAG,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC;YACzB,OAAO,CAAC,GAAG,CAAC,SAAS,GAAG,EAAE,CAAC,CAAC;QAChC,CAAC;IACL,CAAC;IACD,OAAO,CAAC,CAAC;AACb,CAAC"}
@@ -15,8 +15,14 @@
15
15
  * 正文里的 `$ARGUMENTS` 会被调用参数替换;没有该占位符时参数追加到末尾。
16
16
  */
17
17
  import { readdirSync, readFileSync, statSync } from 'node:fs';
18
- import { join, relative } from 'node:path';
18
+ import { dirname, join, relative } from 'node:path';
19
19
  import { homedir } from 'node:os';
20
+ import { loadPlugins } from './plugins.js';
21
+ /**
22
+ * 共享技能目录(agent 通用约定,Claude / Kimi 等也扫这里)。
23
+ * 让 CCLI 复用生态里已装好的技能,如 baoyu-url-to-markdown(浏览器抓网页转 markdown)。
24
+ */
25
+ const SHARED_SKILLS_DIRS = ['.agents/skills'];
20
26
  /** 目录技能包的递归扫描深度上限,防符号链接环。 */
21
27
  const MAX_SKILL_DEPTH = 8;
22
28
  /** 附属文件最多列出多少个,避免撑爆提示。 */
@@ -46,6 +52,12 @@ export function parseFrontmatter(raw) {
46
52
  const body = raw.slice(end + 4).replace(/^\r?\n/, '');
47
53
  return { meta, body };
48
54
  }
55
+ /**
56
+ * 安全读取目录。
57
+ *
58
+ * 技能目录通常是可选的;不存在、无权限或被删除时都按空目录处理,
59
+ * 避免启动阶段因为一个技能目录问题影响主流程。
60
+ */
49
61
  function safeReaddir(dir) {
50
62
  try {
51
63
  return readdirSync(dir);
@@ -54,6 +66,7 @@ function safeReaddir(dir) {
54
66
  return [];
55
67
  }
56
68
  }
69
+ /** 判断路径是否为目录;任何文件系统异常都视为 false。 */
57
70
  function isDir(p) {
58
71
  try {
59
72
  return statSync(p).isDirectory();
@@ -62,6 +75,7 @@ function isDir(p) {
62
75
  return false;
63
76
  }
64
77
  }
78
+ /** 判断路径是否为普通文件;任何文件系统异常都视为 false。 */
65
79
  function isFile(p) {
66
80
  try {
67
81
  return statSync(p).isFile();
@@ -151,6 +165,7 @@ function walkBundles(dir, source, depth, out, withinBundle) {
151
165
  }
152
166
  }
153
167
  }
168
+ /** 跨平台提取路径最后一段,用作缺省技能名。 */
154
169
  function baseName(p) {
155
170
  const parts = p.split(/[/\\]/).filter(Boolean);
156
171
  return parts[parts.length - 1] ?? p;
@@ -179,17 +194,58 @@ function loadFromRoot(root, source) {
179
194
  }
180
195
  return skills;
181
196
  }
182
- /** 加载全部技能(项目 + 用户),同名时项目覆盖用户。 */
183
- export function loadSkills(cwd = process.cwd()) {
184
- const user = loadFromRoot(join(homedir(), '.ccli', 'skills'), 'user');
197
+ /**
198
+ * 加载全部技能:共享 用户 → 项目(同名时后者覆盖前者,越具体优先)。
199
+ * homeDir 仅用于测试注入,默认取真实用户目录。
200
+ */
201
+ export function loadSkills(cwd = process.cwd(), homeDir = homedir()) {
202
+ const shared = SHARED_SKILLS_DIRS.flatMap((rel) => loadFromRoot(join(homeDir, rel), 'shared'));
203
+ // 插件包声明的技能(plugin.json 的 skills 字段),优先级介于共享与用户之间
204
+ const plugin = loadPlugins(cwd, homeDir)
205
+ .filter((p) => p.enabled)
206
+ .flatMap((p) => p.skillPaths.flatMap((path) => loadSkillsFromPath(path, 'plugin')));
207
+ const user = loadFromRoot(join(homeDir, '.ccli', 'skills'), 'user');
185
208
  const project = loadFromRoot(join(cwd, '.ccli', 'skills'), 'project');
186
209
  const byName = new Map();
187
- for (const s of user)
210
+ for (const s of shared)
188
211
  byName.set(s.name.toLowerCase(), s);
212
+ for (const s of plugin)
213
+ byName.set(s.name.toLowerCase(), s); // 插件覆盖共享
214
+ for (const s of user)
215
+ byName.set(s.name.toLowerCase(), s); // 用户覆盖插件
189
216
  for (const s of project)
190
217
  byName.set(s.name.toLowerCase(), s); // 项目覆盖用户
191
218
  return [...byName.values()].sort((a, b) => a.name.localeCompare(b.name));
192
219
  }
220
+ /**
221
+ * 从一个具体路径装载技能——供插件包按 plugin.json 里声明的 skills 路径引入。
222
+ * - 目录含 SKILL.md → 作为技能包(含其嵌套子技能)
223
+ * - 目录不含 SKILL.md → 当作 skills 根目录扫描(顶层 .md + 子技能包)
224
+ * - .md 文件 → 一个扁平技能
225
+ * 路径不存在或无有效技能时返回空数组。
226
+ */
227
+ export function loadSkillsFromPath(path, source) {
228
+ if (isDir(path)) {
229
+ if (isFile(join(path, 'SKILL.md'))) {
230
+ const out = [];
231
+ walkBundles(path, source, 1, out, false);
232
+ return out;
233
+ }
234
+ return loadFromRoot(path, source);
235
+ }
236
+ if (isFile(path) && path.endsWith('.md')) {
237
+ let raw = '';
238
+ try {
239
+ raw = readFileSync(path, 'utf8');
240
+ }
241
+ catch {
242
+ return [];
243
+ }
244
+ const s = makeSkill(raw, baseName(path).slice(0, -'.md'.length), source, dirname(path), false, [], false, path);
245
+ return s ? [s] : [];
246
+ }
247
+ return [];
248
+ }
193
249
  /** 按名字取技能(大小写不敏感)。 */
194
250
  export function getSkill(skills, name) {
195
251
  const key = name.toLowerCase();
@@ -242,8 +298,14 @@ export function formatSkillList(skills) {
242
298
  return '没有可用技能。在 .ccli/skills/ 或 ~/.ccli/skills/ 放置 *.md 或 <名>/SKILL.md 即可定义。';
243
299
  }
244
300
  const lines = ['可用技能(/skill <名称> 调用):'];
301
+ const SOURCE_TAG = {
302
+ project: '项目',
303
+ user: '用户',
304
+ shared: '共享',
305
+ plugin: '插件',
306
+ };
245
307
  for (const s of skills) {
246
- const tag = s.origin.source === 'project' ? '项目' : '用户';
308
+ const tag = SOURCE_TAG[s.origin.source];
247
309
  const kind = s.origin.bundle ? '包' : '';
248
310
  const desc = s.description ? ` — ${s.description}` : '';
249
311
  lines.push(` ${s.name} [${tag}${kind}]${desc}`);
@@ -1 +1 @@
1
- {"version":3,"file":"skills.js","sourceRoot":"","sources":["../../src/config/skills.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"skills.js","sourceRoot":"","sources":["../../src/config/skills.ts"],"names":[],"mappings":"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"}