imhcode 3.0.1 → 3.0.2

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/bin/imhcode.js CHANGED
@@ -1099,132 +1099,8 @@ async function runInit() {
1099
1099
  console.log(` Created docs/start.md (write your project here)`);
1100
1100
  }
1101
1101
 
1102
- const globalConfigPath = path.join(GLOBAL_DIR, 'global.config.json');
1103
- let useGlobal = false;
1104
- let globalConfig = null;
1105
-
1106
- if (fs.existsSync(globalConfigPath)) {
1107
- try {
1108
- globalConfig = JSON.parse(fs.readFileSync(globalConfigPath, 'utf8'));
1109
- } catch {}
1110
- }
1111
-
1112
1102
  const isInteractive = process.stdout.isTTY;
1113
1103
 
1114
- if (globalConfig && isInteractive) {
1115
- console.log(`\nšŸ•Œ Found saved global default configuration:`);
1116
- console.log(` Primary Engine: ${globalConfig.primary_engine} (${globalConfig.default_model || 'auto'})`);
1117
- console.log(` Testing Route: ${globalConfig.model_routing?.testing?.model || 'auto'} via ${globalConfig.model_routing?.testing?.engine || 'auto'}`);
1118
- console.log(` Review Route: ${globalConfig.model_routing?.review?.model || 'auto'} via ${globalConfig.model_routing?.review?.engine || 'auto'}`);
1119
-
1120
- const ans = await askQuestion('\nUse default global engine and model routing? [Y/n] ');
1121
- if (ans.toLowerCase() !== 'n' && ans.toLowerCase() !== 'no') {
1122
- useGlobal = true;
1123
- }
1124
- } else if (globalConfig) {
1125
- useGlobal = true;
1126
- }
1127
-
1128
- if (useGlobal && globalConfig) {
1129
- console.log('\nāœ… Applying global default configuration...');
1130
-
1131
- const dirsToCreate = [
1132
- DOCS_DIR,
1133
- LOCAL_DIR_NAME,
1134
- path.join(LOCAL_DIR_NAME, 'commands'),
1135
- path.join(LOCAL_DIR_NAME, 'sessions'),
1136
- ];
1137
- for (const dir of dirsToCreate) {
1138
- const dirPath = path.join(cwd, dir);
1139
- if (!fs.existsSync(dirPath)) {
1140
- fs.mkdirSync(dirPath, { recursive: true });
1141
- console.log(` Created local directory: ${dir}`);
1142
- }
1143
- }
1144
-
1145
- const startMdPath = path.join(cwd, START_MD);
1146
- if (!fs.existsSync(startMdPath)) {
1147
- const startMdContent = [
1148
- '# šŸ•Œ IMH-Code — Project Start',
1149
- '',
1150
- '> **Imam Hussain Coding Harness Platform**',
1151
- '> Answer the scope questions below, write your description, then run `imhcode plan`.',
1152
- '',
1153
- '---',
1154
- '',
1155
- '## ⚔ Quick Scope Check',
1156
- '',
1157
- '**Do you need a backend API / server-side logic?**',
1158
- '> **Answer:** yes *(change to: yes / no / unsure)*',
1159
- '',
1160
- '**Do you need a mobile app (iOS/Android)?**',
1161
- '> **Answer:** no *(change to: yes / no)*',
1162
- '',
1163
- '---',
1164
- '',
1165
- '## šŸ“ Your Project Description',
1166
- '',
1167
- 'Write your complete project idea below. Be as detailed as possible.',
1168
- 'Include: what you\'re building, who it\'s for, key features, preferred stack,',
1169
- 'design preferences, integrations needed, business constraints.',
1170
- '',
1171
- '<!-- WRITE_PROMPT_HERE -->',
1172
- 'I want to build a SaaS dashboard for managing hotel room bookings with real-time availability,',
1173
- 'a Next.js frontend, Laravel API backend, and PostgreSQL database. Target users are hotel managers.',
1174
- 'Key features: room calendar, booking CRUD, guest management, reporting, email notifications.',
1175
- '<!-- END_PROMPT -->',
1176
- '',
1177
- '---',
1178
- '',
1179
- '## šŸš€ Next Step',
1180
- '',
1181
- 'After filling in the scope and your description, run:',
1182
- '',
1183
- '```bash',
1184
- 'imhcode plan',
1185
- '```',
1186
- '',
1187
- 'IMH-Code will invoke your configured **planning AI model** (e.g. Claude Opus, GPT-5.5)',
1188
- 'to generate `docs/brainstorming.md` with smart, project-specific questions and answers.',
1189
- ].join('\n');
1190
- fs.writeFileSync(startMdPath, startMdContent, 'utf8');
1191
- console.log(` Created docs/start.md (write your project here)`);
1192
- }
1193
-
1194
- const localGitignore = path.join(cwd, '.gitignore');
1195
- if (!fs.existsSync(localGitignore)) {
1196
- const gitignoreTemplate = path.join(packageRoot, '.gitignore.template');
1197
- if (fs.existsSync(gitignoreTemplate)) {
1198
- fs.copyFileSync(gitignoreTemplate, localGitignore);
1199
- console.log(` Created local .gitignore`);
1200
- }
1201
- }
1202
-
1203
- registerCliGlobally(imhcodeScriptPath);
1204
-
1205
- const configPath = path.join(cwd, CONFIG_FILE);
1206
- fs.writeFileSync(configPath, JSON.stringify(globalConfig, null, 2), 'utf8');
1207
- console.log(`\nšŸ’¾ Configuration saved: ${configPath}`);
1208
-
1209
- console.log(`\nāœ… ${PLATFORM_NAME} initialized successfully!`);
1210
- console.log(`─`.repeat(60));
1211
- console.log(`\nšŸ•Œ HOW TO BUILD WITH IMH-CODE:\n`);
1212
- console.log(` 1. Open docs/start.md → Answer scope questions + write your description`);
1213
- console.log(` 2. Run: imhcode plan`);
1214
- console.log(` → Your planning AI generates brainstorming.md`);
1215
- console.log(` 3. Open docs/brainstorming.md → Review/edit AI-recommended answers`);
1216
- console.log(` 4. Run: imhcode plan`);
1217
- console.log(` → Your planning AI generates sprint plans with correct agent routing`);
1218
- console.log(` 5. Run: imhcode execute 1 → Sprint 1 (frontend tasks)`);
1219
- console.log(` 6. Run: imhcode execute 2 → Sprint 2 (backend tasks)`);
1220
- console.log(` 7. Run: imhcode test → Final testing + security + SEO`);
1221
- console.log(` 8. Run: imhcode report → Generate PROJECT_REPORT.md`);
1222
- console.log(`\n Run "imhcode --help" for all commands.`);
1223
- console.log(`─`.repeat(60));
1224
- console.log('');
1225
- return;
1226
- }
1227
-
1228
1104
  // Create .gitignore
1229
1105
  const localGitignore = path.join(cwd, '.gitignore');
1230
1106
  if (!fs.existsSync(localGitignore)) {
@@ -1236,7 +1112,7 @@ async function runInit() {
1236
1112
  }
1237
1113
 
1238
1114
  registerCliGlobally(imhcodeScriptPath);
1239
- ensureCavemanAndGraphify(globalConfig?.skills_configured);
1115
+ ensureCavemanAndGraphify(false);
1240
1116
 
1241
1117
  // ── Interactive Engine & Model Setup ────────────────────────────────────────
1242
1118
  console.log('\nšŸ” Scanning for local coding assistant CLIs...');
@@ -1298,12 +1174,16 @@ async function runInit() {
1298
1174
  console.log(`āœ… Default model: ${defaultModel}`);
1299
1175
  }
1300
1176
 
1177
+ // Call setupModelRouting
1178
+ const modelRouting = await setupModelRouting(engines, foundEngines, isInteractive);
1179
+
1301
1180
  // Write config
1302
1181
  const configPath = path.join(cwd, CONFIG_FILE);
1303
1182
  const configData = {
1304
1183
  primary_engine: primaryEngine,
1305
1184
  default_model: defaultModel || undefined,
1306
1185
  testing_mode: 'fast',
1186
+ model_routing: modelRouting,
1307
1187
  available_engines: {},
1308
1188
  };
1309
1189
 
@@ -1317,36 +1197,198 @@ async function runInit() {
1317
1197
  fs.writeFileSync(configPath, JSON.stringify(configData, null, 2), 'utf8');
1318
1198
  console.log(`\nšŸ’¾ Configuration saved: ${configPath}`);
1319
1199
 
1320
- // Save to global config defaults as well
1321
- const globalConfigData = {
1322
- ...configData,
1323
- skills_configured: true,
1324
- };
1325
- try {
1326
- fs.writeFileSync(globalConfigPath, JSON.stringify(globalConfigData, null, 2), 'utf8');
1327
- console.log(`šŸ’¾ Global defaults saved: ${globalConfigPath}`);
1328
- } catch (e) {
1329
- console.warn(`āš ļø Could not save global default configuration: ${e.message}`);
1330
- }
1331
-
1332
1200
  // Print final guide
1333
1201
  console.log(`\nāœ… ${PLATFORM_NAME} initialized successfully!`);
1334
1202
  console.log(`─`.repeat(60));
1335
1203
  console.log(`\nšŸ•Œ HOW TO BUILD WITH IMH-CODE:\n`);
1336
1204
  console.log(` 1. Open docs/start.md → Answer scope questions + write your description`);
1337
1205
  console.log(` 2. Run: imhcode plan`);
1338
- console.log(` → Your planning AI generates brainstorming.md`);
1206
+ console.log(` → Your planning AI (${modelRouting?.planning?.model || 'configured model'}) generates brainstorming.md`);
1339
1207
  console.log(` 3. Open docs/brainstorming.md → Review/edit AI-recommended answers`);
1340
1208
  console.log(` 4. Run: imhcode plan`);
1341
1209
  console.log(` → Your planning AI generates sprint plans with correct agent routing`);
1342
- console.log(` 5. Run: imhcode execute 1 → Sprint 1 (frontend tasks)`);
1343
- console.log(` 6. Run: imhcode execute 2 → Sprint 2 (backend tasks)`);
1210
+ console.log(` 5. Run: imhcode execute 1 → Sprint 1 (frontend tasks → ${modelRouting?.frontend?.model || 'frontend model'})`);
1211
+ console.log(` 6. Run: imhcode execute 2 → Sprint 2 (backend tasks → ${modelRouting?.backend?.model || 'backend model'})`);
1344
1212
  console.log(` 7. Run: imhcode test → Final testing + security + SEO`);
1345
1213
  console.log(` 8. Run: imhcode report → Generate PROJECT_REPORT.md`);
1346
1214
  console.log(`\n Run "imhcode --help" for all commands.`);
1347
1215
  console.log(`─`.repeat(60));
1348
1216
  console.log('');
1349
1217
  }
1218
+
1219
+ // ─── Fix 4: Model Routing Setup Wizard (Ranked Scoring Algorithm) ─────────────
1220
+
1221
+ /**
1222
+ * Normalize a model/engine string for fuzzy matching:
1223
+ * lowercase, remove hyphens, dots, underscores, spaces.
1224
+ */
1225
+ function normalizeForMatch(s) {
1226
+ return (s || '').toLowerCase().replace(/[-._\s]/g, '');
1227
+ }
1228
+
1229
+ /**
1230
+ * Select the best model for a category from available engines using ranked scoring.
1231
+ * Returns { engine, model } or null if nothing found.
1232
+ */
1233
+ function selectBestModel(ranks, engines) {
1234
+ for (const [preferredEngine, modelSubstring] of ranks) {
1235
+ const engData = engines[preferredEngine];
1236
+ if (!engData?.path || !engData.models?.length) continue;
1237
+ const match = engData.models.find(m => normalizeForMatch(m).includes(normalizeForMatch(modelSubstring)));
1238
+ if (match) return { engine: preferredEngine, model: match };
1239
+ }
1240
+ return null;
1241
+ }
1242
+
1243
+ async function setupModelRouting(engines, foundEngines, isInteractive) {
1244
+ const categories = {
1245
+ frontend: {
1246
+ label: 'Frontend (UI/UX, components, animations)',
1247
+ note: 'Mimo v2.5 Pro → Antigravity OPUS 4.6 → Deepseek v4 Flash',
1248
+ ranks: [
1249
+ ['mimo', 'mimo-vl-v2.5-pro'],
1250
+ ['agy', 'Claude Opus 4.6'],
1251
+ ['opencode', 'deepseek-v4-flash']
1252
+ ]
1253
+ },
1254
+ backend: {
1255
+ label: 'Backend (APIs, database, business logic)',
1256
+ note: 'Deepseek v4 Pro → Antigravity OPUS 4.6 → Deepseek v4 Flash',
1257
+ ranks: [
1258
+ ['opencode', 'deepseek-v4-pro'],
1259
+ ['agy', 'Claude Opus 4.6'],
1260
+ ['opencode', 'deepseek-v4-flash']
1261
+ ]
1262
+ },
1263
+ planning: {
1264
+ label: 'Planning (brainstorming, sprint planning)',
1265
+ note: 'Claude OPUS 4.8 → Fugu → Deepseek v4 Flash',
1266
+ ranks: [
1267
+ ['agy', 'Claude Opus 4.8'],
1268
+ ['agy', 'Claude Opus 4.6'],
1269
+ ['codex-fugu', 'fugu-ultra'],
1270
+ ['codex-fugu', 'fugu'],
1271
+ ['opencode', 'deepseek-v4-flash']
1272
+ ]
1273
+ },
1274
+ testing: {
1275
+ label: 'Testing (QA, security audit, E2E)',
1276
+ note: 'Claude OPUS 4.8 → Fugu → Deepseek v4 Flash',
1277
+ ranks: [
1278
+ ['agy', 'Claude Opus 4.8'],
1279
+ ['agy', 'Claude Opus 4.6'],
1280
+ ['codex-fugu', 'fugu-ultra'],
1281
+ ['codex-fugu', 'fugu'],
1282
+ ['opencode', 'deepseek-v4-flash']
1283
+ ]
1284
+ },
1285
+ review: {
1286
+ label: 'Review (SEO, debugging, code review)',
1287
+ note: 'Claude OPUS 4.8 → Fugu → Deepseek v4 Flash',
1288
+ ranks: [
1289
+ ['agy', 'Claude Opus 4.8'],
1290
+ ['agy', 'Claude Opus 4.6'],
1291
+ ['codex-fugu', 'fugu-ultra'],
1292
+ ['codex-fugu', 'fugu'],
1293
+ ['opencode', 'deepseek-v4-flash']
1294
+ ]
1295
+ },
1296
+ fast: {
1297
+ label: 'Fast (boilerplate, config, simple tasks)',
1298
+ note: 'Deepseek v4 Flash',
1299
+ ranks: [
1300
+ ['opencode', 'deepseek-v4-flash']
1301
+ ]
1302
+ }
1303
+ };
1304
+
1305
+ const recommended = {};
1306
+ for (const [cat, cfg] of Object.entries(categories)) {
1307
+ const best = selectBestModel(cfg.ranks, engines);
1308
+ if (best) {
1309
+ recommended[cat] = best;
1310
+ } else if (foundEngines.length > 0) {
1311
+ // Fallback: primary engine first model
1312
+ const fe = foundEngines[0];
1313
+ recommended[cat] = { engine: fe, model: engines[fe].models[0] || 'default' };
1314
+ }
1315
+ }
1316
+
1317
+ // Show recommended routing table
1318
+ console.log('\n' + '─'.repeat(70));
1319
+ console.log('🧠 Recommended Model Routing (ranked by priority for each category):\n');
1320
+ console.log(' Category │ Engine │ Model');
1321
+ console.log(' ──────────────┼───────────────┼───────────────────────────────────────');
1322
+ for (const [cat, rec] of Object.entries(recommended)) {
1323
+ const catLabel = cat.padEnd(12);
1324
+ const eng = (rec.engine || '?').padEnd(13);
1325
+ const mdl = rec.model || '?';
1326
+ console.log(` ${catLabel} │ ${eng} │ ${mdl}`);
1327
+ }
1328
+ console.log(' ' + '─'.repeat(67));
1329
+ console.log(`\n Routings:\n` +
1330
+ ` - frontend: Mimo v2.5 Pro → Antigravity OPUS 4.6 → Deepseek v4 Flash\n` +
1331
+ ` - backend: Deepseek v4 Pro → Antigravity OPUS 4.6 → Deepseek v4 Flash\n` +
1332
+ ` - planning: Claude OPUS 4.8 → Fugu → Deepseek v4 Flash\n` +
1333
+ ` - testing: Claude OPUS 4.8 → Fugu → Deepseek v4 Flash\n` +
1334
+ ` - review: Claude OPUS 4.8 → Fugu → Deepseek v4 Flash\n` +
1335
+ ` - fast: Deepseek v4 Flash`);
1336
+
1337
+ const routing = {};
1338
+
1339
+ if (isInteractive) {
1340
+ const answer = await askQuestion('\nAccept recommended routing? [Y/n] ');
1341
+ if (answer.toLowerCase() === 'n' || answer.toLowerCase() === 'no') {
1342
+ // Let user customize each category
1343
+ for (const [cat, cfg] of Object.entries(categories)) {
1344
+ console.log(`\n Configure model for [${cat}] — ${cfg.label}`);
1345
+ console.log(` Priority: ${cfg.note}`);
1346
+
1347
+ const allModels = [];
1348
+ for (const eng of foundEngines) {
1349
+ for (const m of engines[eng].models) {
1350
+ allModels.push({ engine: eng, model: m });
1351
+ }
1352
+ }
1353
+
1354
+ if (allModels.length === 0) {
1355
+ routing[cat] = recommended[cat];
1356
+ continue;
1357
+ }
1358
+
1359
+ allModels.forEach((item, i) => {
1360
+ const rec = recommended[cat];
1361
+ const isRec = rec && rec.engine === item.engine && rec.model === item.model;
1362
+ console.log(` [${i + 1}] ${item.model} (${item.engine})${isRec ? ' ← Recommended āœ…' : ''}`);
1363
+ });
1364
+
1365
+ let selectedIdx = allModels.findIndex(m => {
1366
+ const rec = recommended[cat];
1367
+ return rec && m.engine === rec.engine && m.model === rec.model;
1368
+ });
1369
+ if (selectedIdx < 0) selectedIdx = 0;
1370
+
1371
+ while (true) {
1372
+ const ans = await askQuestion(` Select model for ${cat} [1-${allModels.length}] (default: ${selectedIdx + 1}): `);
1373
+ if (ans === '') { routing[cat] = allModels[selectedIdx]; break; }
1374
+ const p = parseInt(ans, 10);
1375
+ if (p >= 1 && p <= allModels.length) { routing[cat] = allModels[p - 1]; break; }
1376
+ console.log(` āŒ Invalid. Enter 1–${allModels.length}.`);
1377
+ }
1378
+ console.log(` āœ… ${cat}: ${routing[cat].model} (${routing[cat].engine})`);
1379
+ }
1380
+ } else {
1381
+ Object.assign(routing, recommended);
1382
+ console.log('\nāœ… Recommended routing accepted.');
1383
+ }
1384
+ } else {
1385
+ Object.assign(routing, recommended);
1386
+ console.log('\nāœ… Recommended routing applied automatically.');
1387
+ }
1388
+
1389
+ return routing;
1390
+ }
1391
+
1350
1392
  // ─── Fix 0: LLM-Powered Planning ─────────────────────────────────────────────
1351
1393
 
1352
1394
  /**
@@ -3440,14 +3482,44 @@ async function runTuiCommand() {
3440
3482
  const lines = [];
3441
3483
  const rlInput = readline.createInterface({ input: process.stdin, output: process.stdout });
3442
3484
 
3443
- while (true) {
3444
- const line = await new Promise(res => rlInput.question('> ', res));
3445
- const trimmed = line.trim();
3446
- if (trimmed === '/submit' || trimmed === '.') {
3447
- break;
3448
- }
3449
- lines.push(line);
3450
- }
3485
+ let pasteTimeout = null;
3486
+ let isDone = false;
3487
+
3488
+ await new Promise(resolve => {
3489
+ rlInput.on('line', (line) => {
3490
+ if (isDone) return;
3491
+
3492
+ const trimmed = line.trim();
3493
+ if (trimmed === '/submit' || trimmed === '.') {
3494
+ if (pasteTimeout) clearTimeout(pasteTimeout);
3495
+ isDone = true;
3496
+ resolve();
3497
+ return;
3498
+ }
3499
+
3500
+ if (trimmed === '') {
3501
+ if (pasteTimeout) clearTimeout(pasteTimeout);
3502
+ pasteTimeout = setTimeout(() => {
3503
+ isDone = true;
3504
+ resolve();
3505
+ }, 100);
3506
+ } else {
3507
+ if (pasteTimeout) {
3508
+ clearTimeout(pasteTimeout);
3509
+ pasteTimeout = null;
3510
+ }
3511
+ }
3512
+
3513
+ lines.push(line);
3514
+ });
3515
+
3516
+ rlInput.on('close', () => {
3517
+ if (!isDone) {
3518
+ isDone = true;
3519
+ resolve();
3520
+ }
3521
+ });
3522
+ });
3451
3523
 
3452
3524
  const desc = lines.join('\n');
3453
3525
  rlInput.close();
@@ -4,7 +4,7 @@
4
4
  *
5
5
  * Import from here in CLI code and external integrations.
6
6
  */
7
- export type { AgentManifest, AgentPermissions, AgentMemory, AgentOutput, LoadedAgent, LoadedSkill, LoadedMemoryFile, ExecutionOptions, ExecutionContext, ExecutionResult, EngineAdapter, } from "./types";
7
+ export type { AgentManifest, AgentPermissions, AgentMemory, AgentOutput, LoadedAgent, LoadedSkill, LoadedMemoryFile, ExecutionResult, EngineAdapter, FailoverTarget, } from "./types";
8
8
  export { AgentManifestSchema, validateManifest } from "./schema";
9
9
  export { loadYaml, loadMarkdown, resolveAgentPath, loadAgent } from "./loader";
10
10
  export { discoverAgents, loadRegistry, getAgent, resolveAgentIdAlias } from "./registry";
@@ -16,7 +16,7 @@ export { scanProjectContext, buildModificationPrompt, detectBestAgent } from "./
16
16
  export { runModification } from "./modification-engine";
17
17
  export { scanProject } from "./project-scanner";
18
18
  export { importProject } from "./import-engine";
19
- import type { LoadedAgent, ExecutionOptions, ExecutionResult } from "./types";
19
+ import type { LoadedAgent, ExecutionOptions, ExecutionResult, FailoverTarget } from "./types";
20
20
  /**
21
21
  * Maps agent IDs to task categories for intelligent model routing.
22
22
  * Categories determine which model is used from imhcode.config.json model_routing.
@@ -39,7 +39,7 @@ export declare function runAgent(agent: LoadedAgent, task: string, options?: Exe
39
39
  /**
40
40
  * Builds the ordered array of fallback engines to attempt during execution.
41
41
  */
42
- export declare function getFailoverQueue(agent: LoadedAgent, config: any, initialEngine: string, category?: string): string[];
42
+ export declare function getFailoverQueue(agent: LoadedAgent, config: any, initialEngine: string, initialModel: string, category: string): FailoverTarget[];
43
43
  /**
44
44
  * Resolves the model to use for a failover engine.
45
45
  */
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/orchestrator/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,YAAY,EACV,aAAa,EACb,gBAAgB,EAChB,WAAW,EACX,WAAW,EACX,WAAW,EACX,WAAW,EACX,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,eAAe,EACf,aAAa,GACd,MAAM,SAAS,CAAC;AAGjB,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAGjE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAG/E,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,QAAQ,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AACzF,YAAY,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAGrD,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAGxC,OAAO,EACL,aAAa,EACb,oBAAoB,EACpB,kBAAkB,EAClB,eAAe,EACf,mBAAmB,EACnB,aAAa,EACb,kBAAkB,EAClB,kBAAkB,EAClB,UAAU,GACX,MAAM,YAAY,CAAC;AAGpB,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAG3D,OAAO,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACjG,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAGxD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAShD,OAAO,KAAK,EAAE,WAAW,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAI9E;;;GAGG;AACH,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CA6BrD,CAAC;AAiGF;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAEzE;AAID;;;;;;;GAOG;AACH,wBAAsB,QAAQ,CAC5B,KAAK,EAAE,WAAW,EAClB,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,gBAAqB,EAC9B,kBAAkB,CAAC,EAAE,MAAM,GAC1B,OAAO,CAAC,eAAe,CAAC,CAkJ1B;AA2DD;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,WAAW,EAClB,MAAM,EAAE,GAAG,EACX,aAAa,EAAE,MAAM,EACrB,QAAQ,CAAC,EAAE,MAAM,GAChB,MAAM,EAAE,CAgDV;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,GAAG,EACX,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,WAAW,GACjB,MAAM,CAkBR"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/orchestrator/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,YAAY,EACV,aAAa,EACb,gBAAgB,EAChB,WAAW,EACX,WAAW,EACX,WAAW,EACX,WAAW,EACX,gBAAgB,EAChB,eAAe,EACf,aAAa,EACb,cAAc,GACf,MAAM,SAAS,CAAC;AAGjB,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAGjE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAG/E,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,QAAQ,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AACzF,YAAY,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAGrD,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAGxC,OAAO,EACL,aAAa,EACb,oBAAoB,EACpB,kBAAkB,EAClB,eAAe,EACf,mBAAmB,EACnB,aAAa,EACb,kBAAkB,EAClB,kBAAkB,EAClB,UAAU,GACX,MAAM,YAAY,CAAC;AAGpB,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAG3D,OAAO,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACjG,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAGxD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAShD,OAAO,KAAK,EAAE,WAAW,EAAE,gBAAgB,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAmC9F;;;GAGG;AACH,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CA6BrD,CAAC;AAuHF;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAEzE;AAID;;;;;;;GAOG;AACH,wBAAsB,QAAQ,CAC5B,KAAK,EAAE,WAAW,EAClB,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,gBAAqB,EAC9B,kBAAkB,CAAC,EAAE,MAAM,GAC1B,OAAO,CAAC,eAAe,CAAC,CA+I1B;AA2DD;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,WAAW,EAClB,MAAM,EAAE,GAAG,EACX,aAAa,EAAE,MAAM,EACrB,YAAY,EAAE,MAAM,EACpB,QAAQ,EAAE,MAAM,GACf,cAAc,EAAE,CA0FlB;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,GAAG,EACX,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,WAAW,GACjB,MAAM,CAkBR"}
@@ -96,6 +96,36 @@ const path = __importStar(require("path"));
96
96
  const builder_2 = require("./builder");
97
97
  const executor_2 = require("./executor");
98
98
  const session_2 = require("./session");
99
+ /**
100
+ * Model routing: recommended models per category and engine.
101
+ * Tailored to custom priorities: Mimo/Deepseek, Claude Opus, and Fugu.
102
+ */
103
+ const DEFAULT_MODEL_PREFERENCES = {
104
+ frontend: {
105
+ engines: ["mimo", "agy", "opencode"],
106
+ models: ["mimo-vl-v2.5-pro", "Claude Opus 4.6", "deepseek-v4-flash"],
107
+ },
108
+ backend: {
109
+ engines: ["opencode", "agy", "opencode"],
110
+ models: ["deepseek-v4-pro", "Claude Opus 4.6", "deepseek-v4-flash"],
111
+ },
112
+ planning: {
113
+ engines: ["agy", "codex-fugu", "opencode"],
114
+ models: ["Claude Opus 4.8", "fugu-ultra", "deepseek-v4-flash"],
115
+ },
116
+ testing: {
117
+ engines: ["agy", "codex-fugu", "opencode"],
118
+ models: ["Claude Opus 4.8", "fugu-ultra", "deepseek-v4-flash"],
119
+ },
120
+ review: {
121
+ engines: ["agy", "codex-fugu", "opencode"],
122
+ models: ["Claude Opus 4.8", "fugu-ultra", "deepseek-v4-flash"],
123
+ },
124
+ fast: {
125
+ engines: ["opencode"],
126
+ models: ["deepseek-v4-flash"],
127
+ },
128
+ };
99
129
  // ─── Agent Category Map ───────────────────────────────────────────────────────
100
130
  /**
101
131
  * Maps agent IDs to task categories for intelligent model routing.
@@ -203,7 +233,25 @@ function resolveModelForTask(agent, task, cwd, engine) {
203
233
  model: routing.model || agent.manifest.default_model,
204
234
  };
205
235
  }
206
- // 2. Fallback: use primary engine + default model
236
+ // 2. Find best available model from installed engines using priority ranks
237
+ const prefs = DEFAULT_MODEL_PREFERENCES[effectiveCategory];
238
+ if (prefs && config?.available_engines) {
239
+ for (let i = 0; i < prefs.engines.length; i++) {
240
+ const preferredEngine = prefs.engines[i];
241
+ const preferredModel = prefs.models[i];
242
+ const engineData = config.available_engines[preferredEngine];
243
+ if (engineData?.models?.length > 0) {
244
+ // Check if preferred model is available (case-insensitive fuzzy match)
245
+ const exactMatch = engineData.models.find((m) => m.toLowerCase().replace(/[-._\s]/g, "").includes(preferredModel.toLowerCase().replace(/[-._\s]/g, "")));
246
+ if (exactMatch) {
247
+ return { engine: preferredEngine, model: exactMatch };
248
+ }
249
+ // Use first available model if it's the only one
250
+ return { engine: preferredEngine, model: engineData.models[0] };
251
+ }
252
+ }
253
+ }
254
+ // 3. Fallback: use primary engine + default model
207
255
  const primaryEngine = config?.primary_engine || engine;
208
256
  const defaultModel = config?.default_model || agent.manifest.default_model;
209
257
  return { engine: primaryEngine, model: defaultModel };
@@ -264,7 +312,7 @@ async function runAgent(agent, task, options = {}, acceptanceCriteria) {
264
312
  const complexity = detectTaskComplexity(task);
265
313
  const effectiveCategory = complexity === "light" ? "fast" : category;
266
314
  // 4. Build the failover queue of engines to try
267
- const failoverQueue = getFailoverQueue(agent, config, resolvedEngine, effectiveCategory);
315
+ const failoverQueue = getFailoverQueue(agent, config, resolvedEngine, resolvedModel, effectiveCategory);
268
316
  let currentEngineIndex = 0;
269
317
  let currentEngine = resolvedEngine;
270
318
  let currentModel = resolvedModel;
@@ -273,13 +321,9 @@ async function runAgent(agent, task, options = {}, acceptanceCriteria) {
273
321
  let limitExhausted = false;
274
322
  // 5. Failover Execution Loop
275
323
  while (currentEngineIndex < failoverQueue.length) {
276
- currentEngine = failoverQueue[currentEngineIndex];
277
- if (currentEngineIndex > 0) {
278
- currentModel = getModelForEngine(config, currentEngine, effectiveCategory, agent);
279
- }
280
- else {
281
- currentModel = resolvedModel;
282
- }
324
+ const target = failoverQueue[currentEngineIndex];
325
+ currentEngine = target.engine;
326
+ currentModel = target.model;
283
327
  if (dryRun) {
284
328
  // Dry-run mode: execute only the first engine without hitting a real LLM
285
329
  const adapter = (0, executor_2.getAdapter)(false, currentEngine);
@@ -321,7 +365,7 @@ async function runAgent(agent, task, options = {}, acceptanceCriteria) {
321
365
  }
322
366
  else {
323
367
  limitExhausted = true;
324
- errors.push(`All available engines (${failoverQueue.join(", ")}) hit limits and were exhausted.`);
368
+ errors.push(`All available engines (${failoverQueue.map(t => `${t.engine} (${t.model})`).join(", ")}) hit limits and were exhausted.`);
325
369
  cumulativeOutput += "\n\n[Execution aborted: all available engines hit limits]";
326
370
  }
327
371
  }
@@ -414,44 +458,82 @@ function getInstalledEngines(config) {
414
458
  /**
415
459
  * Builds the ordered array of fallback engines to attempt during execution.
416
460
  */
417
- function getFailoverQueue(agent, config, initialEngine, category) {
461
+ function getFailoverQueue(agent, config, initialEngine, initialModel, category) {
418
462
  const installed = getInstalledEngines(config);
419
- const queue = [initialEngine];
420
- // 1. Add preferred engines from manifest
463
+ const queue = [{ engine: initialEngine, model: initialModel }];
464
+ const addToQueue = (engine, model) => {
465
+ const cleanEng = engine.toLowerCase().trim();
466
+ if (!installed.includes(cleanEng))
467
+ return;
468
+ // De-duplicate same engine + model pairs
469
+ const exists = queue.some(t => t.engine === cleanEng && t.model === model);
470
+ if (!exists) {
471
+ queue.push({ engine: cleanEng, model });
472
+ }
473
+ };
474
+ // 1. Add preferred engines/models from category DEFAULT_MODEL_PREFERENCES
475
+ const prefs = DEFAULT_MODEL_PREFERENCES[category];
476
+ if (prefs) {
477
+ for (let i = 0; i < prefs.engines.length; i++) {
478
+ const targetEng = prefs.engines[i];
479
+ const preferredMdl = prefs.models[i];
480
+ // Find the actual model name in the installed engine's models list
481
+ const engineData = config?.available_engines?.[targetEng];
482
+ if (engineData?.models?.length > 0) {
483
+ const exactMatch = engineData.models.find((m) => m.toLowerCase().replace(/[-._\s]/g, "").includes(preferredMdl.toLowerCase().replace(/[-._\s]/g, "")));
484
+ if (exactMatch) {
485
+ addToQueue(targetEng, exactMatch);
486
+ }
487
+ else {
488
+ addToQueue(targetEng, engineData.models[0]);
489
+ }
490
+ }
491
+ }
492
+ }
493
+ // 2. Add preferred engines from manifest
421
494
  if (agent.manifest.preferred_engines) {
422
495
  for (const eng of agent.manifest.preferred_engines) {
423
- const clean = eng.toLowerCase().trim();
424
- if (!queue.includes(clean) && installed.includes(clean)) {
425
- queue.push(clean);
426
- }
496
+ const engineData = config?.available_engines?.[eng];
497
+ const model = engineData?.models?.[0] || agent.manifest.default_model;
498
+ addToQueue(eng, model);
427
499
  }
428
500
  }
429
- // 2. Add fallback engines from manifest
501
+ // 3. Add fallback engines from manifest
430
502
  if (agent.manifest.fallback_engines) {
431
503
  for (const eng of agent.manifest.fallback_engines) {
432
- const clean = eng.toLowerCase().trim();
433
- if (!queue.includes(clean) && installed.includes(clean)) {
434
- queue.push(clean);
435
- }
504
+ const engineData = config?.available_engines?.[eng];
505
+ const model = engineData?.models?.[0] || agent.manifest.default_model;
506
+ addToQueue(eng, model);
436
507
  }
437
508
  }
438
- // 3. Add any other installed engines as a last resort
509
+ // 4. Add any other installed engines as a last resort
439
510
  for (const eng of installed) {
440
- if (!queue.includes(eng)) {
441
- queue.push(eng);
442
- }
511
+ const engineData = config?.available_engines?.[eng];
512
+ const model = engineData?.models?.[0] || "default";
513
+ addToQueue(eng, model);
443
514
  }
444
- // 4. Expand agy to include agy2, agy3, agy4... etc. right after agy
515
+ // 5. Expand agy to include agy2, agy3, agy4... etc. right after agy
445
516
  const expandedQueue = [];
446
- for (const eng of queue) {
447
- if (!expandedQueue.includes(eng)) {
448
- expandedQueue.push(eng);
517
+ for (const target of queue) {
518
+ if (!expandedQueue.some(t => t.engine === target.engine && t.model === target.model)) {
519
+ expandedQueue.push(target);
449
520
  }
450
- if (eng === "agy" || eng === "antigravity") {
521
+ if (target.engine === "agy" || target.engine === "antigravity") {
451
522
  for (let i = 2; i <= 10; i++) {
452
523
  const key = `agy${i}`;
453
- if (installed.includes(key) && !expandedQueue.includes(key)) {
454
- expandedQueue.push(key);
524
+ if (installed.includes(key)) {
525
+ const agy2Data = config?.available_engines?.[key];
526
+ let model = target.model;
527
+ if (agy2Data?.models?.length > 0) {
528
+ const match = agy2Data.models.find((m) => m.toLowerCase().replace(/[-._\s]/g, "").includes(target.model.toLowerCase().replace(/[-._\s]/g, "")));
529
+ if (match)
530
+ model = match;
531
+ else
532
+ model = agy2Data.models[0];
533
+ }
534
+ if (!expandedQueue.some(t => t.engine === key && t.model === model)) {
535
+ expandedQueue.push({ engine: key, model });
536
+ }
455
537
  }
456
538
  }
457
539
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/orchestrator/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/orchestrator/index.ts"],"names":[],"mappings":"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"}
@@ -88,4 +88,8 @@ export interface EngineAdapter {
88
88
  readonly name: string;
89
89
  run(prompt: string, model: string): Promise<string>;
90
90
  }
91
+ export interface FailoverTarget {
92
+ engine: string;
93
+ model: string;
94
+ }
91
95
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/orchestrator/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/orchestrator/types.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "imhcode",
3
- "version": "3.0.1",
3
+ "version": "3.0.2",
4
4
  "description": "IMH-Code — Imam Hussain Coding Harness Platform. A fast-first multi-agent AI coding framework with intelligent model routing. 19 generic role-based agents (planner, nextjs-executor, laravel-executor, etc.), configurable testing strategy, and 7 token-saving optimizations for rapid MVP development.",
5
5
  "main": "index.js",
6
6
  "bin": {
@@ -14,10 +14,9 @@ export type {
14
14
  LoadedAgent,
15
15
  LoadedSkill,
16
16
  LoadedMemoryFile,
17
- ExecutionOptions,
18
- ExecutionContext,
19
17
  ExecutionResult,
20
18
  EngineAdapter,
19
+ FailoverTarget,
21
20
  } from "./types";
22
21
 
23
22
  // Schema & validation
@@ -64,7 +63,38 @@ import * as path from "path";
64
63
  import { buildPrompt } from "./builder";
65
64
  import { getAdapter } from "./executor";
66
65
  import { saveSession } from "./session";
67
- import type { LoadedAgent, ExecutionOptions, ExecutionResult } from "./types";
66
+ import type { LoadedAgent, ExecutionOptions, ExecutionResult, FailoverTarget } from "./types";
67
+
68
+ /**
69
+ * Model routing: recommended models per category and engine.
70
+ * Tailored to custom priorities: Mimo/Deepseek, Claude Opus, and Fugu.
71
+ */
72
+ const DEFAULT_MODEL_PREFERENCES: Record<string, { engines: string[]; models: string[] }> = {
73
+ frontend: {
74
+ engines: ["mimo", "agy", "opencode"],
75
+ models: ["mimo-vl-v2.5-pro", "Claude Opus 4.6", "deepseek-v4-flash"],
76
+ },
77
+ backend: {
78
+ engines: ["opencode", "agy", "opencode"],
79
+ models: ["deepseek-v4-pro", "Claude Opus 4.6", "deepseek-v4-flash"],
80
+ },
81
+ planning: {
82
+ engines: ["agy", "codex-fugu", "opencode"],
83
+ models: ["Claude Opus 4.8", "fugu-ultra", "deepseek-v4-flash"],
84
+ },
85
+ testing: {
86
+ engines: ["agy", "codex-fugu", "opencode"],
87
+ models: ["Claude Opus 4.8", "fugu-ultra", "deepseek-v4-flash"],
88
+ },
89
+ review: {
90
+ engines: ["agy", "codex-fugu", "opencode"],
91
+ models: ["Claude Opus 4.8", "fugu-ultra", "deepseek-v4-flash"],
92
+ },
93
+ fast: {
94
+ engines: ["opencode"],
95
+ models: ["deepseek-v4-flash"],
96
+ },
97
+ };
68
98
 
69
99
  // ─── Agent Category Map ───────────────────────────────────────────────────────
70
100
 
@@ -190,7 +220,29 @@ function resolveModelForTask(
190
220
  };
191
221
  }
192
222
 
193
- // 2. Fallback: use primary engine + default model
223
+ // 2. Find best available model from installed engines using priority ranks
224
+ const prefs = DEFAULT_MODEL_PREFERENCES[effectiveCategory];
225
+ if (prefs && config?.available_engines) {
226
+ for (let i = 0; i < prefs.engines.length; i++) {
227
+ const preferredEngine = prefs.engines[i];
228
+ const preferredModel = prefs.models[i];
229
+ const engineData = config.available_engines[preferredEngine];
230
+
231
+ if (engineData?.models?.length > 0) {
232
+ // Check if preferred model is available (case-insensitive fuzzy match)
233
+ const exactMatch = engineData.models.find((m: string) =>
234
+ m.toLowerCase().replace(/[-._\s]/g, "").includes(preferredModel.toLowerCase().replace(/[-._\s]/g, ""))
235
+ );
236
+ if (exactMatch) {
237
+ return { engine: preferredEngine, model: exactMatch };
238
+ }
239
+ // Use first available model if it's the only one
240
+ return { engine: preferredEngine, model: engineData.models[0] };
241
+ }
242
+ }
243
+ }
244
+
245
+ // 3. Fallback: use primary engine + default model
194
246
  const primaryEngine = config?.primary_engine || engine;
195
247
  const defaultModel = config?.default_model || agent.manifest.default_model;
196
248
  return { engine: primaryEngine, model: defaultModel };
@@ -261,7 +313,7 @@ export async function runAgent(
261
313
  const effectiveCategory = complexity === "light" ? "fast" : category;
262
314
 
263
315
  // 4. Build the failover queue of engines to try
264
- const failoverQueue = getFailoverQueue(agent, config, resolvedEngine, effectiveCategory);
316
+ const failoverQueue = getFailoverQueue(agent, config, resolvedEngine, resolvedModel, effectiveCategory);
265
317
 
266
318
  let currentEngineIndex = 0;
267
319
  let currentEngine = resolvedEngine;
@@ -272,12 +324,9 @@ export async function runAgent(
272
324
 
273
325
  // 5. Failover Execution Loop
274
326
  while (currentEngineIndex < failoverQueue.length) {
275
- currentEngine = failoverQueue[currentEngineIndex];
276
- if (currentEngineIndex > 0) {
277
- currentModel = getModelForEngine(config, currentEngine, effectiveCategory, agent);
278
- } else {
279
- currentModel = resolvedModel;
280
- }
327
+ const target = failoverQueue[currentEngineIndex];
328
+ currentEngine = target.engine;
329
+ currentModel = target.model;
281
330
 
282
331
  if (dryRun) {
283
332
  // Dry-run mode: execute only the first engine without hitting a real LLM
@@ -326,7 +375,7 @@ export async function runAgent(
326
375
  currentPrompt = finalPrompt + "\n" + failoverResumeContext;
327
376
  } else {
328
377
  limitExhausted = true;
329
- errors.push(`All available engines (${failoverQueue.join(", ")}) hit limits and were exhausted.`);
378
+ errors.push(`All available engines (${failoverQueue.map(t => `${t.engine} (${t.model})`).join(", ")}) hit limits and were exhausted.`);
330
379
  cumulativeOutput += "\n\n[Execution aborted: all available engines hit limits]";
331
380
  }
332
381
  } else {
@@ -433,49 +482,92 @@ export function getFailoverQueue(
433
482
  agent: LoadedAgent,
434
483
  config: any,
435
484
  initialEngine: string,
436
- category?: string
437
- ): string[] {
485
+ initialModel: string,
486
+ category: string
487
+ ): FailoverTarget[] {
438
488
  const installed = getInstalledEngines(config);
439
- const queue = [initialEngine];
489
+ const queue: FailoverTarget[] = [{ engine: initialEngine, model: initialModel }];
490
+
491
+ const addToQueue = (engine: string, model: string) => {
492
+ const cleanEng = engine.toLowerCase().trim();
493
+ if (!installed.includes(cleanEng)) return;
494
+
495
+ // De-duplicate same engine + model pairs
496
+ const exists = queue.some(t => t.engine === cleanEng && t.model === model);
497
+ if (!exists) {
498
+ queue.push({ engine: cleanEng, model });
499
+ }
500
+ };
440
501
 
441
- // 1. Add preferred engines from manifest
502
+ // 1. Add preferred engines/models from category DEFAULT_MODEL_PREFERENCES
503
+ const prefs = DEFAULT_MODEL_PREFERENCES[category];
504
+ if (prefs) {
505
+ for (let i = 0; i < prefs.engines.length; i++) {
506
+ const targetEng = prefs.engines[i];
507
+ const preferredMdl = prefs.models[i];
508
+
509
+ // Find the actual model name in the installed engine's models list
510
+ const engineData = config?.available_engines?.[targetEng];
511
+ if (engineData?.models?.length > 0) {
512
+ const exactMatch = engineData.models.find((m: string) =>
513
+ m.toLowerCase().replace(/[-._\s]/g, "").includes(preferredMdl.toLowerCase().replace(/[-._\s]/g, ""))
514
+ );
515
+ if (exactMatch) {
516
+ addToQueue(targetEng, exactMatch);
517
+ } else {
518
+ addToQueue(targetEng, engineData.models[0]);
519
+ }
520
+ }
521
+ }
522
+ }
523
+
524
+ // 2. Add preferred engines from manifest
442
525
  if (agent.manifest.preferred_engines) {
443
526
  for (const eng of agent.manifest.preferred_engines) {
444
- const clean = eng.toLowerCase().trim();
445
- if (!queue.includes(clean) && installed.includes(clean)) {
446
- queue.push(clean);
447
- }
527
+ const engineData = config?.available_engines?.[eng];
528
+ const model = engineData?.models?.[0] || agent.manifest.default_model;
529
+ addToQueue(eng, model);
448
530
  }
449
531
  }
450
532
 
451
- // 2. Add fallback engines from manifest
533
+ // 3. Add fallback engines from manifest
452
534
  if (agent.manifest.fallback_engines) {
453
535
  for (const eng of agent.manifest.fallback_engines) {
454
- const clean = eng.toLowerCase().trim();
455
- if (!queue.includes(clean) && installed.includes(clean)) {
456
- queue.push(clean);
457
- }
536
+ const engineData = config?.available_engines?.[eng];
537
+ const model = engineData?.models?.[0] || agent.manifest.default_model;
538
+ addToQueue(eng, model);
458
539
  }
459
540
  }
460
541
 
461
- // 3. Add any other installed engines as a last resort
542
+ // 4. Add any other installed engines as a last resort
462
543
  for (const eng of installed) {
463
- if (!queue.includes(eng)) {
464
- queue.push(eng);
465
- }
544
+ const engineData = config?.available_engines?.[eng];
545
+ const model = engineData?.models?.[0] || "default";
546
+ addToQueue(eng, model);
466
547
  }
467
548
 
468
- // 4. Expand agy to include agy2, agy3, agy4... etc. right after agy
469
- const expandedQueue: string[] = [];
470
- for (const eng of queue) {
471
- if (!expandedQueue.includes(eng)) {
472
- expandedQueue.push(eng);
549
+ // 5. Expand agy to include agy2, agy3, agy4... etc. right after agy
550
+ const expandedQueue: FailoverTarget[] = [];
551
+ for (const target of queue) {
552
+ if (!expandedQueue.some(t => t.engine === target.engine && t.model === target.model)) {
553
+ expandedQueue.push(target);
473
554
  }
474
- if (eng === "agy" || eng === "antigravity") {
555
+ if (target.engine === "agy" || target.engine === "antigravity") {
475
556
  for (let i = 2; i <= 10; i++) {
476
557
  const key = `agy${i}`;
477
- if (installed.includes(key) && !expandedQueue.includes(key)) {
478
- expandedQueue.push(key);
558
+ if (installed.includes(key)) {
559
+ const agy2Data = config?.available_engines?.[key];
560
+ let model = target.model;
561
+ if (agy2Data?.models?.length > 0) {
562
+ const match = agy2Data.models.find((m: string) =>
563
+ m.toLowerCase().replace(/[-._\s]/g, "").includes(target.model.toLowerCase().replace(/[-._\s]/g, ""))
564
+ );
565
+ if (match) model = match;
566
+ else model = agy2Data.models[0];
567
+ }
568
+ if (!expandedQueue.some(t => t.engine === key && t.model === model)) {
569
+ expandedQueue.push({ engine: key, model });
570
+ }
479
571
  }
480
572
  }
481
573
  }
@@ -107,3 +107,8 @@ export interface EngineAdapter {
107
107
  readonly name: string;
108
108
  run(prompt: string, model: string): Promise<string>;
109
109
  }
110
+
111
+ export interface FailoverTarget {
112
+ engine: string;
113
+ model: string;
114
+ }