nexus-agents 2.56.0 → 2.58.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 (104) hide show
  1. package/dist/{adaptive-memory-SUNFPY2W.js → adaptive-memory-TSZEJUJC.js} +3 -3
  2. package/dist/{chunk-4FVISCDB.js → chunk-6QU4DJYW.js} +2 -2
  3. package/dist/{chunk-C3FGEDD7.js → chunk-7EYQBG3W.js} +22 -406
  4. package/dist/chunk-7EYQBG3W.js.map +1 -0
  5. package/dist/{chunk-NYNBDP7M.js → chunk-7Y36JLES.js} +2 -2
  6. package/dist/{chunk-FWSTXEG2.js → chunk-AFSIP6JH.js} +99 -23
  7. package/dist/chunk-AFSIP6JH.js.map +1 -0
  8. package/dist/{chunk-VKZKC4SM.js → chunk-EDGG3RQE.js} +2 -2
  9. package/dist/{chunk-2SPRLBOS.js → chunk-EZXOJZYE.js} +2 -2
  10. package/dist/{chunk-KGMC6F5D.js → chunk-GJ5BJU7A.js} +67 -61
  11. package/dist/chunk-GJ5BJU7A.js.map +1 -0
  12. package/dist/{chunk-W5AJRK4U.js → chunk-GMOGKX4E.js} +2 -2
  13. package/dist/chunk-H43PABG4.js +402 -0
  14. package/dist/chunk-H43PABG4.js.map +1 -0
  15. package/dist/{chunk-VLVHPC72.js → chunk-JKDHWOQL.js} +6 -6
  16. package/dist/{chunk-EJLWDYK7.js → chunk-JLYJQ7OG.js} +6159 -5619
  17. package/dist/chunk-JLYJQ7OG.js.map +1 -0
  18. package/dist/{chunk-IOU7F5PH.js → chunk-K7EA5OV4.js} +2 -2
  19. package/dist/{chunk-BPMQRYGU.js → chunk-L3NHOUEX.js} +332 -80
  20. package/dist/chunk-L3NHOUEX.js.map +1 -0
  21. package/dist/{chunk-KRIFBGWZ.js → chunk-PTGBJFSD.js} +3 -3
  22. package/dist/{chunk-EKYT4NMD.js → chunk-QGZBCD2A.js} +24 -9
  23. package/dist/chunk-QGZBCD2A.js.map +1 -0
  24. package/dist/{chunk-UOUJZIKH.js → chunk-R2Y57PM3.js} +38 -15
  25. package/dist/chunk-R2Y57PM3.js.map +1 -0
  26. package/dist/{chunk-PCMWLXT4.js → chunk-TC46TRLR.js} +2 -2
  27. package/dist/{chunk-3IDJSFWT.js → chunk-TFEFN37P.js} +2 -2
  28. package/dist/{chunk-Q5TKQWOI.js → chunk-V5CGWMYL.js} +2 -2
  29. package/dist/{chunk-TCQNNY4J.js → chunk-XEMRMZUN.js} +4 -4
  30. package/dist/{chunk-RSUCXOQM.js → chunk-YQAOMDR2.js} +26 -53
  31. package/dist/chunk-YQAOMDR2.js.map +1 -0
  32. package/dist/{chunk-R66AWJJ7.js → chunk-YU4NABXM.js} +2 -2
  33. package/dist/{cli-circuit-breaker-7MCMHSDY.js → cli-circuit-breaker-SL73NWX2.js} +4 -4
  34. package/dist/cli.d.ts +3 -1
  35. package/dist/cli.js +428 -342
  36. package/dist/cli.js.map +1 -1
  37. package/dist/{composite-router-LXFOSMSE.js → composite-router-A7URDW4X.js} +2 -2
  38. package/dist/{consensus-vote-G6H532ME.js → consensus-vote-HDM6HA5Z.js} +9 -8
  39. package/dist/{dist-4LDAFGC5.js → dist-RLMRWMYO.js} +994 -779
  40. package/dist/dist-RLMRWMYO.js.map +1 -0
  41. package/dist/{doctor-deep-RKMOZSIS.js → doctor-deep-VN6KMUCG.js} +3 -3
  42. package/dist/{expert-bridge-KHHE42JP.js → expert-bridge-BHTUNALT.js} +3 -3
  43. package/dist/{factory-JVN47MFN.js → factory-6MT5VKI3.js} +4 -4
  44. package/dist/{factory-KRNR7XHD.js → factory-FA7WDPZW.js} +5 -5
  45. package/dist/index.d.ts +396 -61
  46. package/dist/index.js +58 -43
  47. package/dist/index.js.map +1 -1
  48. package/dist/{issue-triage-O3C7P66H.js → issue-triage-YYTE6KTC.js} +4 -4
  49. package/dist/{mcp-config-QRERKGR4.js → mcp-config-34XMRM64.js} +3 -3
  50. package/dist/{mobimem-FAOAXV3B.js → mobimem-QDBP37H7.js} +2 -2
  51. package/dist/model-registry.generated.json +17033 -0
  52. package/dist/registry-command-S46JJ2SX.js +580 -0
  53. package/dist/registry-command-S46JJ2SX.js.map +1 -0
  54. package/dist/{repo-security-plan-AZ5HMGFC.js → repo-security-plan-C3LLE3Z7.js} +3 -3
  55. package/dist/{research-helpers-synthesize-E6WQLQKP.js → research-helpers-synthesize-NVQIWLQL.js} +3 -3
  56. package/dist/{routing-memory-MXF45FXT.js → routing-memory-W3YWMLJM.js} +2 -2
  57. package/dist/{session-memory-HL5XDBIL.js → session-memory-DWF5Z2LC.js} +3 -3
  58. package/dist/{setup-command-AV4MODEL.js → setup-command-KSQEYBDA.js} +8 -7
  59. package/dist/{setup-config-PWK6WHMG.js → setup-config-JA5IX53Q.js} +3 -3
  60. package/dist/{setup-custom-api-XAWKRDWV.js → setup-custom-api-CSB26HWD.js} +7 -5
  61. package/dist/setup-custom-api-CSB26HWD.js.map +1 -0
  62. package/dist/{weather-report-XZ5CENHE.js → weather-report-YQSLX4MS.js} +2 -2
  63. package/package.json +5 -5
  64. package/dist/chunk-BPMQRYGU.js.map +0 -1
  65. package/dist/chunk-C3FGEDD7.js.map +0 -1
  66. package/dist/chunk-EJLWDYK7.js.map +0 -1
  67. package/dist/chunk-EKYT4NMD.js.map +0 -1
  68. package/dist/chunk-FWSTXEG2.js.map +0 -1
  69. package/dist/chunk-KGMC6F5D.js.map +0 -1
  70. package/dist/chunk-RSUCXOQM.js.map +0 -1
  71. package/dist/chunk-UOUJZIKH.js.map +0 -1
  72. package/dist/dist-4LDAFGC5.js.map +0 -1
  73. package/dist/setup-custom-api-XAWKRDWV.js.map +0 -1
  74. /package/dist/{adaptive-memory-SUNFPY2W.js.map → adaptive-memory-TSZEJUJC.js.map} +0 -0
  75. /package/dist/{chunk-4FVISCDB.js.map → chunk-6QU4DJYW.js.map} +0 -0
  76. /package/dist/{chunk-NYNBDP7M.js.map → chunk-7Y36JLES.js.map} +0 -0
  77. /package/dist/{chunk-VKZKC4SM.js.map → chunk-EDGG3RQE.js.map} +0 -0
  78. /package/dist/{chunk-2SPRLBOS.js.map → chunk-EZXOJZYE.js.map} +0 -0
  79. /package/dist/{chunk-W5AJRK4U.js.map → chunk-GMOGKX4E.js.map} +0 -0
  80. /package/dist/{chunk-VLVHPC72.js.map → chunk-JKDHWOQL.js.map} +0 -0
  81. /package/dist/{chunk-IOU7F5PH.js.map → chunk-K7EA5OV4.js.map} +0 -0
  82. /package/dist/{chunk-KRIFBGWZ.js.map → chunk-PTGBJFSD.js.map} +0 -0
  83. /package/dist/{chunk-PCMWLXT4.js.map → chunk-TC46TRLR.js.map} +0 -0
  84. /package/dist/{chunk-3IDJSFWT.js.map → chunk-TFEFN37P.js.map} +0 -0
  85. /package/dist/{chunk-Q5TKQWOI.js.map → chunk-V5CGWMYL.js.map} +0 -0
  86. /package/dist/{chunk-TCQNNY4J.js.map → chunk-XEMRMZUN.js.map} +0 -0
  87. /package/dist/{chunk-R66AWJJ7.js.map → chunk-YU4NABXM.js.map} +0 -0
  88. /package/dist/{cli-circuit-breaker-7MCMHSDY.js.map → cli-circuit-breaker-SL73NWX2.js.map} +0 -0
  89. /package/dist/{composite-router-LXFOSMSE.js.map → composite-router-A7URDW4X.js.map} +0 -0
  90. /package/dist/{consensus-vote-G6H532ME.js.map → consensus-vote-HDM6HA5Z.js.map} +0 -0
  91. /package/dist/{doctor-deep-RKMOZSIS.js.map → doctor-deep-VN6KMUCG.js.map} +0 -0
  92. /package/dist/{expert-bridge-KHHE42JP.js.map → expert-bridge-BHTUNALT.js.map} +0 -0
  93. /package/dist/{factory-JVN47MFN.js.map → factory-6MT5VKI3.js.map} +0 -0
  94. /package/dist/{factory-KRNR7XHD.js.map → factory-FA7WDPZW.js.map} +0 -0
  95. /package/dist/{issue-triage-O3C7P66H.js.map → issue-triage-YYTE6KTC.js.map} +0 -0
  96. /package/dist/{mcp-config-QRERKGR4.js.map → mcp-config-34XMRM64.js.map} +0 -0
  97. /package/dist/{mobimem-FAOAXV3B.js.map → mobimem-QDBP37H7.js.map} +0 -0
  98. /package/dist/{repo-security-plan-AZ5HMGFC.js.map → repo-security-plan-C3LLE3Z7.js.map} +0 -0
  99. /package/dist/{research-helpers-synthesize-E6WQLQKP.js.map → research-helpers-synthesize-NVQIWLQL.js.map} +0 -0
  100. /package/dist/{routing-memory-MXF45FXT.js.map → routing-memory-W3YWMLJM.js.map} +0 -0
  101. /package/dist/{session-memory-HL5XDBIL.js.map → session-memory-DWF5Z2LC.js.map} +0 -0
  102. /package/dist/{setup-command-AV4MODEL.js.map → setup-command-KSQEYBDA.js.map} +0 -0
  103. /package/dist/{setup-config-PWK6WHMG.js.map → setup-config-JA5IX53Q.js.map} +0 -0
  104. /package/dist/{weather-report-XZ5CENHE.js.map → weather-report-YQSLX4MS.js.map} +0 -0
package/dist/cli.js CHANGED
@@ -12,12 +12,12 @@ import {
12
12
  parseFindings,
13
13
  sumFindings
14
14
  } from "./chunk-6E3NMMEY.js";
15
- import "./chunk-4FVISCDB.js";
15
+ import "./chunk-6QU4DJYW.js";
16
16
  import {
17
17
  setupCommandAsync,
18
18
  verifyCommand
19
- } from "./chunk-KGMC6F5D.js";
20
- import "./chunk-EKYT4NMD.js";
19
+ } from "./chunk-GJ5BJU7A.js";
20
+ import "./chunk-QGZBCD2A.js";
21
21
  import {
22
22
  AuthHandler,
23
23
  DEFAULT_EXPERTS,
@@ -131,6 +131,7 @@ import {
131
131
  registerRunWorkflowTool,
132
132
  registerSearchCodebaseTool,
133
133
  registerTools,
134
+ registerVerifyAuditChainTool,
134
135
  registerWeatherReportTool,
135
136
  resolveV2Config,
136
137
  runBenchmarkInstances,
@@ -141,10 +142,10 @@ import {
141
142
  validateCommand,
142
143
  validateWorkflow,
143
144
  wrapInMarkdownFence
144
- } from "./chunk-EJLWDYK7.js";
145
+ } from "./chunk-JLYJQ7OG.js";
145
146
  import {
146
147
  resolveToken
147
- } from "./chunk-2SPRLBOS.js";
148
+ } from "./chunk-EZXOJZYE.js";
148
149
  import {
149
150
  CATEGORY_DISPLAY_NAMES,
150
151
  DEFAULT_PR_REVIEW_CONFIG
@@ -160,30 +161,29 @@ import {
160
161
  registerConsensusVoteTool,
161
162
  shutdownToolMemory,
162
163
  validateTimeout
163
- } from "./chunk-BPMQRYGU.js";
164
- import "./chunk-R66AWJJ7.js";
164
+ } from "./chunk-L3NHOUEX.js";
165
+ import "./chunk-YU4NABXM.js";
165
166
  import {
166
167
  loadPapersRegistry,
167
168
  loadTechniquesRegistry,
168
169
  savePapersRegistry,
169
170
  synthesizeResearch
170
- } from "./chunk-PCMWLXT4.js";
171
+ } from "./chunk-TC46TRLR.js";
171
172
  import {
172
173
  classifyTrust,
173
174
  createFullGitHubProvider,
174
175
  evaluatePolicy,
175
176
  parsePRUrl,
176
177
  sanitizeInput
177
- } from "./chunk-FWSTXEG2.js";
178
- import "./chunk-IOU7F5PH.js";
179
- import "./chunk-Q5TKQWOI.js";
178
+ } from "./chunk-AFSIP6JH.js";
179
+ import "./chunk-K7EA5OV4.js";
180
+ import "./chunk-V5CGWMYL.js";
180
181
  import "./chunk-BC3M4VLP.js";
181
182
  import "./chunk-AP2FD37C.js";
182
183
  import "./chunk-BQ4YXGGQ.js";
183
184
  import "./chunk-ED6VQWNG.js";
184
185
  import {
185
186
  CustomExpertDefinitionSchema,
186
- DEFAULTS,
187
187
  MAX_SYSTEM_PROMPT_LENGTH,
188
188
  VALID_EXPERT_DOMAINS,
189
189
  VALID_EXPERT_TIERS,
@@ -199,27 +199,30 @@ import {
199
199
  loadConfig,
200
200
  runDoctor,
201
201
  validateNexusEnv
202
- } from "./chunk-C3FGEDD7.js";
202
+ } from "./chunk-7EYQBG3W.js";
203
+ import {
204
+ DEFAULTS
205
+ } from "./chunk-H43PABG4.js";
203
206
  import "./chunk-NUBSJGQZ.js";
204
207
  import "./chunk-GJVHRJO2.js";
205
- import "./chunk-NYNBDP7M.js";
208
+ import "./chunk-7Y36JLES.js";
206
209
  import {
207
210
  MemoryError
208
- } from "./chunk-3IDJSFWT.js";
211
+ } from "./chunk-TFEFN37P.js";
209
212
  import {
210
213
  capitalize,
211
214
  capitalizeKebab,
212
215
  truncateSentence
213
216
  } from "./chunk-633WH2ML.js";
214
- import "./chunk-VKZKC4SM.js";
215
- import "./chunk-KRIFBGWZ.js";
216
- import "./chunk-VLVHPC72.js";
217
+ import "./chunk-EDGG3RQE.js";
218
+ import "./chunk-PTGBJFSD.js";
219
+ import "./chunk-JKDHWOQL.js";
217
220
  import {
218
221
  createAllAdapters,
219
222
  getAvailableClis,
220
223
  isRecord
221
- } from "./chunk-RSUCXOQM.js";
222
- import "./chunk-W5AJRK4U.js";
224
+ } from "./chunk-YQAOMDR2.js";
225
+ import "./chunk-GMOGKX4E.js";
223
226
  import {
224
227
  API_TIMEOUTS,
225
228
  AgentCapability,
@@ -284,7 +287,7 @@ import {
284
287
  toError,
285
288
  writeEmptyLine,
286
289
  writeLine
287
- } from "./chunk-UOUJZIKH.js";
290
+ } from "./chunk-R2Y57PM3.js";
288
291
  import "./chunk-CLYZ7FWP.js";
289
292
  import "./chunk-UP2VWCW5.js";
290
293
 
@@ -5835,7 +5838,7 @@ function recordVoteToGitHub(issueNumber, result) {
5835
5838
  async function runVote(options) {
5836
5839
  const threshold = THRESHOLD_MAP[options.threshold ?? "supermajority"] ?? "supermajority";
5837
5840
  const useQuick = options.quick === true;
5838
- const roles = useQuick ? ["architect", "security", "pm"] : ["architect", "security", "devex", "ai_ml", "pm", "catfish"];
5841
+ const roles = useQuick ? ["architect", "security", "scope_steward"] : ["architect", "security", "devex", "ai_ml", "pm", "catfish", "scope_steward"];
5839
5842
  const start = getTimeProvider().now();
5840
5843
  const requestedTimeoutMs = options.timeoutMs ?? DEFAULT_VOTE_TIMEOUT_MS;
5841
5844
  const { value: timeoutMs, clamped } = validateTimeout(requestedTimeoutMs);
@@ -9257,44 +9260,283 @@ function sanitizeTool(tool) {
9257
9260
  // src/indexer/entrypoint-cli-extractor.ts
9258
9261
  import { SyntaxKind } from "ts-morph";
9259
9262
  import * as path12 from "path";
9260
- function parseHelpTextCommands(helpText) {
9261
- const commands = [];
9262
- const lines = helpText.split("\n");
9263
- let inCommandsSection = false;
9264
- for (const line of lines) {
9265
- if (line.trim() === "COMMANDS:") {
9266
- inCommandsSection = true;
9267
- continue;
9268
- }
9269
- const trimmed = line.trim();
9270
- if (trimmed.endsWith(":") && trimmed !== "COMMANDS:" && !trimmed.startsWith("-")) {
9271
- inCommandsSection = false;
9272
- continue;
9273
- }
9274
- if (!inCommandsSection) continue;
9275
- const match = line.match(/^\s{2}(\S+(?:\s+\S+)?)\s{2,}(.+)$/);
9276
- if (match !== null) {
9277
- const cmdPart = match[1];
9278
- const descriptionPart = match[2];
9279
- if (cmdPart === void 0 || descriptionPart === void 0) continue;
9280
- const parts = cmdPart.trim().split(/\s+/);
9281
- const name = parts[0];
9282
- if (name === void 0) continue;
9283
- const subcommand = parts.length > 1 ? parts[1] : void 0;
9284
- const existing = commands.find((c) => c.name === name);
9285
- if (existing !== void 0 && subcommand !== void 0) {
9286
- existing.subcommands.push(subcommand);
9287
- } else if (existing === void 0) {
9288
- commands.push({
9289
- name,
9290
- description: descriptionPart.trim(),
9291
- subcommands: subcommand !== void 0 ? [subcommand] : []
9292
- });
9293
- }
9263
+
9264
+ // src/cli-command-catalog.ts
9265
+ var COMMAND_CATALOG = [
9266
+ // ── Essential ────────────────────────────────────────────────────────────
9267
+ {
9268
+ command: "(default)",
9269
+ description: "Start MCP server with stdio transport",
9270
+ audience: "essential"
9271
+ },
9272
+ {
9273
+ command: "hello",
9274
+ description: "Show welcome message and quick start (no API keys needed)",
9275
+ audience: "essential"
9276
+ },
9277
+ {
9278
+ command: "setup",
9279
+ description: "Configure CLI integration (MCP + .rules + data dirs)",
9280
+ audience: "essential"
9281
+ },
9282
+ {
9283
+ command: "verify",
9284
+ description: "Check install health (sqlite, adapters, config)",
9285
+ audience: "essential"
9286
+ },
9287
+ {
9288
+ command: "doctor",
9289
+ description: "Detailed system/adapter health check",
9290
+ audience: "essential"
9291
+ },
9292
+ {
9293
+ command: "config",
9294
+ description: "Manage configuration (init, get, set, list, export, import)",
9295
+ audience: "essential"
9296
+ },
9297
+ {
9298
+ command: "orchestrate",
9299
+ description: "Execute a task via CLI tools (standalone mode)",
9300
+ audience: "essential"
9301
+ },
9302
+ {
9303
+ command: "vote",
9304
+ description: "Run consensus vote on a proposal (5-6 agents)",
9305
+ audience: "essential"
9306
+ },
9307
+ {
9308
+ command: "workflow",
9309
+ description: "Manage and run workflow templates (list, run)",
9310
+ audience: "essential"
9311
+ },
9312
+ {
9313
+ command: "expert",
9314
+ description: "Manage expert agents (list, create, execute)",
9315
+ audience: "essential"
9316
+ },
9317
+ {
9318
+ command: "research",
9319
+ description: "Manage research registry (status, add, stats, refresh)",
9320
+ audience: "essential"
9321
+ },
9322
+ // ── Advanced ─────────────────────────────────────────────────────────────
9323
+ {
9324
+ command: "session",
9325
+ description: "Manage session persistence (list, show, export, delete)",
9326
+ audience: "advanced"
9327
+ },
9328
+ {
9329
+ command: "auth",
9330
+ description: "Manage MCP authentication tokens (init, show, rotate)",
9331
+ audience: "advanced"
9332
+ },
9333
+ {
9334
+ command: "status",
9335
+ description: "At-a-glance project health dashboard",
9336
+ audience: "advanced"
9337
+ },
9338
+ {
9339
+ command: "capabilities",
9340
+ description: "Show model capabilities matrix",
9341
+ audience: "advanced"
9342
+ },
9343
+ {
9344
+ command: "registry",
9345
+ description: "Inspect + refresh the dynamic model registry (doctor / refresh)",
9346
+ audience: "advanced"
9347
+ },
9348
+ {
9349
+ command: "review",
9350
+ description: "Review a GitHub PR (dogfooding helper)",
9351
+ audience: "advanced"
9352
+ },
9353
+ {
9354
+ command: "scaffold",
9355
+ description: "Generate project files from templates",
9356
+ audience: "advanced"
9357
+ },
9358
+ {
9359
+ command: "validate",
9360
+ description: "Run unified validation (doctor + fitness + config)",
9361
+ audience: "advanced"
9362
+ },
9363
+ {
9364
+ command: "index",
9365
+ description: "Generate and manage codebase index",
9366
+ audience: "advanced"
9367
+ },
9368
+ // ── Maintainer (hidden by default) ───────────────────────────────────────
9369
+ {
9370
+ command: "demo",
9371
+ description: "API-free exploration mode (marketing/demo flow)",
9372
+ audience: "maintainer"
9373
+ },
9374
+ {
9375
+ command: "hooks",
9376
+ description: "Claude CLI hook integration commands",
9377
+ audience: "maintainer"
9378
+ },
9379
+ {
9380
+ command: "routing-audit",
9381
+ description: "Debug model routing decisions",
9382
+ audience: "maintainer"
9383
+ },
9384
+ {
9385
+ command: "fitness-audit",
9386
+ description: "Run CLI orchestration fitness score audit",
9387
+ audience: "maintainer"
9388
+ },
9389
+ {
9390
+ command: "system-review",
9391
+ description: "Automated system review (5-phase checklist)",
9392
+ audience: "maintainer"
9393
+ },
9394
+ {
9395
+ command: "sprint",
9396
+ description: "Automated sprint planning from open issues",
9397
+ audience: "maintainer"
9398
+ },
9399
+ {
9400
+ command: "evaluate",
9401
+ description: "Self-evaluation of codebase components",
9402
+ audience: "maintainer"
9403
+ },
9404
+ {
9405
+ command: "issue",
9406
+ description: "Issue template validation and management",
9407
+ audience: "maintainer"
9408
+ },
9409
+ {
9410
+ command: "validation",
9411
+ description: "Learning validation dashboard",
9412
+ audience: "maintainer"
9413
+ },
9414
+ {
9415
+ command: "learning-metrics",
9416
+ description: "Aggregated learning metrics dashboard",
9417
+ audience: "maintainer"
9418
+ },
9419
+ {
9420
+ command: "swe-bench",
9421
+ description: "Run SWE-bench evaluation benchmark",
9422
+ audience: "maintainer"
9423
+ },
9424
+ {
9425
+ command: "atbench",
9426
+ description: "Run ATBench trajectory-safety evaluation",
9427
+ audience: "maintainer"
9428
+ },
9429
+ {
9430
+ command: "visualize",
9431
+ description: "Generate Mermaid diagrams and ASCII dashboards",
9432
+ audience: "maintainer"
9433
+ },
9434
+ {
9435
+ command: "health",
9436
+ description: "Swarm health metrics dashboard",
9437
+ audience: "maintainer"
9438
+ },
9439
+ {
9440
+ command: "release-notes",
9441
+ description: "Generate release notes from git commits",
9442
+ audience: "maintainer"
9443
+ },
9444
+ {
9445
+ command: "release-validate",
9446
+ description: "Run expert swarm validation for releases",
9447
+ audience: "maintainer"
9448
+ },
9449
+ {
9450
+ command: "release-announce",
9451
+ description: "Generate release announcements (blog, social)",
9452
+ audience: "maintainer"
9453
+ },
9454
+ // ── Internal (hidden everywhere; here for extractor/index completeness) ──
9455
+ {
9456
+ command: "server",
9457
+ // Synonym for the no-arg invocation — `nexus-agents` and
9458
+ // `nexus-agents server` both run `handleServerCommand`. Listed here for
9459
+ // extractor completeness; humans see `(default)` in --help.
9460
+ description: "Start MCP server with stdio transport (explicit form)",
9461
+ audience: "internal"
9462
+ },
9463
+ {
9464
+ command: "e2e-eval",
9465
+ description: "E2E evaluation scenario runner (dev loop)",
9466
+ audience: "internal"
9467
+ },
9468
+ {
9469
+ command: "memory-benchmark",
9470
+ description: "Memory-system benchmark runner (dev loop)",
9471
+ audience: "internal"
9472
+ },
9473
+ {
9474
+ command: "memory-eval",
9475
+ description: "Comparative memory evaluation benchmark (dev loop)",
9476
+ audience: "internal"
9477
+ },
9478
+ {
9479
+ command: "routing-ab",
9480
+ description: "A/B comparison of routing strategies (dev loop)",
9481
+ audience: "internal"
9482
+ },
9483
+ {
9484
+ command: "scenario",
9485
+ description: "Execute a named scenario from the testing framework",
9486
+ audience: "internal"
9487
+ },
9488
+ {
9489
+ command: "warm-up",
9490
+ description: "Warm the model/adapter caches before a run",
9491
+ audience: "internal"
9492
+ }
9493
+ ];
9494
+ function filterCatalog(showAll) {
9495
+ const visible = COMMAND_CATALOG.filter((e) => e.audience !== "internal");
9496
+ if (showAll) return visible;
9497
+ return visible.filter((e) => e.audience !== "maintainer");
9498
+ }
9499
+ function catalogForExtractors() {
9500
+ return COMMAND_CATALOG.filter((e) => e.command !== "(default)");
9501
+ }
9502
+ function groupByAudience(entries) {
9503
+ const groups = /* @__PURE__ */ new Map();
9504
+ for (const entry of entries) {
9505
+ const existing = groups.get(entry.audience) ?? [];
9506
+ existing.push(entry);
9507
+ groups.set(entry.audience, existing);
9508
+ }
9509
+ return groups;
9510
+ }
9511
+ var AUDIENCE_HEADINGS = {
9512
+ essential: "Essential \u2014 install, configure, run",
9513
+ advanced: "Advanced \u2014 day-to-day extras",
9514
+ maintainer: "Maintainer \u2014 benchmarks, releases, deep diagnostics",
9515
+ // Never rendered (filterCatalog strips internal before renderCommandsSection
9516
+ // iterates), but required by the Record<CommandAudience, string> contract.
9517
+ internal: "Internal \u2014 dev/eval loops (hidden from --help)"
9518
+ };
9519
+ function renderCommandsSection(showAll) {
9520
+ const filtered = filterCatalog(showAll);
9521
+ const groups = groupByAudience(filtered);
9522
+ const lines = [];
9523
+ const order = showAll ? ["essential", "advanced", "maintainer"] : ["essential", "advanced"];
9524
+ for (const audience of order) {
9525
+ const entries = groups.get(audience);
9526
+ if (entries === void 0 || entries.length === 0) continue;
9527
+ lines.push(` ${AUDIENCE_HEADINGS[audience]}`);
9528
+ for (const entry of entries) {
9529
+ lines.push(` ${entry.command.padEnd(16)} ${entry.description}`);
9294
9530
  }
9531
+ lines.push("");
9532
+ }
9533
+ if (!showAll) {
9534
+ lines.push(" Run with --all to show maintainer commands (benchmarks, release tooling).");
9295
9535
  }
9296
- return commands;
9536
+ return lines.join("\n").replace(/\n+$/, "");
9297
9537
  }
9538
+
9539
+ // src/indexer/entrypoint-cli-extractor.ts
9298
9540
  function extractCliOptions(sourceFile) {
9299
9541
  const options = /* @__PURE__ */ new Map();
9300
9542
  const configVar = sourceFile.getVariableDeclaration("PARSE_ARGS_CONFIG");
@@ -9388,47 +9630,54 @@ function getCommandOptions(name, cliOptions) {
9388
9630
  }
9389
9631
  return cmdOptions;
9390
9632
  }
9391
- function loadHelpTextCommands(project, packageRoot, typesFile) {
9392
- const helpTextPath = path12.join(packageRoot, "src/cli-help-text.ts");
9393
- const helpTextFile = project.getSourceFile(helpTextPath) ?? typesFile;
9394
- if (helpTextFile === void 0) return [];
9395
- const helpTextVar = helpTextFile.getVariableDeclaration("HELP_TEXT");
9396
- if (helpTextVar === void 0) return [];
9397
- const helpText = helpTextVar.getInitializer()?.getText() ?? "";
9398
- const cleanText = helpText.slice(1, -1).replace(/^\s*\n/, "").replace(/\n\s*$/, "");
9399
- return parseHelpTextCommands(cleanText);
9400
- }
9401
- function extractCliCommands(project, packageRoot, cliCommandsPath, cliTypesPath) {
9402
- const commands = [];
9633
+ function buildCommandSpec(entry, ctx) {
9634
+ const handlerName = `handle${toPascalCase(entry.command)}Command`;
9635
+ const handlerFunc = ctx.commandsFile.getFunction(handlerName);
9636
+ const sourceLine = handlerFunc?.getStartLineNumber() ?? 1;
9637
+ if (handlerFunc === void 0 && ctx.warnings !== void 0) {
9638
+ ctx.warnings.push(
9639
+ `CLI extraction: catalog entry "${entry.command}" has no matching ${handlerName} function in ${ctx.cliCommandsPath}. Check naming drift.`
9640
+ );
9641
+ }
9642
+ const cmdOptions = getCommandOptions(entry.command, ctx.cliOptions);
9643
+ const cmdSpec = {
9644
+ name: entry.command,
9645
+ description: entry.description,
9646
+ source_file: ctx.relativePath,
9647
+ source_line: sourceLine
9648
+ };
9649
+ if (cmdOptions.length > 0) {
9650
+ cmdSpec.options = cmdOptions;
9651
+ }
9652
+ return cmdSpec;
9653
+ }
9654
+ function extractCliCommands(project, packageRoot, cliCommandsPath, cliTypesPath, warnings) {
9403
9655
  const typesFullPath = path12.join(packageRoot, cliTypesPath);
9404
9656
  const typesFile = project.getSourceFile(typesFullPath);
9405
- const helpTextCommands = loadHelpTextCommands(project, packageRoot, typesFile);
9657
+ if (typesFile === void 0 && warnings !== void 0) {
9658
+ warnings.push(
9659
+ `CLI extraction: types file not loaded (${typesFullPath}). PARSE_ARGS_CONFIG options will be missing from the manifest.`
9660
+ );
9661
+ }
9406
9662
  const cliOptions = typesFile !== void 0 ? extractCliOptions(typesFile) : /* @__PURE__ */ new Map();
9407
9663
  const commandsFullPath = path12.join(packageRoot, cliCommandsPath);
9408
9664
  const commandsFile = project.getSourceFile(commandsFullPath);
9409
- if (commandsFile === void 0) return commands;
9410
- const relativePath = path12.relative(process.cwd(), commandsFullPath);
9411
- for (const cmdMeta of helpTextCommands) {
9412
- if (cmdMeta.name === "(default)") continue;
9413
- const handlerName = `handle${toPascalCase(cmdMeta.name)}Command`;
9414
- const handlerFunc = commandsFile.getFunction(handlerName);
9415
- const sourceLine = handlerFunc?.getStartLineNumber() ?? 1;
9416
- const cmdOptions = getCommandOptions(cmdMeta.name, cliOptions);
9417
- const cmdSpec = {
9418
- name: cmdMeta.name,
9419
- description: cmdMeta.description,
9420
- source_file: relativePath,
9421
- source_line: sourceLine
9422
- };
9423
- if (cmdMeta.subcommands.length > 0) {
9424
- cmdSpec.subcommands = cmdMeta.subcommands;
9425
- }
9426
- if (cmdOptions.length > 0) {
9427
- cmdSpec.options = cmdOptions;
9665
+ if (commandsFile === void 0) {
9666
+ if (warnings !== void 0) {
9667
+ warnings.push(
9668
+ `CLI extraction: commands file not loaded (${commandsFullPath}). Returning zero commands.`
9669
+ );
9428
9670
  }
9429
- commands.push(cmdSpec);
9671
+ return [];
9430
9672
  }
9431
- return commands;
9673
+ const ctx = {
9674
+ commandsFile,
9675
+ relativePath: path12.relative(process.cwd(), commandsFullPath),
9676
+ cliOptions,
9677
+ cliCommandsPath,
9678
+ ...warnings !== void 0 && { warnings }
9679
+ };
9680
+ return catalogForExtractors().map((entry) => buildCommandSpec(entry, ctx));
9432
9681
  }
9433
9682
 
9434
9683
  // src/indexer/entrypoint-mcp-extractor.ts
@@ -9474,10 +9723,15 @@ function extractZodParameters(schemaObj) {
9474
9723
  }
9475
9724
  return params;
9476
9725
  }
9477
- function extractMcpTools(project, packageRoot, mcpToolsPath) {
9726
+ function extractMcpTools(project, packageRoot, mcpToolsPath, warnings) {
9478
9727
  const tools = [];
9479
9728
  const toolsDir = path13.join(packageRoot, mcpToolsPath);
9480
9729
  const toolFiles = project.getSourceFiles(`${toolsDir}/*.ts`);
9730
+ if (toolFiles.length === 0 && warnings !== void 0) {
9731
+ warnings.push(
9732
+ `MCP tool extraction: glob "${toolsDir}/*.ts" matched zero files. Check that the path exists and is included in the ts-morph project.`
9733
+ );
9734
+ }
9481
9735
  for (const sourceFile of toolFiles) {
9482
9736
  const filePath = sourceFile.getFilePath();
9483
9737
  const fileName = path13.basename(filePath);
@@ -9614,9 +9868,10 @@ function extractEntrypoints(options = {}) {
9614
9868
  project,
9615
9869
  opts.packageRoot,
9616
9870
  opts.cliCommandsPath,
9617
- "src/cli-types.ts"
9871
+ "src/cli-types.ts",
9872
+ warnings
9618
9873
  );
9619
- const mcpTools = extractMcpTools(project, opts.packageRoot, opts.mcpToolsPath);
9874
+ const mcpTools = extractMcpTools(project, opts.packageRoot, opts.mcpToolsPath, warnings);
9620
9875
  const finalCommands = opts.sanitize ? cliCommands.map(sanitizeCommand) : cliCommands;
9621
9876
  const finalTools = opts.sanitize ? mcpTools.map(sanitizeTool) : mcpTools;
9622
9877
  const manifest = {
@@ -14109,9 +14364,15 @@ var FitnessScoreCalculator = class {
14109
14364
  }
14110
14365
  /**
14111
14366
  * Check explicit behavior: penalize hidden/magic behavior.
14112
- * TODO: This dimension lacks strong filesystem signals. Currently checks
14113
- * for NEXUS_ALLOW_MOCK_ORCHESTRATION guard and magic routing patterns.
14114
- * Future: add AST-based detection of implicit fallbacks.
14367
+ *
14368
+ * Implementation is intentionally filesystem-signal-based (no AST parse).
14369
+ * The `NEXUS_ALLOW_MOCK_ORCHESTRATION` guard and magic-routing pattern
14370
+ * grep capture the observable failure modes that historically slipped
14371
+ * past review. AST-based detection of implicit fallbacks was considered
14372
+ * but not pursued — it would significantly widen this function's
14373
+ * footprint and the filesystem signals already catch the recurring
14374
+ * regressions. Revisit only if a new class of hidden-behavior bug
14375
+ * surfaces that this grep-over-source approach can't catch.
14115
14376
  */
14116
14377
  checkExplicitBehavior() {
14117
14378
  const findings = [];
@@ -15284,7 +15545,7 @@ function getBlueskyConfig() {
15284
15545
  }
15285
15546
  async function loadAtproto() {
15286
15547
  try {
15287
- const mod = await import("./dist-4LDAFGC5.js");
15548
+ const mod = await import("./dist-RLMRWMYO.js");
15288
15549
  return { AtpAgent: mod.AtpAgent, RichText: mod.RichText };
15289
15550
  } catch {
15290
15551
  return void 0;
@@ -16743,230 +17004,6 @@ function authCommand(subcommand, options) {
16743
17004
  }
16744
17005
  }
16745
17006
 
16746
- // src/cli-command-catalog.ts
16747
- var COMMAND_CATALOG = [
16748
- // ── Essential ────────────────────────────────────────────────────────────
16749
- {
16750
- command: "(default)",
16751
- description: "Start MCP server with stdio transport",
16752
- audience: "essential"
16753
- },
16754
- {
16755
- command: "hello",
16756
- description: "Show welcome message and quick start (no API keys needed)",
16757
- audience: "essential"
16758
- },
16759
- {
16760
- command: "setup",
16761
- description: "Configure CLI integration (MCP + .rules + data dirs)",
16762
- audience: "essential"
16763
- },
16764
- {
16765
- command: "verify",
16766
- description: "Check install health (sqlite, adapters, config)",
16767
- audience: "essential"
16768
- },
16769
- {
16770
- command: "doctor",
16771
- description: "Detailed system/adapter health check",
16772
- audience: "essential"
16773
- },
16774
- {
16775
- command: "config",
16776
- description: "Manage configuration (init, get, set, list, export, import)",
16777
- audience: "essential"
16778
- },
16779
- {
16780
- command: "orchestrate",
16781
- description: "Execute a task via CLI tools (standalone mode)",
16782
- audience: "essential"
16783
- },
16784
- {
16785
- command: "vote",
16786
- description: "Run consensus vote on a proposal (5-6 agents)",
16787
- audience: "essential"
16788
- },
16789
- {
16790
- command: "workflow",
16791
- description: "Manage and run workflow templates (list, run)",
16792
- audience: "essential"
16793
- },
16794
- {
16795
- command: "expert",
16796
- description: "Manage expert agents (list, create, execute)",
16797
- audience: "essential"
16798
- },
16799
- {
16800
- command: "research",
16801
- description: "Manage research registry (status, add, stats, refresh)",
16802
- audience: "essential"
16803
- },
16804
- // ── Advanced ─────────────────────────────────────────────────────────────
16805
- {
16806
- command: "session",
16807
- description: "Manage session persistence (list, show, export, delete)",
16808
- audience: "advanced"
16809
- },
16810
- {
16811
- command: "auth",
16812
- description: "Manage MCP authentication tokens (init, show, rotate)",
16813
- audience: "advanced"
16814
- },
16815
- {
16816
- command: "status",
16817
- description: "At-a-glance project health dashboard",
16818
- audience: "advanced"
16819
- },
16820
- {
16821
- command: "capabilities",
16822
- description: "Show model capabilities matrix",
16823
- audience: "advanced"
16824
- },
16825
- {
16826
- command: "review",
16827
- description: "Review a GitHub PR (dogfooding helper)",
16828
- audience: "advanced"
16829
- },
16830
- {
16831
- command: "scaffold",
16832
- description: "Generate project files from templates",
16833
- audience: "advanced"
16834
- },
16835
- {
16836
- command: "validate",
16837
- description: "Run unified validation (doctor + fitness + config)",
16838
- audience: "advanced"
16839
- },
16840
- {
16841
- command: "index",
16842
- description: "Generate and manage codebase index",
16843
- audience: "advanced"
16844
- },
16845
- // ── Maintainer (hidden by default) ───────────────────────────────────────
16846
- {
16847
- command: "demo",
16848
- description: "API-free exploration mode (marketing/demo flow)",
16849
- audience: "maintainer"
16850
- },
16851
- {
16852
- command: "hooks",
16853
- description: "Claude CLI hook integration commands",
16854
- audience: "maintainer"
16855
- },
16856
- {
16857
- command: "routing-audit",
16858
- description: "Debug model routing decisions",
16859
- audience: "maintainer"
16860
- },
16861
- {
16862
- command: "fitness-audit",
16863
- description: "Run CLI orchestration fitness score audit",
16864
- audience: "maintainer"
16865
- },
16866
- {
16867
- command: "system-review",
16868
- description: "Automated system review (5-phase checklist)",
16869
- audience: "maintainer"
16870
- },
16871
- {
16872
- command: "sprint",
16873
- description: "Automated sprint planning from open issues",
16874
- audience: "maintainer"
16875
- },
16876
- {
16877
- command: "evaluate",
16878
- description: "Self-evaluation of codebase components",
16879
- audience: "maintainer"
16880
- },
16881
- {
16882
- command: "issue",
16883
- description: "Issue template validation and management",
16884
- audience: "maintainer"
16885
- },
16886
- {
16887
- command: "validation",
16888
- description: "Learning validation dashboard",
16889
- audience: "maintainer"
16890
- },
16891
- {
16892
- command: "learning-metrics",
16893
- description: "Aggregated learning metrics dashboard",
16894
- audience: "maintainer"
16895
- },
16896
- {
16897
- command: "swe-bench",
16898
- description: "Run SWE-bench evaluation benchmark",
16899
- audience: "maintainer"
16900
- },
16901
- {
16902
- command: "atbench",
16903
- description: "Run ATBench trajectory-safety evaluation",
16904
- audience: "maintainer"
16905
- },
16906
- {
16907
- command: "visualize",
16908
- description: "Generate Mermaid diagrams and ASCII dashboards",
16909
- audience: "maintainer"
16910
- },
16911
- {
16912
- command: "health",
16913
- description: "Swarm health metrics dashboard",
16914
- audience: "maintainer"
16915
- },
16916
- {
16917
- command: "release-notes",
16918
- description: "Generate release notes from git commits",
16919
- audience: "maintainer"
16920
- },
16921
- {
16922
- command: "release-validate",
16923
- description: "Run expert swarm validation for releases",
16924
- audience: "maintainer"
16925
- },
16926
- {
16927
- command: "release-announce",
16928
- description: "Generate release announcements (blog, social)",
16929
- audience: "maintainer"
16930
- }
16931
- ];
16932
- function filterCatalog(showAll) {
16933
- if (showAll) return COMMAND_CATALOG;
16934
- return COMMAND_CATALOG.filter((e) => e.audience !== "maintainer");
16935
- }
16936
- function groupByAudience(entries) {
16937
- const groups = /* @__PURE__ */ new Map();
16938
- for (const entry of entries) {
16939
- const existing = groups.get(entry.audience) ?? [];
16940
- existing.push(entry);
16941
- groups.set(entry.audience, existing);
16942
- }
16943
- return groups;
16944
- }
16945
- var AUDIENCE_HEADINGS = {
16946
- essential: "Essential \u2014 install, configure, run",
16947
- advanced: "Advanced \u2014 day-to-day extras",
16948
- maintainer: "Maintainer \u2014 benchmarks, releases, deep diagnostics"
16949
- };
16950
- function renderCommandsSection(showAll) {
16951
- const filtered = filterCatalog(showAll);
16952
- const groups = groupByAudience(filtered);
16953
- const lines = [];
16954
- const order = showAll ? ["essential", "advanced", "maintainer"] : ["essential", "advanced"];
16955
- for (const audience of order) {
16956
- const entries = groups.get(audience);
16957
- if (entries === void 0 || entries.length === 0) continue;
16958
- lines.push(` ${AUDIENCE_HEADINGS[audience]}`);
16959
- for (const entry of entries) {
16960
- lines.push(` ${entry.command.padEnd(16)} ${entry.description}`);
16961
- }
16962
- lines.push("");
16963
- }
16964
- if (!showAll) {
16965
- lines.push(" Run with --all to show maintainer commands (benchmarks, release tooling).");
16966
- }
16967
- return lines.join("\n").replace(/\n+$/, "");
16968
- }
16969
-
16970
17007
  // src/cli-help-text.ts
16971
17008
  var HELP_TEXT = `
16972
17009
  nexus-agents - Intelligent orchestration platform for AI coding tools
@@ -17607,6 +17644,14 @@ var PARSE_ARGS_CONFIG = {
17607
17644
  deep: {
17608
17645
  type: "boolean",
17609
17646
  default: false
17647
+ },
17648
+ // Registry command options (#2179)
17649
+ json: {
17650
+ type: "boolean",
17651
+ default: false
17652
+ },
17653
+ source: {
17654
+ type: "string"
17610
17655
  }
17611
17656
  },
17612
17657
  allowPositionals: true,
@@ -17657,7 +17702,8 @@ function isValidCommand(value) {
17657
17702
  "routing-ab",
17658
17703
  "memory-eval",
17659
17704
  "health",
17660
- "validate"
17705
+ "validate",
17706
+ "registry"
17661
17707
  ];
17662
17708
  return validCommands.includes(value);
17663
17709
  }
@@ -18460,6 +18506,7 @@ var STANDALONE_TOOLS = [
18460
18506
  { name: "list_experts", register: registerListExpertsTool },
18461
18507
  { name: "query_trace", register: registerQueryTraceTool },
18462
18508
  { name: "query_task_state", register: registerQueryTaskStateTool },
18509
+ { name: "verify_audit_chain", register: registerVerifyAuditChainTool },
18463
18510
  { name: "extract_symbols", register: registerExtractSymbolsTool },
18464
18511
  { name: "search_codebase", register: registerSearchCodebaseTool },
18465
18512
  { name: "run_dev_pipeline", register: registerDevPipelineTool },
@@ -19955,12 +20002,14 @@ function setupShutdownHandlers(cleanup, logger17) {
19955
20002
  process.exit(EXIT_CODES.SHUTDOWN_ERROR);
19956
20003
  }
19957
20004
  };
19958
- process.on("SIGINT", () => {
19959
- void handleShutdown("SIGINT");
19960
- });
19961
- process.on("SIGTERM", () => {
19962
- void handleShutdown("SIGTERM");
19963
- });
20005
+ const onSignal = (signal) => () => {
20006
+ handleShutdown(signal).catch((err2) => {
20007
+ logger17.error("Shutdown handler crashed", err2 instanceof Error ? err2 : new Error(String(err2)));
20008
+ process.exit(EXIT_CODES.SHUTDOWN_ERROR);
20009
+ });
20010
+ };
20011
+ process.on("SIGINT", onSignal("SIGINT"));
20012
+ process.on("SIGTERM", onSignal("SIGTERM"));
19964
20013
  process.on("uncaughtException", (error) => {
19965
20014
  logger17.error("Uncaught exception", error);
19966
20015
  process.exit(EXIT_CODES.SERVER_START_FAILED);
@@ -20156,7 +20205,7 @@ async function initializeSubsystems(config, logger17) {
20156
20205
  await initializeAndLogSandbox(serverLogger, config.security?.sandbox);
20157
20206
  const policyFirewall = logSecurityConfig(serverLogger, config);
20158
20207
  const auditLogger = initializeAuditLogger(config.security, serverLogger);
20159
- const authInit = initializeAuth(config, serverLogger);
20208
+ initializeAuth(config, serverLogger);
20160
20209
  await initializeAndRegisterTools(
20161
20210
  server,
20162
20211
  serverLogger,
@@ -20164,8 +20213,9 @@ async function initializeSubsystems(config, logger17) {
20164
20213
  config,
20165
20214
  feedbackResult.feedbackIntegration
20166
20215
  );
20167
- return { server, serverLogger, observer, eventBusBridge, policyFirewall, auditLogger, authInit };
20216
+ return { server, serverLogger, observer, eventBusBridge, auditLogger };
20168
20217
  }
20218
+ var SERVER_STARTUP_TIMEOUT_MS = 3e4;
20169
20219
  async function startServer(verbose, mode, modeWasExplicit = false, orchestratorOptions) {
20170
20220
  const logger17 = createLogger({ component: "cli" });
20171
20221
  if (verbose) logger17.setLevel("debug");
@@ -20174,6 +20224,13 @@ async function startServer(verbose, mode, modeWasExplicit = false, orchestratorO
20174
20224
  await startOrchestratorMode(orchestratorOptions ?? { verbose });
20175
20225
  return;
20176
20226
  }
20227
+ const startupWatchdog = setTimeout(() => {
20228
+ logger17.error(
20229
+ `Server startup exceeded ${String(SERVER_STARTUP_TIMEOUT_MS)}ms \u2014 aborting. Common causes: hung config load, blocked subsystem init, stdio transport stall.`
20230
+ );
20231
+ process.exit(EXIT_CODES.SERVER_START_FAILED);
20232
+ }, SERVER_STARTUP_TIMEOUT_MS);
20233
+ startupWatchdog.unref();
20177
20234
  const detectionResult = detectMode({ explicitMode: modeWasExplicit ? mode : void 0 });
20178
20235
  logStartupInfo(logger17, detectionResult, verbose);
20179
20236
  const configResult = loadAndLogConfig(logger17);
@@ -20198,6 +20255,7 @@ async function startServer(verbose, mode, modeWasExplicit = false, orchestratorO
20198
20255
  auditLogger
20199
20256
  });
20200
20257
  setupShutdownHandlers(cleanup, logger17);
20258
+ clearTimeout(startupWatchdog);
20201
20259
  logger17.debug("Server running, waiting for requests...");
20202
20260
  }
20203
20261
 
@@ -20229,6 +20287,11 @@ function isValidIndexFormat(value) {
20229
20287
  function isValidResearchFormat(value) {
20230
20288
  return value === "table" || value === "json";
20231
20289
  }
20290
+ function parsePositiveInt(arg, defaultVal) {
20291
+ if (arg === void 0) return defaultVal;
20292
+ const parsed = parseInt(arg, 10);
20293
+ return Number.isNaN(parsed) || parsed <= 0 ? defaultVal : parsed;
20294
+ }
20232
20295
 
20233
20296
  // src/cli-commands-usage.ts
20234
20297
  function printWorkflowRunUsage() {
@@ -20575,6 +20638,32 @@ async function handleResearchCommand(args) {
20575
20638
  process.exit(EXIT_CODES.SERVER_START_FAILED);
20576
20639
  }
20577
20640
  }
20641
+ async function handleRegistryCommand(args) {
20642
+ const { registryCommand, isValidRegistrySubcommand, formatRegistryUsage } = await import("./registry-command-S46JJ2SX.js");
20643
+ const subcommand = args.subcommand;
20644
+ if (!isValidRegistrySubcommand(subcommand)) {
20645
+ process.stdout.write(`${formatRegistryUsage()}
20646
+ `);
20647
+ process.exit(EXIT_CODES.INVALID_ARGS);
20648
+ }
20649
+ const source = typeof args.options.source === "string" ? args.options.source : void 0;
20650
+ const options = {
20651
+ json: args.options.json === true,
20652
+ dryRun: args.options.dryRun,
20653
+ ...source !== void 0 ? { source } : {}
20654
+ };
20655
+ try {
20656
+ const result = await registryCommand(subcommand, options);
20657
+ process.stdout.write(`${result.text}
20658
+ `);
20659
+ process.exit(result.exitCode === 0 ? EXIT_CODES.SUCCESS : EXIT_CODES.SERVER_START_FAILED);
20660
+ } catch (error) {
20661
+ const message = getErrorMessage(error);
20662
+ process.stdout.write(`Error: ${message}
20663
+ `);
20664
+ process.exit(EXIT_CODES.SERVER_START_FAILED);
20665
+ }
20666
+ }
20578
20667
  function handleValidationCommand(args) {
20579
20668
  const options = parseValidationArgs(args.positionals, args.options.format, args.options.verbose);
20580
20669
  const exitCode = validationDashboardCommand(options);
@@ -20598,7 +20687,7 @@ async function handleVerifyCommand(args) {
20598
20687
  async function handleDoctorCommand(args) {
20599
20688
  const exitCode = await doctorCommand({ fix: args.options.fix });
20600
20689
  if (args.options.deep) {
20601
- const { runDeepDiagnostics: runDeepDiagnostics2, formatDeepDiagnostics: formatDeepDiagnostics2 } = await import("./doctor-deep-RKMOZSIS.js");
20690
+ const { runDeepDiagnostics: runDeepDiagnostics2, formatDeepDiagnostics: formatDeepDiagnostics2 } = await import("./doctor-deep-VN6KMUCG.js");
20602
20691
  const diag = runDeepDiagnostics2();
20603
20692
  process.stdout.write(formatDeepDiagnostics2(diag) + "\n");
20604
20693
  }
@@ -20627,7 +20716,7 @@ async function handleSetupCommandAsync(args) {
20627
20716
  process.exit(exitCode === 0 ? EXIT_CODES.SUCCESS : EXIT_CODES.SERVER_START_FAILED);
20628
20717
  }
20629
20718
  async function runCustomApiSetup(args) {
20630
- const { configureCustomApi } = await import("./setup-custom-api-XAWKRDWV.js");
20719
+ const { configureCustomApi } = await import("./setup-custom-api-CSB26HWD.js");
20631
20720
  const baseUrl = args.options.customApi;
20632
20721
  if (baseUrl === void 0) return EXIT_CODES.SERVER_START_FAILED;
20633
20722
  const input = {
@@ -20787,25 +20876,19 @@ function handleWarmUpCommand(_args) {
20787
20876
  process.exit(EXIT_CODES.SUCCESS);
20788
20877
  }
20789
20878
  function handleE2EEvalCommand(args) {
20790
- const countArg = args.positionals[1];
20791
- const taskCount = countArg !== void 0 ? parseInt(countArg, 10) : 50;
20792
- const count = Number.isNaN(taskCount) || taskCount <= 0 ? 50 : taskCount;
20879
+ const count = parsePositiveInt(args.positionals[1], 50);
20793
20880
  const result = runE2EEval({ taskCount: count });
20794
20881
  process.stdout.write(formatE2EEvalResult(result) + "\n");
20795
20882
  process.exit(result.passed ? EXIT_CODES.SUCCESS : 1);
20796
20883
  }
20797
20884
  function handleRoutingABCommand(args) {
20798
- const countArg = args.positionals[1];
20799
- const taskCount = countArg !== void 0 ? parseInt(countArg, 10) : 30;
20800
- const count = Number.isNaN(taskCount) || taskCount <= 0 ? 30 : taskCount;
20885
+ const count = parsePositiveInt(args.positionals[1], 30);
20801
20886
  const result = runRoutingAB({ taskCount: count });
20802
20887
  process.stdout.write(formatABReport(result) + "\n");
20803
20888
  process.exit(EXIT_CODES.SUCCESS);
20804
20889
  }
20805
20890
  function handleMemoryEvalCommand(args) {
20806
- const sizeArg = args.positionals[1];
20807
- const size = sizeArg !== void 0 ? parseInt(sizeArg, 10) : 50;
20808
- const count = Number.isNaN(size) || size <= 0 ? 50 : size;
20891
+ const count = parsePositiveInt(args.positionals[1], 50);
20809
20892
  const result = runMemoryEval(count);
20810
20893
  process.stdout.write(formatMemoryEvalReport(result) + "\n");
20811
20894
  process.exit(EXIT_CODES.SUCCESS);
@@ -22749,6 +22832,7 @@ var ASYNC_COMMAND_HANDLERS = {
22749
22832
  vote: handleVoteCommand,
22750
22833
  index: handleIndexCommand2,
22751
22834
  research: handleResearchCommand,
22835
+ registry: handleRegistryCommand,
22752
22836
  "swe-bench": handleSweBenchCommand,
22753
22837
  atbench: handleAtbenchCommand,
22754
22838
  hooks: handleHooksCommand,
@@ -23152,6 +23236,8 @@ function buildOptions(values) {
23152
23236
  quick: values.quick,
23153
23237
  mock: values.mock,
23154
23238
  deep: values.deep,
23239
+ json: values.json,
23240
+ ...values.source !== void 0 && { source: values.source },
23155
23241
  ...values.output !== void 0 && { output: values.output },
23156
23242
  ...values.input !== void 0 && { input: values.input },
23157
23243
  ...buildOrchestrateOptions(values),