xx-ai-cli 0.1.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 (103) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +328 -0
  3. package/dist/commands/agent.d.ts +12 -0
  4. package/dist/commands/agent.d.ts.map +1 -0
  5. package/dist/commands/agent.js +311 -0
  6. package/dist/commands/agent.js.map +1 -0
  7. package/dist/commands/ask.d.ts +7 -0
  8. package/dist/commands/ask.d.ts.map +1 -0
  9. package/dist/commands/ask.js +52 -0
  10. package/dist/commands/ask.js.map +1 -0
  11. package/dist/commands/chat.d.ts +9 -0
  12. package/dist/commands/chat.d.ts.map +1 -0
  13. package/dist/commands/chat.js +129 -0
  14. package/dist/commands/chat.js.map +1 -0
  15. package/dist/commands/cmd.d.ts +6 -0
  16. package/dist/commands/cmd.d.ts.map +1 -0
  17. package/dist/commands/cmd.js +52 -0
  18. package/dist/commands/cmd.js.map +1 -0
  19. package/dist/commands/code.d.ts +8 -0
  20. package/dist/commands/code.d.ts.map +1 -0
  21. package/dist/commands/code.js +75 -0
  22. package/dist/commands/code.js.map +1 -0
  23. package/dist/commands/file.d.ts +7 -0
  24. package/dist/commands/file.d.ts.map +1 -0
  25. package/dist/commands/file.js +66 -0
  26. package/dist/commands/file.js.map +1 -0
  27. package/dist/commands/history.d.ts +5 -0
  28. package/dist/commands/history.d.ts.map +1 -0
  29. package/dist/commands/history.js +159 -0
  30. package/dist/commands/history.js.map +1 -0
  31. package/dist/commands/init.d.ts +2 -0
  32. package/dist/commands/init.d.ts.map +1 -0
  33. package/dist/commands/init.js +144 -0
  34. package/dist/commands/init.js.map +1 -0
  35. package/dist/commands/install.d.ts +24 -0
  36. package/dist/commands/install.d.ts.map +1 -0
  37. package/dist/commands/install.js +328 -0
  38. package/dist/commands/install.js.map +1 -0
  39. package/dist/commands/model.d.ts +6 -0
  40. package/dist/commands/model.d.ts.map +1 -0
  41. package/dist/commands/model.js +128 -0
  42. package/dist/commands/model.js.map +1 -0
  43. package/dist/commands/pkg.d.ts +12 -0
  44. package/dist/commands/pkg.d.ts.map +1 -0
  45. package/dist/commands/pkg.js +132 -0
  46. package/dist/commands/pkg.js.map +1 -0
  47. package/dist/commands/run.d.ts +9 -0
  48. package/dist/commands/run.d.ts.map +1 -0
  49. package/dist/commands/run.js +185 -0
  50. package/dist/commands/run.js.map +1 -0
  51. package/dist/core/agentTask.d.ts +20 -0
  52. package/dist/core/agentTask.d.ts.map +1 -0
  53. package/dist/core/agentTask.js +81 -0
  54. package/dist/core/agentTask.js.map +1 -0
  55. package/dist/core/config.d.ts +41 -0
  56. package/dist/core/config.d.ts.map +1 -0
  57. package/dist/core/config.js +153 -0
  58. package/dist/core/config.js.map +1 -0
  59. package/dist/core/executor.d.ts +20 -0
  60. package/dist/core/executor.d.ts.map +1 -0
  61. package/dist/core/executor.js +68 -0
  62. package/dist/core/executor.js.map +1 -0
  63. package/dist/core/files.d.ts +24 -0
  64. package/dist/core/files.d.ts.map +1 -0
  65. package/dist/core/files.js +95 -0
  66. package/dist/core/files.js.map +1 -0
  67. package/dist/core/github.d.ts +32 -0
  68. package/dist/core/github.d.ts.map +1 -0
  69. package/dist/core/github.js +82 -0
  70. package/dist/core/github.js.map +1 -0
  71. package/dist/core/prompt.d.ts +9 -0
  72. package/dist/core/prompt.d.ts.map +1 -0
  73. package/dist/core/prompt.js +44 -0
  74. package/dist/core/prompt.js.map +1 -0
  75. package/dist/core/router.d.ts +16 -0
  76. package/dist/core/router.d.ts.map +1 -0
  77. package/dist/core/router.js +182 -0
  78. package/dist/core/router.js.map +1 -0
  79. package/dist/core/search.d.ts +14 -0
  80. package/dist/core/search.d.ts.map +1 -0
  81. package/dist/core/search.js +179 -0
  82. package/dist/core/search.js.map +1 -0
  83. package/dist/core/session.d.ts +38 -0
  84. package/dist/core/session.d.ts.map +1 -0
  85. package/dist/core/session.js +172 -0
  86. package/dist/core/session.js.map +1 -0
  87. package/dist/core/stream.d.ts +15 -0
  88. package/dist/core/stream.d.ts.map +1 -0
  89. package/dist/core/stream.js +102 -0
  90. package/dist/core/stream.js.map +1 -0
  91. package/dist/core/tools.d.ts +343 -0
  92. package/dist/core/tools.d.ts.map +1 -0
  93. package/dist/core/tools.js +293 -0
  94. package/dist/core/tools.js.map +1 -0
  95. package/dist/index.d.ts +3 -0
  96. package/dist/index.d.ts.map +1 -0
  97. package/dist/index.js +372 -0
  98. package/dist/index.js.map +1 -0
  99. package/dist/ui/renderer.d.ts +17 -0
  100. package/dist/ui/renderer.d.ts.map +1 -0
  101. package/dist/ui/renderer.js +69 -0
  102. package/dist/ui/renderer.js.map +1 -0
  103. package/package.json +73 -0
@@ -0,0 +1,328 @@
1
+ import fs from 'fs';
2
+ import path from 'path';
3
+ import os from 'os';
4
+ import { pipeline } from 'stream/promises';
5
+ import { createWriteStream } from 'fs';
6
+ import ora from 'ora';
7
+ import chalk from 'chalk';
8
+ import { theme } from '../ui/renderer.js';
9
+ import { detectEnv, run, commandExists, runStream } from '../core/executor.js';
10
+ import { getLatestRelease, matchAsset, formatSize, searchRepo, } from '../core/github.js';
11
+ export const TOOL_REGISTRY = {
12
+ openclaw: {
13
+ name: 'openclaw',
14
+ description: '🦞 小龙虾 AI 助手',
15
+ github: 'openclaw/openclaw', // 待确认实际 GitHub 路径
16
+ checkCmd: 'openclaw --version',
17
+ docs: 'https://github.com/openclaw/openclaw',
18
+ },
19
+ };
20
+ // ─── 主安装入口 ───────────────────────────────────────────────
21
+ export async function installCommand(toolName, options = {}) {
22
+ console.log(`\n${theme.bold(`📦 安装工具: ${chalk.cyan(toolName)}`)}\n`);
23
+ // 1. 检测环境
24
+ const spinner = ora({ text: '检测运行环境...', spinner: 'dots', color: 'cyan' }).start();
25
+ const env = await detectEnv();
26
+ spinner.succeed(`环境: ${chalk.cyan(env.os)} / ${chalk.cyan(env.arch)} | Node: ${chalk.green(env.nodeVersion)}`);
27
+ printEnvSummary(env);
28
+ // 2. 查找工具定义
29
+ const toolDef = TOOL_REGISTRY[toolName.toLowerCase()];
30
+ if (!toolDef) {
31
+ // 未知工具 → 尝试从 GitHub 搜索
32
+ await installUnknown(toolName, env, options);
33
+ return;
34
+ }
35
+ // 3. 检测是否已安装
36
+ if (!options.force && toolDef.checkCmd) {
37
+ const alreadyInstalled = await commandExists(toolDef.checkCmd.split(' ')[0]);
38
+ if (alreadyInstalled) {
39
+ try {
40
+ const ver = await run(toolDef.checkCmd);
41
+ console.log(theme.success(`${toolDef.name} 已安装: ${ver}`));
42
+ console.log(theme.info('如需重新安装,请加 --force 参数'));
43
+ return;
44
+ }
45
+ catch {
46
+ // 继续安装流程
47
+ }
48
+ }
49
+ }
50
+ // 4. 选择安装策略
51
+ const method = options.method ?? 'auto';
52
+ await installTool(toolDef, env, method, options);
53
+ }
54
+ // ─── 安装已知工具 ─────────────────────────────────────────────
55
+ async function installTool(tool, env, method, options) {
56
+ // 自动选择最优安装方式
57
+ if (method === 'auto') {
58
+ if (tool.npm && env.hasNpm) {
59
+ await installViaNpm(tool, options);
60
+ }
61
+ else if (tool.brew && env.hasBrew && env.os === 'macos') {
62
+ await installViaBrew(tool, options);
63
+ }
64
+ else if (tool.github) {
65
+ await installViaGitHub(tool, env, options);
66
+ }
67
+ else {
68
+ console.log(theme.error(`无法确定 ${tool.name} 的安装方式`));
69
+ printManualInstall(tool);
70
+ }
71
+ return;
72
+ }
73
+ // 指定方式
74
+ switch (method) {
75
+ case 'npm':
76
+ if (!tool.npm) {
77
+ console.log(theme.error('该工具不支持 npm 安装'));
78
+ return;
79
+ }
80
+ await installViaNpm(tool, options);
81
+ break;
82
+ case 'brew':
83
+ if (!tool.brew) {
84
+ console.log(theme.error('该工具不支持 brew 安装'));
85
+ return;
86
+ }
87
+ await installViaBrew(tool, options);
88
+ break;
89
+ case 'github':
90
+ if (!tool.github) {
91
+ console.log(theme.error('该工具没有配置 GitHub 仓库'));
92
+ return;
93
+ }
94
+ await installViaGitHub(tool, env, options);
95
+ break;
96
+ }
97
+ }
98
+ // ─── npm 安装 ─────────────────────────────────────────────────
99
+ async function installViaNpm(tool, options) {
100
+ const pkg = options.version ? `${tool.npm}@${options.version}` : tool.npm;
101
+ const cmd = `npm install -g ${pkg}`;
102
+ console.log(`\n${theme.info(`安装方式: ${chalk.bold('npm')}`)}`);
103
+ console.log(theme.dim(`执行: ${cmd}\n`));
104
+ if (options.dryRun) {
105
+ console.log(theme.warning('[dry-run] 未实际执行'));
106
+ return;
107
+ }
108
+ const spinner = ora({ text: `npm 安装 ${pkg} 中...`, spinner: 'dots', color: 'green' }).start();
109
+ try {
110
+ const code = await runStream('npm', ['install', '-g', pkg], (data) => { spinner.stop(); process.stdout.write(chalk.dim(data)); }, (data) => { spinner.stop(); process.stdout.write(chalk.yellow(data)); });
111
+ spinner.stop();
112
+ if (code === 0) {
113
+ console.log('\n' + theme.success(`✔ ${tool.name} 安装成功!`));
114
+ await verifyInstall(tool);
115
+ }
116
+ else {
117
+ console.log('\n' + theme.error(`安装失败,exit code: ${code}`));
118
+ }
119
+ }
120
+ catch (err) {
121
+ spinner.fail(`npm 安装失败: ${err.message}`);
122
+ }
123
+ }
124
+ // ─── brew 安装 ────────────────────────────────────────────────
125
+ async function installViaBrew(tool, options) {
126
+ const pkg = tool.brew;
127
+ const cmd = `brew install ${pkg}`;
128
+ console.log(`\n${theme.info(`安装方式: ${chalk.bold('Homebrew')}`)}`);
129
+ console.log(theme.dim(`执行: ${cmd}\n`));
130
+ if (options.dryRun) {
131
+ console.log(theme.warning('[dry-run] 未实际执行'));
132
+ return;
133
+ }
134
+ const spinner = ora({ text: `brew 安装 ${pkg} 中...`, spinner: 'dots', color: 'green' }).start();
135
+ try {
136
+ const code = await runStream('brew', ['install', pkg], (data) => { spinner.stop(); process.stdout.write(chalk.dim(data)); }, (data) => { spinner.stop(); process.stdout.write(chalk.yellow(data)); });
137
+ spinner.stop();
138
+ if (code === 0) {
139
+ console.log('\n' + theme.success(`✔ ${tool.name} 安装成功!`));
140
+ await verifyInstall(tool);
141
+ }
142
+ else {
143
+ console.log('\n' + theme.error(`brew 安装失败,exit code: ${code}`));
144
+ }
145
+ }
146
+ catch (err) {
147
+ spinner.fail(`brew 安装失败: ${err.message}`);
148
+ }
149
+ }
150
+ // ─── GitHub Release 安装 ──────────────────────────────────────
151
+ async function installViaGitHub(tool, env, options) {
152
+ console.log(`\n${theme.info(`安装方式: ${chalk.bold('GitHub Release')}`)}`);
153
+ const [owner, repo] = tool.github.split('/');
154
+ const spinner = ora({ text: '获取最新 Release 信息...', spinner: 'dots' }).start();
155
+ let release;
156
+ try {
157
+ release = await getLatestRelease(owner, repo);
158
+ spinner.succeed(`最新版本: ${chalk.green(release.tag_name)} (${release.name})`);
159
+ }
160
+ catch (err) {
161
+ const msg = err.message;
162
+ if (msg.startsWith('NO_RELEASE:')) {
163
+ spinner.warn('该仓库暂未发布任何 Release 版本');
164
+ console.log(theme.info(`请访问仓库主页手动安装:`));
165
+ console.log(chalk.cyan(` https://github.com/${tool.github}`));
166
+ if (tool.docs)
167
+ console.log(chalk.cyan(` 文档:${tool.docs}`));
168
+ return;
169
+ }
170
+ if (msg.startsWith('RATE_LIMITED:')) {
171
+ spinner.warn('GitHub API 访问受限(匿名限流),建议设置 GITHUB_TOKEN 后重试:');
172
+ console.log(theme.dim(' export GITHUB_TOKEN=<你的 GitHub Personal Access Token>'));
173
+ console.log(theme.info(`\n也可直接访问:https://github.com/${tool.github}/releases`));
174
+ return;
175
+ }
176
+ spinner.fail(`获取 Release 失败: ${msg}`);
177
+ printManualInstall(tool);
178
+ return;
179
+ }
180
+ // 匹配合适的 asset
181
+ const asset = matchAsset(release.assets, env.os, env.arch);
182
+ if (!asset) {
183
+ console.log(theme.warning('未找到适合当前系统的安装包'));
184
+ console.log(theme.info(`请访问: ${release.html_url}`));
185
+ console.log('\n可用的安装包:');
186
+ release.assets.forEach((a) => {
187
+ console.log(` ${chalk.cyan(a.name)} ${chalk.dim(`(${formatSize(a.size)})`)}`);
188
+ });
189
+ return;
190
+ }
191
+ console.log(`\n${theme.info(`下载: ${chalk.cyan(asset.name)} ${chalk.dim(`(${formatSize(asset.size)})`)}`)}`);
192
+ console.log(theme.dim(`URL: ${asset.browser_download_url}`));
193
+ if (options.dryRun) {
194
+ console.log(theme.warning('[dry-run] 未实际下载'));
195
+ return;
196
+ }
197
+ // 下载文件
198
+ const tmpDir = os.tmpdir();
199
+ const tmpFile = path.join(tmpDir, asset.name);
200
+ const dlSpinner = ora({ text: '下载中...', spinner: 'dots', color: 'cyan' }).start();
201
+ try {
202
+ const res = await fetch(asset.browser_download_url, {
203
+ headers: { 'User-Agent': 'xx-ai-cli' },
204
+ redirect: 'follow',
205
+ });
206
+ if (!res.ok || !res.body)
207
+ throw new Error(`下载失败 [${res.status}]`);
208
+ await pipeline(res.body, createWriteStream(tmpFile));
209
+ dlSpinner.succeed(`下载完成: ${tmpFile}`);
210
+ }
211
+ catch (err) {
212
+ dlSpinner.fail(`下载失败: ${err.message}`);
213
+ return;
214
+ }
215
+ // 执行安装(解压 + 移动到 PATH)
216
+ await handleInstallPackage(tmpFile, asset.name, tool);
217
+ }
218
+ // ─── 处理安装包 ───────────────────────────────────────────────
219
+ async function handleInstallPackage(filePath, fileName, tool) {
220
+ const installDir = '/usr/local/bin';
221
+ const lower = fileName.toLowerCase();
222
+ const spinner = ora({ text: '正在安装...', spinner: 'dots', color: 'green' }).start();
223
+ try {
224
+ if (lower.endsWith('.tar.gz') || lower.endsWith('.tgz')) {
225
+ // 解压 tar.gz
226
+ const extractDir = path.join(os.tmpdir(), `${tool.name}-install`);
227
+ fs.mkdirSync(extractDir, { recursive: true });
228
+ await run(`tar -xzf "${filePath}" -C "${extractDir}"`);
229
+ // 找可执行文件
230
+ const files = fs.readdirSync(extractDir);
231
+ const binary = files.find((f) => f === tool.name || f.startsWith(tool.name));
232
+ if (binary) {
233
+ const src = path.join(extractDir, binary);
234
+ await run(`chmod +x "${src}" && sudo mv "${src}" "${installDir}/${tool.name}"`);
235
+ }
236
+ }
237
+ else if (lower.endsWith('.zip')) {
238
+ const extractDir = path.join(os.tmpdir(), `${tool.name}-install`);
239
+ fs.mkdirSync(extractDir, { recursive: true });
240
+ await run(`unzip -o "${filePath}" -d "${extractDir}"`);
241
+ const files = fs.readdirSync(extractDir);
242
+ const binary = files.find((f) => f === tool.name || f.startsWith(tool.name));
243
+ if (binary) {
244
+ const src = path.join(extractDir, binary);
245
+ await run(`chmod +x "${src}" && sudo mv "${src}" "${installDir}/${tool.name}"`);
246
+ }
247
+ }
248
+ else {
249
+ // 直接当作二进制处理
250
+ await run(`chmod +x "${filePath}" && sudo mv "${filePath}" "${installDir}/${tool.name}"`);
251
+ }
252
+ spinner.succeed(`安装完成 → ${installDir}/${tool.name}`);
253
+ await verifyInstall(tool);
254
+ }
255
+ catch (err) {
256
+ spinner.fail(`安装失败: ${err.message}`);
257
+ console.log(theme.info(`下载的文件保存在: ${filePath}`));
258
+ }
259
+ }
260
+ // ─── 未知工具:搜索 GitHub ────────────────────────────────────
261
+ async function installUnknown(toolName, env, options) {
262
+ console.log(theme.warning(`"${toolName}" 不在内置注册表中,尝试从 GitHub 搜索...\n`));
263
+ const spinner = ora({ text: '搜索中...', spinner: 'dots' }).start();
264
+ try {
265
+ const repos = await searchRepo(toolName);
266
+ spinner.stop();
267
+ if (!repos.length) {
268
+ console.log(theme.error(`未找到 "${toolName}" 相关仓库`));
269
+ return;
270
+ }
271
+ console.log(theme.bold('找到以下仓库:\n'));
272
+ repos.slice(0, 3).forEach((r, i) => {
273
+ console.log(` ${chalk.cyan(`[${i + 1}]`)} ${chalk.bold(r.full_name)} ⭐ ${r.stargazers_count}`);
274
+ console.log(` ${chalk.dim(r.description ?? '暂无描述')}`);
275
+ console.log(` ${chalk.dim(r.html_url)}\n`);
276
+ });
277
+ console.log(theme.info(`使用方式: xxcli install ${toolName} --github owner/${toolName}`));
278
+ }
279
+ catch (err) {
280
+ spinner.fail(`搜索失败: ${err.message}`);
281
+ }
282
+ }
283
+ // ─── 验证安装 ─────────────────────────────────────────────────
284
+ async function verifyInstall(tool) {
285
+ if (!tool.checkCmd)
286
+ return;
287
+ try {
288
+ const output = await run(tool.checkCmd);
289
+ console.log(theme.success(`验证成功: ${output}`));
290
+ }
291
+ catch {
292
+ console.log(theme.warning('安装完成,但验证命令执行失败,请重启终端后重试'));
293
+ }
294
+ }
295
+ // ─── 工具列表 ─────────────────────────────────────────────────
296
+ export function listTools() {
297
+ console.log('\n' + theme.bold('内置支持安装的工具:\n'));
298
+ for (const [key, tool] of Object.entries(TOOL_REGISTRY)) {
299
+ console.log(` ${chalk.cyan(key.padEnd(15))} ${tool.description}`);
300
+ if (tool.github)
301
+ console.log(` ${' '.repeat(15)} ${chalk.dim('GitHub: ' + tool.github)}`);
302
+ if (tool.docs)
303
+ console.log(` ${' '.repeat(15)} ${chalk.dim('文档: ' + tool.docs)}`);
304
+ console.log();
305
+ }
306
+ console.log(theme.dim('安装命令: xxcli install <工具名>'));
307
+ console.log(theme.dim('指定方式: xxcli install <工具名> --method npm|brew|github'));
308
+ console.log(theme.dim('模拟运行: xxcli install <工具名> --dry-run\n'));
309
+ }
310
+ // ─── 打印环境摘要 ─────────────────────────────────────────────
311
+ function printEnvSummary(env) {
312
+ const tools = [
313
+ env.hasNpm ? chalk.green('npm') : chalk.dim('npm'),
314
+ env.hasBrew ? chalk.green('brew') : chalk.dim('brew'),
315
+ env.hasCurl ? chalk.green('curl') : chalk.dim('curl'),
316
+ env.hasWget ? chalk.green('wget') : chalk.dim('wget'),
317
+ ];
318
+ console.log(theme.dim(`可用工具: ${tools.join(' ')}\n`));
319
+ }
320
+ // ─── 打印手动安装提示 ─────────────────────────────────────────
321
+ function printManualInstall(tool) {
322
+ console.log('\n' + theme.bold('手动安装:'));
323
+ if (tool.github)
324
+ console.log(` GitHub: https://github.com/${tool.github}/releases`);
325
+ if (tool.docs)
326
+ console.log(` 文档: ${tool.docs}`);
327
+ }
328
+ //# sourceMappingURL=install.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EAAE,iBAAiB,EAAE,MAAM,IAAI,CAAC;AACvC,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,aAAa,EAAE,SAAS,EAAgB,MAAM,qBAAqB,CAAC;AAC7F,OAAO,EACL,gBAAgB,EAChB,UAAU,EACV,UAAU,EACV,UAAU,GAEX,MAAM,mBAAmB,CAAC;AAkB3B,MAAM,CAAC,MAAM,aAAa,GAA4B;IACpD,QAAQ,EAAE;QACR,IAAI,EAAE,UAAU;QAChB,WAAW,EAAE,cAAc;QAC3B,MAAM,EAAE,mBAAmB,EAAI,kBAAkB;QACjD,QAAQ,EAAE,oBAAoB;QAC9B,IAAI,EAAE,sCAAsC;KAC7C;CACF,CAAC;AASF,4DAA4D;AAC5D,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,QAAgB,EAChB,UAA0B,EAAE;IAE5B,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,YAAY,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;IAErE,UAAU;IACV,MAAM,OAAO,GAAG,GAAG,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC;IACnF,MAAM,GAAG,GAAG,MAAM,SAAS,EAAE,CAAC;IAC9B,OAAO,CAAC,OAAO,CACb,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAC9F,CAAC;IACF,eAAe,CAAC,GAAG,CAAC,CAAC;IAErB,YAAY;IACZ,MAAM,OAAO,GAAG,aAAa,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC;IAEtD,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,uBAAuB;QACvB,MAAM,cAAc,CAAC,QAAQ,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;QAC7C,OAAO;IACT,CAAC;IAED,aAAa;IACb,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;QACvC,MAAM,gBAAgB,GAAG,MAAM,aAAa,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7E,IAAI,gBAAgB,EAAE,CAAC;YACrB,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;gBACxC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,SAAS,GAAG,EAAE,CAAC,CAAC,CAAC;gBAC1D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC,CAAC;gBAChD,OAAO;YACT,CAAC;YAAC,MAAM,CAAC;gBACP,SAAS;YACX,CAAC;QACH,CAAC;IACH,CAAC;IAED,YAAY;IACZ,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,MAAM,CAAC;IACxC,MAAM,WAAW,CAAC,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;AACnD,CAAC;AAED,2DAA2D;AAC3D,KAAK,UAAU,WAAW,CACxB,IAAa,EACb,GAAY,EACZ,MAAc,EACd,OAAuB;IAEvB,aAAa;IACb,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;QACtB,IAAI,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;YAC3B,MAAM,aAAa,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACrC,CAAC;aAAM,IAAI,IAAI,CAAC,IAAI,IAAI,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,EAAE,KAAK,OAAO,EAAE,CAAC;YAC1D,MAAM,cAAc,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACtC,CAAC;aAAM,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YACvB,MAAM,gBAAgB,CAAC,IAAI,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;QAC7C,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,IAAI,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC;YACpD,kBAAkB,CAAC,IAAI,CAAC,CAAC;QAC3B,CAAC;QACD,OAAO;IACT,CAAC;IAED,OAAO;IACP,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,KAAK;YACR,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;gBAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC;gBAAC,OAAO;YAAC,CAAC;YACrE,MAAM,aAAa,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YACnC,MAAM;QACR,KAAK,MAAM;YACT,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;gBAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC;gBAAC,OAAO;YAAC,CAAC;YACvE,MAAM,cAAc,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YACpC,MAAM;QACR,KAAK,QAAQ;YACX,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;gBAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC,CAAC;gBAAC,OAAO;YAAC,CAAC;YAC5E,MAAM,gBAAgB,CAAC,IAAI,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;YAC3C,MAAM;IACV,CAAC;AACH,CAAC;AAED,+DAA+D;AAC/D,KAAK,UAAU,aAAa,CAAC,IAAa,EAAE,OAAuB;IACjE,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAI,CAAC;IAC3E,MAAM,GAAG,GAAG,kBAAkB,GAAG,EAAE,CAAC;IAEpC,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,SAAS,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAC7D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC;IAEvC,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACnB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC;QAC9C,OAAO;IACT,CAAC;IAED,MAAM,OAAO,GAAG,GAAG,CAAC,EAAE,IAAI,EAAE,UAAU,GAAG,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC;IAC7F,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,SAAS,CAC1B,KAAK,EAAE,CAAC,SAAS,EAAE,IAAI,EAAE,GAAG,CAAC,EAC7B,CAAC,IAAI,EAAE,EAAE,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EACpE,CAAC,IAAI,EAAE,EAAE,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CACxE,CAAC;QACF,OAAO,CAAC,IAAI,EAAE,CAAC;QACf,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;YACf,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC;YAC1D,MAAM,aAAa,CAAC,IAAI,CAAC,CAAC;QAC5B,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,mBAAmB,IAAI,EAAE,CAAC,CAAC,CAAC;QAC7D,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,IAAI,CAAC,aAAc,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;IACtD,CAAC;AACH,CAAC;AAED,+DAA+D;AAC/D,KAAK,UAAU,cAAc,CAAC,IAAa,EAAE,OAAuB;IAClE,MAAM,GAAG,GAAG,IAAI,CAAC,IAAK,CAAC;IACvB,MAAM,GAAG,GAAG,gBAAgB,GAAG,EAAE,CAAC;IAElC,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,SAAS,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAClE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC;IAEvC,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACnB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC;QAC9C,OAAO;IACT,CAAC;IAED,MAAM,OAAO,GAAG,GAAG,CAAC,EAAE,IAAI,EAAE,WAAW,GAAG,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC;IAC9F,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,SAAS,CAC1B,MAAM,EAAE,CAAC,SAAS,EAAE,GAAG,CAAC,EACxB,CAAC,IAAI,EAAE,EAAE,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EACpE,CAAC,IAAI,EAAE,EAAE,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CACxE,CAAC;QACF,OAAO,CAAC,IAAI,EAAE,CAAC;QACf,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;YACf,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC;YAC1D,MAAM,aAAa,CAAC,IAAI,CAAC,CAAC;QAC5B,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,wBAAwB,IAAI,EAAE,CAAC,CAAC,CAAC;QAClE,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,IAAI,CAAC,cAAe,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;IACvD,CAAC;AACH,CAAC;AAED,+DAA+D;AAC/D,KAAK,UAAU,gBAAgB,CAC7B,IAAa,EACb,GAAY,EACZ,OAAuB;IAEvB,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,SAAS,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAExE,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,IAAI,CAAC,MAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC9C,MAAM,OAAO,GAAG,GAAG,CAAC,EAAE,IAAI,EAAE,oBAAoB,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC;IAE7E,IAAI,OAAsB,CAAC;IAC3B,IAAI,CAAC;QACH,OAAO,GAAG,MAAM,gBAAgB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QAC9C,OAAO,CAAC,OAAO,CAAC,SAAS,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,OAAO,CAAC,IAAI,GAAG,CAAC,CAAC;IAC9E,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,GAAG,GAAI,GAAa,CAAC,OAAO,CAAC;QAEnC,IAAI,GAAG,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;YAClC,OAAO,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;YACrC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC;YACxC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,wBAAwB,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;YAC/D,IAAI,IAAI,CAAC,IAAI;gBAAE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;YAC5D,OAAO;QACT,CAAC;QAED,IAAI,GAAG,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;YACpC,OAAO,CAAC,IAAI,CAAC,8CAA8C,CAAC,CAAC;YAC7D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,yDAAyD,CAAC,CAAC,CAAC;YAClF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,+BAA+B,IAAI,CAAC,MAAM,WAAW,CAAC,CAAC,CAAC;YAC/E,OAAO;QACT,CAAC;QAED,OAAO,CAAC,IAAI,CAAC,kBAAkB,GAAG,EAAE,CAAC,CAAC;QACtC,kBAAkB,CAAC,IAAI,CAAC,CAAC;QACzB,OAAO;IACT,CAAC;IAED,cAAc;IACd,MAAM,KAAK,GAAG,UAAU,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;IAC3D,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC;QAC5C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;QACpD,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QACzB,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;YAC3B,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACjF,CAAC,CAAC,CAAC;QACH,OAAO;IACT,CAAC;IAED,OAAO,CAAC,GAAG,CACT,KAAK,KAAK,CAAC,IAAI,CAAC,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAC/F,CAAC;IACF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,KAAK,CAAC,oBAAoB,EAAE,CAAC,CAAC,CAAC;IAE7D,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACnB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC;QAC9C,OAAO;IACT,CAAC;IAED,OAAO;IACP,MAAM,MAAM,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC;IAC3B,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;IAE9C,MAAM,SAAS,GAAG,GAAG,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC;IAClF,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,KAAK,CAAC,oBAAoB,EAAE;YAClD,OAAO,EAAE,EAAE,YAAY,EAAE,WAAW,EAAE;YACtC,QAAQ,EAAE,QAAQ;SACnB,CAAC,CAAC;QAEH,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI;YAAE,MAAM,IAAI,KAAK,CAAC,SAAS,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC;QAElE,MAAM,QAAQ,CACZ,GAAG,CAAC,IAAwC,EAC5C,iBAAiB,CAAC,OAAO,CAAC,CAC3B,CAAC;QACF,SAAS,CAAC,OAAO,CAAC,SAAS,OAAO,EAAE,CAAC,CAAC;IACxC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,SAAS,CAAC,IAAI,CAAC,SAAU,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;QAClD,OAAO;IACT,CAAC;IAED,sBAAsB;IACtB,MAAM,oBAAoB,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AACxD,CAAC;AAED,4DAA4D;AAC5D,KAAK,UAAU,oBAAoB,CACjC,QAAgB,EAChB,QAAgB,EAChB,IAAa;IAEb,MAAM,UAAU,GAAG,gBAAgB,CAAC;IACpC,MAAM,KAAK,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC;IAErC,MAAM,OAAO,GAAG,GAAG,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC;IAElF,IAAI,CAAC;QACH,IAAI,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YACxD,YAAY;YACZ,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,GAAG,IAAI,CAAC,IAAI,UAAU,CAAC,CAAC;YAClE,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAC9C,MAAM,GAAG,CAAC,aAAa,QAAQ,SAAS,UAAU,GAAG,CAAC,CAAC;YAEvD,SAAS;YACT,MAAM,KAAK,GAAG,EAAE,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;YACzC,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YAC7E,IAAI,MAAM,EAAE,CAAC;gBACX,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;gBAC1C,MAAM,GAAG,CAAC,aAAa,GAAG,iBAAiB,GAAG,MAAM,UAAU,IAAI,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;YAClF,CAAC;QACH,CAAC;aAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YAClC,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,GAAG,IAAI,CAAC,IAAI,UAAU,CAAC,CAAC;YAClE,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAC9C,MAAM,GAAG,CAAC,aAAa,QAAQ,SAAS,UAAU,GAAG,CAAC,CAAC;YACvD,MAAM,KAAK,GAAG,EAAE,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;YACzC,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YAC7E,IAAI,MAAM,EAAE,CAAC;gBACX,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;gBAC1C,MAAM,GAAG,CAAC,aAAa,GAAG,iBAAiB,GAAG,MAAM,UAAU,IAAI,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;YAClF,CAAC;QACH,CAAC;aAAM,CAAC;YACN,YAAY;YACZ,MAAM,GAAG,CAAC,aAAa,QAAQ,iBAAiB,QAAQ,MAAM,UAAU,IAAI,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;QAC5F,CAAC;QAED,OAAO,CAAC,OAAO,CAAC,UAAU,UAAU,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QACrD,MAAM,aAAa,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,IAAI,CAAC,SAAU,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;QAChD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,QAAQ,EAAE,CAAC,CAAC,CAAC;IACnD,CAAC;AACH,CAAC;AAED,0DAA0D;AAC1D,KAAK,UAAU,cAAc,CAC3B,QAAgB,EAChB,GAAY,EACZ,OAAuB;IAEvB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,QAAQ,+BAA+B,CAAC,CAAC,CAAC;IAExE,MAAM,OAAO,GAAG,GAAG,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC;IACjE,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,MAAM,UAAU,CAAC,QAAQ,CAAC,CAAC;QACzC,OAAO,CAAC,IAAI,EAAE,CAAC;QAEf,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;YAClB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,QAAQ,QAAQ,CAAC,CAAC,CAAC;YACnD,OAAO;QACT,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;QACrC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;YACjC,OAAO,CAAC,GAAG,CACT,KAAK,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,gBAAgB,EAAE,CACnF,CAAC;YACF,OAAO,CAAC,GAAG,CAAC,SAAS,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW,IAAI,MAAM,CAAC,EAAE,CAAC,CAAC;YAC3D,OAAO,CAAC,GAAG,CAAC,SAAS,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAClD,CAAC,CAAC,CAAC;QAEH,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,IAAI,CAAC,uBAAuB,QAAQ,mBAAmB,QAAQ,EAAE,CAAC,CACzE,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,IAAI,CAAC,SAAU,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;IAClD,CAAC;AACH,CAAC;AAED,6DAA6D;AAC7D,KAAK,UAAU,aAAa,CAAC,IAAa;IACxC,IAAI,CAAC,IAAI,CAAC,QAAQ;QAAE,OAAO;IAE3B,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACxC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,MAAM,EAAE,CAAC,CAAC,CAAC;IAChD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,yBAAyB,CAAC,CAAC,CAAC;IACxD,CAAC;AACH,CAAC;AAED,6DAA6D;AAC7D,MAAM,UAAU,SAAS;IACvB,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC;IAC/C,KAAK,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,CAAC;QACxD,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;QACnE,IAAI,IAAI,CAAC,MAAM;YAAE,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAC3F,IAAI,IAAI,CAAC,IAAI;YAAE,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACrF,OAAO,CAAC,GAAG,EAAE,CAAC;IAChB,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC,CAAC;IACpD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,oDAAoD,CAAC,CAAC,CAAC;IAC7E,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,uCAAuC,CAAC,CAAC,CAAC;AAClE,CAAC;AAED,2DAA2D;AAC3D,SAAS,eAAe,CAAC,GAAY;IACnC,MAAM,KAAK,GAAG;QACZ,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC;QAClD,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC;QACrD,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC;QACrD,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC;KACtD,CAAC;IACF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACxD,CAAC;AAED,yDAAyD;AACzD,SAAS,kBAAkB,CAAC,IAAa;IACvC,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;IACxC,IAAI,IAAI,CAAC,MAAM;QAAE,OAAO,CAAC,GAAG,CAAC,gCAAgC,IAAI,CAAC,MAAM,WAAW,CAAC,CAAC;IACrF,IAAI,IAAI,CAAC,IAAI;QAAE,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;AACrD,CAAC"}
@@ -0,0 +1,6 @@
1
+ export declare function modelList(): void;
2
+ export declare function modelUse(provider: string): void;
3
+ export declare function modelSetKey(provider: string, apiKey: string, model?: string, baseURL?: string): Promise<void>;
4
+ export declare function configShow(): void;
5
+ export declare function configSet(key: string, value: string): void;
6
+ //# sourceMappingURL=model.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../../src/commands/model.ts"],"names":[],"mappings":"AAmBA,wBAAgB,SAAS,IAAI,IAAI,CAwChC;AAED,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAU/C;AAED,wBAAsB,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAuCnH;AAED,wBAAgB,UAAU,IAAI,IAAI,CA4BjC;AAED,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAc1D"}
@@ -0,0 +1,128 @@
1
+ import chalk from 'chalk';
2
+ import { config, MODEL_DEFAULTS, PROVIDER_LABELS, PROVIDER_ENV_VARS, getEnvApiKey, } from '../core/config.js';
3
+ import { theme } from '../ui/renderer.js';
4
+ const ALL_PROVIDERS = Object.keys(MODEL_DEFAULTS);
5
+ /** 将 API Key 脱敏显示:sk-abcd...efgh */
6
+ function maskApiKey(key) {
7
+ if (key.length <= 8)
8
+ return '****';
9
+ return `${key.slice(0, 6)}${'*'.repeat(6)}${key.slice(-4)}`;
10
+ }
11
+ export function modelList() {
12
+ const defaultProvider = config.get('defaultProvider');
13
+ const providers = config.get('providers');
14
+ console.log('\n' + theme.bold('支持的模型列表:\n'));
15
+ for (const p of ALL_PROVIDERS) {
16
+ const label = PROVIDER_LABELS[p];
17
+ const defaults = MODEL_DEFAULTS[p];
18
+ const saved = providers[p];
19
+ const envKey = getEnvApiKey(p);
20
+ const hasKey = !!(envKey ?? saved?.apiKey);
21
+ const isDefault = p === defaultProvider;
22
+ const keySource = envKey ? chalk.cyan('[环境变量]') : chalk.dim('[配置文件]');
23
+ const statusIcon = hasKey ? chalk.green('✔') : chalk.dim('✗');
24
+ const defaultTag = isDefault ? chalk.bgGreen.black(' 默认 ') : '';
25
+ const keyStatus = hasKey
26
+ ? `${chalk.green('已配置')} ${keySource} ${chalk.dim(maskApiKey(envKey ?? saved.apiKey))}`
27
+ : chalk.dim('未配置 API Key');
28
+ // 实际生效的 baseURL 和 model(优先用用户保存的)
29
+ const activeBaseURL = saved?.baseURL ?? defaults.baseURL ?? '';
30
+ const activeModel = saved?.model ?? defaults.model;
31
+ const isCustomURL = saved?.baseURL && saved.baseURL !== defaults.baseURL;
32
+ console.log(` ${statusIcon} ${chalk.bold(label.padEnd(20))} ${defaultTag}`);
33
+ console.log(` 模型: ${chalk.cyan(activeModel)} 密钥: ${keyStatus}`);
34
+ console.log(` API: ${chalk.dim(activeBaseURL)}${isCustomURL ? chalk.yellow(' ⚡ 专属地址') : ''}`);
35
+ console.log();
36
+ }
37
+ console.log(theme.dim(` 配置文件: ${config.path}`));
38
+ console.log(theme.dim(' 💡 也可通过环境变量设置 Key(不落盘):export DEEPSEEK_API_KEY=sk-xxx\n'));
39
+ }
40
+ export function modelUse(provider) {
41
+ if (!ALL_PROVIDERS.includes(provider)) {
42
+ console.log(theme.error(`不支持的模型: ${provider}`));
43
+ console.log(theme.info(`支持: ${ALL_PROVIDERS.join(', ')}`));
44
+ process.exit(1);
45
+ }
46
+ const p = provider;
47
+ config.setDefault(p);
48
+ console.log(theme.success(`已切换默认模型为: ${PROVIDER_LABELS[p]}`));
49
+ }
50
+ export async function modelSetKey(provider, apiKey, model, baseURL) {
51
+ if (!ALL_PROVIDERS.includes(provider)) {
52
+ console.log(theme.error(`不支持的模型: ${provider}`));
53
+ console.log(theme.info(`支持: ${ALL_PROVIDERS.join(', ')}`));
54
+ process.exit(1);
55
+ }
56
+ const p = provider;
57
+ let finalKey = apiKey;
58
+ // 如果 apiKey 为占位符或未传入,则使用隐藏回显交互式输入(不出现在命令行历史)
59
+ if (!finalKey || finalKey === '-') {
60
+ const { default: readline } = await import('readline');
61
+ const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
62
+ finalKey = await new Promise((resolve) => {
63
+ // 关闭回显以隐藏输入
64
+ if (process.stdout.isTTY)
65
+ process.stdout.write('\x1B[?');
66
+ process.stdin.setRawMode?.(false);
67
+ rl.question(`请输入 ${chalk.bold(PROVIDER_LABELS[p])} 的 API Key(输入不会显示):`, (val) => {
68
+ rl.close();
69
+ console.log(); // 换行
70
+ resolve(val.trim());
71
+ });
72
+ });
73
+ }
74
+ if (!finalKey) {
75
+ console.log(theme.error('API Key 不能为空'));
76
+ process.exit(1);
77
+ }
78
+ config.setProvider(p, finalKey, model, baseURL);
79
+ console.log(theme.success(`✔ 已保存 ${PROVIDER_LABELS[p]} 的 API Key ${chalk.dim(`(${maskApiKey(finalKey)})`)}`));
80
+ if (baseURL)
81
+ console.log(theme.dim(` BaseURL: ${baseURL}`));
82
+ console.log(theme.dim(`配置文件: ${config.path}`));
83
+ console.log(theme.dim(`💡 Key 仅存储在本机,不会上传至任何服务器`));
84
+ }
85
+ export function configShow() {
86
+ const all = config.getAll();
87
+ console.log('\n' + theme.bold('当前配置:\n'));
88
+ console.log(` 默认模型: ${chalk.cyan(PROVIDER_LABELS[all.defaultProvider])}`);
89
+ console.log(` 流式输出: ${all.stream ? chalk.green('开启') : chalk.dim('关闭')}`);
90
+ console.log(` 历史长度: ${all.historySize} 条`);
91
+ console.log(` 配置文件: ${chalk.dim(config.path)}`);
92
+ // 已配置的 Key(脱敏展示)
93
+ console.log('\n' + theme.bold(' 已配置的模型密钥:\n'));
94
+ for (const p of ALL_PROVIDERS) {
95
+ const envKey = getEnvApiKey(p);
96
+ const saved = all.providers[p];
97
+ const key = envKey ?? saved?.apiKey;
98
+ if (key) {
99
+ const src = envKey ? chalk.cyan('环境变量') : chalk.dim('配置文件');
100
+ console.log(` ${chalk.green('●')} ${PROVIDER_LABELS[p].padEnd(22)} ${maskApiKey(key)} ${chalk.dim('来源:')} ${src}`);
101
+ }
102
+ else {
103
+ console.log(` ${chalk.dim('○')} ${chalk.dim(PROVIDER_LABELS[p])}`);
104
+ }
105
+ }
106
+ console.log('\n' + theme.dim(' 🔒 Key 仅存储在本机配置文件中,从不上传'));
107
+ console.log(theme.dim(' 💡 也可通过环境变量设置,避免写入磁盘:'));
108
+ for (const p of ALL_PROVIDERS) {
109
+ console.log(theme.dim(` export ${PROVIDER_ENV_VARS[p]}=your-key-here`));
110
+ }
111
+ console.log();
112
+ }
113
+ export function configSet(key, value) {
114
+ switch (key) {
115
+ case 'stream':
116
+ config.set('stream', value === 'true' || value === '1');
117
+ console.log(theme.success(`stream 已设置为 ${value}`));
118
+ break;
119
+ case 'historySize':
120
+ config.set('historySize', parseInt(value, 10));
121
+ console.log(theme.success(`historySize 已设置为 ${value}`));
122
+ break;
123
+ default:
124
+ console.log(theme.error(`未知配置项: ${key}`));
125
+ console.log(theme.info('可用配置项: stream, historySize'));
126
+ }
127
+ }
128
+ //# sourceMappingURL=model.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model.js","sourceRoot":"","sources":["../../src/commands/model.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ export type PkgManager = 'npm' | 'brew' | 'pip';
2
+ export interface PkgOptions {
3
+ global?: boolean;
4
+ dev?: boolean;
5
+ manager?: PkgManager;
6
+ }
7
+ export declare function pkgSearch(query: string): Promise<void>;
8
+ export declare function pkgInfo(pkgName: string): Promise<void>;
9
+ export declare function pkgInstall(pkgName: string, options?: PkgOptions): Promise<void>;
10
+ export declare function pkgUninstall(pkgName: string, isGlobal?: boolean): Promise<void>;
11
+ export declare function pkgList(isGlobal?: boolean): Promise<void>;
12
+ //# sourceMappingURL=pkg.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pkg.d.ts","sourceRoot":"","sources":["../../src/commands/pkg.ts"],"names":[],"mappings":"AAKA,MAAM,MAAM,UAAU,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,CAAC;AAEhD,MAAM,WAAW,UAAU;IACzB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,OAAO,CAAC,EAAE,UAAU,CAAC;CACtB;AAGD,wBAAsB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAmC5D;AAGD,wBAAsB,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAsC5D;AAGD,wBAAsB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,UAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAkCzF;AAGD,wBAAsB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,UAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAenF;AAGD,wBAAsB,OAAO,CAAC,QAAQ,UAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAU7D"}