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.
- package/dist/{chunk-4QJWK6DY.js → chunk-AV4X4YH3.js} +8 -3
- package/dist/{chunk-4QJWK6DY.js.map → chunk-AV4X4YH3.js.map} +1 -1
- package/dist/{chunk-IPHDQZR2.js → chunk-AYLYRBS6.js} +12 -8
- package/dist/{chunk-IPHDQZR2.js.map → chunk-AYLYRBS6.js.map} +1 -1
- package/dist/{chunk-GUDO6DBM.js → chunk-JTH44T6O.js} +235 -76
- package/dist/chunk-JTH44T6O.js.map +1 -0
- package/dist/{chunk-JOWMSVIM.js → chunk-MHLXBATW.js} +37 -173
- package/dist/chunk-MHLXBATW.js.map +1 -0
- package/dist/{chunk-XPXOP7AC.js → chunk-NF2LMA5A.js} +3 -3
- package/dist/{chunk-3ENIOANU.js → chunk-WZGXBPIY.js} +2 -2
- package/dist/cli.d.ts +1 -1
- package/dist/cli.js +77 -31
- package/dist/cli.js.map +1 -1
- package/dist/{consensus-vote-KO3YN346.js → consensus-vote-NFXP65ET.js} +3 -3
- package/dist/{consensus-vote-types-b-KD-0g_.d.ts → consensus-vote-types-DjPVrCIO.d.ts} +31 -1
- package/dist/{improvement-review-2IV2L7QI.js → improvement-review-AZHHCQ2Q.js} +3 -3
- package/dist/index.d.ts +10 -3
- package/dist/index.js +6 -6
- package/dist/{setup-command-XJHLFBD4.js → setup-command-NAXE7M4Q.js} +3 -3
- package/package.json +1 -1
- package/dist/chunk-GUDO6DBM.js.map +0 -1
- package/dist/chunk-JOWMSVIM.js.map +0 -1
- /package/dist/{chunk-XPXOP7AC.js.map → chunk-NF2LMA5A.js.map} +0 -0
- /package/dist/{chunk-3ENIOANU.js.map → chunk-WZGXBPIY.js.map} +0 -0
- /package/dist/{consensus-vote-KO3YN346.js.map → consensus-vote-NFXP65ET.js.map} +0 -0
- /package/dist/{improvement-review-2IV2L7QI.js.map → improvement-review-AZHHCQ2Q.js.map} +0 -0
- /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
|
-
|
|
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
|
|
1828
|
-
var ConsensusAlgorithmSchema =
|
|
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 =
|
|
1837
|
-
var ProposalStatusSchema =
|
|
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 =
|
|
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 =
|
|
1856
|
-
summary:
|
|
1857
|
-
location:
|
|
1858
|
-
severity:
|
|
1859
|
-
gate:
|
|
1860
|
-
reread_cited_line:
|
|
1861
|
-
traced_call_path:
|
|
1862
|
-
named_assertion:
|
|
1863
|
-
ruled_out_language_non_issue:
|
|
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:
|
|
2022
|
+
claim: z4.string().min(1).max(2e3)
|
|
1866
2023
|
});
|
|
1867
|
-
var VoteSchema =
|
|
2024
|
+
var VoteSchema = z4.object({
|
|
1868
2025
|
decision: VoteDecisionSchema,
|
|
1869
|
-
reasoning:
|
|
1870
|
-
confidence:
|
|
1871
|
-
conditions:
|
|
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:
|
|
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:
|
|
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:
|
|
1882
|
-
timestamp:
|
|
2038
|
+
selectedOption: z4.string().optional().describe("Chosen option when the proposal declares options"),
|
|
2039
|
+
timestamp: z4.iso.datetime().optional()
|
|
1883
2040
|
});
|
|
1884
|
-
var ProposalSchema =
|
|
1885
|
-
id:
|
|
1886
|
-
title:
|
|
1887
|
-
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:
|
|
1890
|
-
requiredVoters:
|
|
1891
|
-
metadata:
|
|
1892
|
-
createdAt:
|
|
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 =
|
|
1895
|
-
proposalId:
|
|
2051
|
+
var ConsensusResultSchema = z4.object({
|
|
2052
|
+
proposalId: z4.string(),
|
|
1896
2053
|
proposal: ProposalSchema,
|
|
1897
2054
|
outcome: ProposalStatusSchema,
|
|
1898
|
-
votes:
|
|
1899
|
-
voteCounts:
|
|
1900
|
-
approve:
|
|
1901
|
-
reject:
|
|
1902
|
-
abstain:
|
|
1903
|
-
total:
|
|
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:
|
|
1906
|
-
approve:
|
|
1907
|
-
reject:
|
|
1908
|
-
abstain:
|
|
1909
|
-
totalWeight:
|
|
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:
|
|
1912
|
-
quorumReached:
|
|
1913
|
-
startedAt:
|
|
1914
|
-
closedAt:
|
|
1915
|
-
durationMs:
|
|
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 =
|
|
1918
|
-
agentId:
|
|
1919
|
-
totalVotes:
|
|
1920
|
-
correctVotes:
|
|
1921
|
-
successRate:
|
|
1922
|
-
lastUpdated:
|
|
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 =
|
|
1932
|
-
enabled:
|
|
1933
|
-
ttlMs:
|
|
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:
|
|
2092
|
+
maxEntries: z4.number().int().positive().default(500)
|
|
1936
2093
|
});
|
|
1937
|
-
var ConsensusEngineConfigSchema =
|
|
1938
|
-
defaultTimeout:
|
|
2094
|
+
var ConsensusEngineConfigSchema = z4.object({
|
|
2095
|
+
defaultTimeout: z4.number().int().positive().default(3e5),
|
|
1939
2096
|
// 5 minutes
|
|
1940
|
-
minVotersForQuorum:
|
|
1941
|
-
maxActiveProposals:
|
|
1942
|
-
enablePerformanceTracking:
|
|
1943
|
-
maxClosedProposals:
|
|
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 =
|
|
1970
|
-
totalProposals:
|
|
1971
|
-
approvedProposals:
|
|
1972
|
-
rejectedProposals:
|
|
1973
|
-
timedOutProposals:
|
|
1974
|
-
averageDurationMs:
|
|
1975
|
-
averageVotesPerProposal:
|
|
1976
|
-
algorithmUsage:
|
|
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-
|
|
2190
|
+
//# sourceMappingURL=chunk-JTH44T6O.js.map
|