nexus-agents 8.131.3 → 8.131.5
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/{ast-rule-runner-3M77VFHJ.js → ast-rule-runner-OK5SP2SI.js} +3 -3
- package/dist/{child-mcp-config-NHSUFBNN.js → child-mcp-config-Y3IZNZDM.js} +2 -2
- package/dist/{chunk-JJU2GHK7.js → chunk-2L3IWNNW.js} +9 -9
- package/dist/{chunk-AAE7F4CB.js → chunk-2LLIATHO.js} +3 -3
- package/dist/{chunk-ERHQVKRC.js → chunk-2TZENGN3.js} +5 -5
- package/dist/{chunk-TRIA7Q2H.js → chunk-3EFUVKRE.js} +2 -2
- package/dist/{chunk-5XMXBSPY.js → chunk-6BGTOBJV.js} +12 -12
- package/dist/{chunk-HDDXP26H.js → chunk-6C4D4MOD.js} +3 -3
- package/dist/{chunk-QQH3KA5T.js → chunk-72DJDZNB.js} +2 -2
- package/dist/{chunk-ZXMZMMBV.js → chunk-7GFZNDCZ.js} +4 -4
- package/dist/{chunk-M7FO5W7A.js → chunk-ABYYNREH.js} +5 -5
- package/dist/{chunk-TN5SDJYU.js → chunk-AKO22BIS.js} +5 -5
- package/dist/{chunk-GZM746JQ.js → chunk-B3MCT453.js} +6 -6
- package/dist/{chunk-CYATMZW7.js → chunk-BBCR7MP5.js} +2 -2
- package/dist/{chunk-B2LLOTB2.js → chunk-BWCAK56M.js} +5 -5
- package/dist/{chunk-EQTKZHO6.js → chunk-CPLMJP53.js} +2 -2
- package/dist/{chunk-PS7ZNSC6.js → chunk-DN4X2ZDO.js} +2 -2
- package/dist/{chunk-VL65KGVM.js → chunk-EKMH7ECT.js} +7 -7
- package/dist/{chunk-3MWUYHEE.js → chunk-EKRCJEA5.js} +2 -2
- package/dist/{chunk-UQPHTTMO.js → chunk-HFKQXKP3.js} +3 -3
- package/dist/{chunk-Q4JD3ZZP.js → chunk-HK4JMKUH.js} +4 -4
- package/dist/{chunk-VVQXRBA7.js → chunk-LRD7TNMD.js} +116 -65
- package/dist/chunk-LRD7TNMD.js.map +1 -0
- package/dist/{chunk-G5F44YKP.js → chunk-MN5YUEEJ.js} +2 -2
- package/dist/{chunk-CGKENW3F.js → chunk-OCD5QFUN.js} +4 -4
- package/dist/{chunk-2MWL47YX.js → chunk-OGAFETBY.js} +2 -2
- package/dist/{chunk-YN6EO4QO.js → chunk-OONBTXWQ.js} +2 -2
- package/dist/{chunk-P7F52452.js → chunk-SFGBHVKV.js} +2 -2
- package/dist/{chunk-4FYLSRZJ.js → chunk-SLRTWAQY.js} +4 -4
- package/dist/{chunk-ERHP5N36.js → chunk-TYLCUUSS.js} +2 -2
- package/dist/{chunk-R4AH6LIE.js → chunk-UO22VHII.js} +2 -2
- package/dist/{chunk-FB4ZIOYS.js → chunk-UXG3TE3G.js} +11 -11
- package/dist/{chunk-RWWPMTJK.js → chunk-VZVTHZPY.js} +3 -3
- package/dist/{chunk-T4WUK562.js → chunk-XN4Y3ALJ.js} +2 -2
- package/dist/{chunk-UETCXCAS.js → chunk-XRHQVWJC.js} +57 -44
- package/dist/{chunk-UETCXCAS.js.map → chunk-XRHQVWJC.js.map} +1 -1
- package/dist/{chunk-4AP64XCN.js → chunk-YOL6VN3A.js} +2 -2
- package/dist/{chunk-HVVZSJEY.js → chunk-ZRQFTVOQ.js} +3 -3
- package/dist/{chunk-N3PSIMXT.js → chunk-ZTTJUML2.js} +2 -2
- package/dist/{cli-circuit-breaker-EP7H2ZTN.js → cli-circuit-breaker-P463NR3T.js} +3 -3
- package/dist/cli.js +119 -57
- package/dist/cli.js.map +1 -1
- package/dist/{composite-router-VJVHYM2O.js → composite-router-V4ZLX3XA.js} +2 -2
- package/dist/{consensus-vote-6ISHSQ73.js → consensus-vote-AO5355WA.js} +17 -17
- package/dist/{context-retriever-TG2SH7CT.js → context-retriever-ZSQKNX33.js} +8 -8
- package/dist/{doctor-deep-IYUHW6T2.js → doctor-deep-WLR7DTZ5.js} +3 -3
- package/dist/{doctor-gateway-report-XOX6GIEL.js → doctor-gateway-report-CXXHUZBY.js} +8 -8
- package/dist/{doctor-live-GCXBUEPY.js → doctor-live-M52L6M2X.js} +11 -11
- package/dist/{expert-bridge-REZ6NY76.js → expert-bridge-SJ6NYJYS.js} +4 -4
- package/dist/{factory-35OY5YJ7.js → factory-6D76CHVA.js} +10 -10
- package/dist/{factory-7ETXZOGV.js → factory-U2CSSHJM.js} +5 -5
- package/dist/{improvement-review-S65JP2NY.js → improvement-review-XRUFNUJ5.js} +6 -6
- package/dist/index.d.ts +3 -7
- package/dist/index.js +32 -32
- package/dist/{init-opencode-SJZINN4S.js → init-opencode-NJAG467M.js} +6 -6
- package/dist/{issue-triage-SZRBPDAR.js → issue-triage-EK4IJ47O.js} +6 -6
- package/dist/{openai-compat-adapter-UW2Z4HF7.js → openai-compat-adapter-YNSNL2BR.js} +6 -6
- package/dist/{outcome-store-adapter-DZRQ77YG.js → outcome-store-adapter-BJVVKO2N.js} +2 -2
- package/dist/{pr-reviewer-helpers-5CGBGREQ.js → pr-reviewer-helpers-XO5GFVHN.js} +4 -4
- package/dist/{registry-command-NI3LIWQA.js → registry-command-RLUQMC4O.js} +2 -2
- package/dist/registry-command-RLUQMC4O.js.map +1 -0
- package/dist/{repo-security-plan-SKVL27H3.js → repo-security-plan-2CJOCQFD.js} +3 -3
- package/dist/{research-helpers-synthesize-UADXNMID.js → research-helpers-synthesize-B2ZNHO23.js} +4 -4
- package/dist/{routing-memory-B5HYTZC7.js → routing-memory-7ZB2WATF.js} +2 -2
- package/dist/{session-memory-SWTWLYGY.js → session-memory-OL5G7ODY.js} +3 -3
- package/dist/{setup-config-37EXEYOM.js → setup-config-HMJTMNKL.js} +3 -3
- package/dist/{setup-custom-api-CVI7NLPW.js → setup-custom-api-23RWZLDV.js} +4 -4
- package/dist/setup-data-dir-K76VIPTJ.js +33 -0
- package/dist/{tool-memory-AJIAJ2CN.js → tool-memory-ZKUDRRLA.js} +5 -5
- package/dist/{unified-registry-JHQ7UIS4.js → unified-registry-VQGN3IEU.js} +11 -11
- package/dist/{weather-report-KJ4X3HVU.js → weather-report-TV75JPE3.js} +2 -2
- package/package.json +1 -1
- package/dist/chunk-VVQXRBA7.js.map +0 -1
- package/dist/registry-command-NI3LIWQA.js.map +0 -1
- package/dist/setup-data-dir-EVVWRHY2.js +0 -33
- /package/dist/{ast-rule-runner-3M77VFHJ.js.map → ast-rule-runner-OK5SP2SI.js.map} +0 -0
- /package/dist/{child-mcp-config-NHSUFBNN.js.map → child-mcp-config-Y3IZNZDM.js.map} +0 -0
- /package/dist/{chunk-JJU2GHK7.js.map → chunk-2L3IWNNW.js.map} +0 -0
- /package/dist/{chunk-AAE7F4CB.js.map → chunk-2LLIATHO.js.map} +0 -0
- /package/dist/{chunk-ERHQVKRC.js.map → chunk-2TZENGN3.js.map} +0 -0
- /package/dist/{chunk-TRIA7Q2H.js.map → chunk-3EFUVKRE.js.map} +0 -0
- /package/dist/{chunk-5XMXBSPY.js.map → chunk-6BGTOBJV.js.map} +0 -0
- /package/dist/{chunk-HDDXP26H.js.map → chunk-6C4D4MOD.js.map} +0 -0
- /package/dist/{chunk-QQH3KA5T.js.map → chunk-72DJDZNB.js.map} +0 -0
- /package/dist/{chunk-ZXMZMMBV.js.map → chunk-7GFZNDCZ.js.map} +0 -0
- /package/dist/{chunk-M7FO5W7A.js.map → chunk-ABYYNREH.js.map} +0 -0
- /package/dist/{chunk-TN5SDJYU.js.map → chunk-AKO22BIS.js.map} +0 -0
- /package/dist/{chunk-GZM746JQ.js.map → chunk-B3MCT453.js.map} +0 -0
- /package/dist/{chunk-CYATMZW7.js.map → chunk-BBCR7MP5.js.map} +0 -0
- /package/dist/{chunk-B2LLOTB2.js.map → chunk-BWCAK56M.js.map} +0 -0
- /package/dist/{chunk-EQTKZHO6.js.map → chunk-CPLMJP53.js.map} +0 -0
- /package/dist/{chunk-PS7ZNSC6.js.map → chunk-DN4X2ZDO.js.map} +0 -0
- /package/dist/{chunk-VL65KGVM.js.map → chunk-EKMH7ECT.js.map} +0 -0
- /package/dist/{chunk-3MWUYHEE.js.map → chunk-EKRCJEA5.js.map} +0 -0
- /package/dist/{chunk-UQPHTTMO.js.map → chunk-HFKQXKP3.js.map} +0 -0
- /package/dist/{chunk-Q4JD3ZZP.js.map → chunk-HK4JMKUH.js.map} +0 -0
- /package/dist/{chunk-G5F44YKP.js.map → chunk-MN5YUEEJ.js.map} +0 -0
- /package/dist/{chunk-CGKENW3F.js.map → chunk-OCD5QFUN.js.map} +0 -0
- /package/dist/{chunk-2MWL47YX.js.map → chunk-OGAFETBY.js.map} +0 -0
- /package/dist/{chunk-YN6EO4QO.js.map → chunk-OONBTXWQ.js.map} +0 -0
- /package/dist/{chunk-P7F52452.js.map → chunk-SFGBHVKV.js.map} +0 -0
- /package/dist/{chunk-4FYLSRZJ.js.map → chunk-SLRTWAQY.js.map} +0 -0
- /package/dist/{chunk-ERHP5N36.js.map → chunk-TYLCUUSS.js.map} +0 -0
- /package/dist/{chunk-R4AH6LIE.js.map → chunk-UO22VHII.js.map} +0 -0
- /package/dist/{chunk-FB4ZIOYS.js.map → chunk-UXG3TE3G.js.map} +0 -0
- /package/dist/{chunk-RWWPMTJK.js.map → chunk-VZVTHZPY.js.map} +0 -0
- /package/dist/{chunk-T4WUK562.js.map → chunk-XN4Y3ALJ.js.map} +0 -0
- /package/dist/{chunk-4AP64XCN.js.map → chunk-YOL6VN3A.js.map} +0 -0
- /package/dist/{chunk-HVVZSJEY.js.map → chunk-ZRQFTVOQ.js.map} +0 -0
- /package/dist/{chunk-N3PSIMXT.js.map → chunk-ZTTJUML2.js.map} +0 -0
- /package/dist/{cli-circuit-breaker-EP7H2ZTN.js.map → cli-circuit-breaker-P463NR3T.js.map} +0 -0
- /package/dist/{composite-router-VJVHYM2O.js.map → composite-router-V4ZLX3XA.js.map} +0 -0
- /package/dist/{consensus-vote-6ISHSQ73.js.map → consensus-vote-AO5355WA.js.map} +0 -0
- /package/dist/{context-retriever-TG2SH7CT.js.map → context-retriever-ZSQKNX33.js.map} +0 -0
- /package/dist/{doctor-deep-IYUHW6T2.js.map → doctor-deep-WLR7DTZ5.js.map} +0 -0
- /package/dist/{doctor-gateway-report-XOX6GIEL.js.map → doctor-gateway-report-CXXHUZBY.js.map} +0 -0
- /package/dist/{doctor-live-GCXBUEPY.js.map → doctor-live-M52L6M2X.js.map} +0 -0
- /package/dist/{expert-bridge-REZ6NY76.js.map → expert-bridge-SJ6NYJYS.js.map} +0 -0
- /package/dist/{factory-35OY5YJ7.js.map → factory-6D76CHVA.js.map} +0 -0
- /package/dist/{factory-7ETXZOGV.js.map → factory-U2CSSHJM.js.map} +0 -0
- /package/dist/{improvement-review-S65JP2NY.js.map → improvement-review-XRUFNUJ5.js.map} +0 -0
- /package/dist/{init-opencode-SJZINN4S.js.map → init-opencode-NJAG467M.js.map} +0 -0
- /package/dist/{issue-triage-SZRBPDAR.js.map → issue-triage-EK4IJ47O.js.map} +0 -0
- /package/dist/{openai-compat-adapter-UW2Z4HF7.js.map → openai-compat-adapter-YNSNL2BR.js.map} +0 -0
- /package/dist/{outcome-store-adapter-DZRQ77YG.js.map → outcome-store-adapter-BJVVKO2N.js.map} +0 -0
- /package/dist/{pr-reviewer-helpers-5CGBGREQ.js.map → pr-reviewer-helpers-XO5GFVHN.js.map} +0 -0
- /package/dist/{repo-security-plan-SKVL27H3.js.map → repo-security-plan-2CJOCQFD.js.map} +0 -0
- /package/dist/{research-helpers-synthesize-UADXNMID.js.map → research-helpers-synthesize-B2ZNHO23.js.map} +0 -0
- /package/dist/{routing-memory-B5HYTZC7.js.map → routing-memory-7ZB2WATF.js.map} +0 -0
- /package/dist/{session-memory-SWTWLYGY.js.map → session-memory-OL5G7ODY.js.map} +0 -0
- /package/dist/{setup-config-37EXEYOM.js.map → setup-config-HMJTMNKL.js.map} +0 -0
- /package/dist/{setup-custom-api-CVI7NLPW.js.map → setup-custom-api-23RWZLDV.js.map} +0 -0
- /package/dist/{setup-data-dir-EVVWRHY2.js.map → setup-data-dir-K76VIPTJ.js.map} +0 -0
- /package/dist/{tool-memory-AJIAJ2CN.js.map → tool-memory-ZKUDRRLA.js.map} +0 -0
- /package/dist/{unified-registry-JHQ7UIS4.js.map → unified-registry-VQGN3IEU.js.map} +0 -0
- /package/dist/{weather-report-KJ4X3HVU.js.map → weather-report-TV75JPE3.js.map} +0 -0
|
@@ -2365,7 +2365,12 @@ function loadManifestFile(path, logger16) {
|
|
|
2365
2365
|
if (!exists) {
|
|
2366
2366
|
return { entries: [], rejections: [], path, status: "missing" };
|
|
2367
2367
|
}
|
|
2368
|
-
|
|
2368
|
+
let stat;
|
|
2369
|
+
try {
|
|
2370
|
+
stat = statSync(path);
|
|
2371
|
+
} catch (e) {
|
|
2372
|
+
return unreadableOrMissing(path, e, logger16);
|
|
2373
|
+
}
|
|
2369
2374
|
if (stat.size === 0) {
|
|
2370
2375
|
return { entries: [], rejections: [], path, status: "empty" };
|
|
2371
2376
|
}
|
|
@@ -2377,9 +2382,23 @@ function loadManifestFile(path, logger16) {
|
|
|
2377
2382
|
});
|
|
2378
2383
|
return { entries: [], rejections: [], path, status: "too-large" };
|
|
2379
2384
|
}
|
|
2380
|
-
|
|
2385
|
+
let raw;
|
|
2386
|
+
try {
|
|
2387
|
+
raw = readFileSync(path, "utf-8");
|
|
2388
|
+
} catch (e) {
|
|
2389
|
+
return unreadableOrMissing(path, e, logger16);
|
|
2390
|
+
}
|
|
2381
2391
|
return parseManifest(raw, path, logger16);
|
|
2382
2392
|
}
|
|
2393
|
+
function unreadableOrMissing(path, e, logger16) {
|
|
2394
|
+
const code = e instanceof Error && "code" in e ? e.code : void 0;
|
|
2395
|
+
if (code === "ENOENT") return { entries: [], rejections: [], path, status: "missing" };
|
|
2396
|
+
logger16.warn("Manifest overlay unreadable; skipping", {
|
|
2397
|
+
path,
|
|
2398
|
+
error: e instanceof Error ? e.message : String(e)
|
|
2399
|
+
});
|
|
2400
|
+
return { entries: [], rejections: [], path, status: "unreadable" };
|
|
2401
|
+
}
|
|
2383
2402
|
function parseManifest(raw, path, logger16) {
|
|
2384
2403
|
let parsed;
|
|
2385
2404
|
try {
|
|
@@ -2819,7 +2838,7 @@ function setDefaultRegistry(registry) {
|
|
|
2819
2838
|
}
|
|
2820
2839
|
async function reloadDefaultRegistry() {
|
|
2821
2840
|
globalRegistry = buildDefaultRegistry();
|
|
2822
|
-
const { resetGlobalRegistry } = await import("./unified-registry-
|
|
2841
|
+
const { resetGlobalRegistry } = await import("./unified-registry-VQGN3IEU.js");
|
|
2823
2842
|
resetGlobalRegistry();
|
|
2824
2843
|
return globalRegistry;
|
|
2825
2844
|
}
|
|
@@ -13248,7 +13267,7 @@ function getOutcomeStore() {
|
|
|
13248
13267
|
async function attachOutcomeStoreToRegistry(store) {
|
|
13249
13268
|
try {
|
|
13250
13269
|
const { getMemoryRegistry } = await import("./dist-RRRU2OKU.js");
|
|
13251
|
-
const { OutcomeStoreAdapter } = await import("./outcome-store-adapter-
|
|
13270
|
+
const { OutcomeStoreAdapter } = await import("./outcome-store-adapter-BJVVKO2N.js");
|
|
13252
13271
|
const { ensureSharedMemoryRegistry } = await import("./tool-memory-registry-adapters-FO6JVQSX.js");
|
|
13253
13272
|
ensureSharedMemoryRegistry();
|
|
13254
13273
|
getMemoryRegistry().attach("outcomes", new OutcomeStoreAdapter(store));
|
|
@@ -13482,18 +13501,8 @@ function generateSyntheticPriors() {
|
|
|
13482
13501
|
}
|
|
13483
13502
|
return priors;
|
|
13484
13503
|
}
|
|
13485
|
-
function
|
|
13486
|
-
const
|
|
13487
|
-
const store = getOutcomeStore();
|
|
13488
|
-
const existing = store.query();
|
|
13489
|
-
const hasSynthetic = existing.some((o) => o.qualitySignals?.includes(SYNTHETIC_MARKER) === true);
|
|
13490
|
-
if (hasSynthetic) {
|
|
13491
|
-
log.info("Warm-up skipped: synthetic outcomes already exist");
|
|
13492
|
-
return { seeded: 0, skipped: true, reason: "synthetic outcomes already exist" };
|
|
13493
|
-
}
|
|
13494
|
-
const priors = generateSyntheticPriors();
|
|
13495
|
-
const now = (/* @__PURE__ */ new Date()).toISOString();
|
|
13496
|
-
let seeded = 0;
|
|
13504
|
+
function buildSyntheticOutcomes(timestamp) {
|
|
13505
|
+
const outcomes = [];
|
|
13497
13506
|
for (const spec of TASK_SPECIALIZATION_MATRIX) {
|
|
13498
13507
|
for (const cli of CLI_NAMES2) {
|
|
13499
13508
|
let reward;
|
|
@@ -13504,21 +13513,34 @@ function runWarmUp(logger16) {
|
|
|
13504
13513
|
} else {
|
|
13505
13514
|
reward = OTHER_REWARD;
|
|
13506
13515
|
}
|
|
13507
|
-
|
|
13516
|
+
outcomes.push({
|
|
13508
13517
|
id: `synthetic-${cli}-${spec.category}`,
|
|
13509
13518
|
cli,
|
|
13510
13519
|
category: spec.category,
|
|
13511
13520
|
model: `${cli}-default`,
|
|
13512
13521
|
success: reward >= 0.5,
|
|
13513
13522
|
durationMs: 0,
|
|
13514
|
-
timestamp
|
|
13523
|
+
timestamp,
|
|
13515
13524
|
qualitySignals: [SYNTHETIC_MARKER],
|
|
13516
13525
|
source: "manual"
|
|
13517
|
-
};
|
|
13518
|
-
store.append(outcome);
|
|
13519
|
-
seeded++;
|
|
13526
|
+
});
|
|
13520
13527
|
}
|
|
13521
13528
|
}
|
|
13529
|
+
return outcomes;
|
|
13530
|
+
}
|
|
13531
|
+
function runWarmUp(logger16) {
|
|
13532
|
+
const log = logger16 ?? createLogger({ component: "warm-up" });
|
|
13533
|
+
const store = getOutcomeStore();
|
|
13534
|
+
const existing = store.query();
|
|
13535
|
+
const hasSynthetic = existing.some((o) => o.qualitySignals?.includes(SYNTHETIC_MARKER) === true);
|
|
13536
|
+
if (hasSynthetic) {
|
|
13537
|
+
log.info("Warm-up skipped: synthetic outcomes already exist");
|
|
13538
|
+
return { seeded: 0, skipped: true, reason: "synthetic outcomes already exist" };
|
|
13539
|
+
}
|
|
13540
|
+
const priors = generateSyntheticPriors();
|
|
13541
|
+
const outcomes = buildSyntheticOutcomes((/* @__PURE__ */ new Date()).toISOString());
|
|
13542
|
+
for (const outcome of outcomes) store.append(outcome);
|
|
13543
|
+
const seeded = outcomes.length;
|
|
13522
13544
|
log.info("LinUCB warm-up complete", {
|
|
13523
13545
|
seeded,
|
|
13524
13546
|
priors: Object.fromEntries(priors)
|
|
@@ -13526,6 +13548,75 @@ function runWarmUp(logger16) {
|
|
|
13526
13548
|
return { seeded, skipped: false };
|
|
13527
13549
|
}
|
|
13528
13550
|
|
|
13551
|
+
// src/cli-adapters/bandit-warm-start.ts
|
|
13552
|
+
var LOOKBACK_DAYS = 30;
|
|
13553
|
+
var LOOKBACK_MS = LOOKBACK_DAYS * 24 * 60 * 60 * 1e3;
|
|
13554
|
+
function warmStartBandit(bandit, logger16, options = {}) {
|
|
13555
|
+
const reconstructedAt = getTimeProvider().nowIso();
|
|
13556
|
+
let replayed = 0;
|
|
13557
|
+
let empiricalOutcomesReplayed = 0;
|
|
13558
|
+
let fallbackUsed = false;
|
|
13559
|
+
let fallbackOutcomesReplayed = 0;
|
|
13560
|
+
let status = "complete";
|
|
13561
|
+
try {
|
|
13562
|
+
if (isPersistenceEnabled()) {
|
|
13563
|
+
const since = new Date(getTimeProvider().now() - LOOKBACK_MS).toISOString();
|
|
13564
|
+
const outcomes = getOutcomeStore().query({ since, excludeQualitySignals: ["e2e-eval"] });
|
|
13565
|
+
if (outcomes.length > 0) {
|
|
13566
|
+
replayed = bandit.warmStart(outcomes);
|
|
13567
|
+
empiricalOutcomesReplayed = countEmpiricalOutcomes(outcomes, bandit.getArmNames());
|
|
13568
|
+
logger16.info("LinUCB warm-started from recent outcomes", {
|
|
13569
|
+
outcomesAvailable: outcomes.length,
|
|
13570
|
+
outcomesReplayed: replayed,
|
|
13571
|
+
lookbackDays: 30
|
|
13572
|
+
});
|
|
13573
|
+
}
|
|
13574
|
+
}
|
|
13575
|
+
bandit.seedPriors(generateSyntheticPriors(), replayed === 0 ? 3 : 1);
|
|
13576
|
+
if (replayed === 0) {
|
|
13577
|
+
fallbackUsed = true;
|
|
13578
|
+
const fallback = options.persist === false ? memoryFallback() : persistedFallback(logger16);
|
|
13579
|
+
if (fallback.outcomes !== void 0) {
|
|
13580
|
+
fallbackOutcomesReplayed = bandit.warmStart(fallback.outcomes);
|
|
13581
|
+
}
|
|
13582
|
+
logger16.info("LinUCB cold-start seeded from specialization matrix", {
|
|
13583
|
+
syntheticOutcomes: fallback.seeded
|
|
13584
|
+
});
|
|
13585
|
+
}
|
|
13586
|
+
} catch (error) {
|
|
13587
|
+
status = "failed";
|
|
13588
|
+
logger16.warn("LinUCB warm-start failed, starting cold", { error: getErrorMessage(error) });
|
|
13589
|
+
}
|
|
13590
|
+
return {
|
|
13591
|
+
reconstructedAt,
|
|
13592
|
+
outcomesReplayed: replayed,
|
|
13593
|
+
empiricalOutcomesReplayed,
|
|
13594
|
+
lookbackDays: LOOKBACK_DAYS,
|
|
13595
|
+
fallbackUsed,
|
|
13596
|
+
fallbackOutcomesReplayed,
|
|
13597
|
+
status
|
|
13598
|
+
};
|
|
13599
|
+
}
|
|
13600
|
+
function persistedFallback(logger16) {
|
|
13601
|
+
const result = runWarmUp(logger16);
|
|
13602
|
+
if (result.skipped) return { outcomes: void 0, seeded: result.seeded };
|
|
13603
|
+
const outcomes = getOutcomeStore().query({ excludeQualitySignals: ["e2e-eval"] });
|
|
13604
|
+
return { outcomes, seeded: result.seeded };
|
|
13605
|
+
}
|
|
13606
|
+
function memoryFallback() {
|
|
13607
|
+
const store = getOutcomeStore();
|
|
13608
|
+
const hasSynthetic = store.query().some((o) => o.qualitySignals?.includes(SYNTHETIC_MARKER) === true);
|
|
13609
|
+
if (hasSynthetic) return { outcomes: void 0, seeded: 0 };
|
|
13610
|
+
const synthetic = buildSyntheticOutcomes((/* @__PURE__ */ new Date()).toISOString());
|
|
13611
|
+
const stored = store.query({ excludeQualitySignals: ["e2e-eval"] });
|
|
13612
|
+
return { outcomes: [...stored, ...synthetic], seeded: synthetic.length };
|
|
13613
|
+
}
|
|
13614
|
+
function countEmpiricalOutcomes(outcomes, arms) {
|
|
13615
|
+
return outcomes.filter(
|
|
13616
|
+
(outcome) => arms.includes(outcome.cli) && outcome.qualitySignals?.includes(SYNTHETIC_MARKER) !== true
|
|
13617
|
+
).length;
|
|
13618
|
+
}
|
|
13619
|
+
|
|
13529
13620
|
// src/cli-adapters/composite-router-budget-feature.ts
|
|
13530
13621
|
function toBudgetConstraint(raw) {
|
|
13531
13622
|
const constraint = {};
|
|
@@ -19875,7 +19966,7 @@ var CompositeRouter = class _CompositeRouter {
|
|
|
19875
19966
|
if (this.config.enableTopsisRanking) this.topsisRouter = new TopsisRouter(topsisConfig);
|
|
19876
19967
|
if (this.config.enableLinUCBSelection && this.cliNames.length > 0) {
|
|
19877
19968
|
this.linucbBandit = new LinUCBBandit(this.cliNames, { alpha: this.config.linucbAlpha });
|
|
19878
|
-
this.
|
|
19969
|
+
warmStartBandit(this.linucbBandit, this.logger);
|
|
19879
19970
|
}
|
|
19880
19971
|
if (this.config.enableLatencyTracking) this.latencyTracker = new LatencyTracker(latencyConfig);
|
|
19881
19972
|
}
|
|
@@ -19938,47 +20029,6 @@ var CompositeRouter = class _CompositeRouter {
|
|
|
19938
20029
|
decisionPath: decision.stagesExecuted
|
|
19939
20030
|
});
|
|
19940
20031
|
}
|
|
19941
|
-
/** Warm-start LinUCB bandit from persisted outcomes (Issue #1015).
|
|
19942
|
-
* Uses a 30-day lookback window so stale outcomes don't override
|
|
19943
|
-
* routing changes like primaryCli specialization (#1667). */
|
|
19944
|
-
warmStartBandit() {
|
|
19945
|
-
if (this.linucbBandit === void 0) return;
|
|
19946
|
-
try {
|
|
19947
|
-
let replayed = 0;
|
|
19948
|
-
if (isPersistenceEnabled()) {
|
|
19949
|
-
const WARM_START_LOOKBACK_MS = 30 * 24 * 60 * 60 * 1e3;
|
|
19950
|
-
const since = new Date(getTimeProvider().now() - WARM_START_LOOKBACK_MS).toISOString();
|
|
19951
|
-
const outcomes = getOutcomeStore().query({
|
|
19952
|
-
since,
|
|
19953
|
-
excludeQualitySignals: ["e2e-eval"]
|
|
19954
|
-
});
|
|
19955
|
-
if (outcomes.length > 0) {
|
|
19956
|
-
replayed = this.linucbBandit.warmStart(outcomes);
|
|
19957
|
-
this.logger.info("LinUCB warm-started from recent outcomes", {
|
|
19958
|
-
outcomesAvailable: outcomes.length,
|
|
19959
|
-
outcomesReplayed: replayed,
|
|
19960
|
-
lookbackDays: 30
|
|
19961
|
-
});
|
|
19962
|
-
}
|
|
19963
|
-
}
|
|
19964
|
-
const priors = generateSyntheticPriors();
|
|
19965
|
-
this.linucbBandit.seedPriors(priors, replayed === 0 ? 3 : 1);
|
|
19966
|
-
if (replayed === 0) {
|
|
19967
|
-
const result = runWarmUp(this.logger);
|
|
19968
|
-
if (!result.skipped) {
|
|
19969
|
-
const outcomes = getOutcomeStore().query({ excludeQualitySignals: ["e2e-eval"] });
|
|
19970
|
-
this.linucbBandit.warmStart(outcomes);
|
|
19971
|
-
}
|
|
19972
|
-
this.logger.info("LinUCB cold-start seeded from specialization matrix", {
|
|
19973
|
-
syntheticOutcomes: result.seeded
|
|
19974
|
-
});
|
|
19975
|
-
}
|
|
19976
|
-
} catch (error) {
|
|
19977
|
-
this.logger.warn("LinUCB warm-start failed, starting cold", {
|
|
19978
|
-
error: getErrorMessage(error)
|
|
19979
|
-
});
|
|
19980
|
-
}
|
|
19981
|
-
}
|
|
19982
20032
|
logInitialization(adapterCount) {
|
|
19983
20033
|
this.logger.info("CompositeRouter initialized", {
|
|
19984
20034
|
adapterCount,
|
|
@@ -20010,7 +20060,7 @@ var CompositeRouter = class _CompositeRouter {
|
|
|
20010
20060
|
*/
|
|
20011
20061
|
async consultUnifiedContext(task) {
|
|
20012
20062
|
try {
|
|
20013
|
-
const { getContextForTask, inferTaskCategory } = await import("./context-retriever-
|
|
20063
|
+
const { getContextForTask, inferTaskCategory } = await import("./context-retriever-ZSQKNX33.js");
|
|
20014
20064
|
const ctx = await getContextForTask({
|
|
20015
20065
|
task: task.content,
|
|
20016
20066
|
category: inferTaskCategory(task.content),
|
|
@@ -21695,6 +21745,7 @@ export {
|
|
|
21695
21745
|
EventBus,
|
|
21696
21746
|
getPipelineEventBus,
|
|
21697
21747
|
runWarmUp,
|
|
21748
|
+
warmStartBandit,
|
|
21698
21749
|
taskProfileToBanditContext,
|
|
21699
21750
|
WeatherReportInputSchema,
|
|
21700
21751
|
SECURITY_KEYWORDS,
|
|
@@ -21763,4 +21814,4 @@ export {
|
|
|
21763
21814
|
AgentCapability,
|
|
21764
21815
|
OrchestratorError
|
|
21765
21816
|
};
|
|
21766
|
-
//# sourceMappingURL=chunk-
|
|
21817
|
+
//# sourceMappingURL=chunk-LRD7TNMD.js.map
|