centaurus-cli 2.9.9 → 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli-adapter.d.ts +7 -0
- package/dist/cli-adapter.d.ts.map +1 -1
- package/dist/cli-adapter.js +238 -153
- package/dist/cli-adapter.js.map +1 -1
- package/dist/context/handlers/docker-handler.d.ts.map +1 -1
- package/dist/context/handlers/docker-handler.js +2 -2
- package/dist/context/handlers/docker-handler.js.map +1 -1
- package/dist/context/handlers/ssh-handler.d.ts.map +1 -1
- package/dist/context/handlers/ssh-handler.js +3 -0
- package/dist/context/handlers/ssh-handler.js.map +1 -1
- package/dist/context/handlers/wsl-handler.d.ts.map +1 -1
- package/dist/context/handlers/wsl-handler.js +9 -3
- package/dist/context/handlers/wsl-handler.js.map +1 -1
- package/dist/index.js +49 -7
- package/dist/index.js.map +1 -1
- package/dist/mcp/mcp-server-manager.d.ts.map +1 -1
- package/dist/mcp/mcp-server-manager.js +17 -3
- package/dist/mcp/mcp-server-manager.js.map +1 -1
- package/dist/services/api-client.d.ts +4 -0
- package/dist/services/api-client.d.ts.map +1 -1
- package/dist/services/api-client.js +27 -18
- package/dist/services/api-client.js.map +1 -1
- package/dist/services/conversation-manager.d.ts.map +1 -1
- package/dist/services/conversation-manager.js +3 -2
- package/dist/services/conversation-manager.js.map +1 -1
- package/dist/tools/enter-remote-session.d.ts +35 -0
- package/dist/tools/enter-remote-session.d.ts.map +1 -1
- package/dist/tools/enter-remote-session.js +5 -5
- package/dist/tools/enter-remote-session.js.map +1 -1
- package/dist/ui/components/App.d.ts +2 -0
- package/dist/ui/components/App.d.ts.map +1 -1
- package/dist/ui/components/App.js +55 -48
- package/dist/ui/components/App.js.map +1 -1
- package/dist/ui/components/ToolExecutionMessage.js +1 -1
- package/dist/ui/components/ToolExecutionMessage.js.map +1 -1
- package/dist/utils/shell.d.ts.map +1 -1
- package/dist/utils/shell.js +12 -1
- package/dist/utils/shell.js.map +1 -1
- package/dist/utils/syntax-checker.d.ts.map +1 -1
- package/dist/utils/syntax-checker.js +26 -0
- package/dist/utils/syntax-checker.js.map +1 -1
- package/dist/utils/terminal-output.d.ts.map +1 -1
- package/dist/utils/terminal-output.js +10 -8
- package/dist/utils/terminal-output.js.map +1 -1
- package/dist/utils/text-clipboard.d.ts.map +1 -1
- package/dist/utils/text-clipboard.js +21 -8
- package/dist/utils/text-clipboard.js.map +1 -1
- package/package.json +6 -2
- package/dist/config/ConfigManager.d.ts +0 -62
- package/dist/config/ConfigManager.d.ts.map +0 -1
- package/dist/config/ConfigManager.js +0 -234
- package/dist/config/ConfigManager.js.map +0 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "centaurus-cli",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "3.0.0",
|
|
4
4
|
"description": "A powerful command-line AI coding assistant with Google Gemini support",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -14,7 +14,8 @@
|
|
|
14
14
|
"start": "node dist/index.js",
|
|
15
15
|
"prepublishOnly": "npm run build",
|
|
16
16
|
"postinstall": "node postinstall.js || true",
|
|
17
|
-
"test": "
|
|
17
|
+
"test": "node --experimental-vm-modules node_modules/.bin/jest --config jest.config.cjs",
|
|
18
|
+
"test:ci": "node --experimental-vm-modules node_modules/.bin/jest --config jest.config.cjs --ci --forceExit"
|
|
18
19
|
},
|
|
19
20
|
"keywords": [
|
|
20
21
|
"ai",
|
|
@@ -77,10 +78,13 @@
|
|
|
77
78
|
},
|
|
78
79
|
"devDependencies": {
|
|
79
80
|
"@types/inquirer": "^9.0.9",
|
|
81
|
+
"@types/jest": "^30.0.0",
|
|
80
82
|
"@types/node": "^24.7.2",
|
|
81
83
|
"@types/react": "^18.3.26",
|
|
82
84
|
"@types/ssh2": "^1.15.0",
|
|
85
|
+
"jest": "^30.2.0",
|
|
83
86
|
"prettier": "^3.6.2",
|
|
87
|
+
"ts-jest": "^29.4.6",
|
|
84
88
|
"ts-node": "^10.9.2"
|
|
85
89
|
}
|
|
86
90
|
}
|
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Configuration Manager
|
|
3
|
-
* Handles user preferences, API keys, and settings
|
|
4
|
-
* Syncs with backend API when authenticated
|
|
5
|
-
*/
|
|
6
|
-
import { CentaurusConfig } from './defaultConfig.js';
|
|
7
|
-
export declare class ConfigManager {
|
|
8
|
-
private static instance;
|
|
9
|
-
private configPath;
|
|
10
|
-
private config;
|
|
11
|
-
private encryptionKey;
|
|
12
|
-
private useBackendSync;
|
|
13
|
-
private migrationPerformed;
|
|
14
|
-
private constructor();
|
|
15
|
-
static getInstance(): ConfigManager;
|
|
16
|
-
initialize(): Promise<void>;
|
|
17
|
-
/**
|
|
18
|
-
* Enable backend synchronization
|
|
19
|
-
*/
|
|
20
|
-
enableBackendSync(): void;
|
|
21
|
-
/**
|
|
22
|
-
* Disable backend synchronization
|
|
23
|
-
*/
|
|
24
|
-
disableBackendSync(): void;
|
|
25
|
-
/**
|
|
26
|
-
* Sync settings from backend
|
|
27
|
-
*/
|
|
28
|
-
private syncFromBackend;
|
|
29
|
-
/**
|
|
30
|
-
* Sync settings to backend
|
|
31
|
-
*/
|
|
32
|
-
private syncToBackend;
|
|
33
|
-
private ensureConfigDir;
|
|
34
|
-
load(): Promise<void>;
|
|
35
|
-
save(): Promise<void>;
|
|
36
|
-
get(key: keyof CentaurusConfig): any;
|
|
37
|
-
getAll(): CentaurusConfig;
|
|
38
|
-
getModel(): string;
|
|
39
|
-
isAutoAcceptEnabled(): boolean;
|
|
40
|
-
getTheme(): string;
|
|
41
|
-
set<K extends keyof CentaurusConfig>(key: K, value: CentaurusConfig[K]): Promise<void>;
|
|
42
|
-
setModel(model: string): Promise<void>;
|
|
43
|
-
setAutoAccept(enabled: boolean): Promise<void>;
|
|
44
|
-
setTheme(theme: string): Promise<void>;
|
|
45
|
-
validateConfig(): {
|
|
46
|
-
valid: boolean;
|
|
47
|
-
errors: string[];
|
|
48
|
-
};
|
|
49
|
-
reset(): Promise<void>;
|
|
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;
|
|
60
|
-
}
|
|
61
|
-
export default ConfigManager;
|
|
62
|
-
//# sourceMappingURL=ConfigManager.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
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;AAKpE,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"}
|
|
@@ -1,234 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Configuration Manager
|
|
3
|
-
* Handles user preferences, API keys, and settings
|
|
4
|
-
* Syncs with backend API when authenticated
|
|
5
|
-
*/
|
|
6
|
-
import * as fs from 'fs/promises';
|
|
7
|
-
import * as path from 'path';
|
|
8
|
-
import * as os from 'os';
|
|
9
|
-
import { defaultConfig } from './defaultConfig.js';
|
|
10
|
-
import { apiClient } from '../services/api-client.js';
|
|
11
|
-
import { isValidModel, getInvalidModelError } from './models.js';
|
|
12
|
-
import { logError } from '../utils/logger.js';
|
|
13
|
-
export class ConfigManager {
|
|
14
|
-
static instance;
|
|
15
|
-
configPath;
|
|
16
|
-
config;
|
|
17
|
-
encryptionKey;
|
|
18
|
-
useBackendSync = false;
|
|
19
|
-
migrationPerformed = false;
|
|
20
|
-
constructor() {
|
|
21
|
-
const configDir = path.join(os.homedir(), '.centaurus');
|
|
22
|
-
this.configPath = path.join(configDir, 'config.json');
|
|
23
|
-
this.config = { ...defaultConfig };
|
|
24
|
-
this.encryptionKey = ''; // No longer needed but kept for compatibility
|
|
25
|
-
}
|
|
26
|
-
static getInstance() {
|
|
27
|
-
if (!ConfigManager.instance) {
|
|
28
|
-
ConfigManager.instance = new ConfigManager();
|
|
29
|
-
}
|
|
30
|
-
return ConfigManager.instance;
|
|
31
|
-
}
|
|
32
|
-
async initialize() {
|
|
33
|
-
try {
|
|
34
|
-
await this.load();
|
|
35
|
-
// Check if user is authenticated and enable backend sync
|
|
36
|
-
if (apiClient.isAuthenticated()) {
|
|
37
|
-
this.useBackendSync = true;
|
|
38
|
-
await this.syncFromBackend();
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
catch (error) {
|
|
42
|
-
// If loading fails, create config directory and use defaults
|
|
43
|
-
await this.ensureConfigDir();
|
|
44
|
-
await this.save();
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
/**
|
|
48
|
-
* Enable backend synchronization
|
|
49
|
-
*/
|
|
50
|
-
enableBackendSync() {
|
|
51
|
-
this.useBackendSync = true;
|
|
52
|
-
}
|
|
53
|
-
/**
|
|
54
|
-
* Disable backend synchronization
|
|
55
|
-
*/
|
|
56
|
-
disableBackendSync() {
|
|
57
|
-
this.useBackendSync = false;
|
|
58
|
-
}
|
|
59
|
-
/**
|
|
60
|
-
* Sync settings from backend
|
|
61
|
-
*/
|
|
62
|
-
async syncFromBackend() {
|
|
63
|
-
if (!this.useBackendSync || !apiClient.isAuthenticated()) {
|
|
64
|
-
return;
|
|
65
|
-
}
|
|
66
|
-
try {
|
|
67
|
-
const settings = await apiClient.getSettings();
|
|
68
|
-
// Merge backend settings with local config
|
|
69
|
-
if (settings.defaultModel) {
|
|
70
|
-
this.config.model = settings.defaultModel;
|
|
71
|
-
}
|
|
72
|
-
if (settings.theme) {
|
|
73
|
-
this.config.theme = settings.theme;
|
|
74
|
-
}
|
|
75
|
-
if (settings.autoSave !== undefined) {
|
|
76
|
-
this.config.autoAccept = settings.autoSave;
|
|
77
|
-
}
|
|
78
|
-
// Save merged config locally
|
|
79
|
-
await this.save();
|
|
80
|
-
}
|
|
81
|
-
catch (error) {
|
|
82
|
-
// If sync fails, continue with local config
|
|
83
|
-
logError('Failed to sync settings from backend', error);
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
/**
|
|
87
|
-
* Sync settings to backend
|
|
88
|
-
*/
|
|
89
|
-
async syncToBackend() {
|
|
90
|
-
if (!this.useBackendSync || !apiClient.isAuthenticated()) {
|
|
91
|
-
return;
|
|
92
|
-
}
|
|
93
|
-
try {
|
|
94
|
-
await apiClient.updateSettings({
|
|
95
|
-
defaultModel: this.config.model,
|
|
96
|
-
theme: this.config.theme,
|
|
97
|
-
autoSave: this.config.autoAccept,
|
|
98
|
-
});
|
|
99
|
-
}
|
|
100
|
-
catch (error) {
|
|
101
|
-
// If sync fails, continue with local save
|
|
102
|
-
logError('Failed to sync settings to backend', error);
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
async ensureConfigDir() {
|
|
106
|
-
const configDir = path.dirname(this.configPath);
|
|
107
|
-
try {
|
|
108
|
-
await fs.access(configDir);
|
|
109
|
-
}
|
|
110
|
-
catch {
|
|
111
|
-
await fs.mkdir(configDir, { recursive: true });
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
async load() {
|
|
115
|
-
try {
|
|
116
|
-
const data = await fs.readFile(this.configPath, 'utf-8');
|
|
117
|
-
const loadedConfig = JSON.parse(data);
|
|
118
|
-
// Detect if old config format exists (migration needed)
|
|
119
|
-
const hasDeprecatedFields = 'googleApiKey' in loadedConfig ||
|
|
120
|
-
'openrouterApiKey' in loadedConfig ||
|
|
121
|
-
'openRouterApiKey' in loadedConfig ||
|
|
122
|
-
'anthropicApiKey' in loadedConfig ||
|
|
123
|
-
'provider' in loadedConfig;
|
|
124
|
-
if (hasDeprecatedFields) {
|
|
125
|
-
this.migrationPerformed = true;
|
|
126
|
-
// Remove deprecated fields
|
|
127
|
-
delete loadedConfig.googleApiKey;
|
|
128
|
-
delete loadedConfig.openrouterApiKey;
|
|
129
|
-
delete loadedConfig.openRouterApiKey;
|
|
130
|
-
delete loadedConfig.anthropicApiKey;
|
|
131
|
-
delete loadedConfig.provider;
|
|
132
|
-
// Preserve model preference and other settings
|
|
133
|
-
this.config = { ...defaultConfig, ...loadedConfig };
|
|
134
|
-
// Save the migrated config immediately
|
|
135
|
-
await this.save();
|
|
136
|
-
}
|
|
137
|
-
else {
|
|
138
|
-
// Merge with defaults to ensure all fields exist
|
|
139
|
-
this.config = { ...defaultConfig, ...loadedConfig };
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
|
-
catch (error) {
|
|
143
|
-
if (error.code !== 'ENOENT') {
|
|
144
|
-
throw error;
|
|
145
|
-
}
|
|
146
|
-
// File doesn't exist, use defaults
|
|
147
|
-
this.config = { ...defaultConfig };
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
async save() {
|
|
151
|
-
await this.ensureConfigDir();
|
|
152
|
-
await fs.writeFile(this.configPath, JSON.stringify(this.config, null, 2), 'utf-8');
|
|
153
|
-
}
|
|
154
|
-
// Getters
|
|
155
|
-
get(key) {
|
|
156
|
-
return this.config[key];
|
|
157
|
-
}
|
|
158
|
-
getAll() {
|
|
159
|
-
// Return a copy to prevent direct modification
|
|
160
|
-
return { ...this.config };
|
|
161
|
-
}
|
|
162
|
-
getModel() {
|
|
163
|
-
return this.config.model;
|
|
164
|
-
}
|
|
165
|
-
isAutoAcceptEnabled() {
|
|
166
|
-
return this.config.autoAccept;
|
|
167
|
-
}
|
|
168
|
-
getTheme() {
|
|
169
|
-
return this.config.theme;
|
|
170
|
-
}
|
|
171
|
-
// Setters
|
|
172
|
-
async set(key, value) {
|
|
173
|
-
this.config[key] = value;
|
|
174
|
-
await this.save();
|
|
175
|
-
await this.syncToBackend();
|
|
176
|
-
}
|
|
177
|
-
async setModel(model) {
|
|
178
|
-
// Validate model before setting (async)
|
|
179
|
-
if (!(await isValidModel(model))) {
|
|
180
|
-
throw new Error(await getInvalidModelError(model));
|
|
181
|
-
}
|
|
182
|
-
this.config.model = model;
|
|
183
|
-
await this.save();
|
|
184
|
-
await this.syncToBackend();
|
|
185
|
-
}
|
|
186
|
-
async setAutoAccept(enabled) {
|
|
187
|
-
this.config.autoAccept = enabled;
|
|
188
|
-
await this.save();
|
|
189
|
-
await this.syncToBackend();
|
|
190
|
-
}
|
|
191
|
-
async setTheme(theme) {
|
|
192
|
-
if (!['default', 'dark', 'light', 'ocean', 'forest'].includes(theme)) {
|
|
193
|
-
throw new Error(`Invalid theme: ${theme}`);
|
|
194
|
-
}
|
|
195
|
-
this.config.theme = theme;
|
|
196
|
-
await this.save();
|
|
197
|
-
await this.syncToBackend();
|
|
198
|
-
}
|
|
199
|
-
// Validation
|
|
200
|
-
validateConfig() {
|
|
201
|
-
const errors = [];
|
|
202
|
-
if (!this.config.model) {
|
|
203
|
-
errors.push('Model is not set');
|
|
204
|
-
}
|
|
205
|
-
return {
|
|
206
|
-
valid: errors.length === 0,
|
|
207
|
-
errors
|
|
208
|
-
};
|
|
209
|
-
}
|
|
210
|
-
// Reset to defaults
|
|
211
|
-
async reset() {
|
|
212
|
-
this.config = { ...defaultConfig };
|
|
213
|
-
await this.save();
|
|
214
|
-
}
|
|
215
|
-
// Export configuration (without sensitive data)
|
|
216
|
-
exportConfig() {
|
|
217
|
-
return { ...this.config };
|
|
218
|
-
}
|
|
219
|
-
/**
|
|
220
|
-
* Check if configuration migration was performed
|
|
221
|
-
* This is used to show a one-time migration message to users
|
|
222
|
-
*/
|
|
223
|
-
wasMigrationPerformed() {
|
|
224
|
-
return this.migrationPerformed;
|
|
225
|
-
}
|
|
226
|
-
/**
|
|
227
|
-
* Reset migration flag (after showing migration message)
|
|
228
|
-
*/
|
|
229
|
-
resetMigrationFlag() {
|
|
230
|
-
this.migrationPerformed = false;
|
|
231
|
-
}
|
|
232
|
-
}
|
|
233
|
-
export default ConfigManager;
|
|
234
|
-
//# sourceMappingURL=ConfigManager.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ConfigManager.js","sourceRoot":"","sources":["../../src/config/ConfigManager.ts"],"names":[],"mappings":"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"}
|