nexus-agents 2.93.0 → 2.95.0
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-WNISXFYD.js → child-mcp-config-NW7JMSDK.js} +2 -2
- package/dist/{chunk-XVY3I7JT.js → chunk-2X24T4ZD.js} +9 -12
- package/dist/chunk-2X24T4ZD.js.map +1 -0
- package/dist/{chunk-BHA6V7GK.js → chunk-3H6Q3RZM.js} +4 -4
- package/dist/{chunk-T73G67GT.js → chunk-3HXWI34V.js} +3 -3
- package/dist/{chunk-RTUZSR4R.js → chunk-47Z3YPOK.js} +2 -2
- package/dist/{chunk-G5IDRWWI.js → chunk-4NVYN2MB.js} +4 -4
- package/dist/{chunk-5BTRDVWC.js → chunk-55G7KQ7F.js} +5 -5
- package/dist/{chunk-WU3SUA35.js → chunk-5HBDXW44.js} +2 -2
- package/dist/{chunk-JCETWDU7.js → chunk-6IWPN5UB.js} +2 -2
- package/dist/{chunk-4A4WPM75.js → chunk-7GUP6KQQ.js} +8 -10
- package/dist/{chunk-4A4WPM75.js.map → chunk-7GUP6KQQ.js.map} +1 -1
- package/dist/{chunk-ULBKFMVO.js → chunk-BSHDI4BH.js} +2 -2
- package/dist/{chunk-JEBWSHSU.js → chunk-D3JSXVX3.js} +2 -2
- package/dist/{chunk-HKISF2E7.js → chunk-ECBH5INZ.js} +259 -8
- package/dist/chunk-ECBH5INZ.js.map +1 -0
- package/dist/{chunk-ZOAU7RE4.js → chunk-ECZW5FXN.js} +4 -6
- package/dist/{chunk-ZOAU7RE4.js.map → chunk-ECZW5FXN.js.map} +1 -1
- package/dist/{chunk-ZYHHDPFW.js → chunk-FTDVA33Z.js} +4 -4
- package/dist/{chunk-2T4NV6QT.js → chunk-FXVJLJUF.js} +2 -2
- package/dist/{chunk-IJ2AZZVH.js → chunk-FYGZ4MEQ.js} +141 -28
- package/dist/chunk-FYGZ4MEQ.js.map +1 -0
- package/dist/{chunk-SORBJPRA.js → chunk-G42N55ZR.js} +2 -2
- package/dist/{chunk-SHSKW5ML.js → chunk-GC5FH2IA.js} +7 -7
- package/dist/{chunk-FTCU55O6.js → chunk-KHZGMF2W.js} +4 -4
- package/dist/{chunk-2IBJC2EP.js → chunk-LXROEQAO.js} +2 -2
- package/dist/{chunk-CPH6LKXO.js → chunk-LZOTH2GI.js} +2 -2
- package/dist/{chunk-DTFMYM3V.js → chunk-O4LVC4MQ.js} +2 -2
- package/dist/{chunk-AZP66FIA.js → chunk-PFOY5ML6.js} +3 -3
- package/dist/{chunk-SMGH2B3A.js → chunk-QUPPV6UO.js} +20 -3
- package/dist/chunk-QUPPV6UO.js.map +1 -0
- package/dist/{chunk-K7VGX37L.js → chunk-TEKWQNQ2.js} +3 -3
- package/dist/{chunk-LJMO5P6O.js → chunk-VTMQND6B.js} +23 -13
- package/dist/chunk-VTMQND6B.js.map +1 -0
- package/dist/{chunk-BNHBZRU7.js → chunk-WGA4VGIR.js} +3 -3
- package/dist/{chunk-57OH2O2U.js → chunk-Y3OOHHKQ.js} +2 -2
- package/dist/{chunk-VSG6RSE6.js → chunk-YYXJ6RTO.js} +3 -3
- package/dist/{chunk-E3QWWP67.js → chunk-ZICVVBDW.js} +2 -2
- package/dist/{cli-circuit-breaker-6E4E2IU7.js → cli-circuit-breaker-LNU5DQSB.js} +4 -4
- package/dist/cli.js +131 -54
- package/dist/cli.js.map +1 -1
- package/dist/{composite-router-MQOPXLVV.js → composite-router-DJ54ND5X.js} +2 -2
- package/dist/{consensus-vote-ZRADOLXH.js → consensus-vote-XLEQFVE7.js} +12 -13
- package/dist/{context-retriever-TZGIETJO.js → context-retriever-6O6TREXH.js} +6 -6
- package/dist/{doctor-deep-OU2WC55V.js → doctor-deep-PSNJPELP.js} +3 -3
- package/dist/{expert-bridge-WP5ZWXFY.js → expert-bridge-Q3OWPD4L.js} +4 -4
- package/dist/{factory-RJTRVII5.js → factory-43RVPRT5.js} +5 -5
- package/dist/{factory-2TN2VZTR.js → factory-PSMTMC7V.js} +5 -5
- package/dist/index.d.ts +215 -207
- package/dist/index.js +26 -27
- package/dist/index.js.map +1 -1
- package/dist/{init-opencode-AYMNMWU7.js → init-opencode-25AUARJH.js} +5 -5
- package/dist/{issue-triage-QIVZN3PJ.js → issue-triage-KZTENUDH.js} +5 -5
- package/dist/{pr-reviewer-helpers-P24OBKVM.js → pr-reviewer-helpers-XENJ4E2T.js} +4 -4
- package/dist/{registry-command-KWWOKJ5C.js → registry-command-X3O34FAK.js} +2 -2
- package/dist/{repo-security-plan-KZNEXDCI.js → repo-security-plan-XCX7EFJR.js} +3 -3
- package/dist/{research-helpers-synthesize-DH5PPX7A.js → research-helpers-synthesize-CGVR6M4S.js} +3 -4
- package/dist/{routing-memory-AGHJQTRH.js → routing-memory-YZRYGXQC.js} +2 -2
- package/dist/{session-memory-O24IVZAW.js → session-memory-SXQAA2EN.js} +3 -3
- package/dist/{setup-command-NBXZ4NGV.js → setup-command-VG7JZI6O.js} +11 -12
- package/dist/{setup-config-Y4JA5QWO.js → setup-config-VJAK6AA2.js} +3 -3
- package/dist/{setup-custom-api-UNX4OJEX.js → setup-custom-api-KSF2JMTS.js} +4 -5
- package/dist/{setup-custom-api-UNX4OJEX.js.map → setup-custom-api-KSF2JMTS.js.map} +1 -1
- package/dist/{tool-memory-UEQNXIGC.js → tool-memory-L7SDFSF5.js} +5 -5
- package/dist/{weather-report-S5YXRY7G.js → weather-report-D6HFOK7S.js} +2 -2
- package/package.json +1 -1
- package/dist/chunk-HKISF2E7.js.map +0 -1
- package/dist/chunk-IJ2AZZVH.js.map +0 -1
- package/dist/chunk-LJMO5P6O.js.map +0 -1
- package/dist/chunk-NESW2TTD.js +0 -134
- package/dist/chunk-NESW2TTD.js.map +0 -1
- package/dist/chunk-SMGH2B3A.js.map +0 -1
- package/dist/chunk-XVY3I7JT.js.map +0 -1
- /package/dist/{child-mcp-config-WNISXFYD.js.map → child-mcp-config-NW7JMSDK.js.map} +0 -0
- /package/dist/{chunk-BHA6V7GK.js.map → chunk-3H6Q3RZM.js.map} +0 -0
- /package/dist/{chunk-T73G67GT.js.map → chunk-3HXWI34V.js.map} +0 -0
- /package/dist/{chunk-RTUZSR4R.js.map → chunk-47Z3YPOK.js.map} +0 -0
- /package/dist/{chunk-G5IDRWWI.js.map → chunk-4NVYN2MB.js.map} +0 -0
- /package/dist/{chunk-5BTRDVWC.js.map → chunk-55G7KQ7F.js.map} +0 -0
- /package/dist/{chunk-WU3SUA35.js.map → chunk-5HBDXW44.js.map} +0 -0
- /package/dist/{chunk-JCETWDU7.js.map → chunk-6IWPN5UB.js.map} +0 -0
- /package/dist/{chunk-ULBKFMVO.js.map → chunk-BSHDI4BH.js.map} +0 -0
- /package/dist/{chunk-JEBWSHSU.js.map → chunk-D3JSXVX3.js.map} +0 -0
- /package/dist/{chunk-ZYHHDPFW.js.map → chunk-FTDVA33Z.js.map} +0 -0
- /package/dist/{chunk-2T4NV6QT.js.map → chunk-FXVJLJUF.js.map} +0 -0
- /package/dist/{chunk-SORBJPRA.js.map → chunk-G42N55ZR.js.map} +0 -0
- /package/dist/{chunk-SHSKW5ML.js.map → chunk-GC5FH2IA.js.map} +0 -0
- /package/dist/{chunk-FTCU55O6.js.map → chunk-KHZGMF2W.js.map} +0 -0
- /package/dist/{chunk-2IBJC2EP.js.map → chunk-LXROEQAO.js.map} +0 -0
- /package/dist/{chunk-CPH6LKXO.js.map → chunk-LZOTH2GI.js.map} +0 -0
- /package/dist/{chunk-DTFMYM3V.js.map → chunk-O4LVC4MQ.js.map} +0 -0
- /package/dist/{chunk-AZP66FIA.js.map → chunk-PFOY5ML6.js.map} +0 -0
- /package/dist/{chunk-K7VGX37L.js.map → chunk-TEKWQNQ2.js.map} +0 -0
- /package/dist/{chunk-BNHBZRU7.js.map → chunk-WGA4VGIR.js.map} +0 -0
- /package/dist/{chunk-57OH2O2U.js.map → chunk-Y3OOHHKQ.js.map} +0 -0
- /package/dist/{chunk-VSG6RSE6.js.map → chunk-YYXJ6RTO.js.map} +0 -0
- /package/dist/{chunk-E3QWWP67.js.map → chunk-ZICVVBDW.js.map} +0 -0
- /package/dist/{cli-circuit-breaker-6E4E2IU7.js.map → cli-circuit-breaker-LNU5DQSB.js.map} +0 -0
- /package/dist/{composite-router-MQOPXLVV.js.map → composite-router-DJ54ND5X.js.map} +0 -0
- /package/dist/{consensus-vote-ZRADOLXH.js.map → consensus-vote-XLEQFVE7.js.map} +0 -0
- /package/dist/{context-retriever-TZGIETJO.js.map → context-retriever-6O6TREXH.js.map} +0 -0
- /package/dist/{doctor-deep-OU2WC55V.js.map → doctor-deep-PSNJPELP.js.map} +0 -0
- /package/dist/{expert-bridge-WP5ZWXFY.js.map → expert-bridge-Q3OWPD4L.js.map} +0 -0
- /package/dist/{factory-2TN2VZTR.js.map → factory-43RVPRT5.js.map} +0 -0
- /package/dist/{factory-RJTRVII5.js.map → factory-PSMTMC7V.js.map} +0 -0
- /package/dist/{init-opencode-AYMNMWU7.js.map → init-opencode-25AUARJH.js.map} +0 -0
- /package/dist/{issue-triage-QIVZN3PJ.js.map → issue-triage-KZTENUDH.js.map} +0 -0
- /package/dist/{pr-reviewer-helpers-P24OBKVM.js.map → pr-reviewer-helpers-XENJ4E2T.js.map} +0 -0
- /package/dist/{registry-command-KWWOKJ5C.js.map → registry-command-X3O34FAK.js.map} +0 -0
- /package/dist/{repo-security-plan-KZNEXDCI.js.map → repo-security-plan-XCX7EFJR.js.map} +0 -0
- /package/dist/{research-helpers-synthesize-DH5PPX7A.js.map → research-helpers-synthesize-CGVR6M4S.js.map} +0 -0
- /package/dist/{routing-memory-AGHJQTRH.js.map → routing-memory-YZRYGXQC.js.map} +0 -0
- /package/dist/{session-memory-O24IVZAW.js.map → session-memory-SXQAA2EN.js.map} +0 -0
- /package/dist/{setup-command-NBXZ4NGV.js.map → setup-command-VG7JZI6O.js.map} +0 -0
- /package/dist/{setup-config-Y4JA5QWO.js.map → setup-config-VJAK6AA2.js.map} +0 -0
- /package/dist/{tool-memory-UEQNXIGC.js.map → tool-memory-L7SDFSF5.js.map} +0 -0
- /package/dist/{weather-report-S5YXRY7G.js.map → weather-report-D6HFOK7S.js.map} +0 -0
|
@@ -509,6 +509,98 @@ var BoundedLRUCache = class {
|
|
|
509
509
|
}
|
|
510
510
|
};
|
|
511
511
|
|
|
512
|
+
// src/core/tune-adjustment-store.ts
|
|
513
|
+
var TUNE_DEMOTION_FLOOR = 0.5;
|
|
514
|
+
var TUNE_MAX_STEP = 0.2;
|
|
515
|
+
var TUNE_DECAY_WINDOW_MS = 30 * 6e4;
|
|
516
|
+
var STAT_REASON_MAX = 512;
|
|
517
|
+
var TuneAdjustmentStore = class {
|
|
518
|
+
adjustments = /* @__PURE__ */ new Map();
|
|
519
|
+
/** Cumulative telemetry — never evicted (bounded by CLI cardinality). */
|
|
520
|
+
stats = /* @__PURE__ */ new Map();
|
|
521
|
+
/** Increment a CLI's cumulative demotion counter. Pure telemetry. */
|
|
522
|
+
bumpStat(cli, kind, reason) {
|
|
523
|
+
let stat = this.stats.get(cli);
|
|
524
|
+
if (stat === void 0) {
|
|
525
|
+
stat = { cli, applied: 0, intended: 0, lastReason: "", lastAt: 0 };
|
|
526
|
+
this.stats.set(cli, stat);
|
|
527
|
+
}
|
|
528
|
+
stat[kind] += 1;
|
|
529
|
+
stat.lastReason = reason.length > STAT_REASON_MAX ? reason.slice(0, STAT_REASON_MAX) : reason;
|
|
530
|
+
stat.lastAt = getTimeProvider().now();
|
|
531
|
+
}
|
|
532
|
+
/**
|
|
533
|
+
* Apply a bounded demotion to `cli`. `magnitude` is the requested reduction
|
|
534
|
+
* (capped to {@link TUNE_MAX_STEP}); compounds on any current (decayed) value
|
|
535
|
+
* but never below {@link TUNE_DEMOTION_FLOOR}. Non-positive magnitudes are a
|
|
536
|
+
* no-op. Returns the resulting adjustment (or undefined for a no-op).
|
|
537
|
+
*/
|
|
538
|
+
demote(cli, magnitude, reason) {
|
|
539
|
+
if (magnitude <= 0) return void 0;
|
|
540
|
+
const step = Math.min(TUNE_MAX_STEP, magnitude);
|
|
541
|
+
const current = this.effectiveMultiplier(cli);
|
|
542
|
+
const next = Math.max(TUNE_DEMOTION_FLOOR, current - step);
|
|
543
|
+
const adjustment = {
|
|
544
|
+
cli,
|
|
545
|
+
multiplier: next,
|
|
546
|
+
appliedAt: getTimeProvider().now(),
|
|
547
|
+
reason
|
|
548
|
+
};
|
|
549
|
+
this.adjustments.set(cli, adjustment);
|
|
550
|
+
this.bumpStat(cli, "applied", reason);
|
|
551
|
+
return adjustment;
|
|
552
|
+
}
|
|
553
|
+
/**
|
|
554
|
+
* Record a demotion the loop WOULD have applied, for shadow-soak telemetry
|
|
555
|
+
* (#3323) — increments the `intended` counter ONLY and does NOT touch the
|
|
556
|
+
* routing adjustments. Lets an operator observe what enabling the loop would
|
|
557
|
+
* do (via {@link demotionStats}) while `effectiveMultiplier` stays 1.0 and
|
|
558
|
+
* routing is untouched. Non-empty `reason` required; otherwise a no-op.
|
|
559
|
+
*/
|
|
560
|
+
recordIntended(cli, reason) {
|
|
561
|
+
if (reason === "") return;
|
|
562
|
+
this.bumpStat(cli, "intended", reason);
|
|
563
|
+
}
|
|
564
|
+
/**
|
|
565
|
+
* Current effective multiplier for `cli` — the stored multiplier decayed
|
|
566
|
+
* linearly back toward 1.0 over {@link TUNE_DECAY_WINDOW_MS}. Returns 1.0
|
|
567
|
+
* (no effect) when there is no active adjustment. Fully-decayed entries are
|
|
568
|
+
* evicted lazily.
|
|
569
|
+
*/
|
|
570
|
+
effectiveMultiplier(cli) {
|
|
571
|
+
const adjustment = this.adjustments.get(cli);
|
|
572
|
+
if (adjustment === void 0) return 1;
|
|
573
|
+
const elapsed = getTimeProvider().now() - adjustment.appliedAt;
|
|
574
|
+
if (elapsed >= TUNE_DECAY_WINDOW_MS || elapsed < 0) {
|
|
575
|
+
this.adjustments.delete(cli);
|
|
576
|
+
return 1;
|
|
577
|
+
}
|
|
578
|
+
const decayFraction = elapsed / TUNE_DECAY_WINDOW_MS;
|
|
579
|
+
return adjustment.multiplier + (1 - adjustment.multiplier) * decayFraction;
|
|
580
|
+
}
|
|
581
|
+
/** Snapshot of active (non-evicted) adjustments — for observability/audit. */
|
|
582
|
+
list() {
|
|
583
|
+
return [...this.adjustments.values()];
|
|
584
|
+
}
|
|
585
|
+
/**
|
|
586
|
+
* Cumulative demotion telemetry per CLI (#3323) — survives decay, so a shadow
|
|
587
|
+
* soak shows how often each CLI is (or would be) demoted. Read-only snapshot.
|
|
588
|
+
*/
|
|
589
|
+
demotionStats() {
|
|
590
|
+
return [...this.stats.values()].map((s) => ({ ...s })).sort((a, b) => a.cli.localeCompare(b.cli));
|
|
591
|
+
}
|
|
592
|
+
/** Remove all adjustments and telemetry. */
|
|
593
|
+
clear() {
|
|
594
|
+
this.adjustments.clear();
|
|
595
|
+
this.stats.clear();
|
|
596
|
+
}
|
|
597
|
+
};
|
|
598
|
+
var singleton;
|
|
599
|
+
function getTuneAdjustmentStore() {
|
|
600
|
+
singleton ??= new TuneAdjustmentStore();
|
|
601
|
+
return singleton;
|
|
602
|
+
}
|
|
603
|
+
|
|
512
604
|
// src/core/step-events.ts
|
|
513
605
|
var STEP_SUMMARY_MAX_LEN = 120;
|
|
514
606
|
function truncateSummary(s) {
|
|
@@ -8840,6 +8932,130 @@ async function fetchCapacityData(adapters) {
|
|
|
8840
8932
|
return result;
|
|
8841
8933
|
}
|
|
8842
8934
|
|
|
8935
|
+
// src/config/defaults-env.ts
|
|
8936
|
+
function parseIntEnv(envKey, fallback) {
|
|
8937
|
+
const envValue = process.env[envKey];
|
|
8938
|
+
if (envValue === void 0) {
|
|
8939
|
+
return fallback;
|
|
8940
|
+
}
|
|
8941
|
+
const parsed = parseInt(envValue, 10);
|
|
8942
|
+
return isNaN(parsed) || parsed <= 0 ? fallback : parsed;
|
|
8943
|
+
}
|
|
8944
|
+
function parseFloatEnv(envKey, fallback) {
|
|
8945
|
+
const envValue = process.env[envKey];
|
|
8946
|
+
if (envValue === void 0) {
|
|
8947
|
+
return fallback;
|
|
8948
|
+
}
|
|
8949
|
+
const parsed = parseFloat(envValue);
|
|
8950
|
+
return isNaN(parsed) || !isFinite(parsed) ? fallback : parsed;
|
|
8951
|
+
}
|
|
8952
|
+
function parseBoolEnv(envKey, fallback) {
|
|
8953
|
+
const envValue = process.env[envKey]?.toLowerCase();
|
|
8954
|
+
if (envValue === void 0) {
|
|
8955
|
+
return fallback;
|
|
8956
|
+
}
|
|
8957
|
+
if (envValue === "true" || envValue === "1") return true;
|
|
8958
|
+
if (envValue === "false" || envValue === "0") return false;
|
|
8959
|
+
return fallback;
|
|
8960
|
+
}
|
|
8961
|
+
function createGetTimeout(timeoutDefaults) {
|
|
8962
|
+
return (key) => {
|
|
8963
|
+
const envKey = `NEXUS_TIMEOUT_${key.replace(/Ms$/, "").toUpperCase()}`;
|
|
8964
|
+
return parseIntEnv(envKey, timeoutDefaults[key]);
|
|
8965
|
+
};
|
|
8966
|
+
}
|
|
8967
|
+
function createGetRetryConfig(retryDefaults) {
|
|
8968
|
+
return () => {
|
|
8969
|
+
return {
|
|
8970
|
+
maxRetries: parseIntEnv("NEXUS_RETRY_MAX_RETRIES", retryDefaults.maxRetries),
|
|
8971
|
+
baseDelayMs: parseIntEnv("NEXUS_RETRY_BASE_DELAY", retryDefaults.baseDelayMs),
|
|
8972
|
+
maxDelayMs: parseIntEnv("NEXUS_RETRY_MAX_DELAY", retryDefaults.maxDelayMs),
|
|
8973
|
+
jitterFactor: parseFloatEnv("NEXUS_RETRY_JITTER", retryDefaults.jitterFactor)
|
|
8974
|
+
};
|
|
8975
|
+
};
|
|
8976
|
+
}
|
|
8977
|
+
function createGetRateLimitConfig(rateLimitDefaults) {
|
|
8978
|
+
return () => {
|
|
8979
|
+
return {
|
|
8980
|
+
requestsPerMinute: parseIntEnv("NEXUS_RATE_LIMIT_RPM", rateLimitDefaults.requestsPerMinute),
|
|
8981
|
+
enabled: parseBoolEnv("NEXUS_RATE_LIMIT_ENABLED", rateLimitDefaults.enabled),
|
|
8982
|
+
maxConcurrent: parseIntEnv(
|
|
8983
|
+
"NEXUS_RATE_LIMIT_MAX_CONCURRENT",
|
|
8984
|
+
rateLimitDefaults.maxConcurrent
|
|
8985
|
+
),
|
|
8986
|
+
capacity: parseIntEnv("NEXUS_RATE_LIMIT_CAPACITY", rateLimitDefaults.capacity),
|
|
8987
|
+
refillRate: parseIntEnv("NEXUS_RATE_LIMIT_REFILL_RATE", rateLimitDefaults.refillRate),
|
|
8988
|
+
refillIntervalMs: parseIntEnv(
|
|
8989
|
+
"NEXUS_RATE_LIMIT_REFILL_INTERVAL",
|
|
8990
|
+
rateLimitDefaults.refillIntervalMs
|
|
8991
|
+
)
|
|
8992
|
+
};
|
|
8993
|
+
};
|
|
8994
|
+
}
|
|
8995
|
+
function createGetCircuitBreakerConfig(cbDefaults) {
|
|
8996
|
+
return () => {
|
|
8997
|
+
return {
|
|
8998
|
+
failureThreshold: parseIntEnv("NEXUS_CIRCUIT_BREAKER_THRESHOLD", cbDefaults.failureThreshold),
|
|
8999
|
+
resetTimeoutMs: parseIntEnv("NEXUS_CIRCUIT_BREAKER_RESET_TIMEOUT", cbDefaults.resetTimeoutMs),
|
|
9000
|
+
halfOpenSuccessThreshold: cbDefaults.halfOpenSuccessThreshold,
|
|
9001
|
+
countTimeoutsAsFailures: cbDefaults.countTimeoutsAsFailures,
|
|
9002
|
+
countAuthFailuresAsFailures: cbDefaults.countAuthFailuresAsFailures,
|
|
9003
|
+
countRateLimitsAsFailures: cbDefaults.countRateLimitsAsFailures,
|
|
9004
|
+
halfOpenMaxRequests: cbDefaults.halfOpenMaxRequests
|
|
9005
|
+
};
|
|
9006
|
+
};
|
|
9007
|
+
}
|
|
9008
|
+
function createGetToolRateLimit(toolRateLimits) {
|
|
9009
|
+
return (tool) => {
|
|
9010
|
+
return toolRateLimits[tool];
|
|
9011
|
+
};
|
|
9012
|
+
}
|
|
9013
|
+
function createGetEnvVarDocumentation(defaults) {
|
|
9014
|
+
return () => {
|
|
9015
|
+
const t = defaults.TIMEOUT_DEFAULTS;
|
|
9016
|
+
const r = defaults.RATE_LIMIT_DEFAULTS;
|
|
9017
|
+
const rt = defaults.RETRY_DEFAULTS;
|
|
9018
|
+
const cb = defaults.CIRCUIT_BREAKER_DEFAULTS;
|
|
9019
|
+
return `# Environment Variable Overrides
|
|
9020
|
+
|
|
9021
|
+
All defaults can be overridden via environment variables using the NEXUS_ prefix.
|
|
9022
|
+
|
|
9023
|
+
## Timeouts
|
|
9024
|
+
|
|
9025
|
+
| Variable | Default | Description |
|
|
9026
|
+
| -------- | ------- | ----------- |
|
|
9027
|
+
| NEXUS_TIMEOUT_CLI | ${String(t.cliMs)} | CLI execution timeout (ms) |
|
|
9028
|
+
| NEXUS_TIMEOUT_API | ${String(t.apiMs)} | API request timeout (ms) |
|
|
9029
|
+
| NEXUS_TIMEOUT_WORKFLOW | ${String(t.workflowMs)} | Workflow timeout (ms) |
|
|
9030
|
+
| NEXUS_TIMEOUT_MCP | ${String(t.mcpMs)} | MCP operation timeout (ms) |
|
|
9031
|
+
|
|
9032
|
+
## Rate Limits
|
|
9033
|
+
|
|
9034
|
+
| Variable | Default | Description |
|
|
9035
|
+
| -------- | ------- | ----------- |
|
|
9036
|
+
| NEXUS_RATE_LIMIT_RPM | ${String(r.requestsPerMinute)} | Requests per minute |
|
|
9037
|
+
| NEXUS_RATE_LIMIT_ENABLED | ${String(r.enabled)} | Enable rate limiting |
|
|
9038
|
+
| NEXUS_RATE_LIMIT_CAPACITY | ${String(r.capacity)} | Token bucket capacity |
|
|
9039
|
+
|
|
9040
|
+
## Retries
|
|
9041
|
+
|
|
9042
|
+
| Variable | Default | Description |
|
|
9043
|
+
| -------- | ------- | ----------- |
|
|
9044
|
+
| NEXUS_RETRY_MAX_RETRIES | ${String(rt.maxRetries)} | Maximum retry attempts |
|
|
9045
|
+
| NEXUS_RETRY_BASE_DELAY | ${String(rt.baseDelayMs)} | Base delay (ms) |
|
|
9046
|
+
| NEXUS_RETRY_MAX_DELAY | ${String(rt.maxDelayMs)} | Maximum delay (ms) |
|
|
9047
|
+
| NEXUS_RETRY_JITTER | ${String(rt.jitterFactor)} | Jitter factor (0-1) |
|
|
9048
|
+
|
|
9049
|
+
## Circuit Breaker
|
|
9050
|
+
|
|
9051
|
+
| Variable | Default | Description |
|
|
9052
|
+
| -------- | ------- | ----------- |
|
|
9053
|
+
| NEXUS_CIRCUIT_BREAKER_THRESHOLD | ${String(cb.failureThreshold)} | Failure threshold |
|
|
9054
|
+
| NEXUS_CIRCUIT_BREAKER_RESET_TIMEOUT | ${String(cb.resetTimeoutMs)} | Reset timeout (ms) |
|
|
9055
|
+
`;
|
|
9056
|
+
};
|
|
9057
|
+
}
|
|
9058
|
+
|
|
8843
9059
|
// src/mcp/tools/weather-report-types.ts
|
|
8844
9060
|
import { z as z12 } from "zod";
|
|
8845
9061
|
var WeatherReportInputSchema = z12.object({
|
|
@@ -10645,7 +10861,7 @@ async function runScoringStages(task, candidates, stagesExecuted, deps) {
|
|
|
10645
10861
|
candidates: filtered
|
|
10646
10862
|
};
|
|
10647
10863
|
}
|
|
10648
|
-
function aggregateStageScores(scoring, taskContent) {
|
|
10864
|
+
function aggregateStageScores(scoring, taskContent, candidates) {
|
|
10649
10865
|
const weatherScores = getWeatherBonusForTask(taskContent);
|
|
10650
10866
|
return mergeScoreMaps(
|
|
10651
10867
|
scoring.cascadeResult.scores,
|
|
@@ -10653,9 +10869,23 @@ function aggregateStageScores(scoring, taskContent) {
|
|
|
10653
10869
|
scoring.knnResult.scores,
|
|
10654
10870
|
scoring.distilledResult.scores,
|
|
10655
10871
|
scoring.resourceResult.scores,
|
|
10656
|
-
weatherScores
|
|
10872
|
+
weatherScores,
|
|
10873
|
+
getTuneAdjustmentScores(candidates)
|
|
10657
10874
|
);
|
|
10658
10875
|
}
|
|
10876
|
+
var TUNE_ENFORCE_ENV = "NEXUS_TUNE_ENFORCE";
|
|
10877
|
+
function getTuneAdjustmentScores(candidates) {
|
|
10878
|
+
const scores = /* @__PURE__ */ new Map();
|
|
10879
|
+
if (!parseBoolEnv(TUNE_ENFORCE_ENV, false)) return scores;
|
|
10880
|
+
const store = getTuneAdjustmentStore();
|
|
10881
|
+
for (const cli of candidates) {
|
|
10882
|
+
const multiplier = store.effectiveMultiplier(cli);
|
|
10883
|
+
if (multiplier < 1) {
|
|
10884
|
+
scores.set(cli, -(1 - multiplier) * 10);
|
|
10885
|
+
}
|
|
10886
|
+
}
|
|
10887
|
+
return scores;
|
|
10888
|
+
}
|
|
10659
10889
|
function getWeatherBonusForTask(taskContent) {
|
|
10660
10890
|
try {
|
|
10661
10891
|
const match = detectTaskCategory(taskContent);
|
|
@@ -10733,7 +10963,7 @@ async function runPipeline(task, taskProfile, stagesExecuted, cliNames, deps) {
|
|
|
10733
10963
|
const overrideResult = applyCategoryOverride(task, candidates, stagesExecuted);
|
|
10734
10964
|
if (!overrideResult.ok) return overrideResult;
|
|
10735
10965
|
candidates = overrideResult.value;
|
|
10736
|
-
const stageScores = aggregateStageScores(scoring, task.content);
|
|
10966
|
+
const stageScores = aggregateStageScores(scoring, task.content, candidates);
|
|
10737
10967
|
const topsisOpts = {
|
|
10738
10968
|
performanceData: getPerformanceDataForCategory(task.content)
|
|
10739
10969
|
};
|
|
@@ -10878,13 +11108,26 @@ function hasMinimumPreferenceData(deps) {
|
|
|
10878
11108
|
}
|
|
10879
11109
|
var QUALITY_HISTORY_LIMIT = 20;
|
|
10880
11110
|
var MAX_LATENCY_MS = 3e4;
|
|
11111
|
+
var QUALITY_RATE_CACHE_TTL_MS = 15e3;
|
|
11112
|
+
var qualityRateCache = /* @__PURE__ */ new Map();
|
|
11113
|
+
function getCachedCliSuccessRate(cli) {
|
|
11114
|
+
const now = getTimeProvider().now();
|
|
11115
|
+
const cached = qualityRateCache.get(cli);
|
|
11116
|
+
if (cached !== void 0 && now - cached.computedAt < QUALITY_RATE_CACHE_TTL_MS) {
|
|
11117
|
+
return cached.rate;
|
|
11118
|
+
}
|
|
11119
|
+
const recent = getOutcomeStore().query({ cli, limit: QUALITY_HISTORY_LIMIT });
|
|
11120
|
+
if (recent.length === 0) return void 0;
|
|
11121
|
+
const rate = recent.filter((o) => o.success).length / recent.length;
|
|
11122
|
+
qualityRateCache.set(cli, { rate, computedAt: now });
|
|
11123
|
+
return rate;
|
|
11124
|
+
}
|
|
10881
11125
|
function computeQualityReward(cli, success, durationMs2) {
|
|
10882
11126
|
if (!success) return 0.1;
|
|
10883
11127
|
let reward = 0.5;
|
|
10884
11128
|
try {
|
|
10885
|
-
const
|
|
10886
|
-
if (
|
|
10887
|
-
const rate = recent.filter((o) => o.success).length / recent.length;
|
|
11129
|
+
const rate = getCachedCliSuccessRate(cli);
|
|
11130
|
+
if (rate !== void 0) {
|
|
10888
11131
|
reward += rate * 0.3;
|
|
10889
11132
|
}
|
|
10890
11133
|
} catch (error) {
|
|
@@ -11179,7 +11422,7 @@ var CompositeRouter = class _CompositeRouter {
|
|
|
11179
11422
|
*/
|
|
11180
11423
|
async consultUnifiedContext(task) {
|
|
11181
11424
|
try {
|
|
11182
|
-
const { getContextForTask, inferTaskCategory } = await import("./context-retriever-
|
|
11425
|
+
const { getContextForTask, inferTaskCategory } = await import("./context-retriever-6O6TREXH.js");
|
|
11183
11426
|
const ctx = await getContextForTask({
|
|
11184
11427
|
task: task.content,
|
|
11185
11428
|
category: inferTaskCategory(task.content),
|
|
@@ -12328,6 +12571,7 @@ export {
|
|
|
12328
12571
|
CircularBuffer,
|
|
12329
12572
|
BoundedLRUCache,
|
|
12330
12573
|
getTimeProvider,
|
|
12574
|
+
getTuneAdjustmentStore,
|
|
12331
12575
|
withStep,
|
|
12332
12576
|
sanitize,
|
|
12333
12577
|
setGlobalLogLevel,
|
|
@@ -12452,6 +12696,13 @@ export {
|
|
|
12452
12696
|
CompositeRouterConfigSchema,
|
|
12453
12697
|
DEFAULT_COMPOSITE_CONFIG,
|
|
12454
12698
|
CompositeRoutingError,
|
|
12699
|
+
parseBoolEnv,
|
|
12700
|
+
createGetTimeout,
|
|
12701
|
+
createGetRetryConfig,
|
|
12702
|
+
createGetRateLimitConfig,
|
|
12703
|
+
createGetCircuitBreakerConfig,
|
|
12704
|
+
createGetToolRateLimit,
|
|
12705
|
+
createGetEnvVarDocumentation,
|
|
12455
12706
|
WeatherReportInputSchema,
|
|
12456
12707
|
SECURITY_KEYWORDS,
|
|
12457
12708
|
ARCHITECTURE_KEYWORDS,
|
|
@@ -12502,4 +12753,4 @@ export {
|
|
|
12502
12753
|
ParseError,
|
|
12503
12754
|
OrchestratorError
|
|
12504
12755
|
};
|
|
12505
|
-
//# sourceMappingURL=chunk-
|
|
12756
|
+
//# sourceMappingURL=chunk-ECBH5INZ.js.map
|