yymaxapi 1.0.110 → 1.0.112

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.
Files changed (2) hide show
  1. package/bin/yymaxapi.js +19 -17
  2. package/package.json +1 -1
package/bin/yymaxapi.js CHANGED
@@ -1039,11 +1039,19 @@ function writeClaudeCodeSettings(baseUrl, apiKey, modelId = getDefaultClaudeMode
1039
1039
  try { settings = JSON.parse(fs.readFileSync(settingsPath, 'utf8')); } catch { settings = {}; }
1040
1040
  }
1041
1041
  const normalizedBaseUrl = baseUrl.replace(/\/+$/, '');
1042
+ const normalizedModelId = String(modelId || getDefaultClaudeModel().id).trim() || getDefaultClaudeModel().id;
1043
+ const pinnedOpusModel = (CLAUDE_MODELS.find(model => /opus/i.test(model.id)) || {}).id || 'claude-opus-4-7';
1044
+ const pinnedSonnetModel = (CLAUDE_MODELS.find(model => /sonnet/i.test(model.id)) || {}).id || 'claude-sonnet-4-6';
1045
+ const pinnedHaikuModel = (CLAUDE_MODELS.find(model => /haiku/i.test(model.id)) || {}).id || 'claude-haiku-4-5';
1042
1046
  settings.apiBaseUrl = normalizedBaseUrl;
1047
+ settings.model = normalizedModelId;
1043
1048
  if (!settings.env) settings.env = {};
1044
- settings.env.ANTHROPIC_API_KEY = apiKey;
1049
+ settings.env.ANTHROPIC_AUTH_TOKEN = apiKey;
1045
1050
  settings.env.ANTHROPIC_BASE_URL = normalizedBaseUrl;
1046
- delete settings.env.ANTHROPIC_AUTH_TOKEN;
1051
+ settings.env.ANTHROPIC_DEFAULT_OPUS_MODEL = pinnedOpusModel;
1052
+ settings.env.ANTHROPIC_DEFAULT_SONNET_MODEL = pinnedSonnetModel;
1053
+ settings.env.ANTHROPIC_DEFAULT_HAIKU_MODEL = pinnedHaikuModel;
1054
+ delete settings.env.ANTHROPIC_API_KEY;
1047
1055
  delete settings.availableModels;
1048
1056
  delete settings.env.ANTHROPIC_MODEL;
1049
1057
  if (!fs.existsSync(claudeDir)) fs.mkdirSync(claudeDir, { recursive: true });
@@ -3923,18 +3931,17 @@ function readClaudeCodeCliConfig() {
3923
3931
  const settings = readJsonIfExists(settingsPath) || {};
3924
3932
  const settingsEnv = settings.env && typeof settings.env === 'object' ? settings.env : {};
3925
3933
  const settingsApiKey = String(settingsEnv.ANTHROPIC_API_KEY || '').trim();
3926
- const settingsLegacyAuthToken = String(settingsEnv.ANTHROPIC_AUTH_TOKEN || '').trim();
3934
+ const settingsAuthToken = String(settingsEnv.ANTHROPIC_AUTH_TOKEN || '').trim();
3927
3935
  const settingsBaseUrl = String(settingsEnv.ANTHROPIC_BASE_URL || settings.apiBaseUrl || '').trim();
3928
3936
  return {
3929
3937
  settingsPath,
3930
3938
  modelId: settings.model || settingsEnv.ANTHROPIC_MODEL || process.env.ANTHROPIC_MODEL || getDefaultClaudeModel().id,
3931
3939
  baseUrl: settingsBaseUrl || process.env.ANTHROPIC_BASE_URL || '',
3932
- apiKey: settingsApiKey || settingsLegacyAuthToken || process.env.ANTHROPIC_API_KEY || process.env.ANTHROPIC_AUTH_TOKEN || process.env.CLAUDE_API_KEY || '',
3940
+ apiKey: settingsAuthToken || settingsApiKey || process.env.ANTHROPIC_AUTH_TOKEN || process.env.ANTHROPIC_API_KEY || process.env.CLAUDE_API_KEY || '',
3933
3941
  settingsBaseUrl,
3934
3942
  settingsApiKey,
3935
- settingsLegacyAuthToken,
3936
- hasLegacyAuthTokenInSettings: !!settingsLegacyAuthToken,
3937
- usesLegacyAuthTokenOnly: !settingsApiKey && !!settingsLegacyAuthToken,
3943
+ settingsAuthToken,
3944
+ settingsAuthMode: settingsAuthToken ? 'auth_token' : (settingsApiKey ? 'api_key' : ''),
3938
3945
  configured: fs.existsSync(settingsPath)
3939
3946
  };
3940
3947
  }
@@ -4053,15 +4060,8 @@ function testClaudeCodeCliConnection() {
4053
4060
 
4054
4061
  const config = readClaudeCodeCliConfig();
4055
4062
  if (!config.configured) return { name: 'Claude Code CLI', status: 'skipped', detail: '未检测到 ~/.claude/settings.json' };
4056
- if (config.usesLegacyAuthTokenOnly) {
4057
- return {
4058
- name: 'Claude Code CLI',
4059
- status: 'failed',
4060
- detail: '检测到旧版 Claude Code 配置字段 ANTHROPIC_AUTH_TOKEN,请重新运行 yymaxapi 以改写为 ANTHROPIC_API_KEY'
4061
- };
4062
- }
4063
- if (!config.settingsBaseUrl || !config.settingsApiKey) {
4064
- return { name: 'Claude Code CLI', status: 'failed', detail: 'Claude Code 配置缺少 settings.json 中的 Base URL 或 API Key' };
4063
+ if (!config.settingsBaseUrl || !config.apiKey) {
4064
+ return { name: 'Claude Code CLI', status: 'failed', detail: 'Claude Code 配置缺少 settings.json 中的 Base URL 或鉴权字段' };
4065
4065
  }
4066
4066
 
4067
4067
  const env = {
@@ -5435,7 +5435,9 @@ async function activateClaudeCode(paths, args = {}) {
5435
5435
  console.log(chalk.gray(' API Key: 已设置'));
5436
5436
  console.log(chalk.gray('\n 已写入:'));
5437
5437
  console.log(chalk.gray(' • ~/.claude/settings.json'));
5438
- console.log(chalk.gray(' • 最小字段: apiBaseUrl + env.ANTHROPIC_API_KEY + env.ANTHROPIC_BASE_URL'));
5438
+ console.log(chalk.gray(' • 关键字段: apiBaseUrl + model + env.ANTHROPIC_AUTH_TOKEN + env.ANTHROPIC_BASE_URL'));
5439
+ console.log(chalk.gray(' • Claude Code 走 Bearer Token 网关鉴权,避免落入官方登录 / 批准自定义 API Key 流程'));
5440
+ console.log(chalk.gray(' • 已钉住 Claude alias 默认版本,避免第三方中转回落到官方旧别名'));
5439
5441
  console.log(chalk.yellow('\n 提示: 如果 Claude Code 已在运行,重新打开一个会话即可读取新配置'));
5440
5442
 
5441
5443
  if (await confirmImmediateTest(args, '是否立即测试 Claude Code CLI 连接?')) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "yymaxapi",
3
- "version": "1.0.110",
3
+ "version": "1.0.112",
4
4
  "description": "跨平台 OpenClaw/Clawdbot 配置管理工具 - 管理中转地址、模型切换、API Keys、测速优化",
5
5
  "main": "bin/yymaxapi.js",
6
6
  "bin": {