imhcode 3.0.5 → 3.0.7
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 +24 -37
- package/dist/orchestrator/index.d.ts.map +1 -1
- package/dist/orchestrator/index.js +145 -86
- package/dist/orchestrator/index.js.map +1 -1
- package/package.json +1 -1
- package/src/orchestrator/index.ts +159 -91
package/bin/imhcode.js
CHANGED
|
@@ -1112,7 +1112,9 @@ async function runInit() {
|
|
|
1112
1112
|
}
|
|
1113
1113
|
|
|
1114
1114
|
registerCliGlobally(imhcodeScriptPath);
|
|
1115
|
-
|
|
1115
|
+
const hasCaveman = fs.existsSync(path.join(os.homedir(), '.claude', 'skills', 'caveman')) || fs.existsSync(path.join(GLOBAL_DIR, 'skills', 'caveman'));
|
|
1116
|
+
const hasGraphify = fs.existsSync(path.join(os.homedir(), '.claude', 'skills', 'graphify')) || fs.existsSync(path.join(GLOBAL_DIR, 'skills', 'graphify'));
|
|
1117
|
+
ensureCavemanAndGraphify(hasCaveman && hasGraphify);
|
|
1116
1118
|
|
|
1117
1119
|
// ── Interactive Engine & Model Setup ────────────────────────────────────────
|
|
1118
1120
|
console.log('\n🔍 Scanning for local coding assistant CLIs...');
|
|
@@ -1247,6 +1249,8 @@ async function setupModelRouting(engines, foundEngines, isInteractive) {
|
|
|
1247
1249
|
note: 'Mimo v2.5 Pro → Antigravity OPUS 4.6 → Deepseek v4 Flash',
|
|
1248
1250
|
ranks: [
|
|
1249
1251
|
['mimo', 'mimo-vl-v2.5-pro'],
|
|
1252
|
+
['opencode', 'mimo-v2.5-pro'],
|
|
1253
|
+
['opencode', 'mimo-v2.5'],
|
|
1250
1254
|
['agy', 'Claude Opus 4.6'],
|
|
1251
1255
|
['opencode', 'deepseek-v4-flash']
|
|
1252
1256
|
]
|
|
@@ -1264,8 +1268,8 @@ async function setupModelRouting(engines, foundEngines, isInteractive) {
|
|
|
1264
1268
|
label: 'Planning (brainstorming, sprint planning)',
|
|
1265
1269
|
note: 'Claude OPUS 4.8 → Fugu → Deepseek v4 Flash',
|
|
1266
1270
|
ranks: [
|
|
1271
|
+
['claude', 'claude-opus-4-8'],
|
|
1267
1272
|
['agy', 'Claude Opus 4.8'],
|
|
1268
|
-
['agy', 'Claude Opus 4.6'],
|
|
1269
1273
|
['codex-fugu', 'fugu-ultra'],
|
|
1270
1274
|
['codex-fugu', 'fugu'],
|
|
1271
1275
|
['opencode', 'deepseek-v4-flash']
|
|
@@ -1275,8 +1279,8 @@ async function setupModelRouting(engines, foundEngines, isInteractive) {
|
|
|
1275
1279
|
label: 'Testing (QA, security audit, E2E)',
|
|
1276
1280
|
note: 'Claude OPUS 4.8 → Fugu → Deepseek v4 Flash',
|
|
1277
1281
|
ranks: [
|
|
1282
|
+
['claude', 'claude-opus-4-8'],
|
|
1278
1283
|
['agy', 'Claude Opus 4.8'],
|
|
1279
|
-
['agy', 'Claude Opus 4.6'],
|
|
1280
1284
|
['codex-fugu', 'fugu-ultra'],
|
|
1281
1285
|
['codex-fugu', 'fugu'],
|
|
1282
1286
|
['opencode', 'deepseek-v4-flash']
|
|
@@ -1286,8 +1290,8 @@ async function setupModelRouting(engines, foundEngines, isInteractive) {
|
|
|
1286
1290
|
label: 'Review (SEO, debugging, code review)',
|
|
1287
1291
|
note: 'Claude OPUS 4.8 → Fugu → Deepseek v4 Flash',
|
|
1288
1292
|
ranks: [
|
|
1293
|
+
['claude', 'claude-opus-4-8'],
|
|
1289
1294
|
['agy', 'Claude Opus 4.8'],
|
|
1290
|
-
['agy', 'Claude Opus 4.6'],
|
|
1291
1295
|
['codex-fugu', 'fugu-ultra'],
|
|
1292
1296
|
['codex-fugu', 'fugu'],
|
|
1293
1297
|
['opencode', 'deepseek-v4-flash']
|
|
@@ -1579,14 +1583,14 @@ Do NOT include any preamble, explanation, or commentary outside the Markdown doc
|
|
|
1579
1583
|
content += `\n\n---\n\n*Generated by ${PLATFORM_NAME} planning AI — ${new Date().toLocaleDateString()}*\n`;
|
|
1580
1584
|
content += `\n*When ready, run \`imhcode plan\` to generate sprint plans from your answers.*\n`;
|
|
1581
1585
|
console.log(`\n ✅ Brainstorming document generated by planning AI (${config?.model_routing?.planning?.model || 'LLM'})`);
|
|
1586
|
+
|
|
1587
|
+
fs.mkdirSync(path.join(cwd, DOCS_DIR), { recursive: true });
|
|
1588
|
+
fs.writeFileSync(brainstormPath, content, 'utf8');
|
|
1582
1589
|
} else {
|
|
1583
|
-
|
|
1584
|
-
|
|
1585
|
-
|
|
1590
|
+
console.error('\n❌ Error: LLM brainstorming document generation failed or returned empty output.');
|
|
1591
|
+
console.error(' Please check your model limits/API keys and re-run "imhcode plan".');
|
|
1592
|
+
process.exit(1);
|
|
1586
1593
|
}
|
|
1587
|
-
|
|
1588
|
-
fs.mkdirSync(path.join(cwd, DOCS_DIR), { recursive: true });
|
|
1589
|
-
fs.writeFileSync(brainstormPath, content, 'utf8');
|
|
1590
1594
|
}
|
|
1591
1595
|
}
|
|
1592
1596
|
|
|
@@ -1881,12 +1885,9 @@ async function generateSprintPlans(cwd, userPrompt, brainstormContent, config) {
|
|
|
1881
1885
|
console.log(` ✅ Sprint plans generated by planning AI`);
|
|
1882
1886
|
lastSprintNum = llmSprintResult.sprintCount;
|
|
1883
1887
|
} else {
|
|
1884
|
-
|
|
1885
|
-
|
|
1886
|
-
|
|
1887
|
-
{ hasFrontend, hasBackend, hasMobile, hasPayments, hasRealtime, designStyle, colorStyle, darkmode, detectedTesting },
|
|
1888
|
-
config
|
|
1889
|
-
);
|
|
1888
|
+
console.error('\n❌ Error: LLM sprint plans generation failed or returned empty output.');
|
|
1889
|
+
console.error(' Please check your model limits/API keys and re-run "imhcode plan".');
|
|
1890
|
+
process.exit(1);
|
|
1890
1891
|
}
|
|
1891
1892
|
|
|
1892
1893
|
// Auto-generate testing sprint if fast/balanced mode
|
|
@@ -2882,6 +2883,7 @@ function ensureCavemanAndGraphify(skillsAlreadyConfigured) {
|
|
|
2882
2883
|
|
|
2883
2884
|
if (skillsInstalled) {
|
|
2884
2885
|
try { execSync('npx skills add juliusbrussee/caveman', { cwd: GLOBAL_DIR, stdio: 'inherit' }); console.log(' ✅ Caveman compression rules integrated globally'); } catch { /* ignore */ }
|
|
2886
|
+
try { execSync('npx skills add juliusbrussee/graphify', { cwd: GLOBAL_DIR, stdio: 'inherit' }); console.log(' ✅ Graphify compression rules integrated globally'); } catch { /* ignore */ }
|
|
2885
2887
|
}
|
|
2886
2888
|
}
|
|
2887
2889
|
|
|
@@ -3502,7 +3504,7 @@ async function runTuiCommand() {
|
|
|
3502
3504
|
case 'init':
|
|
3503
3505
|
inSubMode = true;
|
|
3504
3506
|
if (isRaw) process.stdin.setRawMode(false);
|
|
3505
|
-
process.stdin.
|
|
3507
|
+
process.stdin.resume();
|
|
3506
3508
|
process.stdout.write(ANSI.showCursor + '\n');
|
|
3507
3509
|
|
|
3508
3510
|
try {
|
|
@@ -3520,7 +3522,7 @@ async function runTuiCommand() {
|
|
|
3520
3522
|
case 'write':
|
|
3521
3523
|
inSubMode = true;
|
|
3522
3524
|
if (isRaw) process.stdin.setRawMode(false);
|
|
3523
|
-
process.stdin.
|
|
3525
|
+
process.stdin.resume();
|
|
3524
3526
|
process.stdout.write(ANSI.showCursor + '\n');
|
|
3525
3527
|
|
|
3526
3528
|
console.log(ANSI.cyan + '\n🕌 IMH-Code — Write Requirements' + ANSI.reset);
|
|
@@ -3529,7 +3531,6 @@ async function runTuiCommand() {
|
|
|
3529
3531
|
const lines = [];
|
|
3530
3532
|
const rlInput = readline.createInterface({ input: process.stdin, output: process.stdout });
|
|
3531
3533
|
|
|
3532
|
-
let pasteTimeout = null;
|
|
3533
3534
|
let isDone = false;
|
|
3534
3535
|
|
|
3535
3536
|
await new Promise(resolve => {
|
|
@@ -3538,25 +3539,11 @@ async function runTuiCommand() {
|
|
|
3538
3539
|
|
|
3539
3540
|
const trimmed = line.trim();
|
|
3540
3541
|
if (trimmed === '/submit' || trimmed === '.') {
|
|
3541
|
-
if (pasteTimeout) clearTimeout(pasteTimeout);
|
|
3542
3542
|
isDone = true;
|
|
3543
3543
|
resolve();
|
|
3544
3544
|
return;
|
|
3545
3545
|
}
|
|
3546
3546
|
|
|
3547
|
-
if (trimmed === '') {
|
|
3548
|
-
if (pasteTimeout) clearTimeout(pasteTimeout);
|
|
3549
|
-
pasteTimeout = setTimeout(() => {
|
|
3550
|
-
isDone = true;
|
|
3551
|
-
resolve();
|
|
3552
|
-
}, 100);
|
|
3553
|
-
} else {
|
|
3554
|
-
if (pasteTimeout) {
|
|
3555
|
-
clearTimeout(pasteTimeout);
|
|
3556
|
-
pasteTimeout = null;
|
|
3557
|
-
}
|
|
3558
|
-
}
|
|
3559
|
-
|
|
3560
3547
|
lines.push(line);
|
|
3561
3548
|
});
|
|
3562
3549
|
|
|
@@ -3657,7 +3644,7 @@ async function runTuiCommand() {
|
|
|
3657
3644
|
case 'plan':
|
|
3658
3645
|
inSubMode = true;
|
|
3659
3646
|
if (isRaw) process.stdin.setRawMode(false);
|
|
3660
|
-
process.stdin.
|
|
3647
|
+
process.stdin.resume();
|
|
3661
3648
|
process.stdout.write(ANSI.showCursor + '\n');
|
|
3662
3649
|
|
|
3663
3650
|
// If sprints already exist, confirm deletion first
|
|
@@ -3702,7 +3689,7 @@ async function runTuiCommand() {
|
|
|
3702
3689
|
case 'execute':
|
|
3703
3690
|
inSubMode = true;
|
|
3704
3691
|
if (isRaw) process.stdin.setRawMode(false);
|
|
3705
|
-
process.stdin.
|
|
3692
|
+
process.stdin.resume();
|
|
3706
3693
|
process.stdout.write(ANSI.showCursor + '\n');
|
|
3707
3694
|
|
|
3708
3695
|
try {
|
|
@@ -3717,7 +3704,7 @@ async function runTuiCommand() {
|
|
|
3717
3704
|
case 'test':
|
|
3718
3705
|
inSubMode = true;
|
|
3719
3706
|
if (isRaw) process.stdin.setRawMode(false);
|
|
3720
|
-
process.stdin.
|
|
3707
|
+
process.stdin.resume();
|
|
3721
3708
|
process.stdout.write(ANSI.showCursor + '\n');
|
|
3722
3709
|
|
|
3723
3710
|
try {
|
|
@@ -3732,7 +3719,7 @@ async function runTuiCommand() {
|
|
|
3732
3719
|
case 'modify':
|
|
3733
3720
|
inSubMode = true;
|
|
3734
3721
|
if (isRaw) process.stdin.setRawMode(false);
|
|
3735
|
-
process.stdin.
|
|
3722
|
+
process.stdin.resume();
|
|
3736
3723
|
process.stdout.write(ANSI.showCursor + '\n');
|
|
3737
3724
|
|
|
3738
3725
|
const rlMod = readline.createInterface({ input: process.stdin, output: process.stdout });
|
|
@@ -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,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;
|
|
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;AA+C9F;;;GAGG;AACH,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CA6BrD,CAAC;AAqHF;;;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+K1B;AAgED;;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,CA+GlB;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"}
|
|
@@ -101,30 +101,42 @@ const session_2 = require("./session");
|
|
|
101
101
|
* Tailored to custom priorities: Mimo/Deepseek, Claude Opus, and Fugu.
|
|
102
102
|
*/
|
|
103
103
|
const DEFAULT_MODEL_PREFERENCES = {
|
|
104
|
-
frontend:
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
104
|
+
frontend: [
|
|
105
|
+
{ engine: "mimo", model: "mimo-vl-v2.5-pro" },
|
|
106
|
+
{ engine: "opencode", model: "mimo-v2.5-pro" },
|
|
107
|
+
{ engine: "opencode", model: "mimo-v2.5" },
|
|
108
|
+
{ engine: "agy", model: "Claude Opus 4.6" },
|
|
109
|
+
{ engine: "opencode", model: "deepseek-v4-flash" }
|
|
110
|
+
],
|
|
111
|
+
backend: [
|
|
112
|
+
{ engine: "opencode", model: "deepseek-v4-pro" },
|
|
113
|
+
{ engine: "agy", model: "Claude Opus 4.6" },
|
|
114
|
+
{ engine: "opencode", model: "deepseek-v4-flash" }
|
|
115
|
+
],
|
|
116
|
+
planning: [
|
|
117
|
+
{ engine: "claude", model: "claude-opus-4-8" },
|
|
118
|
+
{ engine: "agy", model: "Claude Opus 4.8" },
|
|
119
|
+
{ engine: "codex-fugu", model: "fugu-ultra" },
|
|
120
|
+
{ engine: "codex-fugu", model: "fugu" },
|
|
121
|
+
{ engine: "opencode", model: "deepseek-v4-flash" }
|
|
122
|
+
],
|
|
123
|
+
testing: [
|
|
124
|
+
{ engine: "claude", model: "claude-opus-4-8" },
|
|
125
|
+
{ engine: "agy", model: "Claude Opus 4.8" },
|
|
126
|
+
{ engine: "codex-fugu", model: "fugu-ultra" },
|
|
127
|
+
{ engine: "codex-fugu", model: "fugu" },
|
|
128
|
+
{ engine: "opencode", model: "deepseek-v4-flash" }
|
|
129
|
+
],
|
|
130
|
+
review: [
|
|
131
|
+
{ engine: "claude", model: "claude-opus-4-8" },
|
|
132
|
+
{ engine: "agy", model: "Claude Opus 4.8" },
|
|
133
|
+
{ engine: "codex-fugu", model: "fugu-ultra" },
|
|
134
|
+
{ engine: "codex-fugu", model: "fugu" },
|
|
135
|
+
{ engine: "opencode", model: "deepseek-v4-flash" }
|
|
136
|
+
],
|
|
137
|
+
fast: [
|
|
138
|
+
{ engine: "opencode", model: "deepseek-v4-flash" }
|
|
139
|
+
],
|
|
128
140
|
};
|
|
129
141
|
// ─── Agent Category Map ───────────────────────────────────────────────────────
|
|
130
142
|
/**
|
|
@@ -236,9 +248,9 @@ function resolveModelForTask(agent, task, cwd, engine) {
|
|
|
236
248
|
// 2. Find best available model from installed engines using priority ranks
|
|
237
249
|
const prefs = DEFAULT_MODEL_PREFERENCES[effectiveCategory];
|
|
238
250
|
if (prefs && config?.available_engines) {
|
|
239
|
-
for (
|
|
240
|
-
const preferredEngine =
|
|
241
|
-
const preferredModel =
|
|
251
|
+
for (const pref of prefs) {
|
|
252
|
+
const preferredEngine = pref.engine;
|
|
253
|
+
const preferredModel = pref.model;
|
|
242
254
|
const engineData = config.available_engines[preferredEngine];
|
|
243
255
|
if (engineData?.models?.length > 0) {
|
|
244
256
|
// Check if preferred model is available (case-insensitive fuzzy match)
|
|
@@ -246,8 +258,6 @@ function resolveModelForTask(agent, task, cwd, engine) {
|
|
|
246
258
|
if (exactMatch) {
|
|
247
259
|
return { engine: preferredEngine, model: exactMatch };
|
|
248
260
|
}
|
|
249
|
-
// Use first available model if it's the only one
|
|
250
|
-
return { engine: preferredEngine, model: engineData.models[0] };
|
|
251
261
|
}
|
|
252
262
|
}
|
|
253
263
|
}
|
|
@@ -320,66 +330,93 @@ async function runAgent(agent, task, options = {}, acceptanceCriteria) {
|
|
|
320
330
|
let success = false;
|
|
321
331
|
let limitExhausted = false;
|
|
322
332
|
// 5. Failover Execution Loop
|
|
323
|
-
while (
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
console.log(`\n🤖 [IMH-Code] Attempting execution on engine "${currentEngine}" using model "${currentModel}"...`);
|
|
335
|
-
const adapter = (0, executor_2.getAdapter)(true, currentEngine);
|
|
336
|
-
let output = "";
|
|
337
|
-
let error = null;
|
|
338
|
-
try {
|
|
339
|
-
output = await adapter.run(currentPrompt, currentModel);
|
|
340
|
-
}
|
|
341
|
-
catch (err) {
|
|
342
|
-
error = err;
|
|
343
|
-
output = err.message || "";
|
|
344
|
-
}
|
|
345
|
-
// Check if limits (tokens/quota/rate) were reached
|
|
346
|
-
const check = detectLimitCondition(output, error);
|
|
347
|
-
if (check.limitReached) {
|
|
348
|
-
console.log(`\n⚠️ [IMH-Code] Engine "${currentEngine}" hit a limit: ${check.reason}`);
|
|
349
|
-
cumulativeOutput += (cumulativeOutput ? "\n" : "") + check.partialOutput;
|
|
350
|
-
currentEngineIndex++;
|
|
351
|
-
if (currentEngineIndex < failoverQueue.length) {
|
|
352
|
-
const nextEng = failoverQueue[currentEngineIndex];
|
|
353
|
-
console.log(`🔄 [IMH-Code] Failing over to next best available engine "${nextEng}"...`);
|
|
354
|
-
// Build failover resume prompt
|
|
355
|
-
const failoverResumeContext = [
|
|
356
|
-
`\n# ⚠️ FAILOVER RESUME CONTEXT`,
|
|
357
|
-
`The previous engine execution (using ${currentEngine} with model ${currentModel}) hit a limit and was interrupted mid-task.`,
|
|
358
|
-
`Here is the partial output produced by the previous run before it stopped:`,
|
|
359
|
-
`\n---`,
|
|
360
|
-
cumulativeOutput.trim(),
|
|
361
|
-
`---\n`,
|
|
362
|
-
`Please resume from exactly where the process was interrupted. Review what was already created or modified, and complete the remaining parts of the original task. Do NOT restart the entire task from scratch.`
|
|
363
|
-
].join("\n");
|
|
364
|
-
currentPrompt = finalPrompt + "\n" + failoverResumeContext;
|
|
333
|
+
while (true) {
|
|
334
|
+
while (currentEngineIndex < failoverQueue.length) {
|
|
335
|
+
const target = failoverQueue[currentEngineIndex];
|
|
336
|
+
currentEngine = target.engine;
|
|
337
|
+
currentModel = target.model;
|
|
338
|
+
if (dryRun) {
|
|
339
|
+
// Dry-run mode: execute only the first engine without hitting a real LLM
|
|
340
|
+
const adapter = (0, executor_2.getAdapter)(false, currentEngine);
|
|
341
|
+
cumulativeOutput = await adapter.run(currentPrompt, currentModel);
|
|
342
|
+
success = true;
|
|
343
|
+
break;
|
|
365
344
|
}
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
345
|
+
console.log(`\n🤖 [IMH-Code] Attempting execution on engine "${currentEngine}" using model "${currentModel}"...`);
|
|
346
|
+
const adapter = (0, executor_2.getAdapter)(true, currentEngine);
|
|
347
|
+
let output = "";
|
|
348
|
+
let error = null;
|
|
349
|
+
try {
|
|
350
|
+
output = await adapter.run(currentPrompt, currentModel);
|
|
370
351
|
}
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
352
|
+
catch (err) {
|
|
353
|
+
error = err;
|
|
354
|
+
output = err.message || "";
|
|
355
|
+
}
|
|
356
|
+
// Check if limits (tokens/quota/rate) or command errors occurred
|
|
357
|
+
const check = detectLimitCondition(output, error);
|
|
358
|
+
const executionFailed = check.limitReached || error !== null;
|
|
359
|
+
if (executionFailed) {
|
|
360
|
+
const reason = check.limitReached ? check.reason : (error.message || String(error));
|
|
361
|
+
console.log(`\n⚠️ [IMH-Code] Engine "${currentEngine}" execution failed: ${reason}`);
|
|
362
|
+
if (check.partialOutput || (output && !error)) {
|
|
363
|
+
cumulativeOutput += (cumulativeOutput ? "\n" : "") + (check.partialOutput || output);
|
|
364
|
+
}
|
|
365
|
+
currentEngineIndex++;
|
|
366
|
+
if (currentEngineIndex < failoverQueue.length) {
|
|
367
|
+
const nextEng = failoverQueue[currentEngineIndex];
|
|
368
|
+
console.log(`🔄 [IMH-Code] Failing over to next best available engine "${nextEng.engine}" using model "${nextEng.model}"...`);
|
|
369
|
+
// Build failover resume prompt
|
|
370
|
+
const failoverResumeContext = [
|
|
371
|
+
`\n# ⚠️ FAILOVER RESUME CONTEXT`,
|
|
372
|
+
`The previous engine execution (using ${currentEngine} with model ${currentModel}) encountered a failure and was interrupted mid-task.`,
|
|
373
|
+
`Here is the partial output produced by the previous run before it stopped:`,
|
|
374
|
+
`\n---`,
|
|
375
|
+
cumulativeOutput.trim(),
|
|
376
|
+
`---\n`,
|
|
377
|
+
`Please resume from exactly where the process was interrupted. Review what was already created or modified, and complete the remaining parts of the original task. Do NOT restart the entire task from scratch.`
|
|
378
|
+
].join("\n");
|
|
379
|
+
currentPrompt = finalPrompt + "\n" + failoverResumeContext;
|
|
380
|
+
}
|
|
381
|
+
else {
|
|
382
|
+
limitExhausted = true;
|
|
383
|
+
errors.push(`All available engines (${failoverQueue.map(t => `${t.engine} (${t.model})`).join(", ")}) failed and were exhausted.`);
|
|
384
|
+
cumulativeOutput += "\n\n[Execution aborted: all available engines failed]";
|
|
385
|
+
}
|
|
377
386
|
}
|
|
378
387
|
else {
|
|
379
388
|
success = true;
|
|
380
389
|
cumulativeOutput += (cumulativeOutput ? "\n" : "") + output;
|
|
390
|
+
break; // Successfully completed
|
|
391
|
+
}
|
|
392
|
+
}
|
|
393
|
+
if (success || !limitExhausted) {
|
|
394
|
+
break;
|
|
395
|
+
}
|
|
396
|
+
// Interactive retry check
|
|
397
|
+
if (process.stdout.isTTY) {
|
|
398
|
+
console.log(`\n❌ [IMH-Code] All available engines/models failed.`);
|
|
399
|
+
console.log(` Wait 15 seconds for limits to reset, then press Enter to retry, or type "abort" to exit.`);
|
|
400
|
+
const readline = require("readline");
|
|
401
|
+
const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
|
|
402
|
+
const answer = await new Promise((resolve) => {
|
|
403
|
+
rl.question(`👉 Retry or abort? [retry/abort]: `, (ans) => {
|
|
404
|
+
rl.close();
|
|
405
|
+
resolve(ans.trim().toLowerCase());
|
|
406
|
+
});
|
|
407
|
+
});
|
|
408
|
+
if (answer === "abort") {
|
|
409
|
+
break;
|
|
410
|
+
}
|
|
411
|
+
else {
|
|
412
|
+
console.log(`🔄 Resetting failover queue and retrying execution...`);
|
|
413
|
+
currentEngineIndex = 0;
|
|
414
|
+
limitExhausted = false;
|
|
415
|
+
errors.length = 0;
|
|
381
416
|
}
|
|
382
|
-
|
|
417
|
+
}
|
|
418
|
+
else {
|
|
419
|
+
break;
|
|
383
420
|
}
|
|
384
421
|
}
|
|
385
422
|
const durationMs = Date.now() - start;
|
|
@@ -424,7 +461,12 @@ function detectLimitCondition(output, error) {
|
|
|
424
461
|
"context limit",
|
|
425
462
|
"rate_limit",
|
|
426
463
|
"too many requests",
|
|
427
|
-
"out of tokens"
|
|
464
|
+
"out of tokens",
|
|
465
|
+
"exceeded",
|
|
466
|
+
"limit is consumed",
|
|
467
|
+
"limit consumed",
|
|
468
|
+
"consumed",
|
|
469
|
+
"429"
|
|
428
470
|
];
|
|
429
471
|
const matched = limitPatterns.find(p => lower.includes(p));
|
|
430
472
|
if (matched) {
|
|
@@ -474,9 +516,9 @@ function getFailoverQueue(agent, config, initialEngine, initialModel, category)
|
|
|
474
516
|
// 1. Add preferred engines/models from category DEFAULT_MODEL_PREFERENCES
|
|
475
517
|
const prefs = DEFAULT_MODEL_PREFERENCES[category];
|
|
476
518
|
if (prefs) {
|
|
477
|
-
for (
|
|
478
|
-
const targetEng =
|
|
479
|
-
const preferredMdl =
|
|
519
|
+
for (const pref of prefs) {
|
|
520
|
+
const targetEng = pref.engine;
|
|
521
|
+
const preferredMdl = pref.model;
|
|
480
522
|
// Find the actual model name in the installed engine's models list
|
|
481
523
|
const engineData = config?.available_engines?.[targetEng];
|
|
482
524
|
if (engineData?.models?.length > 0) {
|
|
@@ -538,6 +580,23 @@ function getFailoverQueue(agent, config, initialEngine, initialModel, category)
|
|
|
538
580
|
}
|
|
539
581
|
}
|
|
540
582
|
}
|
|
583
|
+
// 6. Ensure the fast category model is at the very end of the queue as the ultimate fallback
|
|
584
|
+
const fastPrefs = DEFAULT_MODEL_PREFERENCES["fast"];
|
|
585
|
+
if (fastPrefs && fastPrefs.length > 0) {
|
|
586
|
+
const fastPref = fastPrefs[0];
|
|
587
|
+
const fastEngineData = config?.available_engines?.[fastPref.engine];
|
|
588
|
+
if (fastEngineData?.models?.length > 0) {
|
|
589
|
+
const match = fastEngineData.models.find((m) => m.toLowerCase().replace(/[-._\s]/g, "").includes(fastPref.model.toLowerCase().replace(/[-._\s]/g, "")));
|
|
590
|
+
const finalModel = match || fastEngineData.models[0];
|
|
591
|
+
const cleanFastEng = fastPref.engine.toLowerCase().trim();
|
|
592
|
+
if (installed.includes(cleanFastEng)) {
|
|
593
|
+
const exists = expandedQueue.some(t => t.engine === cleanFastEng && t.model === finalModel);
|
|
594
|
+
if (!exists) {
|
|
595
|
+
expandedQueue.push({ engine: cleanFastEng, model: finalModel });
|
|
596
|
+
}
|
|
597
|
+
}
|
|
598
|
+
}
|
|
599
|
+
}
|
|
541
600
|
return expandedQueue;
|
|
542
601
|
}
|
|
543
602
|
/**
|
|
@@ -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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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "imhcode",
|
|
3
|
-
"version": "3.0.
|
|
3
|
+
"version": "3.0.7",
|
|
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": {
|
|
@@ -69,31 +69,43 @@ import type { LoadedAgent, ExecutionOptions, ExecutionResult, FailoverTarget } f
|
|
|
69
69
|
* Model routing: recommended models per category and engine.
|
|
70
70
|
* Tailored to custom priorities: Mimo/Deepseek, Claude Opus, and Fugu.
|
|
71
71
|
*/
|
|
72
|
-
const DEFAULT_MODEL_PREFERENCES: Record<string, {
|
|
73
|
-
frontend:
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
72
|
+
const DEFAULT_MODEL_PREFERENCES: Record<string, { engine: string; model: string }[]> = {
|
|
73
|
+
frontend: [
|
|
74
|
+
{ engine: "mimo", model: "mimo-vl-v2.5-pro" },
|
|
75
|
+
{ engine: "opencode", model: "mimo-v2.5-pro" },
|
|
76
|
+
{ engine: "opencode", model: "mimo-v2.5" },
|
|
77
|
+
{ engine: "agy", model: "Claude Opus 4.6" },
|
|
78
|
+
{ engine: "opencode", model: "deepseek-v4-flash" }
|
|
79
|
+
],
|
|
80
|
+
backend: [
|
|
81
|
+
{ engine: "opencode", model: "deepseek-v4-pro" },
|
|
82
|
+
{ engine: "agy", model: "Claude Opus 4.6" },
|
|
83
|
+
{ engine: "opencode", model: "deepseek-v4-flash" }
|
|
84
|
+
],
|
|
85
|
+
planning: [
|
|
86
|
+
{ engine: "claude", model: "claude-opus-4-8" },
|
|
87
|
+
{ engine: "agy", model: "Claude Opus 4.8" },
|
|
88
|
+
{ engine: "codex-fugu", model: "fugu-ultra" },
|
|
89
|
+
{ engine: "codex-fugu", model: "fugu" },
|
|
90
|
+
{ engine: "opencode", model: "deepseek-v4-flash" }
|
|
91
|
+
],
|
|
92
|
+
testing: [
|
|
93
|
+
{ engine: "claude", model: "claude-opus-4-8" },
|
|
94
|
+
{ engine: "agy", model: "Claude Opus 4.8" },
|
|
95
|
+
{ engine: "codex-fugu", model: "fugu-ultra" },
|
|
96
|
+
{ engine: "codex-fugu", model: "fugu" },
|
|
97
|
+
{ engine: "opencode", model: "deepseek-v4-flash" }
|
|
98
|
+
],
|
|
99
|
+
review: [
|
|
100
|
+
{ engine: "claude", model: "claude-opus-4-8" },
|
|
101
|
+
{ engine: "agy", model: "Claude Opus 4.8" },
|
|
102
|
+
{ engine: "codex-fugu", model: "fugu-ultra" },
|
|
103
|
+
{ engine: "codex-fugu", model: "fugu" },
|
|
104
|
+
{ engine: "opencode", model: "deepseek-v4-flash" }
|
|
105
|
+
],
|
|
106
|
+
fast: [
|
|
107
|
+
{ engine: "opencode", model: "deepseek-v4-flash" }
|
|
108
|
+
],
|
|
97
109
|
};
|
|
98
110
|
|
|
99
111
|
// ─── Agent Category Map ───────────────────────────────────────────────────────
|
|
@@ -223,9 +235,9 @@ function resolveModelForTask(
|
|
|
223
235
|
// 2. Find best available model from installed engines using priority ranks
|
|
224
236
|
const prefs = DEFAULT_MODEL_PREFERENCES[effectiveCategory];
|
|
225
237
|
if (prefs && config?.available_engines) {
|
|
226
|
-
for (
|
|
227
|
-
const preferredEngine =
|
|
228
|
-
const preferredModel =
|
|
238
|
+
for (const pref of prefs) {
|
|
239
|
+
const preferredEngine = pref.engine;
|
|
240
|
+
const preferredModel = pref.model;
|
|
229
241
|
const engineData = config.available_engines[preferredEngine];
|
|
230
242
|
|
|
231
243
|
if (engineData?.models?.length > 0) {
|
|
@@ -236,8 +248,6 @@ function resolveModelForTask(
|
|
|
236
248
|
if (exactMatch) {
|
|
237
249
|
return { engine: preferredEngine, model: exactMatch };
|
|
238
250
|
}
|
|
239
|
-
// Use first available model if it's the only one
|
|
240
|
-
return { engine: preferredEngine, model: engineData.models[0] };
|
|
241
251
|
}
|
|
242
252
|
}
|
|
243
253
|
}
|
|
@@ -323,71 +333,103 @@ export async function runAgent(
|
|
|
323
333
|
let limitExhausted = false;
|
|
324
334
|
|
|
325
335
|
// 5. Failover Execution Loop
|
|
326
|
-
while (
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
336
|
+
while (true) {
|
|
337
|
+
while (currentEngineIndex < failoverQueue.length) {
|
|
338
|
+
const target = failoverQueue[currentEngineIndex];
|
|
339
|
+
currentEngine = target.engine;
|
|
340
|
+
currentModel = target.model;
|
|
341
|
+
|
|
342
|
+
if (dryRun) {
|
|
343
|
+
// Dry-run mode: execute only the first engine without hitting a real LLM
|
|
344
|
+
const adapter = getAdapter(false, currentEngine);
|
|
345
|
+
cumulativeOutput = await adapter.run(currentPrompt, currentModel);
|
|
346
|
+
success = true;
|
|
347
|
+
break;
|
|
348
|
+
}
|
|
338
349
|
|
|
339
|
-
|
|
350
|
+
console.log(`\n🤖 [IMH-Code] Attempting execution on engine "${currentEngine}" using model "${currentModel}"...`);
|
|
340
351
|
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
352
|
+
const adapter = getAdapter(true, currentEngine);
|
|
353
|
+
let output = "";
|
|
354
|
+
let error: any = null;
|
|
344
355
|
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
}
|
|
351
|
-
|
|
352
|
-
// Check if limits (tokens/quota/rate) were reached
|
|
353
|
-
const check = detectLimitCondition(output, error);
|
|
354
|
-
|
|
355
|
-
if (check.limitReached) {
|
|
356
|
-
console.log(`\n⚠️ [IMH-Code] Engine "${currentEngine}" hit a limit: ${check.reason}`);
|
|
357
|
-
cumulativeOutput += (cumulativeOutput ? "\n" : "") + check.partialOutput;
|
|
358
|
-
|
|
359
|
-
currentEngineIndex++;
|
|
360
|
-
if (currentEngineIndex < failoverQueue.length) {
|
|
361
|
-
const nextEng = failoverQueue[currentEngineIndex];
|
|
362
|
-
console.log(`🔄 [IMH-Code] Failing over to next best available engine "${nextEng}"...`);
|
|
363
|
-
|
|
364
|
-
// Build failover resume prompt
|
|
365
|
-
const failoverResumeContext = [
|
|
366
|
-
`\n# ⚠️ FAILOVER RESUME CONTEXT`,
|
|
367
|
-
`The previous engine execution (using ${currentEngine} with model ${currentModel}) hit a limit and was interrupted mid-task.`,
|
|
368
|
-
`Here is the partial output produced by the previous run before it stopped:`,
|
|
369
|
-
`\n---`,
|
|
370
|
-
cumulativeOutput.trim(),
|
|
371
|
-
`---\n`,
|
|
372
|
-
`Please resume from exactly where the process was interrupted. Review what was already created or modified, and complete the remaining parts of the original task. Do NOT restart the entire task from scratch.`
|
|
373
|
-
].join("\n");
|
|
374
|
-
|
|
375
|
-
currentPrompt = finalPrompt + "\n" + failoverResumeContext;
|
|
376
|
-
} else {
|
|
377
|
-
limitExhausted = true;
|
|
378
|
-
errors.push(`All available engines (${failoverQueue.map(t => `${t.engine} (${t.model})`).join(", ")}) hit limits and were exhausted.`);
|
|
379
|
-
cumulativeOutput += "\n\n[Execution aborted: all available engines hit limits]";
|
|
356
|
+
try {
|
|
357
|
+
output = await adapter.run(currentPrompt, currentModel);
|
|
358
|
+
} catch (err: any) {
|
|
359
|
+
error = err;
|
|
360
|
+
output = err.message || "";
|
|
380
361
|
}
|
|
381
|
-
|
|
382
|
-
if (
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
362
|
+
|
|
363
|
+
// Check if limits (tokens/quota/rate) or command errors occurred
|
|
364
|
+
const check = detectLimitCondition(output, error);
|
|
365
|
+
const executionFailed = check.limitReached || error !== null;
|
|
366
|
+
|
|
367
|
+
if (executionFailed) {
|
|
368
|
+
const reason = check.limitReached ? check.reason : (error.message || String(error));
|
|
369
|
+
console.log(`\n⚠️ [IMH-Code] Engine "${currentEngine}" execution failed: ${reason}`);
|
|
370
|
+
|
|
371
|
+
if (check.partialOutput || (output && !error)) {
|
|
372
|
+
cumulativeOutput += (cumulativeOutput ? "\n" : "") + (check.partialOutput || output);
|
|
373
|
+
}
|
|
374
|
+
|
|
375
|
+
currentEngineIndex++;
|
|
376
|
+
if (currentEngineIndex < failoverQueue.length) {
|
|
377
|
+
const nextEng = failoverQueue[currentEngineIndex];
|
|
378
|
+
console.log(`🔄 [IMH-Code] Failing over to next best available engine "${nextEng.engine}" using model "${nextEng.model}"...`);
|
|
379
|
+
|
|
380
|
+
// Build failover resume prompt
|
|
381
|
+
const failoverResumeContext = [
|
|
382
|
+
`\n# ⚠️ FAILOVER RESUME CONTEXT`,
|
|
383
|
+
`The previous engine execution (using ${currentEngine} with model ${currentModel}) encountered a failure and was interrupted mid-task.`,
|
|
384
|
+
`Here is the partial output produced by the previous run before it stopped:`,
|
|
385
|
+
`\n---`,
|
|
386
|
+
cumulativeOutput.trim(),
|
|
387
|
+
`---\n`,
|
|
388
|
+
`Please resume from exactly where the process was interrupted. Review what was already created or modified, and complete the remaining parts of the original task. Do NOT restart the entire task from scratch.`
|
|
389
|
+
].join("\n");
|
|
390
|
+
|
|
391
|
+
currentPrompt = finalPrompt + "\n" + failoverResumeContext;
|
|
392
|
+
} else {
|
|
393
|
+
limitExhausted = true;
|
|
394
|
+
errors.push(`All available engines (${failoverQueue.map(t => `${t.engine} (${t.model})`).join(", ")}) failed and were exhausted.`);
|
|
395
|
+
cumulativeOutput += "\n\n[Execution aborted: all available engines failed]";
|
|
396
|
+
}
|
|
386
397
|
} else {
|
|
387
398
|
success = true;
|
|
388
399
|
cumulativeOutput += (cumulativeOutput ? "\n" : "") + output;
|
|
400
|
+
break; // Successfully completed
|
|
389
401
|
}
|
|
390
|
-
|
|
402
|
+
}
|
|
403
|
+
|
|
404
|
+
if (success || !limitExhausted) {
|
|
405
|
+
break;
|
|
406
|
+
}
|
|
407
|
+
|
|
408
|
+
// Interactive retry check
|
|
409
|
+
if (process.stdout.isTTY) {
|
|
410
|
+
console.log(`\n❌ [IMH-Code] All available engines/models failed.`);
|
|
411
|
+
console.log(` Wait 15 seconds for limits to reset, then press Enter to retry, or type "abort" to exit.`);
|
|
412
|
+
|
|
413
|
+
const readline = require("readline");
|
|
414
|
+
const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
|
|
415
|
+
|
|
416
|
+
const answer: string = await new Promise((resolve) => {
|
|
417
|
+
rl.question(`👉 Retry or abort? [retry/abort]: `, (ans: string) => {
|
|
418
|
+
rl.close();
|
|
419
|
+
resolve(ans.trim().toLowerCase());
|
|
420
|
+
});
|
|
421
|
+
});
|
|
422
|
+
|
|
423
|
+
if (answer === "abort") {
|
|
424
|
+
break;
|
|
425
|
+
} else {
|
|
426
|
+
console.log(`🔄 Resetting failover queue and retrying execution...`);
|
|
427
|
+
currentEngineIndex = 0;
|
|
428
|
+
limitExhausted = false;
|
|
429
|
+
errors.length = 0;
|
|
430
|
+
}
|
|
431
|
+
} else {
|
|
432
|
+
break;
|
|
391
433
|
}
|
|
392
434
|
}
|
|
393
435
|
|
|
@@ -441,7 +483,12 @@ function detectLimitCondition(
|
|
|
441
483
|
"context limit",
|
|
442
484
|
"rate_limit",
|
|
443
485
|
"too many requests",
|
|
444
|
-
"out of tokens"
|
|
486
|
+
"out of tokens",
|
|
487
|
+
"exceeded",
|
|
488
|
+
"limit is consumed",
|
|
489
|
+
"limit consumed",
|
|
490
|
+
"consumed",
|
|
491
|
+
"429"
|
|
445
492
|
];
|
|
446
493
|
|
|
447
494
|
const matched = limitPatterns.find(p => lower.includes(p));
|
|
@@ -502,9 +549,9 @@ export function getFailoverQueue(
|
|
|
502
549
|
// 1. Add preferred engines/models from category DEFAULT_MODEL_PREFERENCES
|
|
503
550
|
const prefs = DEFAULT_MODEL_PREFERENCES[category];
|
|
504
551
|
if (prefs) {
|
|
505
|
-
for (
|
|
506
|
-
const targetEng =
|
|
507
|
-
const preferredMdl =
|
|
552
|
+
for (const pref of prefs) {
|
|
553
|
+
const targetEng = pref.engine;
|
|
554
|
+
const preferredMdl = pref.model;
|
|
508
555
|
|
|
509
556
|
// Find the actual model name in the installed engine's models list
|
|
510
557
|
const engineData = config?.available_engines?.[targetEng];
|
|
@@ -573,6 +620,27 @@ export function getFailoverQueue(
|
|
|
573
620
|
}
|
|
574
621
|
}
|
|
575
622
|
|
|
623
|
+
// 6. Ensure the fast category model is at the very end of the queue as the ultimate fallback
|
|
624
|
+
const fastPrefs = DEFAULT_MODEL_PREFERENCES["fast"];
|
|
625
|
+
if (fastPrefs && fastPrefs.length > 0) {
|
|
626
|
+
const fastPref = fastPrefs[0];
|
|
627
|
+
const fastEngineData = config?.available_engines?.[fastPref.engine];
|
|
628
|
+
if (fastEngineData?.models?.length > 0) {
|
|
629
|
+
const match = fastEngineData.models.find((m: string) =>
|
|
630
|
+
m.toLowerCase().replace(/[-._\s]/g, "").includes(fastPref.model.toLowerCase().replace(/[-._\s]/g, ""))
|
|
631
|
+
);
|
|
632
|
+
const finalModel = match || fastEngineData.models[0];
|
|
633
|
+
const cleanFastEng = fastPref.engine.toLowerCase().trim();
|
|
634
|
+
|
|
635
|
+
if (installed.includes(cleanFastEng)) {
|
|
636
|
+
const exists = expandedQueue.some(t => t.engine === cleanFastEng && t.model === finalModel);
|
|
637
|
+
if (!exists) {
|
|
638
|
+
expandedQueue.push({ engine: cleanFastEng, model: finalModel });
|
|
639
|
+
}
|
|
640
|
+
}
|
|
641
|
+
}
|
|
642
|
+
}
|
|
643
|
+
|
|
576
644
|
return expandedQueue;
|
|
577
645
|
}
|
|
578
646
|
|