@radkode/neo 0.15.0 → 0.16.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.d.ts.map +1 -1
- package/dist/cli.js +14 -16
- package/dist/cli.js.map +1 -1
- package/dist/commands/config/index.d.ts.map +1 -1
- package/dist/commands/config/index.js +6 -1
- package/dist/commands/config/index.js.map +1 -1
- package/dist/commands/config/profile/index.d.ts +3 -0
- package/dist/commands/config/profile/index.d.ts.map +1 -0
- package/dist/commands/config/profile/index.js +306 -0
- package/dist/commands/config/profile/index.js.map +1 -0
- package/dist/commands/gh/index.d.ts +3 -0
- package/dist/commands/gh/index.d.ts.map +1 -0
- package/dist/commands/gh/index.js +8 -0
- package/dist/commands/gh/index.js.map +1 -0
- package/dist/commands/gh/pr/create/index.d.ts +6 -0
- package/dist/commands/gh/pr/create/index.d.ts.map +1 -0
- package/dist/commands/gh/pr/create/index.js +328 -0
- package/dist/commands/gh/pr/create/index.js.map +1 -0
- package/dist/commands/gh/pr/index.d.ts +3 -0
- package/dist/commands/gh/pr/index.d.ts.map +1 -0
- package/dist/commands/gh/pr/index.js +8 -0
- package/dist/commands/gh/pr/index.js.map +1 -0
- package/dist/commands/index.d.ts +2 -0
- package/dist/commands/index.d.ts.map +1 -1
- package/dist/commands/index.js +6 -0
- package/dist/commands/index.js.map +1 -1
- package/dist/commands/pr/index.d.ts +3 -0
- package/dist/commands/pr/index.d.ts.map +1 -0
- package/dist/commands/pr/index.js +41 -0
- package/dist/commands/pr/index.js.map +1 -0
- package/dist/types/schemas.d.ts +40 -0
- package/dist/types/schemas.d.ts.map +1 -1
- package/dist/types/schemas.js +27 -0
- package/dist/types/schemas.js.map +1 -1
- package/dist/utils/banner.d.ts.map +1 -1
- package/dist/utils/banner.js +4 -1
- package/dist/utils/banner.js.map +1 -1
- package/dist/utils/config.d.ts +6 -0
- package/dist/utils/config.d.ts.map +1 -1
- package/dist/utils/config.js +10 -0
- package/dist/utils/config.js.map +1 -1
- package/dist/utils/profiles.d.ts +25 -0
- package/dist/utils/profiles.d.ts.map +1 -0
- package/dist/utils/profiles.js +256 -0
- package/dist/utils/profiles.js.map +1 -0
- package/package.json +1 -1
package/dist/utils/config.d.ts
CHANGED
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import type { BannerType } from './banner.js';
|
|
2
2
|
export interface NeoConfig {
|
|
3
|
+
activeProfile?: string;
|
|
3
4
|
ai: {
|
|
4
5
|
enabled: boolean;
|
|
5
6
|
model?: string;
|
|
6
7
|
};
|
|
8
|
+
autoSwitch?: Record<string, string>;
|
|
7
9
|
installation: {
|
|
8
10
|
completionsPath?: string;
|
|
9
11
|
globalPath?: string;
|
|
@@ -31,9 +33,12 @@ export interface NeoConfig {
|
|
|
31
33
|
name?: string;
|
|
32
34
|
};
|
|
33
35
|
}
|
|
36
|
+
declare const DEFAULT_CONFIG: NeoConfig;
|
|
37
|
+
export { DEFAULT_CONFIG };
|
|
34
38
|
export declare class ConfigManager {
|
|
35
39
|
private configDir;
|
|
36
40
|
private configFile;
|
|
41
|
+
private profilesDir;
|
|
37
42
|
constructor();
|
|
38
43
|
private ensureConfigDir;
|
|
39
44
|
isInitialized(): Promise<boolean>;
|
|
@@ -42,6 +47,7 @@ export declare class ConfigManager {
|
|
|
42
47
|
update(updates: Partial<NeoConfig>): Promise<void>;
|
|
43
48
|
getConfigDir(): string;
|
|
44
49
|
getConfigFile(): string;
|
|
50
|
+
getProfilesDir(): string;
|
|
45
51
|
backup(): Promise<string | null>;
|
|
46
52
|
}
|
|
47
53
|
export declare const configManager: ConfigManager;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAKpD,MAAM,WAAW,SAAS;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAKpD,MAAM,WAAW,SAAS;IAKxB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,EAAE,EAAE;QACF,OAAO,EAAE,OAAO,CAAC;QACjB,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC;IAMF,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,YAAY,EAAE;QACZ,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,WAAW,EAAE,MAAM,CAAC;QACpB,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,WAAW,EAAE;QACX,OAAO,EAAE;YACP,CAAC,EAAE,OAAO,CAAC;SACZ,CAAC;QAOF,MAAM,EAAE,UAAU,CAAC;QACnB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,KAAK,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC;KAClC,CAAC;IACF,KAAK,EAAE;QACL,MAAM,EAAE,MAAM,CAAC;QACf,IAAI,EAAE,KAAK,GAAG,MAAM,GAAG,MAAM,CAAC;KAC/B,CAAC;IACF,OAAO,EAAE;QACP,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;QAC7B,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;KAC9B,CAAC;IACF,IAAI,EAAE;QACJ,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,IAAI,CAAC,EAAE,MAAM,CAAC;KACf,CAAC;CACH;AAED,QAAA,MAAM,cAAc,EAAE,SA2BrB,CAAC;AAEF,OAAO,EAAE,cAAc,EAAE,CAAC;AAE1B,qBAAa,aAAa;IACxB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,WAAW,CAAS;;YAWd,eAAe;IAYvB,aAAa,IAAI,OAAO,CAAC,OAAO,CAAC;IAYjC,IAAI,IAAI,OAAO,CAAC,SAAS,CAAC;IAmC1B,KAAK,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IAgBvC,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,SAAS,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAwBxD,YAAY,IAAI,MAAM;IAOtB,aAAa,IAAI,MAAM;IAOvB,cAAc,IAAI,MAAM;IAOlB,MAAM,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;CAmBvC;AAED,eAAO,MAAM,aAAa,eAAsB,CAAC"}
|
package/dist/utils/config.js
CHANGED
|
@@ -4,10 +4,12 @@ import { homedir } from 'os';
|
|
|
4
4
|
import { join } from 'path';
|
|
5
5
|
import { logger } from './logger.js';
|
|
6
6
|
const DEFAULT_CONFIG = {
|
|
7
|
+
activeProfile: 'default',
|
|
7
8
|
ai: {
|
|
8
9
|
enabled: true,
|
|
9
10
|
model: 'claude-3-haiku-20240307',
|
|
10
11
|
},
|
|
12
|
+
autoSwitch: {},
|
|
11
13
|
installation: {
|
|
12
14
|
installedAt: new Date().toISOString(),
|
|
13
15
|
version: '0.1.0',
|
|
@@ -29,12 +31,15 @@ const DEFAULT_CONFIG = {
|
|
|
29
31
|
},
|
|
30
32
|
user: {},
|
|
31
33
|
};
|
|
34
|
+
export { DEFAULT_CONFIG };
|
|
32
35
|
export class ConfigManager {
|
|
33
36
|
configDir;
|
|
34
37
|
configFile;
|
|
38
|
+
profilesDir;
|
|
35
39
|
constructor() {
|
|
36
40
|
this.configDir = join(homedir(), '.config', 'neo');
|
|
37
41
|
this.configFile = join(this.configDir, 'config.json');
|
|
42
|
+
this.profilesDir = join(this.configDir, 'profiles');
|
|
38
43
|
}
|
|
39
44
|
async ensureConfigDir() {
|
|
40
45
|
try {
|
|
@@ -66,6 +71,7 @@ export class ConfigManager {
|
|
|
66
71
|
...DEFAULT_CONFIG,
|
|
67
72
|
...config,
|
|
68
73
|
ai: { ...DEFAULT_CONFIG.ai, ...config.ai },
|
|
74
|
+
autoSwitch: { ...DEFAULT_CONFIG.autoSwitch, ...config.autoSwitch },
|
|
69
75
|
installation: { ...DEFAULT_CONFIG.installation, ...config.installation },
|
|
70
76
|
preferences: {
|
|
71
77
|
...DEFAULT_CONFIG.preferences,
|
|
@@ -100,6 +106,7 @@ export class ConfigManager {
|
|
|
100
106
|
...current,
|
|
101
107
|
...updates,
|
|
102
108
|
ai: { ...current.ai, ...updates.ai },
|
|
109
|
+
autoSwitch: { ...current.autoSwitch, ...updates.autoSwitch },
|
|
103
110
|
installation: { ...current.installation, ...updates.installation },
|
|
104
111
|
preferences: {
|
|
105
112
|
...current.preferences,
|
|
@@ -118,6 +125,9 @@ export class ConfigManager {
|
|
|
118
125
|
getConfigFile() {
|
|
119
126
|
return this.configFile;
|
|
120
127
|
}
|
|
128
|
+
getProfilesDir() {
|
|
129
|
+
return this.profilesDir;
|
|
130
|
+
}
|
|
121
131
|
async backup() {
|
|
122
132
|
const initialized = await this.isInitialized();
|
|
123
133
|
if (!initialized) {
|
package/dist/utils/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACjE,OAAO,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AAC/B,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAC7B,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { type NeoConfig } from './config.js';
|
|
2
|
+
export type ProfileConfig = Omit<NeoConfig, 'activeProfile' | 'autoSwitch' | 'installation' | 'updates'>;
|
|
3
|
+
export declare class ProfileManager {
|
|
4
|
+
private profilesDir;
|
|
5
|
+
constructor();
|
|
6
|
+
private ensureProfilesDir;
|
|
7
|
+
private getProfilePath;
|
|
8
|
+
exists(name: string): Promise<boolean>;
|
|
9
|
+
list(): Promise<string[]>;
|
|
10
|
+
create(name: string, config?: Partial<ProfileConfig>): Promise<void>;
|
|
11
|
+
read(name: string): Promise<ProfileConfig>;
|
|
12
|
+
update(name: string, updates: Partial<ProfileConfig>): Promise<void>;
|
|
13
|
+
delete(name: string): Promise<void>;
|
|
14
|
+
getActive(): Promise<string>;
|
|
15
|
+
setActive(name: string): Promise<void>;
|
|
16
|
+
getActiveConfig(): Promise<NeoConfig>;
|
|
17
|
+
detectProfile(cwd: string): Promise<string | null>;
|
|
18
|
+
export(name: string): Promise<string>;
|
|
19
|
+
import(filePath: string, name?: string): Promise<string>;
|
|
20
|
+
copy(sourceName: string, targetName: string): Promise<void>;
|
|
21
|
+
getProfilesDir(): string;
|
|
22
|
+
initialize(): Promise<void>;
|
|
23
|
+
}
|
|
24
|
+
export declare const profileManager: ProfileManager;
|
|
25
|
+
//# sourceMappingURL=profiles.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"profiles.d.ts","sourceRoot":"","sources":["../../src/utils/profiles.ts"],"names":[],"mappings":"AAKA,OAAO,EAAiC,KAAK,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAMlF,MAAM,MAAM,aAAa,GAAG,IAAI,CAAC,SAAS,EAAE,eAAe,GAAG,YAAY,GAAG,cAAc,GAAG,SAAS,CAAC,CAAC;AAKzG,qBAAa,cAAc;IACzB,OAAO,CAAC,WAAW,CAAS;;YASd,iBAAiB;IAY/B,OAAO,CAAC,cAAc;IAOhB,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAYtC,IAAI,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAkBzB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IA+CpE,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IAmB1C,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,aAAa,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IA6BpE,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA8BnC,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC;IAQ5B,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAYtC,eAAe,IAAI,OAAO,CAAC,SAAS,CAAC;IAkCrC,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAyDlD,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAQrC,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IA0BxD,IAAI,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQjE,cAAc,IAAI,MAAM;IAOlB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;CAelC;AAED,eAAO,MAAM,cAAc,gBAAuB,CAAC"}
|
|
@@ -0,0 +1,256 @@
|
|
|
1
|
+
import { access, mkdir, readdir, readFile, unlink, writeFile } from 'fs/promises';
|
|
2
|
+
import { constants } from 'fs';
|
|
3
|
+
import { homedir } from 'os';
|
|
4
|
+
import { basename, join } from 'path';
|
|
5
|
+
import { logger } from './logger.js';
|
|
6
|
+
import { configManager, DEFAULT_CONFIG } from './config.js';
|
|
7
|
+
export class ProfileManager {
|
|
8
|
+
profilesDir;
|
|
9
|
+
constructor() {
|
|
10
|
+
this.profilesDir = join(homedir(), '.config', 'neo', 'profiles');
|
|
11
|
+
}
|
|
12
|
+
async ensureProfilesDir() {
|
|
13
|
+
try {
|
|
14
|
+
await access(this.profilesDir, constants.F_OK);
|
|
15
|
+
}
|
|
16
|
+
catch {
|
|
17
|
+
await mkdir(this.profilesDir, { recursive: true });
|
|
18
|
+
logger.debug(`Created profiles directory: ${this.profilesDir}`);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
getProfilePath(name) {
|
|
22
|
+
return join(this.profilesDir, `${name}.json`);
|
|
23
|
+
}
|
|
24
|
+
async exists(name) {
|
|
25
|
+
try {
|
|
26
|
+
await access(this.getProfilePath(name), constants.F_OK);
|
|
27
|
+
return true;
|
|
28
|
+
}
|
|
29
|
+
catch {
|
|
30
|
+
return false;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
async list() {
|
|
34
|
+
await this.ensureProfilesDir();
|
|
35
|
+
try {
|
|
36
|
+
const files = await readdir(this.profilesDir);
|
|
37
|
+
return files
|
|
38
|
+
.filter((f) => f.endsWith('.json'))
|
|
39
|
+
.map((f) => basename(f, '.json'))
|
|
40
|
+
.sort();
|
|
41
|
+
}
|
|
42
|
+
catch (error) {
|
|
43
|
+
logger.warn(`Failed to list profiles: ${error}`);
|
|
44
|
+
return [];
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
async create(name, config) {
|
|
48
|
+
await this.ensureProfilesDir();
|
|
49
|
+
const profilePath = this.getProfilePath(name);
|
|
50
|
+
if (await this.exists(name)) {
|
|
51
|
+
throw new Error(`Profile '${name}' already exists`);
|
|
52
|
+
}
|
|
53
|
+
const defaultProfileConfig = {
|
|
54
|
+
ai: DEFAULT_CONFIG.ai,
|
|
55
|
+
preferences: DEFAULT_CONFIG.preferences,
|
|
56
|
+
shell: DEFAULT_CONFIG.shell,
|
|
57
|
+
user: DEFAULT_CONFIG.user,
|
|
58
|
+
};
|
|
59
|
+
const profileConfig = config
|
|
60
|
+
? {
|
|
61
|
+
...defaultProfileConfig,
|
|
62
|
+
...config,
|
|
63
|
+
ai: { ...defaultProfileConfig.ai, ...config.ai },
|
|
64
|
+
preferences: {
|
|
65
|
+
...defaultProfileConfig.preferences,
|
|
66
|
+
...config.preferences,
|
|
67
|
+
aliases: {
|
|
68
|
+
...defaultProfileConfig.preferences.aliases,
|
|
69
|
+
...config.preferences?.aliases,
|
|
70
|
+
},
|
|
71
|
+
},
|
|
72
|
+
shell: { ...defaultProfileConfig.shell, ...config.shell },
|
|
73
|
+
user: { ...defaultProfileConfig.user, ...config.user },
|
|
74
|
+
}
|
|
75
|
+
: defaultProfileConfig;
|
|
76
|
+
try {
|
|
77
|
+
const content = JSON.stringify(profileConfig, null, 2);
|
|
78
|
+
await writeFile(profilePath, content, 'utf-8');
|
|
79
|
+
logger.debug(`Created profile: ${name}`);
|
|
80
|
+
}
|
|
81
|
+
catch (error) {
|
|
82
|
+
logger.error(`Failed to create profile: ${error}`);
|
|
83
|
+
throw error;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
async read(name) {
|
|
87
|
+
const profilePath = this.getProfilePath(name);
|
|
88
|
+
if (!(await this.exists(name))) {
|
|
89
|
+
throw new Error(`Profile '${name}' does not exist`);
|
|
90
|
+
}
|
|
91
|
+
try {
|
|
92
|
+
const content = await readFile(profilePath, 'utf-8');
|
|
93
|
+
return JSON.parse(content);
|
|
94
|
+
}
|
|
95
|
+
catch (error) {
|
|
96
|
+
logger.error(`Failed to read profile: ${error}`);
|
|
97
|
+
throw error;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
async update(name, updates) {
|
|
101
|
+
const current = await this.read(name);
|
|
102
|
+
const updated = {
|
|
103
|
+
...current,
|
|
104
|
+
...updates,
|
|
105
|
+
ai: { ...current.ai, ...updates.ai },
|
|
106
|
+
preferences: {
|
|
107
|
+
...current.preferences,
|
|
108
|
+
...updates.preferences,
|
|
109
|
+
aliases: { ...current.preferences.aliases, ...updates.preferences?.aliases },
|
|
110
|
+
},
|
|
111
|
+
shell: { ...current.shell, ...updates.shell },
|
|
112
|
+
user: { ...current.user, ...updates.user },
|
|
113
|
+
};
|
|
114
|
+
const profilePath = this.getProfilePath(name);
|
|
115
|
+
try {
|
|
116
|
+
const content = JSON.stringify(updated, null, 2);
|
|
117
|
+
await writeFile(profilePath, content, 'utf-8');
|
|
118
|
+
logger.debug(`Updated profile: ${name}`);
|
|
119
|
+
}
|
|
120
|
+
catch (error) {
|
|
121
|
+
logger.error(`Failed to update profile: ${error}`);
|
|
122
|
+
throw error;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
async delete(name) {
|
|
126
|
+
if (!(await this.exists(name))) {
|
|
127
|
+
throw new Error(`Profile '${name}' does not exist`);
|
|
128
|
+
}
|
|
129
|
+
const config = await configManager.read();
|
|
130
|
+
if (config.activeProfile === name) {
|
|
131
|
+
throw new Error(`Cannot delete active profile '${name}'. Switch to another profile first.`);
|
|
132
|
+
}
|
|
133
|
+
const profiles = await this.list();
|
|
134
|
+
if (name === 'default' && profiles.length === 1) {
|
|
135
|
+
throw new Error(`Cannot delete the only remaining profile 'default'`);
|
|
136
|
+
}
|
|
137
|
+
const profilePath = this.getProfilePath(name);
|
|
138
|
+
try {
|
|
139
|
+
await unlink(profilePath);
|
|
140
|
+
logger.debug(`Deleted profile: ${name}`);
|
|
141
|
+
}
|
|
142
|
+
catch (error) {
|
|
143
|
+
logger.error(`Failed to delete profile: ${error}`);
|
|
144
|
+
throw error;
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
async getActive() {
|
|
148
|
+
const config = await configManager.read();
|
|
149
|
+
return config.activeProfile || 'default';
|
|
150
|
+
}
|
|
151
|
+
async setActive(name) {
|
|
152
|
+
if (!(await this.exists(name))) {
|
|
153
|
+
throw new Error(`Profile '${name}' does not exist`);
|
|
154
|
+
}
|
|
155
|
+
await configManager.update({ activeProfile: name });
|
|
156
|
+
logger.debug(`Switched to profile: ${name}`);
|
|
157
|
+
}
|
|
158
|
+
async getActiveConfig() {
|
|
159
|
+
const baseConfig = await configManager.read();
|
|
160
|
+
const activeProfileName = baseConfig.activeProfile || 'default';
|
|
161
|
+
if (!(await this.exists(activeProfileName))) {
|
|
162
|
+
return baseConfig;
|
|
163
|
+
}
|
|
164
|
+
const profileConfig = await this.read(activeProfileName);
|
|
165
|
+
return {
|
|
166
|
+
...baseConfig,
|
|
167
|
+
ai: { ...baseConfig.ai, ...profileConfig.ai },
|
|
168
|
+
preferences: {
|
|
169
|
+
...baseConfig.preferences,
|
|
170
|
+
...profileConfig.preferences,
|
|
171
|
+
aliases: { ...baseConfig.preferences.aliases, ...profileConfig.preferences?.aliases },
|
|
172
|
+
},
|
|
173
|
+
shell: { ...baseConfig.shell, ...profileConfig.shell },
|
|
174
|
+
user: { ...baseConfig.user, ...profileConfig.user },
|
|
175
|
+
};
|
|
176
|
+
}
|
|
177
|
+
async detectProfile(cwd) {
|
|
178
|
+
const config = await configManager.read();
|
|
179
|
+
const autoSwitch = config.autoSwitch;
|
|
180
|
+
if (!autoSwitch || Object.keys(autoSwitch).length === 0) {
|
|
181
|
+
return null;
|
|
182
|
+
}
|
|
183
|
+
const expandPath = (pattern) => {
|
|
184
|
+
if (pattern.startsWith('~/')) {
|
|
185
|
+
return join(homedir(), pattern.slice(2));
|
|
186
|
+
}
|
|
187
|
+
return pattern;
|
|
188
|
+
};
|
|
189
|
+
const matchesPattern = (path, pattern) => {
|
|
190
|
+
const expandedPattern = expandPath(pattern);
|
|
191
|
+
if (expandedPattern.endsWith('/*')) {
|
|
192
|
+
const basePattern = expandedPattern.slice(0, -2);
|
|
193
|
+
return path.startsWith(basePattern + '/') || path === basePattern;
|
|
194
|
+
}
|
|
195
|
+
if (expandedPattern.endsWith('/**')) {
|
|
196
|
+
const basePattern = expandedPattern.slice(0, -3);
|
|
197
|
+
return path.startsWith(basePattern + '/') || path === basePattern;
|
|
198
|
+
}
|
|
199
|
+
return path === expandedPattern;
|
|
200
|
+
};
|
|
201
|
+
const sortedPatterns = Object.entries(autoSwitch).sort(([a], [b]) => expandPath(b).length - expandPath(a).length);
|
|
202
|
+
for (const [pattern, profileName] of sortedPatterns) {
|
|
203
|
+
if (matchesPattern(cwd, pattern)) {
|
|
204
|
+
if (await this.exists(profileName)) {
|
|
205
|
+
return profileName;
|
|
206
|
+
}
|
|
207
|
+
logger.warn(`Auto-switch profile '${profileName}' for pattern '${pattern}' does not exist`);
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
return null;
|
|
211
|
+
}
|
|
212
|
+
async export(name) {
|
|
213
|
+
const profileConfig = await this.read(name);
|
|
214
|
+
return JSON.stringify(profileConfig, null, 2);
|
|
215
|
+
}
|
|
216
|
+
async import(filePath, name) {
|
|
217
|
+
try {
|
|
218
|
+
const content = await readFile(filePath, 'utf-8');
|
|
219
|
+
const profileConfig = JSON.parse(content);
|
|
220
|
+
const profileName = name || basename(filePath, '.json');
|
|
221
|
+
if (!profileConfig.preferences || !profileConfig.shell) {
|
|
222
|
+
throw new Error('Invalid profile format: missing required sections');
|
|
223
|
+
}
|
|
224
|
+
await this.create(profileName, profileConfig);
|
|
225
|
+
return profileName;
|
|
226
|
+
}
|
|
227
|
+
catch (error) {
|
|
228
|
+
if (error instanceof SyntaxError) {
|
|
229
|
+
throw new Error(`Invalid JSON in profile file: ${error.message}`);
|
|
230
|
+
}
|
|
231
|
+
throw error;
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
async copy(sourceName, targetName) {
|
|
235
|
+
const sourceConfig = await this.read(sourceName);
|
|
236
|
+
await this.create(targetName, sourceConfig);
|
|
237
|
+
}
|
|
238
|
+
getProfilesDir() {
|
|
239
|
+
return this.profilesDir;
|
|
240
|
+
}
|
|
241
|
+
async initialize() {
|
|
242
|
+
await this.ensureProfilesDir();
|
|
243
|
+
if (!(await this.exists('default'))) {
|
|
244
|
+
const config = await configManager.read();
|
|
245
|
+
await this.create('default', {
|
|
246
|
+
ai: config.ai,
|
|
247
|
+
preferences: config.preferences,
|
|
248
|
+
shell: config.shell,
|
|
249
|
+
user: config.user,
|
|
250
|
+
});
|
|
251
|
+
logger.debug('Created default profile');
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
export const profileManager = new ProfileManager();
|
|
256
|
+
//# sourceMappingURL=profiles.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"profiles.js","sourceRoot":"","sources":["../../src/utils/profiles.ts"],"names":[],"mappings":"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"}
|