nexus-agents 4.22.0 → 4.22.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 (122) hide show
  1. package/dist/{child-mcp-config-GNF2DS7K.js → child-mcp-config-Y3QSDCYI.js} +2 -2
  2. package/dist/{chunk-IDLQNS5U.js → chunk-2SVIHHNJ.js} +3 -3
  3. package/dist/{chunk-MDVHI3PP.js → chunk-6U3LS57H.js} +6 -6
  4. package/dist/{chunk-RNMJUIPI.js → chunk-BG2LQ5I2.js} +95 -55
  5. package/dist/{chunk-RNMJUIPI.js.map → chunk-BG2LQ5I2.js.map} +1 -1
  6. package/dist/{chunk-26VBDXT7.js → chunk-BK3NHWSW.js} +3 -3
  7. package/dist/{chunk-TV3L3GME.js → chunk-CBORIR4Y.js} +2 -2
  8. package/dist/{chunk-JJC5YKBH.js → chunk-D6ZTSN34.js} +3 -3
  9. package/dist/{chunk-6MVRXQ6V.js → chunk-DGLAEH7Y.js} +2 -2
  10. package/dist/{chunk-HVCYICUX.js → chunk-EU7S5CDW.js} +35 -24
  11. package/dist/chunk-EU7S5CDW.js.map +1 -0
  12. package/dist/{chunk-QWTDGESS.js → chunk-FVUQY73A.js} +2 -2
  13. package/dist/{chunk-HWBUN7WP.js → chunk-GMJQ6QMZ.js} +2 -2
  14. package/dist/{chunk-S3EAMH4I.js → chunk-H7CV35LZ.js} +3 -3
  15. package/dist/{chunk-2SXZIUEA.js → chunk-ICGYXBS6.js} +2 -2
  16. package/dist/{chunk-3AAAEN6N.js → chunk-IK6JPHMX.js} +5 -5
  17. package/dist/{chunk-IIJSUNEK.js → chunk-JDWXD3YZ.js} +7 -7
  18. package/dist/{chunk-C67BIG35.js → chunk-JM42KPWJ.js} +8 -8
  19. package/dist/{chunk-3X2ZQAJI.js → chunk-JR4XD3T7.js} +4 -4
  20. package/dist/{chunk-BZTFS7FN.js → chunk-JV6SMJMJ.js} +2 -2
  21. package/dist/{chunk-Z6W6G35I.js → chunk-KDUSLLZM.js} +2 -2
  22. package/dist/{chunk-PT3QWCKF.js → chunk-MM7BINTV.js} +3 -3
  23. package/dist/{chunk-MNPD6TMW.js → chunk-MTGMOLRO.js} +2 -2
  24. package/dist/{chunk-7B5YTCHU.js → chunk-P422WQJM.js} +2 -2
  25. package/dist/{chunk-KASC5XK7.js → chunk-PSXX2GBZ.js} +7 -7
  26. package/dist/{chunk-VZHZFAYL.js → chunk-QRG7UR2F.js} +2 -2
  27. package/dist/{chunk-LYI5GXON.js → chunk-RE2GYZRK.js} +5 -5
  28. package/dist/{chunk-PAZLJC46.js → chunk-RMTTKP4L.js} +2 -2
  29. package/dist/{chunk-BDEWOJL4.js → chunk-SBLLJXJO.js} +2 -2
  30. package/dist/{chunk-ZDLWHEFZ.js → chunk-TBXAEAKP.js} +2 -2
  31. package/dist/{chunk-M4BAGHYQ.js → chunk-TMKBZG3W.js} +2 -2
  32. package/dist/{chunk-AQV5RKO7.js → chunk-V533P6BT.js} +4 -4
  33. package/dist/{chunk-G2USF7DN.js → chunk-W2DYH4WL.js} +8 -8
  34. package/dist/{chunk-NF7GW4QQ.js → chunk-X7MLVGJV.js} +2 -2
  35. package/dist/{chunk-AJM6RCCB.js → chunk-XYWCZNFC.js} +2 -2
  36. package/dist/{cli-circuit-breaker-NSXLDTKZ.js → cli-circuit-breaker-T2IKLJVA.js} +3 -3
  37. package/dist/cli.js +57 -44
  38. package/dist/cli.js.map +1 -1
  39. package/dist/{composite-router-ULSYJV7S.js → composite-router-CCDCVYTY.js} +2 -2
  40. package/dist/{consensus-vote-OUZGLMJ4.js → consensus-vote-TMMGZROW.js} +16 -16
  41. package/dist/{context-retriever-QAZWTGAT.js → context-retriever-CKJ7EJME.js} +8 -8
  42. package/dist/{doctor-deep-IWQUV5IH.js → doctor-deep-MIQ5QYUL.js} +3 -3
  43. package/dist/{doctor-live-MJSBAH5J.js → doctor-live-IAERE7DO.js} +9 -9
  44. package/dist/{expert-bridge-6D43UDLS.js → expert-bridge-5MK4DOB7.js} +4 -4
  45. package/dist/{factory-2MLMLJDK.js → factory-6FNJM6P3.js} +9 -9
  46. package/dist/{factory-GUBAT3HH.js → factory-OO7MN24L.js} +5 -5
  47. package/dist/{improvement-review-W6HJIQLG.js → improvement-review-DKCVIJSF.js} +5 -5
  48. package/dist/index.d.ts +9 -0
  49. package/dist/index.js +30 -30
  50. package/dist/{init-opencode-TCP3OSFK.js → init-opencode-CM2HL2PI.js} +6 -6
  51. package/dist/issue-triage-NH25YRNT.js +17 -0
  52. package/dist/{pr-reviewer-helpers-VKQR2T3Y.js → pr-reviewer-helpers-Q6GRH5PP.js} +4 -4
  53. package/dist/{registry-command-ALLKEWVO.js → registry-command-BYRGRQ3I.js} +2 -2
  54. package/dist/{repo-security-plan-SJYA5PJC.js → repo-security-plan-NP6AT3NR.js} +3 -3
  55. package/dist/{research-helpers-synthesize-ERZD3P4M.js → research-helpers-synthesize-2R6TO2SP.js} +4 -4
  56. package/dist/{routing-memory-4WAKAU2L.js → routing-memory-IZH3XQQH.js} +2 -2
  57. package/dist/{session-memory-XR5FJQSM.js → session-memory-OWEWA5BX.js} +3 -3
  58. package/dist/{setup-config-26GAKOC3.js → setup-config-O7LHHD42.js} +3 -3
  59. package/dist/{setup-custom-api-TKMWDJJW.js → setup-custom-api-OZ3QCQTJ.js} +4 -4
  60. package/dist/setup-data-dir-T6K5PKM5.js +28 -0
  61. package/dist/{tool-memory-QCZKITSG.js → tool-memory-LYKMCW7U.js} +5 -5
  62. package/dist/{unified-registry-63G7RTA6.js → unified-registry-ZSPVJ4BO.js} +10 -10
  63. package/dist/{weather-report-JVVJXNQY.js → weather-report-4OFVK5Q5.js} +2 -2
  64. package/package.json +1 -1
  65. package/dist/chunk-HVCYICUX.js.map +0 -1
  66. package/dist/issue-triage-CLHI2MHK.js +0 -17
  67. package/dist/setup-data-dir-HTZZ5FII.js +0 -28
  68. /package/dist/{child-mcp-config-GNF2DS7K.js.map → child-mcp-config-Y3QSDCYI.js.map} +0 -0
  69. /package/dist/{chunk-IDLQNS5U.js.map → chunk-2SVIHHNJ.js.map} +0 -0
  70. /package/dist/{chunk-MDVHI3PP.js.map → chunk-6U3LS57H.js.map} +0 -0
  71. /package/dist/{chunk-26VBDXT7.js.map → chunk-BK3NHWSW.js.map} +0 -0
  72. /package/dist/{chunk-TV3L3GME.js.map → chunk-CBORIR4Y.js.map} +0 -0
  73. /package/dist/{chunk-JJC5YKBH.js.map → chunk-D6ZTSN34.js.map} +0 -0
  74. /package/dist/{chunk-6MVRXQ6V.js.map → chunk-DGLAEH7Y.js.map} +0 -0
  75. /package/dist/{chunk-QWTDGESS.js.map → chunk-FVUQY73A.js.map} +0 -0
  76. /package/dist/{chunk-HWBUN7WP.js.map → chunk-GMJQ6QMZ.js.map} +0 -0
  77. /package/dist/{chunk-S3EAMH4I.js.map → chunk-H7CV35LZ.js.map} +0 -0
  78. /package/dist/{chunk-2SXZIUEA.js.map → chunk-ICGYXBS6.js.map} +0 -0
  79. /package/dist/{chunk-3AAAEN6N.js.map → chunk-IK6JPHMX.js.map} +0 -0
  80. /package/dist/{chunk-IIJSUNEK.js.map → chunk-JDWXD3YZ.js.map} +0 -0
  81. /package/dist/{chunk-C67BIG35.js.map → chunk-JM42KPWJ.js.map} +0 -0
  82. /package/dist/{chunk-3X2ZQAJI.js.map → chunk-JR4XD3T7.js.map} +0 -0
  83. /package/dist/{chunk-BZTFS7FN.js.map → chunk-JV6SMJMJ.js.map} +0 -0
  84. /package/dist/{chunk-Z6W6G35I.js.map → chunk-KDUSLLZM.js.map} +0 -0
  85. /package/dist/{chunk-PT3QWCKF.js.map → chunk-MM7BINTV.js.map} +0 -0
  86. /package/dist/{chunk-MNPD6TMW.js.map → chunk-MTGMOLRO.js.map} +0 -0
  87. /package/dist/{chunk-7B5YTCHU.js.map → chunk-P422WQJM.js.map} +0 -0
  88. /package/dist/{chunk-KASC5XK7.js.map → chunk-PSXX2GBZ.js.map} +0 -0
  89. /package/dist/{chunk-VZHZFAYL.js.map → chunk-QRG7UR2F.js.map} +0 -0
  90. /package/dist/{chunk-LYI5GXON.js.map → chunk-RE2GYZRK.js.map} +0 -0
  91. /package/dist/{chunk-PAZLJC46.js.map → chunk-RMTTKP4L.js.map} +0 -0
  92. /package/dist/{chunk-BDEWOJL4.js.map → chunk-SBLLJXJO.js.map} +0 -0
  93. /package/dist/{chunk-ZDLWHEFZ.js.map → chunk-TBXAEAKP.js.map} +0 -0
  94. /package/dist/{chunk-M4BAGHYQ.js.map → chunk-TMKBZG3W.js.map} +0 -0
  95. /package/dist/{chunk-AQV5RKO7.js.map → chunk-V533P6BT.js.map} +0 -0
  96. /package/dist/{chunk-G2USF7DN.js.map → chunk-W2DYH4WL.js.map} +0 -0
  97. /package/dist/{chunk-NF7GW4QQ.js.map → chunk-X7MLVGJV.js.map} +0 -0
  98. /package/dist/{chunk-AJM6RCCB.js.map → chunk-XYWCZNFC.js.map} +0 -0
  99. /package/dist/{cli-circuit-breaker-NSXLDTKZ.js.map → cli-circuit-breaker-T2IKLJVA.js.map} +0 -0
  100. /package/dist/{composite-router-ULSYJV7S.js.map → composite-router-CCDCVYTY.js.map} +0 -0
  101. /package/dist/{consensus-vote-OUZGLMJ4.js.map → consensus-vote-TMMGZROW.js.map} +0 -0
  102. /package/dist/{context-retriever-QAZWTGAT.js.map → context-retriever-CKJ7EJME.js.map} +0 -0
  103. /package/dist/{doctor-deep-IWQUV5IH.js.map → doctor-deep-MIQ5QYUL.js.map} +0 -0
  104. /package/dist/{doctor-live-MJSBAH5J.js.map → doctor-live-IAERE7DO.js.map} +0 -0
  105. /package/dist/{expert-bridge-6D43UDLS.js.map → expert-bridge-5MK4DOB7.js.map} +0 -0
  106. /package/dist/{factory-2MLMLJDK.js.map → factory-6FNJM6P3.js.map} +0 -0
  107. /package/dist/{factory-GUBAT3HH.js.map → factory-OO7MN24L.js.map} +0 -0
  108. /package/dist/{improvement-review-W6HJIQLG.js.map → improvement-review-DKCVIJSF.js.map} +0 -0
  109. /package/dist/{init-opencode-TCP3OSFK.js.map → init-opencode-CM2HL2PI.js.map} +0 -0
  110. /package/dist/{issue-triage-CLHI2MHK.js.map → issue-triage-NH25YRNT.js.map} +0 -0
  111. /package/dist/{pr-reviewer-helpers-VKQR2T3Y.js.map → pr-reviewer-helpers-Q6GRH5PP.js.map} +0 -0
  112. /package/dist/{registry-command-ALLKEWVO.js.map → registry-command-BYRGRQ3I.js.map} +0 -0
  113. /package/dist/{repo-security-plan-SJYA5PJC.js.map → repo-security-plan-NP6AT3NR.js.map} +0 -0
  114. /package/dist/{research-helpers-synthesize-ERZD3P4M.js.map → research-helpers-synthesize-2R6TO2SP.js.map} +0 -0
  115. /package/dist/{routing-memory-4WAKAU2L.js.map → routing-memory-IZH3XQQH.js.map} +0 -0
  116. /package/dist/{session-memory-XR5FJQSM.js.map → session-memory-OWEWA5BX.js.map} +0 -0
  117. /package/dist/{setup-config-26GAKOC3.js.map → setup-config-O7LHHD42.js.map} +0 -0
  118. /package/dist/{setup-custom-api-TKMWDJJW.js.map → setup-custom-api-OZ3QCQTJ.js.map} +0 -0
  119. /package/dist/{setup-data-dir-HTZZ5FII.js.map → setup-data-dir-T6K5PKM5.js.map} +0 -0
  120. /package/dist/{tool-memory-QCZKITSG.js.map → tool-memory-LYKMCW7U.js.map} +0 -0
  121. /package/dist/{unified-registry-63G7RTA6.js.map → unified-registry-ZSPVJ4BO.js.map} +0 -0
  122. /package/dist/{weather-report-JVVJXNQY.js.map → weather-report-4OFVK5Q5.js.map} +0 -0
package/dist/cli.js CHANGED
@@ -18,11 +18,11 @@ import {
18
18
  generateSummary,
19
19
  parseFindings,
20
20
  sumFindings
21
- } from "./chunk-26VBDXT7.js";
22
- import "./chunk-BZTFS7FN.js";
21
+ } from "./chunk-BK3NHWSW.js";
22
+ import "./chunk-JV6SMJMJ.js";
23
23
  import {
24
24
  runConfigInitSync
25
- } from "./chunk-QWTDGESS.js";
25
+ } from "./chunk-FVUQY73A.js";
26
26
  import {
27
27
  AuthHandler,
28
28
  CustomExpertDefinitionSchema,
@@ -153,8 +153,8 @@ import {
153
153
  validateNexusEnv,
154
154
  validateWorkflow,
155
155
  wrapInMarkdownFence
156
- } from "./chunk-RNMJUIPI.js";
157
- import "./chunk-VZHZFAYL.js";
156
+ } from "./chunk-BG2LQ5I2.js";
157
+ import "./chunk-QRG7UR2F.js";
158
158
  import "./chunk-HFOQKCD2.js";
159
159
  import "./chunk-RSMG2DPB.js";
160
160
  import {
@@ -173,14 +173,14 @@ import {
173
173
  doctorCommand,
174
174
  initDataDirectories,
175
175
  runDoctor
176
- } from "./chunk-IIJSUNEK.js";
176
+ } from "./chunk-JDWXD3YZ.js";
177
177
  import {
178
178
  buildOpenAICompatAdapters,
179
179
  readOpenAICompatEnv
180
- } from "./chunk-LYI5GXON.js";
180
+ } from "./chunk-RE2GYZRK.js";
181
181
  import {
182
182
  shutdownExpertBridge
183
- } from "./chunk-KASC5XK7.js";
183
+ } from "./chunk-PSXX2GBZ.js";
184
184
  import {
185
185
  ConsensusVoteInputSchema,
186
186
  DEFAULT_VOTE_TIMEOUT_MS,
@@ -191,29 +191,29 @@ import {
191
191
  mapOutcomeToDecision,
192
192
  recordAuthenticVote,
193
193
  registerConsensusVoteTool
194
- } from "./chunk-G2USF7DN.js";
194
+ } from "./chunk-W2DYH4WL.js";
195
195
  import {
196
196
  loadUsageEvents,
197
197
  rollupByModel
198
- } from "./chunk-ZDLWHEFZ.js";
198
+ } from "./chunk-TBXAEAKP.js";
199
199
  import {
200
200
  allOf,
201
201
  anyOf
202
202
  } from "./chunk-OQB3XC5O.js";
203
203
  import {
204
204
  synthesizeResearch
205
- } from "./chunk-S3EAMH4I.js";
205
+ } from "./chunk-H7CV35LZ.js";
206
206
  import {
207
207
  classifyTrust,
208
208
  createFullGitHubProvider,
209
209
  evaluatePolicy,
210
210
  parsePRUrl
211
- } from "./chunk-MDVHI3PP.js";
212
- import "./chunk-Z6W6G35I.js";
211
+ } from "./chunk-6U3LS57H.js";
212
+ import "./chunk-KDUSLLZM.js";
213
213
  import {
214
214
  ReputationCache,
215
215
  sanitizeInput
216
- } from "./chunk-HWBUN7WP.js";
216
+ } from "./chunk-GMJQ6QMZ.js";
217
217
  import {
218
218
  ImprovementReviewInputSchema,
219
219
  calculateFitnessScore,
@@ -227,17 +227,17 @@ import {
227
227
  registerImprovementReviewTool,
228
228
  runImprovementReview,
229
229
  scanForSecrets
230
- } from "./chunk-PT3QWCKF.js";
230
+ } from "./chunk-MM7BINTV.js";
231
231
  import {
232
232
  createDefaultPolicyFirewall,
233
233
  setGlobalPolicyFirewall,
234
234
  stagePolicyFirewallForRollout
235
- } from "./chunk-JJC5YKBH.js";
236
- import "./chunk-NF7GW4QQ.js";
235
+ } from "./chunk-D6ZTSN34.js";
236
+ import "./chunk-X7MLVGJV.js";
237
237
  import {
238
238
  createUnifiedRegistry,
239
239
  getGlobalRegistry
240
- } from "./chunk-AQV5RKO7.js";
240
+ } from "./chunk-V533P6BT.js";
241
241
  import {
242
242
  CodebaseIndexSchema,
243
243
  PaperStatusSchema,
@@ -263,24 +263,24 @@ import {
263
263
  loadSourcesRegistry,
264
264
  rankDiscoveredItems,
265
265
  saveSourcesRegistry
266
- } from "./chunk-3AAAEN6N.js";
266
+ } from "./chunk-IK6JPHMX.js";
267
267
  import {
268
268
  loadPapersRegistry,
269
269
  loadTechniquesRegistry,
270
270
  savePapersRegistry
271
- } from "./chunk-7B5YTCHU.js";
271
+ } from "./chunk-P422WQJM.js";
272
272
  import {
273
273
  resolveToken
274
- } from "./chunk-AJM6RCCB.js";
274
+ } from "./chunk-XYWCZNFC.js";
275
275
  import {
276
276
  MemoryError,
277
277
  shutdownToolMemory
278
- } from "./chunk-HVCYICUX.js";
278
+ } from "./chunk-EU7S5CDW.js";
279
279
  import {
280
280
  capitalize,
281
281
  capitalizeKebab
282
282
  } from "./chunk-6T3EPABN.js";
283
- import "./chunk-6MVRXQ6V.js";
283
+ import "./chunk-DGLAEH7Y.js";
284
284
  import {
285
285
  BUILT_IN_EXPERTS
286
286
  } from "./chunk-YPNQPT2F.js";
@@ -293,19 +293,19 @@ import {
293
293
  isRecord,
294
294
  probeAllClis,
295
295
  readSubprocessDepth
296
- } from "./chunk-C67BIG35.js";
297
- import "./chunk-TV3L3GME.js";
296
+ } from "./chunk-JM42KPWJ.js";
297
+ import "./chunk-CBORIR4Y.js";
298
298
  import {
299
299
  DEFAULTS
300
- } from "./chunk-M4BAGHYQ.js";
301
- import "./chunk-2SXZIUEA.js";
300
+ } from "./chunk-TMKBZG3W.js";
301
+ import "./chunk-ICGYXBS6.js";
302
302
  import {
303
303
  nexusMkdtempSync
304
304
  } from "./chunk-RQV5ZUXT.js";
305
- import "./chunk-PAZLJC46.js";
305
+ import "./chunk-RMTTKP4L.js";
306
306
  import "./chunk-QZUG667L.js";
307
- import "./chunk-MNPD6TMW.js";
308
- import "./chunk-BDEWOJL4.js";
307
+ import "./chunk-MTGMOLRO.js";
308
+ import "./chunk-SBLLJXJO.js";
309
309
  import {
310
310
  API_TIMEOUTS,
311
311
  AgentCapability,
@@ -382,7 +382,7 @@ import {
382
382
  validateTimeout,
383
383
  writeEmptyLine,
384
384
  writeLine
385
- } from "./chunk-IDLQNS5U.js";
385
+ } from "./chunk-2SVIHHNJ.js";
386
386
  import "./chunk-HHLCAWAV.js";
387
387
  import {
388
388
  applyPortableMode,
@@ -4421,7 +4421,7 @@ ${file.patch}
4421
4421
  violations: policyResult.violations
4422
4422
  });
4423
4423
  }
4424
- const { formatReviewComment: formatReviewComment2 } = await import("./pr-reviewer-helpers-VKQR2T3Y.js");
4424
+ const { formatReviewComment: formatReviewComment2 } = await import("./pr-reviewer-helpers-Q6GRH5PP.js");
4425
4425
  const body = formatReviewComment2(result);
4426
4426
  const postResult = await provider.createReview(pr.prNumber, body, result.decision);
4427
4427
  if (!postResult.ok) {
@@ -19553,7 +19553,7 @@ function startImprovementReviewScheduler(options) {
19553
19553
  let running = false;
19554
19554
  const runOnce = async () => {
19555
19555
  try {
19556
- const { runImprovementReview: runImprovementReview2, ImprovementReviewInputSchema: ImprovementReviewInputSchema2 } = await import("./improvement-review-W6HJIQLG.js");
19556
+ const { runImprovementReview: runImprovementReview2, ImprovementReviewInputSchema: ImprovementReviewInputSchema2 } = await import("./improvement-review-DKCVIJSF.js");
19557
19557
  const input = ImprovementReviewInputSchema2.parse({ fileIssues });
19558
19558
  const result = await runImprovementReview2(input, { logger: logger22 });
19559
19559
  logger22.info("Scheduled improvement_review complete", {
@@ -21620,7 +21620,7 @@ function adaptConfigToLibrary(config) {
21620
21620
  }
21621
21621
  function createBeliefPromoter() {
21622
21622
  return async (event) => {
21623
- const { getToolMemory } = await import("./tool-memory-QCZKITSG.js");
21623
+ const { getToolMemory } = await import("./tool-memory-LYKMCW7U.js");
21624
21624
  const tm = getToolMemory();
21625
21625
  await tm.recordBelief(
21626
21626
  `skill:${event.name}`,
@@ -21808,17 +21808,23 @@ function getAuthValues(config) {
21808
21808
  const method = configAuth?.method ?? process.env["NEXUS_AUTH_METHOD"] ?? "none";
21809
21809
  return { enabled, method };
21810
21810
  }
21811
+ function warnIfAuditDisabled(auditEnabled, logger22) {
21812
+ if (auditEnabled) return;
21813
+ logger22.warn(
21814
+ "Audit logging is disabled \u2014 no tamper-evident event chain is being written. Set security.audit.enabled: true to enable it."
21815
+ );
21816
+ }
21811
21817
  function logSecurityConfig(logger22, config) {
21812
21818
  const policyFirewall = createConfiguredPolicyFirewall(logger22, config);
21813
21819
  const authVals = getAuthValues(config);
21814
21820
  const policyVals = getPolicyValues(config);
21815
21821
  const rateLimitVals = getRateLimitValues(config);
21822
+ const auditEnabled = config?.security?.audit?.enabled === true;
21816
21823
  logger22.info("Security configuration", {
21817
21824
  // #4888: named `configuredPolicyMode`, not `policyMode`. This runs at
21818
- // startup, before `stagePolicyFirewallForRollout` decides the mode that
21819
- // will actually apply — which is `warn` unless the operator opted in. A
21820
- // field called `policyMode` reading `enforce` here would claim an
21821
- // enforcement the staged rollout does not perform.
21825
+ // startup, before `stagePolicyFirewallForRollout` forces the firewall to
21826
+ // `warn` — the mode that actually applies. A field called `policyMode`
21827
+ // reading `enforce` here would claim an enforcement that does not happen.
21822
21828
  configuredPolicyMode: policyVals.mode,
21823
21829
  defaultExecutionMode: policyVals.defaultExec,
21824
21830
  policyRuleCount: policyFirewall.getRules().length,
@@ -21826,8 +21832,15 @@ function logSecurityConfig(logger22, config) {
21826
21832
  authMethod: authVals.method,
21827
21833
  rateLimitEnabled: rateLimitVals.enabled,
21828
21834
  rateLimitRequestsPerMinute: rateLimitVals.rpm,
21835
+ // #4990: audit was the only security control missing from this line, and
21836
+ // `initializeAuditLogger` announces its absence at `debug` — dropped at the
21837
+ // default level. So the tamper-evident chain the docs lead with could be
21838
+ // off while the startup log confirmed four other controls and said nothing
21839
+ // about this one, which reads as fine rather than absent.
21840
+ auditEnabled,
21829
21841
  allowedPaths: config?.security?.allowedPaths ?? ["./"]
21830
21842
  });
21843
+ warnIfAuditDisabled(auditEnabled, logger22);
21831
21844
  if (!authVals.enabled) {
21832
21845
  logger22.warn(
21833
21846
  "Authentication explicitly disabled \u2014 network-exposed endpoints are unprotected. Remove NEXUS_AUTH_ENABLED=false to re-enable."
@@ -22828,7 +22841,7 @@ async function handleResearchCommand(args) {
22828
22841
  }
22829
22842
  }
22830
22843
  async function handleRegistryCommand(args) {
22831
- const { registryCommand, isValidRegistrySubcommand, formatRegistryUsage } = await import("./registry-command-ALLKEWVO.js");
22844
+ const { registryCommand, isValidRegistrySubcommand, formatRegistryUsage } = await import("./registry-command-BYRGRQ3I.js");
22832
22845
  const subcommand = args.subcommand;
22833
22846
  if (!isValidRegistrySubcommand(subcommand)) {
22834
22847
  process.stdout.write(`${formatRegistryUsage()}
@@ -22876,12 +22889,12 @@ async function handleVerifyCommand(args) {
22876
22889
  async function handleDoctorCommand(args) {
22877
22890
  const exitCode = await doctorCommand({ fix: args.options.fix });
22878
22891
  if (args.options.deep) {
22879
- const { runDeepDiagnostics: runDeepDiagnostics2, formatDeepDiagnostics: formatDeepDiagnostics2 } = await import("./doctor-deep-IWQUV5IH.js");
22892
+ const { runDeepDiagnostics: runDeepDiagnostics2, formatDeepDiagnostics: formatDeepDiagnostics2 } = await import("./doctor-deep-MIQ5QYUL.js");
22880
22893
  const diag = runDeepDiagnostics2();
22881
22894
  process.stdout.write(formatDeepDiagnostics2(diag) + "\n");
22882
22895
  }
22883
22896
  if (args.options.live) {
22884
- const { runLiveReadiness, formatLiveReadiness } = await import("./doctor-live-MJSBAH5J.js");
22897
+ const { runLiveReadiness, formatLiveReadiness } = await import("./doctor-live-IAERE7DO.js");
22885
22898
  const report = await runLiveReadiness();
22886
22899
  process.stdout.write(formatLiveReadiness(report) + "\n");
22887
22900
  if (report.some((r) => r.levels.serves.status === "failed")) {
@@ -22934,7 +22947,7 @@ async function runInitPortableFlow(args) {
22934
22947
  return cliExit(result.success ? EXIT_CODES.SUCCESS : EXIT_CODES.SERVER_START_FAILED);
22935
22948
  }
22936
22949
  async function runInitOpencodeFlow(args) {
22937
- const { runInitOpencode } = await import("./init-opencode-TCP3OSFK.js");
22950
+ const { runInitOpencode } = await import("./init-opencode-CM2HL2PI.js");
22938
22951
  const opencodePath = args.options.opencode;
22939
22952
  if (opencodePath === void 0 || opencodePath === "") {
22940
22953
  process.stderr.write("Error: --opencode requires a path argument.\n");
@@ -22960,7 +22973,7 @@ async function runInitOpencodeFlow(args) {
22960
22973
  return cliExit(EXIT_CODES.SUCCESS);
22961
22974
  }
22962
22975
  async function renderOpencodeValidate(opencodePath) {
22963
- const { runOpencodeValidate } = await import("./init-opencode-TCP3OSFK.js");
22976
+ const { runOpencodeValidate } = await import("./init-opencode-CM2HL2PI.js");
22964
22977
  const result = await runOpencodeValidate(opencodePath);
22965
22978
  if (!result.ok) {
22966
22979
  process.stderr.write(`init --opencode --validate: ${result.reason ?? "failed"}
@@ -22999,7 +23012,7 @@ async function handleSetupCommandAsync(args) {
22999
23012
  return cliExitFromStatus(exitCode);
23000
23013
  }
23001
23014
  async function runCustomApiSetup(args) {
23002
- const { configureCustomApi } = await import("./setup-custom-api-TKMWDJJW.js");
23015
+ const { configureCustomApi } = await import("./setup-custom-api-OZ3QCQTJ.js");
23003
23016
  const baseUrl = args.options.customApi;
23004
23017
  if (baseUrl === void 0) return EXIT_CODES.SERVER_START_FAILED;
23005
23018
  const input = {