nexus-agents 2.29.0 → 2.29.2

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 (112) hide show
  1. package/dist/adaptive-memory-5VP5WWTE.js +15 -0
  2. package/dist/chunk-5COIDGQJ.js +1585 -0
  3. package/dist/chunk-5COIDGQJ.js.map +1 -0
  4. package/dist/{chunk-HWDBNDUX.js → chunk-63AJLNKU.js} +2 -2
  5. package/dist/chunk-66NNHMVB.js +195 -0
  6. package/dist/chunk-66NNHMVB.js.map +1 -0
  7. package/dist/chunk-AP2FD37C.js +127 -0
  8. package/dist/chunk-AP2FD37C.js.map +1 -0
  9. package/dist/chunk-BC3M4VLP.js +359 -0
  10. package/dist/chunk-BC3M4VLP.js.map +1 -0
  11. package/dist/chunk-BQ4YXGGQ.js +127 -0
  12. package/dist/chunk-BQ4YXGGQ.js.map +1 -0
  13. package/dist/{chunk-ZBZJHXRT.js → chunk-CW2Z773T.js} +19 -347
  14. package/dist/chunk-CW2Z773T.js.map +1 -0
  15. package/dist/chunk-DDQGAVQA.js +944 -0
  16. package/dist/chunk-DDQGAVQA.js.map +1 -0
  17. package/dist/chunk-ED6VQWNG.js +63 -0
  18. package/dist/chunk-ED6VQWNG.js.map +1 -0
  19. package/dist/{chunk-7F6HYUIY.js → chunk-EPMBGZQX.js} +16 -97
  20. package/dist/chunk-EPMBGZQX.js.map +1 -0
  21. package/dist/chunk-GX436VRU.js +931 -0
  22. package/dist/chunk-GX436VRU.js.map +1 -0
  23. package/dist/{chunk-IMWYKX4H.js → chunk-HSOPD265.js} +444 -399
  24. package/dist/chunk-HSOPD265.js.map +1 -0
  25. package/dist/{chunk-S3BKWNST.js → chunk-J245RJGW.js} +680 -1436
  26. package/dist/chunk-J245RJGW.js.map +1 -0
  27. package/dist/{chunk-I6YDS23R.js → chunk-KQIDTE52.js} +2 -2
  28. package/dist/{chunk-POBO4G2P.js → chunk-LDIN2PLV.js} +250 -110
  29. package/dist/chunk-LDIN2PLV.js.map +1 -0
  30. package/dist/{chunk-KGDG6PWZ.js → chunk-LKDHAJJB.js} +2 -2
  31. package/dist/{chunk-T7PU3NPQ.js → chunk-NKGTEJYU.js} +7 -5
  32. package/dist/{chunk-T7PU3NPQ.js.map → chunk-NKGTEJYU.js.map} +1 -1
  33. package/dist/chunk-QGODFK36.js +122 -0
  34. package/dist/chunk-QGODFK36.js.map +1 -0
  35. package/dist/{chunk-DAMRMAM2.js → chunk-QSNAFOE6.js} +12369 -14499
  36. package/dist/chunk-QSNAFOE6.js.map +1 -0
  37. package/dist/chunk-TL2GJMJ5.js +700 -0
  38. package/dist/chunk-TL2GJMJ5.js.map +1 -0
  39. package/dist/{chunk-WSK4VSXP.js → chunk-V6MSPUQF.js} +2 -2
  40. package/dist/chunk-VZ2YOQWU.js +90 -0
  41. package/dist/chunk-VZ2YOQWU.js.map +1 -0
  42. package/dist/{chunk-5VZLXMO7.js → chunk-WSYJN7BI.js} +7 -6
  43. package/dist/chunk-WSYJN7BI.js.map +1 -0
  44. package/dist/chunk-Y477EGI4.js +356 -0
  45. package/dist/chunk-Y477EGI4.js.map +1 -0
  46. package/dist/{chunk-HH5LVGEE.js → chunk-Z4OZ25VS.js} +4 -4
  47. package/dist/cli-circuit-breaker-6EJO3PPU.js +13 -0
  48. package/dist/cli.js +123 -68
  49. package/dist/cli.js.map +1 -1
  50. package/dist/codebase-search-CZUA37RU.js +9 -0
  51. package/dist/{composite-router-YPRWVTRB.js → composite-router-JD7URTC2.js} +2 -2
  52. package/dist/{consensus-vote-DBE6RNZG.js → consensus-vote-COW34Q2Y.js} +7 -5
  53. package/dist/{dist-7PQR2BQB.js → dist-CV74KUT7.js} +1302 -805
  54. package/dist/dist-CV74KUT7.js.map +1 -0
  55. package/dist/{doctor-deep-AWE7SRU6.js → doctor-deep-4A4X5X6U.js} +3 -3
  56. package/dist/expert-bridge-J36C7VES.js +10 -0
  57. package/dist/{expert-config-FHNBQRX2.js → expert-config-MQ5OJE3U.js} +2 -2
  58. package/dist/{factory-O5C7ZBZO.js → factory-4Z4RSUYE.js} +5 -4
  59. package/dist/{factory-PCHGQ3ZG.js → factory-NHORX63J.js} +4 -3
  60. package/dist/index.d.ts +507 -42
  61. package/dist/index.js +331 -78
  62. package/dist/index.js.map +1 -1
  63. package/dist/issue-triage-TIG3RKXF.js +15 -0
  64. package/dist/{mcp-config-AUZQPUBY.js → mcp-config-ETY7GFGW.js} +3 -3
  65. package/dist/mobimem-5PAAMVFR.js +13 -0
  66. package/dist/mobimem-5PAAMVFR.js.map +1 -0
  67. package/dist/repo-analyze-HWMXSK5C.js +24 -0
  68. package/dist/repo-analyze-HWMXSK5C.js.map +1 -0
  69. package/dist/repo-security-plan-KQB3ZJTE.js +17 -0
  70. package/dist/repo-security-plan-KQB3ZJTE.js.map +1 -0
  71. package/dist/research-helpers-synthesize-ZMERZZ5B.js +10 -0
  72. package/dist/research-helpers-synthesize-ZMERZZ5B.js.map +1 -0
  73. package/dist/{routing-memory-QY3XMU2R.js → routing-memory-3ES3OHLM.js} +2 -2
  74. package/dist/routing-memory-3ES3OHLM.js.map +1 -0
  75. package/dist/{session-memory-3MBCE5KS.js → session-memory-E2OE2CYR.js} +3 -3
  76. package/dist/session-memory-E2OE2CYR.js.map +1 -0
  77. package/dist/{setup-command-IQ4MD3FT.js → setup-command-CMCQRBJF.js} +7 -6
  78. package/dist/setup-command-CMCQRBJF.js.map +1 -0
  79. package/dist/{setup-config-5YUPLDXF.js → setup-config-KITOPV7V.js} +3 -3
  80. package/dist/setup-config-KITOPV7V.js.map +1 -0
  81. package/dist/shared-memory-AEO2HJLC.js +8 -0
  82. package/dist/shared-memory-AEO2HJLC.js.map +1 -0
  83. package/dist/symbol-extractor-UEBANFSN.js +10 -0
  84. package/dist/symbol-extractor-UEBANFSN.js.map +1 -0
  85. package/dist/{weather-report-CC2C4KAX.js → weather-report-KUSVNXDZ.js} +2 -2
  86. package/dist/weather-report-KUSVNXDZ.js.map +1 -0
  87. package/package.json +14 -13
  88. package/dist/chunk-5VZLXMO7.js.map +0 -1
  89. package/dist/chunk-7F6HYUIY.js.map +0 -1
  90. package/dist/chunk-DAMRMAM2.js.map +0 -1
  91. package/dist/chunk-IMWYKX4H.js.map +0 -1
  92. package/dist/chunk-POBO4G2P.js.map +0 -1
  93. package/dist/chunk-S3BKWNST.js.map +0 -1
  94. package/dist/chunk-ZBZJHXRT.js.map +0 -1
  95. package/dist/dist-7PQR2BQB.js.map +0 -1
  96. /package/dist/{composite-router-YPRWVTRB.js.map → adaptive-memory-5VP5WWTE.js.map} +0 -0
  97. /package/dist/{chunk-HWDBNDUX.js.map → chunk-63AJLNKU.js.map} +0 -0
  98. /package/dist/{chunk-I6YDS23R.js.map → chunk-KQIDTE52.js.map} +0 -0
  99. /package/dist/{chunk-KGDG6PWZ.js.map → chunk-LKDHAJJB.js.map} +0 -0
  100. /package/dist/{chunk-WSK4VSXP.js.map → chunk-V6MSPUQF.js.map} +0 -0
  101. /package/dist/{chunk-HH5LVGEE.js.map → chunk-Z4OZ25VS.js.map} +0 -0
  102. /package/dist/{consensus-vote-DBE6RNZG.js.map → cli-circuit-breaker-6EJO3PPU.js.map} +0 -0
  103. /package/dist/{doctor-deep-AWE7SRU6.js.map → codebase-search-CZUA37RU.js.map} +0 -0
  104. /package/dist/{expert-config-FHNBQRX2.js.map → composite-router-JD7URTC2.js.map} +0 -0
  105. /package/dist/{factory-O5C7ZBZO.js.map → consensus-vote-COW34Q2Y.js.map} +0 -0
  106. /package/dist/{factory-PCHGQ3ZG.js.map → doctor-deep-4A4X5X6U.js.map} +0 -0
  107. /package/dist/{mcp-config-AUZQPUBY.js.map → expert-bridge-J36C7VES.js.map} +0 -0
  108. /package/dist/{routing-memory-QY3XMU2R.js.map → expert-config-MQ5OJE3U.js.map} +0 -0
  109. /package/dist/{session-memory-3MBCE5KS.js.map → factory-4Z4RSUYE.js.map} +0 -0
  110. /package/dist/{setup-command-IQ4MD3FT.js.map → factory-NHORX63J.js.map} +0 -0
  111. /package/dist/{setup-config-5YUPLDXF.js.map → issue-triage-TIG3RKXF.js.map} +0 -0
  112. /package/dist/{weather-report-CC2C4KAX.js.map → mcp-config-ETY7GFGW.js.map} +0 -0
package/dist/cli.js CHANGED
@@ -1,9 +1,4 @@
1
1
  #!/usr/bin/env node
2
- import "./chunk-HWDBNDUX.js";
3
- import {
4
- setupCommandAsync
5
- } from "./chunk-HH5LVGEE.js";
6
- import "./chunk-WSK4VSXP.js";
7
2
  import {
8
3
  calculateConsensus,
9
4
  countByCategory,
@@ -17,6 +12,11 @@ import {
17
12
  parseFindings,
18
13
  sumFindings
19
14
  } from "./chunk-6E3NMMEY.js";
15
+ import "./chunk-63AJLNKU.js";
16
+ import {
17
+ setupCommandAsync
18
+ } from "./chunk-Z4OZ25VS.js";
19
+ import "./chunk-V6MSPUQF.js";
20
20
  import {
21
21
  AuthHandler,
22
22
  CustomExpertDefinitionSchema,
@@ -38,7 +38,6 @@ import {
38
38
  adaptRoutingConfig,
39
39
  addResearchPaper,
40
40
  analyzeTools,
41
- classifyTrust,
42
41
  createAgentStages,
43
42
  createAnnotationsProxy,
44
43
  createAuditLogger,
@@ -48,7 +47,6 @@ import {
48
47
  createEventBusBridge,
49
48
  createExecutor,
50
49
  createFeedbackIntegration,
51
- createFullGitHubProvider,
52
50
  createGatewayServerProxy,
53
51
  createHarnessExecutor,
54
52
  createLearnablePolicy,
@@ -73,7 +71,6 @@ import {
73
71
  discoverOpenAlex,
74
72
  discoverPapersWithCode,
75
73
  discoverSemanticScholar,
76
- evaluatePolicy2 as evaluatePolicy,
77
74
  findOverlaps,
78
75
  flushPipelineMemory,
79
76
  formatOverlapResult,
@@ -108,11 +105,8 @@ import {
108
105
  loadAllExternalPacks,
109
106
  loadConfig,
110
107
  loadDataset,
111
- loadPapersRegistry,
112
108
  loadSourcesRegistry,
113
- loadTechniquesRegistry,
114
109
  loadWorkflowFile,
115
- parsePRUrl,
116
110
  rankDiscoveredItems,
117
111
  readStoredToken,
118
112
  registerCreateExpertTool,
@@ -127,6 +121,7 @@ import {
127
121
  registerMemoryStatsTool,
128
122
  registerMemoryWriteTool,
129
123
  registerOrchestrateTool,
124
+ registerPipelineTool,
130
125
  registerPrompts,
131
126
  registerQueryTraceTool,
132
127
  registerRegistryImportTool,
@@ -148,29 +143,23 @@ import {
148
143
  resolveV2Config,
149
144
  runBenchmarkInstances,
150
145
  runDevPipeline,
151
- sanitizeInput,
152
- savePapersRegistry,
153
146
  saveSourcesRegistry,
154
147
  setGlobalToolRateLimiterFactory,
155
- synthesizeResearch,
156
148
  validateArgs,
157
149
  validateCommand,
158
150
  validateNexusEnv,
159
151
  validateWorkflow,
160
152
  wrapInMarkdownFence
161
- } from "./chunk-DAMRMAM2.js";
153
+ } from "./chunk-QSNAFOE6.js";
162
154
  import {
163
- VERSION,
164
- closeServer,
165
- connectTransport,
166
- createServer,
167
- doctorCommand,
168
- initDataDirectories,
169
- runDoctor
170
- } from "./chunk-5VZLXMO7.js";
155
+ resolveToken
156
+ } from "./chunk-VZ2YOQWU.js";
157
+ import {
158
+ CATEGORY_DISPLAY_NAMES,
159
+ DEFAULT_PR_REVIEW_CONFIG
160
+ } from "./chunk-X2M7OF27.js";
171
161
  import {
172
162
  DEFAULT_VOTE_TIMEOUT_MS,
173
- MemoryError,
174
163
  THRESHOLD_MAP,
175
164
  VOTER_ROLES,
176
165
  collectRealVotes,
@@ -180,26 +169,56 @@ import {
180
169
  registerConsensusVoteTool,
181
170
  shutdownToolMemory,
182
171
  validateTimeout
183
- } from "./chunk-S3BKWNST.js";
172
+ } from "./chunk-J245RJGW.js";
173
+ import {
174
+ loadPapersRegistry,
175
+ loadTechniquesRegistry,
176
+ savePapersRegistry,
177
+ synthesizeResearch
178
+ } from "./chunk-GX436VRU.js";
179
+ import {
180
+ classifyTrust,
181
+ createFullGitHubProvider,
182
+ evaluatePolicy,
183
+ parsePRUrl,
184
+ sanitizeInput
185
+ } from "./chunk-5COIDGQJ.js";
186
+ import "./chunk-EPMBGZQX.js";
187
+ import "./chunk-TL2GJMJ5.js";
188
+ import "./chunk-BC3M4VLP.js";
189
+ import "./chunk-AP2FD37C.js";
190
+ import "./chunk-BQ4YXGGQ.js";
191
+ import "./chunk-ED6VQWNG.js";
192
+ import {
193
+ BUILT_IN_EXPERTS
194
+ } from "./chunk-LDIN2PLV.js";
195
+ import {
196
+ VERSION,
197
+ closeServer,
198
+ connectTransport,
199
+ createServer,
200
+ doctorCommand,
201
+ initDataDirectories,
202
+ runDoctor
203
+ } from "./chunk-WSYJN7BI.js";
204
+ import "./chunk-KQIDTE52.js";
205
+ import {
206
+ MemoryError
207
+ } from "./chunk-DDQGAVQA.js";
184
208
  import {
185
209
  capitalize,
186
210
  capitalizeKebab,
187
211
  truncateSentence
188
212
  } from "./chunk-633WH2ML.js";
189
- import "./chunk-I6YDS23R.js";
190
- import "./chunk-KGDG6PWZ.js";
191
- import {
192
- resolveToken
193
- } from "./chunk-7F6HYUIY.js";
194
- import {
195
- CATEGORY_DISPLAY_NAMES,
196
- DEFAULT_PR_REVIEW_CONFIG
197
- } from "./chunk-X2M7OF27.js";
213
+ import "./chunk-LKDHAJJB.js";
214
+ import "./chunk-66NNHMVB.js";
215
+ import "./chunk-QGODFK36.js";
198
216
  import {
199
217
  createAllAdapters,
200
218
  getAvailableClis,
201
219
  isRecord
202
- } from "./chunk-ZBZJHXRT.js";
220
+ } from "./chunk-CW2Z773T.js";
221
+ import "./chunk-Y477EGI4.js";
203
222
  import {
204
223
  API_TIMEOUTS,
205
224
  AgentCapability,
@@ -260,11 +279,8 @@ import {
260
279
  toError,
261
280
  writeEmptyLine,
262
281
  writeLine
263
- } from "./chunk-IMWYKX4H.js";
282
+ } from "./chunk-HSOPD265.js";
264
283
  import "./chunk-CLYZ7FWP.js";
265
- import {
266
- BUILT_IN_EXPERTS
267
- } from "./chunk-POBO4G2P.js";
268
284
  import "./chunk-UP2VWCW5.js";
269
285
 
270
286
  // src/cli.ts
@@ -437,7 +453,9 @@ logging:
437
453
  format: json
438
454
 
439
455
  # Destination: stdout, stderr, file
440
- destination: stdout
456
+ # NOTE: stdout is unsafe when running as an MCP stdio server (corrupts
457
+ # JSON-RPC frames). Keep stderr unless you have a specific need.
458
+ destination: stderr
441
459
 
442
460
  # Log file path (required if destination is 'file')
443
461
  # filePath: ./logs/nexus-agents.log
@@ -14137,10 +14155,10 @@ var CATEGORY_ORDER = [
14137
14155
  ];
14138
14156
 
14139
14157
  // src/cli/release-notes-helpers.ts
14140
- import { execSync as execSync2 } from "child_process";
14158
+ import { execFileSync } from "child_process";
14141
14159
  function getLatestTag() {
14142
14160
  try {
14143
- const result = execSync2("git describe --tags --abbrev=0", {
14161
+ const result = execFileSync("git", ["describe", "--tags", "--abbrev=0"], {
14144
14162
  encoding: "utf-8",
14145
14163
  stdio: ["pipe", "pipe", "pipe"],
14146
14164
  timeout: CLI_SUBPROCESS_TIMEOUTS.ghCommandMs
@@ -14151,8 +14169,12 @@ function getLatestTag() {
14151
14169
  }
14152
14170
  }
14153
14171
  function getCommitsBetween(from, to = "HEAD") {
14172
+ const SAFE_REF = /^[a-zA-Z0-9._\-/~^]+$/;
14173
+ if (!SAFE_REF.test(from) || !SAFE_REF.test(to)) {
14174
+ return [];
14175
+ }
14154
14176
  try {
14155
- const result = execSync2(`git log ${from}..${to} --oneline --format="%h %s"`, {
14177
+ const result = execFileSync("git", ["log", `${from}..${to}`, "--oneline", "--format=%h %s"], {
14156
14178
  encoding: "utf-8",
14157
14179
  stdio: ["pipe", "pipe", "pipe"],
14158
14180
  timeout: CLI_SUBPROCESS_TIMEOUTS.ghCommandMs
@@ -14402,13 +14424,13 @@ async function releaseNotesCommand(args) {
14402
14424
  import { readFileSync as readFileSync8 } from "fs";
14403
14425
 
14404
14426
  // src/cli/release-validate-helpers.ts
14405
- import { execSync as execSync3 } from "child_process";
14427
+ import { execSync as execSync2 } from "child_process";
14406
14428
  import { existsSync as existsSync13, readFileSync as readFileSync7 } from "fs";
14407
14429
  async function validateSecurity(options) {
14408
14430
  const startTime = Date.now();
14409
14431
  const findings = [];
14410
14432
  try {
14411
- execSync3("npm audit --audit-level=high 2>/dev/null", {
14433
+ execSync2("npm audit --audit-level=high 2>/dev/null", {
14412
14434
  encoding: "utf-8",
14413
14435
  stdio: ["pipe", "pipe", "pipe"],
14414
14436
  timeout: CLI_SUBPROCESS_TIMEOUTS.ghCommandMs
@@ -14432,7 +14454,7 @@ async function validateSecurity(options) {
14432
14454
  });
14433
14455
  }
14434
14456
  try {
14435
- const result = execSync3(
14457
+ const result = execSync2(
14436
14458
  'git diff HEAD~10..HEAD -- "*.ts" "*.js" | grep -iE "(api[_-]?key|secret|password|token)" | head -5',
14437
14459
  {
14438
14460
  encoding: "utf-8",
@@ -14463,7 +14485,7 @@ async function validateArchitecture2(options) {
14463
14485
  const startTime = Date.now();
14464
14486
  const findings = [];
14465
14487
  try {
14466
- const result = execSync3("npx nexus-agents fitness-audit --format=json 2>/dev/null", {
14488
+ const result = execSync2("npx nexus-agents fitness-audit --format=json 2>/dev/null", {
14467
14489
  encoding: "utf-8",
14468
14490
  stdio: ["pipe", "pipe", "pipe"],
14469
14491
  timeout: CLI_SUBPROCESS_TIMEOUTS.releaseValidateMs
@@ -14584,7 +14606,7 @@ async function validateDevOps(options) {
14584
14606
  const startTime = Date.now();
14585
14607
  const findings = [];
14586
14608
  try {
14587
- execSync3("pnpm build 2>/dev/null", {
14609
+ execSync2("pnpm build 2>/dev/null", {
14588
14610
  encoding: "utf-8",
14589
14611
  stdio: ["pipe", "pipe", "pipe"],
14590
14612
  timeout: CLI_SUBPROCESS_TIMEOUTS.releaseValidateMs
@@ -14605,7 +14627,7 @@ async function validateDevOps(options) {
14605
14627
  });
14606
14628
  }
14607
14629
  try {
14608
- execSync3("pnpm lint 2>/dev/null", {
14630
+ execSync2("pnpm lint 2>/dev/null", {
14609
14631
  encoding: "utf-8",
14610
14632
  stdio: ["pipe", "pipe", "pipe"],
14611
14633
  timeout: CLI_SUBPROCESS_TIMEOUTS.releaseBuildMs
@@ -14626,7 +14648,7 @@ async function validateDevOps(options) {
14626
14648
  });
14627
14649
  }
14628
14650
  try {
14629
- execSync3("pnpm typecheck 2>/dev/null", {
14651
+ execSync2("pnpm typecheck 2>/dev/null", {
14630
14652
  encoding: "utf-8",
14631
14653
  stdio: ["pipe", "pipe", "pipe"],
14632
14654
  timeout: CLI_SUBPROCESS_TIMEOUTS.releaseValidateMs
@@ -14802,7 +14824,7 @@ function getBlueskyConfig() {
14802
14824
  }
14803
14825
  async function loadAtproto() {
14804
14826
  try {
14805
- const mod = await import("./dist-7PQR2BQB.js");
14827
+ const mod = await import("./dist-CV74KUT7.js");
14806
14828
  return { AtpAgent: mod.AtpAgent, RichText: mod.RichText };
14807
14829
  } catch {
14808
14830
  return void 0;
@@ -15558,8 +15580,18 @@ var LATENCY_RANGES = {
15558
15580
  secondary: { min: 3e3, max: 8e3 },
15559
15581
  other: { min: 5e3, max: 15e3 }
15560
15582
  };
15561
- function pickCategory() {
15562
- const roll = Math.random();
15583
+ function createRng(seed) {
15584
+ if (seed === void 0) return Math.random;
15585
+ let s = seed | 0;
15586
+ return () => {
15587
+ s = s + 1831565813 | 0;
15588
+ let t = Math.imul(s ^ s >>> 15, 1 | s);
15589
+ t = t + Math.imul(t ^ t >>> 7, 61 | t) ^ t;
15590
+ return ((t ^ t >>> 14) >>> 0) / 4294967296;
15591
+ };
15592
+ }
15593
+ function pickCategory(rng) {
15594
+ const roll = rng();
15563
15595
  let cumulative = 0;
15564
15596
  for (const [category, weight] of DEFAULT_TASK_DISTRIBUTION) {
15565
15597
  cumulative += weight;
@@ -15567,12 +15599,12 @@ function pickCategory() {
15567
15599
  }
15568
15600
  return "code_generation";
15569
15601
  }
15570
- function pickCli(category) {
15602
+ function pickCli(category, rng) {
15571
15603
  const primary = PRIMARY_CLI.get(category) ?? "claude";
15572
- const roll = Math.random();
15604
+ const roll = rng();
15573
15605
  if (roll < 0.5) return primary;
15574
15606
  if (roll < 0.75) return CLI_NAMES3.find((c) => c !== primary) ?? "gemini";
15575
- return CLI_NAMES3[Math.floor(Math.random() * CLI_NAMES3.length)] ?? "claude";
15607
+ return CLI_NAMES3[Math.floor(rng() * CLI_NAMES3.length)] ?? "claude";
15576
15608
  }
15577
15609
  function getCliRole(cli, category) {
15578
15610
  const primary = PRIMARY_CLI.get(category);
@@ -15591,12 +15623,12 @@ function getCliRole(cli, category) {
15591
15623
  ]);
15592
15624
  return cli === secondaryMap.get(category) ? "secondary" : "other";
15593
15625
  }
15594
- function simulateTask(taskIndex, category, cli) {
15626
+ function simulateTask(taskIndex, category, cli, rng) {
15595
15627
  const role = getCliRole(cli, category);
15596
15628
  const successRate = SUCCESS_RATES[role];
15597
15629
  const latency = LATENCY_RANGES[role];
15598
- const success = Math.random() < successRate;
15599
- const durationMs = latency.min + Math.random() * (latency.max - latency.min);
15630
+ const success = rng() < successRate;
15631
+ const durationMs = latency.min + rng() * (latency.max - latency.min);
15600
15632
  return {
15601
15633
  id: `e2e-${String(taskIndex)}-${cli}-${category}`,
15602
15634
  cli,
@@ -15609,7 +15641,7 @@ function simulateTask(taskIndex, category, cli) {
15609
15641
  source: "manual"
15610
15642
  };
15611
15643
  }
15612
- function generateOutcomes(taskCount) {
15644
+ function generateOutcomes(taskCount, rng) {
15613
15645
  const store = getOutcomeStore();
15614
15646
  const success = /* @__PURE__ */ new Map();
15615
15647
  const total = /* @__PURE__ */ new Map();
@@ -15618,9 +15650,9 @@ function generateOutcomes(taskCount) {
15618
15650
  total.set(cli, 0);
15619
15651
  }
15620
15652
  for (let i = 0; i < taskCount; i++) {
15621
- const category = pickCategory();
15622
- const cli = pickCli(category);
15623
- const outcome = simulateTask(i, category, cli);
15653
+ const category = pickCategory(rng);
15654
+ const cli = pickCli(category, rng);
15655
+ const outcome = simulateTask(i, category, cli, rng);
15624
15656
  store.append(outcome);
15625
15657
  total.set(cli, (total.get(cli) ?? 0) + 1);
15626
15658
  if (outcome.success) success.set(cli, (success.get(cli) ?? 0) + 1);
@@ -15671,7 +15703,8 @@ function runE2EEval(config, logger17) {
15671
15703
  resetOutcomeStore();
15672
15704
  setOutcomeStore(new OutcomeStore());
15673
15705
  }
15674
- const counts = generateOutcomes(taskCount);
15706
+ const rng = createRng(config?.seed);
15707
+ const counts = generateOutcomes(taskCount, rng);
15675
15708
  log.info("E2E eval: outcomes recorded", { taskCount });
15676
15709
  const { bonuses, nonZeroCount } = checkAdaptiveBonuses();
15677
15710
  const convergenceScore = computeConvergence(counts, nonZeroCount);
@@ -16935,6 +16968,19 @@ var DevPipelineInputSchema = z7.object({
16935
16968
  sessionId: z7.string().max(128).regex(/^[a-zA-Z0-9_-]+$/).optional().describe("Session ID for checkpoint/resume (crash recovery)"),
16936
16969
  /** When true, use simulated votes instead of real CLI consensus (for testing). */
16937
16970
  simulateVotes: z7.boolean().default(false).describe("Use simulated votes (for testing without real CLIs)"),
16971
+ /** Voting strategy for consensus stages. */
16972
+ votingStrategy: z7.enum([
16973
+ "simple_majority",
16974
+ "supermajority",
16975
+ "unanimous",
16976
+ "higher_order",
16977
+ "proof_of_learning",
16978
+ "opinion_wise"
16979
+ ]).optional().describe("Voting strategy for plan approval (default: higher_order)"),
16980
+ /** Use 3 agents instead of 6 for faster voting. */
16981
+ quickMode: z7.boolean().default(false).describe("Use 3 agents instead of 6 for faster consensus voting"),
16982
+ /** Maximum execution time per stage in milliseconds (min 30s, max 600s). */
16983
+ timeoutMs: z7.number().int().min(3e4).max(6e5).optional().describe("Max time per stage in ms (30000-600000). Default: varies by stage complexity"),
16938
16984
  /** Pipeline execution mode. */
16939
16985
  mode: z7.enum(["autonomous", "harness"]).default("autonomous").describe(
16940
16986
  "'autonomous': full pipeline. 'harness': stops after decompose, returns tasks for caller to implement."
@@ -16946,6 +16992,10 @@ function resolveTaskInput(input) {
16946
16992
  }
16947
16993
  if (input.planFile !== void 0) {
16948
16994
  const resolved = path21.resolve(input.planFile);
16995
+ const cwdRoot = path21.resolve(".");
16996
+ if (!resolved.startsWith(cwdRoot)) {
16997
+ throw new Error(`Path traversal denied: planFile must be within ${cwdRoot}`);
16998
+ }
16949
16999
  if (!fs17.existsSync(resolved)) {
16950
17000
  throw new Error(`Plan file not found: ${resolved}`);
16951
17001
  }
@@ -16960,6 +17010,8 @@ async function createStages(input) {
16960
17010
  return createAgentStages({
16961
17011
  scanTarget: input.workingDir,
16962
17012
  simulateVotes: input.simulateVotes,
17013
+ votingStrategy: input.votingStrategy,
17014
+ quickMode: input.quickMode,
16963
17015
  issueNumber: input.issueNumber,
16964
17016
  repo: input.repo,
16965
17017
  tracker
@@ -17681,7 +17733,8 @@ var STANDALONE_TOOLS = [
17681
17733
  { name: "query_trace", register: registerQueryTraceTool },
17682
17734
  { name: "extract_symbols", register: registerExtractSymbolsTool },
17683
17735
  { name: "search_codebase", register: registerSearchCodebaseTool },
17684
- { name: "run_dev_pipeline", register: registerDevPipelineTool }
17736
+ { name: "run_dev_pipeline", register: registerDevPipelineTool },
17737
+ { name: "run_pipeline", register: registerPipelineTool }
17685
17738
  ];
17686
17739
  function registerToolCategories(ctx) {
17687
17740
  const allowlist = ctx.toolAllowlist;
@@ -19275,6 +19328,8 @@ async function initializeAndLogSandbox(logger17, sandboxConfig) {
19275
19328
  });
19276
19329
  }
19277
19330
  async function connectToStdioTransport(server, logger17, serverLogger) {
19331
+ logger17.setDestination?.("stderr");
19332
+ serverLogger.setDestination?.("stderr");
19278
19333
  logger17.info("Connecting to stdio transport");
19279
19334
  const transport = new StdioServerTransport();
19280
19335
  const connectResult = await connectTransport(server, transport, serverLogger);
@@ -19797,7 +19852,7 @@ async function handleVerifyCommand(args) {
19797
19852
  async function handleDoctorCommand(args) {
19798
19853
  const exitCode = await doctorCommand({ fix: args.options.fix });
19799
19854
  if (args.options.deep) {
19800
- const { runDeepDiagnostics: runDeepDiagnostics2, formatDeepDiagnostics: formatDeepDiagnostics2 } = await import("./doctor-deep-AWE7SRU6.js");
19855
+ const { runDeepDiagnostics: runDeepDiagnostics2, formatDeepDiagnostics: formatDeepDiagnostics2 } = await import("./doctor-deep-4A4X5X6U.js");
19801
19856
  const diag = runDeepDiagnostics2();
19802
19857
  process.stdout.write(formatDeepDiagnostics2(diag) + "\n");
19803
19858
  }
@@ -21144,7 +21199,7 @@ async function handleMemoryBenchmarkCommand(args) {
21144
21199
  }
21145
21200
 
21146
21201
  // src/cli/status-command.ts
21147
- import { execFileSync } from "child_process";
21202
+ import { execFileSync as execFileSync2 } from "child_process";
21148
21203
  var FITNESS_TARGET = 90;
21149
21204
  var API_ADAPTER_CHECKS = [
21150
21205
  { name: "Claude", envVar: "ANTHROPIC_API_KEY" },
@@ -21166,7 +21221,7 @@ function checkApiAdapters() {
21166
21221
  function detectCliTools() {
21167
21222
  return CLI_TOOL_CHECKS.map((check) => {
21168
21223
  try {
21169
- const version = execFileSync(check.binary, ["--version"], {
21224
+ const version = execFileSync2(check.binary, ["--version"], {
21170
21225
  timeout: CLI_SUBPROCESS_TIMEOUTS.statusProbeMs,
21171
21226
  stdio: ["ignore", "pipe", "ignore"],
21172
21227
  encoding: "utf-8"