nexus-agents 2.102.8 → 2.103.1
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/dist/{child-mcp-config-3FIENOGY.js → child-mcp-config-I7VKSEW2.js} +2 -2
- package/dist/{chunk-UXBZ346L.js → chunk-3GUCNISD.js} +2 -2
- package/dist/{chunk-CPGZRXY3.js → chunk-3UOFGQ2K.js} +3 -3
- package/dist/{chunk-IS2OUYGR.js → chunk-3VMTQCEH.js} +2 -2
- package/dist/{chunk-J524D5GA.js → chunk-4PWBF3NC.js} +2 -2
- package/dist/{chunk-HAKXSIBS.js → chunk-4VTJA7FE.js} +2 -2
- package/dist/{chunk-TLTWQAHI.js → chunk-5L5REFGE.js} +3 -3
- package/dist/{chunk-L3RP7STR.js → chunk-5ZK25ZWD.js} +4 -4
- package/dist/{chunk-ER6YMAZU.js → chunk-6E6MOJYY.js} +2 -2
- package/dist/{chunk-ZW6NKOXT.js → chunk-7P3FALEV.js} +2 -2
- package/dist/{chunk-WVZT4JGL.js → chunk-CB66XOZQ.js} +360 -212
- package/dist/chunk-CB66XOZQ.js.map +1 -0
- package/dist/{chunk-OIFFZHSV.js → chunk-DAOUGMA5.js} +4 -4
- package/dist/{chunk-47YAIGCP.js → chunk-FXPDPPYR.js} +2 -2
- package/dist/{chunk-ODN2O3XZ.js → chunk-G2FTEZDY.js} +123 -32
- package/dist/chunk-G2FTEZDY.js.map +1 -0
- package/dist/{chunk-EYIIQ7KE.js → chunk-GA2ZZERU.js} +15 -5
- package/dist/{chunk-EYIIQ7KE.js.map → chunk-GA2ZZERU.js.map} +1 -1
- package/dist/{chunk-WPGVI2F2.js → chunk-KSMYBMM6.js} +2 -2
- package/dist/{chunk-RHH75VON.js → chunk-L32OQDWK.js} +3 -3
- package/dist/{chunk-4CPPYUBW.js → chunk-MHVGM6NQ.js} +2 -2
- package/dist/{chunk-GUHVV3Q4.js → chunk-MMZ5IKQ3.js} +2 -2
- package/dist/{chunk-74QFV5ON.js → chunk-N35KBA5P.js} +3 -3
- package/dist/{chunk-2NSCF4PI.js → chunk-OMFKL3FZ.js} +7 -7
- package/dist/{chunk-JEOFSMRI.js → chunk-QQNM4YAL.js} +2 -2
- package/dist/{chunk-NBAARQC6.js → chunk-RDNEALPS.js} +7 -7
- package/dist/{chunk-VJFUIP6N.js → chunk-RWSRBLSA.js} +21 -2
- package/dist/{chunk-VJFUIP6N.js.map → chunk-RWSRBLSA.js.map} +1 -1
- package/dist/{chunk-P6TYLTER.js → chunk-TZ2YMIQV.js} +9 -9
- package/dist/{chunk-THUENUJA.js → chunk-U3GOPZIA.js} +2 -2
- package/dist/{chunk-GAX6YG5E.js → chunk-UB5S4II3.js} +2 -2
- package/dist/{chunk-PF7GV22M.js → chunk-ULKXWKNZ.js} +5 -5
- package/dist/{chunk-Q7FINCKE.js → chunk-VPPZ45IZ.js} +2 -2
- package/dist/{chunk-FYQ36FP3.js → chunk-WORMJT4K.js} +3 -3
- package/dist/{chunk-G3QQOU4H.js → chunk-XISM6YBY.js} +4 -4
- package/dist/{chunk-B73SAOST.js → chunk-Y5D6P5JV.js} +3 -3
- package/dist/{cli-circuit-breaker-VHAHRE2J.js → cli-circuit-breaker-M4LZW4RB.js} +4 -4
- package/dist/cli.js +40 -38
- package/dist/cli.js.map +1 -1
- package/dist/{composite-router-NQMFTZ6B.js → composite-router-CYGVTMW6.js} +2 -2
- package/dist/{consensus-vote-VGQW6LCB.js → consensus-vote-2ODNLCSS.js} +12 -12
- package/dist/{context-retriever-BE4DNAPM.js → context-retriever-VZ5HKPWX.js} +6 -6
- package/dist/{doctor-deep-7PN77HHM.js → doctor-deep-A3FHG7A7.js} +3 -3
- package/dist/{expert-bridge-HLSKV3PK.js → expert-bridge-GNHXRQEZ.js} +4 -4
- package/dist/{factory-PTEIJ2H2.js → factory-6PU24HFM.js} +5 -5
- package/dist/{factory-2A2CZPQR.js → factory-7ENY4JOE.js} +5 -5
- package/dist/{improvement-review-6EV2FWXI.js → improvement-review-6377XBPE.js} +4 -4
- package/dist/index.d.ts +14 -3
- package/dist/index.js +27 -27
- package/dist/{init-opencode-GZD26YXM.js → init-opencode-6UJPLOHE.js} +5 -5
- package/dist/{issue-triage-JGQTQVQI.js → issue-triage-YOFAEUGC.js} +5 -5
- package/dist/{pr-reviewer-helpers-SEA7L3XT.js → pr-reviewer-helpers-MK2ZFEEI.js} +4 -4
- package/dist/{registry-command-O5G5VII2.js → registry-command-JLAE6RAW.js} +2 -2
- package/dist/{repo-security-plan-6QUW6JW5.js → repo-security-plan-IGX7AS5P.js} +3 -3
- package/dist/{research-helpers-synthesize-2HHHQP5I.js → research-helpers-synthesize-B5KL3S4T.js} +3 -3
- package/dist/{routing-memory-SCPATSY6.js → routing-memory-7RKYQEHM.js} +2 -2
- package/dist/{session-memory-O77ISZYP.js → session-memory-S4SBPBP4.js} +3 -3
- package/dist/{setup-command-VZEAQM27.js → setup-command-KMGJM4V4.js} +10 -10
- package/dist/{setup-config-AKLJPGHL.js → setup-config-2DS2V65J.js} +3 -3
- package/dist/{setup-custom-api-PK5OLVW5.js → setup-custom-api-JVYDKH6Y.js} +4 -4
- package/dist/{tool-memory-KQ5N6GRC.js → tool-memory-4LVVNSVD.js} +5 -5
- package/dist/{weather-report-BUPURZ6J.js → weather-report-FUVJJPE4.js} +2 -2
- package/package.json +1 -1
- package/dist/chunk-ODN2O3XZ.js.map +0 -1
- package/dist/chunk-WVZT4JGL.js.map +0 -1
- /package/dist/{child-mcp-config-3FIENOGY.js.map → child-mcp-config-I7VKSEW2.js.map} +0 -0
- /package/dist/{chunk-UXBZ346L.js.map → chunk-3GUCNISD.js.map} +0 -0
- /package/dist/{chunk-CPGZRXY3.js.map → chunk-3UOFGQ2K.js.map} +0 -0
- /package/dist/{chunk-IS2OUYGR.js.map → chunk-3VMTQCEH.js.map} +0 -0
- /package/dist/{chunk-J524D5GA.js.map → chunk-4PWBF3NC.js.map} +0 -0
- /package/dist/{chunk-HAKXSIBS.js.map → chunk-4VTJA7FE.js.map} +0 -0
- /package/dist/{chunk-TLTWQAHI.js.map → chunk-5L5REFGE.js.map} +0 -0
- /package/dist/{chunk-L3RP7STR.js.map → chunk-5ZK25ZWD.js.map} +0 -0
- /package/dist/{chunk-ER6YMAZU.js.map → chunk-6E6MOJYY.js.map} +0 -0
- /package/dist/{chunk-ZW6NKOXT.js.map → chunk-7P3FALEV.js.map} +0 -0
- /package/dist/{chunk-OIFFZHSV.js.map → chunk-DAOUGMA5.js.map} +0 -0
- /package/dist/{chunk-47YAIGCP.js.map → chunk-FXPDPPYR.js.map} +0 -0
- /package/dist/{chunk-WPGVI2F2.js.map → chunk-KSMYBMM6.js.map} +0 -0
- /package/dist/{chunk-RHH75VON.js.map → chunk-L32OQDWK.js.map} +0 -0
- /package/dist/{chunk-4CPPYUBW.js.map → chunk-MHVGM6NQ.js.map} +0 -0
- /package/dist/{chunk-GUHVV3Q4.js.map → chunk-MMZ5IKQ3.js.map} +0 -0
- /package/dist/{chunk-74QFV5ON.js.map → chunk-N35KBA5P.js.map} +0 -0
- /package/dist/{chunk-2NSCF4PI.js.map → chunk-OMFKL3FZ.js.map} +0 -0
- /package/dist/{chunk-JEOFSMRI.js.map → chunk-QQNM4YAL.js.map} +0 -0
- /package/dist/{chunk-NBAARQC6.js.map → chunk-RDNEALPS.js.map} +0 -0
- /package/dist/{chunk-P6TYLTER.js.map → chunk-TZ2YMIQV.js.map} +0 -0
- /package/dist/{chunk-THUENUJA.js.map → chunk-U3GOPZIA.js.map} +0 -0
- /package/dist/{chunk-GAX6YG5E.js.map → chunk-UB5S4II3.js.map} +0 -0
- /package/dist/{chunk-PF7GV22M.js.map → chunk-ULKXWKNZ.js.map} +0 -0
- /package/dist/{chunk-Q7FINCKE.js.map → chunk-VPPZ45IZ.js.map} +0 -0
- /package/dist/{chunk-FYQ36FP3.js.map → chunk-WORMJT4K.js.map} +0 -0
- /package/dist/{chunk-G3QQOU4H.js.map → chunk-XISM6YBY.js.map} +0 -0
- /package/dist/{chunk-B73SAOST.js.map → chunk-Y5D6P5JV.js.map} +0 -0
- /package/dist/{cli-circuit-breaker-VHAHRE2J.js.map → cli-circuit-breaker-M4LZW4RB.js.map} +0 -0
- /package/dist/{composite-router-NQMFTZ6B.js.map → composite-router-CYGVTMW6.js.map} +0 -0
- /package/dist/{consensus-vote-VGQW6LCB.js.map → consensus-vote-2ODNLCSS.js.map} +0 -0
- /package/dist/{context-retriever-BE4DNAPM.js.map → context-retriever-VZ5HKPWX.js.map} +0 -0
- /package/dist/{doctor-deep-7PN77HHM.js.map → doctor-deep-A3FHG7A7.js.map} +0 -0
- /package/dist/{expert-bridge-HLSKV3PK.js.map → expert-bridge-GNHXRQEZ.js.map} +0 -0
- /package/dist/{factory-2A2CZPQR.js.map → factory-6PU24HFM.js.map} +0 -0
- /package/dist/{factory-PTEIJ2H2.js.map → factory-7ENY4JOE.js.map} +0 -0
- /package/dist/{improvement-review-6EV2FWXI.js.map → improvement-review-6377XBPE.js.map} +0 -0
- /package/dist/{init-opencode-GZD26YXM.js.map → init-opencode-6UJPLOHE.js.map} +0 -0
- /package/dist/{issue-triage-JGQTQVQI.js.map → issue-triage-YOFAEUGC.js.map} +0 -0
- /package/dist/{pr-reviewer-helpers-SEA7L3XT.js.map → pr-reviewer-helpers-MK2ZFEEI.js.map} +0 -0
- /package/dist/{registry-command-O5G5VII2.js.map → registry-command-JLAE6RAW.js.map} +0 -0
- /package/dist/{repo-security-plan-6QUW6JW5.js.map → repo-security-plan-IGX7AS5P.js.map} +0 -0
- /package/dist/{research-helpers-synthesize-2HHHQP5I.js.map → research-helpers-synthesize-B5KL3S4T.js.map} +0 -0
- /package/dist/{routing-memory-SCPATSY6.js.map → routing-memory-7RKYQEHM.js.map} +0 -0
- /package/dist/{session-memory-O77ISZYP.js.map → session-memory-S4SBPBP4.js.map} +0 -0
- /package/dist/{setup-command-VZEAQM27.js.map → setup-command-KMGJM4V4.js.map} +0 -0
- /package/dist/{setup-config-AKLJPGHL.js.map → setup-config-2DS2V65J.js.map} +0 -0
- /package/dist/{setup-custom-api-PK5OLVW5.js.map → setup-custom-api-JVYDKH6Y.js.map} +0 -0
- /package/dist/{tool-memory-KQ5N6GRC.js.map → tool-memory-4LVVNSVD.js.map} +0 -0
- /package/dist/{weather-report-BUPURZ6J.js.map → weather-report-FUVJJPE4.js.map} +0 -0
|
@@ -5,13 +5,13 @@ import {
|
|
|
5
5
|
} from "./chunk-6T3EPABN.js";
|
|
6
6
|
import {
|
|
7
7
|
generateId
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-KSMYBMM6.js";
|
|
9
9
|
import {
|
|
10
10
|
getMemoryRegistry
|
|
11
11
|
} from "./chunk-PQHVC4BD.js";
|
|
12
12
|
import {
|
|
13
13
|
SessionMemory
|
|
14
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-QQNM4YAL.js";
|
|
15
15
|
import {
|
|
16
16
|
ErrorCode,
|
|
17
17
|
NexusError,
|
|
@@ -24,7 +24,7 @@ import {
|
|
|
24
24
|
getTimeProvider,
|
|
25
25
|
ok,
|
|
26
26
|
setSharedMobiMemDbPathResolver
|
|
27
|
-
} from "./chunk-
|
|
27
|
+
} from "./chunk-GA2ZZERU.js";
|
|
28
28
|
import {
|
|
29
29
|
nexusDataPath
|
|
30
30
|
} from "./chunk-CH7QIDHQ.js";
|
|
@@ -5612,4 +5612,4 @@ export {
|
|
|
5612
5612
|
reinitializeMemoryBackends,
|
|
5613
5613
|
ToolMemoryManager
|
|
5614
5614
|
};
|
|
5615
|
-
//# sourceMappingURL=chunk-
|
|
5615
|
+
//# sourceMappingURL=chunk-DAOUGMA5.js.map
|
|
@@ -2,7 +2,7 @@ import {
|
|
|
2
2
|
ConfigError,
|
|
3
3
|
err,
|
|
4
4
|
ok
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-GA2ZZERU.js";
|
|
6
6
|
|
|
7
7
|
// src/adapters/sdk/types.ts
|
|
8
8
|
var PROVIDER_ENV_KEYS = {
|
|
@@ -117,4 +117,4 @@ export {
|
|
|
117
117
|
CUSTOM_API_ALLOW_PRIVATE_ENV,
|
|
118
118
|
validateCustomApiBaseUrl
|
|
119
119
|
};
|
|
120
|
-
//# sourceMappingURL=chunk-
|
|
120
|
+
//# sourceMappingURL=chunk-FXPDPPYR.js.map
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import {
|
|
2
2
|
CliCircuitBreaker,
|
|
3
3
|
DEFAULT_CIRCUIT_BREAKER_CONFIG
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-4PWBF3NC.js";
|
|
5
5
|
import {
|
|
6
6
|
generateHyphenId
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-KSMYBMM6.js";
|
|
8
8
|
import {
|
|
9
9
|
CLI_SUBPROCESS_TIMEOUTS,
|
|
10
10
|
CLI_TIMEOUTS,
|
|
@@ -25,9 +25,11 @@ import {
|
|
|
25
25
|
getOutcomeStore,
|
|
26
26
|
getRandomProvider,
|
|
27
27
|
getTimeProvider,
|
|
28
|
+
isDynamicModelsEnabled,
|
|
28
29
|
isRateLimitText,
|
|
30
|
+
loadModelsDevSnapshot,
|
|
29
31
|
ok
|
|
30
|
-
} from "./chunk-
|
|
32
|
+
} from "./chunk-GA2ZZERU.js";
|
|
31
33
|
|
|
32
34
|
// src/cli-adapters/subprocess-adapter.ts
|
|
33
35
|
import { spawn } from "child_process";
|
|
@@ -382,8 +384,8 @@ var BaseCliAdapter = class {
|
|
|
382
384
|
initialized = false;
|
|
383
385
|
lastHealthCheck;
|
|
384
386
|
cachedVersion;
|
|
385
|
-
constructor(
|
|
386
|
-
this.logger =
|
|
387
|
+
constructor(logger6) {
|
|
388
|
+
this.logger = logger6 ?? createLogger({ component: "cli-adapter" });
|
|
387
389
|
}
|
|
388
390
|
/**
|
|
389
391
|
* Initializes the capacity tracker.
|
|
@@ -1403,6 +1405,36 @@ var ClaudeResponseParser = class {
|
|
|
1403
1405
|
}
|
|
1404
1406
|
};
|
|
1405
1407
|
|
|
1408
|
+
// src/config/models-dev-by-vendor.ts
|
|
1409
|
+
var logger2 = createLogger({ component: "models-dev-by-vendor" });
|
|
1410
|
+
var CLI_TO_MODELSDEV_VENDOR = {
|
|
1411
|
+
claude: "anthropic",
|
|
1412
|
+
codex: "openai",
|
|
1413
|
+
gemini: "google"
|
|
1414
|
+
};
|
|
1415
|
+
var cached = null;
|
|
1416
|
+
function loadEntries() {
|
|
1417
|
+
if (cached !== null) return cached;
|
|
1418
|
+
try {
|
|
1419
|
+
const { entries } = loadModelsDevSnapshot();
|
|
1420
|
+
cached = entries.map((e) => ({ id: e.id, vendor: e.vendor }));
|
|
1421
|
+
} catch (error) {
|
|
1422
|
+
logger2.debug("models.dev snapshot load failed; enumeration empty", {
|
|
1423
|
+
error: error instanceof Error ? error.message : String(error)
|
|
1424
|
+
});
|
|
1425
|
+
cached = [];
|
|
1426
|
+
}
|
|
1427
|
+
return cached;
|
|
1428
|
+
}
|
|
1429
|
+
function listModelsByVendor(vendor) {
|
|
1430
|
+
return loadEntries().filter((e) => e.vendor === vendor).map((e) => ({ id: e.id }));
|
|
1431
|
+
}
|
|
1432
|
+
function listModelsForCli(cliName) {
|
|
1433
|
+
const vendor = CLI_TO_MODELSDEV_VENDOR[cliName];
|
|
1434
|
+
if (vendor === void 0) return [];
|
|
1435
|
+
return listModelsByVendor(vendor).map((m) => ({ id: m.id, provider: vendor }));
|
|
1436
|
+
}
|
|
1437
|
+
|
|
1406
1438
|
// src/cli-adapters/adapters/claude-adapter.ts
|
|
1407
1439
|
var MODEL_TO_CLI_ALIAS = buildClaudeAliasMap();
|
|
1408
1440
|
function buildClaudeAliasMap() {
|
|
@@ -1428,6 +1460,14 @@ var ClaudeCliAdapter = class extends SubprocessCliAdapter {
|
|
|
1428
1460
|
super(options?.logger);
|
|
1429
1461
|
this.model = options?.model ?? getCliModelName(getDefaultModelForCli("claude"));
|
|
1430
1462
|
}
|
|
1463
|
+
/**
|
|
1464
|
+
* Key-free model enumeration (#3405): the claude CLI has no list-models
|
|
1465
|
+
* command and its OAuth token can't call /v1/models, so we enumerate the
|
|
1466
|
+
* vendor's models from the models.dev snapshot. Existence only.
|
|
1467
|
+
*/
|
|
1468
|
+
listModels() {
|
|
1469
|
+
return Promise.resolve(listModelsForCli(this.name));
|
|
1470
|
+
}
|
|
1431
1471
|
/**
|
|
1432
1472
|
* Gets Claude model information.
|
|
1433
1473
|
* `buildModelInfo` matches `cliModelName`, `cliAlias`, and `aliases[]` —
|
|
@@ -1502,10 +1542,10 @@ function aggregateModelTokens(models) {
|
|
|
1502
1542
|
if (tokens === null) continue;
|
|
1503
1543
|
const input = extractNumberField(tokens, "input");
|
|
1504
1544
|
const candidates = extractNumberField(tokens, "candidates");
|
|
1505
|
-
const
|
|
1545
|
+
const cached2 = extractNumberField(tokens, "cached");
|
|
1506
1546
|
if (input !== null) totalInput += input;
|
|
1507
1547
|
if (candidates !== null) totalOutput += candidates;
|
|
1508
|
-
if (
|
|
1548
|
+
if (cached2 !== null) totalCached += cached2;
|
|
1509
1549
|
}
|
|
1510
1550
|
return { input: totalInput, output: totalOutput, cached: totalCached };
|
|
1511
1551
|
}
|
|
@@ -1797,6 +1837,10 @@ var GeminiCliAdapter = class extends SubprocessCliAdapter {
|
|
|
1797
1837
|
this.circuitBreaker = null;
|
|
1798
1838
|
}
|
|
1799
1839
|
}
|
|
1840
|
+
/** Key-free model enumeration via the models.dev snapshot (#3405). */
|
|
1841
|
+
listModels() {
|
|
1842
|
+
return Promise.resolve(listModelsForCli(this.name));
|
|
1843
|
+
}
|
|
1800
1844
|
/**
|
|
1801
1845
|
* Gets Gemini model information.
|
|
1802
1846
|
* Resolves from canonical registry when possible, falls back to legacy lookup.
|
|
@@ -1933,7 +1977,7 @@ import { tmpdir as tmpdir2 } from "os";
|
|
|
1933
1977
|
import { join as join2 } from "path";
|
|
1934
1978
|
|
|
1935
1979
|
// src/cli-adapters/parsers/codex-parser.ts
|
|
1936
|
-
var
|
|
1980
|
+
var logger3 = createLogger({ component: "codex-parser" });
|
|
1937
1981
|
var CodexResponseParser = class {
|
|
1938
1982
|
name = "codex-parser";
|
|
1939
1983
|
supportedVersionRange = ">=0.70.0 <1.0.0";
|
|
@@ -1985,7 +2029,7 @@ var CodexResponseParser = class {
|
|
|
1985
2029
|
if (usage !== null) setUsage(usage);
|
|
1986
2030
|
}
|
|
1987
2031
|
} catch {
|
|
1988
|
-
|
|
2032
|
+
logger3.debug("Skipped malformed NDJSON line", { snippet: line.slice(0, 100) });
|
|
1989
2033
|
}
|
|
1990
2034
|
}
|
|
1991
2035
|
/**
|
|
@@ -2014,7 +2058,7 @@ var CodexResponseParser = class {
|
|
|
2014
2058
|
return this.extractUsageFromEvent(record);
|
|
2015
2059
|
}
|
|
2016
2060
|
} catch {
|
|
2017
|
-
|
|
2061
|
+
logger3.debug("Skipped malformed NDJSON line", { snippet: line.slice(0, 100) });
|
|
2018
2062
|
continue;
|
|
2019
2063
|
}
|
|
2020
2064
|
}
|
|
@@ -2038,7 +2082,7 @@ var CodexResponseParser = class {
|
|
|
2038
2082
|
}
|
|
2039
2083
|
}
|
|
2040
2084
|
} catch {
|
|
2041
|
-
|
|
2085
|
+
logger3.debug("Skipped malformed NDJSON line", { snippet: line.slice(0, 100) });
|
|
2042
2086
|
continue;
|
|
2043
2087
|
}
|
|
2044
2088
|
}
|
|
@@ -2112,6 +2156,10 @@ var CodexCliAdapter = class extends SubprocessCliAdapter {
|
|
|
2112
2156
|
super(options?.logger);
|
|
2113
2157
|
this.model = options?.model ?? getCliModelName(getDefaultModelForCli("codex"));
|
|
2114
2158
|
}
|
|
2159
|
+
/** Key-free model enumeration via the models.dev snapshot (#3405). */
|
|
2160
|
+
listModels() {
|
|
2161
|
+
return Promise.resolve(listModelsForCli(this.name));
|
|
2162
|
+
}
|
|
2115
2163
|
/**
|
|
2116
2164
|
* Gets Codex model information.
|
|
2117
2165
|
* Resolves from canonical registry when possible, falls back to legacy lookup.
|
|
@@ -2365,7 +2413,7 @@ var CodexMcpAdapter = class extends BaseCliAdapter {
|
|
|
2365
2413
|
import { execFile } from "child_process";
|
|
2366
2414
|
|
|
2367
2415
|
// src/cli-adapters/parsers/opencode-parser.ts
|
|
2368
|
-
var
|
|
2416
|
+
var logger4 = createLogger({ component: "opencode-parser" });
|
|
2369
2417
|
var PLAINTEXT_MIN_LENGTH = 10;
|
|
2370
2418
|
function looksLikeNdjson(text) {
|
|
2371
2419
|
const lines = text.split("\n").filter((l) => l.trim() !== "");
|
|
@@ -2435,7 +2483,7 @@ var OpenCodeResponseParser = class {
|
|
|
2435
2483
|
state.usage
|
|
2436
2484
|
);
|
|
2437
2485
|
}
|
|
2438
|
-
|
|
2486
|
+
logger4.debug("No NDJSON content extracted, trying JSON fallback", {
|
|
2439
2487
|
rawLength: raw.length,
|
|
2440
2488
|
lineCount,
|
|
2441
2489
|
hasStepEvents: state.hasStepEvents,
|
|
@@ -2458,7 +2506,7 @@ var OpenCodeResponseParser = class {
|
|
|
2458
2506
|
extractResponse(raw) {
|
|
2459
2507
|
const parsed = this.parse(raw);
|
|
2460
2508
|
if (parsed === null || parsed.content === "") {
|
|
2461
|
-
|
|
2509
|
+
logger4.debug("extractResponse returned null", {
|
|
2462
2510
|
rawLength: raw.length,
|
|
2463
2511
|
snippet: raw.slice(0, 100),
|
|
2464
2512
|
parsedNull: parsed === null
|
|
@@ -2532,7 +2580,7 @@ var OpenCodeResponseParser = class {
|
|
|
2532
2580
|
this.processLegacyEvent(record, collectors.contentParts, setSessionId, setUsage);
|
|
2533
2581
|
return false;
|
|
2534
2582
|
} catch {
|
|
2535
|
-
|
|
2583
|
+
logger4.debug("Skipped malformed NDJSON line", {
|
|
2536
2584
|
lineNumber: lineIndex + 1,
|
|
2537
2585
|
snippet: line.slice(0, 100)
|
|
2538
2586
|
});
|
|
@@ -2573,7 +2621,7 @@ var OpenCodeResponseParser = class {
|
|
|
2573
2621
|
if (errorObj === null) return;
|
|
2574
2622
|
const data = asRecord(errorObj.data);
|
|
2575
2623
|
const message = data !== null && typeof data.message === "string" ? data.message : typeof errorObj.name === "string" ? errorObj.name : "Unknown error";
|
|
2576
|
-
|
|
2624
|
+
logger4.warn("OpenCode returned error event", { message });
|
|
2577
2625
|
errorMessages.push(message);
|
|
2578
2626
|
}
|
|
2579
2627
|
/** Processes legacy assumed event types. */
|
|
@@ -2685,17 +2733,17 @@ var OpenCodeResponseParser = class {
|
|
|
2685
2733
|
parsePlaintext(raw, hasAnyRecognizedEvent) {
|
|
2686
2734
|
const trimmed = raw.trim();
|
|
2687
2735
|
if (trimmed.length < PLAINTEXT_MIN_LENGTH) {
|
|
2688
|
-
|
|
2736
|
+
logger4.debug("Plaintext fallback rejected: too short", { length: trimmed.length });
|
|
2689
2737
|
return null;
|
|
2690
2738
|
}
|
|
2691
2739
|
if (looksLikeNdjson(trimmed)) {
|
|
2692
2740
|
if (hasAnyRecognizedEvent) {
|
|
2693
|
-
|
|
2741
|
+
logger4.debug("Plaintext fallback rejected: recognized NDJSON with no content", {
|
|
2694
2742
|
length: trimmed.length
|
|
2695
2743
|
});
|
|
2696
2744
|
return null;
|
|
2697
2745
|
}
|
|
2698
|
-
|
|
2746
|
+
logger4.debug("Plaintext fallback: accepting malformed NDJSON as text", {
|
|
2699
2747
|
length: trimmed.length
|
|
2700
2748
|
});
|
|
2701
2749
|
}
|
|
@@ -2718,8 +2766,41 @@ var OpenCodeResponseParser = class {
|
|
|
2718
2766
|
}
|
|
2719
2767
|
};
|
|
2720
2768
|
|
|
2769
|
+
// src/config/resolve-live-model.ts
|
|
2770
|
+
function splitTier(id) {
|
|
2771
|
+
const colon = id.indexOf(":");
|
|
2772
|
+
return colon >= 0 ? { base: id.slice(0, colon), tier: id.slice(colon) } : { base: id, tier: "" };
|
|
2773
|
+
}
|
|
2774
|
+
function isTokenBoundaryPrefix(prefix, full) {
|
|
2775
|
+
if (prefix.length > full.length || !full.startsWith(prefix)) return false;
|
|
2776
|
+
if (full.length === prefix.length) return true;
|
|
2777
|
+
const next = full[prefix.length];
|
|
2778
|
+
return next === "-" || next === "/";
|
|
2779
|
+
}
|
|
2780
|
+
function resolveLiveModelId(configured, available) {
|
|
2781
|
+
const set = available instanceof Set ? available : new Set(available);
|
|
2782
|
+
if (set.size === 0 || set.has(configured)) return configured;
|
|
2783
|
+
const slash = configured.indexOf("/");
|
|
2784
|
+
const providerPrefix = slash > 0 ? configured.slice(0, slash + 1) : "";
|
|
2785
|
+
const cfg = splitTier(configured);
|
|
2786
|
+
const candidates = [...set].filter((c) => providerPrefix === "" || c.startsWith(providerPrefix)).map((c) => splitTier(c)).filter((cand) => isTokenBoundaryPrefix(cand.base, cfg.base)).map((cand) => ({
|
|
2787
|
+
id: cand.base + cand.tier,
|
|
2788
|
+
baseLen: cand.base.length,
|
|
2789
|
+
tierMatch: cand.tier === cfg.tier
|
|
2790
|
+
}));
|
|
2791
|
+
if (candidates.length === 0) return configured;
|
|
2792
|
+
candidates.sort(
|
|
2793
|
+
(a, b) => b.baseLen - a.baseLen || // most-specific simplification (closest to configured)
|
|
2794
|
+
Number(b.tierMatch) - Number(a.tierMatch) || // matching :free / paid tier
|
|
2795
|
+
a.id.length - b.id.length || // shorter overall
|
|
2796
|
+
(a.id < b.id ? -1 : a.id > b.id ? 1 : 0)
|
|
2797
|
+
// lexicographic — fully deterministic
|
|
2798
|
+
);
|
|
2799
|
+
return candidates[0]?.id ?? configured;
|
|
2800
|
+
}
|
|
2801
|
+
|
|
2721
2802
|
// src/cli-adapters/adapters/opencode-adapter.ts
|
|
2722
|
-
var
|
|
2803
|
+
var logger5 = createLogger({ component: "opencode-adapter" });
|
|
2723
2804
|
var ALLOWED_VARIANTS = ["high", "max", "minimal"];
|
|
2724
2805
|
var MODEL_TO_CLI_NAME = buildOpenCodeAliasMap();
|
|
2725
2806
|
function buildOpenCodeAliasMap() {
|
|
@@ -2746,7 +2827,7 @@ function probeAvailableModels() {
|
|
|
2746
2827
|
probePromise = new Promise((resolve) => {
|
|
2747
2828
|
execFile("opencode", ["models"], { timeout: PROBE_TIMEOUT_MS }, (error, stdout) => {
|
|
2748
2829
|
if (error !== null || stdout.trim() === "") {
|
|
2749
|
-
|
|
2830
|
+
logger5.debug("Failed to probe OpenCode models, will omit --model flag", {
|
|
2750
2831
|
error: error?.message
|
|
2751
2832
|
});
|
|
2752
2833
|
cachedModels = /* @__PURE__ */ new Set();
|
|
@@ -2756,7 +2837,7 @@ function probeAvailableModels() {
|
|
|
2756
2837
|
const models = new Set(
|
|
2757
2838
|
stdout.trim().split("\n").map((l) => l.trim()).filter((l) => l.length > 0)
|
|
2758
2839
|
);
|
|
2759
|
-
|
|
2840
|
+
logger5.debug("Probed OpenCode models", { count: models.size });
|
|
2760
2841
|
cachedModels = models;
|
|
2761
2842
|
resolve(cachedModels);
|
|
2762
2843
|
});
|
|
@@ -2771,7 +2852,7 @@ function warnIfAnthropicProvider(models) {
|
|
|
2771
2852
|
(m) => ANTHROPIC_MODEL_PATTERNS.some((p) => m.toLowerCase().includes(p))
|
|
2772
2853
|
);
|
|
2773
2854
|
if (anthropicModels.length > 0) {
|
|
2774
|
-
|
|
2855
|
+
logger5.warn(
|
|
2775
2856
|
"OpenCode has Anthropic/Claude models configured. Ensure these use a SEPARATE API key from console.anthropic.com, NOT a Claude Code subscription key (which is restricted to Claude Code only).",
|
|
2776
2857
|
{ detectedModels: anthropicModels }
|
|
2777
2858
|
);
|
|
@@ -2817,14 +2898,24 @@ var OpenCodeCliAdapter = class extends SubprocessCliAdapter {
|
|
|
2817
2898
|
if (this.availableModels === void 0 || this.availableModels.size === 0) return false;
|
|
2818
2899
|
return this.availableModels.has(cliModel);
|
|
2819
2900
|
}
|
|
2820
|
-
/** Appends --model if the resolved model is available (#1402). */
|
|
2901
|
+
/** Appends --model if the resolved model is available (#1402, #3407). */
|
|
2821
2902
|
appendModelArg(args, task) {
|
|
2822
2903
|
const internalModel = task.model ?? this.model;
|
|
2823
|
-
|
|
2904
|
+
let cliModel = resolveOpenCodeModel(internalModel);
|
|
2905
|
+
if (!this.isModelAvailable(cliModel) && isDynamicModelsEnabled() && this.availableModels !== void 0) {
|
|
2906
|
+
const resolved = resolveLiveModelId(cliModel, this.availableModels);
|
|
2907
|
+
if (resolved !== cliModel) {
|
|
2908
|
+
logger5.debug("Resolved stale model to live alias (#3407)", {
|
|
2909
|
+
from: cliModel,
|
|
2910
|
+
to: resolved
|
|
2911
|
+
});
|
|
2912
|
+
cliModel = resolved;
|
|
2913
|
+
}
|
|
2914
|
+
}
|
|
2824
2915
|
if (this.isModelAvailable(cliModel)) {
|
|
2825
2916
|
args.push("--model", cliModel);
|
|
2826
2917
|
} else {
|
|
2827
|
-
|
|
2918
|
+
logger5.debug("Model not available, using OpenCode default", {
|
|
2828
2919
|
requested: cliModel,
|
|
2829
2920
|
available: this.availableModels?.size ?? 0
|
|
2830
2921
|
});
|
|
@@ -3229,9 +3320,9 @@ function createCodexAdapter(transport, options) {
|
|
|
3229
3320
|
}
|
|
3230
3321
|
return new CodexMcpAdapter(options);
|
|
3231
3322
|
}
|
|
3232
|
-
function createAllAdapters(
|
|
3323
|
+
function createAllAdapters(logger6, codexTransport = "mcp") {
|
|
3233
3324
|
const adapters = /* @__PURE__ */ new Map();
|
|
3234
|
-
const options =
|
|
3325
|
+
const options = logger6 !== void 0 ? { logger: logger6 } : void 0;
|
|
3235
3326
|
adapters.set("claude", new ClaudeCliAdapter(options));
|
|
3236
3327
|
adapters.set("gemini", new GeminiCliAdapter(options));
|
|
3237
3328
|
adapters.set("codex", createCodexAdapter(codexTransport, options ?? {}));
|
|
@@ -3240,9 +3331,9 @@ function createAllAdapters(logger5, codexTransport = "mcp") {
|
|
|
3240
3331
|
}
|
|
3241
3332
|
async function isCliAvailable(cli, cache) {
|
|
3242
3333
|
if (cache !== void 0) {
|
|
3243
|
-
const
|
|
3244
|
-
if (
|
|
3245
|
-
return
|
|
3334
|
+
const cached2 = cache.get(cli);
|
|
3335
|
+
if (cached2 !== void 0) {
|
|
3336
|
+
return cached2.healthy;
|
|
3246
3337
|
}
|
|
3247
3338
|
}
|
|
3248
3339
|
try {
|
|
@@ -3327,4 +3418,4 @@ export {
|
|
|
3327
3418
|
isCliAvailable,
|
|
3328
3419
|
getAvailableClis
|
|
3329
3420
|
};
|
|
3330
|
-
//# sourceMappingURL=chunk-
|
|
3421
|
+
//# sourceMappingURL=chunk-G2FTEZDY.js.map
|