nexus-agents 2.133.0 → 2.134.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-R67B2KM6.js → child-mcp-config-TWHH63UK.js} +3 -3
- package/dist/{chunk-GYDO2WOR.js → chunk-33MFMXBQ.js} +5 -5
- package/dist/{chunk-VZCQRLXT.js → chunk-3EYXPV5F.js} +7 -7
- package/dist/{chunk-RLYXX3FQ.js → chunk-6LMZ7HFU.js} +2 -2
- package/dist/{chunk-4CLBJ2NA.js → chunk-6UCWR3DS.js} +3 -3
- package/dist/{chunk-RJEP2AZW.js → chunk-76R5ES6Z.js} +36 -36
- package/dist/{chunk-RJEP2AZW.js.map → chunk-76R5ES6Z.js.map} +1 -1
- package/dist/{chunk-HGUO36KW.js → chunk-7GSYICTL.js} +8 -8
- package/dist/{chunk-ZVBGZBW5.js → chunk-7TQZR5VU.js} +114 -7
- package/dist/chunk-7TQZR5VU.js.map +1 -0
- package/dist/{chunk-2CLFX73Y.js → chunk-B26FGLIJ.js} +2 -2
- package/dist/{chunk-27DRQWON.js → chunk-BTYYZ6VU.js} +4 -4
- package/dist/{chunk-K5WBFAR4.js → chunk-CLRSNWRQ.js} +4 -4
- package/dist/{chunk-TGGR6ST5.js → chunk-COJOUIO2.js} +3 -3
- package/dist/{chunk-QJIHSQZX.js → chunk-DBDWMHUL.js} +65 -14
- package/dist/chunk-DBDWMHUL.js.map +1 -0
- package/dist/{chunk-4CVITS5D.js → chunk-DLUFDKPA.js} +9 -9
- package/dist/{chunk-PM63X3QG.js → chunk-E64SZTEP.js} +3 -3
- package/dist/{chunk-QMCHVYZB.js → chunk-EHLJLIHS.js} +2 -2
- package/dist/{chunk-ZTRBMKXK.js → chunk-F74ZGHAP.js} +2 -2
- package/dist/{chunk-NZGNOXXW.js → chunk-FPMQ2JAK.js} +2 -2
- package/dist/{chunk-4DLHM6LI.js → chunk-FSFF7EFR.js} +2 -2
- package/dist/{chunk-J435FU54.js → chunk-FUJ3XR7T.js} +4 -4
- package/dist/{chunk-CI5KGCX5.js → chunk-FVSZLVMR.js} +3 -3
- package/dist/{chunk-RUSP5PJR.js → chunk-GZ4NF4ZW.js} +5 -1
- package/dist/{chunk-RUSP5PJR.js.map → chunk-GZ4NF4ZW.js.map} +1 -1
- package/dist/{chunk-DETYVPZO.js → chunk-IWQH6TP7.js} +6 -6
- package/dist/{chunk-ZQEQVCIU.js → chunk-MY52DFXC.js} +2 -2
- package/dist/{chunk-FKTLAPXJ.js → chunk-OCKZ6F5O.js} +3 -3
- package/dist/{chunk-E4IYX7LD.js → chunk-ORQAFTAZ.js} +2 -2
- package/dist/{chunk-QLRH6KOT.js → chunk-OU2NQVKD.js} +2 -2
- package/dist/{chunk-7BONPRR2.js → chunk-PFBV5FCT.js} +2 -2
- package/dist/{chunk-S4U3Z6ZS.js → chunk-QZUT22LP.js} +6 -6
- package/dist/{chunk-EFDXX5MC.js → chunk-UDB5NHJI.js} +3 -3
- package/dist/{chunk-RAWF4JOT.js → chunk-VI7LELES.js} +7 -7
- package/dist/{chunk-ECDJM6UB.js → chunk-WFKVUZ3O.js} +2 -2
- package/dist/{chunk-XIFOAZ5B.js → chunk-WYJJUF6N.js} +4 -4
- package/dist/{chunk-GET2MTLW.js → chunk-Z6DXZ6AS.js} +2 -2
- package/dist/{chunk-WHZD2W6Q.js → chunk-ZMDOGN33.js} +2 -2
- package/dist/{cli-circuit-breaker-J6UFONNE.js → cli-circuit-breaker-VXBDCAD7.js} +5 -5
- package/dist/cli.js +844 -155
- package/dist/cli.js.map +1 -1
- package/dist/{composite-router-HQUSCJO4.js → composite-router-E6FXXMMR.js} +3 -3
- package/dist/{consensus-vote-MVZ27Y43.js → consensus-vote-R6X5IL57.js} +15 -15
- package/dist/{context-retriever-5OVRAWNZ.js → context-retriever-I4NEOUEV.js} +9 -9
- package/dist/{doctor-deep-HJ3NQ365.js → doctor-deep-CZXN4YD6.js} +4 -4
- package/dist/{expert-bridge-MINXBC73.js → expert-bridge-GMB5IHHF.js} +5 -5
- package/dist/factory-WR62MEIJ.js +14 -0
- package/dist/factory-ZBQGA373.js +21 -0
- package/dist/{improvement-review-ZL3364R2.js → improvement-review-77BKIQGN.js} +5 -5
- package/dist/index.d.ts +210 -192
- package/dist/index.js +30 -30
- package/dist/{init-opencode-L3NT524E.js → init-opencode-4H2VPN23.js} +7 -7
- package/dist/issue-triage-NJB6SL4S.js +16 -0
- package/dist/{learning-persistence-QFCQ5POD.js → learning-persistence-2KO4CXNL.js} +2 -2
- package/dist/{pr-reviewer-helpers-PLKDVWYF.js → pr-reviewer-helpers-F3SHCHNV.js} +5 -5
- package/dist/{registry-command-HPKNLYUL.js → registry-command-VFCSMHME.js} +3 -3
- package/dist/{repo-security-plan-HSYGGVEJ.js → repo-security-plan-U2ZIFW53.js} +4 -4
- package/dist/research-helpers-synthesize-5TLNHT3I.js +14 -0
- package/dist/{routing-memory-OGUOL7UF.js → routing-memory-VVLJL3MG.js} +3 -3
- package/dist/{session-memory-HQWAXH3C.js → session-memory-GMQYZLJE.js} +4 -4
- package/dist/{setup-command-CIXJXFPC.js → setup-command-IMAX6EAO.js} +12 -12
- package/dist/setup-config-2ZSJ3HNE.js +10 -0
- package/dist/{setup-custom-api-W7EDVKWR.js → setup-custom-api-NJGCRIRO.js} +4 -4
- package/dist/{tool-memory-Z2B7CAH7.js → tool-memory-TSYJXGOV.js} +6 -6
- package/dist/unified-registry-IMAL3SY6.js +24 -0
- package/dist/{weather-report-GX7OIUL2.js → weather-report-OU65NJS3.js} +3 -3
- package/package.json +1 -1
- package/dist/chunk-QJIHSQZX.js.map +0 -1
- package/dist/chunk-ZVBGZBW5.js.map +0 -1
- package/dist/factory-KC7BYHAP.js +0 -21
- package/dist/factory-ZG2FZYVA.js +0 -14
- package/dist/issue-triage-CZPFNGB7.js +0 -16
- package/dist/research-helpers-synthesize-IQHDU27S.js +0 -14
- package/dist/setup-config-HYX3BRSE.js +0 -10
- package/dist/unified-registry-UFNSWKZA.js +0 -24
- /package/dist/{child-mcp-config-R67B2KM6.js.map → child-mcp-config-TWHH63UK.js.map} +0 -0
- /package/dist/{chunk-GYDO2WOR.js.map → chunk-33MFMXBQ.js.map} +0 -0
- /package/dist/{chunk-VZCQRLXT.js.map → chunk-3EYXPV5F.js.map} +0 -0
- /package/dist/{chunk-RLYXX3FQ.js.map → chunk-6LMZ7HFU.js.map} +0 -0
- /package/dist/{chunk-4CLBJ2NA.js.map → chunk-6UCWR3DS.js.map} +0 -0
- /package/dist/{chunk-HGUO36KW.js.map → chunk-7GSYICTL.js.map} +0 -0
- /package/dist/{chunk-2CLFX73Y.js.map → chunk-B26FGLIJ.js.map} +0 -0
- /package/dist/{chunk-27DRQWON.js.map → chunk-BTYYZ6VU.js.map} +0 -0
- /package/dist/{chunk-K5WBFAR4.js.map → chunk-CLRSNWRQ.js.map} +0 -0
- /package/dist/{chunk-TGGR6ST5.js.map → chunk-COJOUIO2.js.map} +0 -0
- /package/dist/{chunk-4CVITS5D.js.map → chunk-DLUFDKPA.js.map} +0 -0
- /package/dist/{chunk-PM63X3QG.js.map → chunk-E64SZTEP.js.map} +0 -0
- /package/dist/{chunk-QMCHVYZB.js.map → chunk-EHLJLIHS.js.map} +0 -0
- /package/dist/{chunk-ZTRBMKXK.js.map → chunk-F74ZGHAP.js.map} +0 -0
- /package/dist/{chunk-NZGNOXXW.js.map → chunk-FPMQ2JAK.js.map} +0 -0
- /package/dist/{chunk-4DLHM6LI.js.map → chunk-FSFF7EFR.js.map} +0 -0
- /package/dist/{chunk-J435FU54.js.map → chunk-FUJ3XR7T.js.map} +0 -0
- /package/dist/{chunk-CI5KGCX5.js.map → chunk-FVSZLVMR.js.map} +0 -0
- /package/dist/{chunk-DETYVPZO.js.map → chunk-IWQH6TP7.js.map} +0 -0
- /package/dist/{chunk-ZQEQVCIU.js.map → chunk-MY52DFXC.js.map} +0 -0
- /package/dist/{chunk-FKTLAPXJ.js.map → chunk-OCKZ6F5O.js.map} +0 -0
- /package/dist/{chunk-E4IYX7LD.js.map → chunk-ORQAFTAZ.js.map} +0 -0
- /package/dist/{chunk-QLRH6KOT.js.map → chunk-OU2NQVKD.js.map} +0 -0
- /package/dist/{chunk-7BONPRR2.js.map → chunk-PFBV5FCT.js.map} +0 -0
- /package/dist/{chunk-S4U3Z6ZS.js.map → chunk-QZUT22LP.js.map} +0 -0
- /package/dist/{chunk-EFDXX5MC.js.map → chunk-UDB5NHJI.js.map} +0 -0
- /package/dist/{chunk-RAWF4JOT.js.map → chunk-VI7LELES.js.map} +0 -0
- /package/dist/{chunk-ECDJM6UB.js.map → chunk-WFKVUZ3O.js.map} +0 -0
- /package/dist/{chunk-XIFOAZ5B.js.map → chunk-WYJJUF6N.js.map} +0 -0
- /package/dist/{chunk-GET2MTLW.js.map → chunk-Z6DXZ6AS.js.map} +0 -0
- /package/dist/{chunk-WHZD2W6Q.js.map → chunk-ZMDOGN33.js.map} +0 -0
- /package/dist/{cli-circuit-breaker-J6UFONNE.js.map → cli-circuit-breaker-VXBDCAD7.js.map} +0 -0
- /package/dist/{composite-router-HQUSCJO4.js.map → composite-router-E6FXXMMR.js.map} +0 -0
- /package/dist/{consensus-vote-MVZ27Y43.js.map → consensus-vote-R6X5IL57.js.map} +0 -0
- /package/dist/{context-retriever-5OVRAWNZ.js.map → context-retriever-I4NEOUEV.js.map} +0 -0
- /package/dist/{doctor-deep-HJ3NQ365.js.map → doctor-deep-CZXN4YD6.js.map} +0 -0
- /package/dist/{expert-bridge-MINXBC73.js.map → expert-bridge-GMB5IHHF.js.map} +0 -0
- /package/dist/{factory-KC7BYHAP.js.map → factory-WR62MEIJ.js.map} +0 -0
- /package/dist/{factory-ZG2FZYVA.js.map → factory-ZBQGA373.js.map} +0 -0
- /package/dist/{improvement-review-ZL3364R2.js.map → improvement-review-77BKIQGN.js.map} +0 -0
- /package/dist/{init-opencode-L3NT524E.js.map → init-opencode-4H2VPN23.js.map} +0 -0
- /package/dist/{issue-triage-CZPFNGB7.js.map → issue-triage-NJB6SL4S.js.map} +0 -0
- /package/dist/{learning-persistence-QFCQ5POD.js.map → learning-persistence-2KO4CXNL.js.map} +0 -0
- /package/dist/{pr-reviewer-helpers-PLKDVWYF.js.map → pr-reviewer-helpers-F3SHCHNV.js.map} +0 -0
- /package/dist/{registry-command-HPKNLYUL.js.map → registry-command-VFCSMHME.js.map} +0 -0
- /package/dist/{repo-security-plan-HSYGGVEJ.js.map → repo-security-plan-U2ZIFW53.js.map} +0 -0
- /package/dist/{research-helpers-synthesize-IQHDU27S.js.map → research-helpers-synthesize-5TLNHT3I.js.map} +0 -0
- /package/dist/{routing-memory-OGUOL7UF.js.map → routing-memory-VVLJL3MG.js.map} +0 -0
- /package/dist/{session-memory-HQWAXH3C.js.map → session-memory-GMQYZLJE.js.map} +0 -0
- /package/dist/{setup-command-CIXJXFPC.js.map → setup-command-IMAX6EAO.js.map} +0 -0
- /package/dist/{setup-config-HYX3BRSE.js.map → setup-config-2ZSJ3HNE.js.map} +0 -0
- /package/dist/{setup-custom-api-W7EDVKWR.js.map → setup-custom-api-NJGCRIRO.js.map} +0 -0
- /package/dist/{tool-memory-Z2B7CAH7.js.map → tool-memory-TSYJXGOV.js.map} +0 -0
- /package/dist/{unified-registry-UFNSWKZA.js.map → unified-registry-IMAL3SY6.js.map} +0 -0
- /package/dist/{weather-report-GX7OIUL2.js.map → weather-report-OU65NJS3.js.map} +0 -0
|
@@ -7,10 +7,10 @@ import {
|
|
|
7
7
|
import {
|
|
8
8
|
createAllAdapters,
|
|
9
9
|
probeCli
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-3EYXPV5F.js";
|
|
11
11
|
import {
|
|
12
12
|
DEFAULTS
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-ZMDOGN33.js";
|
|
14
14
|
import {
|
|
15
15
|
CliNameSchema,
|
|
16
16
|
DEFAULT_CAPABILITIES,
|
|
@@ -26,7 +26,7 @@ import {
|
|
|
26
26
|
ok,
|
|
27
27
|
symbols,
|
|
28
28
|
writeLine
|
|
29
|
-
} from "./chunk-
|
|
29
|
+
} from "./chunk-DBDWMHUL.js";
|
|
30
30
|
import {
|
|
31
31
|
detectSandbox,
|
|
32
32
|
getLearningDir,
|
|
@@ -37,10 +37,10 @@ import {
|
|
|
37
37
|
getRulesFile,
|
|
38
38
|
isPersistenceEnabled,
|
|
39
39
|
nexusDataPath
|
|
40
|
-
} from "./chunk-
|
|
40
|
+
} from "./chunk-GZ4NF4ZW.js";
|
|
41
41
|
|
|
42
42
|
// src/version.ts
|
|
43
|
-
var VERSION = true ? "2.
|
|
43
|
+
var VERSION = true ? "2.134.0" : "dev";
|
|
44
44
|
|
|
45
45
|
// src/config/schemas-core.ts
|
|
46
46
|
import { z } from "zod";
|
|
@@ -2130,7 +2130,7 @@ async function runDoctorFix(result) {
|
|
|
2130
2130
|
writeLine2("\u2500".repeat(40));
|
|
2131
2131
|
let fixCount = 0;
|
|
2132
2132
|
if (!result.dataDirectory.rootExists || result.dataDirectory.subdirectories.some((d) => !d.exists || !d.writable)) {
|
|
2133
|
-
const { runSetup } = await import("./setup-command-
|
|
2133
|
+
const { runSetup } = await import("./setup-command-IMAX6EAO.js");
|
|
2134
2134
|
const setupResult = runSetup({
|
|
2135
2135
|
skipMcp: true,
|
|
2136
2136
|
skipRules: true,
|
|
@@ -2144,7 +2144,7 @@ async function runDoctorFix(result) {
|
|
|
2144
2144
|
}
|
|
2145
2145
|
}
|
|
2146
2146
|
if (!result.configFile.found) {
|
|
2147
|
-
const { runConfigInitSync } = await import("./setup-config-
|
|
2147
|
+
const { runConfigInitSync } = await import("./setup-config-2ZSJ3HNE.js");
|
|
2148
2148
|
const configResult = runConfigInitSync(process.cwd(), false, false);
|
|
2149
2149
|
if (configResult.success && configResult.created) {
|
|
2150
2150
|
writeLine2(`\u2713 Generated config: ${configResult.path}`);
|
|
@@ -2243,4 +2243,4 @@ export {
|
|
|
2243
2243
|
startStdioServer,
|
|
2244
2244
|
closeServer
|
|
2245
2245
|
};
|
|
2246
|
-
//# sourceMappingURL=chunk-
|
|
2246
|
+
//# sourceMappingURL=chunk-7GSYICTL.js.map
|
|
@@ -7,21 +7,23 @@ import {
|
|
|
7
7
|
toolStructuredError,
|
|
8
8
|
toolSuccessStructured,
|
|
9
9
|
wrapToolWithTimeout
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-6UCWR3DS.js";
|
|
11
11
|
import {
|
|
12
12
|
JsonlStore,
|
|
13
13
|
SECURITY_KEYWORDS,
|
|
14
14
|
createLogger,
|
|
15
|
+
declaredOrthogonalityGroup,
|
|
15
16
|
formatZodError,
|
|
16
17
|
getErrorMessage,
|
|
17
18
|
getOutcomeStore,
|
|
18
19
|
getPipelineEventBus,
|
|
19
|
-
getTimeProvider
|
|
20
|
-
|
|
20
|
+
getTimeProvider,
|
|
21
|
+
isDeclaredNeverDeprecate
|
|
22
|
+
} from "./chunk-DBDWMHUL.js";
|
|
21
23
|
import {
|
|
22
24
|
getNexusDataDir,
|
|
23
25
|
nexusDataPath
|
|
24
|
-
} from "./chunk-
|
|
26
|
+
} from "./chunk-GZ4NF4ZW.js";
|
|
25
27
|
|
|
26
28
|
// src/mcp/tools/improvement-review.ts
|
|
27
29
|
import { execFile as execFile2 } from "child_process";
|
|
@@ -742,6 +744,7 @@ var DEFAULT_NEVER_DEPRECATE_PATTERNS = [
|
|
|
742
744
|
"quarantine"
|
|
743
745
|
];
|
|
744
746
|
function isNeverDeprecate(tool, config) {
|
|
747
|
+
if (isDeclaredNeverDeprecate(tool)) return true;
|
|
745
748
|
if (config?.exemptTools?.includes(tool) === true) return true;
|
|
746
749
|
const lower = tool.toLowerCase();
|
|
747
750
|
const patterns = [...DEFAULT_NEVER_DEPRECATE_PATTERNS, ...config?.extraPatterns ?? []];
|
|
@@ -763,6 +766,11 @@ function verbGroup(verb) {
|
|
|
763
766
|
return ORTHOGONAL_VERB_GROUPS.findIndex((g) => g.includes(verb));
|
|
764
767
|
}
|
|
765
768
|
function consolidationConfidence(candidate, busiest) {
|
|
769
|
+
const declaredA = declaredOrthogonalityGroup(candidate.tool);
|
|
770
|
+
const declaredB = declaredOrthogonalityGroup(busiest.tool);
|
|
771
|
+
if (declaredA !== void 0 && declaredB !== void 0) {
|
|
772
|
+
return declaredA !== declaredB ? "none" : "low";
|
|
773
|
+
}
|
|
766
774
|
const a = verbGroup(actionVerb(candidate.tool));
|
|
767
775
|
const b = verbGroup(actionVerb(busiest.tool));
|
|
768
776
|
if (a !== -1 && b !== -1 && a !== b) return "none";
|
|
@@ -1109,6 +1117,95 @@ function loadToolFitnessSignals(windowLabel, ledger = getToolFitnessLedger()) {
|
|
|
1109
1117
|
}
|
|
1110
1118
|
}
|
|
1111
1119
|
|
|
1120
|
+
// src/mcp/tools/improvement-review-perf-regression.ts
|
|
1121
|
+
var DEFAULT_REGRESSION_TOLERANCE_FRACTION = 0.2;
|
|
1122
|
+
function baselineKey(component, operation) {
|
|
1123
|
+
return `${component}::${operation}`;
|
|
1124
|
+
}
|
|
1125
|
+
function round2(n) {
|
|
1126
|
+
return Math.round(n * 100) / 100;
|
|
1127
|
+
}
|
|
1128
|
+
function pctWorse(measured, baseline) {
|
|
1129
|
+
if (baseline === 0) return 0;
|
|
1130
|
+
return round2(Math.abs(measured - baseline) / baseline * 100);
|
|
1131
|
+
}
|
|
1132
|
+
function latencyRegressionSignal(component, operation, measuredP95Ms, baselineP95Ms, tolerance) {
|
|
1133
|
+
const threshold = baselineP95Ms * (1 + tolerance);
|
|
1134
|
+
if (measuredP95Ms <= threshold) return void 0;
|
|
1135
|
+
const deltaPct = pctWorse(measuredP95Ms, baselineP95Ms);
|
|
1136
|
+
return {
|
|
1137
|
+
category: "perf-regression",
|
|
1138
|
+
signalKey: `perf-regression:latency:${component}:${operation}`,
|
|
1139
|
+
severity: "warning",
|
|
1140
|
+
title: `perf-regression: ${component}/${operation} p95 latency ${String(round2(measuredP95Ms))}ms vs baseline ${String(round2(baselineP95Ms))}ms (+${String(deltaPct)}%)`,
|
|
1141
|
+
body: [
|
|
1142
|
+
`Measured p95 latency regressed beyond the configured tolerance against a STATIC baseline.`,
|
|
1143
|
+
"",
|
|
1144
|
+
`- Component: \`${component}\``,
|
|
1145
|
+
`- Operation: \`${operation}\``,
|
|
1146
|
+
`- Measured p95: ${String(round2(measuredP95Ms))} ms`,
|
|
1147
|
+
`- Baseline p95: ${String(round2(baselineP95Ms))} ms (static/configured \u2014 not a rolling window)`,
|
|
1148
|
+
`- Tolerance: ${String(round2(tolerance * 100))}% (regression threshold ${String(round2(threshold))} ms)`,
|
|
1149
|
+
`- Delta: +${String(deltaPct)}% worse than baseline`,
|
|
1150
|
+
"",
|
|
1151
|
+
"Surfaced as a candidate finding for human review. No fitness/governance score is mutated and no remediation is auto-applied."
|
|
1152
|
+
].join("\n"),
|
|
1153
|
+
evidence: { observedValue: round2(measuredP95Ms), threshold: round2(threshold) }
|
|
1154
|
+
};
|
|
1155
|
+
}
|
|
1156
|
+
function throughputRegressionSignal(component, operation, measuredThroughput, baselineThroughput, tolerance) {
|
|
1157
|
+
const threshold = baselineThroughput * (1 - tolerance);
|
|
1158
|
+
if (measuredThroughput >= threshold) return void 0;
|
|
1159
|
+
const deltaPct = pctWorse(measuredThroughput, baselineThroughput);
|
|
1160
|
+
return {
|
|
1161
|
+
category: "perf-regression",
|
|
1162
|
+
signalKey: `perf-regression:throughput:${component}:${operation}`,
|
|
1163
|
+
severity: "warning",
|
|
1164
|
+
title: `perf-regression: ${component}/${operation} throughput ${String(round2(measuredThroughput))} ops/s vs baseline ${String(round2(baselineThroughput))} ops/s (-${String(deltaPct)}%)`,
|
|
1165
|
+
body: [
|
|
1166
|
+
`Measured throughput regressed beyond the configured tolerance against a STATIC baseline.`,
|
|
1167
|
+
"",
|
|
1168
|
+
`- Component: \`${component}\``,
|
|
1169
|
+
`- Operation: \`${operation}\``,
|
|
1170
|
+
`- Measured throughput: ${String(round2(measuredThroughput))} ops/s`,
|
|
1171
|
+
`- Baseline throughput: ${String(round2(baselineThroughput))} ops/s (static/configured \u2014 not a rolling window)`,
|
|
1172
|
+
`- Tolerance: ${String(round2(tolerance * 100))}% (regression threshold ${String(round2(threshold))} ops/s)`,
|
|
1173
|
+
`- Delta: -${String(deltaPct)}% below baseline`,
|
|
1174
|
+
"",
|
|
1175
|
+
"Surfaced as a candidate finding for human review. No fitness/governance score is mutated and no remediation is auto-applied."
|
|
1176
|
+
].join("\n"),
|
|
1177
|
+
evidence: { observedValue: round2(measuredThroughput), threshold: round2(threshold) }
|
|
1178
|
+
};
|
|
1179
|
+
}
|
|
1180
|
+
function detectPerfRegressionSignals(result, baselines, tolerance = DEFAULT_REGRESSION_TOLERANCE_FRACTION) {
|
|
1181
|
+
const signals = [];
|
|
1182
|
+
for (const op of result.operations) {
|
|
1183
|
+
const baseline = baselines.get(baselineKey(result.component, op.operation));
|
|
1184
|
+
if (baseline === void 0) continue;
|
|
1185
|
+
if (baseline.baselineP95Ms !== void 0) {
|
|
1186
|
+
const sig = latencyRegressionSignal(
|
|
1187
|
+
result.component,
|
|
1188
|
+
op.operation,
|
|
1189
|
+
op.latency.p95,
|
|
1190
|
+
baseline.baselineP95Ms,
|
|
1191
|
+
tolerance
|
|
1192
|
+
);
|
|
1193
|
+
if (sig !== void 0) signals.push(sig);
|
|
1194
|
+
}
|
|
1195
|
+
if (baseline.baselineThroughput !== void 0) {
|
|
1196
|
+
const sig = throughputRegressionSignal(
|
|
1197
|
+
result.component,
|
|
1198
|
+
op.operation,
|
|
1199
|
+
op.throughput.opsPerSecond,
|
|
1200
|
+
baseline.baselineThroughput,
|
|
1201
|
+
tolerance
|
|
1202
|
+
);
|
|
1203
|
+
if (sig !== void 0) signals.push(sig);
|
|
1204
|
+
}
|
|
1205
|
+
}
|
|
1206
|
+
return signals;
|
|
1207
|
+
}
|
|
1208
|
+
|
|
1112
1209
|
// src/mcp/tools/improvement-remediation.ts
|
|
1113
1210
|
var ROLE_BY_CATEGORY = {
|
|
1114
1211
|
security: "security",
|
|
@@ -1119,7 +1216,11 @@ var ROLE_BY_CATEGORY = {
|
|
|
1119
1216
|
// #3852: tool-fitness candidates are deprecation/consolidation proposals —
|
|
1120
1217
|
// a researcher owns the investigation seed (suggest-tier; the dev-pipeline
|
|
1121
1218
|
// re-plans anyway). NEVER an autonomous removal.
|
|
1122
|
-
"tool-fitness": "researcher"
|
|
1219
|
+
"tool-fitness": "researcher",
|
|
1220
|
+
// #3692/#3246: a perf regression vs a static baseline is a performance
|
|
1221
|
+
// investigation seed — a coder owns the diagnosis. Surfaced-only; the
|
|
1222
|
+
// dev-pipeline re-plans, nothing is auto-applied.
|
|
1223
|
+
"perf-regression": "coder"
|
|
1123
1224
|
};
|
|
1124
1225
|
function remediationTaskId(signal) {
|
|
1125
1226
|
return `improvement-${signal.signalKey}`;
|
|
@@ -1810,6 +1911,10 @@ function readBufferedVoteRejections(now, lookbackDays) {
|
|
|
1810
1911
|
const cutoff = now - lookbackDays * DAY_MS;
|
|
1811
1912
|
return getPipelineEventBus().query({ type: "signal.vote_rejected" }).filter((e) => e.type === "signal.vote_rejected").filter((e) => e.timestamp >= cutoff);
|
|
1812
1913
|
}
|
|
1914
|
+
function gatherPerfRegressionSignals(perf) {
|
|
1915
|
+
if (perf === void 0) return [];
|
|
1916
|
+
return detectPerfRegressionSignals(perf.result, perf.baselines, perf.toleranceFraction);
|
|
1917
|
+
}
|
|
1813
1918
|
async function runImprovementReview(input, deps = {}) {
|
|
1814
1919
|
const logger = deps.logger ?? createLogger({ component: "improvement_review" });
|
|
1815
1920
|
const { lookbackDays, fileIssues, minSampleSize, fitnessFloor, selfEvalReportPath } = input;
|
|
@@ -1821,13 +1926,15 @@ async function runImprovementReview(input, deps = {}) {
|
|
|
1821
1926
|
const selfEvalSignals = selfEvalReportPath !== void 0 ? await loadSelfEvalSignals(selfEvalReportPath, windowLabel, logger) : [];
|
|
1822
1927
|
const rejectionEvents = readBufferedVoteRejections(now, lookbackDays);
|
|
1823
1928
|
const toolFitnessSignals = loadToolFitnessSignals(windowLabel);
|
|
1929
|
+
const perfRegressionSignals = gatherPerfRegressionSignals(deps.perfRegression);
|
|
1824
1930
|
const signals = [
|
|
1825
1931
|
...detectCliPerformanceFloor(windowed, minSampleSize, windowLabel),
|
|
1826
1932
|
...detectFailureCategoryConcentration(windowed, windowLabel),
|
|
1827
1933
|
...detectFitnessSignals(audit, fitnessFloor),
|
|
1828
1934
|
...detectConsensusRejectionSignals(rejectionEvents, windowLabel),
|
|
1829
1935
|
...selfEvalSignals,
|
|
1830
|
-
...toolFitnessSignals
|
|
1936
|
+
...toolFitnessSignals,
|
|
1937
|
+
...perfRegressionSignals
|
|
1831
1938
|
];
|
|
1832
1939
|
signals.sort((a, b) => SEVERITY_ORDER[a.severity] - SEVERITY_ORDER[b.severity]);
|
|
1833
1940
|
emitFitnessDeclinedSignal(audit, fitnessFloor, getPipelineEventBus(), logger);
|
|
@@ -1931,4 +2038,4 @@ export {
|
|
|
1931
2038
|
runImprovementReview,
|
|
1932
2039
|
registerImprovementReviewTool
|
|
1933
2040
|
};
|
|
1934
|
-
//# sourceMappingURL=chunk-
|
|
2041
|
+
//# sourceMappingURL=chunk-7TQZR5VU.js.map
|