imhcode 3.0.0 → 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,7 +1174,7 @@ async function runInit() {
1298
1174
  console.log(`āœ… Default model: ${defaultModel}`);
1299
1175
  }
1300
1176
 
1301
- // Fix 4: Smart Model Routing Setup with ranked scoring
1177
+ // Call setupModelRouting
1302
1178
  const modelRouting = await setupModelRouting(engines, foundEngines, isInteractive);
1303
1179
 
1304
1180
  // Write config
@@ -1321,18 +1197,6 @@ async function runInit() {
1321
1197
  fs.writeFileSync(configPath, JSON.stringify(configData, null, 2), 'utf8');
1322
1198
  console.log(`\nšŸ’¾ Configuration saved: ${configPath}`);
1323
1199
 
1324
- // Save to global config defaults as well
1325
- const globalConfigData = {
1326
- ...configData,
1327
- skills_configured: true,
1328
- };
1329
- try {
1330
- fs.writeFileSync(globalConfigPath, JSON.stringify(globalConfigData, null, 2), 'utf8');
1331
- console.log(`šŸ’¾ Global defaults saved: ${globalConfigPath}`);
1332
- } catch (e) {
1333
- console.warn(`āš ļø Could not save global default configuration: ${e.message}`);
1334
- }
1335
-
1336
1200
  // Print final guide
1337
1201
  console.log(`\nāœ… ${PLATFORM_NAME} initialized successfully!`);
1338
1202
  console.log(`─`.repeat(60));
@@ -1351,6 +1215,7 @@ async function runInit() {
1351
1215
  console.log(`─`.repeat(60));
1352
1216
  console.log('');
1353
1217
  }
1218
+
1354
1219
  // ─── Fix 4: Model Routing Setup Wizard (Ranked Scoring Algorithm) ─────────────
1355
1220
 
1356
1221
  /**
@@ -1365,12 +1230,11 @@ function normalizeForMatch(s) {
1365
1230
  * Select the best model for a category from available engines using ranked scoring.
1366
1231
  * Returns { engine, model } or null if nothing found.
1367
1232
  */
1368
- function selectBestModel(category, engines) {
1369
- const ranks = MODEL_PRIORITY_RANKS[category] || [];
1233
+ function selectBestModel(ranks, engines) {
1370
1234
  for (const [preferredEngine, modelSubstring] of ranks) {
1371
1235
  const engData = engines[preferredEngine];
1372
1236
  if (!engData?.path || !engData.models?.length) continue;
1373
- const match = engData.models.find(m => normalizeForMatch(m).includes(modelSubstring));
1237
+ const match = engData.models.find(m => normalizeForMatch(m).includes(normalizeForMatch(modelSubstring)));
1374
1238
  if (match) return { engine: preferredEngine, model: match };
1375
1239
  }
1376
1240
  return null;
@@ -1378,17 +1242,69 @@ function selectBestModel(category, engines) {
1378
1242
 
1379
1243
  async function setupModelRouting(engines, foundEngines, isInteractive) {
1380
1244
  const categories = {
1381
- frontend: { label: 'Frontend (UI/UX, components, animations)', note: 'Mimo v2.5 Pro → GPT-5.5 → Claude Opus' },
1382
- backend: { label: 'Backend (APIs, database, business logic)', note: 'DeepSeek V4 Pro → Kimi K2.7 → Qwen3 Coder → GPT-5.5' },
1383
- planning: { label: 'Planning (brainstorming, sprint planning)', note: 'Claude Opus 4.6 → GPT-5.5 → Gemini 3.1 Pro' },
1384
- testing: { label: 'Testing (QA, security audit, E2E)', note: 'GPT-5.5 → GPT-OSS 120B → Claude Opus' },
1385
- review: { label: 'Review (SEO, debugging, code review)', note: 'GPT-5.5 → Claude Sonnet → GPT-OSS 120B' },
1386
- fast: { label: 'Fast (boilerplate, config, simple tasks)', note: 'DeepSeek V4 Flash → Gemini 3.5 Flash → GPT Mini' },
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
+ }
1387
1303
  };
1388
1304
 
1389
1305
  const recommended = {};
1390
- for (const cat of Object.keys(categories)) {
1391
- const best = selectBestModel(cat, engines);
1306
+ for (const [cat, cfg] of Object.entries(categories)) {
1307
+ const best = selectBestModel(cfg.ranks, engines);
1392
1308
  if (best) {
1393
1309
  recommended[cat] = best;
1394
1310
  } else if (foundEngines.length > 0) {
@@ -1400,19 +1316,23 @@ async function setupModelRouting(engines, foundEngines, isInteractive) {
1400
1316
 
1401
1317
  // Show recommended routing table
1402
1318
  console.log('\n' + '─'.repeat(70));
1403
- console.log('🧠 Recommended Model Routing (ranked by quality for each category):\n');
1319
+ console.log('🧠 Recommended Model Routing (ranked by priority for each category):\n');
1404
1320
  console.log(' Category │ Engine │ Model');
1405
1321
  console.log(' ──────────────┼───────────────┼───────────────────────────────────────');
1406
1322
  for (const [cat, rec] of Object.entries(recommended)) {
1407
1323
  const catLabel = cat.padEnd(12);
1408
1324
  const eng = (rec.engine || '?').padEnd(13);
1409
1325
  const mdl = rec.model || '?';
1410
- const note = categories[cat]?.note || '';
1411
1326
  console.log(` ${catLabel} │ ${eng} │ ${mdl}`);
1412
1327
  }
1413
1328
  console.log(' ' + '─'.repeat(67));
1414
- console.log(`\n Priority: Mimo v2.5 Pro (frontend) | DeepSeek V4 Pro (backend)`);
1415
- console.log(` Claude Opus (planning) | GPT-5.5 (testing/review)`);
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`);
1416
1336
 
1417
1337
  const routing = {};
1418
1338
 
@@ -2798,7 +2718,7 @@ function scanAssistantCLIs() {
2798
2718
  }
2799
2719
 
2800
2720
  const fallbackModels = {
2801
- claude: ['claude-3-5-sonnet', 'claude-3-opus', 'claude-3-5-haiku', 'claude-opus-4-6', 'claude-sonnet-4-6', 'claude-haiku-3-5', 'claude-sonnet-5', 'claude-fable-5', 'claude-opus-4-8', 'opus', 'sonnet', 'haiku'],
2721
+ claude: ['claude-sonnet-5', 'claude-fable-5', 'claude-opus-4-8', 'opus', 'sonnet', 'haiku'],
2802
2722
  opencode: ['mimo-vl-v2.5-pro', 'deepseek-v4-pro', 'deepseek-v4-flash', 'gemini-3.5-flash', 'kimi-k2.7-code', 'qwen-3-coder-480b', 'gpt-oss-120b'],
2803
2723
  codex: ['gpt-5.5', 'gpt-5.4-mini', 'gpt-mini'],
2804
2724
  'codex-fugu': ['fugu', 'fugu-ultra'],
@@ -3562,16 +3482,42 @@ async function runTuiCommand() {
3562
3482
  const lines = [];
3563
3483
  const rlInput = readline.createInterface({ input: process.stdin, output: process.stdout });
3564
3484
 
3485
+ let pasteTimeout = null;
3486
+ let isDone = false;
3487
+
3565
3488
  await new Promise(resolve => {
3566
3489
  rlInput.on('line', (line) => {
3567
- if (line.trim() === '/submit' || line.trim() === '.') {
3490
+ if (isDone) return;
3491
+
3492
+ const trimmed = line.trim();
3493
+ if (trimmed === '/submit' || trimmed === '.') {
3494
+ if (pasteTimeout) clearTimeout(pasteTimeout);
3495
+ isDone = true;
3568
3496
  resolve();
3569
3497
  return;
3570
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
+
3571
3513
  lines.push(line);
3572
3514
  });
3515
+
3573
3516
  rlInput.on('close', () => {
3574
- resolve();
3517
+ if (!isDone) {
3518
+ isDone = true;
3519
+ resolve();
3520
+ }
3575
3521
  });
3576
3522
  });
3577
3523
 
@@ -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;AAmJF;;;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,EAAE,MAAM,GACf,MAAM,EAAE,CA2DV;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,GAAG,EACX,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,WAAW,GACjB,MAAM,CAmCR"}
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.
@@ -131,34 +161,8 @@ exports.AGENT_CATEGORY_MAP = {
131
161
  * Model routing: recommended models per category and engine.
132
162
  * Preferences: Mimo v2.5 Pro → frontend, DeepSeek → backend,
133
163
  * GPT → testing/review, Claude → planning, DeepSeek Flash → fast
134
- */
135
- const DEFAULT_MODEL_PREFERENCES = {
136
- frontend: {
137
- engines: ["mimo", "codex", "claude", "opencode"],
138
- models: ["mimo-vl-v2.5-pro", "gpt-5.5", "claude-opus-4-6", "gemini-3.5-flash"],
139
- },
140
- backend: {
141
- engines: ["opencode", "codex", "claude", "qwen"],
142
- models: ["deepseek-v4-pro", "gpt-5.5", "claude-sonnet-4-5", "qwen3-coder-max"],
143
- },
144
- planning: {
145
- engines: ["claude", "codex", "opencode"],
146
- models: ["claude-opus-4-6", "gpt-5.5", "deepseek-v4-pro"],
147
- },
148
- testing: {
149
- engines: ["codex-fugu", "codex", "claude", "opencode"],
150
- models: ["fugu-ultra", "gpt-5.5", "claude-opus-4-6", "deepseek-v4-pro"],
151
- },
152
- review: {
153
- engines: ["codex-fugu", "codex", "claude", "opencode"],
154
- models: ["fugu-ultra", "gpt-5.5", "claude-sonnet-4-5", "deepseek-v4"],
155
- },
156
- fast: {
157
- engines: ["opencode", "codex", "qwen", "claude"],
158
- models: ["deepseek-v4-flash", "gpt-5.4-mini", "qwen3-coder-flash", "claude-haiku-3-5"],
159
- },
160
- };
161
164
  // ─── Config Loader ────────────────────────────────────────────────────────────
165
+
162
166
  /**
163
167
  * Load imhcode.config.json workspace settings if it exists.
164
168
  */
@@ -229,7 +233,7 @@ function resolveModelForTask(agent, task, cwd, engine) {
229
233
  model: routing.model || agent.manifest.default_model,
230
234
  };
231
235
  }
232
- // 2. Find best available model from installed engines
236
+ // 2. Find best available model from installed engines using priority ranks
233
237
  const prefs = DEFAULT_MODEL_PREFERENCES[effectiveCategory];
234
238
  if (prefs && config?.available_engines) {
235
239
  for (let i = 0; i < prefs.engines.length; i++) {
@@ -237,12 +241,12 @@ function resolveModelForTask(agent, task, cwd, engine) {
237
241
  const preferredModel = prefs.models[i];
238
242
  const engineData = config.available_engines[preferredEngine];
239
243
  if (engineData?.models?.length > 0) {
240
- // Check if preferred model is available
241
- const exactMatch = engineData.models.find((m) => m.toLowerCase().includes(preferredModel.toLowerCase().replace(/-/g, "")));
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, "")));
242
246
  if (exactMatch) {
243
247
  return { engine: preferredEngine, model: exactMatch };
244
248
  }
245
- // Use any available model from this preferred engine
249
+ // Use first available model if it's the only one
246
250
  return { engine: preferredEngine, model: engineData.models[0] };
247
251
  }
248
252
  }
@@ -308,7 +312,7 @@ async function runAgent(agent, task, options = {}, acceptanceCriteria) {
308
312
  const complexity = detectTaskComplexity(task);
309
313
  const effectiveCategory = complexity === "light" ? "fast" : category;
310
314
  // 4. Build the failover queue of engines to try
311
- const failoverQueue = getFailoverQueue(agent, config, resolvedEngine, effectiveCategory);
315
+ const failoverQueue = getFailoverQueue(agent, config, resolvedEngine, resolvedModel, effectiveCategory);
312
316
  let currentEngineIndex = 0;
313
317
  let currentEngine = resolvedEngine;
314
318
  let currentModel = resolvedModel;
@@ -317,13 +321,9 @@ async function runAgent(agent, task, options = {}, acceptanceCriteria) {
317
321
  let limitExhausted = false;
318
322
  // 5. Failover Execution Loop
319
323
  while (currentEngineIndex < failoverQueue.length) {
320
- currentEngine = failoverQueue[currentEngineIndex];
321
- if (currentEngineIndex > 0) {
322
- currentModel = getModelForEngine(config, currentEngine, effectiveCategory, agent);
323
- }
324
- else {
325
- currentModel = resolvedModel;
326
- }
324
+ const target = failoverQueue[currentEngineIndex];
325
+ currentEngine = target.engine;
326
+ currentModel = target.model;
327
327
  if (dryRun) {
328
328
  // Dry-run mode: execute only the first engine without hitting a real LLM
329
329
  const adapter = (0, executor_2.getAdapter)(false, currentEngine);
@@ -365,7 +365,7 @@ async function runAgent(agent, task, options = {}, acceptanceCriteria) {
365
365
  }
366
366
  else {
367
367
  limitExhausted = true;
368
- 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.`);
369
369
  cumulativeOutput += "\n\n[Execution aborted: all available engines hit limits]";
370
370
  }
371
371
  }
@@ -458,54 +458,82 @@ function getInstalledEngines(config) {
458
458
  /**
459
459
  * Builds the ordered array of fallback engines to attempt during execution.
460
460
  */
461
- function getFailoverQueue(agent, config, initialEngine, category) {
461
+ function getFailoverQueue(agent, config, initialEngine, initialModel, category) {
462
462
  const installed = getInstalledEngines(config);
463
- const queue = [initialEngine];
464
- // 1. Add category preferred engines from DEFAULT_MODEL_PREFERENCES
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
465
475
  const prefs = DEFAULT_MODEL_PREFERENCES[category];
466
476
  if (prefs) {
467
- for (const eng of prefs.engines) {
468
- const clean = eng.toLowerCase().trim();
469
- if (!queue.includes(clean) && installed.includes(clean)) {
470
- queue.push(clean);
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
+ }
471
490
  }
472
491
  }
473
492
  }
474
493
  // 2. Add preferred engines from manifest
475
494
  if (agent.manifest.preferred_engines) {
476
495
  for (const eng of agent.manifest.preferred_engines) {
477
- const clean = eng.toLowerCase().trim();
478
- if (!queue.includes(clean) && installed.includes(clean)) {
479
- queue.push(clean);
480
- }
496
+ const engineData = config?.available_engines?.[eng];
497
+ const model = engineData?.models?.[0] || agent.manifest.default_model;
498
+ addToQueue(eng, model);
481
499
  }
482
500
  }
483
501
  // 3. Add fallback engines from manifest
484
502
  if (agent.manifest.fallback_engines) {
485
503
  for (const eng of agent.manifest.fallback_engines) {
486
- const clean = eng.toLowerCase().trim();
487
- if (!queue.includes(clean) && installed.includes(clean)) {
488
- queue.push(clean);
489
- }
504
+ const engineData = config?.available_engines?.[eng];
505
+ const model = engineData?.models?.[0] || agent.manifest.default_model;
506
+ addToQueue(eng, model);
490
507
  }
491
508
  }
492
509
  // 4. Add any other installed engines as a last resort
493
510
  for (const eng of installed) {
494
- if (!queue.includes(eng)) {
495
- queue.push(eng);
496
- }
511
+ const engineData = config?.available_engines?.[eng];
512
+ const model = engineData?.models?.[0] || "default";
513
+ addToQueue(eng, model);
497
514
  }
498
515
  // 5. Expand agy to include agy2, agy3, agy4... etc. right after agy
499
516
  const expandedQueue = [];
500
- for (const eng of queue) {
501
- if (!expandedQueue.includes(eng)) {
502
- 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);
503
520
  }
504
- if (eng === "agy" || eng === "antigravity") {
521
+ if (target.engine === "agy" || target.engine === "antigravity") {
505
522
  for (let i = 2; i <= 10; i++) {
506
523
  const key = `agy${i}`;
507
- if (installed.includes(key) && !expandedQueue.includes(key)) {
508
- 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
+ }
509
537
  }
510
538
  }
511
539
  }
@@ -520,21 +548,6 @@ function getModelForEngine(config, engineName, category, agent) {
520
548
  if (config?.model_routing?.[category]?.engine === engineName) {
521
549
  return config.model_routing[category].model;
522
550
  }
523
- // Check if there is a category preferred model for this engine in DEFAULT_MODEL_PREFERENCES
524
- const lookupEngine = (engineName.startsWith("agy") || engineName === "antigravity") ? "agy" : engineName;
525
- const prefs = DEFAULT_MODEL_PREFERENCES[category];
526
- if (prefs) {
527
- const engineIdx = prefs.engines.indexOf(lookupEngine);
528
- if (engineIdx >= 0) {
529
- const preferredMdl = prefs.models[engineIdx];
530
- const engineData = config?.available_engines?.[engineName];
531
- if (engineData?.models?.length > 0) {
532
- const exactMatch = engineData.models.find((m) => m.toLowerCase().includes(preferredMdl.toLowerCase().replace(/-/g, "")));
533
- if (exactMatch)
534
- return exactMatch;
535
- }
536
- }
537
- }
538
551
  // Check available models in config for this engine
539
552
  const engineData = config?.available_engines?.[engineName];
540
553
  if (engineData?.models?.length > 0) {
@@ -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.0",
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
 
@@ -107,34 +137,6 @@ export const AGENT_CATEGORY_MAP: Record<string, string> = {
107
137
  * Model routing: recommended models per category and engine.
108
138
  * Preferences: Mimo v2.5 Pro → frontend, DeepSeek → backend,
109
139
  * GPT → testing/review, Claude → planning, DeepSeek Flash → fast
110
- */
111
- const DEFAULT_MODEL_PREFERENCES: Record<string, { engines: string[]; models: string[] }> = {
112
- frontend: {
113
- engines: ["mimo", "codex", "claude", "opencode"],
114
- models: ["mimo-vl-v2.5-pro", "gpt-5.5", "claude-opus-4-6", "gemini-3.5-flash"],
115
- },
116
- backend: {
117
- engines: ["opencode", "codex", "claude", "qwen"],
118
- models: ["deepseek-v4-pro", "gpt-5.5", "claude-sonnet-4-5", "qwen3-coder-max"],
119
- },
120
- planning: {
121
- engines: ["claude", "codex", "opencode"],
122
- models: ["claude-opus-4-6", "gpt-5.5", "deepseek-v4-pro"],
123
- },
124
- testing: {
125
- engines: ["codex-fugu", "codex", "claude", "opencode"],
126
- models: ["fugu-ultra", "gpt-5.5", "claude-opus-4-6", "deepseek-v4-pro"],
127
- },
128
- review: {
129
- engines: ["codex-fugu", "codex", "claude", "opencode"],
130
- models: ["fugu-ultra", "gpt-5.5", "claude-sonnet-4-5", "deepseek-v4"],
131
- },
132
- fast: {
133
- engines: ["opencode", "codex", "qwen", "claude"],
134
- models: ["deepseek-v4-flash", "gpt-5.4-mini", "qwen3-coder-flash", "claude-haiku-3-5"],
135
- },
136
- };
137
-
138
140
  // ─── Config Loader ────────────────────────────────────────────────────────────
139
141
 
140
142
  /**
@@ -218,7 +220,7 @@ function resolveModelForTask(
218
220
  };
219
221
  }
220
222
 
221
- // 2. Find best available model from installed engines
223
+ // 2. Find best available model from installed engines using priority ranks
222
224
  const prefs = DEFAULT_MODEL_PREFERENCES[effectiveCategory];
223
225
  if (prefs && config?.available_engines) {
224
226
  for (let i = 0; i < prefs.engines.length; i++) {
@@ -227,14 +229,14 @@ function resolveModelForTask(
227
229
  const engineData = config.available_engines[preferredEngine];
228
230
 
229
231
  if (engineData?.models?.length > 0) {
230
- // Check if preferred model is available
232
+ // Check if preferred model is available (case-insensitive fuzzy match)
231
233
  const exactMatch = engineData.models.find((m: string) =>
232
- m.toLowerCase().includes(preferredModel.toLowerCase().replace(/-/g, ""))
234
+ m.toLowerCase().replace(/[-._\s]/g, "").includes(preferredModel.toLowerCase().replace(/[-._\s]/g, ""))
233
235
  );
234
236
  if (exactMatch) {
235
237
  return { engine: preferredEngine, model: exactMatch };
236
238
  }
237
- // Use any available model from this preferred engine
239
+ // Use first available model if it's the only one
238
240
  return { engine: preferredEngine, model: engineData.models[0] };
239
241
  }
240
242
  }
@@ -311,7 +313,7 @@ export async function runAgent(
311
313
  const effectiveCategory = complexity === "light" ? "fast" : category;
312
314
 
313
315
  // 4. Build the failover queue of engines to try
314
- const failoverQueue = getFailoverQueue(agent, config, resolvedEngine, effectiveCategory);
316
+ const failoverQueue = getFailoverQueue(agent, config, resolvedEngine, resolvedModel, effectiveCategory);
315
317
 
316
318
  let currentEngineIndex = 0;
317
319
  let currentEngine = resolvedEngine;
@@ -322,12 +324,9 @@ export async function runAgent(
322
324
 
323
325
  // 5. Failover Execution Loop
324
326
  while (currentEngineIndex < failoverQueue.length) {
325
- currentEngine = failoverQueue[currentEngineIndex];
326
- if (currentEngineIndex > 0) {
327
- currentModel = getModelForEngine(config, currentEngine, effectiveCategory, agent);
328
- } else {
329
- currentModel = resolvedModel;
330
- }
327
+ const target = failoverQueue[currentEngineIndex];
328
+ currentEngine = target.engine;
329
+ currentModel = target.model;
331
330
 
332
331
  if (dryRun) {
333
332
  // Dry-run mode: execute only the first engine without hitting a real LLM
@@ -376,7 +375,7 @@ export async function runAgent(
376
375
  currentPrompt = finalPrompt + "\n" + failoverResumeContext;
377
376
  } else {
378
377
  limitExhausted = true;
379
- 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.`);
380
379
  cumulativeOutput += "\n\n[Execution aborted: all available engines hit limits]";
381
380
  }
382
381
  } else {
@@ -483,18 +482,41 @@ export function getFailoverQueue(
483
482
  agent: LoadedAgent,
484
483
  config: any,
485
484
  initialEngine: string,
485
+ initialModel: string,
486
486
  category: string
487
- ): string[] {
487
+ ): FailoverTarget[] {
488
488
  const installed = getInstalledEngines(config);
489
- 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
+ };
490
501
 
491
- // 1. Add category preferred engines from DEFAULT_MODEL_PREFERENCES
502
+ // 1. Add preferred engines/models from category DEFAULT_MODEL_PREFERENCES
492
503
  const prefs = DEFAULT_MODEL_PREFERENCES[category];
493
504
  if (prefs) {
494
- for (const eng of prefs.engines) {
495
- const clean = eng.toLowerCase().trim();
496
- if (!queue.includes(clean) && installed.includes(clean)) {
497
- queue.push(clean);
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
+ }
498
520
  }
499
521
  }
500
522
  }
@@ -502,41 +524,50 @@ export function getFailoverQueue(
502
524
  // 2. Add preferred engines from manifest
503
525
  if (agent.manifest.preferred_engines) {
504
526
  for (const eng of agent.manifest.preferred_engines) {
505
- const clean = eng.toLowerCase().trim();
506
- if (!queue.includes(clean) && installed.includes(clean)) {
507
- queue.push(clean);
508
- }
527
+ const engineData = config?.available_engines?.[eng];
528
+ const model = engineData?.models?.[0] || agent.manifest.default_model;
529
+ addToQueue(eng, model);
509
530
  }
510
531
  }
511
532
 
512
533
  // 3. Add fallback engines from manifest
513
534
  if (agent.manifest.fallback_engines) {
514
535
  for (const eng of agent.manifest.fallback_engines) {
515
- const clean = eng.toLowerCase().trim();
516
- if (!queue.includes(clean) && installed.includes(clean)) {
517
- queue.push(clean);
518
- }
536
+ const engineData = config?.available_engines?.[eng];
537
+ const model = engineData?.models?.[0] || agent.manifest.default_model;
538
+ addToQueue(eng, model);
519
539
  }
520
540
  }
521
541
 
522
542
  // 4. Add any other installed engines as a last resort
523
543
  for (const eng of installed) {
524
- if (!queue.includes(eng)) {
525
- queue.push(eng);
526
- }
544
+ const engineData = config?.available_engines?.[eng];
545
+ const model = engineData?.models?.[0] || "default";
546
+ addToQueue(eng, model);
527
547
  }
528
548
 
529
549
  // 5. Expand agy to include agy2, agy3, agy4... etc. right after agy
530
- const expandedQueue: string[] = [];
531
- for (const eng of queue) {
532
- if (!expandedQueue.includes(eng)) {
533
- expandedQueue.push(eng);
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);
534
554
  }
535
- if (eng === "agy" || eng === "antigravity") {
555
+ if (target.engine === "agy" || target.engine === "antigravity") {
536
556
  for (let i = 2; i <= 10; i++) {
537
557
  const key = `agy${i}`;
538
- if (installed.includes(key) && !expandedQueue.includes(key)) {
539
- 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
+ }
540
571
  }
541
572
  }
542
573
  }
@@ -559,23 +590,6 @@ export function getModelForEngine(
559
590
  return config.model_routing[category].model;
560
591
  }
561
592
 
562
- // Check if there is a category preferred model for this engine in DEFAULT_MODEL_PREFERENCES
563
- const lookupEngine = (engineName.startsWith("agy") || engineName === "antigravity") ? "agy" : engineName;
564
- const prefs = DEFAULT_MODEL_PREFERENCES[category];
565
- if (prefs) {
566
- const engineIdx = prefs.engines.indexOf(lookupEngine);
567
- if (engineIdx >= 0) {
568
- const preferredMdl = prefs.models[engineIdx];
569
- const engineData = config?.available_engines?.[engineName];
570
- if (engineData?.models?.length > 0) {
571
- const exactMatch = engineData.models.find((m: string) =>
572
- m.toLowerCase().includes(preferredMdl.toLowerCase().replace(/-/g, ""))
573
- );
574
- if (exactMatch) return exactMatch;
575
- }
576
- }
577
- }
578
-
579
593
  // Check available models in config for this engine
580
594
  const engineData = config?.available_engines?.[engineName];
581
595
  if (engineData?.models?.length > 0) {
@@ -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
+ }