nexus-agents 2.81.2 → 2.81.4
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/{child-mcp-config-LLLRMOTQ.js → child-mcp-config-HVGU73XG.js} +2 -2
- package/dist/{chunk-SVKH6ASN.js → chunk-2GW2FZXY.js} +7 -7
- package/dist/{chunk-V2KWEIV5.js → chunk-2HBQ6XXA.js} +2 -2
- package/dist/{chunk-LIEFKEAO.js → chunk-5TM5VL23.js} +2 -2
- package/dist/{chunk-WZGCVCRQ.js → chunk-6M44ZXB4.js} +2 -2
- package/dist/{chunk-73K7575Z.js → chunk-7JLSKX3U.js} +2 -2
- package/dist/{chunk-M66MYHBT.js → chunk-AMFVUDWI.js} +2 -2
- package/dist/{chunk-PV3OEDLO.js → chunk-B3MCX46I.js} +2 -2
- package/dist/{chunk-Q27M6KHP.js → chunk-BZVYU4YD.js} +4 -4
- package/dist/{chunk-ERWTZSAR.js → chunk-EGK4RZV5.js} +2 -2
- package/dist/{chunk-6KO6LO3L.js → chunk-F7N2T53R.js} +7 -7
- package/dist/{chunk-MRCURXAX.js → chunk-FAU7LVIG.js} +5 -5
- package/dist/{chunk-LJIB6TNE.js → chunk-HFSSADUV.js} +3 -3
- package/dist/{chunk-LJIB6TNE.js.map → chunk-HFSSADUV.js.map} +1 -1
- package/dist/{chunk-RLQZOEMX.js → chunk-ITMLH7TF.js} +3 -3
- package/dist/{chunk-PZEE6T5Y.js → chunk-JSQV2EOZ.js} +3 -3
- package/dist/{chunk-PKBKWWPK.js → chunk-K7WUEKCD.js} +3 -3
- package/dist/{chunk-6YQCLEHL.js → chunk-M3KVQK54.js} +2 -2
- package/dist/{chunk-YLYT7GSG.js → chunk-M5ABED6T.js} +2 -2
- package/dist/{chunk-37ZXD5B6.js → chunk-M6KXR4LO.js} +450 -117
- package/dist/{chunk-37ZXD5B6.js.map → chunk-M6KXR4LO.js.map} +1 -1
- package/dist/{chunk-UTL2SFIN.js → chunk-PPV23O3J.js} +2 -2
- package/dist/{chunk-P4W7PV6L.js → chunk-R2VJY7Z4.js} +9 -9
- package/dist/{chunk-SZ7VPIRA.js → chunk-RGKUBFTE.js} +2 -2
- package/dist/{chunk-4OPS2AUD.js → chunk-S5HMID6I.js} +3 -3
- package/dist/{chunk-BMNWUPJO.js → chunk-WVSQGGAH.js} +3 -3
- package/dist/{chunk-T7RGD5JW.js → chunk-XZECNG2Q.js} +3 -3
- package/dist/{chunk-PUSFT342.js → chunk-YW72ORKM.js} +3 -3
- package/dist/{chunk-UZCDHAY3.js → chunk-ZAY5M2AN.js} +2 -2
- package/dist/{chunk-S77SLJ2J.js → chunk-ZBABWKEA.js} +2 -2
- package/dist/{cli-circuit-breaker-O5RV47BO.js → cli-circuit-breaker-NUZGOAVD.js} +4 -4
- package/dist/cli.js +54 -35
- package/dist/cli.js.map +1 -1
- package/dist/{composite-router-SKHVZ4UF.js → composite-router-4CF3P5D4.js} +2 -2
- package/dist/{consensus-vote-VBXLXVFF.js → consensus-vote-7PLEGFWZ.js} +11 -11
- package/dist/{context-retriever-KLJ5X4TL.js → context-retriever-R5W4I4IB.js} +5 -5
- package/dist/{doctor-deep-IH4FG5YZ.js → doctor-deep-7JTGI33O.js} +3 -3
- package/dist/expert-bridge-J5ZKCYL5.js +11 -0
- package/dist/{factory-FTE7TDCT.js → factory-DD2FPM3H.js} +5 -5
- package/dist/{factory-CQUDIMIG.js → factory-E2CKCYIK.js} +4 -4
- package/dist/index.d.ts +27 -1
- package/dist/index.js +30 -26
- package/dist/index.js.map +1 -1
- package/dist/{init-opencode-MXZJKG32.js → init-opencode-2BZWAACW.js} +5 -5
- package/dist/{issue-triage-H5VLNGWU.js → issue-triage-CRUJLWFY.js} +4 -4
- package/dist/{registry-command-ALVYOGQY.js → registry-command-OHIJNUZJ.js} +2 -2
- package/dist/{repo-security-plan-VJCWWPWO.js → repo-security-plan-I4FZP7QA.js} +3 -3
- package/dist/{research-helpers-synthesize-XUTBDVI7.js → research-helpers-synthesize-NMYYERCP.js} +3 -3
- package/dist/{routing-memory-QKQ3OGWW.js → routing-memory-7DA6WNSA.js} +2 -2
- package/dist/{session-memory-N76TNRSK.js → session-memory-LV35VSBK.js} +3 -3
- package/dist/{setup-command-JBTK3LGD.js → setup-command-2OUPZSU7.js} +10 -10
- package/dist/{setup-config-Y7KZSFX3.js → setup-config-TMXG3O7K.js} +3 -3
- package/dist/{setup-custom-api-QEKHNYQJ.js → setup-custom-api-N5VE2YPO.js} +4 -4
- package/dist/{tool-memory-MFDLIJOB.js → tool-memory-JL5TF5BI.js} +4 -4
- package/dist/{weather-report-IXPYIYE4.js → weather-report-CCOWOPFG.js} +2 -2
- package/package.json +1 -1
- package/dist/expert-bridge-EKPDZKMD.js +0 -11
- /package/dist/{child-mcp-config-LLLRMOTQ.js.map → child-mcp-config-HVGU73XG.js.map} +0 -0
- /package/dist/{chunk-SVKH6ASN.js.map → chunk-2GW2FZXY.js.map} +0 -0
- /package/dist/{chunk-V2KWEIV5.js.map → chunk-2HBQ6XXA.js.map} +0 -0
- /package/dist/{chunk-LIEFKEAO.js.map → chunk-5TM5VL23.js.map} +0 -0
- /package/dist/{chunk-WZGCVCRQ.js.map → chunk-6M44ZXB4.js.map} +0 -0
- /package/dist/{chunk-73K7575Z.js.map → chunk-7JLSKX3U.js.map} +0 -0
- /package/dist/{chunk-M66MYHBT.js.map → chunk-AMFVUDWI.js.map} +0 -0
- /package/dist/{chunk-PV3OEDLO.js.map → chunk-B3MCX46I.js.map} +0 -0
- /package/dist/{chunk-Q27M6KHP.js.map → chunk-BZVYU4YD.js.map} +0 -0
- /package/dist/{chunk-ERWTZSAR.js.map → chunk-EGK4RZV5.js.map} +0 -0
- /package/dist/{chunk-6KO6LO3L.js.map → chunk-F7N2T53R.js.map} +0 -0
- /package/dist/{chunk-MRCURXAX.js.map → chunk-FAU7LVIG.js.map} +0 -0
- /package/dist/{chunk-RLQZOEMX.js.map → chunk-ITMLH7TF.js.map} +0 -0
- /package/dist/{chunk-PZEE6T5Y.js.map → chunk-JSQV2EOZ.js.map} +0 -0
- /package/dist/{chunk-PKBKWWPK.js.map → chunk-K7WUEKCD.js.map} +0 -0
- /package/dist/{chunk-6YQCLEHL.js.map → chunk-M3KVQK54.js.map} +0 -0
- /package/dist/{chunk-YLYT7GSG.js.map → chunk-M5ABED6T.js.map} +0 -0
- /package/dist/{chunk-UTL2SFIN.js.map → chunk-PPV23O3J.js.map} +0 -0
- /package/dist/{chunk-P4W7PV6L.js.map → chunk-R2VJY7Z4.js.map} +0 -0
- /package/dist/{chunk-SZ7VPIRA.js.map → chunk-RGKUBFTE.js.map} +0 -0
- /package/dist/{chunk-4OPS2AUD.js.map → chunk-S5HMID6I.js.map} +0 -0
- /package/dist/{chunk-BMNWUPJO.js.map → chunk-WVSQGGAH.js.map} +0 -0
- /package/dist/{chunk-T7RGD5JW.js.map → chunk-XZECNG2Q.js.map} +0 -0
- /package/dist/{chunk-PUSFT342.js.map → chunk-YW72ORKM.js.map} +0 -0
- /package/dist/{chunk-UZCDHAY3.js.map → chunk-ZAY5M2AN.js.map} +0 -0
- /package/dist/{chunk-S77SLJ2J.js.map → chunk-ZBABWKEA.js.map} +0 -0
- /package/dist/{cli-circuit-breaker-O5RV47BO.js.map → cli-circuit-breaker-NUZGOAVD.js.map} +0 -0
- /package/dist/{composite-router-SKHVZ4UF.js.map → composite-router-4CF3P5D4.js.map} +0 -0
- /package/dist/{consensus-vote-VBXLXVFF.js.map → consensus-vote-7PLEGFWZ.js.map} +0 -0
- /package/dist/{context-retriever-KLJ5X4TL.js.map → context-retriever-R5W4I4IB.js.map} +0 -0
- /package/dist/{doctor-deep-IH4FG5YZ.js.map → doctor-deep-7JTGI33O.js.map} +0 -0
- /package/dist/{expert-bridge-EKPDZKMD.js.map → expert-bridge-J5ZKCYL5.js.map} +0 -0
- /package/dist/{factory-CQUDIMIG.js.map → factory-DD2FPM3H.js.map} +0 -0
- /package/dist/{factory-FTE7TDCT.js.map → factory-E2CKCYIK.js.map} +0 -0
- /package/dist/{init-opencode-MXZJKG32.js.map → init-opencode-2BZWAACW.js.map} +0 -0
- /package/dist/{issue-triage-H5VLNGWU.js.map → issue-triage-CRUJLWFY.js.map} +0 -0
- /package/dist/{registry-command-ALVYOGQY.js.map → registry-command-OHIJNUZJ.js.map} +0 -0
- /package/dist/{repo-security-plan-VJCWWPWO.js.map → repo-security-plan-I4FZP7QA.js.map} +0 -0
- /package/dist/{research-helpers-synthesize-XUTBDVI7.js.map → research-helpers-synthesize-NMYYERCP.js.map} +0 -0
- /package/dist/{routing-memory-QKQ3OGWW.js.map → routing-memory-7DA6WNSA.js.map} +0 -0
- /package/dist/{session-memory-N76TNRSK.js.map → session-memory-LV35VSBK.js.map} +0 -0
- /package/dist/{setup-command-JBTK3LGD.js.map → setup-command-2OUPZSU7.js.map} +0 -0
- /package/dist/{setup-config-Y7KZSFX3.js.map → setup-config-TMXG3O7K.js.map} +0 -0
- /package/dist/{setup-custom-api-QEKHNYQJ.js.map → setup-custom-api-N5VE2YPO.js.map} +0 -0
- /package/dist/{tool-memory-MFDLIJOB.js.map → tool-memory-JL5TF5BI.js.map} +0 -0
- /package/dist/{weather-report-IXPYIYE4.js.map → weather-report-CCOWOPFG.js.map} +0 -0
|
@@ -7,10 +7,10 @@ import {
|
|
|
7
7
|
import {
|
|
8
8
|
getTokenEnvVars,
|
|
9
9
|
resolveToken
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-ZAY5M2AN.js";
|
|
11
11
|
import {
|
|
12
12
|
executeExpert
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-2GW2FZXY.js";
|
|
14
14
|
import {
|
|
15
15
|
EventTopics,
|
|
16
16
|
NOOP_NOTIFIER,
|
|
@@ -36,7 +36,7 @@ import {
|
|
|
36
36
|
withAccessPolicy,
|
|
37
37
|
withProgressHeartbeat,
|
|
38
38
|
wrapToolWithTimeout
|
|
39
|
-
} from "./chunk-
|
|
39
|
+
} from "./chunk-R2VJY7Z4.js";
|
|
40
40
|
import {
|
|
41
41
|
REGISTRY_PATH,
|
|
42
42
|
getProjectRoot,
|
|
@@ -45,14 +45,14 @@ import {
|
|
|
45
45
|
normalizeTopicToCanonical,
|
|
46
46
|
savePapersRegistry,
|
|
47
47
|
synthesizeResearch
|
|
48
|
-
} from "./chunk-
|
|
48
|
+
} from "./chunk-EGK4RZV5.js";
|
|
49
49
|
import {
|
|
50
50
|
IssueTriage,
|
|
51
51
|
sanitizeInput
|
|
52
|
-
} from "./chunk-
|
|
52
|
+
} from "./chunk-ITMLH7TF.js";
|
|
53
53
|
import {
|
|
54
54
|
generateSecurityPlan
|
|
55
|
-
} from "./chunk-
|
|
55
|
+
} from "./chunk-RGKUBFTE.js";
|
|
56
56
|
import {
|
|
57
57
|
analyzeGitHubRepo
|
|
58
58
|
} from "./chunk-7J7PNOJQ.js";
|
|
@@ -64,7 +64,7 @@ import {
|
|
|
64
64
|
getContextForTask,
|
|
65
65
|
inferTaskCategory,
|
|
66
66
|
summarizeContextForPrompt
|
|
67
|
-
} from "./chunk-
|
|
67
|
+
} from "./chunk-S5HMID6I.js";
|
|
68
68
|
import {
|
|
69
69
|
DEFAULT_RELEVANCE_CONFIG,
|
|
70
70
|
MemoryImportance,
|
|
@@ -72,19 +72,19 @@ import {
|
|
|
72
72
|
generateHyphenId,
|
|
73
73
|
generateUUID,
|
|
74
74
|
getToolMemory
|
|
75
|
-
} from "./chunk-
|
|
75
|
+
} from "./chunk-JSQV2EOZ.js";
|
|
76
76
|
import {
|
|
77
77
|
DEFAULT_TASK_TTL_MS,
|
|
78
78
|
DEFAULT_TOOL_RATE_LIMITS,
|
|
79
79
|
clampTaskTtl
|
|
80
|
-
} from "./chunk-
|
|
80
|
+
} from "./chunk-F7N2T53R.js";
|
|
81
81
|
import {
|
|
82
82
|
getAvailabilityCache,
|
|
83
83
|
resolveFallback
|
|
84
|
-
} from "./chunk-
|
|
84
|
+
} from "./chunk-6M44ZXB4.js";
|
|
85
85
|
import {
|
|
86
86
|
DEFAULTS
|
|
87
|
-
} from "./chunk-
|
|
87
|
+
} from "./chunk-2HBQ6XXA.js";
|
|
88
88
|
import {
|
|
89
89
|
resolveInsideRoot
|
|
90
90
|
} from "./chunk-NUBSJGQZ.js";
|
|
@@ -100,7 +100,7 @@ import {
|
|
|
100
100
|
getAvailableClis,
|
|
101
101
|
sleep,
|
|
102
102
|
withTimeout
|
|
103
|
-
} from "./chunk-
|
|
103
|
+
} from "./chunk-WVSQGGAH.js";
|
|
104
104
|
import {
|
|
105
105
|
BUILT_IN_EXPERTS,
|
|
106
106
|
BuiltInExpertTypeSchema,
|
|
@@ -112,7 +112,7 @@ import {
|
|
|
112
112
|
} from "./chunk-PQHVC4BD.js";
|
|
113
113
|
import {
|
|
114
114
|
createSessionMemory
|
|
115
|
-
} from "./chunk-
|
|
115
|
+
} from "./chunk-B3MCX46I.js";
|
|
116
116
|
import {
|
|
117
117
|
AGENT_ROUTER_TIMEOUTS,
|
|
118
118
|
API_TIMEOUTS,
|
|
@@ -182,7 +182,7 @@ import {
|
|
|
182
182
|
resolveModelIdentitySync,
|
|
183
183
|
toExpertTaskAnalysisResult,
|
|
184
184
|
withStep
|
|
185
|
-
} from "./chunk-
|
|
185
|
+
} from "./chunk-HFSSADUV.js";
|
|
186
186
|
import {
|
|
187
187
|
getNexusDataDir,
|
|
188
188
|
nexusDataPath
|
|
@@ -17713,7 +17713,7 @@ var ExperienceBuffer = class _ExperienceBuffer {
|
|
|
17713
17713
|
}
|
|
17714
17714
|
const totalReward = this.computeTotalReward(steps);
|
|
17715
17715
|
const episode = {
|
|
17716
|
-
id:
|
|
17716
|
+
id: getRandomProvider().uuid(),
|
|
17717
17717
|
sessionId,
|
|
17718
17718
|
steps: [...steps],
|
|
17719
17719
|
totalReward,
|
|
@@ -26699,7 +26699,7 @@ async function populateUnifiedContextOnState(state) {
|
|
|
26699
26699
|
try {
|
|
26700
26700
|
const taskCandidate = state["task"];
|
|
26701
26701
|
if (typeof taskCandidate !== "string" || taskCandidate === "") return;
|
|
26702
|
-
const { getContextForTask: getContextForTask2, inferTaskCategory: inferTaskCategory2 } = await import("./context-retriever-
|
|
26702
|
+
const { getContextForTask: getContextForTask2, inferTaskCategory: inferTaskCategory2 } = await import("./context-retriever-R5W4I4IB.js");
|
|
26703
26703
|
const ctx = await getContextForTask2({
|
|
26704
26704
|
task: taskCandidate,
|
|
26705
26705
|
category: inferTaskCategory2(taskCandidate),
|
|
@@ -28246,15 +28246,12 @@ var PolicyEngine = class {
|
|
|
28246
28246
|
return matched.sort((a, b) => b.priority - a.priority);
|
|
28247
28247
|
}
|
|
28248
28248
|
};
|
|
28249
|
-
var DEFAULT_MAX_ATTEMPTS = 3;
|
|
28250
|
-
var COST_WARNING_THRESHOLD = 0.8;
|
|
28251
28249
|
var trustTierRule = {
|
|
28252
28250
|
id: "trust-tier",
|
|
28253
28251
|
priority: 100,
|
|
28254
28252
|
evaluate(context) {
|
|
28255
|
-
const
|
|
28256
|
-
const
|
|
28257
|
-
const numericTier = typeof tierVal === "number" ? tierVal : typeof tierVal === "string" ? Number(tierVal) : Number.NaN;
|
|
28253
|
+
const tierVal = context.pipelineState.trustTier;
|
|
28254
|
+
const numericTier = tierVal === void 0 ? Number.NaN : Number(tierVal);
|
|
28258
28255
|
const tier = Number.isFinite(numericTier) ? numericTier : void 0;
|
|
28259
28256
|
if (tier !== void 0 && tier >= 3 && context.stageType === "execute") {
|
|
28260
28257
|
return {
|
|
@@ -28266,83 +28263,7 @@ var trustTierRule = {
|
|
|
28266
28263
|
return { allow: true };
|
|
28267
28264
|
}
|
|
28268
28265
|
};
|
|
28269
|
-
var
|
|
28270
|
-
id: "security-review",
|
|
28271
|
-
priority: 90,
|
|
28272
|
-
evaluate(context) {
|
|
28273
|
-
const state = context.pipelineState;
|
|
28274
|
-
const needsReview = state["securityReviewRequired"] === true;
|
|
28275
|
-
const hasReview = state["securityReviewComplete"] === true;
|
|
28276
|
-
if (needsReview && !hasReview && context.stageType === "execute") {
|
|
28277
|
-
return {
|
|
28278
|
-
allow: false,
|
|
28279
|
-
reason: "Security review required before implementation"
|
|
28280
|
-
};
|
|
28281
|
-
}
|
|
28282
|
-
return { allow: true };
|
|
28283
|
-
}
|
|
28284
|
-
};
|
|
28285
|
-
var boundedIterationRule = {
|
|
28286
|
-
id: "bounded-iteration",
|
|
28287
|
-
priority: 80,
|
|
28288
|
-
evaluate(context) {
|
|
28289
|
-
const state = context.pipelineState;
|
|
28290
|
-
const attemptsVal = state["stageAttempts"];
|
|
28291
|
-
const attempts = typeof attemptsVal === "number" ? attemptsVal : void 0;
|
|
28292
|
-
if (attempts !== void 0 && attempts >= DEFAULT_MAX_ATTEMPTS) {
|
|
28293
|
-
return {
|
|
28294
|
-
allow: false,
|
|
28295
|
-
reason: `Stage "${context.stageId}" exceeded max retries`
|
|
28296
|
-
};
|
|
28297
|
-
}
|
|
28298
|
-
return { allow: true };
|
|
28299
|
-
}
|
|
28300
|
-
};
|
|
28301
|
-
var costBudgetRule = {
|
|
28302
|
-
id: "cost-budget",
|
|
28303
|
-
priority: 70,
|
|
28304
|
-
evaluate(context) {
|
|
28305
|
-
const state = context.pipelineState;
|
|
28306
|
-
const spentVal = state["costAccumulator"];
|
|
28307
|
-
const spent = typeof spentVal === "number" ? spentVal : void 0;
|
|
28308
|
-
const budgetVal = state["costBudget"];
|
|
28309
|
-
const budget = typeof budgetVal === "number" ? budgetVal : void 0;
|
|
28310
|
-
if (spent !== void 0 && budget !== void 0) {
|
|
28311
|
-
if (spent > budget * COST_WARNING_THRESHOLD) {
|
|
28312
|
-
return {
|
|
28313
|
-
allow: false,
|
|
28314
|
-
reason: "Approaching cost budget limit",
|
|
28315
|
-
escalateTo: "user"
|
|
28316
|
-
};
|
|
28317
|
-
}
|
|
28318
|
-
}
|
|
28319
|
-
return { allow: true };
|
|
28320
|
-
}
|
|
28321
|
-
};
|
|
28322
|
-
var highRiskApprovalRule = {
|
|
28323
|
-
id: "high-risk-approval",
|
|
28324
|
-
priority: 60,
|
|
28325
|
-
evaluate(context) {
|
|
28326
|
-
const state = context.pipelineState;
|
|
28327
|
-
const isHighRisk = state["highRisk"] === true;
|
|
28328
|
-
const approved = state["userApproved"] === true;
|
|
28329
|
-
if (isHighRisk && !approved) {
|
|
28330
|
-
return {
|
|
28331
|
-
allow: false,
|
|
28332
|
-
reason: "High-risk action requires user approval",
|
|
28333
|
-
escalateTo: "user"
|
|
28334
|
-
};
|
|
28335
|
-
}
|
|
28336
|
-
return { allow: true };
|
|
28337
|
-
}
|
|
28338
|
-
};
|
|
28339
|
-
var BUILT_IN_RULES = [
|
|
28340
|
-
trustTierRule,
|
|
28341
|
-
securityReviewRule,
|
|
28342
|
-
boundedIterationRule,
|
|
28343
|
-
costBudgetRule,
|
|
28344
|
-
highRiskApprovalRule
|
|
28345
|
-
];
|
|
28266
|
+
var BUILT_IN_RULES = [trustTierRule];
|
|
28346
28267
|
function createDefaultPolicyEngine() {
|
|
28347
28268
|
const engine = new PolicyEngine();
|
|
28348
28269
|
for (const rule of BUILT_IN_RULES) {
|
|
@@ -28482,6 +28403,10 @@ function buildBaseTaskContract(input) {
|
|
|
28482
28403
|
}
|
|
28483
28404
|
|
|
28484
28405
|
// src/pipeline/v2-delegate.ts
|
|
28406
|
+
function toPipelineStateSnapshot(metadata) {
|
|
28407
|
+
const trustTier = metadata["trustTier"];
|
|
28408
|
+
return typeof trustTier === "string" ? { trustTier } : {};
|
|
28409
|
+
}
|
|
28485
28410
|
var logger22 = createLogger({ component: "V2Delegate" });
|
|
28486
28411
|
function createDelegatePipeline(task) {
|
|
28487
28412
|
const plan = buildPlan(task);
|
|
@@ -28541,7 +28466,10 @@ function checkPipelinePolicy(task, stageType) {
|
|
|
28541
28466
|
taskId: task.id,
|
|
28542
28467
|
stageId: `pre-execution-${stageType}`,
|
|
28543
28468
|
stageType,
|
|
28544
|
-
|
|
28469
|
+
// #2932: typed extraction. The untyped `task.metadata` is the producer
|
|
28470
|
+
// surface — we narrow to the policy snapshot here so adding a new rule
|
|
28471
|
+
// forces an explicit producer wire-up at this single chokepoint.
|
|
28472
|
+
pipelineState: toPipelineStateSnapshot(task.metadata)
|
|
28545
28473
|
};
|
|
28546
28474
|
const result = evaluatePolicy2({ engine, mode }, context);
|
|
28547
28475
|
if (!result.allowed) {
|
|
@@ -34255,6 +34183,8 @@ function instrumentV2Pipeline(input, logger52) {
|
|
|
34255
34183
|
const tc = delegateInputToTaskContract(input);
|
|
34256
34184
|
void executeDelegatePipeline(tc).then((m) => {
|
|
34257
34185
|
logger52.info("V2 delegate pipeline", { ...m });
|
|
34186
|
+
}).catch((error) => {
|
|
34187
|
+
logger52.warn("V2 delegate instrumentation failed", { error: getErrorMessage(error) });
|
|
34258
34188
|
});
|
|
34259
34189
|
}
|
|
34260
34190
|
function notifyAndRecord(opts) {
|
|
@@ -41342,10 +41272,10 @@ var FileAuditStorage = class _FileAuditStorage {
|
|
|
41342
41272
|
};
|
|
41343
41273
|
|
|
41344
41274
|
// src/audit/audit-logger.ts
|
|
41345
|
-
import * as
|
|
41275
|
+
import * as crypto from "crypto";
|
|
41346
41276
|
function generateEventId() {
|
|
41347
41277
|
const timestamp = getTimeProvider().now().toString(36);
|
|
41348
|
-
const random =
|
|
41278
|
+
const random = crypto.randomBytes(6).toString("hex");
|
|
41349
41279
|
return `aud_${timestamp}_${random}`;
|
|
41350
41280
|
}
|
|
41351
41281
|
function computeEventHash(event) {
|
|
@@ -41358,7 +41288,7 @@ function computeEventHash(event) {
|
|
|
41358
41288
|
actor: event.actor,
|
|
41359
41289
|
previousHash: event.previousHash
|
|
41360
41290
|
});
|
|
41361
|
-
return
|
|
41291
|
+
return crypto.createHash("sha256").update(data).digest("hex");
|
|
41362
41292
|
}
|
|
41363
41293
|
function verifyEvent(event, index, priorHash) {
|
|
41364
41294
|
if (event.hash === void 0) {
|
|
@@ -41988,7 +41918,7 @@ async function tryIssueTriage(task) {
|
|
|
41988
41918
|
try {
|
|
41989
41919
|
const issueMatch = task.match(/github\.com\/([^/]+\/[^/]+)\/issues\/(\d+)/);
|
|
41990
41920
|
if (issueMatch === null) return null;
|
|
41991
|
-
const { createIssueTriage } = await import("./issue-triage-
|
|
41921
|
+
const { createIssueTriage } = await import("./issue-triage-CRUJLWFY.js");
|
|
41992
41922
|
const triage = createIssueTriage();
|
|
41993
41923
|
const owner = issueMatch[1] ?? "";
|
|
41994
41924
|
const num = issueMatch[2] ?? "";
|
|
@@ -42016,7 +41946,7 @@ var VALID_TEMPLATES = /* @__PURE__ */ new Set([
|
|
|
42016
41946
|
]);
|
|
42017
41947
|
async function classifyWithLLM(task) {
|
|
42018
41948
|
try {
|
|
42019
|
-
const { executeExpert: executeExpert2 } = await import("./expert-bridge-
|
|
41949
|
+
const { executeExpert: executeExpert2 } = await import("./expert-bridge-J5ZKCYL5.js");
|
|
42020
41950
|
const prompt = [
|
|
42021
41951
|
"Classify this task into exactly one pipeline template.",
|
|
42022
41952
|
"Templates: dev (implementation/bug fix/refactor), research (investigate/evaluate/compare),",
|
|
@@ -42776,14 +42706,15 @@ function recordOutcome(args) {
|
|
|
42776
42706
|
return;
|
|
42777
42707
|
}
|
|
42778
42708
|
try {
|
|
42709
|
+
const nowMs = getTimeProvider().now();
|
|
42779
42710
|
getOutcomeStore().append({
|
|
42780
|
-
id: `pipeline-${args.taskId}-${String(
|
|
42711
|
+
id: `pipeline-${args.taskId}-${String(nowMs)}`,
|
|
42781
42712
|
cli: args.cli,
|
|
42782
42713
|
category: args.category,
|
|
42783
42714
|
model: "pipeline",
|
|
42784
42715
|
success: args.success,
|
|
42785
42716
|
durationMs: args.durationMs,
|
|
42786
|
-
timestamp:
|
|
42717
|
+
timestamp: new Date(nowMs).toISOString(),
|
|
42787
42718
|
source: "delegate",
|
|
42788
42719
|
routingStage: args.routingStage,
|
|
42789
42720
|
retryCount: args.retryCount
|
|
@@ -42797,10 +42728,10 @@ var memoryInitPromise = null;
|
|
|
42797
42728
|
async function initPipelineMemory() {
|
|
42798
42729
|
if (cachedMemory !== null) return cachedMemory;
|
|
42799
42730
|
try {
|
|
42800
|
-
const { createSessionMemory: createSessionMemory2 } = await import("./session-memory-
|
|
42731
|
+
const { createSessionMemory: createSessionMemory2 } = await import("./session-memory-LV35VSBK.js");
|
|
42801
42732
|
const { getLearningDir } = await import("./learning-persistence-NX2KHL5T.js");
|
|
42802
42733
|
const mem = createSessionMemory2(getLearningDir());
|
|
42803
|
-
mem.startSession(`pipeline-${String(
|
|
42734
|
+
mem.startSession(`pipeline-${String(getTimeProvider().now())}`);
|
|
42804
42735
|
cachedMemory = {
|
|
42805
42736
|
recordLearning: (l) => {
|
|
42806
42737
|
try {
|
|
@@ -42853,7 +42784,7 @@ function recordRoutingExperience(category, success, durationMs) {
|
|
|
42853
42784
|
callRecord(routingMemoryCache);
|
|
42854
42785
|
return;
|
|
42855
42786
|
}
|
|
42856
|
-
void import("./routing-memory-
|
|
42787
|
+
void import("./routing-memory-7DA6WNSA.js").then(({ createRoutingMemory }) => {
|
|
42857
42788
|
routingMemoryCache = createRoutingMemory();
|
|
42858
42789
|
callRecord(routingMemoryCache);
|
|
42859
42790
|
}).catch((error) => {
|
|
@@ -42882,7 +42813,7 @@ ${text}` : "";
|
|
|
42882
42813
|
}
|
|
42883
42814
|
async function getWeatherContext() {
|
|
42884
42815
|
try {
|
|
42885
|
-
const { generateWeatherReport: generateWeatherReport2 } = await import("./weather-report-
|
|
42816
|
+
const { generateWeatherReport: generateWeatherReport2 } = await import("./weather-report-CCOWOPFG.js");
|
|
42886
42817
|
const report = generateWeatherReport2({ includeAdaptive: true });
|
|
42887
42818
|
const mappings = "recommendedMappings" in report ? report.recommendedMappings : [];
|
|
42888
42819
|
if (!Array.isArray(mappings) || mappings.length === 0) return "";
|
|
@@ -42900,7 +42831,7 @@ ${lines}
|
|
|
42900
42831
|
}
|
|
42901
42832
|
async function getMemoryContext(task) {
|
|
42902
42833
|
try {
|
|
42903
|
-
const { createSessionMemory: createSessionMemory2 } = await import("./session-memory-
|
|
42834
|
+
const { createSessionMemory: createSessionMemory2 } = await import("./session-memory-LV35VSBK.js");
|
|
42904
42835
|
const { getLearningDir } = await import("./learning-persistence-NX2KHL5T.js");
|
|
42905
42836
|
const memory = createSessionMemory2(getLearningDir(), { maxLearningsInContext: 10 });
|
|
42906
42837
|
const learnings = memory.searchLearnings(task.slice(0, 200));
|
|
@@ -43006,7 +42937,7 @@ ${contextBlock}`;
|
|
|
43006
42937
|
const strategy = config.votingStrategy ?? "higher_order";
|
|
43007
42938
|
await postProgress(config, "Vote", `Running consensus with ${strategy} strategy...`);
|
|
43008
42939
|
try {
|
|
43009
|
-
const { executeVoting } = await import("./consensus-vote-
|
|
42940
|
+
const { executeVoting } = await import("./consensus-vote-7PLEGFWZ.js");
|
|
43010
42941
|
const votingResult = await executeVoting(
|
|
43011
42942
|
{
|
|
43012
42943
|
proposal: plan.slice(0, 4e3),
|
|
@@ -43428,7 +43359,9 @@ function reinforcePlanBeliefs(bm, task, iterations) {
|
|
|
43428
43359
|
function applyPipelineHindsight(bm, task, sessionId, result) {
|
|
43429
43360
|
if (bm === void 0) return;
|
|
43430
43361
|
const record = {
|
|
43431
|
-
|
|
43362
|
+
// #2961: hindsightId is the persisted belief-store key — must go
|
|
43363
|
+
// through the time provider so replay/snapshot tests reproduce.
|
|
43364
|
+
hindsightId: `pipeline-${sessionId ?? "ephemeral"}-${getTimeProvider().now().toString(36)}`,
|
|
43432
43365
|
taskId: sessionId ?? task.slice(0, 40),
|
|
43433
43366
|
priorBeliefs: [],
|
|
43434
43367
|
expectedOutcome: "Pipeline completes with all gates passed",
|
|
@@ -43900,7 +43833,7 @@ async function extractSymbolsForTask(task) {
|
|
|
43900
43833
|
}
|
|
43901
43834
|
async function queryResearchRegistry(task) {
|
|
43902
43835
|
try {
|
|
43903
|
-
const { synthesizeResearch: synthesizeResearch2 } = await import("./research-helpers-synthesize-
|
|
43836
|
+
const { synthesizeResearch: synthesizeResearch2 } = await import("./research-helpers-synthesize-NMYYERCP.js");
|
|
43904
43837
|
const topic = task.split(/[.!?\n]/).filter((s) => s.trim().length > 10)[0]?.trim();
|
|
43905
43838
|
if (topic === void 0) return null;
|
|
43906
43839
|
const result = await synthesizeResearch2(topic.slice(0, 50));
|
|
@@ -43985,7 +43918,7 @@ function createScanStageWrapper() {
|
|
|
43985
43918
|
try {
|
|
43986
43919
|
const slug = ctx.task.match(/([a-zA-Z0-9._-]+\/[a-zA-Z0-9._-]+)/)?.[1];
|
|
43987
43920
|
if (slug !== void 0) {
|
|
43988
|
-
const { generateSecurityPlan: generateSecurityPlan2 } = await import("./repo-security-plan-
|
|
43921
|
+
const { generateSecurityPlan: generateSecurityPlan2 } = await import("./repo-security-plan-I4FZP7QA.js");
|
|
43989
43922
|
const plan = await generateSecurityPlan2({ repo: slug, maxScanners: 10 });
|
|
43990
43923
|
const recs = plan.recommendations.slice(0, 5).map((r) => `${r.priority}: ${r.displayName} (${r.category})`).join("; ");
|
|
43991
43924
|
ctx.sharedMemory.write("scan", "decision", { recommendations: recs });
|
|
@@ -46049,6 +45982,16 @@ var MAX_AXES = 6;
|
|
|
46049
45982
|
var MAX_AXIS_NAME_LENGTH = 64;
|
|
46050
45983
|
var MAX_PROPOSAL_LENGTH = 4e3;
|
|
46051
45984
|
var MAX_CONTEXT_LENGTH = 4e3;
|
|
45985
|
+
var FULL_PANEL = [
|
|
45986
|
+
"architect",
|
|
45987
|
+
"security",
|
|
45988
|
+
"devex",
|
|
45989
|
+
"ai_ml",
|
|
45990
|
+
"pm",
|
|
45991
|
+
"catfish",
|
|
45992
|
+
"scope_steward"
|
|
45993
|
+
];
|
|
45994
|
+
var QUICK_PANEL = ["architect", "security", "scope_steward"];
|
|
46052
45995
|
var SupplyChainTradeoffPanelInputSchema = z98.object({
|
|
46053
45996
|
proposal: z98.string().min(1).max(MAX_PROPOSAL_LENGTH).describe('The proposal under tradeoff review (e.g. "Should aegis-boot adopt cargo-nextest?")'),
|
|
46054
45997
|
axes: z98.array(z98.string().min(1).max(MAX_AXIS_NAME_LENGTH)).min(1).max(MAX_AXES).optional().describe(
|
|
@@ -46060,6 +46003,249 @@ var SupplyChainTradeoffPanelInputSchema = z98.object({
|
|
|
46060
46003
|
quickMode: z98.boolean().optional().default(false).describe("Use 3 voters (architect, security, scope_steward) instead of 7"),
|
|
46061
46004
|
simulate: z98.boolean().optional().default(false).describe("Use simulated voters (testing only)")
|
|
46062
46005
|
});
|
|
46006
|
+
function buildTradeoffProposal(input) {
|
|
46007
|
+
const axes = input.axes ?? DEFAULT_AXES;
|
|
46008
|
+
const parts = [];
|
|
46009
|
+
parts.push(`# Supply-Chain Tradeoff Review
|
|
46010
|
+
|
|
46011
|
+
`);
|
|
46012
|
+
parts.push(`**Proposal:** ${input.proposal}
|
|
46013
|
+
`);
|
|
46014
|
+
if (input.context !== void 0 && input.context !== "") {
|
|
46015
|
+
parts.push(`
|
|
46016
|
+
**Context:**
|
|
46017
|
+
${input.context}
|
|
46018
|
+
`);
|
|
46019
|
+
}
|
|
46020
|
+
parts.push(`
|
|
46021
|
+
## Axes
|
|
46022
|
+
|
|
46023
|
+
Evaluate the proposal along EACH of these axes independently:
|
|
46024
|
+
`);
|
|
46025
|
+
for (const axis of axes) parts.push(`- \`${axis}\`
|
|
46026
|
+
`);
|
|
46027
|
+
parts.push(`
|
|
46028
|
+
## Your task
|
|
46029
|
+
|
|
46030
|
+
`);
|
|
46031
|
+
parts.push(
|
|
46032
|
+
`For each axis, decide approve / reject / abstain with a one-line reason. It is normal \u2014 and expected \u2014 for the verdict to differ across axes (a proposal can be a win on update cadence and a loss on supply-chain risk).
|
|
46033
|
+
|
|
46034
|
+
`
|
|
46035
|
+
);
|
|
46036
|
+
parts.push(`After your reasoning, emit a JSON block with this exact shape:
|
|
46037
|
+
|
|
46038
|
+
`);
|
|
46039
|
+
parts.push("```json\n");
|
|
46040
|
+
parts.push('{\n "axes": {\n');
|
|
46041
|
+
axes.forEach((axis, idx) => {
|
|
46042
|
+
const comma = idx < axes.length - 1 ? "," : "";
|
|
46043
|
+
parts.push(` "${axis}": {"decision": "approve|reject|abstain", "reason": "..."}${comma}
|
|
46044
|
+
`);
|
|
46045
|
+
});
|
|
46046
|
+
parts.push(" }\n}\n");
|
|
46047
|
+
parts.push("```\n\n");
|
|
46048
|
+
parts.push(
|
|
46049
|
+
`Your overall vote (approve/reject/abstain) should reflect: approve if MOST axes are approve; reject if any axis is a strong reject; abstain otherwise.
|
|
46050
|
+
`
|
|
46051
|
+
);
|
|
46052
|
+
return parts.join("");
|
|
46053
|
+
}
|
|
46054
|
+
function extractJsonBlock(reasoning) {
|
|
46055
|
+
const fenced = /```json\s*\n([\s\S]*?)\n```/.exec(reasoning);
|
|
46056
|
+
if (fenced !== null) return fenced[1];
|
|
46057
|
+
const start = reasoning.indexOf("{");
|
|
46058
|
+
if (start === -1) return void 0;
|
|
46059
|
+
let depth = 0;
|
|
46060
|
+
for (let i = start; i < reasoning.length; i++) {
|
|
46061
|
+
if (reasoning[i] === "{") depth++;
|
|
46062
|
+
else if (reasoning[i] === "}") {
|
|
46063
|
+
depth--;
|
|
46064
|
+
if (depth === 0) {
|
|
46065
|
+
const candidate = reasoning.slice(start, i + 1);
|
|
46066
|
+
if (candidate.includes("axes") || candidate.includes("axis")) return candidate;
|
|
46067
|
+
}
|
|
46068
|
+
}
|
|
46069
|
+
}
|
|
46070
|
+
return void 0;
|
|
46071
|
+
}
|
|
46072
|
+
function isValidAxisDecision(d) {
|
|
46073
|
+
return d === "approve" || d === "reject" || d === "abstain";
|
|
46074
|
+
}
|
|
46075
|
+
function safeJsonParse2(raw) {
|
|
46076
|
+
try {
|
|
46077
|
+
return JSON.parse(raw);
|
|
46078
|
+
} catch {
|
|
46079
|
+
return void 0;
|
|
46080
|
+
}
|
|
46081
|
+
}
|
|
46082
|
+
function resolveAxesContainer(parsed) {
|
|
46083
|
+
if (typeof parsed !== "object" || parsed === null) return void 0;
|
|
46084
|
+
const root = parsed;
|
|
46085
|
+
const axesObj = root.axes ?? parsed;
|
|
46086
|
+
if (typeof axesObj !== "object") return void 0;
|
|
46087
|
+
return axesObj;
|
|
46088
|
+
}
|
|
46089
|
+
function parseSingleAxisEntry(entry) {
|
|
46090
|
+
if (typeof entry !== "object" || entry === null) return void 0;
|
|
46091
|
+
const e = entry;
|
|
46092
|
+
if (!isValidAxisDecision(e.decision)) return void 0;
|
|
46093
|
+
return { decision: e.decision, reason: typeof e.reason === "string" ? e.reason : "" };
|
|
46094
|
+
}
|
|
46095
|
+
function parseAxisVerdicts(reasoning, axes) {
|
|
46096
|
+
const block = extractJsonBlock(reasoning);
|
|
46097
|
+
if (block === void 0) return {};
|
|
46098
|
+
const parsed = safeJsonParse2(block);
|
|
46099
|
+
const container = resolveAxesContainer(parsed);
|
|
46100
|
+
if (container === void 0) return {};
|
|
46101
|
+
const out = {};
|
|
46102
|
+
for (const axis of axes) {
|
|
46103
|
+
const entry = parseSingleAxisEntry(container[axis]);
|
|
46104
|
+
if (entry !== void 0) out[axis] = entry;
|
|
46105
|
+
}
|
|
46106
|
+
return out;
|
|
46107
|
+
}
|
|
46108
|
+
function aggregateAxis(axis, votes) {
|
|
46109
|
+
const valid = votes.filter((v) => v.source !== "error" && axis in v.axisVotes);
|
|
46110
|
+
let approveCount = 0;
|
|
46111
|
+
let rejectCount = 0;
|
|
46112
|
+
let abstainCount = 0;
|
|
46113
|
+
const supporters = [];
|
|
46114
|
+
const reasons = [];
|
|
46115
|
+
for (const v of valid) {
|
|
46116
|
+
const entry = v.axisVotes[axis];
|
|
46117
|
+
if (entry === void 0) continue;
|
|
46118
|
+
if (entry.decision === "approve") {
|
|
46119
|
+
approveCount++;
|
|
46120
|
+
supporters.push(v.role);
|
|
46121
|
+
} else if (entry.decision === "reject") {
|
|
46122
|
+
rejectCount++;
|
|
46123
|
+
} else {
|
|
46124
|
+
abstainCount++;
|
|
46125
|
+
}
|
|
46126
|
+
if (entry.reason !== "") reasons.push(`${v.role}: ${entry.reason}`);
|
|
46127
|
+
}
|
|
46128
|
+
const decision = decideAxis(approveCount, rejectCount, abstainCount);
|
|
46129
|
+
const total = approveCount + rejectCount + abstainCount;
|
|
46130
|
+
const confidence = total === 0 ? 0 : Math.max(approveCount, rejectCount) / total;
|
|
46131
|
+
return {
|
|
46132
|
+
axis,
|
|
46133
|
+
decision,
|
|
46134
|
+
confidence,
|
|
46135
|
+
approveCount,
|
|
46136
|
+
rejectCount,
|
|
46137
|
+
abstainCount,
|
|
46138
|
+
summary: reasons.slice(0, 3).join(" | "),
|
|
46139
|
+
supportingVoters: supporters
|
|
46140
|
+
};
|
|
46141
|
+
}
|
|
46142
|
+
function decideAxis(approve, reject, abstain) {
|
|
46143
|
+
const total = approve + reject + abstain;
|
|
46144
|
+
if (total === 0) return "unknown";
|
|
46145
|
+
if (approve > reject && approve > abstain) return "approve";
|
|
46146
|
+
if (reject > approve && reject > abstain) return "reject";
|
|
46147
|
+
if (approve === reject && approve > 0) return "mixed";
|
|
46148
|
+
return "mixed";
|
|
46149
|
+
}
|
|
46150
|
+
function aggregatePanel(verdicts) {
|
|
46151
|
+
if (verdicts.length === 0) return "mixed";
|
|
46152
|
+
const allApprove = verdicts.every((v) => v.decision === "approve");
|
|
46153
|
+
if (allApprove) return "approve";
|
|
46154
|
+
const anyReject = verdicts.some((v) => v.decision === "reject");
|
|
46155
|
+
if (anyReject) return "reject";
|
|
46156
|
+
return "mixed";
|
|
46157
|
+
}
|
|
46158
|
+
function buildRecommendation(decision, verdicts) {
|
|
46159
|
+
if (decision === "approve") {
|
|
46160
|
+
return `Approve: all ${String(verdicts.length)} axes approve.`;
|
|
46161
|
+
}
|
|
46162
|
+
if (decision === "reject") {
|
|
46163
|
+
const blockers = verdicts.filter((v) => v.decision === "reject").map((v) => v.axis).join(", ");
|
|
46164
|
+
return `Reject: blocking concerns on ${blockers}.`;
|
|
46165
|
+
}
|
|
46166
|
+
const wins = verdicts.filter((v) => v.decision === "approve").map((v) => v.axis);
|
|
46167
|
+
const losses = verdicts.filter((v) => v.decision === "reject" || v.decision === "mixed" || v.decision === "unknown").map((v) => v.axis);
|
|
46168
|
+
return `Mixed: wins on ${wins.join(", ") || "(none)"}; concerns on ${losses.join(", ") || "(none)"}. Apply judgment.`;
|
|
46169
|
+
}
|
|
46170
|
+
function toPanelVote(result, axes) {
|
|
46171
|
+
const axisVotes = parseAxisVerdicts(result.vote.reasoning, axes);
|
|
46172
|
+
return {
|
|
46173
|
+
role: result.role,
|
|
46174
|
+
overallDecision: result.vote.decision,
|
|
46175
|
+
axisVotes,
|
|
46176
|
+
reasoning: result.vote.reasoning,
|
|
46177
|
+
source: result.source,
|
|
46178
|
+
cli: result.cli,
|
|
46179
|
+
...result.error !== void 0 && { errorMessage: result.error }
|
|
46180
|
+
};
|
|
46181
|
+
}
|
|
46182
|
+
async function tradeoffPanelHandler(args, ctx) {
|
|
46183
|
+
const parsed = SupplyChainTradeoffPanelInputSchema.safeParse(args);
|
|
46184
|
+
if (!parsed.success) {
|
|
46185
|
+
return toolStructuredError({
|
|
46186
|
+
errorCategory: "validation",
|
|
46187
|
+
message: `Validation error: ${formatZodError(parsed.error)}`
|
|
46188
|
+
});
|
|
46189
|
+
}
|
|
46190
|
+
const input = parsed.data;
|
|
46191
|
+
const axes = input.axes ?? DEFAULT_AXES;
|
|
46192
|
+
const roles = input.quickMode ? QUICK_PANEL : FULL_PANEL;
|
|
46193
|
+
const start = Date.now();
|
|
46194
|
+
try {
|
|
46195
|
+
const proposal = buildTradeoffProposal(input);
|
|
46196
|
+
const voteResults = await collectRealVotes({
|
|
46197
|
+
roles,
|
|
46198
|
+
proposal,
|
|
46199
|
+
simulate: input.simulate,
|
|
46200
|
+
logger: ctx.logger
|
|
46201
|
+
});
|
|
46202
|
+
const votes = voteResults.map((r) => toPanelVote(r, axes));
|
|
46203
|
+
const axisVerdicts = axes.map((a) => aggregateAxis(a, votes));
|
|
46204
|
+
const decision = aggregatePanel(axisVerdicts);
|
|
46205
|
+
const recommendation = buildRecommendation(decision, axisVerdicts);
|
|
46206
|
+
const voterErrors = votes.filter((v) => v.source === "error").length;
|
|
46207
|
+
const response = {
|
|
46208
|
+
proposal: input.proposal,
|
|
46209
|
+
axes,
|
|
46210
|
+
decision,
|
|
46211
|
+
axisVerdicts,
|
|
46212
|
+
recommendation,
|
|
46213
|
+
votes,
|
|
46214
|
+
voterErrors,
|
|
46215
|
+
durationMs: Date.now() - start
|
|
46216
|
+
};
|
|
46217
|
+
return toolSuccess(JSON.stringify(response, null, 2));
|
|
46218
|
+
} catch (error) {
|
|
46219
|
+
return toolStructuredError({
|
|
46220
|
+
errorCategory: "internal",
|
|
46221
|
+
message: `Tradeoff panel failed: ${getErrorMessage(error)}`
|
|
46222
|
+
});
|
|
46223
|
+
}
|
|
46224
|
+
}
|
|
46225
|
+
function registerSupplyChainTradeoffPanelTool(server, deps) {
|
|
46226
|
+
const logger52 = deps.logger ?? createLogger({ tool: "supply_chain_tradeoff_panel" });
|
|
46227
|
+
const description2 = "Run a structured per-axis tradeoff vote on an engineering proposal (#2294). Default axes: build_time_determinism / supply_chain_risk / update_cadence. Voters answer EACH axis independently; aggregator surfaces per-axis verdicts so legitimate tradeoffs are not masked by a single approve/reject.";
|
|
46228
|
+
const secureHandler = createSecureHandler(tradeoffPanelHandler, {
|
|
46229
|
+
toolName: "supply_chain_tradeoff_panel",
|
|
46230
|
+
rateLimiter: deps.rateLimiter,
|
|
46231
|
+
logger: logger52
|
|
46232
|
+
});
|
|
46233
|
+
const timeoutMs = getToolTimeout("supply_chain_tradeoff_panel", deps.security);
|
|
46234
|
+
const wrappedHandler = wrapToolWithTimeout("supply_chain_tradeoff_panel", secureHandler, {
|
|
46235
|
+
timeoutMs,
|
|
46236
|
+
logger: logger52
|
|
46237
|
+
});
|
|
46238
|
+
server.registerTool(
|
|
46239
|
+
"supply_chain_tradeoff_panel",
|
|
46240
|
+
{
|
|
46241
|
+
description: description2,
|
|
46242
|
+
inputSchema: SupplyChainTradeoffPanelInputSchema.shape,
|
|
46243
|
+
annotations: getToolAnnotations("supply_chain_tradeoff_panel")
|
|
46244
|
+
},
|
|
46245
|
+
toSdkCallback(wrappedHandler)
|
|
46246
|
+
);
|
|
46247
|
+
logger52.info("Registered supply_chain_tradeoff_panel tool");
|
|
46248
|
+
}
|
|
46063
46249
|
|
|
46064
46250
|
// src/mcp/tools/tool-annotations.ts
|
|
46065
46251
|
var TOOL_ANNOTATIONS = {
|
|
@@ -46415,6 +46601,152 @@ var TOOL_ANNOTATIONS = {
|
|
|
46415
46601
|
},
|
|
46416
46602
|
{ category: "implicit", description: "Consumes rate limit quota" }
|
|
46417
46603
|
]
|
|
46604
|
+
},
|
|
46605
|
+
research_add_source: {
|
|
46606
|
+
annotations: {
|
|
46607
|
+
title: "Research Add Source",
|
|
46608
|
+
readOnlyHint: false,
|
|
46609
|
+
destructiveHint: false,
|
|
46610
|
+
idempotentHint: false,
|
|
46611
|
+
openWorldHint: true
|
|
46612
|
+
},
|
|
46613
|
+
sideEffects: [
|
|
46614
|
+
{ category: "explicit", description: "Adds a non-paper source to the research registry" },
|
|
46615
|
+
{ category: "coupling", description: "New entries affect research_discover/research_query" }
|
|
46616
|
+
]
|
|
46617
|
+
},
|
|
46618
|
+
research_synthesize: {
|
|
46619
|
+
annotations: {
|
|
46620
|
+
title: "Research Synthesize",
|
|
46621
|
+
readOnlyHint: true,
|
|
46622
|
+
destructiveHint: false,
|
|
46623
|
+
idempotentHint: true,
|
|
46624
|
+
openWorldHint: false
|
|
46625
|
+
},
|
|
46626
|
+
sideEffects: [{ category: "implicit", description: "Reads research catalog + alignment map" }]
|
|
46627
|
+
},
|
|
46628
|
+
query_task_state: {
|
|
46629
|
+
annotations: {
|
|
46630
|
+
title: "Query Task State",
|
|
46631
|
+
readOnlyHint: true,
|
|
46632
|
+
destructiveHint: false,
|
|
46633
|
+
idempotentHint: true,
|
|
46634
|
+
openWorldHint: false
|
|
46635
|
+
},
|
|
46636
|
+
sideEffects: [
|
|
46637
|
+
{ category: "implicit", description: "Reads the structured task-state log (#2278)" }
|
|
46638
|
+
]
|
|
46639
|
+
},
|
|
46640
|
+
verify_audit_chain: {
|
|
46641
|
+
annotations: {
|
|
46642
|
+
title: "Verify Audit Chain",
|
|
46643
|
+
readOnlyHint: true,
|
|
46644
|
+
destructiveHint: false,
|
|
46645
|
+
idempotentHint: true,
|
|
46646
|
+
openWorldHint: false
|
|
46647
|
+
},
|
|
46648
|
+
sideEffects: [
|
|
46649
|
+
{
|
|
46650
|
+
category: "implicit",
|
|
46651
|
+
description: "Reads the immutable audit log and verifies the hash chain"
|
|
46652
|
+
}
|
|
46653
|
+
]
|
|
46654
|
+
},
|
|
46655
|
+
extract_symbols: {
|
|
46656
|
+
annotations: {
|
|
46657
|
+
title: "Extract Symbols",
|
|
46658
|
+
readOnlyHint: true,
|
|
46659
|
+
destructiveHint: false,
|
|
46660
|
+
idempotentHint: true,
|
|
46661
|
+
openWorldHint: false
|
|
46662
|
+
},
|
|
46663
|
+
sideEffects: [{ category: "implicit", description: "Reads source files and walks their ASTs" }]
|
|
46664
|
+
},
|
|
46665
|
+
search_codebase: {
|
|
46666
|
+
annotations: {
|
|
46667
|
+
title: "Search Codebase",
|
|
46668
|
+
readOnlyHint: true,
|
|
46669
|
+
destructiveHint: false,
|
|
46670
|
+
idempotentHint: true,
|
|
46671
|
+
openWorldHint: false
|
|
46672
|
+
},
|
|
46673
|
+
sideEffects: [
|
|
46674
|
+
{
|
|
46675
|
+
category: "implicit",
|
|
46676
|
+
description: "Reads source files and builds an in-memory symbol index"
|
|
46677
|
+
}
|
|
46678
|
+
]
|
|
46679
|
+
},
|
|
46680
|
+
run_dev_pipeline: {
|
|
46681
|
+
annotations: {
|
|
46682
|
+
title: "Run Dev Pipeline",
|
|
46683
|
+
readOnlyHint: false,
|
|
46684
|
+
destructiveHint: false,
|
|
46685
|
+
idempotentHint: false,
|
|
46686
|
+
openWorldHint: true
|
|
46687
|
+
},
|
|
46688
|
+
sideEffects: [
|
|
46689
|
+
{
|
|
46690
|
+
category: "explicit",
|
|
46691
|
+
description: "Executes the V2 dev pipeline (delegates to CLI adapters)"
|
|
46692
|
+
},
|
|
46693
|
+
{
|
|
46694
|
+
category: "implicit",
|
|
46695
|
+
description: "Consumes API tokens; persists outcomes and checkpoints"
|
|
46696
|
+
},
|
|
46697
|
+
{
|
|
46698
|
+
category: "coupling",
|
|
46699
|
+
description: "Writes routing/learning state consumed by future runs"
|
|
46700
|
+
}
|
|
46701
|
+
]
|
|
46702
|
+
},
|
|
46703
|
+
run_pipeline: {
|
|
46704
|
+
annotations: {
|
|
46705
|
+
title: "Run Pipeline",
|
|
46706
|
+
readOnlyHint: false,
|
|
46707
|
+
destructiveHint: false,
|
|
46708
|
+
idempotentHint: false,
|
|
46709
|
+
openWorldHint: true
|
|
46710
|
+
},
|
|
46711
|
+
sideEffects: [
|
|
46712
|
+
{ category: "explicit", description: "Executes a generic V2 pipeline TaskContract" },
|
|
46713
|
+
{ category: "implicit", description: "Consumes API tokens; emits pipeline events" },
|
|
46714
|
+
{ category: "coupling", description: "Writes policy/audit state consumed by other tools" }
|
|
46715
|
+
]
|
|
46716
|
+
},
|
|
46717
|
+
pr_review: {
|
|
46718
|
+
annotations: {
|
|
46719
|
+
title: "PR Review",
|
|
46720
|
+
readOnlyHint: false,
|
|
46721
|
+
destructiveHint: false,
|
|
46722
|
+
idempotentHint: false,
|
|
46723
|
+
openWorldHint: true
|
|
46724
|
+
},
|
|
46725
|
+
sideEffects: [
|
|
46726
|
+
{
|
|
46727
|
+
category: "explicit",
|
|
46728
|
+
description: "Runs multi-voter PR review with verification gate (#2233)"
|
|
46729
|
+
},
|
|
46730
|
+
{ category: "implicit", description: "Consumes API tokens across voter CLIs" },
|
|
46731
|
+
{ category: "coupling", description: "Records voter outcomes for weather report" }
|
|
46732
|
+
]
|
|
46733
|
+
},
|
|
46734
|
+
supply_chain_tradeoff_panel: {
|
|
46735
|
+
annotations: {
|
|
46736
|
+
title: "Supply-chain Tradeoff Panel",
|
|
46737
|
+
readOnlyHint: false,
|
|
46738
|
+
destructiveHint: false,
|
|
46739
|
+
idempotentHint: false,
|
|
46740
|
+
openWorldHint: true
|
|
46741
|
+
},
|
|
46742
|
+
sideEffects: [
|
|
46743
|
+
{
|
|
46744
|
+
category: "explicit",
|
|
46745
|
+
description: "Runs per-axis tradeoff vote (build_time_determinism / supply_chain_risk / update_cadence) (#2294)"
|
|
46746
|
+
},
|
|
46747
|
+
{ category: "implicit", description: "Consumes API tokens across voter CLIs" },
|
|
46748
|
+
{ category: "coupling", description: "Records voter outcomes for weather report" }
|
|
46749
|
+
]
|
|
46418
46750
|
}
|
|
46419
46751
|
};
|
|
46420
46752
|
function getMcpAnnotations(toolName) {
|
|
@@ -49596,7 +49928,7 @@ var GitHubTaskTracker = class {
|
|
|
49596
49928
|
cachedProvider = null;
|
|
49597
49929
|
async getProvider() {
|
|
49598
49930
|
if (this.cachedProvider !== null) return this.cachedProvider;
|
|
49599
|
-
const { createScmProvider } = await import("./factory-
|
|
49931
|
+
const { createScmProvider } = await import("./factory-DD2FPM3H.js");
|
|
49600
49932
|
const result = await createScmProvider({ repo: this.config.repo ?? "" });
|
|
49601
49933
|
if (!result.ok) throw new Error(`SCM provider error: ${result.error.message}`);
|
|
49602
49934
|
this.cachedProvider = result.value;
|
|
@@ -50267,6 +50599,7 @@ export {
|
|
|
50267
50599
|
aggregatePrDecisions,
|
|
50268
50600
|
buildPrReviewProposal,
|
|
50269
50601
|
registerPrReviewTool,
|
|
50602
|
+
registerSupplyChainTradeoffPanelTool,
|
|
50270
50603
|
createAnnotationsProxy,
|
|
50271
50604
|
createToolObservabilityProxy,
|
|
50272
50605
|
registerTools,
|
|
@@ -50301,4 +50634,4 @@ export {
|
|
|
50301
50634
|
detectBackend,
|
|
50302
50635
|
createTaskTracker
|
|
50303
50636
|
};
|
|
50304
|
-
//# sourceMappingURL=chunk-
|
|
50637
|
+
//# sourceMappingURL=chunk-M6KXR4LO.js.map
|