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.
Files changed (150) hide show
  1. package/dist/agent/agent.d.ts +9 -2
  2. package/dist/agent/agent.d.ts.map +1 -1
  3. package/dist/agent/agent.js +37 -8
  4. package/dist/agent/agent.js.map +1 -1
  5. package/dist/agent/types.d.ts +5 -1
  6. package/dist/agent/types.d.ts.map +1 -1
  7. package/dist/cli/components/App.d.ts.map +1 -1
  8. package/dist/cli/components/App.js +15 -9
  9. package/dist/cli/components/App.js.map +1 -1
  10. package/dist/cli/components/Messages.js +1 -1
  11. package/dist/cli/components/Messages.js.map +1 -1
  12. package/dist/cli/components/ModelSelector.d.ts +4 -3
  13. package/dist/cli/components/ModelSelector.d.ts.map +1 -1
  14. package/dist/cli/components/ModelSelector.js +54 -37
  15. package/dist/cli/components/ModelSelector.js.map +1 -1
  16. package/dist/cli/components/ProviderManager.d.ts +2 -2
  17. package/dist/cli/components/ProviderManager.d.ts.map +1 -1
  18. package/dist/cli/components/ProviderManager.js +137 -156
  19. package/dist/cli/components/ProviderManager.js.map +1 -1
  20. package/dist/cli/index.js +30 -13
  21. package/dist/cli/index.js.map +1 -1
  22. package/dist/config/index.d.ts +2 -2
  23. package/dist/config/index.d.ts.map +1 -1
  24. package/dist/config/index.js +1 -1
  25. package/dist/config/index.js.map +1 -1
  26. package/dist/config/levels.d.ts +5 -5
  27. package/dist/config/levels.d.ts.map +1 -1
  28. package/dist/config/levels.js +20 -20
  29. package/dist/config/levels.js.map +1 -1
  30. package/dist/config/merger.js +1 -1
  31. package/dist/config/merger.js.map +1 -1
  32. package/dist/config/providers-config.d.ts +8 -5
  33. package/dist/config/providers-config.d.ts.map +1 -1
  34. package/dist/config/providers-config.js +19 -22
  35. package/dist/config/providers-config.js.map +1 -1
  36. package/dist/config/test-utils.d.ts +2 -2
  37. package/dist/config/test-utils.d.ts.map +1 -1
  38. package/dist/config/test-utils.js +4 -4
  39. package/dist/config/test-utils.js.map +1 -1
  40. package/dist/config/types.d.ts +23 -17
  41. package/dist/config/types.d.ts.map +1 -1
  42. package/dist/config/types.js +14 -14
  43. package/dist/config/types.js.map +1 -1
  44. package/dist/memory/memory-manager.d.ts +25 -12
  45. package/dist/memory/memory-manager.d.ts.map +1 -1
  46. package/dist/memory/memory-manager.js +241 -112
  47. package/dist/memory/memory-manager.js.map +1 -1
  48. package/dist/memory/test-utils.d.ts +1 -1
  49. package/dist/memory/test-utils.d.ts.map +1 -1
  50. package/dist/memory/test-utils.js +3 -3
  51. package/dist/memory/test-utils.js.map +1 -1
  52. package/dist/memory/types.d.ts +20 -10
  53. package/dist/memory/types.d.ts.map +1 -1
  54. package/dist/memory/types.js +13 -13
  55. package/dist/memory/types.js.map +1 -1
  56. package/dist/migration/migrate.d.ts +24 -0
  57. package/dist/migration/migrate.d.ts.map +1 -0
  58. package/dist/migration/migrate.js +164 -0
  59. package/dist/migration/migrate.js.map +1 -0
  60. package/dist/permissions/persistence.d.ts +2 -2
  61. package/dist/permissions/persistence.js +4 -4
  62. package/dist/permissions/persistence.js.map +1 -1
  63. package/dist/planning/plan-file.d.ts +1 -1
  64. package/dist/planning/plan-file.js +2 -2
  65. package/dist/planning/plan-file.js.map +1 -1
  66. package/dist/prompts/index.d.ts +5 -4
  67. package/dist/prompts/index.d.ts.map +1 -1
  68. package/dist/prompts/index.js +11 -8
  69. package/dist/prompts/index.js.map +1 -1
  70. package/dist/providers/anthropic.d.ts +2 -1
  71. package/dist/providers/anthropic.d.ts.map +1 -1
  72. package/dist/providers/anthropic.js +7 -0
  73. package/dist/providers/anthropic.js.map +1 -1
  74. package/dist/providers/gemini.d.ts +2 -1
  75. package/dist/providers/gemini.d.ts.map +1 -1
  76. package/dist/providers/gemini.js +7 -0
  77. package/dist/providers/gemini.js.map +1 -1
  78. package/dist/providers/index.d.ts +20 -10
  79. package/dist/providers/index.d.ts.map +1 -1
  80. package/dist/providers/index.js +48 -24
  81. package/dist/providers/index.js.map +1 -1
  82. package/dist/providers/openai.d.ts +2 -1
  83. package/dist/providers/openai.d.ts.map +1 -1
  84. package/dist/providers/openai.js +7 -0
  85. package/dist/providers/openai.js.map +1 -1
  86. package/dist/providers/registry.d.ts +48 -34
  87. package/dist/providers/registry.d.ts.map +1 -1
  88. package/dist/providers/registry.js +72 -88
  89. package/dist/providers/registry.js.map +1 -1
  90. package/dist/providers/store.d.ts +43 -17
  91. package/dist/providers/store.d.ts.map +1 -1
  92. package/dist/providers/store.js +112 -19
  93. package/dist/providers/store.js.map +1 -1
  94. package/dist/providers/types.d.ts +23 -0
  95. package/dist/providers/types.d.ts.map +1 -1
  96. package/dist/providers/vertex-ai.d.ts +15 -7
  97. package/dist/providers/vertex-ai.d.ts.map +1 -1
  98. package/dist/providers/vertex-ai.js +46 -13
  99. package/dist/providers/vertex-ai.js.map +1 -1
  100. package/dist/session/types.js +1 -1
  101. package/dist/session/types.js.map +1 -1
  102. package/docs/config-system-comparison.md +50 -50
  103. package/docs/cost-tracking-comparison.md +2 -2
  104. package/docs/memory-system.md +124 -31
  105. package/docs/permissions.md +2 -2
  106. package/docs/proposals/0006-memory-system.md +4 -4
  107. package/docs/proposals/0008-checkpointing.md +109 -2
  108. package/docs/proposals/0011-custom-commands.md +2 -1
  109. package/docs/proposals/0021-skills-system.md +2 -1
  110. package/docs/proposals/0023-permission-enhancements.md +2 -2
  111. package/docs/proposals/0033-enterprise-deployment.md +1 -1
  112. package/docs/proposals/0041-configuration-system.md +17 -19
  113. package/docs/proposals/0042-prompt-optimization.md +17 -9
  114. package/docs/proposals/README.md +5 -5
  115. package/docs/providers.md +94 -9
  116. package/package.json +3 -2
  117. package/scripts/migrate.ts +449 -0
  118. package/src/agent/agent.ts +51 -9
  119. package/src/agent/types.ts +5 -1
  120. package/src/cli/components/App.tsx +17 -8
  121. package/src/cli/components/Messages.tsx +1 -1
  122. package/src/cli/components/ModelSelector.tsx +62 -43
  123. package/src/cli/components/ProviderManager.tsx +278 -323
  124. package/src/cli/index.tsx +36 -17
  125. package/src/config/index.ts +5 -3
  126. package/src/config/levels.test.ts +22 -22
  127. package/src/config/levels.ts +22 -22
  128. package/src/config/loader.test.ts +14 -14
  129. package/src/config/manager.test.ts +19 -19
  130. package/src/config/merger.test.ts +23 -23
  131. package/src/config/merger.ts +1 -1
  132. package/src/config/providers-config.ts +23 -21
  133. package/src/config/test-utils.ts +6 -6
  134. package/src/config/types.ts +30 -20
  135. package/src/memory/memory-manager.test.ts +242 -24
  136. package/src/memory/memory-manager.ts +270 -141
  137. package/src/memory/test-utils.ts +4 -4
  138. package/src/memory/types.ts +28 -17
  139. package/src/permissions/persistence.ts +4 -4
  140. package/src/planning/plan-file.ts +2 -2
  141. package/src/prompts/index.ts +13 -9
  142. package/src/providers/anthropic.ts +9 -0
  143. package/src/providers/gemini.ts +9 -0
  144. package/src/providers/index.ts +76 -33
  145. package/src/providers/openai.ts +9 -0
  146. package/src/providers/registry.ts +116 -111
  147. package/src/providers/store.ts +130 -28
  148. package/src/providers/types.ts +33 -1
  149. package/src/providers/vertex-ai.ts +49 -13
  150. package/src/session/types.ts +1 -1
@@ -92,14 +92,14 @@ describe('mergeSettings', () => {
92
92
  },
93
93
  {
94
94
  level: 'user',
95
- path: '~/.gencode/settings.json',
96
- namespace: 'gencode',
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: '.gencode/settings.json',
102
- namespace: 'gencode',
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: '.gencode/settings.json',
126
- namespace: 'gencode',
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: '~/.gencode/settings.json',
152
- namespace: 'gencode',
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: 'gencode',
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: 'gencode',
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: '~/.gencode/settings.json',
204
- namespace: 'gencode',
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: '~/.gencode/settings.json',
266
- namespace: 'gencode',
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: 'gencode',
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: '~/.gencode/settings.json',
293
- namespace: 'gencode',
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: 'gencode',
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: '~/.gencode/settings.json',
337
- namespace: 'gencode',
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: 'gencode',
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:gencode');
355
- expect(summary).toContain('managed:gencode');
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:*)');
@@ -191,7 +191,7 @@ export function mergeWithCliArgs(
191
191
  {
192
192
  level: 'cli',
193
193
  path: '<cli>',
194
- namespace: 'gencode',
194
+ namespace: 'gen',
195
195
  settings: cliArgs,
196
196
  },
197
197
  ],
@@ -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, ProviderName } from './types.js';
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 in providers.json
46
- * Returns undefined if model not found in any provider's cached list
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
- inferProvider(modelId: string): ProviderName | undefined {
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 [providerKey, providerModels] of Object.entries(this.config.models)) {
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
- // Map provider key to ProviderName
57
- // Note: 'anthropic' in providers.json might use vertex connection
58
- if (providerKey === 'gemini') {
59
- return 'gemini';
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?.[provider]) {
74
+ if (!this.config?.models) {
81
75
  return [];
82
76
  }
83
- return this.config.models[provider].list?.map((m) => m.id) ?? [];
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
  }
@@ -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.GENCODE_CONFIG_DIRS;
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' | 'gencode',
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' : '.gencode');
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' | 'gencode',
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 ? 'AGENT.local.md' : 'AGENT.md');
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' : '.gencode');
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 {
@@ -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: ~/.gencode/ + ~/.claude/ (merged, gencode wins)
6
- * 2. Extra Dirs: GENCODE_CONFIG_DIRS environment variable
7
- * 3. Project Level: .gencode/ + .claude/ (merged, gencode wins)
8
- * 4. Local Level: .gencode/*.local.* + .claude/*.local.* (merged, gencode wins)
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 ProviderName = 'openai' | 'anthropic' | 'gemini' | 'vertex-ai';
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?: ProviderName;
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: 'gencode' | 'claude' | 'extra';
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 GENCODE_CONFIG_DIRS_ENV = 'GENCODE_CONFIG_DIRS';
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 GENCODE_DIR = '.gencode';
131
+ export const GEN_DIR = '.gen';
124
132
  export const CLAUDE_DIR = '.claude';
125
133
 
126
134
  // User directory paths
127
- export const USER_GENCODE_DIR = path.join(os.homedir(), GENCODE_DIR);
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(): { gencode: string; claude: string } {
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
- gencode: '/Library/Application Support/GenCode',
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
- gencode: 'C:\\Program Files\\GenCode',
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
- gencode: '/etc/gencode',
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 = '~/.claude';
163
- export const PROJECT_SETTINGS_DIR = '.claude';
164
- export const FALLBACK_SETTINGS_DIR = '~/.gencode';
165
- export const FALLBACK_PROJECT_DIR = '.gencode';
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
- method: 'api_key' | 'vertex' | 'oauth';
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 (~/.gencode/providers.json)
207
+ * Providers config file structure (~/.gen/providers.json)
198
208
  */
199
209
  export interface ProvidersConfig {
200
210
  connections: Record<string, ProviderConnection>;