nexus-agents 8.15.3 → 8.17.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 (132) hide show
  1. package/dist/{ast-rule-runner-T3REZDT7.js → ast-rule-runner-AJAWZQNS.js} +3 -3
  2. package/dist/{child-mcp-config-CLACXGLL.js → child-mcp-config-JQCVNB3Y.js} +2 -2
  3. package/dist/{chunk-EVBYS5PY.js → chunk-2LQAHGNZ.js} +7 -7
  4. package/dist/chunk-3F7PLDBK.js +7 -0
  5. package/dist/{chunk-JMKRLWED.js → chunk-46V3G76B.js} +4 -4
  6. package/dist/{chunk-DG2AWTET.js → chunk-5OTOOVOF.js} +4 -4
  7. package/dist/{chunk-CYRPFUM5.js → chunk-6ZU3FUAX.js} +2 -2
  8. package/dist/{chunk-EH7BVUH5.js → chunk-A62DB47B.js} +8 -8
  9. package/dist/{chunk-YJQMBTRO.js → chunk-CQK5SIEX.js} +3 -3
  10. package/dist/{chunk-Y47JLN3E.js → chunk-D7WQNTAK.js} +2 -2
  11. package/dist/{chunk-TDYSYKVH.js → chunk-DBGIP6GK.js} +2 -2
  12. package/dist/{chunk-4AAIUCZF.js → chunk-ETMIOP3R.js} +2 -2
  13. package/dist/{chunk-UJBQAWAN.js → chunk-FAKB6EZV.js} +3 -3
  14. package/dist/{chunk-JJEMPUTM.js → chunk-GWQE5MBQ.js} +2 -2
  15. package/dist/{chunk-5X67Q3D2.js → chunk-I4EHDJTI.js} +2 -2
  16. package/dist/chunk-I4EHDJTI.js.map +1 -0
  17. package/dist/{chunk-UZPSVN36.js → chunk-IJH2U2QL.js} +2 -2
  18. package/dist/{chunk-XS6C3WYY.js → chunk-IUB4FTTF.js} +87 -48
  19. package/dist/chunk-IUB4FTTF.js.map +1 -0
  20. package/dist/{chunk-YIKZVQ2G.js → chunk-JEOQY42Z.js} +5 -5
  21. package/dist/{chunk-2E36UWL7.js → chunk-JYMFL4M6.js} +2 -2
  22. package/dist/{chunk-MBXLGNKF.js → chunk-KJFX7JUP.js} +33 -12
  23. package/dist/chunk-KJFX7JUP.js.map +1 -0
  24. package/dist/{chunk-ZZ57L2XX.js → chunk-KQRF4ZHX.js} +2 -2
  25. package/dist/{chunk-4X6OQY7X.js → chunk-KUKQ7UHD.js} +4 -4
  26. package/dist/{chunk-BOKIPN5F.js → chunk-LMJ7BKIL.js} +2 -2
  27. package/dist/{chunk-LAQI75I6.js → chunk-NBXYA5O6.js} +3 -3
  28. package/dist/{chunk-LAQI75I6.js.map → chunk-NBXYA5O6.js.map} +1 -1
  29. package/dist/{chunk-FIRMC57S.js → chunk-P7W44HAA.js} +9 -6
  30. package/dist/chunk-P7W44HAA.js.map +1 -0
  31. package/dist/{chunk-SPWGAWE7.js → chunk-PBVNGI67.js} +2 -2
  32. package/dist/{chunk-LG6226RT.js → chunk-QBU2RG7U.js} +2 -2
  33. package/dist/{chunk-U2MECKMJ.js → chunk-QR5EPVCR.js} +7 -7
  34. package/dist/{chunk-PBVKU72T.js → chunk-R3QNEXOU.js} +2 -2
  35. package/dist/{chunk-MM6NZTDW.js → chunk-R7V4C5UL.js} +2 -2
  36. package/dist/{chunk-M4PYLLYN.js → chunk-RMLJAYL5.js} +12 -7
  37. package/dist/chunk-RMLJAYL5.js.map +1 -0
  38. package/dist/{chunk-I32D4FOY.js → chunk-XUVAMPFK.js} +4 -4
  39. package/dist/{chunk-UJHNK2D6.js → chunk-Y37X7HI4.js} +9 -9
  40. package/dist/{chunk-55WGNJRG.js → chunk-ZB7XPHFZ.js} +2 -2
  41. package/dist/{chunk-XDDOPQEP.js → chunk-ZR66UIDX.js} +3 -3
  42. package/dist/{chunk-5QOJAEGM.js → chunk-ZXLF3NDV.js} +2 -2
  43. package/dist/{cli-circuit-breaker-PLGPPDBH.js → cli-circuit-breaker-2LQZLFVP.js} +3 -3
  44. package/dist/cli.js +43 -43
  45. package/dist/{composite-router-HLAZHG3C.js → composite-router-XNVULYDV.js} +2 -2
  46. package/dist/{consensus-vote-5FG7KZGD.js → consensus-vote-6I65V7LH.js} +17 -17
  47. package/dist/{context-retriever-WR3WXM53.js → context-retriever-GWAJG6XT.js} +8 -8
  48. package/dist/{doctor-deep-VN6F7IRM.js → doctor-deep-ZATGXGNC.js} +3 -3
  49. package/dist/{doctor-live-76EBRB57.js → doctor-live-L264NFJO.js} +9 -9
  50. package/dist/{expert-bridge-Z5AB5X5H.js → expert-bridge-KCQ457YZ.js} +4 -4
  51. package/dist/{factory-4GAB7J3C.js → factory-FFKHIV6Q.js} +5 -5
  52. package/dist/{factory-7DHP2SB5.js → factory-S2SVFA6W.js} +9 -9
  53. package/dist/{improvement-review-55245GZ7.js → improvement-review-CQDVHG2G.js} +6 -6
  54. package/dist/index.d.ts +16 -0
  55. package/dist/index.js +32 -32
  56. package/dist/{init-opencode-EZIST672.js → init-opencode-CDW4DAWF.js} +6 -6
  57. package/dist/issue-triage-IPFBFVDI.js +17 -0
  58. package/dist/{pr-reviewer-helpers-3NMGM46D.js → pr-reviewer-helpers-3IJPM7I7.js} +4 -4
  59. package/dist/{registry-command-ZPQX324A.js → registry-command-4Y7RJH47.js} +2 -2
  60. package/dist/{repo-security-plan-JYXBWJ5K.js → repo-security-plan-XZ6YBLUE.js} +3 -3
  61. package/dist/{research-helpers-synthesize-EZPG6ZGS.js → research-helpers-synthesize-OKCOMCE2.js} +4 -4
  62. package/dist/{routing-memory-S537TMB4.js → routing-memory-QUA5ORUA.js} +2 -2
  63. package/dist/{session-memory-UBBYMYO4.js → session-memory-XKHKWRP3.js} +3 -3
  64. package/dist/{setup-config-LFHGW5O7.js → setup-config-NMVR2OBN.js} +3 -3
  65. package/dist/{setup-custom-api-KS3WSTFD.js → setup-custom-api-VV3FT66F.js} +4 -4
  66. package/dist/setup-data-dir-KGLXMDPR.js +29 -0
  67. package/dist/{tool-memory-LSIG7GD4.js → tool-memory-MCIIYDQR.js} +5 -5
  68. package/dist/{unified-registry-63264J7Q.js → unified-registry-LPSJ2KMV.js} +10 -10
  69. package/dist/{weather-report-3B7CQC3N.js → weather-report-KHFJ756C.js} +2 -2
  70. package/package.json +1 -1
  71. package/dist/chunk-5X67Q3D2.js.map +0 -1
  72. package/dist/chunk-FIRMC57S.js.map +0 -1
  73. package/dist/chunk-M4PYLLYN.js.map +0 -1
  74. package/dist/chunk-MBXLGNKF.js.map +0 -1
  75. package/dist/chunk-XS6C3WYY.js.map +0 -1
  76. package/dist/chunk-ZLL3NWCL.js +0 -7
  77. package/dist/issue-triage-HDNDWDPO.js +0 -17
  78. package/dist/setup-data-dir-QPSFVKUL.js +0 -29
  79. /package/dist/{ast-rule-runner-T3REZDT7.js.map → ast-rule-runner-AJAWZQNS.js.map} +0 -0
  80. /package/dist/{child-mcp-config-CLACXGLL.js.map → child-mcp-config-JQCVNB3Y.js.map} +0 -0
  81. /package/dist/{chunk-EVBYS5PY.js.map → chunk-2LQAHGNZ.js.map} +0 -0
  82. /package/dist/{chunk-ZLL3NWCL.js.map → chunk-3F7PLDBK.js.map} +0 -0
  83. /package/dist/{chunk-JMKRLWED.js.map → chunk-46V3G76B.js.map} +0 -0
  84. /package/dist/{chunk-DG2AWTET.js.map → chunk-5OTOOVOF.js.map} +0 -0
  85. /package/dist/{chunk-CYRPFUM5.js.map → chunk-6ZU3FUAX.js.map} +0 -0
  86. /package/dist/{chunk-EH7BVUH5.js.map → chunk-A62DB47B.js.map} +0 -0
  87. /package/dist/{chunk-YJQMBTRO.js.map → chunk-CQK5SIEX.js.map} +0 -0
  88. /package/dist/{chunk-Y47JLN3E.js.map → chunk-D7WQNTAK.js.map} +0 -0
  89. /package/dist/{chunk-TDYSYKVH.js.map → chunk-DBGIP6GK.js.map} +0 -0
  90. /package/dist/{chunk-4AAIUCZF.js.map → chunk-ETMIOP3R.js.map} +0 -0
  91. /package/dist/{chunk-UJBQAWAN.js.map → chunk-FAKB6EZV.js.map} +0 -0
  92. /package/dist/{chunk-JJEMPUTM.js.map → chunk-GWQE5MBQ.js.map} +0 -0
  93. /package/dist/{chunk-UZPSVN36.js.map → chunk-IJH2U2QL.js.map} +0 -0
  94. /package/dist/{chunk-YIKZVQ2G.js.map → chunk-JEOQY42Z.js.map} +0 -0
  95. /package/dist/{chunk-2E36UWL7.js.map → chunk-JYMFL4M6.js.map} +0 -0
  96. /package/dist/{chunk-ZZ57L2XX.js.map → chunk-KQRF4ZHX.js.map} +0 -0
  97. /package/dist/{chunk-4X6OQY7X.js.map → chunk-KUKQ7UHD.js.map} +0 -0
  98. /package/dist/{chunk-BOKIPN5F.js.map → chunk-LMJ7BKIL.js.map} +0 -0
  99. /package/dist/{chunk-SPWGAWE7.js.map → chunk-PBVNGI67.js.map} +0 -0
  100. /package/dist/{chunk-LG6226RT.js.map → chunk-QBU2RG7U.js.map} +0 -0
  101. /package/dist/{chunk-U2MECKMJ.js.map → chunk-QR5EPVCR.js.map} +0 -0
  102. /package/dist/{chunk-PBVKU72T.js.map → chunk-R3QNEXOU.js.map} +0 -0
  103. /package/dist/{chunk-MM6NZTDW.js.map → chunk-R7V4C5UL.js.map} +0 -0
  104. /package/dist/{chunk-I32D4FOY.js.map → chunk-XUVAMPFK.js.map} +0 -0
  105. /package/dist/{chunk-UJHNK2D6.js.map → chunk-Y37X7HI4.js.map} +0 -0
  106. /package/dist/{chunk-55WGNJRG.js.map → chunk-ZB7XPHFZ.js.map} +0 -0
  107. /package/dist/{chunk-XDDOPQEP.js.map → chunk-ZR66UIDX.js.map} +0 -0
  108. /package/dist/{chunk-5QOJAEGM.js.map → chunk-ZXLF3NDV.js.map} +0 -0
  109. /package/dist/{cli-circuit-breaker-PLGPPDBH.js.map → cli-circuit-breaker-2LQZLFVP.js.map} +0 -0
  110. /package/dist/{composite-router-HLAZHG3C.js.map → composite-router-XNVULYDV.js.map} +0 -0
  111. /package/dist/{consensus-vote-5FG7KZGD.js.map → consensus-vote-6I65V7LH.js.map} +0 -0
  112. /package/dist/{context-retriever-WR3WXM53.js.map → context-retriever-GWAJG6XT.js.map} +0 -0
  113. /package/dist/{doctor-deep-VN6F7IRM.js.map → doctor-deep-ZATGXGNC.js.map} +0 -0
  114. /package/dist/{doctor-live-76EBRB57.js.map → doctor-live-L264NFJO.js.map} +0 -0
  115. /package/dist/{expert-bridge-Z5AB5X5H.js.map → expert-bridge-KCQ457YZ.js.map} +0 -0
  116. /package/dist/{factory-4GAB7J3C.js.map → factory-FFKHIV6Q.js.map} +0 -0
  117. /package/dist/{factory-7DHP2SB5.js.map → factory-S2SVFA6W.js.map} +0 -0
  118. /package/dist/{improvement-review-55245GZ7.js.map → improvement-review-CQDVHG2G.js.map} +0 -0
  119. /package/dist/{init-opencode-EZIST672.js.map → init-opencode-CDW4DAWF.js.map} +0 -0
  120. /package/dist/{issue-triage-HDNDWDPO.js.map → issue-triage-IPFBFVDI.js.map} +0 -0
  121. /package/dist/{pr-reviewer-helpers-3NMGM46D.js.map → pr-reviewer-helpers-3IJPM7I7.js.map} +0 -0
  122. /package/dist/{registry-command-ZPQX324A.js.map → registry-command-4Y7RJH47.js.map} +0 -0
  123. /package/dist/{repo-security-plan-JYXBWJ5K.js.map → repo-security-plan-XZ6YBLUE.js.map} +0 -0
  124. /package/dist/{research-helpers-synthesize-EZPG6ZGS.js.map → research-helpers-synthesize-OKCOMCE2.js.map} +0 -0
  125. /package/dist/{routing-memory-S537TMB4.js.map → routing-memory-QUA5ORUA.js.map} +0 -0
  126. /package/dist/{session-memory-UBBYMYO4.js.map → session-memory-XKHKWRP3.js.map} +0 -0
  127. /package/dist/{setup-config-LFHGW5O7.js.map → setup-config-NMVR2OBN.js.map} +0 -0
  128. /package/dist/{setup-custom-api-KS3WSTFD.js.map → setup-custom-api-VV3FT66F.js.map} +0 -0
  129. /package/dist/{setup-data-dir-QPSFVKUL.js.map → setup-data-dir-KGLXMDPR.js.map} +0 -0
  130. /package/dist/{tool-memory-LSIG7GD4.js.map → tool-memory-MCIIYDQR.js.map} +0 -0
  131. /package/dist/{unified-registry-63264J7Q.js.map → unified-registry-LPSJ2KMV.js.map} +0 -0
  132. /package/dist/{weather-report-3B7CQC3N.js.map → weather-report-KHFJ756C.js.map} +0 -0
@@ -9,8 +9,8 @@ import {
9
9
  getBuiltInAstRulesPath,
10
10
  loadRules,
11
11
  runAstQaRules
12
- } from "./chunk-5QOJAEGM.js";
13
- import "./chunk-LAQI75I6.js";
12
+ } from "./chunk-ZXLF3NDV.js";
13
+ import "./chunk-NBXYA5O6.js";
14
14
  import "./chunk-7WJGV5DN.js";
15
15
  import "./chunk-J7QCZRVK.js";
16
16
  import "./chunk-ZPWHCABL.js";
@@ -26,4 +26,4 @@ export {
26
26
  loadRules,
27
27
  runAstQaRules
28
28
  };
29
- //# sourceMappingURL=ast-rule-runner-T3REZDT7.js.map
29
+ //# sourceMappingURL=ast-rule-runner-AJAWZQNS.js.map
@@ -3,7 +3,7 @@ import {
3
3
  } from "./chunk-DKHBIJO4.js";
4
4
  import {
5
5
  createLogger
6
- } from "./chunk-LAQI75I6.js";
6
+ } from "./chunk-NBXYA5O6.js";
7
7
  import "./chunk-7WJGV5DN.js";
8
8
  import "./chunk-J7QCZRVK.js";
9
9
  import "./chunk-ZPWHCABL.js";
@@ -62,4 +62,4 @@ export {
62
62
  generateMcpConfig,
63
63
  getDefaultAllowedTools
64
64
  };
65
- //# sourceMappingURL=child-mcp-config-CLACXGLL.js.map
65
+ //# sourceMappingURL=child-mcp-config-JQCVNB3Y.js.map
@@ -1,11 +1,11 @@
1
1
  import {
2
2
  resolveCliSlot
3
- } from "./chunk-UZPSVN36.js";
3
+ } from "./chunk-IJH2U2QL.js";
4
4
  import {
5
5
  createLogger,
6
6
  getTimeProvider,
7
7
  isRateLimitText
8
- } from "./chunk-LAQI75I6.js";
8
+ } from "./chunk-NBXYA5O6.js";
9
9
 
10
10
  // src/pipeline/expert-bridge.ts
11
11
  function resolveCliFromModelString(model) {
@@ -21,7 +21,7 @@ async function getMcpConfigPath() {
21
21
  if (cachedMcpConfigPath !== null) return cachedMcpConfigPath;
22
22
  mcpConfigInitPromise ??= (async () => {
23
23
  try {
24
- const { generateMcpConfig } = await import("./child-mcp-config-CLACXGLL.js");
24
+ const { generateMcpConfig } = await import("./child-mcp-config-JQCVNB3Y.js");
25
25
  const config = await generateMcpConfig();
26
26
  cachedMcpConfigPath = config.configPath;
27
27
  cachedMcpConfigCleanup = config.cleanup;
@@ -93,8 +93,8 @@ var routerInitPromise = null;
93
93
  async function getRouter() {
94
94
  if (cachedRouter !== null) return cachedRouter;
95
95
  routerInitPromise ??= (async () => {
96
- const { createAllAdapters } = await import("./factory-7DHP2SB5.js");
97
- const { createCompositeRouter } = await import("./composite-router-HLAZHG3C.js");
96
+ const { createAllAdapters } = await import("./factory-S2SVFA6W.js");
97
+ const { createCompositeRouter } = await import("./composite-router-XNVULYDV.js");
98
98
  const adapters = createAllAdapters();
99
99
  if (adapters.size === 0) {
100
100
  routerInitPromise = null;
@@ -102,7 +102,7 @@ async function getRouter() {
102
102
  }
103
103
  cachedRouter = adaptCompositeRouter(createCompositeRouter(adapters));
104
104
  try {
105
- const { createCliCircuitBreakerIntegration } = await import("./cli-circuit-breaker-PLGPPDBH.js");
105
+ const { createCliCircuitBreakerIntegration } = await import("./cli-circuit-breaker-2LQZLFVP.js");
106
106
  cachedCircuitBreaker = createCliCircuitBreakerIntegration([...adapters.values()]);
107
107
  } catch (error) {
108
108
  const msg = error instanceof Error ? error.message : String(error);
@@ -213,4 +213,4 @@ export {
213
213
  tokenSplitFromUsage,
214
214
  executeExpert
215
215
  };
216
- //# sourceMappingURL=chunk-EVBYS5PY.js.map
216
+ //# sourceMappingURL=chunk-2LQAHGNZ.js.map
@@ -0,0 +1,7 @@
1
+ // src/version.ts
2
+ var VERSION = true ? "8.17.0" : "dev";
3
+
4
+ export {
5
+ VERSION
6
+ };
7
+ //# sourceMappingURL=chunk-3F7PLDBK.js.map
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  createAutoAdapter
3
- } from "./chunk-EH7BVUH5.js";
3
+ } from "./chunk-A62DB47B.js";
4
4
  import {
5
5
  getDefaultCliCircuitBreakerRegistry,
6
6
  mapModelErrorToCategory
7
- } from "./chunk-CYRPFUM5.js";
7
+ } from "./chunk-6ZU3FUAX.js";
8
8
  import {
9
9
  CLI_NAMES,
10
10
  CircularBuffer,
@@ -24,7 +24,7 @@ import {
24
24
  recordRateLimitEvent,
25
25
  resolveModelIdentitySync,
26
26
  toRateLimitError
27
- } from "./chunk-LAQI75I6.js";
27
+ } from "./chunk-NBXYA5O6.js";
28
28
 
29
29
  // src/config/model-equivalence.ts
30
30
  function canonicalModelKey(modelId) {
@@ -904,4 +904,4 @@ export {
904
904
  getGlobalRegistry,
905
905
  resetGlobalRegistry
906
906
  };
907
- //# sourceMappingURL=chunk-JMKRLWED.js.map
907
+ //# sourceMappingURL=chunk-46V3G76B.js.map
@@ -5,7 +5,7 @@ import {
5
5
  } from "./chunk-6T3EPABN.js";
6
6
  import {
7
7
  SessionMemory
8
- } from "./chunk-BOKIPN5F.js";
8
+ } from "./chunk-LMJ7BKIL.js";
9
9
  import {
10
10
  StatsOnlyAdapter,
11
11
  ensureSharedMemoryRegistry
@@ -15,7 +15,7 @@ import {
15
15
  } from "./chunk-YYJFZ7TO.js";
16
16
  import {
17
17
  generateId
18
- } from "./chunk-ZZ57L2XX.js";
18
+ } from "./chunk-KQRF4ZHX.js";
19
19
  import {
20
20
  ErrorCode,
21
21
  NexusError,
@@ -29,7 +29,7 @@ import {
29
29
  ok,
30
30
  openSqliteDatabase,
31
31
  setSharedMobiMemDbPathResolver
32
- } from "./chunk-LAQI75I6.js";
32
+ } from "./chunk-NBXYA5O6.js";
33
33
  import {
34
34
  nexusDataPath
35
35
  } from "./chunk-J7QCZRVK.js";
@@ -5661,4 +5661,4 @@ export {
5661
5661
  reinitializeMemoryBackends,
5662
5662
  ToolMemoryManager
5663
5663
  };
5664
- //# sourceMappingURL=chunk-DG2AWTET.js.map
5664
+ //# sourceMappingURL=chunk-5OTOOVOF.js.map
@@ -8,7 +8,7 @@ import {
8
8
  getTimeProvider,
9
9
  isRateLimitText,
10
10
  ok
11
- } from "./chunk-LAQI75I6.js";
11
+ } from "./chunk-NBXYA5O6.js";
12
12
 
13
13
  // src/cli-adapters/circuit-breaker-types.ts
14
14
  var CircuitErrorCode = {
@@ -541,4 +541,4 @@ export {
541
541
  CliCircuitBreakerIntegration,
542
542
  createCliCircuitBreakerIntegration
543
543
  };
544
- //# sourceMappingURL=chunk-CYRPFUM5.js.map
544
+ //# sourceMappingURL=chunk-6ZU3FUAX.js.map
@@ -5,34 +5,34 @@ import {
5
5
  planOptionalParams,
6
6
  requireApiKey,
7
7
  validateApiKeyPresence
8
- } from "./chunk-MM6NZTDW.js";
8
+ } from "./chunk-R7V4C5UL.js";
9
9
  import {
10
10
  CUSTOM_API_DEFAULT_MODEL
11
- } from "./chunk-PBVKU72T.js";
11
+ } from "./chunk-R3QNEXOU.js";
12
12
  import {
13
13
  CUSTOM_API_BASE_URL_ENV,
14
14
  PROVIDER_ENV_KEYS,
15
15
  assertCustomApiHostResolvesPublic,
16
16
  validateCustomApiBaseUrl
17
- } from "./chunk-SPWGAWE7.js";
17
+ } from "./chunk-PBVNGI67.js";
18
18
  import {
19
19
  nexusMkdtempSync
20
20
  } from "./chunk-DKHBIJO4.js";
21
21
  import {
22
22
  getAvailabilityCache
23
- } from "./chunk-UZPSVN36.js";
23
+ } from "./chunk-IJH2U2QL.js";
24
24
  import {
25
25
  extractSystemPrompt
26
26
  } from "./chunk-QZUG667L.js";
27
27
  import {
28
28
  generateHyphenId
29
- } from "./chunk-ZZ57L2XX.js";
29
+ } from "./chunk-KQRF4ZHX.js";
30
30
  import {
31
31
  CliCircuitBreaker,
32
32
  DEFAULT_CIRCUIT_BREAKER_CONFIG,
33
33
  getCliCircuitBreakerSnapshot,
34
34
  getDefaultCliCircuitBreakerRegistry
35
- } from "./chunk-CYRPFUM5.js";
35
+ } from "./chunk-6ZU3FUAX.js";
36
36
  import {
37
37
  CLI_SUBPROCESS_TIMEOUTS,
38
38
  CLI_TIMEOUTS,
@@ -72,7 +72,7 @@ import {
72
72
  resolveCliAlias,
73
73
  resolveRetryAfterMs,
74
74
  retryAfterMsFromContext
75
- } from "./chunk-LAQI75I6.js";
75
+ } from "./chunk-NBXYA5O6.js";
76
76
 
77
77
  // src/cli-adapters/cli-to-model-adapter.ts
78
78
  var CliToModelAdapter = class {
@@ -4946,4 +4946,4 @@ export {
4946
4946
  SdkAdapter,
4947
4947
  createAutoAdapter
4948
4948
  };
4949
- //# sourceMappingURL=chunk-EH7BVUH5.js.map
4949
+ //# sourceMappingURL=chunk-A62DB47B.js.map
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  loadPapersRegistry
3
- } from "./chunk-JJEMPUTM.js";
3
+ } from "./chunk-GWQE5MBQ.js";
4
4
  import {
5
5
  getErrorMessage
6
- } from "./chunk-LAQI75I6.js";
6
+ } from "./chunk-NBXYA5O6.js";
7
7
 
8
8
  // src/cli/research-helpers-synthesize.ts
9
9
  import { z } from "zod";
@@ -886,4 +886,4 @@ export {
886
886
  AttributedInsightSchema,
887
887
  synthesizeResearch
888
888
  };
889
- //# sourceMappingURL=chunk-YJQMBTRO.js.map
889
+ //# sourceMappingURL=chunk-CQK5SIEX.js.map
@@ -3,7 +3,7 @@ import {
3
3
  createLogger,
4
4
  getDefaultRegistry,
5
5
  roundToMicroUsd
6
- } from "./chunk-LAQI75I6.js";
6
+ } from "./chunk-NBXYA5O6.js";
7
7
  import {
8
8
  getNexusDataDir
9
9
  } from "./chunk-J7QCZRVK.js";
@@ -196,4 +196,4 @@ export {
196
196
  loadUsageEvents,
197
197
  rollupByModel
198
198
  };
199
- //# sourceMappingURL=chunk-Y47JLN3E.js.map
199
+ //# sourceMappingURL=chunk-D7WQNTAK.js.map
@@ -4,7 +4,7 @@ import {
4
4
  import {
5
5
  createLogger,
6
6
  getTimeProvider
7
- } from "./chunk-LAQI75I6.js";
7
+ } from "./chunk-NBXYA5O6.js";
8
8
 
9
9
  // src/mcp/tools/scanner-registry-fetcher.ts
10
10
  import { z } from "zod";
@@ -721,4 +721,4 @@ export {
721
721
  generateSecurityPlan,
722
722
  buildPlanFromAnalysis
723
723
  };
724
- //# sourceMappingURL=chunk-TDYSYKVH.js.map
724
+ //# sourceMappingURL=chunk-DBGIP6GK.js.map
@@ -4,7 +4,7 @@ import {
4
4
  err,
5
5
  getErrorMessage,
6
6
  ok
7
- } from "./chunk-LAQI75I6.js";
7
+ } from "./chunk-NBXYA5O6.js";
8
8
 
9
9
  // src/scm/types.ts
10
10
  var ScmError = class extends Error {
@@ -263,4 +263,4 @@ export {
263
263
  ScmError,
264
264
  GitHubProvider
265
265
  };
266
- //# sourceMappingURL=chunk-4AAIUCZF.js.map
266
+ //# sourceMappingURL=chunk-ETMIOP3R.js.map
@@ -10,13 +10,13 @@ import {
10
10
  import {
11
11
  assessReputation,
12
12
  sanitizeInput
13
- } from "./chunk-M4PYLLYN.js";
13
+ } from "./chunk-RMLJAYL5.js";
14
14
  import {
15
15
  createLogger,
16
16
  err,
17
17
  getTimeProvider,
18
18
  ok
19
- } from "./chunk-LAQI75I6.js";
19
+ } from "./chunk-NBXYA5O6.js";
20
20
 
21
21
  // src/dogfooding/pr-reviewer-helpers.ts
22
22
  import { randomUUID } from "node:crypto";
@@ -305,4 +305,4 @@ export {
305
305
  createFailedReview,
306
306
  reviewPostingBlock
307
307
  };
308
- //# sourceMappingURL=chunk-UJBQAWAN.js.map
308
+ //# sourceMappingURL=chunk-FAKB6EZV.js.map
@@ -6,7 +6,7 @@ import {
6
6
  getErrorMessage,
7
7
  ok,
8
8
  parseBoolEnv
9
- } from "./chunk-LAQI75I6.js";
9
+ } from "./chunk-NBXYA5O6.js";
10
10
  import {
11
11
  findRepoRoot,
12
12
  getActiveWorkspaceRoot,
@@ -223,4 +223,4 @@ export {
223
223
  loadPapersRegistry,
224
224
  savePapersRegistry
225
225
  };
226
- //# sourceMappingURL=chunk-JJEMPUTM.js.map
226
+ //# sourceMappingURL=chunk-GWQE5MBQ.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  getTimeProvider
3
- } from "./chunk-LAQI75I6.js";
3
+ } from "./chunk-NBXYA5O6.js";
4
4
 
5
5
  // src/security/audit-trail.ts
6
6
  var MAX_EVENTS = 1e4;
@@ -205,4 +205,4 @@ export {
205
205
  createGraphAuditBridge,
206
206
  createAuditTrail
207
207
  };
208
- //# sourceMappingURL=chunk-5X67Q3D2.js.map
208
+ //# sourceMappingURL=chunk-I4EHDJTI.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/security/audit-trail.ts"],"sourcesContent":["/**\n * nexus-agents/security - Audit Trail\n *\n * Machine-readable JSON audit events for security pipeline decisions.\n * Every trust classification, policy gate decision, corroboration check,\n * and reputation assessment is recorded as a structured event.\n *\n * Satisfies CLAUDE.md requirement: \"Every action on untrusted input must\n * log: trust tier, sources cited, policy gate decision, stripped content.\"\n *\n * @module security/audit-trail\n * (Source: Issue #832 — Security audit trail)\n */\n\nimport { getTimeProvider } from '../core/index.js';\nimport type { TrustTier } from './trust-types.js';\nimport type { AgentActionType } from './action-schema.js';\n\n// ============================================================================\n// Types\n// ============================================================================\n\n/** Maximum stored events before oldest are evicted. */\nconst MAX_EVENTS = 10_000;\n\n/**\n * Discriminated union of audit event types.\n * Each event captures a single security pipeline decision.\n */\nexport type AuditEvent =\n | TrustClassificationEvent\n | PolicyGateEvent\n | CorroborationEvent\n | ReputationEvent\n | SanitizationEvent\n | GraphExecutionAuditEvent\n | ClawGuardViolationEvent;\n\n/** Base fields shared by all audit events. */\ninterface AuditEventBase {\n readonly id: string;\n readonly timestamp: string;\n readonly component: string;\n}\n\n/** Trust classification decision. */\nexport interface TrustClassificationEvent extends AuditEventBase {\n readonly type: 'trust_classification';\n readonly username: string;\n readonly assignedTier: TrustTier;\n readonly userRole: string;\n /**\n * Present only when a maintainer allowlist was consulted (#4992). A\n * classification that consulted no list records nothing here rather than\n * `false` — \"not measured\" and \"measured false\" must stay distinguishable in\n * the audit record.\n */\n readonly isAllowlisted?: boolean;\n readonly wasDowngraded: boolean;\n readonly reason: string;\n}\n\n/** Policy gate evaluation result. */\nexport interface PolicyGateEvent extends AuditEventBase {\n readonly type: 'policy_gate';\n /**\n * The agent action evaluated, for the security policy-gate path\n * (security/policy-gate.ts). Optional because the PIPELINE policy path\n * (pipeline/policy-evaluator.ts → #3710) records stage-boundary policy\n * decisions that have no `AgentAction` — they carry {@link stageType} +\n * {@link mode} + {@link ruleIds} instead. Security emitters always set it.\n */\n readonly actionType?: AgentActionType;\n readonly allowed: boolean;\n readonly requiresApproval: boolean;\n readonly inputTrustTier: TrustTier;\n readonly violationRules: readonly string[];\n /**\n * Pipeline-policy fields (#3710). Carried for the dev-pipeline\n * consensus→execute seam so the DURABLE record can distinguish soak (`warn`)\n * from enforce (`block`) and which rules/stage fired — without these the\n * persisted event is useless to the tune/readiness loop. Absent for the\n * security policy-gate path.\n */\n /** Enforcement mode the decision was made under: `warn` (soak) or `block` (enforce). */\n readonly mode?: 'off' | 'warn' | 'block';\n /** IDs of the policy rules that fired (mirrors `violationRules` for the pipeline path). */\n readonly ruleIds?: readonly string[];\n /** Type of the stage the gate guarded (e.g. `execute`). */\n readonly stageType?: string;\n /**\n * #3727: discriminates a per-EVALUATION SUMMARY record (`'summary'` — emitted\n * once per pipeline policy evaluation INCLUDING clean ones, the DENOMINATOR for\n * the would-block rate) from a per-VIOLATION record (`'violation'` — the\n * existing #3710 per-violation records). Absent for the security policy-gate\n * path. Denominator = count(recordKind==='summary'); numerator = summaries with\n * `violationCount > 0`. Scope the #3710 count-parity assertion to `'violation'`.\n */\n readonly recordKind?: 'summary' | 'violation';\n /** #3727: number of violations in THIS evaluation (set on the summary record). */\n readonly violationCount?: number;\n}\n\n/** Corroboration validation result. */\nexport interface CorroborationEvent extends AuditEventBase {\n readonly type: 'corroboration';\n readonly actionType: AgentActionType;\n readonly satisfied: boolean;\n readonly sourceCount: number;\n readonly missingRequirements: readonly string[];\n}\n\n/** Reputation assessment result. */\nexport interface ReputationEvent extends AuditEventBase {\n readonly type: 'reputation';\n readonly username: string;\n readonly reputationScore: number;\n readonly isSuspicious: boolean;\n readonly effectiveTier: TrustTier;\n readonly signalCount: number;\n}\n\n/** Summary of a single element stripped during sanitization. */\nexport interface StrippedElementSummary {\n /** Truncated tag text (≤30 chars + '...' from the sanitizer). */\n readonly tag: string;\n /** Reason the element was removed (e.g. 'Trail of Bits injection vector'). */\n readonly reason: string;\n}\n\n/** Max stripped-element details retained per sanitization event. */\nexport const MAX_STRIPPED_ELEMENTS_PER_EVENT = 20;\n\n/** Input sanitization result. */\nexport interface SanitizationEvent extends AuditEventBase {\n readonly type: 'sanitization';\n readonly source: string;\n readonly wasModified: boolean;\n /** Whether input exceeded the configured limit. Absent on events that predate this field. */\n readonly truncated?: boolean;\n readonly strippedCount: number;\n readonly injectionFlagCount: number;\n /**\n * Per-element tag/reason details, truncated to at most\n * MAX_STRIPPED_ELEMENTS_PER_EVENT entries. Required by CLAUDE.md's\n * Untrusted Input Policy: \"Log stripped elements for audit trail.\"\n */\n readonly strippedElements: readonly StrippedElementSummary[];\n}\n\n/**\n * ClawGuard AUDIT-mode violation (#4097). Records a tool call that VIOLATED the\n * derived access policy but was ALLOWED to proceed because the policy is in\n * `audit` mode (log-and-allow). Persisting these is what lets the audit→enforce\n * graduation loop size the real violation rate from durable telemetry rather\n * than ephemeral logs.\n */\nexport interface ClawGuardViolationEvent extends AuditEventBase {\n readonly type: 'clawguard_violation';\n /** The tool whose call violated the policy. */\n readonly toolName: string;\n /** Human-readable warning from the access decision (may be truncated). */\n readonly warning: string;\n /** Source of the derived policy (`llm` / `fallback-keyword` / `bypass`). */\n readonly policySource: string;\n /** Policy mode under which the violation was allowed (e.g. `audit`). */\n readonly mode: string;\n /** Request ID of the offending tool call, for correlation. */\n readonly requestId: string;\n /**\n * Which rule produced the verdict (#5106) — `unbypassable:tool`,\n * `unbypassable:path`, `allowedTools`, `allowedTools:confirm_risky`.\n *\n * A first-class field rather than prose inside `warning`, because `warning`\n * is truncated at 500 chars and a long attacker-selectable `path` argument\n * pushes the rule off the end. A chain reader must be able to tell an\n * unbypassable denylist hit from an allowlist miss without parsing a string\n * that may have been cut mid-word.\n *\n * Absent for verdicts that carry no rule (an audit-mode allowlist\n * observation), which is why it is optional rather than defaulted — there is\n * no rule to name, and inventing one would misreport.\n */\n readonly matchedRule?: string;\n}\n\n/** Graph execution lifecycle event (Issue #839). */\nexport interface GraphExecutionAuditEvent extends AuditEventBase {\n readonly type: 'graph_execution';\n readonly graphEvent: string;\n readonly nodeId?: string;\n readonly stepNumber: number;\n readonly detail: string;\n}\n\n/**\n * Query filter for retrieving audit events.\n *\n * The post-mortem dimensions (#3197) — `actionType`, `actor`, `violationRule`\n * — NARROW to events that actually carry the field (events lacking it are\n * excluded), unlike `trustTier`'s legacy keep-non-applicable behavior. Only\n * dimensions backed by a real event field are offered: `resource` and\n * `policyName` from the original ask were dropped because no AuditEvent\n * records them (a filter with no backing field would be dead config); the\n * policy-rule intent is served by `violationRule` (PolicyGateEvent's\n * `violationRules`).\n */\nexport interface AuditQuery {\n readonly type?: AuditEvent['type'];\n readonly since?: string;\n readonly until?: string;\n readonly trustTier?: TrustTier;\n /** Match PolicyGate/Corroboration events by their `actionType`. */\n readonly actionType?: AgentActionType;\n /** Match Trust/Reputation events by `username` (the acting/assessed user). */\n readonly actor?: string;\n /** Match PolicyGate events whose `violationRules` include this rule name. */\n readonly violationRule?: string;\n readonly limit?: number;\n}\n\n// ============================================================================\n// AuditTrail\n// ============================================================================\n\n/**\n * Append-only audit trail for security pipeline decisions.\n * Events are bounded by MAX_EVENTS to prevent unbounded growth.\n */\n/**\n * Optional durable sink: receives every fully-formed event appended to the\n * trail, so security decisions can be mirrored to a persistent, hash-chained\n * store (see security/audit-bridge.ts). Default-off — when absent, the trail\n * behaves exactly as before (#3291).\n */\nexport type DurableAuditSink = (event: AuditEvent) => void;\n\nexport class AuditTrail {\n private events: AuditEvent[] = [];\n private nextId = 1;\n\n constructor(private readonly durableSink?: DurableAuditSink) {}\n\n /** Appends an event to the trail. Returns the assigned event ID. */\n append(event: Omit<AuditEvent, 'id' | 'timestamp'>): string {\n const id = `audit-${String(this.nextId++)}`;\n const fullEvent = {\n ...event,\n id,\n timestamp: getTimeProvider().nowIso(),\n } as AuditEvent;\n\n this.events.push(fullEvent);\n this.enforceLimit();\n\n // Mirror to the durable store when wired (#3291). Best-effort: a sink\n // failure must never break the in-memory security pipeline.\n if (this.durableSink !== undefined) {\n try {\n this.durableSink(fullEvent);\n } catch {\n // Sink implementations already swallow+log; this is belt-and-suspenders.\n }\n }\n\n return id;\n }\n\n /** Queries events matching the given filter. */\n query(filter: AuditQuery = {}): readonly AuditEvent[] {\n let results = this.events as readonly AuditEvent[];\n\n if (filter.type !== undefined) {\n results = results.filter((e) => e.type === filter.type);\n }\n\n if (filter.since !== undefined) {\n results = filterSince(results, filter.since);\n }\n\n if (filter.until !== undefined) {\n results = filterUntil(results, filter.until);\n }\n\n if (filter.trustTier !== undefined) {\n results = filterByTrustTier(results, filter.trustTier);\n }\n\n if (filter.actionType !== undefined) {\n results = filterByActionType(results, filter.actionType);\n }\n\n if (filter.actor !== undefined) {\n results = filterByActor(results, filter.actor);\n }\n\n if (filter.violationRule !== undefined) {\n results = filterByViolationRule(results, filter.violationRule);\n }\n\n const limit = filter.limit ?? results.length;\n return results.slice(-limit);\n }\n\n /** Returns the total number of events. */\n get size(): number {\n return this.events.length;\n }\n\n /** Clears all events. */\n clear(): void {\n this.events = [];\n }\n\n /** Enforces MAX_EVENTS bound. */\n private enforceLimit(): void {\n if (this.events.length > MAX_EVENTS) {\n this.events = this.events.slice(-MAX_EVENTS);\n }\n }\n}\n\n// ============================================================================\n// Filter Helpers\n// ============================================================================\n\nfunction filterSince(events: readonly AuditEvent[], since: string): readonly AuditEvent[] {\n const sinceTime = new Date(since).getTime();\n return events.filter((e) => new Date(e.timestamp).getTime() >= sinceTime);\n}\n\nfunction filterUntil(events: readonly AuditEvent[], until: string): readonly AuditEvent[] {\n const untilTime = new Date(until).getTime();\n return events.filter((e) => new Date(e.timestamp).getTime() <= untilTime);\n}\n\nfunction filterByTrustTier(events: readonly AuditEvent[], tier: TrustTier): readonly AuditEvent[] {\n return events.filter((e) => {\n if (e.type === 'trust_classification') return e.assignedTier === tier;\n if (e.type === 'policy_gate') return e.inputTrustTier === tier;\n if (e.type === 'reputation') return e.effectiveTier === tier;\n return true;\n });\n}\n\n/**\n * Narrow to events carrying the given `actionType` (#3197). Only PolicyGate and\n * Corroboration events have one; all others are excluded.\n */\nfunction filterByActionType(\n events: readonly AuditEvent[],\n actionType: AgentActionType\n): readonly AuditEvent[] {\n return events.filter(\n (e) => (e.type === 'policy_gate' || e.type === 'corroboration') && e.actionType === actionType\n );\n}\n\n/**\n * Narrow to events for the given actor (#3197), matched on `username`. Only\n * Trust-classification and Reputation events carry a username; others are\n * excluded so an actor filter never returns unrelated rows.\n */\nfunction filterByActor(events: readonly AuditEvent[], actor: string): readonly AuditEvent[] {\n return events.filter(\n (e) => (e.type === 'trust_classification' || e.type === 'reputation') && e.username === actor\n );\n}\n\n/**\n * Narrow to PolicyGate events whose `violationRules` include the given rule\n * name (#3197) — the security post-mortem \"who tripped rule X\" query.\n */\nfunction filterByViolationRule(events: readonly AuditEvent[], rule: string): readonly AuditEvent[] {\n return events.filter((e) => e.type === 'policy_gate' && e.violationRules.includes(rule));\n}\n\n// ============================================================================\n// Convenience Emitters\n// ============================================================================\n\n/**\n * Records a trust classification decision.\n */\nexport function emitTrustEvent(\n trail: AuditTrail,\n data: Omit<TrustClassificationEvent, 'id' | 'timestamp' | 'type' | 'component'>\n): string {\n return trail.append({\n type: 'trust_classification',\n component: 'trust-classifier',\n ...data,\n });\n}\n\n/**\n * Records a policy gate evaluation.\n */\nexport function emitPolicyEvent(\n trail: AuditTrail,\n data: Omit<PolicyGateEvent, 'id' | 'timestamp' | 'type' | 'component'>\n): string {\n return trail.append({\n type: 'policy_gate',\n component: 'policy-gate',\n ...data,\n });\n}\n\n/**\n * Records a PIPELINE-policy gate decision (#3710) — the dev-pipeline\n * consensus→execute seam. Distinct from {@link emitPolicyEvent} (the security\n * policy-gate path with an `AgentAction`): this carries `mode`/`ruleIds`/\n * `stageType` so the durable record distinguishes soak(warn) from enforce(block)\n * and is usable by the tune/readiness loop. ONE append per call.\n */\nexport function emitPipelinePolicyEvent(\n trail: AuditTrail,\n data: Omit<PolicyGateEvent, 'id' | 'timestamp' | 'type' | 'component' | 'actionType'>\n): string {\n return trail.append({\n type: 'policy_gate',\n component: 'pipeline-policy-evaluator',\n ...data,\n });\n}\n\n/** The pipeline-policy would-block rate over a window (#3727). */\nexport interface PolicyWouldBlockRate {\n /** Total pipeline-policy evaluations (the denominator — summary records). */\n readonly evaluations: number;\n /** Evaluations that had ≥1 violation (what enforce mode WOULD block). */\n readonly wouldBlock: number;\n /** `wouldBlock / evaluations`; 0 when there are no evaluations. */\n readonly rate: number;\n}\n\n/**\n * Compute the pipeline-policy would-block RATE from durable audit events (#3727)\n * — the read-side of the per-evaluation summary records, and the signal the\n * #3769-enforce soak-readiness gate needs. Denominator = per-evaluation SUMMARY\n * records (`recordKind === 'summary'`); numerator = summaries with\n * `violationCount > 0` (the would-block fraction, independent of warn/block mode).\n * Per-violation records (`recordKind === 'violation'`) are intentionally NOT\n * counted — counting them would double-count and break the denominator.\n */\nexport function computePolicyWouldBlockRate(events: readonly AuditEvent[]): PolicyWouldBlockRate {\n let evaluations = 0;\n let wouldBlock = 0;\n for (const e of events) {\n if (e.type !== 'policy_gate' || e.recordKind !== 'summary') continue;\n evaluations += 1;\n if ((e.violationCount ?? 0) > 0) wouldBlock += 1;\n }\n return { evaluations, wouldBlock, rate: evaluations > 0 ? wouldBlock / evaluations : 0 };\n}\n\n/**\n * Records a corroboration validation.\n */\nexport function emitCorroborationEvent(\n trail: AuditTrail,\n data: Omit<CorroborationEvent, 'id' | 'timestamp' | 'type' | 'component'>\n): string {\n return trail.append({\n type: 'corroboration',\n component: 'corroboration-validator',\n ...data,\n });\n}\n\n/**\n * Records a reputation assessment.\n */\nexport function emitReputationEvent(\n trail: AuditTrail,\n data: Omit<ReputationEvent, 'id' | 'timestamp' | 'type' | 'component'>\n): string {\n return trail.append({\n type: 'reputation',\n component: 'reputation-model',\n ...data,\n });\n}\n\n/**\n * Records an input sanitization result.\n */\nexport function emitSanitizationEvent(\n trail: AuditTrail,\n data: Omit<SanitizationEvent, 'id' | 'timestamp' | 'type' | 'component'>\n): string {\n return trail.append({\n type: 'sanitization',\n component: 'input-sanitizer',\n ...data,\n });\n}\n\n/**\n * Records a graph execution lifecycle event.\n */\nexport function emitGraphExecutionEvent(\n trail: AuditTrail,\n data: Omit<GraphExecutionAuditEvent, 'id' | 'timestamp' | 'type' | 'component'>\n): string {\n return trail.append({\n type: 'graph_execution',\n component: 'graph-executor',\n ...data,\n });\n}\n\n/**\n * Records a ClawGuard AUDIT-mode violation (#4097) — a policy-violating tool\n * call that was log-and-allowed because the policy is in `audit` mode. ONE\n * append per call; mirrors to the durable sink when the trail is wired.\n */\nexport function emitClawGuardViolation(\n trail: AuditTrail,\n data: Omit<ClawGuardViolationEvent, 'id' | 'timestamp' | 'type' | 'component'>\n): string {\n return trail.append({\n type: 'clawguard_violation',\n component: 'clawguard-audit',\n ...data,\n });\n}\n\n/**\n * Creates an onEvent callback that bridges graph events to the audit trail.\n * Pass the returned function as `onEvent` in GraphExecuteOptions.\n *\n * @example\n * const trail = createAuditTrail();\n * await executeGraph(graph, inputs, { onEvent: createGraphAuditBridge(trail) });\n */\nexport function createGraphAuditBridge(\n trail: AuditTrail\n): (event: { readonly type: string; readonly [key: string]: unknown }) => void {\n return (event) => {\n const nodeId = typeof event['nodeId'] === 'string' ? event['nodeId'] : undefined;\n const stepNumber = typeof event['stepNumber'] === 'number' ? event['stepNumber'] : 0;\n emitGraphExecutionEvent(trail, {\n graphEvent: event.type,\n ...(nodeId !== undefined ? { nodeId } : {}),\n stepNumber,\n detail: formatGraphEventDetail(event),\n });\n };\n}\n\n/** Formats a brief detail string from a graph event. */\nfunction formatGraphEventDetail(event: {\n readonly type: string;\n readonly [key: string]: unknown;\n}): string {\n switch (event.type) {\n case 'node_started':\n return `Node ${String(event['nodeId'])} starting`;\n case 'node_completed':\n return `Node ${String(event['nodeId'])} completed in ${String(event['durationMs'])}ms`;\n case 'node_error':\n return `Node ${String(event['nodeId'])} failed: ${String(event['error'])}`;\n case 'state_updated':\n return `State updated: ${String(event['updatedKeys'])}`;\n case 'step_completed':\n return `Step ${String(event['stepNumber'])}: ${String(event['nodesExecuted'])} nodes`;\n case 'execution_complete':\n return `Complete: ${String(event['totalSteps'])} steps, ${String(event['durationMs'])}ms`;\n default:\n return event.type;\n }\n}\n\n/**\n * Creates a new AuditTrail instance. Pass a {@link DurableAuditSink} (e.g. from\n * `createDurableAuditSink(auditLogger)`) to mirror appended security decisions\n * to a durable, hash-chained store (#3291). Default: in-memory only.\n */\nexport function createAuditTrail(durableSink?: DurableAuditSink): AuditTrail {\n return new AuditTrail(durableSink);\n}\n"],"mappings":"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","names":[]}
@@ -3,7 +3,7 @@ import {
3
3
  MODEL_IDS,
4
4
  getTimeProvider,
5
5
  resolveModelIdentitySync
6
- } from "./chunk-LAQI75I6.js";
6
+ } from "./chunk-NBXYA5O6.js";
7
7
 
8
8
  // src/config/model-availability.ts
9
9
  var DEFAULT_TTL_MS = 6e4;
@@ -150,4 +150,4 @@ export {
150
150
  resetAvailabilityCache,
151
151
  filterAvailableModels
152
152
  };
153
- //# sourceMappingURL=chunk-UZPSVN36.js.map
153
+ //# sourceMappingURL=chunk-IJH2U2QL.js.map