nexus-agents 8.26.2 → 8.26.3

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-WSUMZZPR.js";
24
+ } from "./chunk-QTPN4A5O.js";
25
25
  import {
26
26
  executeExpert
27
27
  } from "./chunk-CN3VAMQD.js";
@@ -55,7 +55,7 @@ import {
55
55
  toJobSummary,
56
56
  updateStage,
57
57
  writeJobCancelled
58
- } from "./chunk-QYEKMS52.js";
58
+ } from "./chunk-UR5RAP4B.js";
59
59
  import {
60
60
  allOf,
61
61
  anyOf
@@ -75,7 +75,7 @@ import {
75
75
  } from "./chunk-OYTRYITB.js";
76
76
  import {
77
77
  withPrerequisite
78
- } from "./chunk-MWYXL4HA.js";
78
+ } from "./chunk-WIRI74TV.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-YJVIPATJ.js";
103
+ } from "./chunk-GQIWZ6CF.js";
104
104
  import {
105
105
  createAuditTrail,
106
106
  createGraphAuditBridge,
@@ -45672,7 +45672,7 @@ function buildVotingInput(plan, config) {
45672
45672
  }
45673
45673
  async function executeSingleVote(plan, config, log) {
45674
45674
  try {
45675
- const { executeVoting } = await import("./consensus-vote-PQMLWFST.js");
45675
+ const { executeVoting } = await import("./consensus-vote-ZOXWKYH5.js");
45676
45676
  const input = buildVotingInput(plan, config);
45677
45677
  const result = await executeVoting(input, log);
45678
45678
  return parseVotingResult(result);
@@ -47464,7 +47464,7 @@ ${contextBlock}`;
47464
47464
  const strategy = config.votingStrategy ?? "higher_order";
47465
47465
  await postProgress(config, "Vote", `Running consensus with ${strategy} strategy...`);
47466
47466
  try {
47467
- const { executeVoting } = await import("./consensus-vote-PQMLWFST.js");
47467
+ const { executeVoting } = await import("./consensus-vote-ZOXWKYH5.js");
47468
47468
  const votingResult = await executeVoting(
47469
47469
  {
47470
47470
  proposal: buildVoteProposal(plan, research),
@@ -56180,4 +56180,4 @@ export {
56180
56180
  shutdownFeedbackSubscriber,
56181
56181
  createEventBusBridge
56182
56182
  };
56183
- //# sourceMappingURL=chunk-4T3NJARF.js.map
56183
+ //# sourceMappingURL=chunk-CF33TH6T.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  VERSION
3
- } from "./chunk-6UCSYXS7.js";
3
+ } from "./chunk-IV3ZXRJA.js";
4
4
  import {
5
5
  emitClawGuardViolation
6
6
  } from "./chunk-YOT4GWJV.js";
@@ -2255,4 +2255,4 @@ export {
2255
2255
  VOTING_THRESHOLDS,
2256
2256
  ConsensusMetricsSchema
2257
2257
  };
2258
- //# sourceMappingURL=chunk-YJVIPATJ.js.map
2258
+ //# sourceMappingURL=chunk-GQIWZ6CF.js.map
@@ -1,6 +1,6 @@
1
1
  // src/version.ts
2
2
  import semver from "semver";
3
- var VERSION = true ? "8.26.2" : "dev";
3
+ var VERSION = true ? "8.26.3" : "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-6UCSYXS7.js.map
14
+ //# sourceMappingURL=chunk-IV3ZXRJA.js.map
@@ -8,7 +8,7 @@ import {
8
8
  NODE_ENGINE_RANGE,
9
9
  VERSION,
10
10
  isNodeVersionSupported
11
- } from "./chunk-6UCSYXS7.js";
11
+ } from "./chunk-IV3ZXRJA.js";
12
12
  import {
13
13
  capitalize
14
14
  } from "./chunk-7LP6VJRP.js";
@@ -1228,7 +1228,7 @@ async function runDoctorFix(result) {
1228
1228
  writeLine2("\u2500".repeat(40));
1229
1229
  let fixCount = 0;
1230
1230
  if (!result.dataDirectory.rootExists || result.dataDirectory.subdirectories.some((d) => !d.exists || !d.writable)) {
1231
- const { initDataDirectories: initDataDirectories2, describeDataDirFix: describeDataDirFix2 } = await import("./setup-data-dir-UMMVAIQI.js");
1231
+ const { initDataDirectories: initDataDirectories2, describeDataDirFix: describeDataDirFix2 } = await import("./setup-data-dir-TN4Z2LJI.js");
1232
1232
  const outcome = describeDataDirFix2(initDataDirectories2());
1233
1233
  writeLine2(outcome.line);
1234
1234
  if (outcome.counted) fixCount++;
@@ -1330,4 +1330,4 @@ export {
1330
1330
  startStdioServer,
1331
1331
  closeServer
1332
1332
  };
1333
- //# sourceMappingURL=chunk-WSUMZZPR.js.map
1333
+ //# sourceMappingURL=chunk-QTPN4A5O.js.map
@@ -23,10 +23,10 @@ import {
23
23
  toolSuccessStructured,
24
24
  withProgressHeartbeat,
25
25
  wrapToolWithTimeout
26
- } from "./chunk-YJVIPATJ.js";
26
+ } from "./chunk-GQIWZ6CF.js";
27
27
  import {
28
28
  VERSION
29
- } from "./chunk-6UCSYXS7.js";
29
+ } from "./chunk-IV3ZXRJA.js";
30
30
  import {
31
31
  assessPanelIndependence,
32
32
  countDistinctModels,
@@ -7682,4 +7682,4 @@ export {
7682
7682
  CONSENSUS_VOTE_TOOL_SCHEMA,
7683
7683
  registerConsensusVoteTool
7684
7684
  };
7685
- //# sourceMappingURL=chunk-QYEKMS52.js.map
7685
+ //# sourceMappingURL=chunk-UR5RAP4B.js.map
@@ -7,7 +7,7 @@ import {
7
7
  toolStructuredError,
8
8
  toolSuccessStructured,
9
9
  wrapToolWithTimeout
10
- } from "./chunk-YJVIPATJ.js";
10
+ } from "./chunk-GQIWZ6CF.js";
11
11
  import {
12
12
  JsonlStore,
13
13
  SECURITY_KEYWORDS,
@@ -2159,4 +2159,4 @@ export {
2159
2159
  runImprovementReview,
2160
2160
  registerImprovementReviewTool
2161
2161
  };
2162
- //# sourceMappingURL=chunk-MWYXL4HA.js.map
2162
+ //# sourceMappingURL=chunk-WIRI74TV.js.map
package/dist/cli.js CHANGED
@@ -157,7 +157,7 @@ import {
157
157
  validateNexusEnv,
158
158
  validateWorkflow,
159
159
  wrapInMarkdownFence
160
- } from "./chunk-4T3NJARF.js";
160
+ } from "./chunk-CF33TH6T.js";
161
161
  import "./chunk-22EEMQUS.js";
162
162
  import "./chunk-DGWT7DXX.js";
163
163
  import "./chunk-64GMIUM5.js";
@@ -177,7 +177,7 @@ import {
177
177
  doctorCommand,
178
178
  initDataDirectories,
179
179
  runDoctor
180
- } from "./chunk-WSUMZZPR.js";
180
+ } from "./chunk-QTPN4A5O.js";
181
181
  import {
182
182
  buildOpenAICompatAdapters,
183
183
  readOpenAICompatEnv
@@ -196,7 +196,7 @@ import {
196
196
  recordAuthenticVote,
197
197
  registerConsensusVoteTool,
198
198
  toRecordDecision
199
- } from "./chunk-QYEKMS52.js";
199
+ } from "./chunk-UR5RAP4B.js";
200
200
  import {
201
201
  loadUsageEvents,
202
202
  rollupByModel
@@ -236,18 +236,18 @@ import {
236
236
  registerImprovementReviewTool,
237
237
  runImprovementReview,
238
238
  scanForSecrets
239
- } from "./chunk-MWYXL4HA.js";
239
+ } from "./chunk-WIRI74TV.js";
240
240
  import {
241
241
  createDefaultPolicyFirewall,
242
242
  setGlobalPolicyFirewall,
243
243
  setSecureHandlerAuditLogger,
244
244
  stagePolicyFirewallForRollout
245
- } from "./chunk-YJVIPATJ.js";
245
+ } from "./chunk-GQIWZ6CF.js";
246
246
  import {
247
247
  NODE_ENGINE_RANGE,
248
248
  VERSION,
249
249
  isNodeVersionSupported
250
- } from "./chunk-6UCSYXS7.js";
250
+ } from "./chunk-IV3ZXRJA.js";
251
251
  import "./chunk-YOT4GWJV.js";
252
252
  import {
253
253
  createUnifiedRegistry,
@@ -1977,14 +1977,14 @@ ${colors.dim}Session ended.${colors.reset}
1977
1977
  });
1978
1978
  });
1979
1979
  rl.prompt();
1980
- return new Promise((resolve14) => {
1980
+ return new Promise((resolve15) => {
1981
1981
  rl.on("line", (line) => {
1982
1982
  void (async () => {
1983
1983
  try {
1984
1984
  const shouldExit = await processLine(line, session, logger22);
1985
1985
  if (shouldExit) {
1986
1986
  rl.close();
1987
- resolve14();
1987
+ resolve15();
1988
1988
  return;
1989
1989
  }
1990
1990
  } catch (error) {
@@ -1996,7 +1996,7 @@ ${colors.dim}Session ended.${colors.reset}
1996
1996
  })();
1997
1997
  });
1998
1998
  rl.on("close", () => {
1999
- resolve14();
1999
+ resolve15();
2000
2000
  });
2001
2001
  });
2002
2002
  }
@@ -2015,7 +2015,7 @@ async function replCommand(options = {}) {
2015
2015
  // src/self-eval/component-scanner.ts
2016
2016
  import { readFileSync as readFileSync4 } from "node:fs";
2017
2017
  import { readdir, readFile, stat } from "node:fs/promises";
2018
- import { join as join3, basename, extname, relative } from "node:path";
2018
+ import { join as join3, basename, extname, relative, resolve as resolve5 } from "node:path";
2019
2019
  var DEFAULT_EXTENSIONS = [".ts"];
2020
2020
  var DEFAULT_MAX_FILE_SIZE = 1024 * 1024;
2021
2021
  var COMPLEXITY_PATTERNS = [
@@ -2066,14 +2066,26 @@ var ComponentScanner = class {
2066
2066
  async scan(directory) {
2067
2067
  const startTime = getTimeProvider().now();
2068
2068
  this.log.info("Starting component scan", { directory });
2069
- const files = await this.findFiles(directory);
2069
+ const resolvedDirectory = resolve5(directory);
2070
+ const files = await this.findFiles(resolvedDirectory);
2070
2071
  const components = [];
2071
2072
  for (const filePath of files) {
2072
- const component = await this.analyzeFile(directory, filePath);
2073
+ const component = await this.analyzeFile(resolvedDirectory, filePath);
2073
2074
  if (component) {
2074
2075
  components.push(component);
2075
2076
  }
2076
2077
  }
2078
+ const summary = this.loadCoverageSummary();
2079
+ if (summary !== null) {
2080
+ const summaryKeys = Object.keys(summary);
2081
+ const hasCoverageMatch = components.some((c) => c.testCoverage !== null);
2082
+ if (!hasCoverageMatch) {
2083
+ this.log.warn("Coverage summary loaded but matched no scanned files", {
2084
+ scannedFiles: components.length,
2085
+ summaryKeys: summaryKeys.length
2086
+ });
2087
+ }
2088
+ }
2077
2089
  const inventory = {
2078
2090
  components,
2079
2091
  scanTime: new Date(getTimeProvider().now()),
@@ -2133,10 +2145,10 @@ var ComponentScanner = class {
2133
2145
  /** Load + memoize `coverage-summary.json`; `null` when absent or unreadable. */
2134
2146
  loadCoverageSummary() {
2135
2147
  if (this.coverageSummary !== void 0) return this.coverageSummary;
2136
- const file = join3(this.coverageDir, "coverage-summary.json");
2148
+ const file = join3(resolve5(this.coverageDir), "coverage-summary.json");
2137
2149
  try {
2138
2150
  const parsed = JSON.parse(readFileSync4(file, "utf-8"));
2139
- this.coverageSummary = parsed;
2151
+ this.coverageSummary = parsed !== null && typeof parsed === "object" ? parsed : null;
2140
2152
  } catch {
2141
2153
  this.coverageSummary = null;
2142
2154
  }
@@ -9728,7 +9740,7 @@ async function researchIndexCommand(options) {
9728
9740
 
9729
9741
  // src/cli/research-import-command.ts
9730
9742
  import * as fs9 from "node:fs/promises";
9731
- import { resolve as resolve6 } from "node:path";
9743
+ import { resolve as resolve7 } from "node:path";
9732
9744
  var VALID_TYPES = ["paper", "repo", "tool", "blog"];
9733
9745
  function parseCsvLine(line) {
9734
9746
  const fields = [];
@@ -9832,7 +9844,7 @@ function mapToSourceType(csvType) {
9832
9844
  }
9833
9845
  }
9834
9846
  async function executeImport(options) {
9835
- const csvPath = resolve6(options.csvPath);
9847
+ const csvPath = resolve7(options.csvPath);
9836
9848
  let content;
9837
9849
  try {
9838
9850
  content = await fs9.readFile(csvPath, "utf-8");
@@ -12990,9 +13002,9 @@ function createReadline() {
12990
13002
  });
12991
13003
  }
12992
13004
  async function promptInput(rl, question) {
12993
- return new Promise((resolve14) => {
13005
+ return new Promise((resolve15) => {
12994
13006
  rl.question(question, (answer) => {
12995
- resolve14(answer.trim());
13007
+ resolve15(answer.trim());
12996
13008
  });
12997
13009
  });
12998
13010
  }
@@ -14800,7 +14812,7 @@ function writeResultAndExit(result) {
14800
14812
 
14801
14813
  // src/cli/hooks/hook-router.ts
14802
14814
  async function readStdin() {
14803
- return new Promise((resolve14, reject) => {
14815
+ return new Promise((resolve15, reject) => {
14804
14816
  let data = "";
14805
14817
  process.stdin.setEncoding("utf8");
14806
14818
  process.stdin.on("readable", () => {
@@ -14811,24 +14823,24 @@ async function readStdin() {
14811
14823
  }
14812
14824
  });
14813
14825
  process.stdin.on("end", () => {
14814
- resolve14(data);
14826
+ resolve15(data);
14815
14827
  });
14816
14828
  process.stdin.on("error", (err2) => {
14817
14829
  reject(err2);
14818
14830
  });
14819
14831
  if (process.stdin.isTTY) {
14820
- resolve14("");
14832
+ resolve15("");
14821
14833
  }
14822
14834
  });
14823
14835
  }
14824
14836
  async function readStdinWithTimeout(timeoutMs = 5e3) {
14825
- return new Promise((resolve14, reject) => {
14837
+ return new Promise((resolve15, reject) => {
14826
14838
  const timeout2 = setTimeout(() => {
14827
14839
  reject(new Error(`Stdin read timeout after ${String(timeoutMs)}ms`));
14828
14840
  }, timeoutMs);
14829
14841
  readStdin().then((data) => {
14830
14842
  clearTimeout(timeout2);
14831
- resolve14(data);
14843
+ resolve15(data);
14832
14844
  }).catch((err2) => {
14833
14845
  clearTimeout(timeout2);
14834
14846
  reject(err2 instanceof Error ? err2 : new Error(String(err2)));
@@ -16328,9 +16340,9 @@ function interactiveIO() {
16328
16340
  write: (text) => {
16329
16341
  process.stdout.write(text);
16330
16342
  },
16331
- prompt: (question) => new Promise((resolve14) => {
16343
+ prompt: (question) => new Promise((resolve15) => {
16332
16344
  rl.question(question, (answer) => {
16333
- resolve14(answer.trim());
16345
+ resolve15(answer.trim());
16334
16346
  });
16335
16347
  }),
16336
16348
  close: () => {
@@ -18882,7 +18894,7 @@ import {
18882
18894
  appendFileSync as appendFileSync2,
18883
18895
  readFileSync as readFileSync16
18884
18896
  } from "node:fs";
18885
- import { resolve as resolve10, join as join17, isAbsolute as isAbsolute2 } from "node:path";
18897
+ import { resolve as resolve11, join as join17, isAbsolute as isAbsolute2 } from "node:path";
18886
18898
 
18887
18899
  // src/cli/mcp-config-emitter.ts
18888
18900
  import { existsSync as existsSync19, readFileSync as readFileSync14, writeFileSync as writeFileSync8, appendFileSync } from "node:fs";
@@ -19163,9 +19175,9 @@ var DEFAULT_PORTABLE_DIRNAME = ".nexus-agents";
19163
19175
  var RESTRICTED_SUBDIRS = /* @__PURE__ */ new Set(["auth"]);
19164
19176
  function resolveTargetPath(rawPath) {
19165
19177
  if (rawPath === void 0 || rawPath === "") {
19166
- return resolve10(process.cwd(), DEFAULT_PORTABLE_DIRNAME);
19178
+ return resolve11(process.cwd(), DEFAULT_PORTABLE_DIRNAME);
19167
19179
  }
19168
- return isAbsolute2(rawPath) ? rawPath : resolve10(process.cwd(), rawPath);
19180
+ return isAbsolute2(rawPath) ? rawPath : resolve11(process.cwd(), rawPath);
19169
19181
  }
19170
19182
  function isNonEmpty(dir) {
19171
19183
  if (!existsSync22(dir)) return false;
@@ -19233,13 +19245,13 @@ function makeResult(opts) {
19233
19245
  }
19234
19246
  function applyGitignoreOption(target, options, dryRun) {
19235
19247
  if (options.gitignore !== true) return false;
19236
- const workspaceDir = resolve10(target, "..");
19248
+ const workspaceDir = resolve11(target, "..");
19237
19249
  const portableName = target.slice(workspaceDir.length + 1);
19238
19250
  return maybeUpdateGitignore(workspaceDir, portableName, dryRun);
19239
19251
  }
19240
19252
  function applyMcpConfigOption(target, options, dryRun) {
19241
19253
  if (options.mcpConfig !== true) return void 0;
19242
- const workspaceDir = resolve10(target, "..");
19254
+ const workspaceDir = resolve11(target, "..");
19243
19255
  const shimPath = findBinShim(target);
19244
19256
  return emitMcpConfig({
19245
19257
  workspaceDir,
@@ -19755,7 +19767,7 @@ function startImprovementReviewScheduler(options) {
19755
19767
  let running = false;
19756
19768
  const runOnce = async () => {
19757
19769
  try {
19758
- const { runImprovementReview: runImprovementReview2, ImprovementReviewInputSchema: ImprovementReviewInputSchema2 } = await import("./improvement-review-5C7DBVI2.js");
19770
+ const { runImprovementReview: runImprovementReview2, ImprovementReviewInputSchema: ImprovementReviewInputSchema2 } = await import("./improvement-review-5INULU65.js");
19759
19771
  const input = ImprovementReviewInputSchema2.parse({ fileIssues });
19760
19772
  const result = await runImprovementReview2(input, { logger: logger22 });
19761
19773
  logger22.info("Scheduled improvement_review complete", {
@@ -20672,7 +20684,7 @@ async function executeReplTask(task, options, logger22, rl) {
20672
20684
  }
20673
20685
  }
20674
20686
  function runOrchestratorRepl(options, logger22) {
20675
- return new Promise((resolve14) => {
20687
+ return new Promise((resolve15) => {
20676
20688
  const rl = readline2.createInterface({
20677
20689
  input: process.stdin,
20678
20690
  output: process.stdout,
@@ -20695,7 +20707,7 @@ function runOrchestratorRepl(options, logger22) {
20695
20707
  });
20696
20708
  rl.on("close", () => {
20697
20709
  logger22.info("Orchestrator REPL closed");
20698
- resolve14();
20710
+ resolve15();
20699
20711
  });
20700
20712
  });
20701
20713
  }
@@ -24859,7 +24871,7 @@ function handleStatusCommand2(args) {
24859
24871
 
24860
24872
  // src/cli/scenario-command.ts
24861
24873
  import { readdir as readdir4 } from "node:fs/promises";
24862
- import { join as join20, resolve as resolve12 } from "node:path";
24874
+ import { join as join20, resolve as resolve13 } from "node:path";
24863
24875
 
24864
24876
  // src/testing/e2e/scenario-runner.ts
24865
24877
  import { readFile as readFile7 } from "node:fs/promises";
@@ -25019,7 +25031,7 @@ function checkCircularDependencies(workflow) {
25019
25031
  var defaultStubFactory = {
25020
25032
  createAgentStub(agentType, action) {
25021
25033
  return async (inputs) => {
25022
- await new Promise((resolve14) => setTimeout(resolve14, 10));
25034
+ await new Promise((resolve15) => setTimeout(resolve15, 10));
25023
25035
  return {
25024
25036
  stepId: `${agentType}-${action}`,
25025
25037
  status: "success",
@@ -25178,7 +25190,7 @@ function createScenarioRunner(stubFactory) {
25178
25190
  }
25179
25191
 
25180
25192
  // src/cli/scenario-command.ts
25181
- var FIXTURES_DIR = resolve12(import.meta.dirname, "../testing/e2e/fixtures");
25193
+ var FIXTURES_DIR = resolve13(import.meta.dirname, "../testing/e2e/fixtures");
25182
25194
  var SCENARIO_SUFFIX = ".scenario.yaml";
25183
25195
  async function listScenarios() {
25184
25196
  try {
@@ -26184,7 +26196,7 @@ import { z as z13 } from "zod";
26184
26196
 
26185
26197
  // src/mcp/tools/codepr-guards.ts
26186
26198
  import { realpathSync } from "node:fs";
26187
- import { isAbsolute as isAbsolute3, resolve as resolve13, relative as relative4, sep as sep3, dirname as dirname10, basename as basename5 } from "node:path";
26199
+ import { isAbsolute as isAbsolute3, resolve as resolve14, relative as relative4, sep as sep3, dirname as dirname10, basename as basename5 } from "node:path";
26188
26200
  import { z as z12 } from "zod";
26189
26201
  function deny(reason, detail) {
26190
26202
  return { ok: false, reason, detail };
@@ -26206,7 +26218,7 @@ function confinePath(worktreeRoot, candidatePath, realpath = realpathSync) {
26206
26218
  } catch {
26207
26219
  return deny("path_escape", "worktreeRoot could not be resolved (fail-closed)");
26208
26220
  }
26209
- const joined = isAbsolute3(candidatePath) ? candidatePath : resolve13(resolvedRoot, candidatePath);
26221
+ const joined = isAbsolute3(candidatePath) ? candidatePath : resolve14(resolvedRoot, candidatePath);
26210
26222
  const reassembled = resolveNewFilePath(joined, realpath);
26211
26223
  if (reassembled === void 0) {
26212
26224
  return deny("path_escape", "candidate path could not be resolved (fail-closed)");
@@ -26231,7 +26243,7 @@ function resolveNewFilePath(joined, realpath) {
26231
26243
  existing = parent;
26232
26244
  }
26233
26245
  }
26234
- return trailing.length === 0 ? existing : resolve13(existing, ...trailing.reverse());
26246
+ return trailing.length === 0 ? existing : resolve14(existing, ...trailing.reverse());
26235
26247
  }
26236
26248
  function isWithin(parent, child) {
26237
26249
  if (child === parent) return true;