base_parts_ai 1.0.50 → 1.0.52
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/lib/setapi_cc.js +44 -22
- package/lib/setapi_cx.js +5 -0
- package/package.json +1 -1
- package/test_jcc.js +27 -0
- package/test_jcx.js +26 -0
package/lib/setapi_cc.js
CHANGED
|
@@ -10,9 +10,37 @@
|
|
|
10
10
|
// inquirer@8 使用传统 prompt API
|
|
11
11
|
var inquirer = require('inquirer');
|
|
12
12
|
var utils = require('./ai_utils');
|
|
13
|
-
var
|
|
13
|
+
var childProcess = require('child_process');
|
|
14
14
|
|
|
15
|
-
|
|
15
|
+
/**
|
|
16
|
+
* 校验并安装渠道要求的 Claude Code 版本
|
|
17
|
+
* @param {string} requiredVer 渠道要求版本,latest 表示仅确保已安装
|
|
18
|
+
* @param {string} currentVer 当前检测到的 Claude 版本
|
|
19
|
+
*/
|
|
20
|
+
function ensureClaudeVersion(requiredVer, currentVer) {
|
|
21
|
+
// latest 表示只要求本机已安装 Claude,不强制覆盖用户已有的具体版本
|
|
22
|
+
if (requiredVer === 'latest' && currentVer) {
|
|
23
|
+
console.log('✅ Claude 已安装: ' + currentVer + ',渠道要求 latest,跳过重装');
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
if (requiredVer && requiredVer !== currentVer) {
|
|
27
|
+
console.log('\n⚠️ Claude 版本不匹配:当前 ' + (currentVer || '未知') + ',渠道要求 ' + requiredVer);
|
|
28
|
+
// 使用 npmmirror 镜像加速安装指定版本的 claude-code 包
|
|
29
|
+
var pkg = '@anthropic-ai/claude-code@' + requiredVer;
|
|
30
|
+
console.log('🔄 正在安装 ' + pkg);
|
|
31
|
+
try {
|
|
32
|
+
// --registry 指定镜像源加速下载,--force 覆盖已有版本,stdio: 'inherit' 让 npm 进度实时打印到终端
|
|
33
|
+
childProcess.execSync('npm install -g ' + pkg + ' --registry=https://registry.npmmirror.com --force', { stdio: 'inherit' });
|
|
34
|
+
console.log('✅ Claude 已安装到 ' + requiredVer);
|
|
35
|
+
} catch (e) {
|
|
36
|
+
console.error('❌ 版本安装失败: ' + e.message);
|
|
37
|
+
}
|
|
38
|
+
} else if (requiredVer) {
|
|
39
|
+
console.log('✅ Claude 版本匹配: ' + currentVer);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
async function setapiCc(cmd, buildCfg) {
|
|
16
44
|
var settings = utils.loadSettings(buildCfg.claudeSettingsPath);
|
|
17
45
|
var jccJson = utils.readJsonFile(buildCfg.jccJsonPath, {});
|
|
18
46
|
|
|
@@ -183,29 +211,23 @@ module.exports = async function (cmd, buildCfg) {
|
|
|
183
211
|
requiredVer = ccVersionList[ctxAnswer.selectedCtx];
|
|
184
212
|
}
|
|
185
213
|
|
|
186
|
-
// 检测当前 Claude
|
|
214
|
+
// 检测当前 Claude 版本是否满足渠道要求,不满足则通过 npm registry 安装
|
|
187
215
|
var currentVer = buildCfg.claudeVersion || '';
|
|
188
|
-
|
|
189
|
-
console.log('\n⚠️ Claude 版本不匹配:当前 ' + (currentVer || '未知') + ',渠道要求 ' + requiredVer);
|
|
190
|
-
// 使用 npmmirror 镜像加速安装指定版本的 claude-code 包
|
|
191
|
-
var pkg = '@anthropic-ai/claude-code@' + requiredVer;
|
|
192
|
-
console.log('🔄 正在安装 ' + pkg);
|
|
193
|
-
try {
|
|
194
|
-
// --registry 指定镜像源加速下载,--force 覆盖已有版本,stdio: 'inherit' 让 npm 进度实时打印到终端
|
|
195
|
-
execSync('npm install -g ' + pkg + ' --registry=https://registry.npmmirror.com --force', { stdio: 'inherit' });
|
|
196
|
-
console.log('✅ Claude 已安装到 ' + requiredVer);
|
|
197
|
-
} catch (e) {
|
|
198
|
-
console.error('❌ 版本安装失败: ' + e.message);
|
|
199
|
-
}
|
|
200
|
-
} else if (requiredVer) {
|
|
201
|
-
console.log('✅ Claude 版本匹配: ' + currentVer);
|
|
202
|
-
}
|
|
216
|
+
ensureClaudeVersion(requiredVer, currentVer);
|
|
203
217
|
|
|
204
|
-
// 如果是22版本,清除大小标记
|
|
205
|
-
if (settings.model && requiredVer === '2.1.22') {
|
|
206
|
-
|
|
207
|
-
}
|
|
218
|
+
// // 如果是22版本,清除大小标记
|
|
219
|
+
// if (settings.model && requiredVer === '2.1.22') {
|
|
220
|
+
// settings.model = settings.model.split('[')[0];
|
|
221
|
+
// }
|
|
222
|
+
// 删除以前选择的模型
|
|
223
|
+
delete settings.model;
|
|
208
224
|
|
|
209
225
|
// 写入 settings.json
|
|
210
226
|
utils.writeJsonFile(buildCfg.claudeSettingsPath, settings);
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
setapiCc._private = {
|
|
230
|
+
ensureClaudeVersion: ensureClaudeVersion,
|
|
211
231
|
};
|
|
232
|
+
|
|
233
|
+
module.exports = setapiCc;
|
package/lib/setapi_cx.js
CHANGED
|
@@ -294,6 +294,11 @@ async function resolveRequiredCodexVersion(selected) {
|
|
|
294
294
|
* @param {string} currentVer 当前检测到的 Codex 版本
|
|
295
295
|
*/
|
|
296
296
|
function ensureCodexVersion(requiredVer, currentVer) {
|
|
297
|
+
// latest 表示只要求本机已安装 Codex,不强制覆盖用户已有的具体版本
|
|
298
|
+
if (requiredVer === 'latest' && currentVer) {
|
|
299
|
+
console.log('✅ Codex 已安装: ' + currentVer + ',渠道要求 latest,跳过重装');
|
|
300
|
+
return;
|
|
301
|
+
}
|
|
297
302
|
if (requiredVer && requiredVer !== currentVer) {
|
|
298
303
|
console.log('\n⚠️ Codex 版本不匹配:当前 ' + (currentVer || '未知') + ',渠道要求 ' + requiredVer);
|
|
299
304
|
var pkg = '@openai/codex@' + requiredVer;
|
package/package.json
CHANGED
package/test_jcc.js
CHANGED
|
@@ -28,6 +28,7 @@ Object.keys(require.cache).forEach(function (k) { delete require.cache[k]; });
|
|
|
28
28
|
var utils = require('./lib/ai_utils');
|
|
29
29
|
var inquirer = require('inquirer');
|
|
30
30
|
var setapiCc = require('./lib/setapi_cc');
|
|
31
|
+
var childProcess = require('child_process');
|
|
31
32
|
|
|
32
33
|
/**
|
|
33
34
|
* 临时替换 inquirer.prompt,按队列返回交互结果
|
|
@@ -510,6 +511,32 @@ await (async function () {
|
|
|
510
511
|
if (!ok) { process.exit(1); }
|
|
511
512
|
})();
|
|
512
513
|
|
|
514
|
+
// ============================================================
|
|
515
|
+
// 测试 13:Claude latest 已安装时不重装,未安装时安装 latest
|
|
516
|
+
// ============================================================
|
|
517
|
+
console.log('\n======= Test 13: latest 仅在未安装时安装 =======');
|
|
518
|
+
(function () {
|
|
519
|
+
var oldExecSync = childProcess.execSync;
|
|
520
|
+
var commands = [];
|
|
521
|
+
childProcess.execSync = function (command) {
|
|
522
|
+
commands.push(command);
|
|
523
|
+
return '';
|
|
524
|
+
};
|
|
525
|
+
try {
|
|
526
|
+
setapiCc._private.ensureClaudeVersion('latest', '2.1.99');
|
|
527
|
+
setapiCc._private.ensureClaudeVersion('latest', '');
|
|
528
|
+
|
|
529
|
+
var ok = true;
|
|
530
|
+
ok = ok && commands.length === 1;
|
|
531
|
+
ok = ok && commands[0].indexOf('npm install -g @anthropic-ai/claude-code@latest') !== -1;
|
|
532
|
+
ok = ok && commands[0].indexOf('--registry=https://registry.npmmirror.com --force') !== -1;
|
|
533
|
+
console.log('✅ Test 13 通过:', ok);
|
|
534
|
+
if (!ok) { process.exit(1); }
|
|
535
|
+
} finally {
|
|
536
|
+
childProcess.execSync = oldExecSync;
|
|
537
|
+
}
|
|
538
|
+
})();
|
|
539
|
+
|
|
513
540
|
console.log('\n======= 所有测试完成 =======');
|
|
514
541
|
|
|
515
542
|
} // end runTests
|
package/test_jcx.js
CHANGED
|
@@ -454,6 +454,32 @@ async function runTests() {
|
|
|
454
454
|
}
|
|
455
455
|
});
|
|
456
456
|
|
|
457
|
+
// ============================================================
|
|
458
|
+
// 测试 8.1:Codex latest 已安装时不重装,未安装时安装 latest
|
|
459
|
+
// ============================================================
|
|
460
|
+
console.log('\n======= jcx Test 8.1: latest 仅在未安装时安装 =======');
|
|
461
|
+
(function () {
|
|
462
|
+
var oldExecSync = childProcess.execSync;
|
|
463
|
+
var commands = [];
|
|
464
|
+
childProcess.execSync = function (command) {
|
|
465
|
+
commands.push(command);
|
|
466
|
+
return '';
|
|
467
|
+
};
|
|
468
|
+
try {
|
|
469
|
+
privateApi.ensureCodexVersion('latest', '0.9.0');
|
|
470
|
+
privateApi.ensureCodexVersion('latest', '');
|
|
471
|
+
|
|
472
|
+
var ok = true;
|
|
473
|
+
ok = ok && commands.length === 1;
|
|
474
|
+
ok = ok && commands[0].indexOf('npm install -g @openai/codex@latest') !== -1;
|
|
475
|
+
ok = ok && commands[0].indexOf('--registry=https://registry.npmmirror.com --force') !== -1;
|
|
476
|
+
console.log('✅ Test 8.1 通过:', ok);
|
|
477
|
+
if (!ok) { process.exit(1); }
|
|
478
|
+
} finally {
|
|
479
|
+
childProcess.execSync = oldExecSync;
|
|
480
|
+
}
|
|
481
|
+
})();
|
|
482
|
+
|
|
457
483
|
console.log('\n======= jcx 所有测试完成 =======');
|
|
458
484
|
}
|
|
459
485
|
|