gencode-ai 0.2.0 → 0.4.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 (218) hide show
  1. package/RELEASE_NOTES_v0.4.0.md +140 -0
  2. package/dist/agent/agent.d.ts +26 -4
  3. package/dist/agent/agent.d.ts.map +1 -1
  4. package/dist/agent/agent.js +316 -57
  5. package/dist/agent/agent.js.map +1 -1
  6. package/dist/agent/types.d.ts +20 -2
  7. package/dist/agent/types.d.ts.map +1 -1
  8. package/dist/checkpointing/checkpoint-manager.d.ts +24 -0
  9. package/dist/checkpointing/checkpoint-manager.d.ts.map +1 -1
  10. package/dist/checkpointing/checkpoint-manager.js +28 -0
  11. package/dist/checkpointing/checkpoint-manager.js.map +1 -1
  12. package/dist/cli/components/App.d.ts +8 -0
  13. package/dist/cli/components/App.d.ts.map +1 -1
  14. package/dist/cli/components/App.js +493 -45
  15. package/dist/cli/components/App.js.map +1 -1
  16. package/dist/cli/components/CommandSuggestions.d.ts.map +1 -1
  17. package/dist/cli/components/CommandSuggestions.js +2 -0
  18. package/dist/cli/components/CommandSuggestions.js.map +1 -1
  19. package/dist/cli/components/Header.d.ts +6 -1
  20. package/dist/cli/components/Header.d.ts.map +1 -1
  21. package/dist/cli/components/Header.js +3 -3
  22. package/dist/cli/components/Header.js.map +1 -1
  23. package/dist/cli/components/Messages.d.ts.map +1 -1
  24. package/dist/cli/components/Messages.js +8 -10
  25. package/dist/cli/components/Messages.js.map +1 -1
  26. package/dist/cli/components/ModelSelector.d.ts +4 -3
  27. package/dist/cli/components/ModelSelector.d.ts.map +1 -1
  28. package/dist/cli/components/ModelSelector.js +54 -37
  29. package/dist/cli/components/ModelSelector.js.map +1 -1
  30. package/dist/cli/components/ProviderManager.d.ts +2 -2
  31. package/dist/cli/components/ProviderManager.d.ts.map +1 -1
  32. package/dist/cli/components/ProviderManager.js +137 -156
  33. package/dist/cli/components/ProviderManager.js.map +1 -1
  34. package/dist/cli/index.js +33 -15
  35. package/dist/cli/index.js.map +1 -1
  36. package/dist/config/index.d.ts +2 -2
  37. package/dist/config/index.d.ts.map +1 -1
  38. package/dist/config/index.js +1 -1
  39. package/dist/config/index.js.map +1 -1
  40. package/dist/config/levels.d.ts +5 -5
  41. package/dist/config/levels.d.ts.map +1 -1
  42. package/dist/config/levels.js +20 -20
  43. package/dist/config/levels.js.map +1 -1
  44. package/dist/config/merger.js +1 -1
  45. package/dist/config/merger.js.map +1 -1
  46. package/dist/config/providers-config.d.ts +8 -5
  47. package/dist/config/providers-config.d.ts.map +1 -1
  48. package/dist/config/providers-config.js +19 -22
  49. package/dist/config/providers-config.js.map +1 -1
  50. package/dist/config/test-utils.d.ts +2 -2
  51. package/dist/config/test-utils.d.ts.map +1 -1
  52. package/dist/config/test-utils.js +4 -4
  53. package/dist/config/test-utils.js.map +1 -1
  54. package/dist/config/types.d.ts +42 -17
  55. package/dist/config/types.d.ts.map +1 -1
  56. package/dist/config/types.js +14 -14
  57. package/dist/config/types.js.map +1 -1
  58. package/dist/index.d.ts +2 -2
  59. package/dist/index.js +2 -2
  60. package/dist/input/history-manager.d.ts +78 -0
  61. package/dist/input/history-manager.d.ts.map +1 -0
  62. package/dist/input/history-manager.js +224 -0
  63. package/dist/input/history-manager.js.map +1 -0
  64. package/dist/input/index.d.ts +6 -0
  65. package/dist/input/index.d.ts.map +1 -0
  66. package/dist/input/index.js +5 -0
  67. package/dist/input/index.js.map +1 -0
  68. package/dist/memory/memory-manager.d.ts +25 -12
  69. package/dist/memory/memory-manager.d.ts.map +1 -1
  70. package/dist/memory/memory-manager.js +241 -112
  71. package/dist/memory/memory-manager.js.map +1 -1
  72. package/dist/memory/test-utils.d.ts +1 -1
  73. package/dist/memory/test-utils.d.ts.map +1 -1
  74. package/dist/memory/test-utils.js +3 -3
  75. package/dist/memory/test-utils.js.map +1 -1
  76. package/dist/memory/types.d.ts +20 -10
  77. package/dist/memory/types.d.ts.map +1 -1
  78. package/dist/memory/types.js +13 -13
  79. package/dist/memory/types.js.map +1 -1
  80. package/dist/migration/migrate.d.ts +24 -0
  81. package/dist/migration/migrate.d.ts.map +1 -0
  82. package/dist/migration/migrate.js +164 -0
  83. package/dist/migration/migrate.js.map +1 -0
  84. package/dist/permissions/persistence.d.ts +2 -2
  85. package/dist/permissions/persistence.js +4 -4
  86. package/dist/permissions/persistence.js.map +1 -1
  87. package/dist/planning/plan-file.d.ts +1 -1
  88. package/dist/planning/plan-file.js +2 -2
  89. package/dist/planning/plan-file.js.map +1 -1
  90. package/dist/prompts/index.d.ts +5 -4
  91. package/dist/prompts/index.d.ts.map +1 -1
  92. package/dist/prompts/index.js +13 -10
  93. package/dist/prompts/index.js.map +1 -1
  94. package/dist/providers/anthropic.d.ts +2 -1
  95. package/dist/providers/anthropic.d.ts.map +1 -1
  96. package/dist/providers/anthropic.js +7 -0
  97. package/dist/providers/anthropic.js.map +1 -1
  98. package/dist/providers/gemini.d.ts +2 -1
  99. package/dist/providers/gemini.d.ts.map +1 -1
  100. package/dist/providers/gemini.js +40 -2
  101. package/dist/providers/gemini.js.map +1 -1
  102. package/dist/providers/google.d.ts +22 -0
  103. package/dist/providers/google.d.ts.map +1 -0
  104. package/dist/providers/google.js +297 -0
  105. package/dist/providers/google.js.map +1 -0
  106. package/dist/providers/index.d.ts +22 -12
  107. package/dist/providers/index.d.ts.map +1 -1
  108. package/dist/providers/index.js +56 -32
  109. package/dist/providers/index.js.map +1 -1
  110. package/dist/providers/openai.d.ts +2 -1
  111. package/dist/providers/openai.d.ts.map +1 -1
  112. package/dist/providers/openai.js +13 -0
  113. package/dist/providers/openai.js.map +1 -1
  114. package/dist/providers/registry.d.ts +48 -34
  115. package/dist/providers/registry.d.ts.map +1 -1
  116. package/dist/providers/registry.js +72 -88
  117. package/dist/providers/registry.js.map +1 -1
  118. package/dist/providers/store.d.ts +43 -17
  119. package/dist/providers/store.d.ts.map +1 -1
  120. package/dist/providers/store.js +112 -19
  121. package/dist/providers/store.js.map +1 -1
  122. package/dist/providers/types.d.ts +52 -3
  123. package/dist/providers/types.d.ts.map +1 -1
  124. package/dist/providers/vertex-ai.d.ts +15 -7
  125. package/dist/providers/vertex-ai.d.ts.map +1 -1
  126. package/dist/providers/vertex-ai.js +46 -13
  127. package/dist/providers/vertex-ai.js.map +1 -1
  128. package/dist/session/compression/engine.d.ts +109 -0
  129. package/dist/session/compression/engine.d.ts.map +1 -0
  130. package/dist/session/compression/engine.js +311 -0
  131. package/dist/session/compression/engine.js.map +1 -0
  132. package/dist/session/compression/index.d.ts +12 -0
  133. package/dist/session/compression/index.d.ts.map +1 -0
  134. package/dist/session/compression/index.js +11 -0
  135. package/dist/session/compression/index.js.map +1 -0
  136. package/dist/session/compression/types.d.ts +90 -0
  137. package/dist/session/compression/types.d.ts.map +1 -0
  138. package/dist/session/compression/types.js +17 -0
  139. package/dist/session/compression/types.js.map +1 -0
  140. package/dist/session/manager.d.ts +64 -3
  141. package/dist/session/manager.d.ts.map +1 -1
  142. package/dist/session/manager.js +254 -2
  143. package/dist/session/manager.js.map +1 -1
  144. package/dist/session/types.d.ts +16 -0
  145. package/dist/session/types.d.ts.map +1 -1
  146. package/dist/session/types.js +1 -1
  147. package/dist/session/types.js.map +1 -1
  148. package/docs/README.md +1 -0
  149. package/docs/config-system-comparison.md +50 -50
  150. package/docs/cost-tracking-comparison.md +2 -2
  151. package/docs/diagrams/compression-decision.mmd +30 -0
  152. package/docs/diagrams/compression-workflow.mmd +54 -0
  153. package/docs/diagrams/layer1-pruning.mmd +45 -0
  154. package/docs/diagrams/layer2-compaction.mmd +42 -0
  155. package/docs/memory-system.md +124 -31
  156. package/docs/permissions.md +2 -2
  157. package/docs/proposals/0006-memory-system.md +4 -4
  158. package/docs/proposals/0007-context-management.md +252 -2
  159. package/docs/proposals/0008-checkpointing.md +109 -2
  160. package/docs/proposals/0011-custom-commands.md +2 -1
  161. package/docs/proposals/0021-skills-system.md +2 -1
  162. package/docs/proposals/0023-permission-enhancements.md +2 -2
  163. package/docs/proposals/0033-enterprise-deployment.md +1 -1
  164. package/docs/proposals/0041-configuration-system.md +17 -19
  165. package/docs/proposals/0042-prompt-optimization.md +17 -9
  166. package/docs/proposals/README.md +8 -7
  167. package/docs/providers.md +96 -11
  168. package/docs/session-compression.md +695 -0
  169. package/examples/agent-demo.ts +23 -1
  170. package/examples/basic.ts +3 -3
  171. package/package.json +2 -2
  172. package/scripts/migrate.ts +449 -0
  173. package/src/agent/agent.ts +365 -61
  174. package/src/agent/types.ts +24 -2
  175. package/src/checkpointing/checkpoint-manager.ts +48 -0
  176. package/src/cli/components/App.tsx +570 -42
  177. package/src/cli/components/CommandSuggestions.tsx +2 -0
  178. package/src/cli/components/Header.tsx +16 -1
  179. package/src/cli/components/Messages.tsx +21 -15
  180. package/src/cli/components/ModelSelector.tsx +62 -43
  181. package/src/cli/components/ProviderManager.tsx +278 -323
  182. package/src/cli/index.tsx +38 -18
  183. package/src/config/index.ts +5 -3
  184. package/src/config/levels.test.ts +22 -22
  185. package/src/config/levels.ts +22 -22
  186. package/src/config/loader.test.ts +14 -14
  187. package/src/config/manager.test.ts +19 -19
  188. package/src/config/merger.test.ts +23 -23
  189. package/src/config/merger.ts +1 -1
  190. package/src/config/providers-config.ts +23 -21
  191. package/src/config/test-utils.ts +6 -6
  192. package/src/config/types.ts +55 -20
  193. package/src/index.ts +3 -3
  194. package/src/input/history-manager.ts +289 -0
  195. package/src/input/index.ts +6 -0
  196. package/src/memory/memory-manager.test.ts +242 -24
  197. package/src/memory/memory-manager.ts +270 -141
  198. package/src/memory/test-utils.ts +4 -4
  199. package/src/memory/types.ts +28 -17
  200. package/src/permissions/persistence.ts +4 -4
  201. package/src/planning/plan-file.ts +2 -2
  202. package/src/prompts/index.test.ts +2 -1
  203. package/src/prompts/index.ts +15 -11
  204. package/src/providers/anthropic.ts +9 -0
  205. package/src/providers/{gemini.ts → google.ts} +75 -15
  206. package/src/providers/index.ts +85 -42
  207. package/src/providers/openai.ts +16 -0
  208. package/src/providers/registry.ts +116 -111
  209. package/src/providers/store.ts +130 -28
  210. package/src/providers/types.ts +65 -3
  211. package/src/providers/vertex-ai.ts +49 -13
  212. package/src/session/compression/engine.ts +406 -0
  213. package/src/session/compression/index.ts +18 -0
  214. package/src/session/compression/types.ts +102 -0
  215. package/src/session/manager.ts +326 -3
  216. package/src/session/types.ts +22 -1
  217. package/tests/input-history-manager.test.ts +335 -0
  218. package/tests/session-checkpoint-persistence.test.ts +198 -0
@@ -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' | 'google';
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,34 @@ 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
+
73
+ // Compression configuration
74
+ compression?: {
75
+ enabled?: boolean;
76
+ enablePruning?: boolean;
77
+ enableCompaction?: boolean;
78
+ pruneMinimum?: number;
79
+ pruneProtect?: number;
80
+ reservedOutputTokens?: number;
81
+ model?: string;
82
+ };
83
+
84
+ // Input history configuration
85
+ inputHistory?: {
86
+ enabled?: boolean;
87
+ maxSize?: number;
88
+ savePath?: string;
89
+ deduplicateConsecutive?: boolean;
90
+ };
91
+
92
+ // Input behavior configuration
93
+ input?: {
94
+ multilineEnabled?: boolean; // Default: true - Enable Shift+Enter for multi-line input
95
+ ctrlCClear?: boolean; // Default: true - Clear input on Ctrl+C if text present
96
+ };
97
+
65
98
  // Managed-only fields (cannot be overridden by lower levels)
66
99
  strictKnownMarketplaces?: unknown[];
67
100
 
@@ -94,7 +127,7 @@ export interface ConfigLevel {
94
127
  export interface ConfigSource {
95
128
  level: ConfigLevelType;
96
129
  path: string;
97
- namespace: 'gencode' | 'claude' | 'extra';
130
+ namespace: 'gen' | 'claude' | 'extra';
98
131
  settings: Settings;
99
132
  }
100
133
 
@@ -111,7 +144,7 @@ export interface MergedConfig {
111
144
  // Constants
112
145
  // =============================================================================
113
146
 
114
- export const GENCODE_CONFIG_DIRS_ENV = 'GENCODE_CONFIG_DIRS';
147
+ export const GEN_CONFIG_ENV = 'GEN_CONFIG';
115
148
 
116
149
  // File names
117
150
  export const SETTINGS_FILE_NAME = 'settings.json';
@@ -120,31 +153,31 @@ export const MANAGED_SETTINGS_FILE_NAME = 'managed-settings.json';
120
153
  export const PROVIDERS_FILE_NAME = 'providers.json';
121
154
 
122
155
  // Directory names
123
- export const GENCODE_DIR = '.gencode';
156
+ export const GEN_DIR = '.gen';
124
157
  export const CLAUDE_DIR = '.claude';
125
158
 
126
159
  // User directory paths
127
- export const USER_GENCODE_DIR = path.join(os.homedir(), GENCODE_DIR);
160
+ export const USER_GEN_DIR = path.join(os.homedir(), GEN_DIR);
128
161
  export const USER_CLAUDE_DIR = path.join(os.homedir(), CLAUDE_DIR);
129
162
 
130
163
  // Managed settings locations by platform
131
- export function getManagedPaths(): { gencode: string; claude: string } {
164
+ export function getManagedPaths(): { gen: string; claude: string } {
132
165
  const platform = os.platform();
133
166
 
134
167
  if (platform === 'darwin') {
135
168
  return {
136
- gencode: '/Library/Application Support/GenCode',
169
+ gen: '/Library/Application Support/GenCode',
137
170
  claude: '/Library/Application Support/ClaudeCode',
138
171
  };
139
172
  } else if (platform === 'win32') {
140
173
  return {
141
- gencode: 'C:\\Program Files\\GenCode',
174
+ gen: 'C:\\Program Files\\GenCode',
142
175
  claude: 'C:\\Program Files\\ClaudeCode',
143
176
  };
144
177
  } else {
145
178
  // Linux and other Unix-like systems
146
179
  return {
147
- gencode: '/etc/gencode',
180
+ gen: '/etc/gencode',
148
181
  claude: '/etc/claude-code',
149
182
  };
150
183
  }
@@ -159,10 +192,10 @@ export interface SettingsManagerOptions {
159
192
  }
160
193
 
161
194
  // 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';
195
+ export const DEFAULT_SETTINGS_DIR = '~/.gen';
196
+ export const PROJECT_SETTINGS_DIR = '.gen';
197
+ export const FALLBACK_SETTINGS_DIR = '~/.claude';
198
+ export const FALLBACK_PROJECT_DIR = '.claude';
166
199
 
167
200
  // =============================================================================
168
201
  // Provider Connection Types
@@ -172,7 +205,8 @@ export const FALLBACK_PROJECT_DIR = '.gencode';
172
205
  * Provider connection info
173
206
  */
174
207
  export interface ProviderConnection {
175
- method: 'api_key' | 'vertex' | 'oauth';
208
+ authMethod: AuthMethod; // Authentication method
209
+ method?: string; // Legacy: Connection name (e.g., "Direct API", "Google Vertex AI")
176
210
  connectedAt: string;
177
211
  }
178
212
 
@@ -187,6 +221,7 @@ export interface CachedModel {
187
221
 
188
222
  /**
189
223
  * Cached models for a provider
224
+ * Note: provider and authMethod are encoded in the key as "provider:authMethod"
190
225
  */
191
226
  export interface ProviderModels {
192
227
  cachedAt: string;
@@ -194,7 +229,7 @@ export interface ProviderModels {
194
229
  }
195
230
 
196
231
  /**
197
- * Providers config file structure (~/.gencode/providers.json)
232
+ * Providers config file structure (~/.gen/providers.json)
198
233
  */
199
234
  export interface ProvidersConfig {
200
235
  connections: Record<string, ProviderConnection>;
package/src/index.ts CHANGED
@@ -2,7 +2,7 @@
2
2
  * Recode - Multi-LLM Agent SDK
3
3
  *
4
4
  * A unified SDK for building AI agents with support for
5
- * OpenAI, Anthropic, and Google Gemini models.
5
+ * OpenAI, Anthropic, and Google models.
6
6
  */
7
7
 
8
8
  // Providers
@@ -24,13 +24,13 @@ export {
24
24
  type StopReason,
25
25
  type OpenAIConfig,
26
26
  type AnthropicConfig,
27
- type GeminiConfig,
27
+ type GoogleConfig,
28
28
  type ProviderConfig,
29
29
  type ProviderName,
30
30
  // Providers
31
31
  OpenAIProvider,
32
32
  AnthropicProvider,
33
- GeminiProvider,
33
+ GoogleProvider,
34
34
  // Factory
35
35
  createProvider,
36
36
  inferProvider,