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.
Files changed (28) hide show
  1. package/dist/{chunk-5XAJU5ZV.js → chunk-3K7OHJLM.js} +18 -11
  2. package/dist/{chunk-5XAJU5ZV.js.map → chunk-3K7OHJLM.js.map} +1 -1
  3. package/dist/{chunk-LZGSWYDX.js → chunk-5EXZHBAQ.js} +2 -2
  4. package/dist/{chunk-GS5OJHJJ.js → chunk-7ZMNE7U2.js} +3 -3
  5. package/dist/{chunk-I2MSRFXZ.js → chunk-ER76ZRBU.js} +3 -3
  6. package/dist/{chunk-QBZ6DBJL.js → chunk-MYF73MI3.js} +2 -2
  7. package/dist/{chunk-6IUAMO5M.js → chunk-NW5MCYOE.js} +2 -2
  8. package/dist/{chunk-VIVM7X76.js → chunk-OZFXXGGZ.js} +71 -8
  9. package/dist/chunk-OZFXXGGZ.js.map +1 -0
  10. package/dist/cli.js +25 -15
  11. package/dist/cli.js.map +1 -1
  12. package/dist/{consensus-vote-7JRI7YF6.js → consensus-vote-3ZA6SHMI.js} +4 -4
  13. package/dist/{improvement-review-JVI3RM7I.js → improvement-review-VC46AY77.js} +4 -4
  14. package/dist/index.d.ts +20 -1
  15. package/dist/index.js +7 -7
  16. package/dist/{issue-triage-6KIGFUFJ.js → issue-triage-M7XEMQZ7.js} +2 -2
  17. package/dist/{setup-data-dir-VCSQTZ6L.js → setup-data-dir-NQITBZYA.js} +3 -3
  18. package/package.json +1 -1
  19. package/dist/chunk-VIVM7X76.js.map +0 -1
  20. /package/dist/{chunk-LZGSWYDX.js.map → chunk-5EXZHBAQ.js.map} +0 -0
  21. /package/dist/{chunk-GS5OJHJJ.js.map → chunk-7ZMNE7U2.js.map} +0 -0
  22. /package/dist/{chunk-I2MSRFXZ.js.map → chunk-ER76ZRBU.js.map} +0 -0
  23. /package/dist/{chunk-QBZ6DBJL.js.map → chunk-MYF73MI3.js.map} +0 -0
  24. /package/dist/{chunk-6IUAMO5M.js.map → chunk-NW5MCYOE.js.map} +0 -0
  25. /package/dist/{consensus-vote-7JRI7YF6.js.map → consensus-vote-3ZA6SHMI.js.map} +0 -0
  26. /package/dist/{improvement-review-JVI3RM7I.js.map → improvement-review-VC46AY77.js.map} +0 -0
  27. /package/dist/{issue-triage-6KIGFUFJ.js.map → issue-triage-M7XEMQZ7.js.map} +0 -0
  28. /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-QBZ6DBJL.js";
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-LZGSWYDX.js.map
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-QBZ6DBJL.js";
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-VCSQTZ6L.js");
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-GS5OJHJJ.js.map
1477
+ //# sourceMappingURL=chunk-7ZMNE7U2.js.map
@@ -24,10 +24,10 @@ import {
24
24
  toolSuccessStructured,
25
25
  withProgressHeartbeat,
26
26
  wrapToolWithTimeout
27
- } from "./chunk-LZGSWYDX.js";
27
+ } from "./chunk-5EXZHBAQ.js";
28
28
  import {
29
29
  VERSION
30
- } from "./chunk-QBZ6DBJL.js";
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-I2MSRFXZ.js.map
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.77.0" : "dev";
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-QBZ6DBJL.js.map
14
+ //# sourceMappingURL=chunk-MYF73MI3.js.map
@@ -7,7 +7,7 @@ import {
7
7
  toolStructuredError,
8
8
  toolSuccessStructured,
9
9
  wrapToolWithTimeout
10
- } from "./chunk-LZGSWYDX.js";
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-6IUAMO5M.js.map
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
- policyViolations: policy.violations.map((violation) => violation.rule),
2043
- missingCorroboration: corrob.missing,
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 corrobResult = validateCorroboration(action);
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: corrobResult.satisfied,
2060
- details: buildActionDetails(action, decision.value, corrobResult)
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-VIVM7X76.js.map
2514
+ //# sourceMappingURL=chunk-OZFXXGGZ.js.map