centaurus-cli 2.0.0 → 2.0.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/CONFIG_GUIDE.md +100 -106
- package/README.md +68 -63
- package/dist/cli-adapter.d.ts +9 -3
- package/dist/cli-adapter.d.ts.map +1 -1
- package/dist/cli-adapter.js +123 -164
- package/dist/cli-adapter.js.map +1 -1
- package/dist/commands/CommandParser.d.ts +1 -1
- package/dist/commands/CommandParser.d.ts.map +1 -1
- package/dist/commands/CommandParser.js +3 -18
- package/dist/commands/CommandParser.js.map +1 -1
- package/dist/commands/view-duplication-logs.d.ts +5 -0
- package/dist/commands/view-duplication-logs.d.ts.map +1 -0
- package/dist/commands/view-duplication-logs.js +14 -0
- package/dist/commands/view-duplication-logs.js.map +1 -0
- package/dist/config/ConfigManager.d.ts +10 -7
- package/dist/config/ConfigManager.d.ts.map +1 -1
- package/dist/config/ConfigManager.js +43 -142
- package/dist/config/ConfigManager.js.map +1 -1
- package/dist/config/defaultConfig.d.ts +0 -4
- package/dist/config/defaultConfig.d.ts.map +1 -1
- package/dist/config/defaultConfig.js +1 -6
- package/dist/config/defaultConfig.js.map +1 -1
- package/dist/config/manager.d.ts +15 -13
- package/dist/config/manager.d.ts.map +1 -1
- package/dist/config/manager.js +52 -41
- package/dist/config/manager.js.map +1 -1
- package/dist/config/models.d.ts +31 -0
- package/dist/config/models.d.ts.map +1 -0
- package/dist/config/models.js +49 -0
- package/dist/config/models.js.map +1 -0
- package/dist/config/types.d.ts +0 -3
- package/dist/config/types.d.ts.map +1 -1
- package/dist/config/types.js +0 -1
- package/dist/config/types.js.map +1 -1
- package/dist/index.js +27 -1
- package/dist/index.js.map +1 -1
- package/dist/prompts/system-prompt.d.ts +1 -1
- package/dist/prompts/system-prompt.d.ts.map +1 -1
- package/dist/prompts/system-prompt.js +0 -1
- package/dist/prompts/system-prompt.js.map +1 -1
- package/dist/services/ai-service-client.d.ts +82 -0
- package/dist/services/ai-service-client.d.ts.map +1 -0
- package/dist/services/ai-service-client.js +254 -0
- package/dist/services/ai-service-client.js.map +1 -0
- package/dist/services/api-client.js +3 -3
- package/dist/services/api-client.js.map +1 -1
- package/dist/tools/ToolRegistry.d.ts +14 -3
- package/dist/tools/ToolRegistry.d.ts.map +1 -1
- package/dist/tools/ToolRegistry.js +46 -34
- package/dist/tools/ToolRegistry.js.map +1 -1
- package/dist/tools/command.d.ts.map +1 -1
- package/dist/tools/command.js +17 -3
- package/dist/tools/command.js.map +1 -1
- package/dist/tools/file-ops.js +3 -3
- package/dist/tools/file-ops.js.map +1 -1
- package/dist/tools/web-search.js +2 -2
- package/dist/tools/web-search.js.map +1 -1
- package/dist/types/index.d.ts +1 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/ui/components/App.d.ts +3 -2
- package/dist/ui/components/App.d.ts.map +1 -1
- package/dist/ui/components/App.js +107 -16
- package/dist/ui/components/App.js.map +1 -1
- package/dist/ui/components/CodeBlock.d.ts.map +1 -1
- package/dist/ui/components/CodeBlock.js +15 -3
- package/dist/ui/components/CodeBlock.js.map +1 -1
- package/dist/ui/components/ConfirmPrompt.d.ts.map +1 -1
- package/dist/ui/components/ConfirmPrompt.js +32 -20
- package/dist/ui/components/ConfirmPrompt.js.map +1 -1
- package/dist/ui/components/DiffViewer.d.ts.map +1 -1
- package/dist/ui/components/DiffViewer.js +16 -2
- package/dist/ui/components/DiffViewer.js.map +1 -1
- package/dist/ui/components/InputBox.d.ts.map +1 -1
- package/dist/ui/components/InputBox.js +26 -9
- package/dist/ui/components/InputBox.js.map +1 -1
- package/dist/ui/components/LoadingIndicator.d.ts.map +1 -1
- package/dist/ui/components/LoadingIndicator.js +6 -2
- package/dist/ui/components/LoadingIndicator.js.map +1 -1
- package/dist/ui/components/MarkdownRenderer.d.ts.map +1 -1
- package/dist/ui/components/MarkdownRenderer.js +8 -12
- package/dist/ui/components/MarkdownRenderer.js.map +1 -1
- package/dist/ui/components/StreamingMessageDisplay.d.ts +6 -7
- package/dist/ui/components/StreamingMessageDisplay.d.ts.map +1 -1
- package/dist/ui/components/StreamingMessageDisplay.js +69 -12
- package/dist/ui/components/StreamingMessageDisplay.js.map +1 -1
- package/dist/ui/components/ToolExecutionMessage.d.ts.map +1 -1
- package/dist/ui/components/ToolExecutionMessage.js +44 -16
- package/dist/ui/components/ToolExecutionMessage.js.map +1 -1
- package/dist/ui/components/WelcomeBanner.d.ts.map +1 -1
- package/dist/ui/components/WelcomeBanner.js.map +1 -1
- package/dist/ui/utils/duplication-detector.d.ts +32 -0
- package/dist/ui/utils/duplication-detector.d.ts.map +1 -0
- package/dist/ui/utils/duplication-detector.js +227 -0
- package/dist/ui/utils/duplication-detector.js.map +1 -0
- package/dist/ui/utils/duplication-logger.d.ts +21 -0
- package/dist/ui/utils/duplication-logger.d.ts.map +1 -0
- package/dist/ui/utils/duplication-logger.js +85 -0
- package/dist/ui/utils/duplication-logger.js.map +1 -0
- package/dist/ui/utils/terminal-scanner.d.ts +19 -0
- package/dist/ui/utils/terminal-scanner.d.ts.map +1 -0
- package/dist/ui/utils/terminal-scanner.js +217 -0
- package/dist/ui/utils/terminal-scanner.js.map +1 -0
- package/package.json +2 -13
|
@@ -10,11 +10,9 @@ export declare class ConfigManager {
|
|
|
10
10
|
private config;
|
|
11
11
|
private encryptionKey;
|
|
12
12
|
private useBackendSync;
|
|
13
|
+
private migrationPerformed;
|
|
13
14
|
private constructor();
|
|
14
15
|
static getInstance(): ConfigManager;
|
|
15
|
-
private getMachineKey;
|
|
16
|
-
private encrypt;
|
|
17
|
-
private decrypt;
|
|
18
16
|
initialize(): Promise<void>;
|
|
19
17
|
/**
|
|
20
18
|
* Enable backend synchronization
|
|
@@ -37,15 +35,11 @@ export declare class ConfigManager {
|
|
|
37
35
|
save(): Promise<void>;
|
|
38
36
|
get(key: keyof CentaurusConfig): any;
|
|
39
37
|
getAll(): CentaurusConfig;
|
|
40
|
-
getProvider(): string;
|
|
41
38
|
getModel(): string;
|
|
42
|
-
getApiKey(provider?: string): string | undefined;
|
|
43
39
|
isAutoAcceptEnabled(): boolean;
|
|
44
40
|
getTheme(): string;
|
|
45
41
|
set<K extends keyof CentaurusConfig>(key: K, value: CentaurusConfig[K]): Promise<void>;
|
|
46
|
-
setProvider(provider: string): Promise<void>;
|
|
47
42
|
setModel(model: string): Promise<void>;
|
|
48
|
-
setApiKey(provider: string, apiKey: string): Promise<void>;
|
|
49
43
|
setAutoAccept(enabled: boolean): Promise<void>;
|
|
50
44
|
setTheme(theme: string): Promise<void>;
|
|
51
45
|
validateConfig(): {
|
|
@@ -54,6 +48,15 @@ export declare class ConfigManager {
|
|
|
54
48
|
};
|
|
55
49
|
reset(): Promise<void>;
|
|
56
50
|
exportConfig(): object;
|
|
51
|
+
/**
|
|
52
|
+
* Check if configuration migration was performed
|
|
53
|
+
* This is used to show a one-time migration message to users
|
|
54
|
+
*/
|
|
55
|
+
wasMigrationPerformed(): boolean;
|
|
56
|
+
/**
|
|
57
|
+
* Reset migration flag (after showing migration message)
|
|
58
|
+
*/
|
|
59
|
+
resetMigrationFlag(): void;
|
|
57
60
|
}
|
|
58
61
|
export default ConfigManager;
|
|
59
62
|
//# sourceMappingURL=ConfigManager.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConfigManager.d.ts","sourceRoot":"","sources":["../../src/config/ConfigManager.ts"],"names":[],"mappings":"AAAA;;;;GAIG;
|
|
1
|
+
{"version":3,"file":"ConfigManager.d.ts","sourceRoot":"","sources":["../../src/config/ConfigManager.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,EAAiB,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAIpE,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAgB;IACvC,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,cAAc,CAAkB;IACxC,OAAO,CAAC,kBAAkB,CAAkB;IAE5C,OAAO;IAOP,MAAM,CAAC,WAAW,IAAI,aAAa;IAQ7B,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAgBjC;;OAEG;IACH,iBAAiB,IAAI,IAAI;IAIzB;;OAEG;IACH,kBAAkB,IAAI,IAAI;IAI1B;;OAEG;YACW,eAAe;IA2B7B;;OAEG;YACW,aAAa;YAiBb,eAAe;IASvB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAyCrB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAW3B,GAAG,CAAC,GAAG,EAAE,MAAM,eAAe,GAAG,GAAG;IAIpC,MAAM,IAAI,eAAe;IAKzB,QAAQ,IAAI,MAAM;IAIlB,mBAAmB,IAAI,OAAO;IAI9B,QAAQ,IAAI,MAAM;IAKZ,GAAG,CAAC,CAAC,SAAS,MAAM,eAAe,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,eAAe,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAMtF,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAWtC,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAM9C,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAU5C,cAAc,IAAI;QAAE,KAAK,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,EAAE,CAAA;KAAE;IAchD,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAM5B,YAAY,IAAI,MAAM;IAItB;;;OAGG;IACH,qBAAqB,IAAI,OAAO;IAIhC;;OAEG;IACH,kBAAkB,IAAI,IAAI;CAG3B;AAED,eAAe,aAAa,CAAC"}
|
|
@@ -6,21 +6,21 @@
|
|
|
6
6
|
import * as fs from 'fs/promises';
|
|
7
7
|
import * as path from 'path';
|
|
8
8
|
import * as os from 'os';
|
|
9
|
-
import * as crypto from 'crypto';
|
|
10
9
|
import { defaultConfig } from './defaultConfig.js';
|
|
11
10
|
import { apiClient } from '../services/api-client.js';
|
|
11
|
+
import { isValidModel, getInvalidModelError } from './models.js';
|
|
12
12
|
export class ConfigManager {
|
|
13
13
|
static instance;
|
|
14
14
|
configPath;
|
|
15
15
|
config;
|
|
16
16
|
encryptionKey;
|
|
17
17
|
useBackendSync = false;
|
|
18
|
+
migrationPerformed = false;
|
|
18
19
|
constructor() {
|
|
19
20
|
const configDir = path.join(os.homedir(), '.centaurus');
|
|
20
21
|
this.configPath = path.join(configDir, 'config.json');
|
|
21
22
|
this.config = { ...defaultConfig };
|
|
22
|
-
//
|
|
23
|
-
this.encryptionKey = this.getMachineKey();
|
|
23
|
+
this.encryptionKey = ''; // No longer needed but kept for compatibility
|
|
24
24
|
}
|
|
25
25
|
static getInstance() {
|
|
26
26
|
if (!ConfigManager.instance) {
|
|
@@ -28,44 +28,6 @@ export class ConfigManager {
|
|
|
28
28
|
}
|
|
29
29
|
return ConfigManager.instance;
|
|
30
30
|
}
|
|
31
|
-
getMachineKey() {
|
|
32
|
-
// Use a combination of hostname and username for encryption key
|
|
33
|
-
const hostname = os.hostname();
|
|
34
|
-
const username = os.userInfo().username;
|
|
35
|
-
return crypto.createHash('sha256')
|
|
36
|
-
.update(`${hostname}:${username}:centaurus`)
|
|
37
|
-
.digest('hex')
|
|
38
|
-
.substring(0, 32);
|
|
39
|
-
}
|
|
40
|
-
encrypt(text) {
|
|
41
|
-
const algorithm = 'aes-256-gcm';
|
|
42
|
-
const iv = crypto.randomBytes(16);
|
|
43
|
-
const cipher = crypto.createCipheriv(algorithm, Buffer.from(this.encryptionKey), iv);
|
|
44
|
-
let encrypted = cipher.update(text, 'utf8', 'hex');
|
|
45
|
-
encrypted += cipher.final('hex');
|
|
46
|
-
const authTag = cipher.getAuthTag();
|
|
47
|
-
return iv.toString('hex') + ':' + authTag.toString('hex') + ':' + encrypted;
|
|
48
|
-
}
|
|
49
|
-
decrypt(encryptedData) {
|
|
50
|
-
try {
|
|
51
|
-
const parts = encryptedData.split(':');
|
|
52
|
-
if (parts.length !== 3)
|
|
53
|
-
return encryptedData; // Not encrypted
|
|
54
|
-
const algorithm = 'aes-256-gcm';
|
|
55
|
-
const iv = Buffer.from(parts[0], 'hex');
|
|
56
|
-
const authTag = Buffer.from(parts[1], 'hex');
|
|
57
|
-
const encrypted = parts[2];
|
|
58
|
-
const decipher = crypto.createDecipheriv(algorithm, Buffer.from(this.encryptionKey), iv);
|
|
59
|
-
decipher.setAuthTag(authTag);
|
|
60
|
-
let decrypted = decipher.update(encrypted, 'hex', 'utf8');
|
|
61
|
-
decrypted += decipher.final('utf8');
|
|
62
|
-
return decrypted;
|
|
63
|
-
}
|
|
64
|
-
catch (error) {
|
|
65
|
-
// If decryption fails, return the original (might be plain text from old version)
|
|
66
|
-
return encryptedData;
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
31
|
async initialize() {
|
|
70
32
|
try {
|
|
71
33
|
await this.load();
|
|
@@ -106,9 +68,6 @@ export class ConfigManager {
|
|
|
106
68
|
if (settings.defaultModel) {
|
|
107
69
|
this.config.model = settings.defaultModel;
|
|
108
70
|
}
|
|
109
|
-
if (settings.defaultProvider) {
|
|
110
|
-
this.config.provider = settings.defaultProvider;
|
|
111
|
-
}
|
|
112
71
|
if (settings.theme) {
|
|
113
72
|
this.config.theme = settings.theme;
|
|
114
73
|
}
|
|
@@ -133,7 +92,6 @@ export class ConfigManager {
|
|
|
133
92
|
try {
|
|
134
93
|
await apiClient.updateSettings({
|
|
135
94
|
defaultModel: this.config.model,
|
|
136
|
-
defaultProvider: this.config.provider,
|
|
137
95
|
theme: this.config.theme,
|
|
138
96
|
autoSave: this.config.autoAccept,
|
|
139
97
|
});
|
|
@@ -156,18 +114,29 @@ export class ConfigManager {
|
|
|
156
114
|
try {
|
|
157
115
|
const data = await fs.readFile(this.configPath, 'utf-8');
|
|
158
116
|
const loadedConfig = JSON.parse(data);
|
|
159
|
-
//
|
|
160
|
-
|
|
161
|
-
|
|
117
|
+
// Detect if old config format exists (migration needed)
|
|
118
|
+
const hasDeprecatedFields = 'googleApiKey' in loadedConfig ||
|
|
119
|
+
'openrouterApiKey' in loadedConfig ||
|
|
120
|
+
'openRouterApiKey' in loadedConfig ||
|
|
121
|
+
'anthropicApiKey' in loadedConfig ||
|
|
122
|
+
'provider' in loadedConfig;
|
|
123
|
+
if (hasDeprecatedFields) {
|
|
124
|
+
this.migrationPerformed = true;
|
|
125
|
+
// Remove deprecated fields
|
|
126
|
+
delete loadedConfig.googleApiKey;
|
|
127
|
+
delete loadedConfig.openrouterApiKey;
|
|
128
|
+
delete loadedConfig.openRouterApiKey;
|
|
129
|
+
delete loadedConfig.anthropicApiKey;
|
|
130
|
+
delete loadedConfig.provider;
|
|
131
|
+
// Preserve model preference and other settings
|
|
132
|
+
this.config = { ...defaultConfig, ...loadedConfig };
|
|
133
|
+
// Save the migrated config immediately
|
|
134
|
+
await this.save();
|
|
162
135
|
}
|
|
163
|
-
|
|
164
|
-
|
|
136
|
+
else {
|
|
137
|
+
// Merge with defaults to ensure all fields exist
|
|
138
|
+
this.config = { ...defaultConfig, ...loadedConfig };
|
|
165
139
|
}
|
|
166
|
-
if (loadedConfig.anthropicApiKey) {
|
|
167
|
-
loadedConfig.anthropicApiKey = this.decrypt(loadedConfig.anthropicApiKey);
|
|
168
|
-
}
|
|
169
|
-
// Merge with defaults to ensure all fields exist
|
|
170
|
-
this.config = { ...defaultConfig, ...loadedConfig };
|
|
171
140
|
}
|
|
172
141
|
catch (error) {
|
|
173
142
|
if (error.code !== 'ENOENT') {
|
|
@@ -179,19 +148,7 @@ export class ConfigManager {
|
|
|
179
148
|
}
|
|
180
149
|
async save() {
|
|
181
150
|
await this.ensureConfigDir();
|
|
182
|
-
|
|
183
|
-
const configToSave = { ...this.config };
|
|
184
|
-
// Encrypt API keys before saving
|
|
185
|
-
if (configToSave.googleApiKey) {
|
|
186
|
-
configToSave.googleApiKey = this.encrypt(configToSave.googleApiKey);
|
|
187
|
-
}
|
|
188
|
-
if (configToSave.openRouterApiKey) {
|
|
189
|
-
configToSave.openRouterApiKey = this.encrypt(configToSave.openRouterApiKey);
|
|
190
|
-
}
|
|
191
|
-
if (configToSave.anthropicApiKey) {
|
|
192
|
-
configToSave.anthropicApiKey = this.encrypt(configToSave.anthropicApiKey);
|
|
193
|
-
}
|
|
194
|
-
await fs.writeFile(this.configPath, JSON.stringify(configToSave, null, 2), 'utf-8');
|
|
151
|
+
await fs.writeFile(this.configPath, JSON.stringify(this.config, null, 2), 'utf-8');
|
|
195
152
|
}
|
|
196
153
|
// Getters
|
|
197
154
|
get(key) {
|
|
@@ -201,25 +158,9 @@ export class ConfigManager {
|
|
|
201
158
|
// Return a copy to prevent direct modification
|
|
202
159
|
return { ...this.config };
|
|
203
160
|
}
|
|
204
|
-
getProvider() {
|
|
205
|
-
return this.config.provider;
|
|
206
|
-
}
|
|
207
161
|
getModel() {
|
|
208
162
|
return this.config.model;
|
|
209
163
|
}
|
|
210
|
-
getApiKey(provider) {
|
|
211
|
-
const p = provider || this.config.provider;
|
|
212
|
-
switch (p) {
|
|
213
|
-
case 'google':
|
|
214
|
-
return this.config.googleApiKey;
|
|
215
|
-
case 'openrouter':
|
|
216
|
-
return this.config.openRouterApiKey;
|
|
217
|
-
case 'anthropic':
|
|
218
|
-
return this.config.anthropicApiKey;
|
|
219
|
-
default:
|
|
220
|
-
return undefined;
|
|
221
|
-
}
|
|
222
|
-
}
|
|
223
164
|
isAutoAcceptEnabled() {
|
|
224
165
|
return this.config.autoAccept;
|
|
225
166
|
}
|
|
@@ -232,50 +173,15 @@ export class ConfigManager {
|
|
|
232
173
|
await this.save();
|
|
233
174
|
await this.syncToBackend();
|
|
234
175
|
}
|
|
235
|
-
async setProvider(provider) {
|
|
236
|
-
if (!['google', 'openrouter', 'anthropic'].includes(provider)) {
|
|
237
|
-
throw new Error(`Invalid provider: ${provider}`);
|
|
238
|
-
}
|
|
239
|
-
this.config.provider = provider;
|
|
240
|
-
await this.save();
|
|
241
|
-
await this.syncToBackend();
|
|
242
|
-
}
|
|
243
176
|
async setModel(model) {
|
|
177
|
+
// Validate model before setting
|
|
178
|
+
if (!isValidModel(model)) {
|
|
179
|
+
throw new Error(getInvalidModelError(model));
|
|
180
|
+
}
|
|
244
181
|
this.config.model = model;
|
|
245
182
|
await this.save();
|
|
246
183
|
await this.syncToBackend();
|
|
247
184
|
}
|
|
248
|
-
async setApiKey(provider, apiKey) {
|
|
249
|
-
// If backend sync is enabled, store API key in backend
|
|
250
|
-
if (this.useBackendSync && apiClient.isAuthenticated()) {
|
|
251
|
-
try {
|
|
252
|
-
await apiClient.storeApiKey({
|
|
253
|
-
provider: provider,
|
|
254
|
-
keyName: `${provider} API Key`,
|
|
255
|
-
apiKey: apiKey,
|
|
256
|
-
});
|
|
257
|
-
}
|
|
258
|
-
catch (error) {
|
|
259
|
-
console.error('Failed to store API key in backend:', error);
|
|
260
|
-
// Fall back to local storage
|
|
261
|
-
}
|
|
262
|
-
}
|
|
263
|
-
// Also store locally for offline access
|
|
264
|
-
switch (provider) {
|
|
265
|
-
case 'google':
|
|
266
|
-
this.config.googleApiKey = apiKey;
|
|
267
|
-
break;
|
|
268
|
-
case 'openrouter':
|
|
269
|
-
this.config.openRouterApiKey = apiKey;
|
|
270
|
-
break;
|
|
271
|
-
case 'anthropic':
|
|
272
|
-
this.config.anthropicApiKey = apiKey;
|
|
273
|
-
break;
|
|
274
|
-
default:
|
|
275
|
-
throw new Error(`Invalid provider: ${provider}`);
|
|
276
|
-
}
|
|
277
|
-
await this.save();
|
|
278
|
-
}
|
|
279
185
|
async setAutoAccept(enabled) {
|
|
280
186
|
this.config.autoAccept = enabled;
|
|
281
187
|
await this.save();
|
|
@@ -292,16 +198,9 @@ export class ConfigManager {
|
|
|
292
198
|
// Validation
|
|
293
199
|
validateConfig() {
|
|
294
200
|
const errors = [];
|
|
295
|
-
if (!this.config.provider) {
|
|
296
|
-
errors.push('Provider is not set');
|
|
297
|
-
}
|
|
298
201
|
if (!this.config.model) {
|
|
299
202
|
errors.push('Model is not set');
|
|
300
203
|
}
|
|
301
|
-
const apiKey = this.getApiKey();
|
|
302
|
-
if (!apiKey) {
|
|
303
|
-
errors.push(`API key for ${this.config.provider} is not set`);
|
|
304
|
-
}
|
|
305
204
|
return {
|
|
306
205
|
valid: errors.length === 0,
|
|
307
206
|
errors
|
|
@@ -314,18 +213,20 @@ export class ConfigManager {
|
|
|
314
213
|
}
|
|
315
214
|
// Export configuration (without sensitive data)
|
|
316
215
|
exportConfig() {
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
216
|
+
return { ...this.config };
|
|
217
|
+
}
|
|
218
|
+
/**
|
|
219
|
+
* Check if configuration migration was performed
|
|
220
|
+
* This is used to show a one-time migration message to users
|
|
221
|
+
*/
|
|
222
|
+
wasMigrationPerformed() {
|
|
223
|
+
return this.migrationPerformed;
|
|
224
|
+
}
|
|
225
|
+
/**
|
|
226
|
+
* Reset migration flag (after showing migration message)
|
|
227
|
+
*/
|
|
228
|
+
resetMigrationFlag() {
|
|
229
|
+
this.migrationPerformed = false;
|
|
329
230
|
}
|
|
330
231
|
}
|
|
331
232
|
export default ConfigManager;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConfigManager.js","sourceRoot":"","sources":["../../src/config/ConfigManager.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,MAAM,aAAa,CAAC;AAClC,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,
|
|
1
|
+
{"version":3,"file":"ConfigManager.js","sourceRoot":"","sources":["../../src/config/ConfigManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,11 +3,7 @@
|
|
|
3
3
|
* Defines default settings and configuration types
|
|
4
4
|
*/
|
|
5
5
|
export interface CentaurusConfig {
|
|
6
|
-
provider: string;
|
|
7
6
|
model: string;
|
|
8
|
-
googleApiKey?: string;
|
|
9
|
-
openRouterApiKey?: string;
|
|
10
|
-
anthropicApiKey?: string;
|
|
11
7
|
autoAccept: boolean;
|
|
12
8
|
streamResponses: boolean;
|
|
13
9
|
saveSession: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"defaultConfig.d.ts","sourceRoot":"","sources":["../../src/config/defaultConfig.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,eAAe;IAE9B,
|
|
1
|
+
{"version":3,"file":"defaultConfig.d.ts","sourceRoot":"","sources":["../../src/config/defaultConfig.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,eAAe;IAE9B,KAAK,EAAE,MAAM,CAAC;IAGd,UAAU,EAAE,OAAO,CAAC;IACpB,eAAe,EAAE,OAAO,CAAC;IACzB,WAAW,EAAE,OAAO,CAAC;IAGrB,KAAK,EAAE,MAAM,CAAC;IACd,iBAAiB,EAAE,OAAO,CAAC;IAC3B,aAAa,EAAE,OAAO,CAAC;IACvB,kBAAkB,EAAE,OAAO,CAAC;IAG5B,eAAe,EAAE,OAAO,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IAGnB,cAAc,EAAE,MAAM,CAAC;IACvB,iBAAiB,EAAE,MAAM,CAAC;IAG1B,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;IAC9C,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,eAAO,MAAM,aAAa,EAAE,eA6B3B,CAAC;AAEF,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmDlB,CAAC;AAEF,eAAe,aAAa,CAAC"}
|
|
@@ -3,13 +3,8 @@
|
|
|
3
3
|
* Defines default settings and configuration types
|
|
4
4
|
*/
|
|
5
5
|
export const defaultConfig = {
|
|
6
|
-
//
|
|
7
|
-
provider: 'google',
|
|
6
|
+
// Model settings
|
|
8
7
|
model: 'gemini-2.0-flash-exp',
|
|
9
|
-
// API Keys (will be set during first run)
|
|
10
|
-
googleApiKey: undefined,
|
|
11
|
-
openRouterApiKey: undefined,
|
|
12
|
-
anthropicApiKey: undefined,
|
|
13
8
|
// Features
|
|
14
9
|
autoAccept: false,
|
|
15
10
|
streamResponses: true,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"defaultConfig.js","sourceRoot":"","sources":["../../src/config/defaultConfig.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"defaultConfig.js","sourceRoot":"","sources":["../../src/config/defaultConfig.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAiCH,MAAM,CAAC,MAAM,aAAa,GAAoB;IAC5C,iBAAiB;IACjB,KAAK,EAAE,sBAAsB;IAE7B,WAAW;IACX,UAAU,EAAE,KAAK;IACjB,eAAe,EAAE,IAAI;IACrB,WAAW,EAAE,IAAI;IAEjB,cAAc;IACd,KAAK,EAAE,SAAS;IAChB,iBAAiB,EAAE,IAAI;IACvB,aAAa,EAAE,IAAI;IACnB,kBAAkB,EAAE,IAAI;IAExB,gBAAgB;IAChB,eAAe,EAAE,IAAI;IACrB,WAAW,EAAE,KAAK,EAAE,aAAa;IACjC,UAAU,EAAE,CAAC;IAEb,mBAAmB;IACnB,cAAc,EAAE,IAAI;IACpB,iBAAiB,EAAE,EAAE,EAAE,wCAAwC;IAE/D,oBAAoB;IACpB,SAAS,EAAE,KAAK;IAChB,QAAQ,EAAE,OAAO;IACjB,WAAW,EAAE,GAAG;IAChB,SAAS,EAAE,IAAI;CAChB,CAAC;AAEF,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,OAAO,EAAE;QACP,OAAO,EAAE,SAAS,EAAO,OAAO;QAChC,SAAS,EAAE,SAAS,EAAK,cAAc;QACvC,OAAO,EAAE,SAAS,EAAO,QAAQ;QACjC,KAAK,EAAE,SAAS,EAAS,MAAM;QAC/B,OAAO,EAAE,SAAS,EAAO,SAAS;QAClC,IAAI,EAAE,SAAS,EAAU,WAAW;QACpC,IAAI,EAAE,SAAS,EAAU,QAAQ;QACjC,OAAO,EAAE,SAAS,CAAO,OAAO;KACjC;IACD,IAAI,EAAE;QACJ,OAAO,EAAE,SAAS;QAClB,SAAS,EAAE,SAAS;QACpB,OAAO,EAAE,SAAS;QAClB,KAAK,EAAE,SAAS;QAChB,OAAO,EAAE,SAAS;QAClB,IAAI,EAAE,SAAS;QACf,IAAI,EAAE,SAAS;QACf,OAAO,EAAE,SAAS;KACnB;IACD,KAAK,EAAE;QACL,OAAO,EAAE,SAAS;QAClB,SAAS,EAAE,SAAS;QACpB,OAAO,EAAE,SAAS;QAClB,KAAK,EAAE,SAAS;QAChB,OAAO,EAAE,SAAS;QAClB,IAAI,EAAE,SAAS;QACf,IAAI,EAAE,SAAS;QACf,OAAO,EAAE,SAAS;KACnB;IACD,KAAK,EAAE;QACL,OAAO,EAAE,SAAS;QAClB,SAAS,EAAE,SAAS;QACpB,OAAO,EAAE,SAAS;QAClB,KAAK,EAAE,SAAS;QAChB,OAAO,EAAE,SAAS;QAClB,IAAI,EAAE,SAAS;QACf,IAAI,EAAE,SAAS;QACf,OAAO,EAAE,SAAS;KACnB;IACD,MAAM,EAAE;QACN,OAAO,EAAE,SAAS;QAClB,SAAS,EAAE,SAAS;QACpB,OAAO,EAAE,SAAS;QAClB,KAAK,EAAE,SAAS;QAChB,OAAO,EAAE,SAAS;QAClB,IAAI,EAAE,SAAS;QACf,IAAI,EAAE,SAAS;QACf,OAAO,EAAE,SAAS;KACnB;CACF,CAAC;AAEF,eAAe,aAAa,CAAC"}
|
package/dist/config/manager.d.ts
CHANGED
|
@@ -3,6 +3,7 @@ export declare class ConfigManager {
|
|
|
3
3
|
private configPath;
|
|
4
4
|
private config;
|
|
5
5
|
private useBackendSync;
|
|
6
|
+
private migrationPerformed;
|
|
6
7
|
constructor();
|
|
7
8
|
/**
|
|
8
9
|
* Enable backend synchronization
|
|
@@ -16,18 +17,6 @@ export declare class ConfigManager {
|
|
|
16
17
|
* Sync settings to backend
|
|
17
18
|
*/
|
|
18
19
|
private syncToBackend;
|
|
19
|
-
/**
|
|
20
|
-
* Parse comma-separated API keys into an array
|
|
21
|
-
*/
|
|
22
|
-
private parseApiKeys;
|
|
23
|
-
/**
|
|
24
|
-
* Get all Google API keys as an array
|
|
25
|
-
*/
|
|
26
|
-
getGoogleApiKeys(): string[];
|
|
27
|
-
/**
|
|
28
|
-
* Get all OpenRouter API keys as an array
|
|
29
|
-
*/
|
|
30
|
-
getOpenRouterApiKeys(): string[];
|
|
31
20
|
/**
|
|
32
21
|
* Load configuration from disk
|
|
33
22
|
*/
|
|
@@ -44,17 +33,30 @@ export declare class ConfigManager {
|
|
|
44
33
|
* Set a specific configuration value
|
|
45
34
|
*/
|
|
46
35
|
set<K extends keyof Config>(key: K, value: Config[K]): void;
|
|
36
|
+
/**
|
|
37
|
+
* Set model with validation
|
|
38
|
+
*/
|
|
39
|
+
setModel(model: string): void;
|
|
47
40
|
/**
|
|
48
41
|
* Get all configuration
|
|
49
42
|
*/
|
|
50
43
|
getAll(): Config;
|
|
51
44
|
/**
|
|
52
|
-
* Check if configuration is complete
|
|
45
|
+
* Check if configuration is complete
|
|
53
46
|
*/
|
|
54
47
|
isComplete(): boolean;
|
|
55
48
|
/**
|
|
56
49
|
* Get the config file path
|
|
57
50
|
*/
|
|
58
51
|
getConfigPath(): string;
|
|
52
|
+
/**
|
|
53
|
+
* Check if configuration migration was performed
|
|
54
|
+
* This is used to show a one-time migration message to users
|
|
55
|
+
*/
|
|
56
|
+
wasMigrationPerformed(): boolean;
|
|
57
|
+
/**
|
|
58
|
+
* Reset migration flag (after showing migration message)
|
|
59
|
+
*/
|
|
60
|
+
resetMigrationFlag(): void;
|
|
59
61
|
}
|
|
60
62
|
//# sourceMappingURL=manager.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/config/manager.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,MAAM,EAAkB,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/config/manager.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,MAAM,EAAkB,MAAM,YAAY,CAAC;AAIpD,qBAAa,aAAa;IACxB,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,cAAc,CAAkB;IACxC,OAAO,CAAC,kBAAkB,CAAkB;;IAa5C;;OAEG;IACH,iBAAiB,IAAI,IAAI;IAIzB;;OAEG;IACH,kBAAkB,IAAI,IAAI;IAI1B;;OAEG;YACW,aAAa;IAgB3B;;OAEG;IACH,IAAI,IAAI,MAAM;IA+Cd;;OAEG;IACH,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG,IAAI;IASnC;;OAEG;IACH,GAAG,CAAC,CAAC,SAAS,MAAM,MAAM,EAAE,GAAG,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,SAAS;IAI1D;;OAEG;IACH,GAAG,CAAC,CAAC,SAAS,MAAM,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI;IAkB3D;;OAEG;IACH,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAO7B;;OAEG;IACH,MAAM,IAAI,MAAM;IAIhB;;OAEG;IACH,UAAU,IAAI,OAAO;IAKrB;;OAEG;IACH,aAAa,IAAI,MAAM;IAIvB;;;OAGG;IACH,qBAAqB,IAAI,OAAO;IAIhC;;OAEG;IACH,kBAAkB,IAAI,IAAI;CAG3B"}
|
package/dist/config/manager.js
CHANGED
|
@@ -3,10 +3,12 @@ import * as path from 'path';
|
|
|
3
3
|
import * as os from 'os';
|
|
4
4
|
import { DEFAULT_CONFIG } from './types.js';
|
|
5
5
|
import { apiClient } from '../services/api-client.js';
|
|
6
|
+
import { isValidModel, getInvalidModelError } from './models.js';
|
|
6
7
|
export class ConfigManager {
|
|
7
8
|
configPath;
|
|
8
9
|
config = null;
|
|
9
10
|
useBackendSync = false;
|
|
11
|
+
migrationPerformed = false;
|
|
10
12
|
constructor() {
|
|
11
13
|
const homeDir = os.homedir();
|
|
12
14
|
const configDir = path.join(homeDir, '.centaurus');
|
|
@@ -39,7 +41,6 @@ export class ConfigManager {
|
|
|
39
41
|
const config = this.load();
|
|
40
42
|
await apiClient.updateSettings({
|
|
41
43
|
defaultModel: config.model,
|
|
42
|
-
defaultProvider: config.provider,
|
|
43
44
|
});
|
|
44
45
|
}
|
|
45
46
|
catch (error) {
|
|
@@ -47,28 +48,6 @@ export class ConfigManager {
|
|
|
47
48
|
console.error('Failed to sync settings to backend:', error);
|
|
48
49
|
}
|
|
49
50
|
}
|
|
50
|
-
/**
|
|
51
|
-
* Parse comma-separated API keys into an array
|
|
52
|
-
*/
|
|
53
|
-
parseApiKeys(keys) {
|
|
54
|
-
if (!keys)
|
|
55
|
-
return [];
|
|
56
|
-
return keys.split(',').map(key => key.trim()).filter(key => key.length > 0);
|
|
57
|
-
}
|
|
58
|
-
/**
|
|
59
|
-
* Get all Google API keys as an array
|
|
60
|
-
*/
|
|
61
|
-
getGoogleApiKeys() {
|
|
62
|
-
const config = this.load();
|
|
63
|
-
return this.parseApiKeys(config.googleApiKey);
|
|
64
|
-
}
|
|
65
|
-
/**
|
|
66
|
-
* Get all OpenRouter API keys as an array
|
|
67
|
-
*/
|
|
68
|
-
getOpenRouterApiKeys() {
|
|
69
|
-
const config = this.load();
|
|
70
|
-
return this.parseApiKeys(config.openrouterApiKey);
|
|
71
|
-
}
|
|
72
51
|
/**
|
|
73
52
|
* Load configuration from disk
|
|
74
53
|
*/
|
|
@@ -79,13 +58,29 @@ export class ConfigManager {
|
|
|
79
58
|
if (fs.existsSync(this.configPath)) {
|
|
80
59
|
try {
|
|
81
60
|
const data = fs.readFileSync(this.configPath, 'utf-8');
|
|
82
|
-
|
|
83
|
-
//
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
61
|
+
const loadedConfig = JSON.parse(data);
|
|
62
|
+
// Detect if old config format exists (migration needed)
|
|
63
|
+
const hasDeprecatedFields = 'googleApiKey' in loadedConfig ||
|
|
64
|
+
'openrouterApiKey' in loadedConfig ||
|
|
65
|
+
'openRouterApiKey' in loadedConfig ||
|
|
66
|
+
'anthropicApiKey' in loadedConfig ||
|
|
67
|
+
'provider' in loadedConfig;
|
|
68
|
+
if (hasDeprecatedFields) {
|
|
69
|
+
this.migrationPerformed = true;
|
|
70
|
+
// Remove deprecated fields
|
|
71
|
+
delete loadedConfig.googleApiKey;
|
|
72
|
+
delete loadedConfig.openrouterApiKey;
|
|
73
|
+
delete loadedConfig.openRouterApiKey;
|
|
74
|
+
delete loadedConfig.anthropicApiKey;
|
|
75
|
+
delete loadedConfig.provider;
|
|
76
|
+
// Preserve model preference and other settings
|
|
77
|
+
this.config = { ...DEFAULT_CONFIG, ...loadedConfig };
|
|
78
|
+
// Save the migrated config immediately
|
|
87
79
|
this.save(this.config);
|
|
88
80
|
}
|
|
81
|
+
else {
|
|
82
|
+
this.config = { ...DEFAULT_CONFIG, ...loadedConfig };
|
|
83
|
+
}
|
|
89
84
|
}
|
|
90
85
|
catch (error) {
|
|
91
86
|
console.error('Error loading config:', error);
|
|
@@ -119,9 +114,11 @@ export class ConfigManager {
|
|
|
119
114
|
* Set a specific configuration value
|
|
120
115
|
*/
|
|
121
116
|
set(key, value) {
|
|
122
|
-
// Validate
|
|
123
|
-
if (key === '
|
|
124
|
-
|
|
117
|
+
// Validate model if setting model key
|
|
118
|
+
if (key === 'model' && typeof value === 'string') {
|
|
119
|
+
if (!isValidModel(value)) {
|
|
120
|
+
throw new Error(getInvalidModelError(value));
|
|
121
|
+
}
|
|
125
122
|
}
|
|
126
123
|
const config = this.load();
|
|
127
124
|
config[key] = value;
|
|
@@ -131,6 +128,15 @@ export class ConfigManager {
|
|
|
131
128
|
// Ignore sync errors
|
|
132
129
|
});
|
|
133
130
|
}
|
|
131
|
+
/**
|
|
132
|
+
* Set model with validation
|
|
133
|
+
*/
|
|
134
|
+
setModel(model) {
|
|
135
|
+
if (!isValidModel(model)) {
|
|
136
|
+
throw new Error(getInvalidModelError(model));
|
|
137
|
+
}
|
|
138
|
+
this.set('model', model);
|
|
139
|
+
}
|
|
134
140
|
/**
|
|
135
141
|
* Get all configuration
|
|
136
142
|
*/
|
|
@@ -138,19 +144,11 @@ export class ConfigManager {
|
|
|
138
144
|
return this.load();
|
|
139
145
|
}
|
|
140
146
|
/**
|
|
141
|
-
* Check if configuration is complete
|
|
147
|
+
* Check if configuration is complete
|
|
142
148
|
*/
|
|
143
149
|
isComplete() {
|
|
144
150
|
const config = this.load();
|
|
145
|
-
|
|
146
|
-
const keys = this.getGoogleApiKeys();
|
|
147
|
-
return keys.length > 0;
|
|
148
|
-
}
|
|
149
|
-
else if (config.provider === 'openrouter') {
|
|
150
|
-
const keys = this.getOpenRouterApiKeys();
|
|
151
|
-
return keys.length > 0;
|
|
152
|
-
}
|
|
153
|
-
return false;
|
|
151
|
+
return !!config.model;
|
|
154
152
|
}
|
|
155
153
|
/**
|
|
156
154
|
* Get the config file path
|
|
@@ -158,5 +156,18 @@ export class ConfigManager {
|
|
|
158
156
|
getConfigPath() {
|
|
159
157
|
return this.configPath;
|
|
160
158
|
}
|
|
159
|
+
/**
|
|
160
|
+
* Check if configuration migration was performed
|
|
161
|
+
* This is used to show a one-time migration message to users
|
|
162
|
+
*/
|
|
163
|
+
wasMigrationPerformed() {
|
|
164
|
+
return this.migrationPerformed;
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Reset migration flag (after showing migration message)
|
|
168
|
+
*/
|
|
169
|
+
resetMigrationFlag() {
|
|
170
|
+
this.migrationPerformed = false;
|
|
171
|
+
}
|
|
161
172
|
}
|
|
162
173
|
//# sourceMappingURL=manager.js.map
|