ccman 3.3.14 → 3.3.15-beta.1
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/dist/index.js +77 -9
- 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.
|
|
18
|
+
version: "3.3.15-beta.1",
|
|
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,47 @@ 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(providerConfig) {
|
|
1243
|
+
if (!isRecord(providerConfig))
|
|
1244
|
+
return void 0;
|
|
1245
|
+
return {
|
|
1246
|
+
...providerConfig,
|
|
1247
|
+
models: forcePrimaryModelReasoning(providerConfig.models)
|
|
1248
|
+
};
|
|
1249
|
+
}
|
|
1250
|
+
function replaceProviderEntry(providers, providerName, nextProvider) {
|
|
1251
|
+
const result = { ...providers || {} };
|
|
1252
|
+
const target = providerName.toLowerCase();
|
|
1253
|
+
for (const key of Object.keys(result)) {
|
|
1254
|
+
if (key.toLowerCase() === target) {
|
|
1255
|
+
delete result[key];
|
|
1256
|
+
}
|
|
1257
|
+
}
|
|
1258
|
+
if (nextProvider) {
|
|
1259
|
+
result[providerName] = nextProvider;
|
|
1260
|
+
}
|
|
1261
|
+
return result;
|
|
1262
|
+
}
|
|
1222
1263
|
function writeOpenClawConfig(provider) {
|
|
1223
1264
|
const configPath = getOpenClawConfigPath();
|
|
1224
1265
|
const modelsPath = getOpenClawModelsPath();
|
|
@@ -1238,6 +1279,9 @@ function writeOpenClawConfig(provider) {
|
|
|
1238
1279
|
const existingOpenClawConfig = loadExistingJSON(configPath) || {};
|
|
1239
1280
|
const existingModelsConfig = loadExistingJSON(modelsPath) || {};
|
|
1240
1281
|
const mergedConfigModels = deepMerge(existingOpenClawConfig.models || {}, nextOpenClawConfig.models || {});
|
|
1282
|
+
const mergedConfigProviders = isRecord(mergedConfigModels.providers) ? mergedConfigModels.providers : void 0;
|
|
1283
|
+
const nextConfigProviders = isRecord(nextOpenClawConfig.models) && isRecord(nextOpenClawConfig.models.providers) ? nextOpenClawConfig.models.providers : void 0;
|
|
1284
|
+
mergedConfigModels.providers = replaceProviderEntry(mergedConfigProviders, providerName, forceProviderPrimaryReasoning(nextConfigProviders?.[providerName]));
|
|
1241
1285
|
const mergedAgents = deepMerge(nextOpenClawConfig.agents || {}, existingOpenClawConfig.agents || {});
|
|
1242
1286
|
const mergedDefaults = mergedAgents.defaults || {};
|
|
1243
1287
|
const mergedModel = mergedDefaults.model || {};
|
|
@@ -1259,14 +1303,15 @@ function writeOpenClawConfig(provider) {
|
|
|
1259
1303
|
}
|
|
1260
1304
|
};
|
|
1261
1305
|
const mergedProviders = deepMerge(existingModelsConfig.providers || {}, nextModelsConfig.providers || {});
|
|
1306
|
+
const nextModelsProviders = isRecord(nextModelsConfig.providers) ? nextModelsConfig.providers : void 0;
|
|
1262
1307
|
const finalModelsConfig = {
|
|
1263
1308
|
...existingModelsConfig,
|
|
1264
|
-
providers: mergedProviders
|
|
1309
|
+
providers: replaceProviderEntry(mergedProviders, providerName, forceProviderPrimaryReasoning(nextModelsProviders?.[providerName]))
|
|
1265
1310
|
};
|
|
1266
1311
|
writeJSON(configPath, finalOpenClawConfig);
|
|
1267
1312
|
writeJSON(modelsPath, finalModelsConfig);
|
|
1268
1313
|
}
|
|
1269
|
-
var DEFAULT_PROVIDER_NAME, __filename5, __dirname5, OPENCLAW_CONFIG_TEMPLATE, OPENCLAW_MODELS_TEMPLATE;
|
|
1314
|
+
var DEFAULT_PROVIDER_NAME, PRIMARY_MODEL_ID, __filename5, __dirname5, OPENCLAW_CONFIG_TEMPLATE, OPENCLAW_MODELS_TEMPLATE;
|
|
1270
1315
|
var init_openclaw2 = __esm({
|
|
1271
1316
|
"../core/dist/writers/openclaw.js"() {
|
|
1272
1317
|
"use strict";
|
|
@@ -1274,6 +1319,7 @@ var init_openclaw2 = __esm({
|
|
|
1274
1319
|
init_file();
|
|
1275
1320
|
init_template();
|
|
1276
1321
|
DEFAULT_PROVIDER_NAME = "gmn";
|
|
1322
|
+
PRIMARY_MODEL_ID = "gpt-5.3-codex";
|
|
1277
1323
|
__filename5 = fileURLToPath5(import.meta.url);
|
|
1278
1324
|
__dirname5 = path8.dirname(__filename5);
|
|
1279
1325
|
OPENCLAW_CONFIG_TEMPLATE = {
|
|
@@ -7097,7 +7143,7 @@ function importCommand(program2) {
|
|
|
7097
7143
|
init_dist2();
|
|
7098
7144
|
import chalk54 from "chalk";
|
|
7099
7145
|
import inquirer38 from "inquirer";
|
|
7100
|
-
var
|
|
7146
|
+
var DEFAULT_PROVIDER_NAME2 = "gmn";
|
|
7101
7147
|
var VALID_PLATFORMS = ["codex", "opencode", "openclaw"];
|
|
7102
7148
|
var DEFAULT_PLATFORMS = ["codex", "opencode"];
|
|
7103
7149
|
var GMN_OPENAI_BASE_URL = "https://gmn.chuangzuoli.com";
|
|
@@ -7218,18 +7264,40 @@ async function resolvePlatforms(platformArg) {
|
|
|
7218
7264
|
}
|
|
7219
7265
|
return promptPlatforms();
|
|
7220
7266
|
}
|
|
7221
|
-
|
|
7267
|
+
function resolveProviderName2(providerNameArg) {
|
|
7268
|
+
if (providerNameArg === void 0) {
|
|
7269
|
+
return DEFAULT_PROVIDER_NAME2;
|
|
7270
|
+
}
|
|
7271
|
+
const providerName = providerNameArg.trim();
|
|
7272
|
+
if (!providerName) {
|
|
7273
|
+
throw new Error("\u670D\u52A1\u5546\u540D\u79F0\u4E0D\u80FD\u4E3A\u7A7A");
|
|
7274
|
+
}
|
|
7275
|
+
if (providerName.toLowerCase() === DEFAULT_PROVIDER_NAME2) {
|
|
7276
|
+
return DEFAULT_PROVIDER_NAME2;
|
|
7277
|
+
}
|
|
7278
|
+
return providerName;
|
|
7279
|
+
}
|
|
7280
|
+
function findPreferredProvider(providers, targetName) {
|
|
7281
|
+
const exact = providers.find((p) => p.name.trim() === targetName);
|
|
7282
|
+
if (exact) return exact;
|
|
7283
|
+
const lowerTarget = targetName.toLowerCase();
|
|
7284
|
+
return providers.find((p) => p.name.trim().toLowerCase() === lowerTarget);
|
|
7285
|
+
}
|
|
7286
|
+
async function gmnCommand(apiKey, platformArg, providerNameArg) {
|
|
7222
7287
|
printBanner();
|
|
7223
7288
|
let platforms;
|
|
7289
|
+
let providerName;
|
|
7224
7290
|
try {
|
|
7225
7291
|
console.log(chalk54.cyan(`
|
|
7226
7292
|
${renderStep(1, TOTAL_STEPS, "\u9009\u62E9\u8981\u914D\u7F6E\u7684\u5DE5\u5177")}`));
|
|
7227
7293
|
platforms = await resolvePlatforms(platformArg);
|
|
7294
|
+
providerName = resolveProviderName2(providerNameArg);
|
|
7228
7295
|
} catch (error) {
|
|
7229
7296
|
console.error(chalk54.red(`\u274C ${error.message}`));
|
|
7230
7297
|
process.exit(1);
|
|
7231
7298
|
}
|
|
7232
7299
|
console.log(chalk54.gray(`\u5DF2\u9009\u62E9: ${platforms.join(", ")}`));
|
|
7300
|
+
console.log(chalk54.gray(`\u670D\u52A1\u5546\u540D\u79F0: ${providerName}`));
|
|
7233
7301
|
printKeyNotice();
|
|
7234
7302
|
let resolvedApiKey = apiKey?.trim();
|
|
7235
7303
|
console.log(chalk54.cyan(`
|
|
@@ -7274,8 +7342,8 @@ ${renderStep(3, TOTAL_STEPS, "\u5F00\u59CB\u5199\u5165\u914D\u7F6E")}`));
|
|
|
7274
7342
|
try {
|
|
7275
7343
|
console.log(chalk54.gray(`\u2192 \u914D\u7F6E ${name}...`));
|
|
7276
7344
|
const baseUrl = platformBaseUrls[platform];
|
|
7277
|
-
const existing = manager.
|
|
7278
|
-
const provider = existing ? manager.edit(existing.id, { baseUrl, apiKey: resolvedApiKey }) : manager.add({ name:
|
|
7345
|
+
const existing = findPreferredProvider(manager.list(), providerName);
|
|
7346
|
+
const provider = existing ? manager.edit(existing.id, { name: providerName, baseUrl, apiKey: resolvedApiKey }) : manager.add({ name: providerName, baseUrl, apiKey: resolvedApiKey });
|
|
7279
7347
|
manager.switch(provider.id);
|
|
7280
7348
|
completed += 1;
|
|
7281
7349
|
console.log(chalk54.green(`\u2705 ${name}`));
|
|
@@ -7381,8 +7449,8 @@ sync.action(async () => {
|
|
|
7381
7449
|
});
|
|
7382
7450
|
exportCommand(program);
|
|
7383
7451
|
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);
|
|
7452
|
+
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) => {
|
|
7453
|
+
await gmnCommand(apiKey, options.platform, options.name);
|
|
7386
7454
|
});
|
|
7387
7455
|
(async () => {
|
|
7388
7456
|
if (!process.argv.slice(2).length) {
|
package/package.json
CHANGED