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.
- package/LICENSE +21 -0
- package/README.md +328 -0
- package/dist/commands/agent.d.ts +12 -0
- package/dist/commands/agent.d.ts.map +1 -0
- package/dist/commands/agent.js +311 -0
- package/dist/commands/agent.js.map +1 -0
- package/dist/commands/ask.d.ts +7 -0
- package/dist/commands/ask.d.ts.map +1 -0
- package/dist/commands/ask.js +52 -0
- package/dist/commands/ask.js.map +1 -0
- package/dist/commands/chat.d.ts +9 -0
- package/dist/commands/chat.d.ts.map +1 -0
- package/dist/commands/chat.js +129 -0
- package/dist/commands/chat.js.map +1 -0
- package/dist/commands/cmd.d.ts +6 -0
- package/dist/commands/cmd.d.ts.map +1 -0
- package/dist/commands/cmd.js +52 -0
- package/dist/commands/cmd.js.map +1 -0
- package/dist/commands/code.d.ts +8 -0
- package/dist/commands/code.d.ts.map +1 -0
- package/dist/commands/code.js +75 -0
- package/dist/commands/code.js.map +1 -0
- package/dist/commands/file.d.ts +7 -0
- package/dist/commands/file.d.ts.map +1 -0
- package/dist/commands/file.js +66 -0
- package/dist/commands/file.js.map +1 -0
- package/dist/commands/history.d.ts +5 -0
- package/dist/commands/history.d.ts.map +1 -0
- package/dist/commands/history.js +159 -0
- package/dist/commands/history.js.map +1 -0
- package/dist/commands/init.d.ts +2 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +144 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/install.d.ts +24 -0
- package/dist/commands/install.d.ts.map +1 -0
- package/dist/commands/install.js +328 -0
- package/dist/commands/install.js.map +1 -0
- package/dist/commands/model.d.ts +6 -0
- package/dist/commands/model.d.ts.map +1 -0
- package/dist/commands/model.js +128 -0
- package/dist/commands/model.js.map +1 -0
- package/dist/commands/pkg.d.ts +12 -0
- package/dist/commands/pkg.d.ts.map +1 -0
- package/dist/commands/pkg.js +132 -0
- package/dist/commands/pkg.js.map +1 -0
- package/dist/commands/run.d.ts +9 -0
- package/dist/commands/run.d.ts.map +1 -0
- package/dist/commands/run.js +185 -0
- package/dist/commands/run.js.map +1 -0
- package/dist/core/agentTask.d.ts +20 -0
- package/dist/core/agentTask.d.ts.map +1 -0
- package/dist/core/agentTask.js +81 -0
- package/dist/core/agentTask.js.map +1 -0
- package/dist/core/config.d.ts +41 -0
- package/dist/core/config.d.ts.map +1 -0
- package/dist/core/config.js +153 -0
- package/dist/core/config.js.map +1 -0
- package/dist/core/executor.d.ts +20 -0
- package/dist/core/executor.d.ts.map +1 -0
- package/dist/core/executor.js +68 -0
- package/dist/core/executor.js.map +1 -0
- package/dist/core/files.d.ts +24 -0
- package/dist/core/files.d.ts.map +1 -0
- package/dist/core/files.js +95 -0
- package/dist/core/files.js.map +1 -0
- package/dist/core/github.d.ts +32 -0
- package/dist/core/github.d.ts.map +1 -0
- package/dist/core/github.js +82 -0
- package/dist/core/github.js.map +1 -0
- package/dist/core/prompt.d.ts +9 -0
- package/dist/core/prompt.d.ts.map +1 -0
- package/dist/core/prompt.js +44 -0
- package/dist/core/prompt.js.map +1 -0
- package/dist/core/router.d.ts +16 -0
- package/dist/core/router.d.ts.map +1 -0
- package/dist/core/router.js +182 -0
- package/dist/core/router.js.map +1 -0
- package/dist/core/search.d.ts +14 -0
- package/dist/core/search.d.ts.map +1 -0
- package/dist/core/search.js +179 -0
- package/dist/core/search.js.map +1 -0
- package/dist/core/session.d.ts +38 -0
- package/dist/core/session.d.ts.map +1 -0
- package/dist/core/session.js +172 -0
- package/dist/core/session.js.map +1 -0
- package/dist/core/stream.d.ts +15 -0
- package/dist/core/stream.d.ts.map +1 -0
- package/dist/core/stream.js +102 -0
- package/dist/core/stream.js.map +1 -0
- package/dist/core/tools.d.ts +343 -0
- package/dist/core/tools.d.ts.map +1 -0
- package/dist/core/tools.js +293 -0
- package/dist/core/tools.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +372 -0
- package/dist/index.js.map +1 -0
- package/dist/ui/renderer.d.ts +17 -0
- package/dist/ui/renderer.d.ts.map +1 -0
- package/dist/ui/renderer.js +69 -0
- package/dist/ui/renderer.js.map +1 -0
- 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":"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"}
|
|
@@ -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"}
|