base_parts_ai 1.0.31 → 1.0.34
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/bin/jcc.js +19 -16
- package/lib/claude_utils.js +38 -6
- package/lib/setapi.js +2 -1
- package/package.json +1 -1
package/bin/jcc.js
CHANGED
|
@@ -96,32 +96,35 @@ function loadLib(libName) {
|
|
|
96
96
|
return require(libPath);
|
|
97
97
|
}
|
|
98
98
|
|
|
99
|
+
/**
|
|
100
|
+
* 公共命令执行流程:拉取配置 → 显示公告 → 执行业务模块 → 完成提示
|
|
101
|
+
* @param {string} libName lib 目录下的业务模块名(不含 .js)
|
|
102
|
+
* @param {object} opts commander 解析出的选项
|
|
103
|
+
*/
|
|
104
|
+
async function runCommand(libName, opts) {
|
|
105
|
+
var buildCfg = getBuildCfg(opts);
|
|
106
|
+
// 从服务端拉取渠道配置(含 jcc 自动升级检查)
|
|
107
|
+
var utils = loadLib('claude_utils');
|
|
108
|
+
await utils.fetchConfig(buildCfg);
|
|
109
|
+
// 显示公告,有公告时等待用户按回车继续
|
|
110
|
+
await utils.showNotice();
|
|
111
|
+
// 执行业务模块
|
|
112
|
+
await loadLib(libName)(opts, buildCfg);
|
|
113
|
+
console.log('\n✅ 完成!重启 Claude 后生效。');
|
|
114
|
+
}
|
|
115
|
+
|
|
99
116
|
// 命令:setapi —— 选择 AI 渠道,修改 Claude settings.json 中的 ANTHROPIC_BASE_URL
|
|
100
117
|
program
|
|
101
118
|
.command('setapi')
|
|
102
|
-
// .option('-c, --config <file>', 'Config file,default:jai_cfg.json')
|
|
103
119
|
.action(async function () {
|
|
104
|
-
|
|
105
|
-
var opts = this.opts();
|
|
106
|
-
var buildCfg = getBuildCfg(opts);
|
|
107
|
-
// 从服务端拉取渠道配置(含 jcc 自动升级检查)
|
|
108
|
-
await loadLib('claude_utils').fetchConfig(buildCfg);
|
|
109
|
-
await loadLib('setapi')(opts, buildCfg);
|
|
110
|
-
console.log("\nfinish");
|
|
120
|
+
await runCommand('setapi', this.opts());
|
|
111
121
|
});
|
|
112
122
|
|
|
113
123
|
// 命令:setkey —— 设置 AI Key,修改 Claude settings.json 中的 ANTHROPIC_API_KEY
|
|
114
124
|
program
|
|
115
125
|
.command('setkey')
|
|
116
|
-
// .option('-c, --config <file>', 'Config file,default:jai_cfg.json')
|
|
117
126
|
.action(async function () {
|
|
118
|
-
|
|
119
|
-
var opts = this.opts();
|
|
120
|
-
var buildCfg = getBuildCfg(opts);
|
|
121
|
-
// 从服务端拉取渠道配置(含 jcc 自动升级检查)
|
|
122
|
-
await loadLib('claude_utils').fetchConfig(buildCfg);
|
|
123
|
-
await loadLib('setkey')(opts, buildCfg);
|
|
124
|
-
console.log("\nfinish");
|
|
127
|
+
await runCommand('setkey', this.opts());
|
|
125
128
|
});
|
|
126
129
|
|
|
127
130
|
|
package/lib/claude_utils.js
CHANGED
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
var fs = require('fs');
|
|
9
9
|
var path = require('path');
|
|
10
10
|
var http = require('http');
|
|
11
|
+
var readline = require('readline');
|
|
11
12
|
var { execSync } = require('child_process');
|
|
12
13
|
|
|
13
14
|
// ============================================================
|
|
@@ -15,6 +16,9 @@ var { execSync } = require('child_process');
|
|
|
15
16
|
// ============================================================
|
|
16
17
|
var API_CHANNELS = [];
|
|
17
18
|
|
|
19
|
+
// 公告列表(运行时由 fetchConfig 从服务端拉取填充)
|
|
20
|
+
var noticeList = [];
|
|
21
|
+
|
|
18
22
|
/**
|
|
19
23
|
* 从服务端拉取渠道配置,并检查 jcc 自身是否需要升级
|
|
20
24
|
* @param {object} buildCfg getBuildCfg 返回的配置对象
|
|
@@ -38,6 +42,13 @@ function fetchConfig(buildCfg) {
|
|
|
38
42
|
});
|
|
39
43
|
console.log('[fetchConfig] 已拉取 ' + API_CHANNELS.length + ' 个渠道');
|
|
40
44
|
}
|
|
45
|
+
// 解析公告列表
|
|
46
|
+
if (Array.isArray(result.data.noticeList)) {
|
|
47
|
+
noticeList.length = 0;
|
|
48
|
+
result.data.noticeList.forEach(function (item) {
|
|
49
|
+
noticeList.push(item);
|
|
50
|
+
});
|
|
51
|
+
}
|
|
41
52
|
// 检查 jcc 自身版本,若需要升级则自动安装新版后退出
|
|
42
53
|
var currentVer = '';
|
|
43
54
|
try { currentVer = require('../package.json').version; } catch (e) { }
|
|
@@ -149,14 +160,34 @@ function maskKey(key) {
|
|
|
149
160
|
*/
|
|
150
161
|
function printCurrentInfo(settings) {
|
|
151
162
|
var info = getCurrentInfo(settings);
|
|
152
|
-
console.log('\n====== 当前 Claude 配置 ======');
|
|
163
|
+
// console.log('\n====== 当前 Claude 配置 ======');
|
|
164
|
+
let curSelectedChannel = '(' + (info.jid || '未设置') + ')';
|
|
153
165
|
if (info.channel) {
|
|
154
|
-
|
|
155
|
-
} else {
|
|
156
|
-
console.log('当前渠道: 未知/自定义 (' + (info.jid || '未设置') + ')');
|
|
166
|
+
curSelectedChannel = info.channel.name;
|
|
157
167
|
}
|
|
158
|
-
console.log('
|
|
159
|
-
console.log('
|
|
168
|
+
console.log('\x1b[33m当前渠道: ' + curSelectedChannel + ', Key: ' + maskKey(info.key) + '');
|
|
169
|
+
console.log('============================================================\x1b[0m\n');
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
/**
|
|
173
|
+
* 显示公告信息(黄色字体逐行输出),有公告时等待用户按回车继续
|
|
174
|
+
* @returns {Promise<void>}
|
|
175
|
+
*/
|
|
176
|
+
function showNotice() {
|
|
177
|
+
if (!noticeList.length) return Promise.resolve();
|
|
178
|
+
console.log('\n\x1b[33m=========================== 公告 ===========================');
|
|
179
|
+
noticeList.forEach(function (line) {
|
|
180
|
+
console.log(line);
|
|
181
|
+
});
|
|
182
|
+
console.log('============================================================\x1b[0m');
|
|
183
|
+
// // 等待用户按回车继续
|
|
184
|
+
// return new Promise(function (resolve) {
|
|
185
|
+
// var rl = readline.createInterface({ input: process.stdin, output: process.stdout });
|
|
186
|
+
// rl.question('按回车键继续...', function () {
|
|
187
|
+
// rl.close();
|
|
188
|
+
// resolve();
|
|
189
|
+
// });
|
|
190
|
+
// });
|
|
160
191
|
}
|
|
161
192
|
|
|
162
193
|
module.exports = {
|
|
@@ -168,4 +199,5 @@ module.exports = {
|
|
|
168
199
|
getCurrentInfo,
|
|
169
200
|
maskKey,
|
|
170
201
|
printCurrentInfo,
|
|
202
|
+
showNotice,
|
|
171
203
|
};
|
package/lib/setapi.js
CHANGED
|
@@ -27,10 +27,11 @@ module.exports = async function (cmd, buildCfg) {
|
|
|
27
27
|
};
|
|
28
28
|
});
|
|
29
29
|
|
|
30
|
-
//
|
|
30
|
+
// 弹出渠道选择列表,默认选中当前渠道
|
|
31
31
|
var channelId = await select({
|
|
32
32
|
message: '请选择 AI 渠道:',
|
|
33
33
|
choices: choices,
|
|
34
|
+
default: settings.__jid || undefined,
|
|
34
35
|
});
|
|
35
36
|
|
|
36
37
|
// 找到选中的渠道配置
|