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.
- package/RELEASE_NOTES_v0.4.0.md +140 -0
- package/dist/agent/agent.d.ts +26 -4
- package/dist/agent/agent.d.ts.map +1 -1
- package/dist/agent/agent.js +316 -57
- package/dist/agent/agent.js.map +1 -1
- package/dist/agent/types.d.ts +20 -2
- package/dist/agent/types.d.ts.map +1 -1
- package/dist/checkpointing/checkpoint-manager.d.ts +24 -0
- package/dist/checkpointing/checkpoint-manager.d.ts.map +1 -1
- package/dist/checkpointing/checkpoint-manager.js +28 -0
- package/dist/checkpointing/checkpoint-manager.js.map +1 -1
- package/dist/cli/components/App.d.ts +8 -0
- package/dist/cli/components/App.d.ts.map +1 -1
- package/dist/cli/components/App.js +493 -45
- package/dist/cli/components/App.js.map +1 -1
- package/dist/cli/components/CommandSuggestions.d.ts.map +1 -1
- package/dist/cli/components/CommandSuggestions.js +2 -0
- package/dist/cli/components/CommandSuggestions.js.map +1 -1
- package/dist/cli/components/Header.d.ts +6 -1
- package/dist/cli/components/Header.d.ts.map +1 -1
- package/dist/cli/components/Header.js +3 -3
- package/dist/cli/components/Header.js.map +1 -1
- package/dist/cli/components/Messages.d.ts.map +1 -1
- package/dist/cli/components/Messages.js +8 -10
- 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 +33 -15
- 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 +42 -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/index.d.ts +2 -2
- package/dist/index.js +2 -2
- package/dist/input/history-manager.d.ts +78 -0
- package/dist/input/history-manager.d.ts.map +1 -0
- package/dist/input/history-manager.js +224 -0
- package/dist/input/history-manager.js.map +1 -0
- package/dist/input/index.d.ts +6 -0
- package/dist/input/index.d.ts.map +1 -0
- package/dist/input/index.js +5 -0
- package/dist/input/index.js.map +1 -0
- 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 +13 -10
- 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 +40 -2
- package/dist/providers/gemini.js.map +1 -1
- package/dist/providers/google.d.ts +22 -0
- package/dist/providers/google.d.ts.map +1 -0
- package/dist/providers/google.js +297 -0
- package/dist/providers/google.js.map +1 -0
- package/dist/providers/index.d.ts +22 -12
- package/dist/providers/index.d.ts.map +1 -1
- package/dist/providers/index.js +56 -32
- 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 +13 -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 +52 -3
- 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/compression/engine.d.ts +109 -0
- package/dist/session/compression/engine.d.ts.map +1 -0
- package/dist/session/compression/engine.js +311 -0
- package/dist/session/compression/engine.js.map +1 -0
- package/dist/session/compression/index.d.ts +12 -0
- package/dist/session/compression/index.d.ts.map +1 -0
- package/dist/session/compression/index.js +11 -0
- package/dist/session/compression/index.js.map +1 -0
- package/dist/session/compression/types.d.ts +90 -0
- package/dist/session/compression/types.d.ts.map +1 -0
- package/dist/session/compression/types.js +17 -0
- package/dist/session/compression/types.js.map +1 -0
- package/dist/session/manager.d.ts +64 -3
- package/dist/session/manager.d.ts.map +1 -1
- package/dist/session/manager.js +254 -2
- package/dist/session/manager.js.map +1 -1
- package/dist/session/types.d.ts +16 -0
- package/dist/session/types.d.ts.map +1 -1
- package/dist/session/types.js +1 -1
- package/dist/session/types.js.map +1 -1
- package/docs/README.md +1 -0
- package/docs/config-system-comparison.md +50 -50
- package/docs/cost-tracking-comparison.md +2 -2
- package/docs/diagrams/compression-decision.mmd +30 -0
- package/docs/diagrams/compression-workflow.mmd +54 -0
- package/docs/diagrams/layer1-pruning.mmd +45 -0
- package/docs/diagrams/layer2-compaction.mmd +42 -0
- 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/0007-context-management.md +252 -2
- 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 +8 -7
- package/docs/providers.md +96 -11
- package/docs/session-compression.md +695 -0
- package/examples/agent-demo.ts +23 -1
- package/examples/basic.ts +3 -3
- package/package.json +2 -2
- package/scripts/migrate.ts +449 -0
- package/src/agent/agent.ts +365 -61
- package/src/agent/types.ts +24 -2
- package/src/checkpointing/checkpoint-manager.ts +48 -0
- package/src/cli/components/App.tsx +570 -42
- package/src/cli/components/CommandSuggestions.tsx +2 -0
- package/src/cli/components/Header.tsx +16 -1
- package/src/cli/components/Messages.tsx +21 -15
- package/src/cli/components/ModelSelector.tsx +62 -43
- package/src/cli/components/ProviderManager.tsx +278 -323
- package/src/cli/index.tsx +38 -18
- 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 +55 -20
- package/src/index.ts +3 -3
- package/src/input/history-manager.ts +289 -0
- package/src/input/index.ts +6 -0
- 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.test.ts +2 -1
- package/src/prompts/index.ts +15 -11
- package/src/providers/anthropic.ts +9 -0
- package/src/providers/{gemini.ts → google.ts} +75 -15
- package/src/providers/index.ts +85 -42
- package/src/providers/openai.ts +16 -0
- package/src/providers/registry.ts +116 -111
- package/src/providers/store.ts +130 -28
- package/src/providers/types.ts +65 -3
- package/src/providers/vertex-ai.ts +49 -13
- package/src/session/compression/engine.ts +406 -0
- package/src/session/compression/index.ts +18 -0
- package/src/session/compression/types.ts +102 -0
- package/src/session/manager.ts +326 -3
- package/src/session/types.ts +22 -1
- package/tests/input-history-manager.test.ts +335 -0
- 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: '~/.
|
|
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' | '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?:
|
|
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: '
|
|
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
|
|
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
|
|
156
|
+
export const GEN_DIR = '.gen';
|
|
124
157
|
export const CLAUDE_DIR = '.claude';
|
|
125
158
|
|
|
126
159
|
// User directory paths
|
|
127
|
-
export const
|
|
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(): {
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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 = '~/.
|
|
163
|
-
export const PROJECT_SETTINGS_DIR = '.
|
|
164
|
-
export const FALLBACK_SETTINGS_DIR = '~/.
|
|
165
|
-
export const FALLBACK_PROJECT_DIR = '.
|
|
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
|
-
|
|
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 (~/.
|
|
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
|
|
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
|
|
27
|
+
type GoogleConfig,
|
|
28
28
|
type ProviderConfig,
|
|
29
29
|
type ProviderName,
|
|
30
30
|
// Providers
|
|
31
31
|
OpenAIProvider,
|
|
32
32
|
AnthropicProvider,
|
|
33
|
-
|
|
33
|
+
GoogleProvider,
|
|
34
34
|
// Factory
|
|
35
35
|
createProvider,
|
|
36
36
|
inferProvider,
|