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 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 { execSync } = require('child_process');
13
+ var childProcess = require('child_process');
14
14
 
15
- module.exports = async function (cmd, buildCfg) {
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 版本是否与渠道要求一致,不一致则通过 npm registry 安装
214
+ // 检测当前 Claude 版本是否满足渠道要求,不满足则通过 npm registry 安装
187
215
  var currentVer = buildCfg.claudeVersion || '';
188
- if (requiredVer && requiredVer !== currentVer) {
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
- settings.model = settings.model.split('[')[0];
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "base_parts_ai",
3
- "version": "1.0.50",
3
+ "version": "1.0.52",
4
4
  "description": "jaskle base_parts_ai",
5
5
  "main": "./main.js",
6
6
  "registry": true,
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