nexus-agents 3.13.4 → 3.14.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 (27) hide show
  1. package/dist/{chunk-4QJWK6DY.js → chunk-AV4X4YH3.js} +8 -3
  2. package/dist/{chunk-4QJWK6DY.js.map → chunk-AV4X4YH3.js.map} +1 -1
  3. package/dist/{chunk-IPHDQZR2.js → chunk-AYLYRBS6.js} +12 -8
  4. package/dist/{chunk-IPHDQZR2.js.map → chunk-AYLYRBS6.js.map} +1 -1
  5. package/dist/{chunk-GUDO6DBM.js → chunk-JTH44T6O.js} +235 -76
  6. package/dist/chunk-JTH44T6O.js.map +1 -0
  7. package/dist/{chunk-JOWMSVIM.js → chunk-MHLXBATW.js} +37 -173
  8. package/dist/chunk-MHLXBATW.js.map +1 -0
  9. package/dist/{chunk-XPXOP7AC.js → chunk-NF2LMA5A.js} +3 -3
  10. package/dist/{chunk-3ENIOANU.js → chunk-WZGXBPIY.js} +2 -2
  11. package/dist/cli.d.ts +1 -1
  12. package/dist/cli.js +77 -31
  13. package/dist/cli.js.map +1 -1
  14. package/dist/{consensus-vote-KO3YN346.js → consensus-vote-NFXP65ET.js} +3 -3
  15. package/dist/{consensus-vote-types-b-KD-0g_.d.ts → consensus-vote-types-DjPVrCIO.d.ts} +31 -1
  16. package/dist/{improvement-review-2IV2L7QI.js → improvement-review-AZHHCQ2Q.js} +3 -3
  17. package/dist/index.d.ts +10 -3
  18. package/dist/index.js +6 -6
  19. package/dist/{setup-command-XJHLFBD4.js → setup-command-NAXE7M4Q.js} +3 -3
  20. package/package.json +1 -1
  21. package/dist/chunk-GUDO6DBM.js.map +0 -1
  22. package/dist/chunk-JOWMSVIM.js.map +0 -1
  23. /package/dist/{chunk-XPXOP7AC.js.map → chunk-NF2LMA5A.js.map} +0 -0
  24. /package/dist/{chunk-3ENIOANU.js.map → chunk-WZGXBPIY.js.map} +0 -0
  25. /package/dist/{consensus-vote-KO3YN346.js.map → consensus-vote-NFXP65ET.js.map} +0 -0
  26. /package/dist/{improvement-review-2IV2L7QI.js.map → improvement-review-AZHHCQ2Q.js.map} +0 -0
  27. /package/dist/{setup-command-XJHLFBD4.js.map → setup-command-NAXE7M4Q.js.map} +0 -0
@@ -3,6 +3,7 @@ import {
3
3
  } from "./chunk-M7BBFYO6.js";
4
4
  import {
5
5
  CACHE_TIMEOUTS,
6
+ JsonlStore,
6
7
  MCP_TIMEOUTS,
7
8
  SecurityError,
8
9
  TIMEOUT_GUARD,
@@ -18,7 +19,8 @@ import {
18
19
  resolveToolClassGuardMs
19
20
  } from "./chunk-APAOZHV5.js";
20
21
  import {
21
- getNexusDataDir
22
+ getNexusDataDir,
23
+ nexusDataPath
22
24
  } from "./chunk-OQLFRJCW.js";
23
25
 
24
26
  // src/mcp/middleware/validation.ts
@@ -1019,6 +1021,144 @@ import { randomUUID } from "crypto";
1019
1021
  import { appendFileSync, existsSync, mkdirSync } from "fs";
1020
1022
  import { dirname, join } from "path";
1021
1023
 
1024
+ // src/governance/tool-fitness-ledger.ts
1025
+ import { z as z3 } from "zod";
1026
+ var ToolFitnessEventSchema = z3.object({
1027
+ /** Schema version. Forward-compat for on-disk evolution. */
1028
+ v: z3.literal(1),
1029
+ /** ISO-8601 timestamp of the invocation. */
1030
+ ts: z3.iso.datetime(),
1031
+ /** Tool identifier (e.g. the MCP tool name). */
1032
+ tool: z3.string().min(1).max(100),
1033
+ /** Whether the invocation succeeded. Drives the success/failure correlation. */
1034
+ success: z3.boolean(),
1035
+ /**
1036
+ * Cost of the invocation in arbitrary units (e.g. tokens), when the calling
1037
+ * surface exposes it. Placeholder until full cost accounting lands with
1038
+ * Epic G — absent (not zero) when unknown so aggregates don't conflate
1039
+ * "free" with "unmeasured".
1040
+ */
1041
+ cost: z3.number().nonnegative().optional(),
1042
+ /**
1043
+ * OPTIONAL workspace/repo dimension (#3852 concern 1 — context-poisoning).
1044
+ * The ledger is homedir-global, so a tool that fails only in ONE workspace
1045
+ * (local perms, missing deps, repo-specific config) would otherwise aggregate
1046
+ * into a single global fitness number and could wrongly flag a tool that is
1047
+ * healthy everywhere else. Recording the originating workspace lets the
1048
+ * consumer scope/weight fitness so a one-workspace failure doesn't get
1049
+ * globally penalized. BACKWARD-COMPATIBLE: optional, absent on legacy events
1050
+ * (treated as the unattributed/global bucket by the consumer).
1051
+ */
1052
+ workspace: z3.string().min(1).max(256).optional()
1053
+ });
1054
+ var UNATTRIBUTED_WORKSPACE = "(unattributed)";
1055
+ var DEFAULT_MAX_EVENTS = 5e4;
1056
+ var LEDGER_SUBDIR = "tool-fitness";
1057
+ var LEDGER_FILE = "ledger.jsonl";
1058
+ var ToolFitnessLedger = class {
1059
+ store;
1060
+ constructor(config) {
1061
+ this.store = new JsonlStore({
1062
+ filePath: config?.filePath ?? nexusDataPath(LEDGER_SUBDIR, LEDGER_FILE),
1063
+ schema: ToolFitnessEventSchema,
1064
+ maxRecords: config?.maxEvents ?? DEFAULT_MAX_EVENTS,
1065
+ component: "ToolFitnessLedger"
1066
+ });
1067
+ }
1068
+ /**
1069
+ * Record one tool invocation. `v`/`ts` are stamped here so callers pass only
1070
+ * the observed signal. Best-effort durability (inherited from JsonlStore):
1071
+ * never throws into the observed operation.
1072
+ */
1073
+ record(event) {
1074
+ const record = {
1075
+ v: 1,
1076
+ ts: event.ts ?? (/* @__PURE__ */ new Date()).toISOString(),
1077
+ tool: event.tool,
1078
+ success: event.success,
1079
+ ...event.cost !== void 0 ? { cost: event.cost } : {},
1080
+ ...event.workspace !== void 0 ? { workspace: event.workspace } : {}
1081
+ };
1082
+ this.store.append(record);
1083
+ }
1084
+ /** Total retained events across all tools. */
1085
+ size() {
1086
+ return this.store.count();
1087
+ }
1088
+ /**
1089
+ * Aggregate stats for a single tool, or `undefined` when the tool has no
1090
+ * recorded events (unknown tool / empty ledger). Pure over the current
1091
+ * event set — no I/O.
1092
+ */
1093
+ statFor(tool) {
1094
+ const events = this.store.all().filter((e) => e.tool === tool);
1095
+ if (events.length === 0) return void 0;
1096
+ return aggregate(tool, events);
1097
+ }
1098
+ /**
1099
+ * Aggregate stats for a single tool RESTRICTED to one workspace (#3852
1100
+ * concern 1 — context-poisoning). Pass {@link UNATTRIBUTED_WORKSPACE} to
1101
+ * select the legacy/global bucket of events that carried no `workspace`.
1102
+ * Returns `undefined` when the tool has no events in that workspace.
1103
+ *
1104
+ * This is the primitive that lets the consumer answer "is this tool low-fitness
1105
+ * EVERYWHERE, or only in one repo?" so a single-workspace failure can't
1106
+ * globally mis-flag a healthy tool.
1107
+ */
1108
+ statForInWorkspace(tool, workspace) {
1109
+ const events = this.store.all().filter((e) => e.tool === tool && (e.workspace ?? UNATTRIBUTED_WORKSPACE) === workspace);
1110
+ if (events.length === 0) return void 0;
1111
+ return aggregate(tool, events);
1112
+ }
1113
+ /**
1114
+ * Aggregate stats for every tool with at least one event, sorted by
1115
+ * descending invocation count (most-used first) then tool name for a stable
1116
+ * order. Returns `[]` for an empty ledger.
1117
+ */
1118
+ report() {
1119
+ const byTool = /* @__PURE__ */ new Map();
1120
+ for (const event of this.store.all()) {
1121
+ const bucket = byTool.get(event.tool);
1122
+ if (bucket === void 0) byTool.set(event.tool, [event]);
1123
+ else bucket.push(event);
1124
+ }
1125
+ const stats = [];
1126
+ for (const [tool, events] of byTool) {
1127
+ stats.push(aggregate(tool, events));
1128
+ }
1129
+ stats.sort((a, b) => b.invocationCount - a.invocationCount || a.tool.localeCompare(b.tool));
1130
+ return stats;
1131
+ }
1132
+ };
1133
+ function aggregate(tool, events) {
1134
+ let successCount = 0;
1135
+ let lastUsedAt = "";
1136
+ let totalCost;
1137
+ const workspaces = /* @__PURE__ */ new Set();
1138
+ for (const event of events) {
1139
+ if (event.success) successCount++;
1140
+ if (lastUsedAt === "" || Date.parse(event.ts) >= Date.parse(lastUsedAt)) lastUsedAt = event.ts;
1141
+ if (event.cost !== void 0) totalCost = (totalCost ?? 0) + event.cost;
1142
+ workspaces.add(event.workspace ?? UNATTRIBUTED_WORKSPACE);
1143
+ }
1144
+ const invocationCount = events.length;
1145
+ return {
1146
+ tool,
1147
+ invocationCount,
1148
+ successCount,
1149
+ failureCount: invocationCount - successCount,
1150
+ successRate: successCount / invocationCount,
1151
+ lastUsedAt,
1152
+ totalCost,
1153
+ workspaces: [...workspaces].sort((a, b) => a.localeCompare(b))
1154
+ };
1155
+ }
1156
+ var singleton;
1157
+ function getToolFitnessLedger() {
1158
+ singleton ??= new ToolFitnessLedger();
1159
+ return singleton;
1160
+ }
1161
+
1022
1162
  // src/mcp/middleware/timeout-guard.ts
1023
1163
  var DEFAULT_TIMEOUT_MS = TIMEOUT_GUARD.defaultMs;
1024
1164
  var MAX_TIMEOUT_MS = TIMEOUT_GUARD.maxMs;
@@ -1599,10 +1739,27 @@ function createMiddlewareChain(config) {
1599
1739
  const requestContext = createRequestContext({ toolName: config.toolName });
1600
1740
  const requestLogger = logger.child(contextForLogging(requestContext));
1601
1741
  const ctx = { requestContext, logger: requestLogger };
1602
- return composed(args, ctx, (finalArgs, finalCtx) => handler(finalArgs, finalCtx));
1742
+ try {
1743
+ const result = await composed(
1744
+ args,
1745
+ ctx,
1746
+ (finalArgs, finalCtx) => handler(finalArgs, finalCtx)
1747
+ );
1748
+ recordToolFitness(config.toolName, result.isError !== true);
1749
+ return result;
1750
+ } catch (error) {
1751
+ recordToolFitness(config.toolName, false);
1752
+ throw error;
1753
+ }
1603
1754
  };
1604
1755
  };
1605
1756
  }
1757
+ function recordToolFitness(toolName, success) {
1758
+ try {
1759
+ getToolFitnessLedger().record({ tool: toolName, success });
1760
+ } catch {
1761
+ }
1762
+ }
1606
1763
  function withMiddleware(toolName, handler, options) {
1607
1764
  const config = {
1608
1765
  toolName,
@@ -1824,8 +1981,8 @@ function getToolAnnotations(name) {
1824
1981
  }
1825
1982
 
1826
1983
  // src/consensus/types-core.ts
1827
- import { z as z3 } from "zod";
1828
- var ConsensusAlgorithmSchema = z3.enum([
1984
+ import { z as z4 } from "zod";
1985
+ var ConsensusAlgorithmSchema = z4.enum([
1829
1986
  "simple_majority",
1830
1987
  "supermajority",
1831
1988
  "unanimous",
@@ -1833,8 +1990,8 @@ var ConsensusAlgorithmSchema = z3.enum([
1833
1990
  "opinion_wise",
1834
1991
  "higher_order"
1835
1992
  ]);
1836
- var VoteDecisionSchema = z3.enum(["approve", "reject", "abstain"]);
1837
- var ProposalStatusSchema = z3.enum([
1993
+ var VoteDecisionSchema = z4.enum(["approve", "reject", "abstain"]);
1994
+ var ProposalStatusSchema = z4.enum([
1838
1995
  "pending",
1839
1996
  "voting",
1840
1997
  "approved",
@@ -1842,7 +1999,7 @@ var ProposalStatusSchema = z3.enum([
1842
1999
  "timeout",
1843
2000
  "closed"
1844
2001
  ]);
1845
- var RejectionCategorySchema = z3.enum([
2002
+ var RejectionCategorySchema = z4.enum([
1846
2003
  "YAGNI",
1847
2004
  "DRY_VIOLATION",
1848
2005
  "OVER_ENGINEERING",
@@ -1852,74 +2009,74 @@ var RejectionCategorySchema = z3.enum([
1852
2009
  "INSUFFICIENT_EVIDENCE"
1853
2010
  ]);
1854
2011
  var REJECTION_CATEGORIES = RejectionCategorySchema.options;
1855
- var FindingShapeSchema = z3.object({
1856
- summary: z3.string().min(1).max(500),
1857
- location: z3.string().min(1).max(200),
1858
- severity: z3.enum(["critical", "high", "medium", "low"]).default("medium"),
1859
- gate: z3.object({
1860
- reread_cited_line: z3.enum(["passed", "failed", "skipped"]).default("skipped"),
1861
- traced_call_path: z3.enum(["passed", "failed", "skipped"]).default("skipped"),
1862
- named_assertion: z3.string().default(""),
1863
- ruled_out_language_non_issue: z3.enum(["passed", "failed", "skipped"]).default("skipped")
2012
+ var FindingShapeSchema = z4.object({
2013
+ summary: z4.string().min(1).max(500),
2014
+ location: z4.string().min(1).max(200),
2015
+ severity: z4.enum(["critical", "high", "medium", "low"]).default("medium"),
2016
+ gate: z4.object({
2017
+ reread_cited_line: z4.enum(["passed", "failed", "skipped"]).default("skipped"),
2018
+ traced_call_path: z4.enum(["passed", "failed", "skipped"]).default("skipped"),
2019
+ named_assertion: z4.string().default(""),
2020
+ ruled_out_language_non_issue: z4.enum(["passed", "failed", "skipped"]).default("skipped")
1864
2021
  }),
1865
- claim: z3.string().min(1).max(2e3)
2022
+ claim: z4.string().min(1).max(2e3)
1866
2023
  });
1867
- var VoteSchema = z3.object({
2024
+ var VoteSchema = z4.object({
1868
2025
  decision: VoteDecisionSchema,
1869
- reasoning: z3.string().min(1).describe("Explanation for the vote"),
1870
- confidence: z3.number().min(0).max(1).describe("Confidence level 0-1"),
1871
- conditions: z3.array(z3.string()).optional().describe("Conditions for approval"),
2026
+ reasoning: z4.string().min(1).describe("Explanation for the vote"),
2027
+ confidence: z4.number().min(0).max(1).describe("Confidence level 0-1"),
2028
+ conditions: z4.array(z4.string()).optional().describe("Conditions for approval"),
1872
2029
  /** Structured rejection categories for reject→refine→re-vote loops (Issue #1213). */
1873
- rejectionCategories: z3.array(RejectionCategorySchema).optional().describe("Rejection reason categories when decision is reject"),
2030
+ rejectionCategories: z4.array(RejectionCategorySchema).optional().describe("Rejection reason categories when decision is reject"),
1874
2031
  /** Pre-verified PR-review findings (#2245 v4 follow-up). Optional;
1875
2032
  * populated only when the voter emits the structured top-level array. */
1876
- findings: z3.array(FindingShapeSchema).optional().describe("PR-review findings (pre-verified)"),
2033
+ findings: z4.array(FindingShapeSchema).optional().describe("PR-review findings (pre-verified)"),
1877
2034
  /** Which declared option this voter chose, when the proposal declared
1878
2035
  * `options` (#4472). Absent when the proposal declared none, or when the
1879
2036
  * voter's selection matched no declared option — an unmatched selection is
1880
2037
  * recorded as absent, never coerced onto a default. */
1881
- selectedOption: z3.string().optional().describe("Chosen option when the proposal declares options"),
1882
- timestamp: z3.iso.datetime().optional()
2038
+ selectedOption: z4.string().optional().describe("Chosen option when the proposal declares options"),
2039
+ timestamp: z4.iso.datetime().optional()
1883
2040
  });
1884
- var ProposalSchema = z3.object({
1885
- id: z3.string().optional().describe("Auto-generated if not provided"),
1886
- title: z3.string().min(1).max(200).describe("Short proposal title"),
1887
- description: z3.string().min(1).describe("Detailed proposal description"),
2041
+ var ProposalSchema = z4.object({
2042
+ id: z4.string().optional().describe("Auto-generated if not provided"),
2043
+ title: z4.string().min(1).max(200).describe("Short proposal title"),
2044
+ description: z4.string().min(1).describe("Detailed proposal description"),
1888
2045
  algorithm: ConsensusAlgorithmSchema,
1889
- timeout: z3.number().int().positive().optional().describe("Timeout in milliseconds"),
1890
- requiredVoters: z3.array(z3.string()).optional().describe("Agent IDs that must vote"),
1891
- metadata: z3.record(z3.string(), z3.unknown()).optional().describe("Additional context"),
1892
- createdAt: z3.iso.datetime().optional()
2046
+ timeout: z4.number().int().positive().optional().describe("Timeout in milliseconds"),
2047
+ requiredVoters: z4.array(z4.string()).optional().describe("Agent IDs that must vote"),
2048
+ metadata: z4.record(z4.string(), z4.unknown()).optional().describe("Additional context"),
2049
+ createdAt: z4.iso.datetime().optional()
1893
2050
  });
1894
- var ConsensusResultSchema = z3.object({
1895
- proposalId: z3.string(),
2051
+ var ConsensusResultSchema = z4.object({
2052
+ proposalId: z4.string(),
1896
2053
  proposal: ProposalSchema,
1897
2054
  outcome: ProposalStatusSchema,
1898
- votes: z3.map(z3.string(), VoteSchema),
1899
- voteCounts: z3.object({
1900
- approve: z3.number().int().nonnegative(),
1901
- reject: z3.number().int().nonnegative(),
1902
- abstain: z3.number().int().nonnegative(),
1903
- total: z3.number().int().nonnegative()
2055
+ votes: z4.map(z4.string(), VoteSchema),
2056
+ voteCounts: z4.object({
2057
+ approve: z4.number().int().nonnegative(),
2058
+ reject: z4.number().int().nonnegative(),
2059
+ abstain: z4.number().int().nonnegative(),
2060
+ total: z4.number().int().nonnegative()
1904
2061
  }),
1905
- weightedCounts: z3.object({
1906
- approve: z3.number().nonnegative(),
1907
- reject: z3.number().nonnegative(),
1908
- abstain: z3.number().nonnegative(),
1909
- totalWeight: z3.number().nonnegative()
2062
+ weightedCounts: z4.object({
2063
+ approve: z4.number().nonnegative(),
2064
+ reject: z4.number().nonnegative(),
2065
+ abstain: z4.number().nonnegative(),
2066
+ totalWeight: z4.number().nonnegative()
1910
2067
  }).optional(),
1911
- approvalPercentage: z3.number().min(0).max(100),
1912
- quorumReached: z3.boolean(),
1913
- startedAt: z3.iso.datetime(),
1914
- closedAt: z3.iso.datetime(),
1915
- durationMs: z3.number().int().nonnegative()
2068
+ approvalPercentage: z4.number().min(0).max(100),
2069
+ quorumReached: z4.boolean(),
2070
+ startedAt: z4.iso.datetime(),
2071
+ closedAt: z4.iso.datetime(),
2072
+ durationMs: z4.number().int().nonnegative()
1916
2073
  });
1917
- var AgentPerformanceSchema = z3.object({
1918
- agentId: z3.string(),
1919
- totalVotes: z3.number().int().nonnegative(),
1920
- correctVotes: z3.number().int().nonnegative(),
1921
- successRate: z3.number().min(0).max(1),
1922
- lastUpdated: z3.iso.datetime()
2074
+ var AgentPerformanceSchema = z4.object({
2075
+ agentId: z4.string(),
2076
+ totalVotes: z4.number().int().nonnegative(),
2077
+ correctVotes: z4.number().int().nonnegative(),
2078
+ successRate: z4.number().min(0).max(1),
2079
+ lastUpdated: z4.iso.datetime()
1923
2080
  });
1924
2081
  var DEFAULT_INCREMENTAL_QUORUM_CONFIG = {
1925
2082
  enabled: false,
@@ -1928,19 +2085,19 @@ var DEFAULT_INCREMENTAL_QUORUM_CONFIG = {
1928
2085
  confidenceThreshold: 0.6,
1929
2086
  ambiguityBand: 0.15
1930
2087
  };
1931
- var ProposalCacheConfigSchema = z3.object({
1932
- enabled: z3.boolean().default(false),
1933
- ttlMs: z3.number().int().positive().default(36e5),
2088
+ var ProposalCacheConfigSchema = z4.object({
2089
+ enabled: z4.boolean().default(false),
2090
+ ttlMs: z4.number().int().positive().default(36e5),
1934
2091
  // 1 hour
1935
- maxEntries: z3.number().int().positive().default(500)
2092
+ maxEntries: z4.number().int().positive().default(500)
1936
2093
  });
1937
- var ConsensusEngineConfigSchema = z3.object({
1938
- defaultTimeout: z3.number().int().positive().default(3e5),
2094
+ var ConsensusEngineConfigSchema = z4.object({
2095
+ defaultTimeout: z4.number().int().positive().default(3e5),
1939
2096
  // 5 minutes
1940
- minVotersForQuorum: z3.number().int().positive().default(2),
1941
- maxActiveProposals: z3.number().int().positive().default(100),
1942
- enablePerformanceTracking: z3.boolean().default(true),
1943
- maxClosedProposals: z3.number().int().positive().default(1e3),
2097
+ minVotersForQuorum: z4.number().int().positive().default(2),
2098
+ maxActiveProposals: z4.number().int().positive().default(100),
2099
+ enablePerformanceTracking: z4.boolean().default(true),
2100
+ maxClosedProposals: z4.number().int().positive().default(1e3),
1944
2101
  // Issue #549
1945
2102
  proposalCache: ProposalCacheConfigSchema.optional()
1946
2103
  // Issue #589
@@ -1966,14 +2123,14 @@ var VOTING_THRESHOLDS = {
1966
2123
  higher_order: 0.5
1967
2124
  // Alias for opinion_wise (Issue #514)
1968
2125
  };
1969
- var ConsensusMetricsSchema = z3.object({
1970
- totalProposals: z3.number().int().nonnegative(),
1971
- approvedProposals: z3.number().int().nonnegative(),
1972
- rejectedProposals: z3.number().int().nonnegative(),
1973
- timedOutProposals: z3.number().int().nonnegative(),
1974
- averageDurationMs: z3.number().nonnegative(),
1975
- averageVotesPerProposal: z3.number().nonnegative(),
1976
- algorithmUsage: z3.record(ConsensusAlgorithmSchema, z3.number().int().nonnegative())
2126
+ var ConsensusMetricsSchema = z4.object({
2127
+ totalProposals: z4.number().int().nonnegative(),
2128
+ approvedProposals: z4.number().int().nonnegative(),
2129
+ rejectedProposals: z4.number().int().nonnegative(),
2130
+ timedOutProposals: z4.number().int().nonnegative(),
2131
+ averageDurationMs: z4.number().nonnegative(),
2132
+ averageVotesPerProposal: z4.number().nonnegative(),
2133
+ algorithmUsage: z4.record(ConsensusAlgorithmSchema, z4.number().int().nonnegative())
1977
2134
  });
1978
2135
 
1979
2136
  export {
@@ -2001,6 +2158,8 @@ export {
2001
2158
  toolStructuredError,
2002
2159
  toolError,
2003
2160
  createSecureHandler,
2161
+ UNATTRIBUTED_WORKSPACE,
2162
+ getToolFitnessLedger,
2004
2163
  createMcpNotifier,
2005
2164
  NOOP_NOTIFIER,
2006
2165
  abortSignalStorage,
@@ -2028,4 +2187,4 @@ export {
2028
2187
  VOTING_THRESHOLDS,
2029
2188
  ConsensusMetricsSchema
2030
2189
  };
2031
- //# sourceMappingURL=chunk-GUDO6DBM.js.map
2190
+ //# sourceMappingURL=chunk-JTH44T6O.js.map