yingclaw 2.5.26 → 2.5.31

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/cli.js CHANGED
@@ -736,11 +736,16 @@ program
736
736
 
737
737
  console.log(chalk.dim(getStorageHint(file)));
738
738
  const displayedConfig = effectiveConfig;
739
+ const needsGatewayHint = process.platform !== 'darwin' && process.platform !== 'win32'
740
+ && isOpenAiCompatibleConfig(effectiveConfig);
739
741
  console.log(boxen(
740
742
  chalk.bold('Claude Code 终端已接入\n\n') +
741
743
  chalk.dim('Base URL ') + chalk.cyan(buildClaudeEnv(displayedConfig).ANTHROPIC_BASE_URL) + '\n' +
742
744
  chalk.dim('模型 ') + chalk.yellow(displayedConfig.model) + '\n\n' +
743
- chalk.white('需要启动时,在主菜单选择“启动 Claude Code”,或直接输入 ') + chalk.cyan.bold('claude') + '\n' +
745
+ (needsGatewayHint
746
+ ? chalk.yellow('注:OpenAI 兼容接口需要本机 Gateway,请在新终端运行 ') + chalk.cyan.bold('claw gateway') + chalk.yellow(' 并保持运行。\n\n')
747
+ : '') +
748
+ chalk.white('需要启动时,在主菜单选择”启动 Claude Code”,或直接输入 ') + chalk.cyan.bold('claude') + '\n' +
744
749
  chalk.dim(getActivationHint(file)),
745
750
  { padding: { top: 0, bottom: 0, left: 2, right: 2 }, borderStyle: 'round', borderColor: 'green', margin: { top: 1, bottom: 1 } }
746
751
  ));
@@ -848,12 +853,17 @@ program
848
853
  return;
849
854
  }
850
855
 
856
+ const vscodeNeedsGatewayHint = process.platform !== 'darwin' && process.platform !== 'win32'
857
+ && isOpenAiCompatibleConfig(effectiveConfig);
851
858
  console.log(boxen(
852
859
  chalk.bold('VS Code Claude Code 扩展已配置\n\n') +
853
860
  chalk.dim('共享设置 ') + chalk.cyan(result.claudeSettings.file) + '\n' +
854
861
  chalk.dim('VS Code ') + chalk.cyan(result.vscodeSettings.file) + '\n' +
855
862
  chalk.dim('主模型 ') + chalk.yellow(vscodeModel) + '\n' +
856
863
  chalk.dim('快速模型 ') + chalk.yellow(vscodeFastModel) + '\n\n' +
864
+ (vscodeNeedsGatewayHint
865
+ ? chalk.yellow('注:OpenAI 兼容接口需要本机 Gateway,请在新终端运行 ') + chalk.cyan.bold('claw gateway') + chalk.yellow(' 并保持运行。\n\n')
866
+ : '') +
857
867
  chalk.white('已写入 Claude Code settings.json 的 env,并关闭 VS Code 扩展登录提示。\n') +
858
868
  chalk.dim('如果 VS Code 已打开,请执行 Developer: Reload Window 或完全重启 VS Code。'),
859
869
  { padding: { top: 0, bottom: 0, left: 2, right: 2 }, borderStyle: 'round', borderColor: 'green', margin: { top: 1, bottom: 1 } }
@@ -1397,12 +1407,11 @@ program
1397
1407
  { padding: { top: 0, bottom: 0, left: 2, right: 2 }, borderStyle: 'round', borderColor: 'green', margin: { top: 1, bottom: 1 } }
1398
1408
  ));
1399
1409
  process.exit(0);
1400
- } else if (result.status === null) {
1401
- console.log(chalk.red('\nnpm 命令未找到,请确认 Node.js 和 npm 已正确安装后手动运行:'));
1402
- console.log(chalk.cyan('npm install -g yingclaw@latest'));
1403
1410
  } else {
1404
- console.log(chalk.red('\n升级失败,请手动运行:'));
1405
- console.log(chalk.cyan('npm install -g yingclaw@latest'));
1411
+ const hints = getInstallFailureHints(result, chalk);
1412
+ console.log(chalk.red('\n升级失败'));
1413
+ if (hints.length > 0) console.log(...hints);
1414
+ console.log(chalk.dim('\n手动运行:') + chalk.cyan('npm install -g yingclaw@latest'));
1406
1415
  }
1407
1416
  });
1408
1417
 
package/lib/config.js CHANGED
@@ -184,7 +184,7 @@ const PROVIDERS = {
184
184
  };
185
185
 
186
186
  const PREFERRED_MODEL_IDS = {
187
- qwen: ['qwen3-max', 'qwen3-plus', 'qwen3.5-plus'],
187
+ qwen: ['qwen3-max', 'qwen3-plus', 'qwen3.5-plus'],
188
188
  minimax: ['MiniMax-M2.7', 'MiniMax-M2.7-Turbo', 'MiniMax-M2.5'],
189
189
  glm: ['GLM-4.7', 'GLM-5.1', 'GLM-5-Turbo', 'GLM-4.5-Air'],
190
190
  mimo: ['mimo-v2.5-pro', 'mimo-v2.5', 'mimo-v2-flash'],
@@ -250,7 +250,7 @@ function parseModelIdsResponse(providerKey, data) {
250
250
  if (providerKey === 'bai') {
251
251
  return normalizeModelIds(providerKey, ids.filter(id => !id.includes('/')));
252
252
  }
253
- return normalizeModelIds(providerKey, ids);
253
+ return normalizeModelIds(providerKey, ids);
254
254
  }
255
255
 
256
256
  function normalizeAnthropicBaseUrl(baseUrl) {
package/lib/install.js CHANGED
@@ -1,3 +1,4 @@
1
+ const path = require('path');
1
2
  const { execSync } = require('child_process');
2
3
 
3
4
  function buildClaudeInstallCommand(network) {
@@ -20,12 +21,16 @@ function quoteWindowsBatchArg(value) {
20
21
  return `"${String(value).replace(/"/g, '""')}"`;
21
22
  }
22
23
 
23
- function buildWindowsYingclawUpgradeScript(network) {
24
- const { command, args } = buildYingclawUpgradeCommand(network);
25
- const commandLine = [command, ...args].map(quoteWindowsBatchArg).join(' ');
24
+ function buildWindowsYingclawUpgradeScript(network, options = {}) {
25
+ const nodePath = options.nodePath || process.execPath;
26
+ // 用绝对路径避免 PATH 里的残留 npm 被优先找到(System32 等位置)
27
+ const npmCmd = options.npmCmd || path.win32.join(path.win32.dirname(nodePath), 'npm.cmd');
28
+ const { args } = buildYingclawUpgradeCommand(network);
29
+ const commandLine = `call ${quoteWindowsBatchArg(npmCmd)} ${args.map(quoteWindowsBatchArg).join(' ')}`;
26
30
  return [
27
31
  '@echo off',
28
32
  'chcp 65001 >nul',
33
+ 'cd /d "%USERPROFILE%"',
29
34
  'echo yingclaw Windows updater',
30
35
  'echo.',
31
36
  'echo 当前 claw 进程退出后开始升级,避免 Windows 文件锁 EBUSY...',
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "yingclaw",
3
- "version": "2.5.26",
3
+ "version": "2.5.31",
4
4
  "description": "Claude Code × 国产大模型一键接入:DeepSeek、Kimi、火山方舟、Qwen、MiniMax、GLM、MiMo、自定义接口",
5
5
  "main": "index.js",
6
6
  "bin": {