@harness-engineering/cli 4.0.1 → 4.1.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/agents/skills/claude-code/harness-autopilot/SKILL.md +9 -8
- package/dist/agents/skills/claude-code/pre-merge-brief/SKILL.md +86 -0
- package/dist/agents/skills/claude-code/pre-merge-brief/skill.yaml +67 -0
- package/dist/agents/skills/codex/harness-autopilot/SKILL.md +9 -8
- package/dist/agents/skills/codex/pre-merge-brief/SKILL.md +86 -0
- package/dist/agents/skills/codex/pre-merge-brief/skill.yaml +67 -0
- package/dist/agents/skills/cursor/harness-autopilot/SKILL.md +9 -8
- package/dist/agents/skills/cursor/pre-merge-brief/SKILL.md +86 -0
- package/dist/agents/skills/cursor/pre-merge-brief/skill.yaml +67 -0
- package/dist/agents/skills/gemini-cli/harness-autopilot/SKILL.md +9 -8
- package/dist/agents/skills/gemini-cli/pre-merge-brief/SKILL.md +86 -0
- package/dist/agents/skills/gemini-cli/pre-merge-brief/skill.yaml +67 -0
- package/dist/{agents-md-VJLYEH2S.js → agents-md-7L4PKKOM.js} +3 -3
- package/dist/analyzer-XRCV63KC-HLTEIKAJ.js +26 -0
- package/dist/{architecture-YQH2NYXY.js → architecture-RCHFDI7E.js} +4 -4
- package/dist/{assess-project-KOTAPAHD.js → assess-project-YUDPNRS6.js} +5 -3
- package/dist/bin/harness-mcp.js +14 -14
- package/dist/bin/harness.js +24 -24
- package/dist/{check-phase-gate-CHU2E3OU.js → check-phase-gate-56GS3A72.js} +4 -4
- package/dist/{chunk-JPVOI7GP.js → chunk-4SKWGVYD.js} +2 -2
- package/dist/{chunk-GHBFNLV2.js → chunk-ABRYIEWJ.js} +923 -614
- package/dist/{chunk-36GQREOE.js → chunk-AU4YPEIE.js} +3 -3
- package/dist/{chunk-OQ6KOQEV.js → chunk-DGVT4DBI.js} +3 -3
- package/dist/{chunk-I3CGCZJF.js → chunk-GLHLXTKC.js} +5 -5
- package/dist/{chunk-4VXFZSYF.js → chunk-GSYBGOY3.js} +1 -1
- package/dist/{chunk-UWVMJEUJ.js → chunk-IGWJRAJT.js} +1 -1
- package/dist/{chunk-YANR2RL7.js → chunk-N4AI2WFH.js} +1 -1
- package/dist/{chunk-5RSXUAMN.js → chunk-NCMJXBEO.js} +1 -1
- package/dist/{chunk-SEA2PFVI.js → chunk-OZSKLJQW.js} +1 -1
- package/dist/{chunk-AX5KGRM6.js → chunk-P4NA5OQX.js} +1 -1
- package/dist/{chunk-7PJCK7UE.js → chunk-RY2U77OY.js} +6 -6
- package/dist/{chunk-6SCYTIF4.js → chunk-RZQZXWEL.js} +32 -7
- package/dist/{chunk-MMLQPHZ5.js → chunk-UACYZCW4.js} +31 -13
- package/dist/{chunk-T746REAE.js → chunk-VG4G3R2V.js} +1 -1
- package/dist/{chunk-7TIJXWG3.js → chunk-XW5XVVMI.js} +2 -2
- package/dist/{chunk-E5EW5HVJ.js → chunk-XZNCONFG.js} +1 -1
- package/dist/{chunk-SDMV4QHM.js → chunk-Y33P35U3.js} +24 -6
- package/dist/{chunk-XAVMTAUT.js → chunk-Y5HPJMTM.js} +18 -2
- package/dist/{chunk-6YFHUIGT.js → chunk-YJYUJSWK.js} +58 -20
- package/dist/{chunk-AAUY53CC.js → chunk-YWRPQZL7.js} +1 -1
- package/dist/{chunk-M7F2PPN3.js → chunk-YXOPQEFZ.js} +2 -2
- package/dist/{chunk-RG3TNIUB.js → chunk-Z4XWWNYX.js} +86 -86
- package/dist/{chunk-EYMOPFSD.js → chunk-ZU6T7W3U.js} +2 -2
- package/dist/{ci-workflow-HO4WKGNG.js → ci-workflow-TFAA5BK7.js} +3 -3
- package/dist/{dist-6D2F2J57.js → dist-MCTEX5QH.js} +4 -2
- package/dist/{docs-FP47JONV.js → docs-BBMAN3CY.js} +4 -4
- package/dist/{engine-YUA6IYOG.js → engine-R2YH74AL.js} +3 -3
- package/dist/{entropy-DBW2INZU.js → entropy-5UP5N6AF.js} +6 -3
- package/dist/{feedback-BPHADTRQ.js → feedback-6MDCCFZL.js} +1 -1
- package/dist/{generate-agent-definitions-KPVGBGDY.js → generate-agent-definitions-KKAN5DB5.js} +4 -4
- package/dist/hooks/sentinel-pre.js +15 -138
- package/dist/index.d.ts +61 -0
- package/dist/index.js +24 -24
- package/dist/{loader-QOJQ6NZM.js → loader-2WT2ZE2T.js} +3 -3
- package/dist/{mcp-ZPX6O767.js → mcp-5V4LPMB3.js} +14 -14
- package/dist/{performance-FXYTGJGQ.js → performance-2N3CFXLR.js} +4 -4
- package/dist/{review-pipeline-2TFQ5OAE.js → review-pipeline-XZIGBU3Q.js} +3 -3
- package/dist/{runtime-XK6ZCHKE.js → runtime-POME3GTR.js} +3 -3
- package/dist/{security-4W2P5ZGI.js → security-QLJLMSIW.js} +1 -1
- package/dist/{state-events-ECQAIZLU.js → state-events-YY5KBZTC.js} +3 -3
- package/dist/{validate-64KTEGIE.js → validate-VZORVK43.js} +4 -4
- package/dist/{validate-cross-check-J5PVGICB.js → validate-cross-check-OYKEDCST.js} +3 -3
- package/package.json +5 -4
- package/dist/analyzer-V633GUHY-OV335HGM.js +0 -26
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
resolveProjectConfig
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-OZSKLJQW.js";
|
|
4
4
|
import {
|
|
5
5
|
sanitizePath
|
|
6
6
|
} from "./chunk-W6Y7ZW3Y.js";
|
|
@@ -49,7 +49,7 @@ async function handleValidateProject(input) {
|
|
|
49
49
|
checks.config = "pass";
|
|
50
50
|
const config = configResult.value;
|
|
51
51
|
try {
|
|
52
|
-
const core = await import("./dist-
|
|
52
|
+
const core = await import("./dist-MCTEX5QH.js");
|
|
53
53
|
if (typeof core.validateFileStructure === "function" && Array.isArray(config.conventions)) {
|
|
54
54
|
const conventions = config.conventions;
|
|
55
55
|
const structureResult = await core.validateFileStructure(projectPath, conventions);
|
|
@@ -68,7 +68,7 @@ async function handleValidateProject(input) {
|
|
|
68
68
|
} catch {
|
|
69
69
|
}
|
|
70
70
|
try {
|
|
71
|
-
const core = await import("./dist-
|
|
71
|
+
const core = await import("./dist-MCTEX5QH.js");
|
|
72
72
|
if (typeof core.validateAgentsMap === "function") {
|
|
73
73
|
const agentsMapPath = path.join(projectPath, "AGENTS.md");
|
|
74
74
|
const agentsResult = await core.validateAgentsMap(agentsMapPath);
|
|
@@ -33,7 +33,7 @@ var createSelfReviewDefinition = {
|
|
|
33
33
|
};
|
|
34
34
|
async function handleCreateSelfReview(input) {
|
|
35
35
|
try {
|
|
36
|
-
const { parseDiff, createSelfReview } = await import("./dist-
|
|
36
|
+
const { parseDiff, createSelfReview } = await import("./dist-MCTEX5QH.js");
|
|
37
37
|
const parseResult = parseDiff(input.diff);
|
|
38
38
|
if (!parseResult.ok) {
|
|
39
39
|
return resultToMcpResponse(parseResult);
|
|
@@ -119,7 +119,7 @@ var analyzeDiffDefinition = {
|
|
|
119
119
|
};
|
|
120
120
|
async function handleAnalyzeDiff(input) {
|
|
121
121
|
try {
|
|
122
|
-
const { parseDiff, analyzeDiff } = await import("./dist-
|
|
122
|
+
const { parseDiff, analyzeDiff } = await import("./dist-MCTEX5QH.js");
|
|
123
123
|
const parseResult = parseDiff(input.diff);
|
|
124
124
|
if (!parseResult.ok) {
|
|
125
125
|
return resultToMcpResponse(parseResult);
|
|
@@ -195,7 +195,7 @@ var requestPeerReviewDefinition = {
|
|
|
195
195
|
};
|
|
196
196
|
async function handleRequestPeerReview(input) {
|
|
197
197
|
try {
|
|
198
|
-
const { parseDiff, requestPeerReview } = await import("./dist-
|
|
198
|
+
const { parseDiff, requestPeerReview } = await import("./dist-MCTEX5QH.js");
|
|
199
199
|
const parseResult = parseDiff(input.diff);
|
|
200
200
|
if (!parseResult.ok) {
|
|
201
201
|
return resultToMcpResponse(parseResult);
|
|
@@ -7,10 +7,10 @@ import {
|
|
|
7
7
|
import {
|
|
8
8
|
findConfigFile,
|
|
9
9
|
loadConfig
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-Y5HPJMTM.js";
|
|
11
11
|
import {
|
|
12
12
|
init_dist
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-UACYZCW4.js";
|
|
14
14
|
import {
|
|
15
15
|
Ok
|
|
16
16
|
} from "./chunk-BDGTZRZ6.js";
|
|
@@ -50,12 +50,12 @@ async function handleCheckDocs(input) {
|
|
|
50
50
|
const projectPath = sanitizePath(input.path);
|
|
51
51
|
const scope = input.scope ?? "coverage";
|
|
52
52
|
if (scope === "integrity") {
|
|
53
|
-
const { validateKnowledgeMap } = await import("./dist-
|
|
53
|
+
const { validateKnowledgeMap } = await import("./dist-MCTEX5QH.js");
|
|
54
54
|
const result2 = await validateKnowledgeMap(projectPath);
|
|
55
55
|
return resultToMcpResponse(result2);
|
|
56
56
|
}
|
|
57
57
|
if (scope === "all") {
|
|
58
|
-
const { checkDocCoverage: checkDocCoverage2, validateKnowledgeMap } = await import("./dist-
|
|
58
|
+
const { checkDocCoverage: checkDocCoverage2, validateKnowledgeMap } = await import("./dist-MCTEX5QH.js");
|
|
59
59
|
const domain2 = input.domain ?? "src";
|
|
60
60
|
const { loadGraphStore: loadGraphStore2 } = await import("./graph-loader-STFGYKZH.js");
|
|
61
61
|
const store2 = await loadGraphStore2(projectPath);
|
|
@@ -94,7 +94,7 @@ async function handleCheckDocs(input) {
|
|
|
94
94
|
}
|
|
95
95
|
return resultToMcpResponse(Ok({ coverage, integrity }));
|
|
96
96
|
}
|
|
97
|
-
const { checkDocCoverage } = await import("./dist-
|
|
97
|
+
const { checkDocCoverage } = await import("./dist-MCTEX5QH.js");
|
|
98
98
|
const domain = input.domain ?? "src";
|
|
99
99
|
const { loadGraphStore } = await import("./graph-loader-STFGYKZH.js");
|
|
100
100
|
const store = await loadGraphStore(projectPath);
|
|
@@ -7,10 +7,10 @@ import {
|
|
|
7
7
|
import {
|
|
8
8
|
findConfigFile,
|
|
9
9
|
loadConfig
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-Y5HPJMTM.js";
|
|
11
11
|
import {
|
|
12
12
|
init_dist
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-UACYZCW4.js";
|
|
14
14
|
import {
|
|
15
15
|
Ok
|
|
16
16
|
} from "./chunk-BDGTZRZ6.js";
|
|
@@ -35,7 +35,7 @@ var checkPerformanceDefinition = {
|
|
|
35
35
|
};
|
|
36
36
|
async function handleCheckPerformance(input) {
|
|
37
37
|
try {
|
|
38
|
-
const { EntropyAnalyzer } = await import("./dist-
|
|
38
|
+
const { EntropyAnalyzer } = await import("./dist-MCTEX5QH.js");
|
|
39
39
|
const typeFilter = input.type ?? "all";
|
|
40
40
|
const projectPath = sanitizePath(input.path);
|
|
41
41
|
let entryPoints;
|
|
@@ -98,7 +98,7 @@ var getPerfBaselinesDefinition = {
|
|
|
98
98
|
};
|
|
99
99
|
async function handleGetPerfBaselines(input) {
|
|
100
100
|
try {
|
|
101
|
-
const { BaselineManager } = await import("./dist-
|
|
101
|
+
const { BaselineManager } = await import("./dist-MCTEX5QH.js");
|
|
102
102
|
const manager = new BaselineManager(sanitizePath(input.path));
|
|
103
103
|
const baselines = manager.load();
|
|
104
104
|
return resultToMcpResponse(
|
|
@@ -146,7 +146,7 @@ var updatePerfBaselinesDefinition = {
|
|
|
146
146
|
};
|
|
147
147
|
async function handleUpdatePerfBaselines(input) {
|
|
148
148
|
try {
|
|
149
|
-
const { BaselineManager } = await import("./dist-
|
|
149
|
+
const { BaselineManager } = await import("./dist-MCTEX5QH.js");
|
|
150
150
|
const manager = new BaselineManager(sanitizePath(input.path));
|
|
151
151
|
manager.save(input.results, input.commitHash);
|
|
152
152
|
const updated = manager.load();
|
|
@@ -176,7 +176,7 @@ var getCriticalPathsDefinition = {
|
|
|
176
176
|
};
|
|
177
177
|
async function handleGetCriticalPaths(input) {
|
|
178
178
|
try {
|
|
179
|
-
const { CriticalPathResolver } = await import("./dist-
|
|
179
|
+
const { CriticalPathResolver } = await import("./dist-MCTEX5QH.js");
|
|
180
180
|
const resolver = new CriticalPathResolver(sanitizePath(input.path));
|
|
181
181
|
const result = await resolver.resolve();
|
|
182
182
|
return resultToMcpResponse(Ok(result));
|
|
@@ -6,6 +6,29 @@ import {
|
|
|
6
6
|
} from "./chunk-W6Y7ZW3Y.js";
|
|
7
7
|
|
|
8
8
|
// src/mcp/tools/assess-project.ts
|
|
9
|
+
import * as fs from "fs";
|
|
10
|
+
import * as path from "path";
|
|
11
|
+
var TURBO_LINT = { command: "npx", args: ["turbo", "run", "lint", "--force"] };
|
|
12
|
+
function resolveLintCommand(projectPath) {
|
|
13
|
+
let linter;
|
|
14
|
+
try {
|
|
15
|
+
const raw = fs.readFileSync(path.join(projectPath, "harness.config.json"), "utf-8");
|
|
16
|
+
const config = JSON.parse(raw);
|
|
17
|
+
linter = config.tooling?.linter ?? config.template?.tooling?.linter;
|
|
18
|
+
} catch {
|
|
19
|
+
return TURBO_LINT;
|
|
20
|
+
}
|
|
21
|
+
switch (linter) {
|
|
22
|
+
case "ruff":
|
|
23
|
+
return { command: "ruff", args: ["check", "."] };
|
|
24
|
+
case "golangci-lint":
|
|
25
|
+
return { command: "golangci-lint", args: ["run"] };
|
|
26
|
+
case "clippy":
|
|
27
|
+
return { command: "cargo", args: ["clippy"] };
|
|
28
|
+
default:
|
|
29
|
+
return TURBO_LINT;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
9
32
|
var assessProjectDefinition = {
|
|
10
33
|
name: "assess_project",
|
|
11
34
|
description: "Run all project health checks in parallel and return a unified report. Checks: validate, dependencies, docs, entropy, security, performance, lint.",
|
|
@@ -75,7 +98,7 @@ async function handleAssessProject(input) {
|
|
|
75
98
|
let validateResult = null;
|
|
76
99
|
if (checksToRun.has("validate")) {
|
|
77
100
|
try {
|
|
78
|
-
const { handleValidateProject } = await import("./validate-
|
|
101
|
+
const { handleValidateProject } = await import("./validate-VZORVK43.js");
|
|
79
102
|
const result = await handleValidateProject({ path: projectPath });
|
|
80
103
|
const out = parseToolResponse(result, "validate");
|
|
81
104
|
if ("error" in out) {
|
|
@@ -104,7 +127,7 @@ async function handleAssessProject(input) {
|
|
|
104
127
|
parallelChecks.push(
|
|
105
128
|
(async () => {
|
|
106
129
|
try {
|
|
107
|
-
const { handleCheckDependencies } = await import("./architecture-
|
|
130
|
+
const { handleCheckDependencies } = await import("./architecture-RCHFDI7E.js");
|
|
108
131
|
const result = await handleCheckDependencies({ path: projectPath });
|
|
109
132
|
const out = parseToolResponse(result, "deps");
|
|
110
133
|
if ("error" in out) return out.error;
|
|
@@ -132,7 +155,7 @@ async function handleAssessProject(input) {
|
|
|
132
155
|
parallelChecks.push(
|
|
133
156
|
(async () => {
|
|
134
157
|
try {
|
|
135
|
-
const { handleCheckDocs } = await import("./docs-
|
|
158
|
+
const { handleCheckDocs } = await import("./docs-BBMAN3CY.js");
|
|
136
159
|
const result = await handleCheckDocs({ path: projectPath, scope: "coverage" });
|
|
137
160
|
const out = parseToolResponse(result, "docs");
|
|
138
161
|
if ("error" in out) return out.error;
|
|
@@ -160,7 +183,7 @@ async function handleAssessProject(input) {
|
|
|
160
183
|
parallelChecks.push(
|
|
161
184
|
(async () => {
|
|
162
185
|
try {
|
|
163
|
-
const { handleDetectEntropy } = await import("./entropy-
|
|
186
|
+
const { handleDetectEntropy } = await import("./entropy-5UP5N6AF.js");
|
|
164
187
|
const result = await handleDetectEntropy({ path: projectPath, type: "all" });
|
|
165
188
|
const out = parseToolResponse(result, "entropy");
|
|
166
189
|
if ("error" in out) return out.error;
|
|
@@ -191,7 +214,7 @@ async function handleAssessProject(input) {
|
|
|
191
214
|
parallelChecks.push(
|
|
192
215
|
(async () => {
|
|
193
216
|
try {
|
|
194
|
-
const { handleRunSecurityScan } = await import("./security-
|
|
217
|
+
const { handleRunSecurityScan } = await import("./security-QLJLMSIW.js");
|
|
195
218
|
const result = await handleRunSecurityScan({ path: projectPath });
|
|
196
219
|
const out = parseToolResponse(result, "security");
|
|
197
220
|
if ("error" in out) return out.error;
|
|
@@ -224,7 +247,7 @@ async function handleAssessProject(input) {
|
|
|
224
247
|
parallelChecks.push(
|
|
225
248
|
(async () => {
|
|
226
249
|
try {
|
|
227
|
-
const { handleCheckPerformance } = await import("./performance-
|
|
250
|
+
const { handleCheckPerformance } = await import("./performance-2N3CFXLR.js");
|
|
228
251
|
const result = await handleCheckPerformance({ path: projectPath });
|
|
229
252
|
if ("isError" in result && result.isError) {
|
|
230
253
|
const msg = result.content[0]?.text ?? "Performance check failed";
|
|
@@ -266,7 +289,8 @@ async function handleAssessProject(input) {
|
|
|
266
289
|
(async () => {
|
|
267
290
|
try {
|
|
268
291
|
const { execFileSync } = await import("child_process");
|
|
269
|
-
const
|
|
292
|
+
const { command, args } = resolveLintCommand(projectPath);
|
|
293
|
+
const output = execFileSync(command, args, {
|
|
270
294
|
cwd: projectPath,
|
|
271
295
|
encoding: "utf-8",
|
|
272
296
|
timeout: 6e4,
|
|
@@ -324,6 +348,7 @@ async function handleAssessProject(input) {
|
|
|
324
348
|
}
|
|
325
349
|
|
|
326
350
|
export {
|
|
351
|
+
resolveLintCommand,
|
|
327
352
|
assessProjectDefinition,
|
|
328
353
|
parseToolResponse,
|
|
329
354
|
handleAssessProject
|
|
@@ -22,8 +22,8 @@ import {
|
|
|
22
22
|
getDefaultRegistry,
|
|
23
23
|
getOutline,
|
|
24
24
|
getParser,
|
|
25
|
-
|
|
26
|
-
|
|
25
|
+
init_chunk_IHRT6II2,
|
|
26
|
+
init_chunk_JZ7UO3OF,
|
|
27
27
|
parseFile,
|
|
28
28
|
parseSize,
|
|
29
29
|
readFileContent,
|
|
@@ -31,7 +31,7 @@ import {
|
|
|
31
31
|
resetParserCache,
|
|
32
32
|
resolveFileToLayer,
|
|
33
33
|
validateDependencies
|
|
34
|
-
} from "./chunk-
|
|
34
|
+
} from "./chunk-YJYUJSWK.js";
|
|
35
35
|
import {
|
|
36
36
|
AuthAuditEntrySchema,
|
|
37
37
|
AuthTokenPublicSchema,
|
|
@@ -123,7 +123,7 @@ import {
|
|
|
123
123
|
__export
|
|
124
124
|
} from "./chunk-KFQGP6VL.js";
|
|
125
125
|
|
|
126
|
-
// ../core/dist/chunk-
|
|
126
|
+
// ../core/dist/chunk-OFA2AAZK.mjs
|
|
127
127
|
import { createHash } from "crypto";
|
|
128
128
|
import { readFileSync, writeFileSync, renameSync, mkdirSync, existsSync } from "fs";
|
|
129
129
|
import { randomBytes } from "crypto";
|
|
@@ -759,10 +759,10 @@ async function toHaveMaxDepDepth(received, maxDepth) {
|
|
|
759
759
|
};
|
|
760
760
|
}
|
|
761
761
|
var CircularDepsCollector, LayerViolationCollector, ArchBaselineManager, ComplexityCollector, CouplingCollector, ForbiddenImportCollector, ModuleSizeCollector, DepDepthCollector, defaultCollectors, archMatchers;
|
|
762
|
-
var
|
|
763
|
-
"../core/dist/chunk-
|
|
762
|
+
var init_chunk_OFA2AAZK = __esm({
|
|
763
|
+
"../core/dist/chunk-OFA2AAZK.mjs"() {
|
|
764
764
|
"use strict";
|
|
765
|
-
|
|
765
|
+
init_chunk_JZ7UO3OF();
|
|
766
766
|
init_chunk_IIEDD47I();
|
|
767
767
|
init_dist2();
|
|
768
768
|
init_dist2();
|
|
@@ -1718,6 +1718,7 @@ __export(dist_exports, {
|
|
|
1718
1718
|
parseManifest: () => parseManifest,
|
|
1719
1719
|
parseMeta: () => parseMeta,
|
|
1720
1720
|
parseProtectedRegions: () => parseProtectedRegions,
|
|
1721
|
+
parseReferencedIssues: () => parseReferencedIssues,
|
|
1721
1722
|
parseRoadmap: () => parseRoadmap,
|
|
1722
1723
|
parseSections: () => parseSections,
|
|
1723
1724
|
parseSecurityConfig: () => parseSecurityConfig,
|
|
@@ -8970,10 +8971,12 @@ async function runEntropyCheck(projectRoot, config) {
|
|
|
8970
8971
|
const entropyConfig = config.entropy || {};
|
|
8971
8972
|
const perfConfig = config.performance || {};
|
|
8972
8973
|
const entryPoints = entropyConfig.entryPoints ?? perfConfig.entryPoints;
|
|
8974
|
+
const driftConfig = entropyConfig.drift;
|
|
8973
8975
|
const analyzer = new EntropyAnalyzer({
|
|
8974
8976
|
rootDir: projectRoot,
|
|
8975
8977
|
...entryPoints ? { entryPoints } : {},
|
|
8976
|
-
|
|
8978
|
+
...driftConfig?.docPaths ? { docPaths: driftConfig.docPaths } : {},
|
|
8979
|
+
analyze: { drift: driftConfig ?? true, deadCode: true, patterns: false }
|
|
8977
8980
|
});
|
|
8978
8981
|
const result = await analyzer.analyze();
|
|
8979
8982
|
if (!result.ok) {
|
|
@@ -12722,6 +12725,20 @@ async function fetchWithRetry(fetchFn, input, init, opts = RETRY_DEFAULTS) {
|
|
|
12722
12725
|
}
|
|
12723
12726
|
return lastResponse;
|
|
12724
12727
|
}
|
|
12728
|
+
function parseReferencedIssues(text) {
|
|
12729
|
+
if (!text) return [];
|
|
12730
|
+
const re = /(?:[A-Za-z0-9_.-]+\/[A-Za-z0-9_.-]+)?#(\d+)/g;
|
|
12731
|
+
const seen = /* @__PURE__ */ new Set();
|
|
12732
|
+
const out = [];
|
|
12733
|
+
for (const m of text.matchAll(re)) {
|
|
12734
|
+
const n = Number.parseInt(m[1], 10);
|
|
12735
|
+
if (Number.isInteger(n) && n > 0 && !seen.has(n)) {
|
|
12736
|
+
seen.add(n);
|
|
12737
|
+
out.push(n);
|
|
12738
|
+
}
|
|
12739
|
+
}
|
|
12740
|
+
return out;
|
|
12741
|
+
}
|
|
12725
12742
|
function isValidTrackerShape(tracker) {
|
|
12726
12743
|
if (!tracker || typeof tracker !== "object") return false;
|
|
12727
12744
|
const t = tracker;
|
|
@@ -15133,7 +15150,7 @@ function arrayLen(arr) {
|
|
|
15133
15150
|
return Array.isArray(arr) ? arr.length : 0;
|
|
15134
15151
|
}
|
|
15135
15152
|
async function gatherEntropyBlock(projectPath) {
|
|
15136
|
-
const { EntropyAnalyzer: EntropyAnalyzer2 } = await import("./analyzer-
|
|
15153
|
+
const { EntropyAnalyzer: EntropyAnalyzer2 } = await import("./analyzer-XRCV63KC-HLTEIKAJ.js");
|
|
15137
15154
|
const analyzer = new EntropyAnalyzer2({
|
|
15138
15155
|
rootDir: projectPath,
|
|
15139
15156
|
include: ["src/**/*.ts", "src/**/*.tsx", "packages/*/src/**/*.ts"],
|
|
@@ -16049,9 +16066,9 @@ function writeStrategyDoc(doc, opts) {
|
|
|
16049
16066
|
var WHATWG_BAD_PORTS, BAD_PORT_SET, VALID_TYPES, CONVENTIONAL_PATTERN, LOOKBACK_PATTERN, PulseDbSourceSchema, PulseSourcesSchema, PulseConfigSchema, KNOWN_SECTION_NAMES, ISO_DATE, PLACEHOLDER_INLINE, REQUIRED, ALLOWED, StrategyFrontmatterSchema, StrategySectionSchema, StrategyDocSchema, BUG_TRACK_CATEGORIES, KNOWLEDGE_TRACK_CATEGORIES, ALL_SOLUTION_CATEGORIES, ISO_DATE2, BugTrackSchema, KnowledgeTrackSchema, BaseFrontmatter, SolutionDocFrontmatterSchema, TRACK_CATEGORIES, DEFAULT_AGNIX_TIMEOUT_MS, HARNESS_AGNIX_DISABLE, HARNESS_AGNIX_BIN, CLAUDE_MD_WARN_BYTES, CLAUDE_MD_ERROR_BYTES, CONTEXT_FILES, MIN_DESCRIPTION_LENGTH, SETTINGS_PATHS, KNOWN_HOOK_EVENTS, MCP_SETTINGS_FILES, REQUIRED_SECTIONS, SETTINGS_FILES, KNOWN_AGNIX_TOOLS, ROADMAP_READ_ALLOWLIST, ROADMAP_MD, DYNAMIC_ROADMAP_IO, KEBAB_CASE, TICKET_ID, DEFAULT_SECTIONS, DEFAULT_RATIOS, NODE_TYPE_TO_CATEGORY, SECTION_LEVEL_MAP, DEFAULT_LEVEL, DEFAULT_BUDGET, DEFAULT_LOADER_CONFIG, LEVEL_FRACTIONS, PHASE_PRIORITIES, ManifestSchema, BundleConstraintsSchema, BundleSchema, ContributionsSchema, LockfilePackageSchema, LockfileSchema, SharableLayerSchema, SharableForbiddenImportSchema, SharableBoundaryConfigSchema, SharableSecurityRulesSchema, VALID_SCOPES, LINE_PATTERN, START_PATTERN, END_PATTERN, readFile72, writeFile32, unlink22, mkdir22, copyFile2, DEFAULT_FIX_CONFIG, EXPORT_TYPE_KEYWORD, ALWAYS_UNSAFE_TYPES, idCounter, DEAD_CODE_FIX_ACTIONS, MustExportRuleSchema, MustExportDefaultRuleSchema, NoExportRuleSchema, MustImportRuleSchema, NoImportRuleSchema, NamingRuleSchema, MaxExportsRuleSchema, MaxLinesRuleSchema, RequireJSDocRuleSchema, RuleSchema, ConfigPatternSchema, PatternConfigSchema, DriftConfigSchema, DeadCodeConfigSchema, EntropyConfigSchema, BaselineManager, BenchmarkRunner, RegressionDetector, SOURCE_EXTENSIONS, FUNCTION_DECL_RE, CONST_DECL_RE, CriticalPathResolver, NoOpTelemetryAdapter, NoOpExecutor, ConsoleSink, feedbackConfig, ChecklistBuilder, AgentActionEmitter, globalEmitter, FileSink, NoOpSink, ConfidenceTierSchema, RegressionResultSchema, DirectionSchema, CategoryForecastSchema, SpecImpactSignalsSchema, SpecImpactEstimateSchema, ContributingFeatureSchema, AdjustedForecastSchema, PredictionWarningSchema, StabilityForecastSchema, PredictionResultSchema, PredictionOptionsSchema, VALID_STATUSES, EM_DASH, VALID_PRIORITIES, EM_DASH2, H3_NAME, FRONTMATTER, STATUS_RANK, META_FILE, ShardStore, MonolithStore, ALL_CATEGORIES, DIRECTION_THRESHOLD, PredictionEngine, DEFAULT_COEFFICIENTS, SpecImpactEstimator, EMPTY_HISTORY, ViolationHistoryManager, NORMALIZERS, MAX_SAMPLES, DEFAULT_WINDOW_WEEKS, DEFAULT_MIN_OCCURRENCES, FailureEntrySchema, HandoffSchema, GateCheckSchema, GateResultSchema, GateConfigSchema, HarnessStateSchema, DEFAULT_STATE, HARNESS_DIR, STATE_FILE, LEARNINGS_FILE, FAILURES_FILE, HANDOFF_FILE, GATE_CONFIG_FILE, INDEX_FILE, SESSIONS_DIR, SESSION_INDEX_FILE, SUMMARY_FILE, SESSION_STATE_FILE, ARCHIVE_DIR, CONTENT_HASHES_FILE, StreamInfoSchema, StreamIndexSchema, DEFAULT_STREAM_INDEX, EVENT_LOG_FILE, EVENT_BLOBS_DIR, MAX_LINE_BYTES, BLOB_REF_KEY, SNAPSHOT_FILE, STREAMS_DIR, STREAM_NAME_REGEX, branchCache, BRANCH_CACHE_TTL_MS, STATE_FILES, STATE_DIRS, MAX_CACHE_ENTRIES, learningsCacheMap, WEIGHTS, LOCK_RETRIES, LOCK_BACKOFFS, PROMOTABLE_OUTCOMES, failuresCacheMap, FAILURE_LINE_REGEX, SAFE_GATE_COMMAND, event_sourcing_exports, ScopeSchema, envelopeShape, StateImportedPayload, DecisionRecordedPayload, PositionSetPayload, BlockerOpenedPayload, BlockerResolvedPayload, ProgressSetPayload, SessionSummarizedPayload, LANES, LaneSchema, TaskRegisteredPayload, LaneTransitionedPayload, UserInputCapturedPayload, ApprovalRequestedPayload, ApprovalResolvedPayload, EventSchema, BlobRefSchema, StoredEventSchema, cached, localCounters, CORE_HANDLERS, KIND_LABEL, MATERIALIZE_DEBOUNCE_MS, pendingTimers, inflightMaterializes, ensured, TERMINAL_LANES, NON_TERMINAL, TABLE, RuleRegistry, DEFAULT_SECURITY_CONFIG, RuleOverrideSchema, SecurityConfigSchema, secretRules, injectionRules, xssRules, cryptoRules, pathTraversalRules, networkRules, deserializationRules, agentConfigRules, mcpRules, insecureDefaultsRules, sharpEdgesRules, nodeRules, expressRules, reactRules, goRules, SecurityScanner, OSV_ENDPOINT, DEFAULT_CACHE_DIR, DEFAULT_TTL_HOURS, hiddenUnicodePatterns, reRolingPatterns, permissionEscalationPatterns, encodedPayloadPatterns, indirectInjectionPatterns, contextManipulationPatterns, socialEngineeringPatterns, suspiciousPatterns, ALL_PATTERNS, DESTRUCTIVE_BASH, TAINT_DURATION_MS, DEFAULT_SESSION_ID, SecurityCategorySnapshotSchema, SupplyChainSnapshotSchema, SecurityTimelineSnapshotSchema, FindingLifecycleSchema, SecurityTimelineFileSchema, DirectionSchema2, SecurityTrendLineSchema, TrendAttributionSchema, SecurityTrendResultSchema, TimeToFixStatsSchema, TimeToFixResultSchema, EMPTY_SUPPLY_CHAIN, SecurityTimelineManager, ALL_CHECKS, STATUS_ICONS, CINotifier, ExclusionSet, PREFIX_PATTERNS, TEST_FILE_PATTERN, MD_FILE_PATTERN, ALL_DOMAINS, SECURITY_PATTERNS, JS_EXT_FALLBACKS, SEVERITY_RANK, SEVERITY_ORDER, SEVERITY_LABELS, VALIDATED_BY_RANK, VALIDATION_SCORES, DOMAIN_BASELINES, FACTOR_WEIGHTS, EVIDENCE_SATURATION, CORROBORATED_AGREEMENT, STANDALONE_AGREEMENT, AGREEMENT_LINE_GAP, COMPLIANCE_DESCRIPTOR, EXPORT_RE, BUG_DETECTION_DESCRIPTOR, SECURITY_DESCRIPTOR, EVAL_PATTERN, SECRET_PATTERNS, SQL_CONCAT_PATTERN, SHELL_EXEC_PATTERN, ARCHITECTURE_DESCRIPTOR, LARGE_FILE_THRESHOLD, VIOLATION_FILE_RE, LEARNINGS_DESCRIPTOR, RELEVANCE_THRESHOLD, ADVERSARIAL_DESCRIPTOR, UNVERIFIED_INPUT_PATTERN, PROMISE_NO_REJECT_PATTERN, UNGUARDED_OPTIONAL_CALL, COMPOSE_NO_AWAIT, FETCH_NO_TIMEOUT, TYPESCRIPT_STRICT_DESCRIPTOR, EXPLICIT_ANY_PATTERN, TS_IGNORE_PATTERN, UNSAFE_AS_UNKNOWN, NON_NULL_ASSERTION, VAGUE_HELPER_NAME, FRONTEND_RACES_DESCRIPTOR, AGENT_DESCRIPTORS, CONDITIONAL_SUBAGENT_DESCRIPTORS, AGENT_RUNNERS, SUBAGENT_ORDER, RISK_KEYWORDS, EXCLUDED_PATH_PATTERNS, ASYNC_UI_SIGNALS, WORD_BOUNDARY, DOWNGRADE_MAP, DEFAULT_PROVIDER_TIERS, SMALL_SUGGESTION_LINE_LIMIT, FILE_LINE_RANGE_PATTERN, FILE_LINE_PATTERN, FILE_ONLY_PATTERN, SECURITY_SENSITIVE_PATH, MIGRATION_PATH, TEST_PATH, CONFIG_PATH, STAGE_DOMAINS, CI_REVIEW_VERDICT_SCHEMA_VERSION, CI_RUNNERS, CI_ASSESSMENTS, CI_REVIEW_DOMAINS, ReviewFindingSchema, CiReviewVerdictSchema, VERDICT_MAP, RUNNER_PRESETS, VERDICT_MAP2, DEFAULT_EXEC_TIMEOUT_MS, DEFAULT_EXEC_MAX_STDOUT_BYTES, STDERR_CAP_BYTES, STDERR_TAIL_BYTES, defaultExecFile, EMPTY_TIER, EM_DASH3, DEFAULT_MILESTONE, MAX_CLOSEST_MATCHES, MACHINE_ASSIGNEE_PATTERNS, EXTERNAL_ID_RE, RETRY_DEFAULTS, GitHubIssuesSyncAdapter, syncMutex, PRIORITY_RANK, PRIORITY_RANK2, POSITION_WEIGHT, DEPENDENTS_WEIGHT, AFFINITY_WEIGHT, ConflictError, DEFAULTS, GitHubHttp, ETagStore, START_MARKER, END_MARKER, SERIALIZER_FIELDS, GitHubIssuesTrackerAdapter, LINEAR_ENDPOINT, EXTERNAL_PREFIX, HISTORY_MARKER, ISSUE_FIELDS, LinearTrackerAdapter, migrate_exports, HASH_RE, DEFAULT_CATCH_ALL, DEFAULT_INTAKE, DEFAULT_MAX_ACTIVE, InteractionTypeSchema, QuestionSchema, ConfirmationSchema, TransitionSchema, EmitInteractionInputSchema, ProjectScanner, SHELL_TEMPLATE, STYLES, SCRIPTS, MockLLMService, llmService, ContentPipeline, BlueprintGenerator, TOKENS_PER_MILLION, fallback_default, LITELLM_PRICING_URL, CACHE_TTL_MS, STALENESS_WARNING_DAYS, MICRODOLLARS_PER_DOLLAR, TOKENS_PER_MILLION2, StructuralStrategy, DEFAULT_TOKEN_BUDGET, CHARS_PER_TOKEN, TRUNCATION_MARKER, TruncationStrategy, CompactionPipeline, STABILITY_LOOKUP, TIER_ORDER, AnthropicCacheAdapter, TIER_ORDER2, OpenAICacheAdapter, TIER_ORDER3, CACHED_CONTENT_MARKER, GeminiCacheAdapter, VERSION, POSTHOG_BATCH_URL, MAX_ATTEMPTS, TIMEOUT_MS, DEFAULT_CAPACITY, CacheMetricsRecorder, RETRY_BACKOFFS_MS, DEFAULT_FLUSH_INTERVAL_MS, DEFAULT_BATCH_SIZE, defaultFetch, defaultWarn, OTLPExporter, SERVICE_NAME_ATTR, SpanKind, ModeSchema, SeveritySchema, TierSchema, StrengthFindingSchema, HarnessConfigSubsetSchema, HookFileSchema, ProjectContextSchema, AuditSummarySchema, AuditResultSchema, SEVERITY_WEIGHTS, clamp, HOOK_SCRIPT_TOKEN, NEVER_BLOCKS, ALWAYS_EXIT_ZERO, EXIT_ZERO_LINE, NONZERO_EXIT, GATE, ERREXIT, strength001NonblockingHooks, BASELINE_REWRITE, strength002Autobaseline, SKIP_RE, strength003SkipList, strength004EmptyThresholds, INIT_SKILL_PATH, DEFAULT_BASIC, strength005LowestTier, AUTO_PATTERN, COMMENT_LINE, NAME_VALUE_LINE, PAT_GATING, REVIEW_SIGNAL, strength006AutoapproveBaseline, CHECK_KEYS, SIGNAL_REGISTRY, HEALTH_SIGNAL_NAMES, CHECK_SIGNAL_MAP, SIGNAL_CATEGORY_MAP, strength007SnapshotSignalMismatch, ALL_RULES, HarnessStrengthAuditor, MAX_TOP_AFFECTED, CompoundLockHeldError, KNOWN_CATEGORIES, ProposalNotFoundError, ProposalConflictError, ALLOWED_FIELD_KEYS, PII_TOKENS, PII_FIELD_DENYLIST, PII_LINE_RE, ALLOWED_SET, PulseAdapterAlreadyRegisteredError, REGISTRY, MOCK_ADAPTER_NAME, ALLOWED_FIELD_SET, adapter, LOOKBACK_RE, MAX_LINES, INLINE_TEMPLATE, TRUNCATION_MARKER2, execFileAsync, FIX_RE, EMPTY_REPO_RE, execFileAsync2, TRACK_CATEGORIES2, STOPWORDS, KEYWORD_TO_CATEGORY, SECTION_ORDER, FILENAME;
|
|
16050
16067
|
var init_dist3 = __esm({
|
|
16051
16068
|
"../core/dist/index.mjs"() {
|
|
16052
|
-
|
|
16053
|
-
|
|
16054
|
-
|
|
16069
|
+
init_chunk_OFA2AAZK();
|
|
16070
|
+
init_chunk_IHRT6II2();
|
|
16071
|
+
init_chunk_JZ7UO3OF();
|
|
16055
16072
|
init_chunk_XKLVJIPL();
|
|
16056
16073
|
init_chunk_IIEDD47I();
|
|
16057
16074
|
init_chunk_7P6ASYW6();
|
|
@@ -17179,7 +17196,7 @@ var init_dist3 = __esm({
|
|
|
17179
17196
|
check: "Context validation",
|
|
17180
17197
|
passed: graphData.graphExists && graphData.nodeCount > 0,
|
|
17181
17198
|
severity: "info",
|
|
17182
|
-
details: graphData.graphExists ? `Graph loaded: ${graphData.nodeCount} nodes, ${graphData.edgeCount} edges` : "No graph available \u2014 run harness scan to build the knowledge graph"
|
|
17199
|
+
details: graphData.graphExists ? `Graph loaded: ${graphData.nodeCount} nodes, ${graphData.edgeCount} edges` : "No graph available \u2014 run harness graph scan to build the knowledge graph"
|
|
17183
17200
|
}) : void 0
|
|
17184
17201
|
)
|
|
17185
17202
|
);
|
|
@@ -23565,6 +23582,7 @@ export {
|
|
|
23565
23582
|
parseExternalId,
|
|
23566
23583
|
buildExternalId,
|
|
23567
23584
|
GitHubIssuesSyncAdapter,
|
|
23585
|
+
parseReferencedIssues,
|
|
23568
23586
|
loadTrackerSyncConfig,
|
|
23569
23587
|
reconcileDoneFromClosedIssues,
|
|
23570
23588
|
syncToExternal,
|
|
@@ -3,7 +3,7 @@ import {
|
|
|
3
3
|
} from "./chunk-Y6SUQC32.js";
|
|
4
4
|
import {
|
|
5
5
|
resolveConfig
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-Y5HPJMTM.js";
|
|
7
7
|
import {
|
|
8
8
|
logger
|
|
9
9
|
} from "./chunk-EBJQ6N4M.js";
|
|
@@ -12,7 +12,7 @@ import {
|
|
|
12
12
|
} from "./chunk-3WGJMBKH.js";
|
|
13
13
|
import {
|
|
14
14
|
init_dist
|
|
15
|
-
} from "./chunk-
|
|
15
|
+
} from "./chunk-UACYZCW4.js";
|
|
16
16
|
import {
|
|
17
17
|
Ok
|
|
18
18
|
} from "./chunk-BDGTZRZ6.js";
|
|
@@ -4,15 +4,26 @@ import {
|
|
|
4
4
|
import {
|
|
5
5
|
sanitizePath
|
|
6
6
|
} from "./chunk-W6Y7ZW3Y.js";
|
|
7
|
+
import {
|
|
8
|
+
findConfigFile,
|
|
9
|
+
loadConfig
|
|
10
|
+
} from "./chunk-Y5HPJMTM.js";
|
|
7
11
|
import {
|
|
8
12
|
init_dist
|
|
9
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-UACYZCW4.js";
|
|
10
14
|
import {
|
|
11
15
|
Ok
|
|
12
16
|
} from "./chunk-BDGTZRZ6.js";
|
|
13
17
|
|
|
14
18
|
// src/mcp/tools/entropy.ts
|
|
15
19
|
init_dist();
|
|
20
|
+
function loadEntropyConfig(projectPath) {
|
|
21
|
+
const configFile = findConfigFile(projectPath);
|
|
22
|
+
if (!configFile.ok) return void 0;
|
|
23
|
+
const loaded = loadConfig(configFile.value);
|
|
24
|
+
if (!loaded.ok) return void 0;
|
|
25
|
+
return loaded.value.entropy;
|
|
26
|
+
}
|
|
16
27
|
async function loadEntropyGraphOptions(projectPath) {
|
|
17
28
|
const { loadGraphStore } = await import("./graph-loader-STFGYKZH.js");
|
|
18
29
|
const store = await loadGraphStore(projectPath);
|
|
@@ -127,17 +138,24 @@ function buildSummaryResponse(report) {
|
|
|
127
138
|
}
|
|
128
139
|
async function handleDetectEntropy(input) {
|
|
129
140
|
try {
|
|
130
|
-
const { EntropyAnalyzer } = await import("./dist-
|
|
141
|
+
const { EntropyAnalyzer } = await import("./dist-MCTEX5QH.js");
|
|
131
142
|
const typeFilter = input.type ?? "all";
|
|
143
|
+
const projectPath = sanitizePath(input.path);
|
|
144
|
+
const entropy = loadEntropyConfig(projectPath);
|
|
145
|
+
const driftConfig = entropy?.drift;
|
|
146
|
+
const driftEnabled = typeFilter === "all" || typeFilter === "drift";
|
|
132
147
|
const analyzer = new EntropyAnalyzer({
|
|
133
|
-
rootDir:
|
|
148
|
+
rootDir: projectPath,
|
|
149
|
+
...entropy?.entryPoints && { entryPoints: entropy.entryPoints },
|
|
150
|
+
...entropy?.excludePatterns && { exclude: entropy.excludePatterns },
|
|
151
|
+
...driftConfig?.docPaths && { docPaths: driftConfig.docPaths },
|
|
134
152
|
analyze: {
|
|
135
|
-
drift:
|
|
153
|
+
drift: driftEnabled ? driftConfig ?? true : false,
|
|
136
154
|
deadCode: typeFilter === "all" || typeFilter === "dead-code",
|
|
137
155
|
patterns: typeFilter === "all" || typeFilter === "patterns"
|
|
138
156
|
}
|
|
139
157
|
});
|
|
140
|
-
const graphOptions = await loadEntropyGraphOptions(
|
|
158
|
+
const graphOptions = await loadEntropyGraphOptions(projectPath);
|
|
141
159
|
const result = await analyzer.analyze(graphOptions);
|
|
142
160
|
if (input.mode === "summary" && result.ok && !input.autoFix) {
|
|
143
161
|
return buildSummaryResponse(result.value);
|
|
@@ -146,7 +164,7 @@ async function handleDetectEntropy(input) {
|
|
|
146
164
|
return resultToMcpResponse(result);
|
|
147
165
|
}
|
|
148
166
|
if (!result.ok) return resultToMcpResponse(result);
|
|
149
|
-
const { createFixes, applyFixes, generateSuggestions } = await import("./dist-
|
|
167
|
+
const { createFixes, applyFixes, generateSuggestions } = await import("./dist-MCTEX5QH.js");
|
|
150
168
|
const report = result.value;
|
|
151
169
|
const deadCode = report.deadCode;
|
|
152
170
|
const fixTypesConfig = input.fixTypes ? { fixTypes: input.fixTypes } : void 0;
|
|
@@ -7,7 +7,7 @@ import {
|
|
|
7
7
|
} from "./chunk-3WGJMBKH.js";
|
|
8
8
|
import {
|
|
9
9
|
init_dist as init_dist2
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-UACYZCW4.js";
|
|
11
11
|
import {
|
|
12
12
|
Err,
|
|
13
13
|
Ok
|
|
@@ -72,13 +72,29 @@ var AgentConfigSchema = z.object({
|
|
|
72
72
|
/** Routing rules for orchestrator agent dispatch. */
|
|
73
73
|
routing: RoutingConfigSchema.optional()
|
|
74
74
|
});
|
|
75
|
+
var DriftConfigSchema = z.object({
|
|
76
|
+
/** Glob patterns for docs to scan for drift (default: docs/**, README) */
|
|
77
|
+
docPaths: z.array(z.string()).optional(),
|
|
78
|
+
/** Flag doc references to code symbols that no longer exist (default: true) */
|
|
79
|
+
checkApiSignatures: z.boolean().optional(),
|
|
80
|
+
/** Check fenced code examples against the codebase (default: true) */
|
|
81
|
+
checkExamples: z.boolean().optional(),
|
|
82
|
+
/** Check documented structure against the filesystem (default: true) */
|
|
83
|
+
checkStructure: z.boolean().optional(),
|
|
84
|
+
/** Regexes matched against a reference to exclude it from drift reporting */
|
|
85
|
+
ignorePatterns: z.array(z.string()).optional(),
|
|
86
|
+
/** Doc-path prefixes whose symbols describe intended future code (ADRs, proposals) */
|
|
87
|
+
forwardLookingPaths: z.array(z.string()).optional()
|
|
88
|
+
});
|
|
75
89
|
var EntropyConfigSchema = z.object({
|
|
76
90
|
/** Explicit entry points for reachability analysis (overrides auto-detection) */
|
|
77
91
|
entryPoints: z.array(z.string()).optional(),
|
|
78
92
|
/** Patterns to exclude from entropy analysis */
|
|
79
93
|
excludePatterns: z.array(z.string()).default([...skipDirGlobs(), "**/*.test.ts"]),
|
|
80
94
|
/** Whether to automatically attempt to fix simple entropy issues */
|
|
81
|
-
autoFix: z.boolean().default(false)
|
|
95
|
+
autoFix: z.boolean().default(false),
|
|
96
|
+
/** Documentation-drift detection tuning (scope/disable individual checks) */
|
|
97
|
+
drift: DriftConfigSchema.optional()
|
|
82
98
|
});
|
|
83
99
|
var PhaseGateMappingSchema = z.object({
|
|
84
100
|
/** Pattern for implementation files */
|