nexus-agents 8.77.0 → 8.78.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/{chunk-5XAJU5ZV.js → chunk-3K7OHJLM.js} +18 -11
- package/dist/{chunk-5XAJU5ZV.js.map → chunk-3K7OHJLM.js.map} +1 -1
- package/dist/{chunk-LZGSWYDX.js → chunk-5EXZHBAQ.js} +2 -2
- package/dist/{chunk-GS5OJHJJ.js → chunk-7ZMNE7U2.js} +3 -3
- package/dist/{chunk-I2MSRFXZ.js → chunk-ER76ZRBU.js} +3 -3
- package/dist/{chunk-QBZ6DBJL.js → chunk-MYF73MI3.js} +2 -2
- package/dist/{chunk-6IUAMO5M.js → chunk-NW5MCYOE.js} +2 -2
- package/dist/{chunk-VIVM7X76.js → chunk-OZFXXGGZ.js} +71 -8
- package/dist/chunk-OZFXXGGZ.js.map +1 -0
- package/dist/cli.js +25 -15
- package/dist/cli.js.map +1 -1
- package/dist/{consensus-vote-7JRI7YF6.js → consensus-vote-3ZA6SHMI.js} +4 -4
- package/dist/{improvement-review-JVI3RM7I.js → improvement-review-VC46AY77.js} +4 -4
- package/dist/index.d.ts +20 -1
- package/dist/index.js +7 -7
- package/dist/{issue-triage-6KIGFUFJ.js → issue-triage-M7XEMQZ7.js} +2 -2
- package/dist/{setup-data-dir-VCSQTZ6L.js → setup-data-dir-NQITBZYA.js} +3 -3
- package/package.json +1 -1
- package/dist/chunk-VIVM7X76.js.map +0 -1
- /package/dist/{chunk-LZGSWYDX.js.map → chunk-5EXZHBAQ.js.map} +0 -0
- /package/dist/{chunk-GS5OJHJJ.js.map → chunk-7ZMNE7U2.js.map} +0 -0
- /package/dist/{chunk-I2MSRFXZ.js.map → chunk-ER76ZRBU.js.map} +0 -0
- /package/dist/{chunk-QBZ6DBJL.js.map → chunk-MYF73MI3.js.map} +0 -0
- /package/dist/{chunk-6IUAMO5M.js.map → chunk-NW5MCYOE.js.map} +0 -0
- /package/dist/{consensus-vote-7JRI7YF6.js.map → consensus-vote-3ZA6SHMI.js.map} +0 -0
- /package/dist/{improvement-review-JVI3RM7I.js.map → improvement-review-VC46AY77.js.map} +0 -0
- /package/dist/{issue-triage-6KIGFUFJ.js.map → issue-triage-M7XEMQZ7.js.map} +0 -0
- /package/dist/{setup-data-dir-VCSQTZ6L.js.map → setup-data-dir-NQITBZYA.js.map} +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
VERSION
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-MYF73MI3.js";
|
|
4
4
|
import {
|
|
5
5
|
CACHE_TIMEOUTS,
|
|
6
6
|
MCP_TIMEOUTS,
|
|
@@ -2186,4 +2186,4 @@ export {
|
|
|
2186
2186
|
DEFAULT_CONSENSUS_CONFIG,
|
|
2187
2187
|
ConsensusMetricsSchema
|
|
2188
2188
|
};
|
|
2189
|
-
//# sourceMappingURL=chunk-
|
|
2189
|
+
//# sourceMappingURL=chunk-5EXZHBAQ.js.map
|
|
@@ -12,7 +12,7 @@ import {
|
|
|
12
12
|
NODE_ENGINE_RANGE,
|
|
13
13
|
VERSION,
|
|
14
14
|
isNodeVersionSupported
|
|
15
|
-
} from "./chunk-
|
|
15
|
+
} from "./chunk-MYF73MI3.js";
|
|
16
16
|
import {
|
|
17
17
|
claimGlobalRegistry
|
|
18
18
|
} from "./chunk-PSCY6MSD.js";
|
|
@@ -1372,7 +1372,7 @@ async function runDoctorFix(result) {
|
|
|
1372
1372
|
writeLine2("\u2500".repeat(40));
|
|
1373
1373
|
let fixCount = 0;
|
|
1374
1374
|
if (!result.dataDirectory.rootExists || result.dataDirectory.subdirectories.some((d) => !d.exists || !d.writable)) {
|
|
1375
|
-
const { initDataDirectories: initDataDirectories2, describeDataDirFix: describeDataDirFix2 } = await import("./setup-data-dir-
|
|
1375
|
+
const { initDataDirectories: initDataDirectories2, describeDataDirFix: describeDataDirFix2 } = await import("./setup-data-dir-NQITBZYA.js");
|
|
1376
1376
|
const outcome = describeDataDirFix2(initDataDirectories2());
|
|
1377
1377
|
writeLine2(outcome.line);
|
|
1378
1378
|
if (outcome.counted) fixCount++;
|
|
@@ -1474,4 +1474,4 @@ export {
|
|
|
1474
1474
|
startStdioServer,
|
|
1475
1475
|
closeServer
|
|
1476
1476
|
};
|
|
1477
|
-
//# sourceMappingURL=chunk-
|
|
1477
|
+
//# sourceMappingURL=chunk-7ZMNE7U2.js.map
|
|
@@ -24,10 +24,10 @@ import {
|
|
|
24
24
|
toolSuccessStructured,
|
|
25
25
|
withProgressHeartbeat,
|
|
26
26
|
wrapToolWithTimeout
|
|
27
|
-
} from "./chunk-
|
|
27
|
+
} from "./chunk-5EXZHBAQ.js";
|
|
28
28
|
import {
|
|
29
29
|
VERSION
|
|
30
|
-
} from "./chunk-
|
|
30
|
+
} from "./chunk-MYF73MI3.js";
|
|
31
31
|
import {
|
|
32
32
|
UNRESOLVED_MODEL_ID,
|
|
33
33
|
assessPanelIndependence,
|
|
@@ -9188,4 +9188,4 @@ export {
|
|
|
9188
9188
|
CONSENSUS_VOTE_TOOL_SCHEMA,
|
|
9189
9189
|
registerConsensusVoteTool
|
|
9190
9190
|
};
|
|
9191
|
-
//# sourceMappingURL=chunk-
|
|
9191
|
+
//# sourceMappingURL=chunk-ER76ZRBU.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// src/version.ts
|
|
2
2
|
import semver from "semver";
|
|
3
|
-
var VERSION = true ? "8.
|
|
3
|
+
var VERSION = true ? "8.78.0" : "dev";
|
|
4
4
|
var NODE_ENGINE_RANGE = ">=22.5.0";
|
|
5
5
|
function isNodeVersionSupported(version) {
|
|
6
6
|
return semver.satisfies(version, NODE_ENGINE_RANGE);
|
|
@@ -11,4 +11,4 @@ export {
|
|
|
11
11
|
NODE_ENGINE_RANGE,
|
|
12
12
|
isNodeVersionSupported
|
|
13
13
|
};
|
|
14
|
-
//# sourceMappingURL=chunk-
|
|
14
|
+
//# sourceMappingURL=chunk-MYF73MI3.js.map
|
|
@@ -7,7 +7,7 @@ import {
|
|
|
7
7
|
toolStructuredError,
|
|
8
8
|
toolSuccessStructured,
|
|
9
9
|
wrapToolWithTimeout
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-5EXZHBAQ.js";
|
|
11
11
|
import {
|
|
12
12
|
JsonlStore,
|
|
13
13
|
SECURITY_KEYWORDS,
|
|
@@ -2282,4 +2282,4 @@ export {
|
|
|
2282
2282
|
runImprovementReview,
|
|
2283
2283
|
registerImprovementReviewTool
|
|
2284
2284
|
};
|
|
2285
|
-
//# sourceMappingURL=chunk-
|
|
2285
|
+
//# sourceMappingURL=chunk-NW5MCYOE.js.map
|
|
@@ -1336,7 +1336,8 @@ var HostileInputFirewall = class {
|
|
|
1336
1336
|
return err({
|
|
1337
1337
|
code: "POLICY_REFUSED",
|
|
1338
1338
|
message: `Refused by firewall policy: ${corroboration.actionType} lacks required corroboration \u2014 ${corroboration.missing.join("; ")}`,
|
|
1339
|
-
stage: "corroboration"
|
|
1339
|
+
stage: "corroboration",
|
|
1340
|
+
missing: corroboration.missing
|
|
1340
1341
|
});
|
|
1341
1342
|
}
|
|
1342
1343
|
return ok({
|
|
@@ -1344,6 +1345,7 @@ var HostileInputFirewall = class {
|
|
|
1344
1345
|
satisfied: corroboration.satisfied,
|
|
1345
1346
|
missing: corroboration.missing,
|
|
1346
1347
|
corroboratingSources: corroboration.corroboratingSources,
|
|
1348
|
+
clearedOnlyByUnverifiedSources: corroboration.clearedOnlyByUnverifiedSources,
|
|
1347
1349
|
policyMode: this.policyMode,
|
|
1348
1350
|
wouldRefuse: !corroboration.satisfied && this.policyMode === "audit"
|
|
1349
1351
|
});
|
|
@@ -1565,6 +1567,7 @@ function getUntrustedInputFirewall() {
|
|
|
1565
1567
|
singleton ??= new HostileInputFirewall({
|
|
1566
1568
|
adapter: createGitHubAdapter(),
|
|
1567
1569
|
contentDowngrade: false,
|
|
1570
|
+
stages: { corroboration: true },
|
|
1568
1571
|
...configuredAuditLogger !== void 0 ? { auditLogger: configuredAuditLogger } : {}
|
|
1569
1572
|
});
|
|
1570
1573
|
return singleton;
|
|
@@ -1609,6 +1612,44 @@ function evaluateActionThroughFirewall(input, options) {
|
|
|
1609
1612
|
wouldRefuse
|
|
1610
1613
|
});
|
|
1611
1614
|
}
|
|
1615
|
+
function validateActionCorroboration(action) {
|
|
1616
|
+
const result = getUntrustedInputFirewall().validateAction(action);
|
|
1617
|
+
if (!result.ok) {
|
|
1618
|
+
const { code, stage, missing } = result.error;
|
|
1619
|
+
if (code !== "POLICY_REFUSED" || stage !== "corroboration") return err(asError(result.error));
|
|
1620
|
+
if (missing === void 0 || missing.length === 0) return err(asError(result.error));
|
|
1621
|
+
logger4.warn("Untrusted-input firewall refused an uncorroborated action (enforce mode)", {
|
|
1622
|
+
actionType: action.type,
|
|
1623
|
+
stage,
|
|
1624
|
+
missing
|
|
1625
|
+
});
|
|
1626
|
+
return ok({ refused: true, satisfied: false, stage, missing, policyMode: "enforce" });
|
|
1627
|
+
}
|
|
1628
|
+
const validation = result.value;
|
|
1629
|
+
if (!validation.evaluated) {
|
|
1630
|
+
return err(
|
|
1631
|
+
new Error(
|
|
1632
|
+
`Untrusted-input firewall did not evaluate corroboration for action ${action.type} (${validation.reason})`
|
|
1633
|
+
)
|
|
1634
|
+
);
|
|
1635
|
+
}
|
|
1636
|
+
if (validation.wouldRefuse) {
|
|
1637
|
+
logger4.warn("Untrusted-input firewall would refuse under enforce (audit mode)", {
|
|
1638
|
+
actionType: action.type,
|
|
1639
|
+
stage: "corroboration",
|
|
1640
|
+
missing: validation.missing
|
|
1641
|
+
});
|
|
1642
|
+
}
|
|
1643
|
+
return ok({
|
|
1644
|
+
refused: false,
|
|
1645
|
+
satisfied: validation.satisfied,
|
|
1646
|
+
missing: validation.missing,
|
|
1647
|
+
corroboratingSources: validation.corroboratingSources,
|
|
1648
|
+
clearedOnlyByUnverifiedSources: validation.clearedOnlyByUnverifiedSources,
|
|
1649
|
+
policyMode: validation.policyMode,
|
|
1650
|
+
wouldRefuse: validation.wouldRefuse
|
|
1651
|
+
});
|
|
1652
|
+
}
|
|
1612
1653
|
function processAndLog(input, options) {
|
|
1613
1654
|
const result = getUntrustedInputFirewall().process(input, options);
|
|
1614
1655
|
if (!result.ok) {
|
|
@@ -2038,9 +2079,17 @@ function describeAction(action) {
|
|
|
2038
2079
|
}
|
|
2039
2080
|
}
|
|
2040
2081
|
function buildActionDetails(action, policy, corrob) {
|
|
2082
|
+
const policyRules = policy.violations.map((violation) => violation.rule);
|
|
2041
2083
|
return {
|
|
2042
|
-
|
|
2043
|
-
|
|
2084
|
+
...corrob.refused ? {
|
|
2085
|
+
policyViolations: [...policyRules, "INSUFFICIENT_CORROBORATION"],
|
|
2086
|
+
missingCorroboration: corrob.missing,
|
|
2087
|
+
refusedAtStage: corrob.stage
|
|
2088
|
+
} : {
|
|
2089
|
+
policyViolations: policyRules,
|
|
2090
|
+
missingCorroboration: corrob.missing,
|
|
2091
|
+
corroborationWouldRefuse: corrob.wouldRefuse
|
|
2092
|
+
},
|
|
2044
2093
|
...action.type === "ClassifyIssue" && { category: action.category },
|
|
2045
2094
|
...action.type === "ProposeLabels" && { labels: action.labels }
|
|
2046
2095
|
};
|
|
@@ -2051,17 +2100,29 @@ function validateActionsThroughFirewall(input, gate, actions, existingLabels) {
|
|
|
2051
2100
|
for (const action of actions) {
|
|
2052
2101
|
const decision = evaluateActionThroughFirewall(input, { ...gate, ...labels, action });
|
|
2053
2102
|
if (!decision.ok) return decision;
|
|
2054
|
-
const
|
|
2103
|
+
const corroboration = validateActionCorroboration(action);
|
|
2104
|
+
if (!corroboration.ok) return corroboration;
|
|
2055
2105
|
proposed.push({
|
|
2056
2106
|
type: action.type,
|
|
2057
2107
|
description: describeAction(action),
|
|
2058
|
-
policyApproved: decision.value.allowed,
|
|
2059
|
-
corroborated:
|
|
2060
|
-
details: buildActionDetails(action, decision.value,
|
|
2108
|
+
policyApproved: decision.value.allowed && !corroboration.value.refused,
|
|
2109
|
+
corroborated: corroboration.value.satisfied,
|
|
2110
|
+
details: buildActionDetails(action, decision.value, corroboration.value)
|
|
2061
2111
|
});
|
|
2062
2112
|
}
|
|
2063
2113
|
return ok(proposed);
|
|
2064
2114
|
}
|
|
2115
|
+
function isStringArray(value) {
|
|
2116
|
+
return Array.isArray(value) && value.every((v) => typeof v === "string");
|
|
2117
|
+
}
|
|
2118
|
+
function readActionRefusal(action) {
|
|
2119
|
+
const { policyViolations, missingCorroboration, refusedAtStage } = action.details;
|
|
2120
|
+
return {
|
|
2121
|
+
policyViolations: isStringArray(policyViolations) ? policyViolations : [],
|
|
2122
|
+
missingCorroboration: isStringArray(missingCorroboration) ? missingCorroboration : [],
|
|
2123
|
+
...refusedAtStage === "corroboration" ? { refusedAtStage } : {}
|
|
2124
|
+
};
|
|
2125
|
+
}
|
|
2065
2126
|
|
|
2066
2127
|
// src/dogfooding/issue-triage.ts
|
|
2067
2128
|
var logger6 = createLogger({ component: "IssueTriage" });
|
|
@@ -2440,12 +2501,14 @@ export {
|
|
|
2440
2501
|
configureUntrustedInputFirewall,
|
|
2441
2502
|
runUntrustedInputFirewall,
|
|
2442
2503
|
evaluateActionThroughFirewall,
|
|
2504
|
+
validateActionCorroboration,
|
|
2443
2505
|
firewallInputFor,
|
|
2444
2506
|
parsePRUrl,
|
|
2445
2507
|
GitHubReviewer,
|
|
2446
2508
|
GitHubUserInfo,
|
|
2447
2509
|
createFullGitHubProvider,
|
|
2510
|
+
readActionRefusal,
|
|
2448
2511
|
IssueTriage,
|
|
2449
2512
|
createIssueTriage
|
|
2450
2513
|
};
|
|
2451
|
-
//# sourceMappingURL=chunk-
|
|
2514
|
+
//# sourceMappingURL=chunk-OZFXXGGZ.js.map
|