Skip to content

Commit 9d11b16

Browse files
authored
add model migration manager and new grok models (#124)
1 parent 2050f7e commit 9d11b16

File tree

1 file changed

+56
-3
lines changed

1 file changed

+56
-3
lines changed

src/utils/settings-manager.ts

Lines changed: 56 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,12 @@ import * as fs from "fs";
22
import * as path from "path";
33
import * as os from "os";
44

5+
/**
6+
* Current settings version - increment this when adding new models or changing settings structure
7+
* This triggers automatic migration for existing users
8+
*/
9+
const SETTINGS_VERSION = 2;
10+
511
/**
612
* User-level settings stored in ~/.grok/user-settings.json
713
* These are global settings that apply across all projects
@@ -11,6 +17,7 @@ export interface UserSettings {
1117
baseURL?: string; // API base URL
1218
defaultModel?: string; // User's preferred default model
1319
models?: string[]; // Available models list
20+
settingsVersion?: number; // Version for migration tracking
1421
}
1522

1623
/**
@@ -29,10 +36,22 @@ const DEFAULT_USER_SETTINGS: Partial<UserSettings> = {
2936
baseURL: "https://api.x.ai/v1",
3037
defaultModel: "grok-code-fast-1",
3138
models: [
32-
"grok-code-fast-1",
39+
// Grok 4.1 Fast models (2M context, latest - November 2025)
40+
"grok-4-1-fast-reasoning",
41+
"grok-4-1-fast-non-reasoning",
42+
// Grok 4 Fast models (2M context)
43+
"grok-4-fast-reasoning",
44+
"grok-4-fast-non-reasoning",
45+
// Grok 4 flagship (256K context)
46+
"grok-4",
3347
"grok-4-latest",
48+
// Grok Code (optimized for coding, 256K context)
49+
"grok-code-fast-1",
50+
// Grok 3 models (131K context)
51+
"grok-3",
3452
"grok-3-latest",
3553
"grok-3-fast",
54+
"grok-3-mini",
3655
"grok-3-mini-fast",
3756
],
3857
};
@@ -96,13 +115,22 @@ export class SettingsManager {
96115
try {
97116
if (!fs.existsSync(this.userSettingsPath)) {
98117
// Create default user settings if file doesn't exist
99-
this.saveUserSettings(DEFAULT_USER_SETTINGS);
100-
return { ...DEFAULT_USER_SETTINGS };
118+
const newSettings = { ...DEFAULT_USER_SETTINGS, settingsVersion: SETTINGS_VERSION };
119+
this.saveUserSettings(newSettings);
120+
return newSettings;
101121
}
102122

103123
const content = fs.readFileSync(this.userSettingsPath, "utf-8");
104124
const settings = JSON.parse(content);
105125

126+
// Check if migration is needed
127+
const currentVersion = settings.settingsVersion || 1;
128+
if (currentVersion < SETTINGS_VERSION) {
129+
const migratedSettings = this.migrateSettings(settings, currentVersion);
130+
this.saveUserSettings(migratedSettings);
131+
return migratedSettings;
132+
}
133+
106134
// Merge with defaults to ensure all required fields exist
107135
return { ...DEFAULT_USER_SETTINGS, ...settings };
108136
} catch (error) {
@@ -114,6 +142,31 @@ export class SettingsManager {
114142
}
115143
}
116144

145+
/**
146+
* Migrate settings from an older version to the current version
147+
*/
148+
private migrateSettings(settings: UserSettings, fromVersion: number): UserSettings {
149+
let migrated = { ...settings };
150+
151+
// Migration from version 1 to 2: Add new Grok 4.1 and Grok 4 Fast models
152+
if (fromVersion < 2) {
153+
const defaultModels = DEFAULT_USER_SETTINGS.models || [];
154+
const existingModels = new Set(migrated.models || []);
155+
156+
// Add any new models that don't exist in user's current list
157+
const newModels = defaultModels.filter(model => !existingModels.has(model));
158+
159+
// Prepend new models to the list (newest models first)
160+
migrated.models = [...newModels, ...(migrated.models || [])];
161+
}
162+
163+
// Add future migrations here:
164+
// if (fromVersion < 3) { ... }
165+
166+
migrated.settingsVersion = SETTINGS_VERSION;
167+
return migrated;
168+
}
169+
117170
/**
118171
* Save user settings to ~/.grok/user-settings.json
119172
*/

0 commit comments

Comments
 (0)