@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.
Files changed (142) hide show
  1. package/dist/auth/profile-detector.d.ts +1 -1
  2. package/dist/auth/profile-detector.d.ts.map +1 -1
  3. package/dist/auth/profile-detector.js +1 -0
  4. package/dist/auth/profile-detector.js.map +1 -1
  5. package/dist/cliproxy/account-manager.d.ts +3 -3
  6. package/dist/cliproxy/account-manager.d.ts.map +1 -1
  7. package/dist/cliproxy/account-manager.js +2 -1
  8. package/dist/cliproxy/account-manager.js.map +1 -1
  9. package/dist/cliproxy/auth/auth-types.d.ts.map +1 -1
  10. package/dist/cliproxy/auth/auth-types.js +10 -0
  11. package/dist/cliproxy/auth/auth-types.js.map +1 -1
  12. package/dist/cliproxy/auth/provider-refreshers/index.d.ts.map +1 -1
  13. package/dist/cliproxy/auth/provider-refreshers/index.js +1 -0
  14. package/dist/cliproxy/auth/provider-refreshers/index.js.map +1 -1
  15. package/dist/cliproxy/auth/token-expiry-checker.d.ts.map +1 -1
  16. package/dist/cliproxy/auth/token-expiry-checker.js +2 -1
  17. package/dist/cliproxy/auth/token-expiry-checker.js.map +1 -1
  18. package/dist/cliproxy/auth/token-manager.d.ts.map +1 -1
  19. package/dist/cliproxy/auth/token-manager.js +2 -1
  20. package/dist/cliproxy/auth/token-manager.js.map +1 -1
  21. package/dist/cliproxy/cliproxy-executor.d.ts.map +1 -1
  22. package/dist/cliproxy/cliproxy-executor.js +20 -4
  23. package/dist/cliproxy/cliproxy-executor.js.map +1 -1
  24. package/dist/cliproxy/config-generator.d.ts.map +1 -1
  25. package/dist/cliproxy/config-generator.js +1 -0
  26. package/dist/cliproxy/config-generator.js.map +1 -1
  27. package/dist/cliproxy/index.d.ts +4 -0
  28. package/dist/cliproxy/index.d.ts.map +1 -1
  29. package/dist/cliproxy/index.js +12 -1
  30. package/dist/cliproxy/index.js.map +1 -1
  31. package/dist/cliproxy/management-api-client.d.ts +67 -0
  32. package/dist/cliproxy/management-api-client.d.ts.map +1 -0
  33. package/dist/cliproxy/management-api-client.js +347 -0
  34. package/dist/cliproxy/management-api-client.js.map +1 -0
  35. package/dist/cliproxy/management-api-types.d.ts +107 -0
  36. package/dist/cliproxy/management-api-types.d.ts.map +1 -0
  37. package/dist/cliproxy/management-api-types.js +9 -0
  38. package/dist/cliproxy/management-api-types.js.map +1 -0
  39. package/dist/cliproxy/model-catalog.d.ts +2 -2
  40. package/dist/cliproxy/model-catalog.d.ts.map +1 -1
  41. package/dist/cliproxy/model-catalog.js +50 -1
  42. package/dist/cliproxy/model-catalog.js.map +1 -1
  43. package/dist/cliproxy/model-config.d.ts.map +1 -1
  44. package/dist/cliproxy/model-config.js +11 -3
  45. package/dist/cliproxy/model-config.js.map +1 -1
  46. package/dist/cliproxy/quota-fetcher.d.ts.map +1 -1
  47. package/dist/cliproxy/quota-fetcher.js +25 -50
  48. package/dist/cliproxy/quota-fetcher.js.map +1 -1
  49. package/dist/cliproxy/quota-manager.js +2 -2
  50. package/dist/cliproxy/quota-manager.js.map +1 -1
  51. package/dist/cliproxy/services/variant-config-adapter.js +1 -1
  52. package/dist/cliproxy/services/variant-config-adapter.js.map +1 -1
  53. package/dist/cliproxy/sync/auto-sync-watcher.d.ts +37 -0
  54. package/dist/cliproxy/sync/auto-sync-watcher.d.ts.map +1 -0
  55. package/dist/cliproxy/sync/auto-sync-watcher.js +211 -0
  56. package/dist/cliproxy/sync/auto-sync-watcher.js.map +1 -0
  57. package/dist/cliproxy/sync/index.d.ts +10 -0
  58. package/dist/cliproxy/sync/index.d.ts.map +1 -0
  59. package/dist/cliproxy/sync/index.js +27 -0
  60. package/dist/cliproxy/sync/index.js.map +1 -0
  61. package/dist/cliproxy/sync/local-config-sync.d.ts +28 -0
  62. package/dist/cliproxy/sync/local-config-sync.d.ts.map +1 -0
  63. package/dist/cliproxy/sync/local-config-sync.js +223 -0
  64. package/dist/cliproxy/sync/local-config-sync.js.map +1 -0
  65. package/dist/cliproxy/sync/profile-mapper.d.ts +55 -0
  66. package/dist/cliproxy/sync/profile-mapper.d.ts.map +1 -0
  67. package/dist/cliproxy/sync/profile-mapper.js +173 -0
  68. package/dist/cliproxy/sync/profile-mapper.js.map +1 -0
  69. package/dist/cliproxy/types.d.ts +2 -1
  70. package/dist/cliproxy/types.d.ts.map +1 -1
  71. package/dist/cliproxy/types.js.map +1 -1
  72. package/dist/commands/api-command.d.ts.map +1 -1
  73. package/dist/commands/api-command.js +9 -0
  74. package/dist/commands/api-command.js.map +1 -1
  75. package/dist/commands/cliproxy-command.d.ts.map +1 -1
  76. package/dist/commands/cliproxy-command.js +19 -1
  77. package/dist/commands/cliproxy-command.js.map +1 -1
  78. package/dist/commands/cliproxy-sync-handler.d.ts +19 -0
  79. package/dist/commands/cliproxy-sync-handler.d.ts.map +1 -0
  80. package/dist/commands/cliproxy-sync-handler.js +99 -0
  81. package/dist/commands/cliproxy-sync-handler.js.map +1 -0
  82. package/dist/config/unified-config-loader.d.ts.map +1 -1
  83. package/dist/config/unified-config-loader.js +2 -0
  84. package/dist/config/unified-config-loader.js.map +1 -1
  85. package/dist/config/unified-config-types.d.ts +5 -1
  86. package/dist/config/unified-config-types.d.ts.map +1 -1
  87. package/dist/config/unified-config-types.js +2 -1
  88. package/dist/config/unified-config-types.js.map +1 -1
  89. package/dist/management/oauth-port-diagnostics.d.ts +4 -0
  90. package/dist/management/oauth-port-diagnostics.d.ts.map +1 -1
  91. package/dist/management/oauth-port-diagnostics.js +10 -2
  92. package/dist/management/oauth-port-diagnostics.js.map +1 -1
  93. package/dist/types/config.d.ts +1 -1
  94. package/dist/types/config.d.ts.map +1 -1
  95. package/dist/ui/assets/{accounts-BOzNq5ee.js → accounts-CeG4Acy7.js} +1 -1
  96. package/dist/ui/assets/{alert-dialog-Cb5PMEBl.js → alert-dialog-BZM_wV9y.js} +1 -1
  97. package/dist/ui/assets/{api-Dve5qAOP.js → api-DTsaYKMt.js} +1 -1
  98. package/dist/ui/assets/{auth-section-Cpc5CmnT.js → auth-section-oeseAbTR.js} +1 -1
  99. package/dist/ui/assets/{backups-section-DUZ2HR46.js → backups-section-BEsmu_FQ.js} +1 -1
  100. package/dist/ui/assets/cliproxy-CmciSwMc.js +3 -0
  101. package/dist/ui/assets/{cliproxy-control-panel-D8brA7Zn.js → cliproxy-control-panel-iaEe8rGw.js} +1 -1
  102. package/dist/ui/assets/{confirm-dialog-0Zy9TN_K.js → confirm-dialog-DVpWf5Eg.js} +1 -1
  103. package/dist/ui/assets/{copilot-C2Q9oafS.js → copilot-JypcBubb.js} +3 -3
  104. package/dist/ui/assets/{globalenv-section-g_Bh1_Vi.js → globalenv-section-i6XQTH8J.js} +1 -1
  105. package/dist/ui/assets/{health-BfdjLTeV.js → health-dRNF8Scq.js} +1 -1
  106. package/dist/ui/assets/icons-n7yU6ZH4.js +1 -0
  107. package/dist/ui/assets/{index-B9LdCgpr.js → index-06z5N4Jt.js} +1 -1
  108. package/dist/ui/assets/{index-326cTntS.js → index-7A6gkPzK.js} +1 -1
  109. package/dist/ui/assets/index-8fgih6zR.js +1 -0
  110. package/dist/ui/assets/{index-CErLyTsQ.js → index-CClGFNH9.js} +16 -16
  111. package/dist/ui/assets/{index-DX32Yp2A.js → index-DMcwfw-m.js} +1 -1
  112. package/dist/ui/assets/index-WzrICGKd.css +1 -0
  113. package/dist/ui/assets/providers/claude.svg +1 -0
  114. package/dist/ui/assets/proxy-status-widget-pB419daP.js +1 -0
  115. package/dist/ui/assets/{shared-ogUMuADx.js → shared-BYUyFWPc.js} +1 -1
  116. package/dist/ui/assets/{switch-DVMOWp74.js → switch-Bz6aFOeS.js} +1 -1
  117. package/dist/ui/index.html +3 -3
  118. package/dist/web-server/index.d.ts.map +1 -1
  119. package/dist/web-server/index.js +9 -1
  120. package/dist/web-server/index.js.map +1 -1
  121. package/dist/web-server/routes/account-routes.d.ts.map +1 -1
  122. package/dist/web-server/routes/account-routes.js +3 -10
  123. package/dist/web-server/routes/account-routes.js.map +1 -1
  124. package/dist/web-server/routes/cliproxy-auth-routes.d.ts.map +1 -1
  125. package/dist/web-server/routes/cliproxy-auth-routes.js +5 -10
  126. package/dist/web-server/routes/cliproxy-auth-routes.js.map +1 -1
  127. package/dist/web-server/routes/cliproxy-stats-routes.d.ts.map +1 -1
  128. package/dist/web-server/routes/cliproxy-stats-routes.js +3 -10
  129. package/dist/web-server/routes/cliproxy-stats-routes.js.map +1 -1
  130. package/dist/web-server/routes/cliproxy-sync-routes.d.ts +6 -0
  131. package/dist/web-server/routes/cliproxy-sync-routes.d.ts.map +1 -0
  132. package/dist/web-server/routes/cliproxy-sync-routes.js +157 -0
  133. package/dist/web-server/routes/cliproxy-sync-routes.js.map +1 -0
  134. package/dist/web-server/routes/index.d.ts.map +1 -1
  135. package/dist/web-server/routes/index.js +2 -0
  136. package/dist/web-server/routes/index.js.map +1 -1
  137. package/package.json +1 -1
  138. package/dist/ui/assets/cliproxy-DaYarYV8.js +0 -3
  139. package/dist/ui/assets/icons-C6UNjkCT.js +0 -1
  140. package/dist/ui/assets/index-C-e4p8-0.js +0 -1
  141. package/dist/ui/assets/index-DWVSWP6e.css +0 -1
  142. 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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"}
@@ -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":"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"}
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;;;AA+HH;;GAEG;AACU,QAAA,mBAAmB,GAAuB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC"}
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;AA+dH,8BAA8B;AAC9B,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA4BpE"}
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;