gencode-ai 0.2.0 → 0.3.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/agent/agent.d.ts +9 -2
- package/dist/agent/agent.d.ts.map +1 -1
- package/dist/agent/agent.js +37 -8
- package/dist/agent/agent.js.map +1 -1
- package/dist/agent/types.d.ts +5 -1
- package/dist/agent/types.d.ts.map +1 -1
- package/dist/cli/components/App.d.ts.map +1 -1
- package/dist/cli/components/App.js +15 -9
- package/dist/cli/components/App.js.map +1 -1
- package/dist/cli/components/Messages.js +1 -1
- package/dist/cli/components/Messages.js.map +1 -1
- package/dist/cli/components/ModelSelector.d.ts +4 -3
- package/dist/cli/components/ModelSelector.d.ts.map +1 -1
- package/dist/cli/components/ModelSelector.js +54 -37
- package/dist/cli/components/ModelSelector.js.map +1 -1
- package/dist/cli/components/ProviderManager.d.ts +2 -2
- package/dist/cli/components/ProviderManager.d.ts.map +1 -1
- package/dist/cli/components/ProviderManager.js +137 -156
- package/dist/cli/components/ProviderManager.js.map +1 -1
- package/dist/cli/index.js +30 -13
- package/dist/cli/index.js.map +1 -1
- package/dist/config/index.d.ts +2 -2
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/index.js +1 -1
- package/dist/config/index.js.map +1 -1
- package/dist/config/levels.d.ts +5 -5
- package/dist/config/levels.d.ts.map +1 -1
- package/dist/config/levels.js +20 -20
- package/dist/config/levels.js.map +1 -1
- package/dist/config/merger.js +1 -1
- package/dist/config/merger.js.map +1 -1
- package/dist/config/providers-config.d.ts +8 -5
- package/dist/config/providers-config.d.ts.map +1 -1
- package/dist/config/providers-config.js +19 -22
- package/dist/config/providers-config.js.map +1 -1
- package/dist/config/test-utils.d.ts +2 -2
- package/dist/config/test-utils.d.ts.map +1 -1
- package/dist/config/test-utils.js +4 -4
- package/dist/config/test-utils.js.map +1 -1
- package/dist/config/types.d.ts +23 -17
- package/dist/config/types.d.ts.map +1 -1
- package/dist/config/types.js +14 -14
- package/dist/config/types.js.map +1 -1
- package/dist/memory/memory-manager.d.ts +25 -12
- package/dist/memory/memory-manager.d.ts.map +1 -1
- package/dist/memory/memory-manager.js +241 -112
- package/dist/memory/memory-manager.js.map +1 -1
- package/dist/memory/test-utils.d.ts +1 -1
- package/dist/memory/test-utils.d.ts.map +1 -1
- package/dist/memory/test-utils.js +3 -3
- package/dist/memory/test-utils.js.map +1 -1
- package/dist/memory/types.d.ts +20 -10
- package/dist/memory/types.d.ts.map +1 -1
- package/dist/memory/types.js +13 -13
- package/dist/memory/types.js.map +1 -1
- package/dist/migration/migrate.d.ts +24 -0
- package/dist/migration/migrate.d.ts.map +1 -0
- package/dist/migration/migrate.js +164 -0
- package/dist/migration/migrate.js.map +1 -0
- package/dist/permissions/persistence.d.ts +2 -2
- package/dist/permissions/persistence.js +4 -4
- package/dist/permissions/persistence.js.map +1 -1
- package/dist/planning/plan-file.d.ts +1 -1
- package/dist/planning/plan-file.js +2 -2
- package/dist/planning/plan-file.js.map +1 -1
- package/dist/prompts/index.d.ts +5 -4
- package/dist/prompts/index.d.ts.map +1 -1
- package/dist/prompts/index.js +11 -8
- package/dist/prompts/index.js.map +1 -1
- package/dist/providers/anthropic.d.ts +2 -1
- package/dist/providers/anthropic.d.ts.map +1 -1
- package/dist/providers/anthropic.js +7 -0
- package/dist/providers/anthropic.js.map +1 -1
- package/dist/providers/gemini.d.ts +2 -1
- package/dist/providers/gemini.d.ts.map +1 -1
- package/dist/providers/gemini.js +7 -0
- package/dist/providers/gemini.js.map +1 -1
- package/dist/providers/index.d.ts +20 -10
- package/dist/providers/index.d.ts.map +1 -1
- package/dist/providers/index.js +48 -24
- package/dist/providers/index.js.map +1 -1
- package/dist/providers/openai.d.ts +2 -1
- package/dist/providers/openai.d.ts.map +1 -1
- package/dist/providers/openai.js +7 -0
- package/dist/providers/openai.js.map +1 -1
- package/dist/providers/registry.d.ts +48 -34
- package/dist/providers/registry.d.ts.map +1 -1
- package/dist/providers/registry.js +72 -88
- package/dist/providers/registry.js.map +1 -1
- package/dist/providers/store.d.ts +43 -17
- package/dist/providers/store.d.ts.map +1 -1
- package/dist/providers/store.js +112 -19
- package/dist/providers/store.js.map +1 -1
- package/dist/providers/types.d.ts +23 -0
- package/dist/providers/types.d.ts.map +1 -1
- package/dist/providers/vertex-ai.d.ts +15 -7
- package/dist/providers/vertex-ai.d.ts.map +1 -1
- package/dist/providers/vertex-ai.js +46 -13
- package/dist/providers/vertex-ai.js.map +1 -1
- package/dist/session/types.js +1 -1
- package/dist/session/types.js.map +1 -1
- package/docs/config-system-comparison.md +50 -50
- package/docs/cost-tracking-comparison.md +2 -2
- package/docs/memory-system.md +124 -31
- package/docs/permissions.md +2 -2
- package/docs/proposals/0006-memory-system.md +4 -4
- package/docs/proposals/0008-checkpointing.md +109 -2
- package/docs/proposals/0011-custom-commands.md +2 -1
- package/docs/proposals/0021-skills-system.md +2 -1
- package/docs/proposals/0023-permission-enhancements.md +2 -2
- package/docs/proposals/0033-enterprise-deployment.md +1 -1
- package/docs/proposals/0041-configuration-system.md +17 -19
- package/docs/proposals/0042-prompt-optimization.md +17 -9
- package/docs/proposals/README.md +5 -5
- package/docs/providers.md +94 -9
- package/package.json +3 -2
- package/scripts/migrate.ts +449 -0
- package/src/agent/agent.ts +51 -9
- package/src/agent/types.ts +5 -1
- package/src/cli/components/App.tsx +17 -8
- package/src/cli/components/Messages.tsx +1 -1
- package/src/cli/components/ModelSelector.tsx +62 -43
- package/src/cli/components/ProviderManager.tsx +278 -323
- package/src/cli/index.tsx +36 -17
- package/src/config/index.ts +5 -3
- package/src/config/levels.test.ts +22 -22
- package/src/config/levels.ts +22 -22
- package/src/config/loader.test.ts +14 -14
- package/src/config/manager.test.ts +19 -19
- package/src/config/merger.test.ts +23 -23
- package/src/config/merger.ts +1 -1
- package/src/config/providers-config.ts +23 -21
- package/src/config/test-utils.ts +6 -6
- package/src/config/types.ts +30 -20
- package/src/memory/memory-manager.test.ts +242 -24
- package/src/memory/memory-manager.ts +270 -141
- package/src/memory/test-utils.ts +4 -4
- package/src/memory/types.ts +28 -17
- package/src/permissions/persistence.ts +4 -4
- package/src/planning/plan-file.ts +2 -2
- package/src/prompts/index.ts +13 -9
- package/src/providers/anthropic.ts +9 -0
- package/src/providers/gemini.ts +9 -0
- package/src/providers/index.ts +76 -33
- package/src/providers/openai.ts +9 -0
- package/src/providers/registry.ts +116 -111
- package/src/providers/store.ts +130 -28
- package/src/providers/types.ts +33 -1
- package/src/providers/vertex-ai.ts +49 -13
- package/src/session/types.ts +1 -1
|
@@ -92,14 +92,14 @@ describe('mergeSettings', () => {
|
|
|
92
92
|
},
|
|
93
93
|
{
|
|
94
94
|
level: 'user',
|
|
95
|
-
path: '~/.
|
|
96
|
-
namespace: '
|
|
95
|
+
path: '~/.gen/settings.json',
|
|
96
|
+
namespace: 'gen',
|
|
97
97
|
settings: { provider: 'anthropic' }, // Override provider
|
|
98
98
|
},
|
|
99
99
|
{
|
|
100
100
|
level: 'project',
|
|
101
|
-
path: '.
|
|
102
|
-
namespace: '
|
|
101
|
+
path: '.gen/settings.json',
|
|
102
|
+
namespace: 'gen',
|
|
103
103
|
settings: { model: 'claude-sonnet' }, // Override model
|
|
104
104
|
},
|
|
105
105
|
];
|
|
@@ -122,8 +122,8 @@ describe('mergeSettings', () => {
|
|
|
122
122
|
},
|
|
123
123
|
{
|
|
124
124
|
level: 'project',
|
|
125
|
-
path: '.
|
|
126
|
-
namespace: '
|
|
125
|
+
path: '.gen/settings.json',
|
|
126
|
+
namespace: 'gen',
|
|
127
127
|
settings: {
|
|
128
128
|
permissions: { allow: ['Bash(npm:*)'], deny: ['WebFetch'] },
|
|
129
129
|
},
|
|
@@ -148,8 +148,8 @@ describe('extractManagedDeny', () => {
|
|
|
148
148
|
const sources: ConfigSource[] = [
|
|
149
149
|
{
|
|
150
150
|
level: 'user',
|
|
151
|
-
path: '~/.
|
|
152
|
-
namespace: '
|
|
151
|
+
path: '~/.gen/settings.json',
|
|
152
|
+
namespace: 'gen',
|
|
153
153
|
settings: {
|
|
154
154
|
permissions: { deny: ['WebFetch'] },
|
|
155
155
|
},
|
|
@@ -157,7 +157,7 @@ describe('extractManagedDeny', () => {
|
|
|
157
157
|
{
|
|
158
158
|
level: 'managed',
|
|
159
159
|
path: '/etc/gencode/managed-settings.json',
|
|
160
|
-
namespace: '
|
|
160
|
+
namespace: 'gen',
|
|
161
161
|
settings: {
|
|
162
162
|
permissions: { deny: ['Bash(curl:*)'] },
|
|
163
163
|
},
|
|
@@ -184,7 +184,7 @@ describe('extractManagedDeny', () => {
|
|
|
184
184
|
{
|
|
185
185
|
level: 'managed',
|
|
186
186
|
path: '/Library/.../GenCode/managed-settings.json',
|
|
187
|
-
namespace: '
|
|
187
|
+
namespace: 'gen',
|
|
188
188
|
settings: {
|
|
189
189
|
permissions: { deny: ['Bash(curl:*)', 'WebFetch'] },
|
|
190
190
|
},
|
|
@@ -200,8 +200,8 @@ describe('extractManagedDeny', () => {
|
|
|
200
200
|
const sources: ConfigSource[] = [
|
|
201
201
|
{
|
|
202
202
|
level: 'user',
|
|
203
|
-
path: '~/.
|
|
204
|
-
namespace: '
|
|
203
|
+
path: '~/.gen/settings.json',
|
|
204
|
+
namespace: 'gen',
|
|
205
205
|
settings: {
|
|
206
206
|
permissions: { deny: ['WebFetch'] },
|
|
207
207
|
},
|
|
@@ -262,14 +262,14 @@ describe('mergeAllSources', () => {
|
|
|
262
262
|
const sources: ConfigSource[] = [
|
|
263
263
|
{
|
|
264
264
|
level: 'user',
|
|
265
|
-
path: '~/.
|
|
266
|
-
namespace: '
|
|
265
|
+
path: '~/.gen/settings.json',
|
|
266
|
+
namespace: 'gen',
|
|
267
267
|
settings: { provider: 'anthropic' },
|
|
268
268
|
},
|
|
269
269
|
{
|
|
270
270
|
level: 'managed',
|
|
271
271
|
path: '/etc/gencode/managed-settings.json',
|
|
272
|
-
namespace: '
|
|
272
|
+
namespace: 'gen',
|
|
273
273
|
settings: {
|
|
274
274
|
permissions: { deny: ['Bash(curl:*)'] },
|
|
275
275
|
},
|
|
@@ -289,8 +289,8 @@ describe('mergeWithCliArgs', () => {
|
|
|
289
289
|
const sources: ConfigSource[] = [
|
|
290
290
|
{
|
|
291
291
|
level: 'user',
|
|
292
|
-
path: '~/.
|
|
293
|
-
namespace: '
|
|
292
|
+
path: '~/.gen/settings.json',
|
|
293
|
+
namespace: 'gen',
|
|
294
294
|
settings: { provider: 'openai', model: 'gpt-4' },
|
|
295
295
|
},
|
|
296
296
|
];
|
|
@@ -309,7 +309,7 @@ describe('mergeWithCliArgs', () => {
|
|
|
309
309
|
{
|
|
310
310
|
level: 'managed',
|
|
311
311
|
path: '/etc/gencode/managed-settings.json',
|
|
312
|
-
namespace: '
|
|
312
|
+
namespace: 'gen',
|
|
313
313
|
settings: {
|
|
314
314
|
permissions: { deny: ['Bash(curl:*)'] },
|
|
315
315
|
},
|
|
@@ -333,14 +333,14 @@ describe('createMergeSummary', () => {
|
|
|
333
333
|
const sources: ConfigSource[] = [
|
|
334
334
|
{
|
|
335
335
|
level: 'user',
|
|
336
|
-
path: '~/.
|
|
337
|
-
namespace: '
|
|
336
|
+
path: '~/.gen/settings.json',
|
|
337
|
+
namespace: 'gen',
|
|
338
338
|
settings: { provider: 'anthropic' },
|
|
339
339
|
},
|
|
340
340
|
{
|
|
341
341
|
level: 'managed',
|
|
342
342
|
path: '/etc/gencode/managed-settings.json',
|
|
343
|
-
namespace: '
|
|
343
|
+
namespace: 'gen',
|
|
344
344
|
settings: {
|
|
345
345
|
permissions: { deny: ['Bash(curl:*)'] },
|
|
346
346
|
},
|
|
@@ -351,8 +351,8 @@ describe('createMergeSummary', () => {
|
|
|
351
351
|
const summary = createMergeSummary(merged);
|
|
352
352
|
|
|
353
353
|
expect(summary).toContain('Configuration Sources');
|
|
354
|
-
expect(summary).toContain('user:
|
|
355
|
-
expect(summary).toContain('managed:
|
|
354
|
+
expect(summary).toContain('user:gen');
|
|
355
|
+
expect(summary).toContain('managed:gen');
|
|
356
356
|
expect(summary).toContain('[enforced]');
|
|
357
357
|
expect(summary).toContain('Managed Deny Rules');
|
|
358
358
|
expect(summary).toContain('Bash(curl:*)');
|
package/src/config/merger.ts
CHANGED
|
@@ -5,8 +5,9 @@
|
|
|
5
5
|
import * as fs from 'fs/promises';
|
|
6
6
|
import * as path from 'path';
|
|
7
7
|
import * as os from 'os';
|
|
8
|
-
import type { ProvidersConfig,
|
|
8
|
+
import type { ProvidersConfig, Provider, AuthMethod } from './types.js';
|
|
9
9
|
import { DEFAULT_SETTINGS_DIR, PROVIDERS_FILE_NAME } from './types.js';
|
|
10
|
+
import { parseModelCacheKey } from '../providers/store.js';
|
|
10
11
|
|
|
11
12
|
export class ProvidersConfigManager {
|
|
12
13
|
private settingsDir: string;
|
|
@@ -42,30 +43,23 @@ export class ProvidersConfigManager {
|
|
|
42
43
|
}
|
|
43
44
|
|
|
44
45
|
/**
|
|
45
|
-
* Infer provider from model ID using cached models
|
|
46
|
-
* Returns
|
|
46
|
+
* Infer provider and auth method from model ID using cached models
|
|
47
|
+
* Returns { provider, authMethod } if found, undefined if not in cache
|
|
47
48
|
*/
|
|
48
|
-
|
|
49
|
+
inferProviderFromCache(
|
|
50
|
+
modelId: string
|
|
51
|
+
): { provider: Provider; authMethod: AuthMethod } | undefined {
|
|
49
52
|
if (!this.config?.models) {
|
|
50
53
|
return undefined;
|
|
51
54
|
}
|
|
52
55
|
|
|
53
|
-
for (const [
|
|
56
|
+
for (const [key, providerModels] of Object.entries(this.config.models)) {
|
|
54
57
|
const found = providerModels.list?.some((m) => m.id === modelId);
|
|
55
58
|
if (found) {
|
|
56
|
-
//
|
|
57
|
-
|
|
58
|
-
if (
|
|
59
|
-
return
|
|
60
|
-
} else if (providerKey === 'anthropic') {
|
|
61
|
-
// Check connection method to determine if vertex or direct
|
|
62
|
-
const connection = this.config.connections?.[providerKey];
|
|
63
|
-
if (connection?.method === 'vertex') {
|
|
64
|
-
return 'vertex-ai';
|
|
65
|
-
}
|
|
66
|
-
return 'anthropic';
|
|
67
|
-
} else if (providerKey === 'openai') {
|
|
68
|
-
return 'openai';
|
|
59
|
+
// Parse key to get provider and authMethod
|
|
60
|
+
const parsed = parseModelCacheKey(key);
|
|
61
|
+
if (parsed) {
|
|
62
|
+
return parsed;
|
|
69
63
|
}
|
|
70
64
|
}
|
|
71
65
|
}
|
|
@@ -74,12 +68,20 @@ export class ProvidersConfigManager {
|
|
|
74
68
|
}
|
|
75
69
|
|
|
76
70
|
/**
|
|
77
|
-
* Get all model IDs for a provider
|
|
71
|
+
* Get all model IDs for a provider (across all authMethods)
|
|
78
72
|
*/
|
|
79
73
|
getModelIds(provider: string): string[] {
|
|
80
|
-
if (!this.config?.models
|
|
74
|
+
if (!this.config?.models) {
|
|
81
75
|
return [];
|
|
82
76
|
}
|
|
83
|
-
|
|
77
|
+
|
|
78
|
+
const modelIds: string[] = [];
|
|
79
|
+
for (const [key, cache] of Object.entries(this.config.models)) {
|
|
80
|
+
const parsed = parseModelCacheKey(key);
|
|
81
|
+
if (parsed && parsed.provider === provider) {
|
|
82
|
+
modelIds.push(...(cache.list?.map((m) => m.id) ?? []));
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
return modelIds;
|
|
84
86
|
}
|
|
85
87
|
}
|
package/src/config/test-utils.ts
CHANGED
|
@@ -27,7 +27,7 @@ export async function createTestProject(prefix = 'gencode-test-'): Promise<TestP
|
|
|
27
27
|
projectDir,
|
|
28
28
|
cleanup: async () => {
|
|
29
29
|
await fs.rm(tempDir, { recursive: true, force: true });
|
|
30
|
-
delete process.env.
|
|
30
|
+
delete process.env.GEN_CONFIG;
|
|
31
31
|
},
|
|
32
32
|
};
|
|
33
33
|
}
|
|
@@ -37,11 +37,11 @@ export async function createTestProject(prefix = 'gencode-test-'): Promise<TestP
|
|
|
37
37
|
*/
|
|
38
38
|
export async function writeSettings(
|
|
39
39
|
projectDir: string,
|
|
40
|
-
namespace: 'claude' | '
|
|
40
|
+
namespace: 'claude' | 'gen',
|
|
41
41
|
settings: Record<string, unknown>,
|
|
42
42
|
local = false
|
|
43
43
|
): Promise<string> {
|
|
44
|
-
const dir = path.join(projectDir, namespace === 'claude' ? '.claude' : '.
|
|
44
|
+
const dir = path.join(projectDir, namespace === 'claude' ? '.claude' : '.gen');
|
|
45
45
|
await fs.mkdir(dir, { recursive: true });
|
|
46
46
|
|
|
47
47
|
const filename = local ? 'settings.local.json' : 'settings.json';
|
|
@@ -56,18 +56,18 @@ export async function writeSettings(
|
|
|
56
56
|
*/
|
|
57
57
|
export async function writeMemory(
|
|
58
58
|
projectDir: string,
|
|
59
|
-
namespace: 'claude' | '
|
|
59
|
+
namespace: 'claude' | 'gen',
|
|
60
60
|
content: string,
|
|
61
61
|
options: { local?: boolean; inDir?: boolean } = {}
|
|
62
62
|
): Promise<string> {
|
|
63
63
|
const { local = false, inDir = true } = options;
|
|
64
64
|
const filename = namespace === 'claude'
|
|
65
65
|
? (local ? 'CLAUDE.local.md' : 'CLAUDE.md')
|
|
66
|
-
: (local ? '
|
|
66
|
+
: (local ? 'GEN.local.md' : 'GEN.md');
|
|
67
67
|
|
|
68
68
|
let filePath: string;
|
|
69
69
|
if (inDir) {
|
|
70
|
-
const dir = path.join(projectDir, namespace === 'claude' ? '.claude' : '.
|
|
70
|
+
const dir = path.join(projectDir, namespace === 'claude' ? '.claude' : '.gen');
|
|
71
71
|
await fs.mkdir(dir, { recursive: true });
|
|
72
72
|
filePath = path.join(dir, filename);
|
|
73
73
|
} else {
|
package/src/config/types.ts
CHANGED
|
@@ -2,10 +2,10 @@
|
|
|
2
2
|
* Configuration Types - Multi-level configuration system (Claude Code compatible)
|
|
3
3
|
*
|
|
4
4
|
* Configuration hierarchy (priority from low to high):
|
|
5
|
-
* 1. User Level: ~/.
|
|
6
|
-
* 2. Extra Dirs:
|
|
7
|
-
* 3. Project Level: .
|
|
8
|
-
* 4. Local Level: .
|
|
5
|
+
* 1. User Level: ~/.gen/ + ~/.claude/ (merged, gen wins)
|
|
6
|
+
* 2. Extra Dirs: GEN_CONFIG environment variable
|
|
7
|
+
* 3. Project Level: .gen/ + .claude/ (merged, gen wins)
|
|
8
|
+
* 4. Local Level: .gen/*.local.* + .claude/*.local.* (merged, gen wins)
|
|
9
9
|
* 5. CLI Arguments: Command line overrides
|
|
10
10
|
* 6. Managed Level: System-wide enforced settings (cannot be overridden)
|
|
11
11
|
*/
|
|
@@ -17,7 +17,12 @@ import * as path from 'path';
|
|
|
17
17
|
// Provider Types
|
|
18
18
|
// =============================================================================
|
|
19
19
|
|
|
20
|
-
export type
|
|
20
|
+
export type Provider = 'openai' | 'anthropic' | 'gemini';
|
|
21
|
+
export type AuthMethod = 'api_key' | 'vertex' | 'bedrock' | 'azure' | 'oauth';
|
|
22
|
+
|
|
23
|
+
// Legacy type alias for backward compatibility
|
|
24
|
+
/** @deprecated Use Provider instead */
|
|
25
|
+
export type ProviderName = Provider;
|
|
21
26
|
|
|
22
27
|
// =============================================================================
|
|
23
28
|
// Settings Types
|
|
@@ -39,7 +44,7 @@ export interface PermissionRules {
|
|
|
39
44
|
export interface Settings {
|
|
40
45
|
// Provider configuration
|
|
41
46
|
model?: string;
|
|
42
|
-
provider?:
|
|
47
|
+
provider?: Provider;
|
|
43
48
|
|
|
44
49
|
// Permissions
|
|
45
50
|
permissions?: PermissionRules;
|
|
@@ -62,6 +67,9 @@ export interface Settings {
|
|
|
62
67
|
enabledPlugins?: Record<string, boolean>;
|
|
63
68
|
extraKnownMarketplaces?: Record<string, unknown>;
|
|
64
69
|
|
|
70
|
+
// Memory configuration
|
|
71
|
+
memoryMergeStrategy?: 'fallback' | 'both' | 'gen-only' | 'claude-only';
|
|
72
|
+
|
|
65
73
|
// Managed-only fields (cannot be overridden by lower levels)
|
|
66
74
|
strictKnownMarketplaces?: unknown[];
|
|
67
75
|
|
|
@@ -94,7 +102,7 @@ export interface ConfigLevel {
|
|
|
94
102
|
export interface ConfigSource {
|
|
95
103
|
level: ConfigLevelType;
|
|
96
104
|
path: string;
|
|
97
|
-
namespace: '
|
|
105
|
+
namespace: 'gen' | 'claude' | 'extra';
|
|
98
106
|
settings: Settings;
|
|
99
107
|
}
|
|
100
108
|
|
|
@@ -111,7 +119,7 @@ export interface MergedConfig {
|
|
|
111
119
|
// Constants
|
|
112
120
|
// =============================================================================
|
|
113
121
|
|
|
114
|
-
export const
|
|
122
|
+
export const GEN_CONFIG_ENV = 'GEN_CONFIG';
|
|
115
123
|
|
|
116
124
|
// File names
|
|
117
125
|
export const SETTINGS_FILE_NAME = 'settings.json';
|
|
@@ -120,31 +128,31 @@ export const MANAGED_SETTINGS_FILE_NAME = 'managed-settings.json';
|
|
|
120
128
|
export const PROVIDERS_FILE_NAME = 'providers.json';
|
|
121
129
|
|
|
122
130
|
// Directory names
|
|
123
|
-
export const
|
|
131
|
+
export const GEN_DIR = '.gen';
|
|
124
132
|
export const CLAUDE_DIR = '.claude';
|
|
125
133
|
|
|
126
134
|
// User directory paths
|
|
127
|
-
export const
|
|
135
|
+
export const USER_GEN_DIR = path.join(os.homedir(), GEN_DIR);
|
|
128
136
|
export const USER_CLAUDE_DIR = path.join(os.homedir(), CLAUDE_DIR);
|
|
129
137
|
|
|
130
138
|
// Managed settings locations by platform
|
|
131
|
-
export function getManagedPaths(): {
|
|
139
|
+
export function getManagedPaths(): { gen: string; claude: string } {
|
|
132
140
|
const platform = os.platform();
|
|
133
141
|
|
|
134
142
|
if (platform === 'darwin') {
|
|
135
143
|
return {
|
|
136
|
-
|
|
144
|
+
gen: '/Library/Application Support/GenCode',
|
|
137
145
|
claude: '/Library/Application Support/ClaudeCode',
|
|
138
146
|
};
|
|
139
147
|
} else if (platform === 'win32') {
|
|
140
148
|
return {
|
|
141
|
-
|
|
149
|
+
gen: 'C:\\Program Files\\GenCode',
|
|
142
150
|
claude: 'C:\\Program Files\\ClaudeCode',
|
|
143
151
|
};
|
|
144
152
|
} else {
|
|
145
153
|
// Linux and other Unix-like systems
|
|
146
154
|
return {
|
|
147
|
-
|
|
155
|
+
gen: '/etc/gencode',
|
|
148
156
|
claude: '/etc/claude-code',
|
|
149
157
|
};
|
|
150
158
|
}
|
|
@@ -159,10 +167,10 @@ export interface SettingsManagerOptions {
|
|
|
159
167
|
}
|
|
160
168
|
|
|
161
169
|
// Legacy exports
|
|
162
|
-
export const DEFAULT_SETTINGS_DIR = '~/.
|
|
163
|
-
export const PROJECT_SETTINGS_DIR = '.
|
|
164
|
-
export const FALLBACK_SETTINGS_DIR = '~/.
|
|
165
|
-
export const FALLBACK_PROJECT_DIR = '.
|
|
170
|
+
export const DEFAULT_SETTINGS_DIR = '~/.gen';
|
|
171
|
+
export const PROJECT_SETTINGS_DIR = '.gen';
|
|
172
|
+
export const FALLBACK_SETTINGS_DIR = '~/.claude';
|
|
173
|
+
export const FALLBACK_PROJECT_DIR = '.claude';
|
|
166
174
|
|
|
167
175
|
// =============================================================================
|
|
168
176
|
// Provider Connection Types
|
|
@@ -172,7 +180,8 @@ export const FALLBACK_PROJECT_DIR = '.gencode';
|
|
|
172
180
|
* Provider connection info
|
|
173
181
|
*/
|
|
174
182
|
export interface ProviderConnection {
|
|
175
|
-
|
|
183
|
+
authMethod: AuthMethod; // Authentication method
|
|
184
|
+
method?: string; // Legacy: Connection name (e.g., "Direct API", "Google Vertex AI")
|
|
176
185
|
connectedAt: string;
|
|
177
186
|
}
|
|
178
187
|
|
|
@@ -187,6 +196,7 @@ export interface CachedModel {
|
|
|
187
196
|
|
|
188
197
|
/**
|
|
189
198
|
* Cached models for a provider
|
|
199
|
+
* Note: provider and authMethod are encoded in the key as "provider:authMethod"
|
|
190
200
|
*/
|
|
191
201
|
export interface ProviderModels {
|
|
192
202
|
cachedAt: string;
|
|
@@ -194,7 +204,7 @@ export interface ProviderModels {
|
|
|
194
204
|
}
|
|
195
205
|
|
|
196
206
|
/**
|
|
197
|
-
* Providers config file structure (~/.
|
|
207
|
+
* Providers config file structure (~/.gen/providers.json)
|
|
198
208
|
*/
|
|
199
209
|
export interface ProvidersConfig {
|
|
200
210
|
connections: Record<string, ProviderConnection>;
|