ccman 3.3.14 → 3.3.15-beta.0

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/dist/index.js +72 -9
  2. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -15,7 +15,7 @@ var init_package = __esm({
15
15
  "../core/package.json"() {
16
16
  package_default = {
17
17
  name: "@ccman/core",
18
- version: "3.3.14",
18
+ version: "3.3.15-beta.0",
19
19
  type: "module",
20
20
  description: "Core business logic for ccman - Manage Codex, Claude Code, Gemini CLI, OpenCode, OpenClaw, and MCP configurations",
21
21
  main: "./dist/index.js",
@@ -1219,6 +1219,40 @@ function loadExistingJSON(filePath) {
1219
1219
  return null;
1220
1220
  }
1221
1221
  }
1222
+ function isRecord(value) {
1223
+ return typeof value === "object" && value !== null && !Array.isArray(value);
1224
+ }
1225
+ function forcePrimaryModelReasoning(models) {
1226
+ if (!Array.isArray(models))
1227
+ return models;
1228
+ return models.map((item) => {
1229
+ if (!isRecord(item))
1230
+ return item;
1231
+ const modelId = typeof item.id === "string" ? item.id : "";
1232
+ const modelName = typeof item.name === "string" ? item.name : "";
1233
+ if (modelId !== PRIMARY_MODEL_ID && modelName !== PRIMARY_MODEL_ID) {
1234
+ return item;
1235
+ }
1236
+ return {
1237
+ ...item,
1238
+ reasoning: true
1239
+ };
1240
+ });
1241
+ }
1242
+ function forceProviderPrimaryReasoning(providers, providerName) {
1243
+ if (!providers)
1244
+ return providers;
1245
+ const providerConfig = providers[providerName];
1246
+ if (!isRecord(providerConfig))
1247
+ return providers;
1248
+ return {
1249
+ ...providers,
1250
+ [providerName]: {
1251
+ ...providerConfig,
1252
+ models: forcePrimaryModelReasoning(providerConfig.models)
1253
+ }
1254
+ };
1255
+ }
1222
1256
  function writeOpenClawConfig(provider) {
1223
1257
  const configPath = getOpenClawConfigPath();
1224
1258
  const modelsPath = getOpenClawModelsPath();
@@ -1258,15 +1292,21 @@ function writeOpenClawConfig(provider) {
1258
1292
  }
1259
1293
  }
1260
1294
  };
1295
+ if (isRecord(finalOpenClawConfig.models)) {
1296
+ finalOpenClawConfig.models = {
1297
+ ...finalOpenClawConfig.models,
1298
+ providers: forceProviderPrimaryReasoning(finalOpenClawConfig.models.providers, providerName)
1299
+ };
1300
+ }
1261
1301
  const mergedProviders = deepMerge(existingModelsConfig.providers || {}, nextModelsConfig.providers || {});
1262
1302
  const finalModelsConfig = {
1263
1303
  ...existingModelsConfig,
1264
- providers: mergedProviders
1304
+ providers: forceProviderPrimaryReasoning(mergedProviders, providerName)
1265
1305
  };
1266
1306
  writeJSON(configPath, finalOpenClawConfig);
1267
1307
  writeJSON(modelsPath, finalModelsConfig);
1268
1308
  }
1269
- var DEFAULT_PROVIDER_NAME, __filename5, __dirname5, OPENCLAW_CONFIG_TEMPLATE, OPENCLAW_MODELS_TEMPLATE;
1309
+ var DEFAULT_PROVIDER_NAME, PRIMARY_MODEL_ID, __filename5, __dirname5, OPENCLAW_CONFIG_TEMPLATE, OPENCLAW_MODELS_TEMPLATE;
1270
1310
  var init_openclaw2 = __esm({
1271
1311
  "../core/dist/writers/openclaw.js"() {
1272
1312
  "use strict";
@@ -1274,6 +1314,7 @@ var init_openclaw2 = __esm({
1274
1314
  init_file();
1275
1315
  init_template();
1276
1316
  DEFAULT_PROVIDER_NAME = "gmn";
1317
+ PRIMARY_MODEL_ID = "gpt-5.3-codex";
1277
1318
  __filename5 = fileURLToPath5(import.meta.url);
1278
1319
  __dirname5 = path8.dirname(__filename5);
1279
1320
  OPENCLAW_CONFIG_TEMPLATE = {
@@ -7097,7 +7138,7 @@ function importCommand(program2) {
7097
7138
  init_dist2();
7098
7139
  import chalk54 from "chalk";
7099
7140
  import inquirer38 from "inquirer";
7100
- var PROVIDER_NAME = "GMN";
7141
+ var DEFAULT_PROVIDER_NAME2 = "gmn";
7101
7142
  var VALID_PLATFORMS = ["codex", "opencode", "openclaw"];
7102
7143
  var DEFAULT_PLATFORMS = ["codex", "opencode"];
7103
7144
  var GMN_OPENAI_BASE_URL = "https://gmn.chuangzuoli.com";
@@ -7218,18 +7259,40 @@ async function resolvePlatforms(platformArg) {
7218
7259
  }
7219
7260
  return promptPlatforms();
7220
7261
  }
7221
- async function gmnCommand(apiKey, platformArg) {
7262
+ function resolveProviderName2(providerNameArg) {
7263
+ if (providerNameArg === void 0) {
7264
+ return DEFAULT_PROVIDER_NAME2;
7265
+ }
7266
+ const providerName = providerNameArg.trim();
7267
+ if (!providerName) {
7268
+ throw new Error("\u670D\u52A1\u5546\u540D\u79F0\u4E0D\u80FD\u4E3A\u7A7A");
7269
+ }
7270
+ if (providerName.toLowerCase() === DEFAULT_PROVIDER_NAME2) {
7271
+ return DEFAULT_PROVIDER_NAME2;
7272
+ }
7273
+ return providerName;
7274
+ }
7275
+ function findPreferredProvider(providers, targetName) {
7276
+ const exact = providers.find((p) => p.name.trim() === targetName);
7277
+ if (exact) return exact;
7278
+ const lowerTarget = targetName.toLowerCase();
7279
+ return providers.find((p) => p.name.trim().toLowerCase() === lowerTarget);
7280
+ }
7281
+ async function gmnCommand(apiKey, platformArg, providerNameArg) {
7222
7282
  printBanner();
7223
7283
  let platforms;
7284
+ let providerName;
7224
7285
  try {
7225
7286
  console.log(chalk54.cyan(`
7226
7287
  ${renderStep(1, TOTAL_STEPS, "\u9009\u62E9\u8981\u914D\u7F6E\u7684\u5DE5\u5177")}`));
7227
7288
  platforms = await resolvePlatforms(platformArg);
7289
+ providerName = resolveProviderName2(providerNameArg);
7228
7290
  } catch (error) {
7229
7291
  console.error(chalk54.red(`\u274C ${error.message}`));
7230
7292
  process.exit(1);
7231
7293
  }
7232
7294
  console.log(chalk54.gray(`\u5DF2\u9009\u62E9: ${platforms.join(", ")}`));
7295
+ console.log(chalk54.gray(`\u670D\u52A1\u5546\u540D\u79F0: ${providerName}`));
7233
7296
  printKeyNotice();
7234
7297
  let resolvedApiKey = apiKey?.trim();
7235
7298
  console.log(chalk54.cyan(`
@@ -7274,8 +7337,8 @@ ${renderStep(3, TOTAL_STEPS, "\u5F00\u59CB\u5199\u5165\u914D\u7F6E")}`));
7274
7337
  try {
7275
7338
  console.log(chalk54.gray(`\u2192 \u914D\u7F6E ${name}...`));
7276
7339
  const baseUrl = platformBaseUrls[platform];
7277
- const existing = manager.findByName(PROVIDER_NAME);
7278
- const provider = existing ? manager.edit(existing.id, { baseUrl, apiKey: resolvedApiKey }) : manager.add({ name: PROVIDER_NAME, baseUrl, apiKey: resolvedApiKey });
7340
+ const existing = findPreferredProvider(manager.list(), providerName);
7341
+ const provider = existing ? manager.edit(existing.id, { name: providerName, baseUrl, apiKey: resolvedApiKey }) : manager.add({ name: providerName, baseUrl, apiKey: resolvedApiKey });
7279
7342
  manager.switch(provider.id);
7280
7343
  completed += 1;
7281
7344
  console.log(chalk54.green(`\u2705 ${name}`));
@@ -7381,8 +7444,8 @@ sync.action(async () => {
7381
7444
  });
7382
7445
  exportCommand(program);
7383
7446
  importCommand(program);
7384
- program.command("gmn [apiKey]").description("\u914D\u7F6E GMN \u5230 Codex\u3001OpenCode\u3001OpenClaw").option("-p, --platform <platforms>", "\u6307\u5B9A\u5E73\u53F0 (codex,opencode,openclaw,all)").action(async (apiKey, options) => {
7385
- await gmnCommand(apiKey, options.platform);
7447
+ program.command("gmn [apiKey]").description("\u914D\u7F6E GMN \u5230 Codex\u3001OpenCode\u3001OpenClaw").option("-p, --platform <platforms>", "\u6307\u5B9A\u5E73\u53F0 (codex,opencode,openclaw,all)").option("-n, --name <providerName>", "\u6307\u5B9A\u670D\u52A1\u5546\u540D\u79F0\uFF08\u9ED8\u8BA4: gmn\uFF09").action(async (apiKey, options) => {
7448
+ await gmnCommand(apiKey, options.platform, options.name);
7386
7449
  });
7387
7450
  (async () => {
7388
7451
  if (!process.argv.slice(2).length) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ccman",
3
- "version": "3.3.14",
3
+ "version": "3.3.15-beta.0",
4
4
  "type": "module",
5
5
  "description": "Manage Codex, Claude Code, Gemini CLI, OpenCode, OpenClaw, and MCP API service provider configurations",
6
6
  "main": "./dist/index.js",