@kaitranntt/ccs 7.28.2 → 7.29.0-dev.2
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/auth/profile-detector.d.ts +1 -1
- package/dist/auth/profile-detector.d.ts.map +1 -1
- package/dist/auth/profile-detector.js +1 -0
- package/dist/auth/profile-detector.js.map +1 -1
- package/dist/cliproxy/account-manager.d.ts +3 -3
- package/dist/cliproxy/account-manager.d.ts.map +1 -1
- package/dist/cliproxy/account-manager.js +2 -1
- package/dist/cliproxy/account-manager.js.map +1 -1
- package/dist/cliproxy/auth/auth-types.d.ts.map +1 -1
- package/dist/cliproxy/auth/auth-types.js +10 -0
- package/dist/cliproxy/auth/auth-types.js.map +1 -1
- package/dist/cliproxy/auth/provider-refreshers/index.d.ts.map +1 -1
- package/dist/cliproxy/auth/provider-refreshers/index.js +1 -0
- package/dist/cliproxy/auth/provider-refreshers/index.js.map +1 -1
- package/dist/cliproxy/auth/token-expiry-checker.d.ts.map +1 -1
- package/dist/cliproxy/auth/token-expiry-checker.js +2 -1
- package/dist/cliproxy/auth/token-expiry-checker.js.map +1 -1
- package/dist/cliproxy/auth/token-manager.d.ts.map +1 -1
- package/dist/cliproxy/auth/token-manager.js +2 -1
- package/dist/cliproxy/auth/token-manager.js.map +1 -1
- package/dist/cliproxy/cliproxy-executor.d.ts.map +1 -1
- package/dist/cliproxy/cliproxy-executor.js +20 -4
- package/dist/cliproxy/cliproxy-executor.js.map +1 -1
- package/dist/cliproxy/config-generator.d.ts.map +1 -1
- package/dist/cliproxy/config-generator.js +1 -0
- package/dist/cliproxy/config-generator.js.map +1 -1
- package/dist/cliproxy/index.d.ts +4 -0
- package/dist/cliproxy/index.d.ts.map +1 -1
- package/dist/cliproxy/index.js +12 -1
- package/dist/cliproxy/index.js.map +1 -1
- package/dist/cliproxy/management-api-client.d.ts +67 -0
- package/dist/cliproxy/management-api-client.d.ts.map +1 -0
- package/dist/cliproxy/management-api-client.js +347 -0
- package/dist/cliproxy/management-api-client.js.map +1 -0
- package/dist/cliproxy/management-api-types.d.ts +107 -0
- package/dist/cliproxy/management-api-types.d.ts.map +1 -0
- package/dist/cliproxy/management-api-types.js +9 -0
- package/dist/cliproxy/management-api-types.js.map +1 -0
- package/dist/cliproxy/model-catalog.d.ts +2 -2
- package/dist/cliproxy/model-catalog.d.ts.map +1 -1
- package/dist/cliproxy/model-catalog.js +50 -1
- package/dist/cliproxy/model-catalog.js.map +1 -1
- package/dist/cliproxy/model-config.d.ts.map +1 -1
- package/dist/cliproxy/model-config.js +11 -3
- package/dist/cliproxy/model-config.js.map +1 -1
- package/dist/cliproxy/quota-fetcher.d.ts.map +1 -1
- package/dist/cliproxy/quota-fetcher.js +25 -50
- package/dist/cliproxy/quota-fetcher.js.map +1 -1
- package/dist/cliproxy/quota-manager.js +2 -2
- package/dist/cliproxy/quota-manager.js.map +1 -1
- package/dist/cliproxy/services/variant-config-adapter.js +1 -1
- package/dist/cliproxy/services/variant-config-adapter.js.map +1 -1
- package/dist/cliproxy/sync/auto-sync-watcher.d.ts +37 -0
- package/dist/cliproxy/sync/auto-sync-watcher.d.ts.map +1 -0
- package/dist/cliproxy/sync/auto-sync-watcher.js +211 -0
- package/dist/cliproxy/sync/auto-sync-watcher.js.map +1 -0
- package/dist/cliproxy/sync/index.d.ts +10 -0
- package/dist/cliproxy/sync/index.d.ts.map +1 -0
- package/dist/cliproxy/sync/index.js +27 -0
- package/dist/cliproxy/sync/index.js.map +1 -0
- package/dist/cliproxy/sync/local-config-sync.d.ts +28 -0
- package/dist/cliproxy/sync/local-config-sync.d.ts.map +1 -0
- package/dist/cliproxy/sync/local-config-sync.js +223 -0
- package/dist/cliproxy/sync/local-config-sync.js.map +1 -0
- package/dist/cliproxy/sync/profile-mapper.d.ts +55 -0
- package/dist/cliproxy/sync/profile-mapper.d.ts.map +1 -0
- package/dist/cliproxy/sync/profile-mapper.js +173 -0
- package/dist/cliproxy/sync/profile-mapper.js.map +1 -0
- package/dist/cliproxy/types.d.ts +2 -1
- package/dist/cliproxy/types.d.ts.map +1 -1
- package/dist/cliproxy/types.js.map +1 -1
- package/dist/commands/api-command.d.ts.map +1 -1
- package/dist/commands/api-command.js +9 -0
- package/dist/commands/api-command.js.map +1 -1
- package/dist/commands/cliproxy-command.d.ts.map +1 -1
- package/dist/commands/cliproxy-command.js +19 -1
- package/dist/commands/cliproxy-command.js.map +1 -1
- package/dist/commands/cliproxy-sync-handler.d.ts +19 -0
- package/dist/commands/cliproxy-sync-handler.d.ts.map +1 -0
- package/dist/commands/cliproxy-sync-handler.js +99 -0
- package/dist/commands/cliproxy-sync-handler.js.map +1 -0
- package/dist/config/unified-config-loader.d.ts.map +1 -1
- package/dist/config/unified-config-loader.js +2 -0
- package/dist/config/unified-config-loader.js.map +1 -1
- package/dist/config/unified-config-types.d.ts +5 -1
- package/dist/config/unified-config-types.d.ts.map +1 -1
- package/dist/config/unified-config-types.js +2 -1
- package/dist/config/unified-config-types.js.map +1 -1
- package/dist/management/oauth-port-diagnostics.d.ts +4 -0
- package/dist/management/oauth-port-diagnostics.d.ts.map +1 -1
- package/dist/management/oauth-port-diagnostics.js +10 -2
- package/dist/management/oauth-port-diagnostics.js.map +1 -1
- package/dist/types/config.d.ts +1 -1
- package/dist/types/config.d.ts.map +1 -1
- package/dist/ui/assets/{accounts-BOzNq5ee.js → accounts-CeG4Acy7.js} +1 -1
- package/dist/ui/assets/{alert-dialog-Cb5PMEBl.js → alert-dialog-BZM_wV9y.js} +1 -1
- package/dist/ui/assets/{api-Dve5qAOP.js → api-DTsaYKMt.js} +1 -1
- package/dist/ui/assets/{auth-section-Cpc5CmnT.js → auth-section-oeseAbTR.js} +1 -1
- package/dist/ui/assets/{backups-section-DUZ2HR46.js → backups-section-BEsmu_FQ.js} +1 -1
- package/dist/ui/assets/cliproxy-CmciSwMc.js +3 -0
- package/dist/ui/assets/{cliproxy-control-panel-D8brA7Zn.js → cliproxy-control-panel-iaEe8rGw.js} +1 -1
- package/dist/ui/assets/{confirm-dialog-0Zy9TN_K.js → confirm-dialog-DVpWf5Eg.js} +1 -1
- package/dist/ui/assets/{copilot-C2Q9oafS.js → copilot-JypcBubb.js} +3 -3
- package/dist/ui/assets/{globalenv-section-g_Bh1_Vi.js → globalenv-section-i6XQTH8J.js} +1 -1
- package/dist/ui/assets/{health-BfdjLTeV.js → health-dRNF8Scq.js} +1 -1
- package/dist/ui/assets/icons-n7yU6ZH4.js +1 -0
- package/dist/ui/assets/{index-B9LdCgpr.js → index-06z5N4Jt.js} +1 -1
- package/dist/ui/assets/{index-326cTntS.js → index-7A6gkPzK.js} +1 -1
- package/dist/ui/assets/index-8fgih6zR.js +1 -0
- package/dist/ui/assets/{index-CErLyTsQ.js → index-CClGFNH9.js} +16 -16
- package/dist/ui/assets/{index-DX32Yp2A.js → index-DMcwfw-m.js} +1 -1
- package/dist/ui/assets/index-WzrICGKd.css +1 -0
- package/dist/ui/assets/providers/claude.svg +1 -0
- package/dist/ui/assets/proxy-status-widget-pB419daP.js +1 -0
- package/dist/ui/assets/{shared-ogUMuADx.js → shared-BYUyFWPc.js} +1 -1
- package/dist/ui/assets/{switch-DVMOWp74.js → switch-Bz6aFOeS.js} +1 -1
- package/dist/ui/index.html +3 -3
- package/dist/web-server/index.d.ts.map +1 -1
- package/dist/web-server/index.js +9 -1
- package/dist/web-server/index.js.map +1 -1
- package/dist/web-server/routes/account-routes.d.ts.map +1 -1
- package/dist/web-server/routes/account-routes.js +3 -10
- package/dist/web-server/routes/account-routes.js.map +1 -1
- package/dist/web-server/routes/cliproxy-auth-routes.d.ts.map +1 -1
- package/dist/web-server/routes/cliproxy-auth-routes.js +5 -10
- package/dist/web-server/routes/cliproxy-auth-routes.js.map +1 -1
- package/dist/web-server/routes/cliproxy-stats-routes.d.ts.map +1 -1
- package/dist/web-server/routes/cliproxy-stats-routes.js +3 -10
- package/dist/web-server/routes/cliproxy-stats-routes.js.map +1 -1
- package/dist/web-server/routes/cliproxy-sync-routes.d.ts +6 -0
- package/dist/web-server/routes/cliproxy-sync-routes.d.ts.map +1 -0
- package/dist/web-server/routes/cliproxy-sync-routes.js +157 -0
- package/dist/web-server/routes/cliproxy-sync-routes.js.map +1 -0
- package/dist/web-server/routes/index.d.ts.map +1 -1
- package/dist/web-server/routes/index.js +2 -0
- package/dist/web-server/routes/index.js.map +1 -1
- package/package.json +1 -1
- package/dist/ui/assets/cliproxy-DaYarYV8.js +0 -3
- package/dist/ui/assets/icons-C6UNjkCT.js +0 -1
- package/dist/ui/assets/index-C-e4p8-0.js +0 -1
- package/dist/ui/assets/index-DWVSWP6e.css +0 -1
- package/dist/ui/assets/proxy-status-widget-BBhLPlDp.js +0 -1
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* CLIProxy Sync Module
|
|
4
|
+
*
|
|
5
|
+
* Profile sync functionality for syncing CCS API profiles to CLIProxy config.
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.getAutoSyncStatus = exports.isAutoSyncEnabled = exports.restartAutoSyncWatcher = exports.stopAutoSyncWatcher = exports.startAutoSyncWatcher = exports.getLocalSyncStatus = exports.syncToLocalConfig = exports.isProfileSyncable = exports.getSyncableProfileCount = exports.generateSyncPreview = exports.generateSyncPayload = exports.mapProfileToClaudeKey = exports.loadSyncableProfiles = void 0;
|
|
9
|
+
var profile_mapper_1 = require("./profile-mapper");
|
|
10
|
+
Object.defineProperty(exports, "loadSyncableProfiles", { enumerable: true, get: function () { return profile_mapper_1.loadSyncableProfiles; } });
|
|
11
|
+
Object.defineProperty(exports, "mapProfileToClaudeKey", { enumerable: true, get: function () { return profile_mapper_1.mapProfileToClaudeKey; } });
|
|
12
|
+
Object.defineProperty(exports, "generateSyncPayload", { enumerable: true, get: function () { return profile_mapper_1.generateSyncPayload; } });
|
|
13
|
+
Object.defineProperty(exports, "generateSyncPreview", { enumerable: true, get: function () { return profile_mapper_1.generateSyncPreview; } });
|
|
14
|
+
Object.defineProperty(exports, "getSyncableProfileCount", { enumerable: true, get: function () { return profile_mapper_1.getSyncableProfileCount; } });
|
|
15
|
+
Object.defineProperty(exports, "isProfileSyncable", { enumerable: true, get: function () { return profile_mapper_1.isProfileSyncable; } });
|
|
16
|
+
// Local config sync
|
|
17
|
+
var local_config_sync_1 = require("./local-config-sync");
|
|
18
|
+
Object.defineProperty(exports, "syncToLocalConfig", { enumerable: true, get: function () { return local_config_sync_1.syncToLocalConfig; } });
|
|
19
|
+
Object.defineProperty(exports, "getLocalSyncStatus", { enumerable: true, get: function () { return local_config_sync_1.getLocalSyncStatus; } });
|
|
20
|
+
// Auto-sync watcher
|
|
21
|
+
var auto_sync_watcher_1 = require("./auto-sync-watcher");
|
|
22
|
+
Object.defineProperty(exports, "startAutoSyncWatcher", { enumerable: true, get: function () { return auto_sync_watcher_1.startAutoSyncWatcher; } });
|
|
23
|
+
Object.defineProperty(exports, "stopAutoSyncWatcher", { enumerable: true, get: function () { return auto_sync_watcher_1.stopAutoSyncWatcher; } });
|
|
24
|
+
Object.defineProperty(exports, "restartAutoSyncWatcher", { enumerable: true, get: function () { return auto_sync_watcher_1.restartAutoSyncWatcher; } });
|
|
25
|
+
Object.defineProperty(exports, "isAutoSyncEnabled", { enumerable: true, get: function () { return auto_sync_watcher_1.isAutoSyncEnabled; } });
|
|
26
|
+
Object.defineProperty(exports, "getAutoSyncStatus", { enumerable: true, get: function () { return auto_sync_watcher_1.getAutoSyncStatus; } });
|
|
27
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cliproxy/sync/index.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;AAIH,mDAO0B;AANxB,sHAAA,oBAAoB,OAAA;AACpB,uHAAA,qBAAqB,OAAA;AACrB,qHAAA,mBAAmB,OAAA;AACnB,qHAAA,mBAAmB,OAAA;AACnB,yHAAA,uBAAuB,OAAA;AACvB,mHAAA,iBAAiB,OAAA;AAGnB,oBAAoB;AACpB,yDAA4E;AAAnE,sHAAA,iBAAiB,OAAA;AAAE,uHAAA,kBAAkB,OAAA;AAE9C,oBAAoB;AACpB,yDAM6B;AAL3B,yHAAA,oBAAoB,OAAA;AACpB,wHAAA,mBAAmB,OAAA;AACnB,2HAAA,sBAAsB,OAAA;AACtB,sHAAA,iBAAiB,OAAA;AACjB,sHAAA,iBAAiB,OAAA"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Local Config Sync
|
|
3
|
+
*
|
|
4
|
+
* Syncs CCS API profiles to the local CLIProxy config.yaml.
|
|
5
|
+
* Uses section-based replacement to preserve comments and formatting.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Sync profiles to local CLIProxy config.yaml.
|
|
9
|
+
* Replaces only the claude-api-key section, preserving all other content.
|
|
10
|
+
*
|
|
11
|
+
* @returns Object with success status and synced count
|
|
12
|
+
*/
|
|
13
|
+
export declare function syncToLocalConfig(): {
|
|
14
|
+
success: boolean;
|
|
15
|
+
syncedCount: number;
|
|
16
|
+
configPath: string;
|
|
17
|
+
error?: string;
|
|
18
|
+
};
|
|
19
|
+
/**
|
|
20
|
+
* Get local sync status.
|
|
21
|
+
*/
|
|
22
|
+
export declare function getLocalSyncStatus(): {
|
|
23
|
+
configExists: boolean;
|
|
24
|
+
configPath: string;
|
|
25
|
+
currentKeyCount: number;
|
|
26
|
+
syncableProfileCount: number;
|
|
27
|
+
};
|
|
28
|
+
//# sourceMappingURL=local-config-sync.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"local-config-sync.d.ts","sourceRoot":"","sources":["../../../src/cliproxy/sync/local-config-sync.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAQH;;;;;GAKG;AACH,wBAAgB,iBAAiB,IAAI;IACnC,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAuFA;AAuFD;;GAEG;AACH,wBAAgB,kBAAkB,IAAI;IACpC,YAAY,EAAE,OAAO,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;IACxB,oBAAoB,EAAE,MAAM,CAAC;CAC9B,CA2BA"}
|
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Local Config Sync
|
|
4
|
+
*
|
|
5
|
+
* Syncs CCS API profiles to the local CLIProxy config.yaml.
|
|
6
|
+
* Uses section-based replacement to preserve comments and formatting.
|
|
7
|
+
*/
|
|
8
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
9
|
+
if (k2 === undefined) k2 = k;
|
|
10
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
11
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
12
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
13
|
+
}
|
|
14
|
+
Object.defineProperty(o, k2, desc);
|
|
15
|
+
}) : (function(o, m, k, k2) {
|
|
16
|
+
if (k2 === undefined) k2 = k;
|
|
17
|
+
o[k2] = m[k];
|
|
18
|
+
}));
|
|
19
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
20
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
21
|
+
}) : function(o, v) {
|
|
22
|
+
o["default"] = v;
|
|
23
|
+
});
|
|
24
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
25
|
+
if (mod && mod.__esModule) return mod;
|
|
26
|
+
var result = {};
|
|
27
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
28
|
+
__setModuleDefault(result, mod);
|
|
29
|
+
return result;
|
|
30
|
+
};
|
|
31
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
32
|
+
exports.getLocalSyncStatus = exports.syncToLocalConfig = void 0;
|
|
33
|
+
const fs = __importStar(require("fs"));
|
|
34
|
+
const yaml = __importStar(require("js-yaml"));
|
|
35
|
+
const config_generator_1 = require("../config-generator");
|
|
36
|
+
const profile_mapper_1 = require("./profile-mapper");
|
|
37
|
+
/**
|
|
38
|
+
* Sync profiles to local CLIProxy config.yaml.
|
|
39
|
+
* Replaces only the claude-api-key section, preserving all other content.
|
|
40
|
+
*
|
|
41
|
+
* @returns Object with success status and synced count
|
|
42
|
+
*/
|
|
43
|
+
function syncToLocalConfig() {
|
|
44
|
+
const configPath = (0, config_generator_1.getCliproxyConfigPath)();
|
|
45
|
+
try {
|
|
46
|
+
// Generate payload from CCS profiles
|
|
47
|
+
const payload = (0, profile_mapper_1.generateSyncPayload)();
|
|
48
|
+
if (payload.length === 0) {
|
|
49
|
+
return {
|
|
50
|
+
success: true,
|
|
51
|
+
syncedCount: 0,
|
|
52
|
+
configPath,
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
// Read existing config
|
|
56
|
+
if (!fs.existsSync(configPath)) {
|
|
57
|
+
return {
|
|
58
|
+
success: false,
|
|
59
|
+
syncedCount: 0,
|
|
60
|
+
configPath,
|
|
61
|
+
error: 'CLIProxy config not found. Run ccs doctor to generate.',
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
let configContent;
|
|
65
|
+
try {
|
|
66
|
+
configContent = fs.readFileSync(configPath, 'utf8');
|
|
67
|
+
}
|
|
68
|
+
catch (error) {
|
|
69
|
+
if (error.code === 'ENOENT') {
|
|
70
|
+
return {
|
|
71
|
+
success: false,
|
|
72
|
+
syncedCount: 0,
|
|
73
|
+
configPath,
|
|
74
|
+
error: 'CLIProxy config deleted during sync. Run ccs doctor to regenerate.',
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
throw error;
|
|
78
|
+
}
|
|
79
|
+
// Transform payload to config format
|
|
80
|
+
const claudeApiKeys = payload.map(transformToConfigFormat);
|
|
81
|
+
// Generate YAML for the claude-api-key section only
|
|
82
|
+
const newSection = yaml.dump({ 'claude-api-key': claudeApiKeys }, {
|
|
83
|
+
indent: 2,
|
|
84
|
+
lineWidth: -1,
|
|
85
|
+
quotingType: "'",
|
|
86
|
+
forceQuotes: false,
|
|
87
|
+
});
|
|
88
|
+
// Replace section in original content (preserves comments/formatting)
|
|
89
|
+
const newContent = replaceSectionInYaml(configContent, 'claude-api-key', newSection);
|
|
90
|
+
// Atomic write with cleanup on failure
|
|
91
|
+
const tempPath = configPath + '.tmp';
|
|
92
|
+
try {
|
|
93
|
+
fs.writeFileSync(tempPath, newContent, { mode: 0o600 });
|
|
94
|
+
fs.renameSync(tempPath, configPath);
|
|
95
|
+
}
|
|
96
|
+
catch (writeError) {
|
|
97
|
+
// Clean up temp file if it exists
|
|
98
|
+
if (fs.existsSync(tempPath)) {
|
|
99
|
+
try {
|
|
100
|
+
fs.unlinkSync(tempPath);
|
|
101
|
+
}
|
|
102
|
+
catch {
|
|
103
|
+
// Ignore cleanup errors
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
throw writeError;
|
|
107
|
+
}
|
|
108
|
+
return {
|
|
109
|
+
success: true,
|
|
110
|
+
syncedCount: payload.length,
|
|
111
|
+
configPath,
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
catch (error) {
|
|
115
|
+
return {
|
|
116
|
+
success: false,
|
|
117
|
+
syncedCount: 0,
|
|
118
|
+
configPath,
|
|
119
|
+
error: error.message,
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
exports.syncToLocalConfig = syncToLocalConfig;
|
|
124
|
+
/**
|
|
125
|
+
* Replace a top-level section in YAML content while preserving rest of file.
|
|
126
|
+
* Finds the section by key name and replaces it (including nested content).
|
|
127
|
+
*/
|
|
128
|
+
function replaceSectionInYaml(content, sectionKey, newSection) {
|
|
129
|
+
const lines = content.split('\n');
|
|
130
|
+
const result = [];
|
|
131
|
+
let inSection = false;
|
|
132
|
+
let sectionFound = false;
|
|
133
|
+
for (let i = 0; i < lines.length; i++) {
|
|
134
|
+
const line = lines[i];
|
|
135
|
+
const trimmed = line.trimStart();
|
|
136
|
+
// Check if this is the start of our target section
|
|
137
|
+
if (trimmed.startsWith(`${sectionKey}:`)) {
|
|
138
|
+
inSection = true;
|
|
139
|
+
sectionFound = true;
|
|
140
|
+
// Insert new section here
|
|
141
|
+
result.push(newSection.trimEnd());
|
|
142
|
+
continue;
|
|
143
|
+
}
|
|
144
|
+
// If we're in the section, skip lines until we hit another top-level key
|
|
145
|
+
if (inSection) {
|
|
146
|
+
// Top-level key: starts at column 0, valid YAML key format (word chars + hyphens)
|
|
147
|
+
// Must match pattern like "key:", "my-key:", "key_name:" but not comments or strings
|
|
148
|
+
const isTopLevelKey = line.length > 0 &&
|
|
149
|
+
!line.startsWith(' ') &&
|
|
150
|
+
!line.startsWith('\t') &&
|
|
151
|
+
!line.startsWith('#') &&
|
|
152
|
+
/^[a-zA-Z_][a-zA-Z0-9_-]*\s*:/.test(line);
|
|
153
|
+
if (isTopLevelKey) {
|
|
154
|
+
// We've exited the section, resume normal processing
|
|
155
|
+
inSection = false;
|
|
156
|
+
result.push(line);
|
|
157
|
+
}
|
|
158
|
+
// Otherwise skip this line (part of old section)
|
|
159
|
+
continue;
|
|
160
|
+
}
|
|
161
|
+
result.push(line);
|
|
162
|
+
}
|
|
163
|
+
// If section wasn't found, append it at the end
|
|
164
|
+
if (!sectionFound) {
|
|
165
|
+
result.push('');
|
|
166
|
+
result.push(newSection.trimEnd());
|
|
167
|
+
}
|
|
168
|
+
return result.join('\n');
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Transform ClaudeKey to config.yaml format.
|
|
172
|
+
* The config format uses slightly different field names.
|
|
173
|
+
*/
|
|
174
|
+
function transformToConfigFormat(key) {
|
|
175
|
+
const entry = {
|
|
176
|
+
'api-key': key['api-key'],
|
|
177
|
+
};
|
|
178
|
+
if (key['base-url']) {
|
|
179
|
+
entry['base-url'] = key['base-url'];
|
|
180
|
+
}
|
|
181
|
+
// Add empty proxy-url (required by CLIProxyAPI)
|
|
182
|
+
entry['proxy-url'] = '';
|
|
183
|
+
// Use model name directly (no alias mapping)
|
|
184
|
+
if (key.models && key.models.length > 0) {
|
|
185
|
+
entry.models = key.models.map((m) => ({
|
|
186
|
+
name: m.name,
|
|
187
|
+
alias: '',
|
|
188
|
+
}));
|
|
189
|
+
}
|
|
190
|
+
// Note: prefix is not used in local config - it's for remote routing only
|
|
191
|
+
return entry;
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* Get local sync status.
|
|
195
|
+
*/
|
|
196
|
+
function getLocalSyncStatus() {
|
|
197
|
+
const configPath = (0, config_generator_1.getCliproxyConfigPath)();
|
|
198
|
+
let currentKeyCount = 0;
|
|
199
|
+
if (fs.existsSync(configPath)) {
|
|
200
|
+
try {
|
|
201
|
+
const content = fs.readFileSync(configPath, 'utf8');
|
|
202
|
+
const config = yaml.load(content);
|
|
203
|
+
if (config && typeof config === 'object') {
|
|
204
|
+
const keys = config['claude-api-key'];
|
|
205
|
+
if (Array.isArray(keys)) {
|
|
206
|
+
currentKeyCount = keys.length;
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
catch {
|
|
211
|
+
// Ignore parse errors
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
const payload = (0, profile_mapper_1.generateSyncPayload)();
|
|
215
|
+
return {
|
|
216
|
+
configExists: fs.existsSync(configPath),
|
|
217
|
+
configPath,
|
|
218
|
+
currentKeyCount,
|
|
219
|
+
syncableProfileCount: payload.length,
|
|
220
|
+
};
|
|
221
|
+
}
|
|
222
|
+
exports.getLocalSyncStatus = getLocalSyncStatus;
|
|
223
|
+
//# sourceMappingURL=local-config-sync.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"local-config-sync.js","sourceRoot":"","sources":["../../../src/cliproxy/sync/local-config-sync.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Profile Mapper for CLIProxy Sync
|
|
3
|
+
*
|
|
4
|
+
* Transforms CCS settings-based profiles into CLIProxy ClaudeKey format.
|
|
5
|
+
*/
|
|
6
|
+
import type { ClaudeKey } from '../management-api-types';
|
|
7
|
+
/**
|
|
8
|
+
* Profile info with settings for sync.
|
|
9
|
+
*/
|
|
10
|
+
export interface SyncableProfile {
|
|
11
|
+
/** Profile name (e.g., "glm", "kimi") */
|
|
12
|
+
name: string;
|
|
13
|
+
/** Path to settings.json file */
|
|
14
|
+
settingsPath: string;
|
|
15
|
+
/** Whether profile has valid API key */
|
|
16
|
+
isConfigured: boolean;
|
|
17
|
+
/** Environment variables from settings.json */
|
|
18
|
+
env?: Record<string, string>;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Load syncable API profiles from CCS config.
|
|
22
|
+
* Filters to only configured profiles (with real API keys).
|
|
23
|
+
*/
|
|
24
|
+
export declare function loadSyncableProfiles(): SyncableProfile[];
|
|
25
|
+
/**
|
|
26
|
+
* Map a single profile to ClaudeKey format.
|
|
27
|
+
*/
|
|
28
|
+
export declare function mapProfileToClaudeKey(profile: SyncableProfile): ClaudeKey | null;
|
|
29
|
+
/**
|
|
30
|
+
* Generate sync payload from all configured profiles.
|
|
31
|
+
* Returns array of ClaudeKey ready to push to remote CLIProxy.
|
|
32
|
+
*/
|
|
33
|
+
export declare function generateSyncPayload(): ClaudeKey[];
|
|
34
|
+
/**
|
|
35
|
+
* Generate sync preview with profile details.
|
|
36
|
+
* Used for dry-run mode to show what would be synced.
|
|
37
|
+
*/
|
|
38
|
+
export interface SyncPreviewItem {
|
|
39
|
+
/** Profile name */
|
|
40
|
+
name: string;
|
|
41
|
+
/** Base URL (masked) */
|
|
42
|
+
baseUrl?: string;
|
|
43
|
+
/** Model name */
|
|
44
|
+
modelName?: string;
|
|
45
|
+
}
|
|
46
|
+
export declare function generateSyncPreview(): SyncPreviewItem[];
|
|
47
|
+
/**
|
|
48
|
+
* Get count of syncable profiles.
|
|
49
|
+
*/
|
|
50
|
+
export declare function getSyncableProfileCount(): number;
|
|
51
|
+
/**
|
|
52
|
+
* Check if profile is syncable (configured with valid API key).
|
|
53
|
+
*/
|
|
54
|
+
export declare function isProfileSyncable(profileName: string): boolean;
|
|
55
|
+
//# sourceMappingURL=profile-mapper.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"profile-mapper.d.ts","sourceRoot":"","sources":["../../../src/cliproxy/sync/profile-mapper.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAEzD;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,yCAAyC;IACzC,IAAI,EAAE,MAAM,CAAC;IACb,iCAAiC;IACjC,YAAY,EAAE,MAAM,CAAC;IACrB,wCAAwC;IACxC,YAAY,EAAE,OAAO,CAAC;IACtB,+CAA+C;IAC/C,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC9B;AASD;;;GAGG;AACH,wBAAgB,oBAAoB,IAAI,eAAe,EAAE,CAyCxD;AAUD;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,eAAe,GAAG,SAAS,GAAG,IAAI,CAgDhF;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,IAAI,SAAS,EAAE,CAYjD;AAED;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,mBAAmB;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,wBAAwB;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,iBAAiB;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,mBAAmB,IAAI,eAAe,EAAE,CAavD;AAED;;GAEG;AACH,wBAAgB,uBAAuB,IAAI,MAAM,CAEhD;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAE9D"}
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Profile Mapper for CLIProxy Sync
|
|
4
|
+
*
|
|
5
|
+
* Transforms CCS settings-based profiles into CLIProxy ClaudeKey format.
|
|
6
|
+
*/
|
|
7
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
8
|
+
if (k2 === undefined) k2 = k;
|
|
9
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
10
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
11
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
12
|
+
}
|
|
13
|
+
Object.defineProperty(o, k2, desc);
|
|
14
|
+
}) : (function(o, m, k, k2) {
|
|
15
|
+
if (k2 === undefined) k2 = k;
|
|
16
|
+
o[k2] = m[k];
|
|
17
|
+
}));
|
|
18
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
19
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
20
|
+
}) : function(o, v) {
|
|
21
|
+
o["default"] = v;
|
|
22
|
+
});
|
|
23
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
24
|
+
if (mod && mod.__esModule) return mod;
|
|
25
|
+
var result = {};
|
|
26
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
27
|
+
__setModuleDefault(result, mod);
|
|
28
|
+
return result;
|
|
29
|
+
};
|
|
30
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
31
|
+
exports.isProfileSyncable = exports.getSyncableProfileCount = exports.generateSyncPreview = exports.generateSyncPayload = exports.mapProfileToClaudeKey = exports.loadSyncableProfiles = void 0;
|
|
32
|
+
const fs = __importStar(require("fs"));
|
|
33
|
+
const path = __importStar(require("path"));
|
|
34
|
+
const config_manager_1 = require("../../utils/config-manager");
|
|
35
|
+
const profile_reader_1 = require("../../api/services/profile-reader");
|
|
36
|
+
/**
|
|
37
|
+
* Load syncable API profiles from CCS config.
|
|
38
|
+
* Filters to only configured profiles (with real API keys).
|
|
39
|
+
*/
|
|
40
|
+
function loadSyncableProfiles() {
|
|
41
|
+
const { profiles } = (0, profile_reader_1.listApiProfiles)();
|
|
42
|
+
const syncable = [];
|
|
43
|
+
for (const profile of profiles) {
|
|
44
|
+
// Skip unconfigured profiles
|
|
45
|
+
if (!profile.isConfigured) {
|
|
46
|
+
continue;
|
|
47
|
+
}
|
|
48
|
+
// Load settings.json for env vars
|
|
49
|
+
const ccsDir = (0, config_manager_1.getCcsDir)();
|
|
50
|
+
const settingsPath = path.join(ccsDir, `${profile.name}.settings.json`);
|
|
51
|
+
let env;
|
|
52
|
+
try {
|
|
53
|
+
if (fs.existsSync(settingsPath)) {
|
|
54
|
+
const content = fs.readFileSync(settingsPath, 'utf8');
|
|
55
|
+
const settings = JSON.parse(content);
|
|
56
|
+
env = settings.env;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
catch {
|
|
60
|
+
// Skip profiles with unreadable settings
|
|
61
|
+
continue;
|
|
62
|
+
}
|
|
63
|
+
// Must have ANTHROPIC_AUTH_TOKEN
|
|
64
|
+
const token = env?.ANTHROPIC_AUTH_TOKEN;
|
|
65
|
+
if (!token || token.includes('YOUR_') || token.includes('your-')) {
|
|
66
|
+
continue;
|
|
67
|
+
}
|
|
68
|
+
syncable.push({
|
|
69
|
+
name: profile.name,
|
|
70
|
+
settingsPath,
|
|
71
|
+
isConfigured: true,
|
|
72
|
+
env,
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
return syncable;
|
|
76
|
+
}
|
|
77
|
+
exports.loadSyncableProfiles = loadSyncableProfiles;
|
|
78
|
+
/**
|
|
79
|
+
* Sanitize profile name for YAML safety.
|
|
80
|
+
* Replaces non-alphanumeric chars (except - and _) with hyphens.
|
|
81
|
+
*/
|
|
82
|
+
function sanitizeProfileName(name) {
|
|
83
|
+
return name.replace(/[^a-zA-Z0-9-_]/g, '-');
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Map a single profile to ClaudeKey format.
|
|
87
|
+
*/
|
|
88
|
+
function mapProfileToClaudeKey(profile) {
|
|
89
|
+
const env = profile.env;
|
|
90
|
+
if (!env)
|
|
91
|
+
return null;
|
|
92
|
+
const apiKey = env.ANTHROPIC_AUTH_TOKEN;
|
|
93
|
+
if (!apiKey)
|
|
94
|
+
return null;
|
|
95
|
+
const baseUrl = env.ANTHROPIC_BASE_URL;
|
|
96
|
+
const modelName = env.ANTHROPIC_MODEL;
|
|
97
|
+
// Generate prefix from profile name (e.g., "glm" -> "glm-")
|
|
98
|
+
const sanitizedName = sanitizeProfileName(profile.name);
|
|
99
|
+
if (!sanitizedName || sanitizedName === '') {
|
|
100
|
+
return null; // Skip profiles with invalid names
|
|
101
|
+
}
|
|
102
|
+
// Skip if name is too long (>64 chars)
|
|
103
|
+
if (sanitizedName.length > 64) {
|
|
104
|
+
return null;
|
|
105
|
+
}
|
|
106
|
+
// Skip if name has no alphanumeric characters (e.g., only special chars -> "-----")
|
|
107
|
+
if (!/[a-zA-Z0-9]/.test(sanitizedName)) {
|
|
108
|
+
return null;
|
|
109
|
+
}
|
|
110
|
+
const prefix = `${sanitizedName}-`;
|
|
111
|
+
const claudeKey = {
|
|
112
|
+
'api-key': apiKey,
|
|
113
|
+
prefix,
|
|
114
|
+
};
|
|
115
|
+
if (baseUrl) {
|
|
116
|
+
claudeKey['base-url'] = baseUrl;
|
|
117
|
+
}
|
|
118
|
+
// Use model name directly from profile (no alias mapping)
|
|
119
|
+
if (modelName) {
|
|
120
|
+
claudeKey.models = [
|
|
121
|
+
{
|
|
122
|
+
name: modelName,
|
|
123
|
+
alias: '',
|
|
124
|
+
},
|
|
125
|
+
];
|
|
126
|
+
}
|
|
127
|
+
return claudeKey;
|
|
128
|
+
}
|
|
129
|
+
exports.mapProfileToClaudeKey = mapProfileToClaudeKey;
|
|
130
|
+
/**
|
|
131
|
+
* Generate sync payload from all configured profiles.
|
|
132
|
+
* Returns array of ClaudeKey ready to push to remote CLIProxy.
|
|
133
|
+
*/
|
|
134
|
+
function generateSyncPayload() {
|
|
135
|
+
const profiles = loadSyncableProfiles();
|
|
136
|
+
const keys = [];
|
|
137
|
+
for (const profile of profiles) {
|
|
138
|
+
const key = mapProfileToClaudeKey(profile);
|
|
139
|
+
if (key) {
|
|
140
|
+
keys.push(key);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
return keys;
|
|
144
|
+
}
|
|
145
|
+
exports.generateSyncPayload = generateSyncPayload;
|
|
146
|
+
function generateSyncPreview() {
|
|
147
|
+
const profiles = loadSyncableProfiles();
|
|
148
|
+
const preview = [];
|
|
149
|
+
for (const profile of profiles) {
|
|
150
|
+
preview.push({
|
|
151
|
+
name: profile.name,
|
|
152
|
+
baseUrl: profile.env?.ANTHROPIC_BASE_URL,
|
|
153
|
+
modelName: profile.env?.ANTHROPIC_MODEL,
|
|
154
|
+
});
|
|
155
|
+
}
|
|
156
|
+
return preview;
|
|
157
|
+
}
|
|
158
|
+
exports.generateSyncPreview = generateSyncPreview;
|
|
159
|
+
/**
|
|
160
|
+
* Get count of syncable profiles.
|
|
161
|
+
*/
|
|
162
|
+
function getSyncableProfileCount() {
|
|
163
|
+
return loadSyncableProfiles().length;
|
|
164
|
+
}
|
|
165
|
+
exports.getSyncableProfileCount = getSyncableProfileCount;
|
|
166
|
+
/**
|
|
167
|
+
* Check if profile is syncable (configured with valid API key).
|
|
168
|
+
*/
|
|
169
|
+
function isProfileSyncable(profileName) {
|
|
170
|
+
return (0, profile_reader_1.isApiProfileConfigured)(profileName);
|
|
171
|
+
}
|
|
172
|
+
exports.isProfileSyncable = isProfileSyncable;
|
|
173
|
+
//# sourceMappingURL=profile-mapper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"profile-mapper.js","sourceRoot":"","sources":["../../../src/cliproxy/sync/profile-mapper.ts"],"names":[],"mappings":"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"}
|
package/dist/cliproxy/types.d.ts
CHANGED
|
@@ -107,8 +107,9 @@ export interface DownloadResult {
|
|
|
107
107
|
* - iflow: iFlow via OAuth
|
|
108
108
|
* - kiro: Kiro (AWS CodeWhisperer) via OAuth
|
|
109
109
|
* - ghcp: GitHub Copilot via Device Code (OAuth through CLIProxyAPIPlus)
|
|
110
|
+
* - claude: Claude (Anthropic) via OAuth
|
|
110
111
|
*/
|
|
111
|
-
export type CLIProxyProvider = 'gemini' | 'codex' | 'agy' | 'qwen' | 'iflow' | 'kiro' | 'ghcp';
|
|
112
|
+
export type CLIProxyProvider = 'gemini' | 'codex' | 'agy' | 'qwen' | 'iflow' | 'kiro' | 'ghcp' | 'claude';
|
|
112
113
|
/**
|
|
113
114
|
* CLIProxy backend selection
|
|
114
115
|
* - original: CLIProxyAPI (no Kiro/ghcp support)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/cliproxy/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,OAAO,GAAG,SAAS,CAAC;AAEzD;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,OAAO,CAAC;AAE9C;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG,QAAQ,GAAG,KAAK,CAAC;AAEhD;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,gDAAgD;IAChD,EAAE,EAAE,WAAW,CAAC;IAChB,sCAAsC;IACtC,IAAI,EAAE,aAAa,CAAC;IACpB,6EAA6E;IAC7E,UAAU,EAAE,MAAM,CAAC;IACnB,2DAA2D;IAC3D,SAAS,EAAE,gBAAgB,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,sCAAsC;IACtC,OAAO,EAAE,MAAM,CAAC;IAChB,+BAA+B;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,8CAA8C;IAC9C,OAAO,EAAE,MAAM,CAAC;IAChB,sCAAsC;IACtC,UAAU,EAAE,MAAM,CAAC;IACnB,6BAA6B;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,2DAA2D;IAC3D,YAAY,EAAE,OAAO,CAAC;IACtB,yCAAyC;IACzC,OAAO,CAAC,EAAE,eAAe,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,8BAA8B;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,8BAA8B;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,kCAAkC;IAClC,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG,CAAC,QAAQ,EAAE,gBAAgB,KAAK,IAAI,CAAC;AAEpE;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,8BAA8B;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,0BAA0B;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,oBAAoB;IACpB,QAAQ,EAAE,YAAY,CAAC;IACvB,iCAAiC;IACjC,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,+BAA+B;IAC/B,KAAK,EAAE,OAAO,CAAC;IACf,2CAA2C;IAC3C,QAAQ,EAAE,MAAM,CAAC;IACjB,+BAA+B;IAC/B,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,iCAAiC;IACjC,OAAO,EAAE,OAAO,CAAC;IACjB,8BAA8B;IAC9B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,8BAA8B;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,kCAAkC;IAClC,OAAO,EAAE,MAAM,CAAC;CACjB;AAED
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/cliproxy/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/cliproxy/types.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/cliproxy/types.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAwIH;;GAEG;AACU,QAAA,mBAAmB,GAAuB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api-command.d.ts","sourceRoot":"","sources":["../../src/commands/api-command.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;
|
|
1
|
+
{"version":3,"file":"api-command.d.ts","sourceRoot":"","sources":["../../src/commands/api-command.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAweH,8BAA8B;AAC9B,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA4BpE"}
|
|
@@ -13,6 +13,7 @@ exports.handleApiCommand = void 0;
|
|
|
13
13
|
const ui_1 = require("../utils/ui");
|
|
14
14
|
const prompt_1 = require("../utils/prompt");
|
|
15
15
|
const services_1 = require("../api/services");
|
|
16
|
+
const local_config_sync_1 = require("../cliproxy/sync/local-config-sync");
|
|
16
17
|
/** Parse command line arguments for api commands */
|
|
17
18
|
function parseArgs(args) {
|
|
18
19
|
const result = {};
|
|
@@ -212,6 +213,14 @@ async function handleCreate(args) {
|
|
|
212
213
|
console.log((0, ui_1.fail)(`Failed to create API profile: ${result.error}`));
|
|
213
214
|
process.exit(1);
|
|
214
215
|
}
|
|
216
|
+
// Trigger sync to local CLIProxy config (best-effort)
|
|
217
|
+
try {
|
|
218
|
+
(0, local_config_sync_1.syncToLocalConfig)();
|
|
219
|
+
}
|
|
220
|
+
catch (err) {
|
|
221
|
+
const message = err instanceof Error ? err.message : 'Unknown error';
|
|
222
|
+
console.log(`[i] Auto-sync to CLIProxy config skipped: ${message}`);
|
|
223
|
+
}
|
|
215
224
|
// Display success
|
|
216
225
|
console.log('');
|
|
217
226
|
const hasCustomMapping = opusModel !== model || sonnetModel !== model || haikuModel !== model;
|