nexus-agents 8.42.7 → 8.42.9

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.
@@ -21,7 +21,7 @@ import {
21
21
  import {
22
22
  DEFAULT_TASK_TTL_MS,
23
23
  clampTaskTtl
24
- } from "./chunk-5FTZPRLT.js";
24
+ } from "./chunk-KJDCFQ6X.js";
25
25
  import {
26
26
  executeExpert
27
27
  } from "./chunk-HTSKUXUY.js";
@@ -55,7 +55,7 @@ import {
55
55
  toJobSummary,
56
56
  updateStage,
57
57
  writeJobCancelled
58
- } from "./chunk-THNKDI4A.js";
58
+ } from "./chunk-QYB34SJZ.js";
59
59
  import {
60
60
  allOf,
61
61
  anyOf
@@ -75,7 +75,7 @@ import {
75
75
  } from "./chunk-NQXISQVW.js";
76
76
  import {
77
77
  withPrerequisite
78
- } from "./chunk-VXPLA32M.js";
78
+ } from "./chunk-YSWFDYTA.js";
79
79
  import {
80
80
  NOOP_NOTIFIER,
81
81
  RateLimiter,
@@ -100,7 +100,7 @@ import {
100
100
  withAuditTrail,
101
101
  withProgressHeartbeat,
102
102
  wrapToolWithTimeout
103
- } from "./chunk-E4RL4FT6.js";
103
+ } from "./chunk-JPE77J4Q.js";
104
104
  import {
105
105
  createAuditTrail,
106
106
  createGraphAuditBridge,
@@ -12144,6 +12144,13 @@ function scoreFor(suppliedScore, coverage, validVulns, calculateScore2) {
12144
12144
  if (coverage === "partial") return calculateScore2(validVulns);
12145
12145
  return typeof suppliedScore === "number" && suppliedScore >= 0 && suppliedScore <= 100 ? suppliedScore : calculateScore2(validVulns);
12146
12146
  }
12147
+ function heuristicSecurityOutcome(vulnerabilities, calculateScore2 = calculateSecurityScore) {
12148
+ const findingsCoverage = vulnerabilities.length > 0 ? "partial" : "unmeasured";
12149
+ return {
12150
+ findingsCoverage,
12151
+ securityScore: scoreFor(void 0, findingsCoverage, vulnerabilities, calculateScore2)
12152
+ };
12153
+ }
12147
12154
  function buildSecurityCore(p, validVulns, rejectedFindings, calculateScore2) {
12148
12155
  const conf = p["confidence"];
12149
12156
  const findingsCoverage = coverageFor(rejectedFindings, validVulns.length);
@@ -12172,12 +12179,12 @@ function parseSecurityResult(text, calculateScore2, validator) {
12172
12179
  return result;
12173
12180
  } catch {
12174
12181
  const heuristicVulns = detectHeuristicVulnerabilities(text);
12175
- const findingsCoverage = heuristicVulns.length > 0 ? "partial" : "unmeasured";
12182
+ const outcome = heuristicSecurityOutcome(heuristicVulns, calculateScore2);
12176
12183
  return {
12177
12184
  content: text,
12178
12185
  vulnerabilities: heuristicVulns,
12179
- securityScore: scoreFor(void 0, findingsCoverage, heuristicVulns, calculateScore2),
12180
- findingsCoverage,
12186
+ securityScore: outcome.securityScore,
12187
+ findingsCoverage: outcome.findingsCoverage,
12181
12188
  confidence: heuristicVulns.length > 0 ? 0.5 : 0.3
12182
12189
  };
12183
12190
  }
@@ -12230,12 +12237,12 @@ Analyze for security vulnerabilities and provide findings in the specified JSON
12230
12237
  enableCweMapping: this.expertOptions.enableCweMapping,
12231
12238
  minSeverity: this.expertOptions.minSeverity
12232
12239
  });
12233
- const securityScore = calculateSecurityScore(vulnerabilities);
12240
+ const { findingsCoverage, securityScore } = heuristicSecurityOutcome(vulnerabilities);
12234
12241
  const result = {
12235
12242
  content: "Heuristic security analysis. Model adapter required for comprehensive review.",
12236
12243
  vulnerabilities,
12237
12244
  securityScore,
12238
- findingsCoverage: "complete",
12245
+ findingsCoverage,
12239
12246
  recommendations: generateHeuristicRecommendations2(vulnerabilities),
12240
12247
  warnings: generateSecurityWarnings(vulnerabilities),
12241
12248
  confidence: vulnerabilities.length > 0 ? 0.6 : 0.4
@@ -45950,7 +45957,7 @@ function buildVotingInput(plan, config) {
45950
45957
  }
45951
45958
  async function executeSingleVote(plan, config, log) {
45952
45959
  try {
45953
- const { executeVoting } = await import("./consensus-vote-QWJY7IE4.js");
45960
+ const { executeVoting } = await import("./consensus-vote-XNC7NRAJ.js");
45954
45961
  const input = buildVotingInput(plan, config);
45955
45962
  const result = await executeVoting(input, log);
45956
45963
  return parseVotingResult(result);
@@ -46332,6 +46339,9 @@ async function runPlanningPhase(task, stages, prior, options) {
46332
46339
  function buildHarnessResult(planResult, tasks) {
46333
46340
  return {
46334
46341
  completed: false,
46342
+ // Says WHY completion is false: by request, not by fault (#5888) — the
46343
+ // same role `dryRun` plays for the other deliberate stop.
46344
+ harnessMode: true,
46335
46345
  plan: planResult.plan,
46336
46346
  tasks,
46337
46347
  voteIterations: planResult.iterations,
@@ -47742,7 +47752,7 @@ ${contextBlock}`;
47742
47752
  const strategy = config.votingStrategy ?? "higher_order";
47743
47753
  await postProgress(config, "Vote", `Running consensus with ${strategy} strategy...`);
47744
47754
  try {
47745
- const { executeVoting } = await import("./consensus-vote-QWJY7IE4.js");
47755
+ const { executeVoting } = await import("./consensus-vote-XNC7NRAJ.js");
47746
47756
  const votingResult = await executeVoting(
47747
47757
  {
47748
47758
  proposal: buildVoteProposal(plan, research),
@@ -51743,6 +51753,7 @@ function buildStructuredOutput(result, simulated) {
51743
51753
  // security rejection from a gate that never ran — which is the whole point
51744
51754
  // of the fields. They were added to DevPipelineResult and then not listed
51745
51755
  // here, so they never reached the MCP surface.
51756
+ ...result.harnessMode !== void 0 ? { harnessMode: result.harnessMode } : {},
51746
51757
  ...result.securityRan !== void 0 ? { securityRan: result.securityRan } : {},
51747
51758
  ...result.planStatus !== void 0 ? { planStatus: result.planStatus } : {},
51748
51759
  ...result.planVoteReason !== void 0 ? { planVoteReason: result.planVoteReason } : {},
@@ -51787,7 +51798,27 @@ function buildPipelineOptions(input, trustTier, auditLogger) {
51787
51798
  async function executeDevPipelineBody(taskText, stages, pipelineOptions, simulated) {
51788
51799
  const result = await runDevPipeline(taskText, stages, pipelineOptions);
51789
51800
  flushPipelineMemory();
51790
- return toolSuccessStructured(buildStructuredOutput(result, simulated));
51801
+ const output2 = buildStructuredOutput(result, simulated);
51802
+ if (!result.completed && result.dryRun !== true && result.harnessMode !== true) {
51803
+ return toolStructuredError({
51804
+ errorCategory: "business",
51805
+ message: describeIncompleteRun(result),
51806
+ detail: output2
51807
+ });
51808
+ }
51809
+ return toolSuccessStructured(output2);
51810
+ }
51811
+ function describeIncompleteRun(result) {
51812
+ if (result.planStatus !== void 0) {
51813
+ return `Pipeline stopped at the planning gate (planStatus: ${result.planStatus})`;
51814
+ }
51815
+ if (result.securityRan === true && !result.securityPassed) {
51816
+ return "Pipeline did not complete: the security gate rejected the change";
51817
+ }
51818
+ if (result.taskStatus !== void 0 && result.taskStatus !== "all_done") {
51819
+ return `Pipeline did not complete: tasks ${result.taskStatus}`;
51820
+ }
51821
+ return "Pipeline did not complete";
51791
51822
  }
51792
51823
  async function runDevPipelineHandler(args, logger55, trustTier, auditLogger) {
51793
51824
  const parsed = DevPipelineInputSchema.safeParse(args);
@@ -56423,4 +56454,4 @@ export {
56423
56454
  startPipelineEventBridge,
56424
56455
  shutdownPipelineEventBridge
56425
56456
  };
56426
- //# sourceMappingURL=chunk-RXEQG3NK.js.map
56457
+ //# sourceMappingURL=chunk-IVAWIOCS.js.map