@harness-engineering/cli 1.25.6 → 1.25.7
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-md-2PYJM2MK.js → agents-md-QPO3H5HX.js} +3 -3
- package/dist/{architecture-VCLB7A23.js → architecture-IJLXRHZA.js} +4 -4
- package/dist/{assess-project-64C6LIKN.js → assess-project-QU6XIVJK.js} +1 -1
- package/dist/bin/harness-mcp.js +15 -15
- package/dist/bin/harness.js +25 -25
- package/dist/{check-phase-gate-RT6PGEHY.js → check-phase-gate-TNY64AOS.js} +4 -4
- package/dist/{chunk-ZAKUCM7O.js → chunk-2DF6OZLG.js} +2 -2
- package/dist/{chunk-XLO4AXXM.js → chunk-AS5DQT4S.js} +9 -9
- package/dist/{chunk-CBZECDCW.js → chunk-D3XL2FLX.js} +5 -5
- package/dist/{chunk-R2BI5UPK.js → chunk-E5Z6NTTQ.js} +1 -1
- package/dist/{chunk-VELT5VAG.js → chunk-FRDS4XGD.js} +1 -1
- package/dist/{chunk-EY6F2QXW.js → chunk-G5SNXUIK.js} +1 -1
- package/dist/{chunk-KJC4SE7C.js → chunk-GVNT2YC7.js} +9 -9
- package/dist/{chunk-XMEEYMGE.js → chunk-IQO7IINR.js} +1 -1
- package/dist/{chunk-7BAGSY5Q.js → chunk-IT2KORSK.js} +1 -1
- package/dist/{chunk-43VBX44J.js → chunk-JJQ3TW2E.js} +97 -91
- package/dist/{chunk-SMY35HJM.js → chunk-JPZY7ZQX.js} +1 -1
- package/dist/{chunk-FL6A72LV.js → chunk-K35D7HF3.js} +1 -1
- package/dist/{chunk-BUJOMC3O.js → chunk-K533WNZG.js} +38 -2
- package/dist/{chunk-RKZW3FDF.js → chunk-KVJZQ2MV.js} +1 -1
- package/dist/{chunk-WEOGCL7B.js → chunk-LTCEV7VF.js} +3 -3
- package/dist/{chunk-Y5JA4J2M.js → chunk-LXPRO2FH.js} +2 -2
- package/dist/{chunk-U2OMWI7Z.js → chunk-MCDCZMKN.js} +1 -1
- package/dist/{chunk-4YEBV2FT.js → chunk-MLOGYWLY.js} +2 -2
- package/dist/{chunk-RDQGCHKD.js → chunk-NKQEMWGT.js} +83 -66
- package/dist/{chunk-X2JJ3CPG.js → chunk-PCOU2UXU.js} +8 -8
- package/dist/{chunk-R7P2FMJT.js → chunk-SZ3Q4XEO.js} +36 -34
- package/dist/{chunk-JUXFYB2K.js → chunk-TQRCODRJ.js} +1 -1
- package/dist/{chunk-SZZ5UQL7.js → chunk-XVJRFP7W.js} +6 -6
- package/dist/{chunk-JQCS75DY.js → chunk-YRBNAHH4.js} +4 -4
- package/dist/{chunk-42ZZLMYD.js → chunk-ZIYLIYN4.js} +1 -1
- package/dist/{ci-workflow-SZL3KVUK.js → ci-workflow-FJYRFZYQ.js} +3 -3
- package/dist/{dist-GRW3X2ZQ.js → dist-HPWNWCT6.js} +1 -1
- package/dist/{dist-T3DGV5UN.js → dist-ZV6GO6FA.js} +2 -2
- package/dist/{docs-WDLJORLK.js → docs-7DW3DI4Z.js} +4 -4
- package/dist/{engine-2YWYRCKK.js → engine-P7EE2IWO.js} +3 -3
- package/dist/{entropy-PJGTOORX.js → entropy-HCXRTDFU.js} +3 -3
- package/dist/{feedback-M5KCJKL2.js → feedback-Y4FYN3NR.js} +1 -1
- package/dist/{generate-agent-definitions-MFDW6LZT.js → generate-agent-definitions-3EHPIWBO.js} +4 -4
- package/dist/{graph-loader-QMKXT454.js → graph-loader-KXVS3YK3.js} +1 -1
- package/dist/index.d.ts +14 -8
- package/dist/index.js +25 -25
- package/dist/{loader-6O52FYHE.js → loader-SKHF3JVV.js} +3 -3
- package/dist/{mcp-GGNFWKVC.js → mcp-MWYIPDQU.js} +15 -15
- package/dist/{performance-337U5URQ.js → performance-ADWH5NJY.js} +4 -4
- package/dist/{review-pipeline-DB5RD4SN.js → review-pipeline-TLKE5OQD.js} +3 -3
- package/dist/{runtime-B74EN2WD.js → runtime-7LYAW7GU.js} +3 -3
- package/dist/{scan-DXQUHGTT.js → scan-BGJ7TLLV.js} +1 -1
- package/dist/{security-3AYN6FVU.js → security-5XWINYVB.js} +1 -1
- package/dist/{validate-35CD7VWN.js → validate-BFFHYHY7.js} +4 -4
- package/dist/{validate-cross-check-LJKXBQYH.js → validate-cross-check-GQX7OVCR.js} +3 -3
- package/package.json +4 -4
|
@@ -15,7 +15,7 @@ function evictIfNeeded() {
|
|
|
15
15
|
}
|
|
16
16
|
}
|
|
17
17
|
async function doLoadGraphStore(projectRoot) {
|
|
18
|
-
const { GraphStore } = await import("./dist-
|
|
18
|
+
const { GraphStore } = await import("./dist-HPWNWCT6.js");
|
|
19
19
|
const graphDir = path.join(projectRoot, ".harness", "graph");
|
|
20
20
|
const store = new GraphStore();
|
|
21
21
|
const loaded = await store.load(graphDir);
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
init_dist
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-ZIYLIYN4.js";
|
|
4
4
|
import {
|
|
5
5
|
Err,
|
|
6
6
|
Ok
|
|
@@ -84,7 +84,33 @@ function mergePackageJson(base, overlay) {
|
|
|
84
84
|
}
|
|
85
85
|
|
|
86
86
|
// src/templates/engine.ts
|
|
87
|
-
var NON_JSON_PACKAGE_CONFIGS = /* @__PURE__ */ new Set([
|
|
87
|
+
var NON_JSON_PACKAGE_CONFIGS = /* @__PURE__ */ new Set([
|
|
88
|
+
"pyproject.toml",
|
|
89
|
+
"go.mod",
|
|
90
|
+
"Cargo.toml",
|
|
91
|
+
"pom.xml",
|
|
92
|
+
"build.gradle",
|
|
93
|
+
"build.gradle.kts"
|
|
94
|
+
]);
|
|
95
|
+
var HARNESS_CONFIG_FILES = /* @__PURE__ */ new Set(["harness.config.json", "AGENTS.md", ".harness/.gitignore"]);
|
|
96
|
+
function isHarnessConfigFile(relativePath) {
|
|
97
|
+
return HARNESS_CONFIG_FILES.has(relativePath);
|
|
98
|
+
}
|
|
99
|
+
var PROJECT_MARKERS = [
|
|
100
|
+
"package.json",
|
|
101
|
+
"pom.xml",
|
|
102
|
+
"build.gradle",
|
|
103
|
+
"build.gradle.kts",
|
|
104
|
+
"pyproject.toml",
|
|
105
|
+
"setup.py",
|
|
106
|
+
"requirements.txt",
|
|
107
|
+
"Pipfile",
|
|
108
|
+
"go.mod",
|
|
109
|
+
"Cargo.toml",
|
|
110
|
+
"Makefile",
|
|
111
|
+
"CMakeLists.txt",
|
|
112
|
+
"meson.build"
|
|
113
|
+
];
|
|
88
114
|
function scoreDetectPatterns(targetDir, patterns) {
|
|
89
115
|
let score = 0;
|
|
90
116
|
for (const pattern of patterns) {
|
|
@@ -244,6 +270,9 @@ var TemplateEngine = class {
|
|
|
244
270
|
for (const file of files.files) {
|
|
245
271
|
const targetPath = path.join(targetDir, file.relativePath);
|
|
246
272
|
const dir = path.dirname(targetPath);
|
|
273
|
+
if (!options.overwrite && options.existingProject && !isHarnessConfigFile(file.relativePath)) {
|
|
274
|
+
continue;
|
|
275
|
+
}
|
|
247
276
|
if (!options.overwrite && isNonJsLanguage && NON_JSON_PACKAGE_CONFIGS.has(file.relativePath) && fs.existsSync(targetPath)) {
|
|
248
277
|
skippedConfigs.push(file.relativePath);
|
|
249
278
|
continue;
|
|
@@ -262,6 +291,13 @@ var TemplateEngine = class {
|
|
|
262
291
|
);
|
|
263
292
|
}
|
|
264
293
|
}
|
|
294
|
+
/**
|
|
295
|
+
* Check whether the target directory already contains a project by looking for
|
|
296
|
+
* common build/package configuration files. Returns true if any marker is found.
|
|
297
|
+
*/
|
|
298
|
+
isExistingProject(targetDir) {
|
|
299
|
+
return PROJECT_MARKERS.some((marker) => fs.existsSync(path.join(targetDir, marker)));
|
|
300
|
+
}
|
|
265
301
|
detectFramework(targetDir) {
|
|
266
302
|
try {
|
|
267
303
|
const templatesResult = this.listTemplates();
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
resolveProjectConfig
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-IQO7IINR.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-ZV6GO6FA.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-ZV6GO6FA.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);
|
|
@@ -27,7 +27,7 @@ var runSecurityScanDefinition = {
|
|
|
27
27
|
};
|
|
28
28
|
async function handleRunSecurityScan(input) {
|
|
29
29
|
try {
|
|
30
|
-
const core = await import("./dist-
|
|
30
|
+
const core = await import("./dist-ZV6GO6FA.js");
|
|
31
31
|
const projectRoot = sanitizePath(input.path);
|
|
32
32
|
let configData = {};
|
|
33
33
|
try {
|
|
@@ -114,7 +114,7 @@ var getSecurityTrendsDefinition = {
|
|
|
114
114
|
};
|
|
115
115
|
async function handleGetSecurityTrends(input) {
|
|
116
116
|
try {
|
|
117
|
-
const core = await import("./dist-
|
|
117
|
+
const core = await import("./dist-ZV6GO6FA.js");
|
|
118
118
|
const projectRoot = sanitizePath(input.path);
|
|
119
119
|
const manager = new core.SecurityTimelineManager(projectRoot);
|
|
120
120
|
const trendOptions = {};
|
|
@@ -1334,7 +1334,17 @@ var init_dist = __esm({
|
|
|
1334
1334
|
typescript: /(?:export\s+)?(?:const|let|var)\s+(\w+)/,
|
|
1335
1335
|
javascript: /(?:export\s+)?(?:const|let|var)\s+(\w+)/
|
|
1336
1336
|
};
|
|
1337
|
-
SUPPORTED_EXTENSIONS = /* @__PURE__ */ new Set([
|
|
1337
|
+
SUPPORTED_EXTENSIONS = /* @__PURE__ */ new Set([
|
|
1338
|
+
".ts",
|
|
1339
|
+
".tsx",
|
|
1340
|
+
".js",
|
|
1341
|
+
".jsx",
|
|
1342
|
+
".py",
|
|
1343
|
+
".go",
|
|
1344
|
+
".rs",
|
|
1345
|
+
".java",
|
|
1346
|
+
".groovy"
|
|
1347
|
+
]);
|
|
1338
1348
|
SKIP_EXTENSIONS = /* @__PURE__ */ new Set([".d.ts"]);
|
|
1339
1349
|
CodeIngestor = class {
|
|
1340
1350
|
constructor(store) {
|
|
@@ -1348,23 +1358,34 @@ var init_dist = __esm({
|
|
|
1348
1358
|
let edgesAdded = 0;
|
|
1349
1359
|
const files = await this.findSourceFiles(rootDir);
|
|
1350
1360
|
const nameToFiles = /* @__PURE__ */ new Map();
|
|
1351
|
-
const fileContents = /* @__PURE__ */ new Map();
|
|
1352
1361
|
for (const filePath of files) {
|
|
1353
1362
|
try {
|
|
1354
|
-
const result = await this.processFile(filePath, rootDir, nameToFiles
|
|
1363
|
+
const result = await this.processFile(filePath, rootDir, nameToFiles);
|
|
1355
1364
|
nodesAdded += result.nodesAdded;
|
|
1356
1365
|
edgesAdded += result.edgesAdded;
|
|
1357
1366
|
} catch (err) {
|
|
1358
1367
|
errors.push(`${filePath}: ${err instanceof Error ? err.message : String(err)}`);
|
|
1359
1368
|
}
|
|
1360
1369
|
}
|
|
1361
|
-
const
|
|
1362
|
-
|
|
1363
|
-
|
|
1364
|
-
|
|
1370
|
+
for (const filePath of files) {
|
|
1371
|
+
try {
|
|
1372
|
+
const relativePath = path.relative(rootDir, filePath).replace(/\\/g, "/");
|
|
1373
|
+
const content = await fs.readFile(filePath, "utf-8");
|
|
1374
|
+
const callsEdges = this.extractCallsEdgesForFile(relativePath, content, nameToFiles);
|
|
1375
|
+
for (const edge of callsEdges) {
|
|
1376
|
+
this.store.addEdge(edge);
|
|
1377
|
+
edgesAdded++;
|
|
1378
|
+
}
|
|
1379
|
+
} catch {
|
|
1380
|
+
}
|
|
1381
|
+
}
|
|
1382
|
+
for (const filePath of files) {
|
|
1383
|
+
try {
|
|
1384
|
+
const content = await fs.readFile(filePath, "utf-8");
|
|
1385
|
+
edgesAdded += this.extractReqAnnotationsForFile(filePath, content, rootDir);
|
|
1386
|
+
} catch {
|
|
1387
|
+
}
|
|
1365
1388
|
}
|
|
1366
|
-
edgesAdded += this.extractReqAnnotations(fileContents, rootDir);
|
|
1367
|
-
fileContents.clear();
|
|
1368
1389
|
return {
|
|
1369
1390
|
nodesAdded,
|
|
1370
1391
|
nodesUpdated: 0,
|
|
@@ -1374,14 +1395,13 @@ var init_dist = __esm({
|
|
|
1374
1395
|
durationMs: Date.now() - start
|
|
1375
1396
|
};
|
|
1376
1397
|
}
|
|
1377
|
-
async processFile(filePath, rootDir, nameToFiles
|
|
1398
|
+
async processFile(filePath, rootDir, nameToFiles) {
|
|
1378
1399
|
let nodesAdded = 0;
|
|
1379
1400
|
let edgesAdded = 0;
|
|
1380
1401
|
const relativePath = path.relative(rootDir, filePath).replace(/\\/g, "/");
|
|
1381
1402
|
const content = await fs.readFile(filePath, "utf-8");
|
|
1382
1403
|
const stat2 = await fs.stat(filePath);
|
|
1383
1404
|
const fileId = `file:${relativePath}`;
|
|
1384
|
-
fileContents.set(relativePath, content);
|
|
1385
1405
|
const fileNode = {
|
|
1386
1406
|
id: fileId,
|
|
1387
1407
|
type: "file",
|
|
@@ -1421,7 +1441,7 @@ var init_dist = __esm({
|
|
|
1421
1441
|
const entries = await fs.readdir(dir, { withFileTypes: true });
|
|
1422
1442
|
for (const entry of entries) {
|
|
1423
1443
|
const fullPath = path.join(dir, entry.name);
|
|
1424
|
-
if (entry.isDirectory() && entry.name !== "node_modules" && entry.name !== "dist") {
|
|
1444
|
+
if (entry.isDirectory() && entry.name !== "node_modules" && entry.name !== "dist" && entry.name !== "target" && entry.name !== "build" && entry.name !== ".git" && entry.name !== "__pycache__" && entry.name !== ".venv" && entry.name !== ".turbo" && entry.name !== ".harness" && entry.name !== ".next" && entry.name !== ".vscode" && entry.name !== ".idea" && entry.name !== "vendor" && entry.name !== "out" && entry.name !== ".gradle" && entry.name !== ".gradle-home" && entry.name !== "bin" && entry.name !== "obj" && entry.name !== "venv" && entry.name !== "_build" && entry.name !== "deps" && entry.name !== "coverage" && entry.name !== ".nyc_output") {
|
|
1425
1445
|
results.push(...await this.findSourceFiles(fullPath));
|
|
1426
1446
|
} else if (entry.isFile() && isSupportedSourceFile(entry.name)) {
|
|
1427
1447
|
results.push(fullPath);
|
|
@@ -1700,33 +1720,31 @@ var init_dist = __esm({
|
|
|
1700
1720
|
return false;
|
|
1701
1721
|
}
|
|
1702
1722
|
/**
|
|
1703
|
-
*
|
|
1723
|
+
* Scan a file for identifiers matching known callable names,
|
|
1704
1724
|
* then create file-to-file "calls" edges. Uses regex heuristic (not AST).
|
|
1705
1725
|
*/
|
|
1706
|
-
|
|
1726
|
+
extractCallsEdgesForFile(relativePath, content, nameToFiles) {
|
|
1707
1727
|
const edges = [];
|
|
1708
1728
|
const seen = /* @__PURE__ */ new Set();
|
|
1709
|
-
|
|
1710
|
-
|
|
1711
|
-
|
|
1712
|
-
|
|
1713
|
-
|
|
1714
|
-
|
|
1715
|
-
|
|
1716
|
-
|
|
1717
|
-
|
|
1718
|
-
|
|
1719
|
-
|
|
1720
|
-
|
|
1721
|
-
|
|
1722
|
-
|
|
1723
|
-
|
|
1724
|
-
|
|
1725
|
-
|
|
1726
|
-
|
|
1727
|
-
|
|
1728
|
-
});
|
|
1729
|
-
}
|
|
1729
|
+
const callerFileId = `file:${relativePath}`;
|
|
1730
|
+
const callPattern = /\b([a-zA-Z_$][\w$]*)\s*\(/g;
|
|
1731
|
+
let match;
|
|
1732
|
+
while ((match = callPattern.exec(content)) !== null) {
|
|
1733
|
+
const name = match[1];
|
|
1734
|
+
const targetFiles = nameToFiles.get(name);
|
|
1735
|
+
if (!targetFiles) continue;
|
|
1736
|
+
for (const targetFile of targetFiles) {
|
|
1737
|
+
if (targetFile === relativePath) continue;
|
|
1738
|
+
const targetFileId = `file:${targetFile}`;
|
|
1739
|
+
const key = `${callerFileId}|${targetFileId}`;
|
|
1740
|
+
if (seen.has(key)) continue;
|
|
1741
|
+
seen.add(key);
|
|
1742
|
+
edges.push({
|
|
1743
|
+
from: callerFileId,
|
|
1744
|
+
to: targetFileId,
|
|
1745
|
+
type: "calls",
|
|
1746
|
+
metadata: { confidence: "regex" }
|
|
1747
|
+
});
|
|
1730
1748
|
}
|
|
1731
1749
|
}
|
|
1732
1750
|
return edges;
|
|
@@ -1871,6 +1889,7 @@ var init_dist = __esm({
|
|
|
1871
1889
|
if (/\.go$/.test(filePath)) return "go";
|
|
1872
1890
|
if (/\.rs$/.test(filePath)) return "rust";
|
|
1873
1891
|
if (/\.java$/.test(filePath)) return "java";
|
|
1892
|
+
if (/\.groovy$/.test(filePath)) return "java";
|
|
1874
1893
|
return "unknown";
|
|
1875
1894
|
}
|
|
1876
1895
|
/**
|
|
@@ -1878,40 +1897,38 @@ var init_dist = __esm({
|
|
|
1878
1897
|
* linking requirement nodes to the annotated files.
|
|
1879
1898
|
* Format: // @req <feature-name>#<index>
|
|
1880
1899
|
*/
|
|
1881
|
-
|
|
1900
|
+
extractReqAnnotationsForFile(filePath, content, rootDir) {
|
|
1882
1901
|
const REQ_TAG = /(?:\/\/|#|\/\*)\s*@req\s+([\w-]+)#(\d+)/g;
|
|
1883
1902
|
const reqNodes = this.store.findNodes({ type: "requirement" });
|
|
1884
1903
|
let edgesAdded = 0;
|
|
1885
|
-
|
|
1886
|
-
|
|
1887
|
-
|
|
1888
|
-
|
|
1889
|
-
|
|
1890
|
-
|
|
1891
|
-
|
|
1892
|
-
|
|
1904
|
+
let match;
|
|
1905
|
+
REQ_TAG.lastIndex = 0;
|
|
1906
|
+
while ((match = REQ_TAG.exec(content)) !== null) {
|
|
1907
|
+
const featureName = match[1];
|
|
1908
|
+
const reqIndex = parseInt(match[2], 10);
|
|
1909
|
+
const reqNode = reqNodes.find(
|
|
1910
|
+
(n) => n.metadata.featureName === featureName && n.metadata.index === reqIndex
|
|
1911
|
+
);
|
|
1912
|
+
if (!reqNode) {
|
|
1913
|
+
console.warn(
|
|
1914
|
+
`@req annotation references non-existent requirement: ${featureName}#${reqIndex} in ${filePath}`
|
|
1893
1915
|
);
|
|
1894
|
-
|
|
1895
|
-
console.warn(
|
|
1896
|
-
`@req annotation references non-existent requirement: ${featureName}#${reqIndex} in ${filePath}`
|
|
1897
|
-
);
|
|
1898
|
-
continue;
|
|
1899
|
-
}
|
|
1900
|
-
const relPath = path.relative(rootDir, filePath).replace(/\\/g, "/");
|
|
1901
|
-
const fileNodeId = `file:${relPath}`;
|
|
1902
|
-
this.store.addEdge({
|
|
1903
|
-
from: reqNode.id,
|
|
1904
|
-
to: fileNodeId,
|
|
1905
|
-
type: "verified_by",
|
|
1906
|
-
confidence: 1,
|
|
1907
|
-
metadata: {
|
|
1908
|
-
method: "annotation",
|
|
1909
|
-
tag: `@req ${featureName}#${reqIndex}`,
|
|
1910
|
-
confidence: 1
|
|
1911
|
-
}
|
|
1912
|
-
});
|
|
1913
|
-
edgesAdded++;
|
|
1916
|
+
continue;
|
|
1914
1917
|
}
|
|
1918
|
+
const relPath = path.relative(rootDir, filePath).replace(/\\/g, "/");
|
|
1919
|
+
const fileNodeId = `file:${relPath}`;
|
|
1920
|
+
this.store.addEdge({
|
|
1921
|
+
from: reqNode.id,
|
|
1922
|
+
to: fileNodeId,
|
|
1923
|
+
type: "verified_by",
|
|
1924
|
+
confidence: 1,
|
|
1925
|
+
metadata: {
|
|
1926
|
+
method: "annotation",
|
|
1927
|
+
tag: `@req ${featureName}#${reqIndex}`,
|
|
1928
|
+
confidence: 1
|
|
1929
|
+
}
|
|
1930
|
+
});
|
|
1931
|
+
edgesAdded++;
|
|
1915
1932
|
}
|
|
1916
1933
|
return edgesAdded;
|
|
1917
1934
|
}
|
|
@@ -2272,7 +2289,7 @@ var init_dist = __esm({
|
|
|
2272
2289
|
const entries = await fs2.readdir(dir, { withFileTypes: true });
|
|
2273
2290
|
for (const entry of entries) {
|
|
2274
2291
|
const fullPath = path3.join(dir, entry.name);
|
|
2275
|
-
if (entry.isDirectory()) {
|
|
2292
|
+
if (entry.isDirectory() && entry.name !== "node_modules" && entry.name !== "dist" && entry.name !== "target" && entry.name !== "build" && entry.name !== ".git" && entry.name !== ".gradle" && entry.name !== ".harness" && entry.name !== "vendor" && entry.name !== "bin" && entry.name !== "obj" && entry.name !== "venv" && entry.name !== "_build" && entry.name !== "deps" && entry.name !== "coverage") {
|
|
2276
2293
|
results.push(...await this.findMarkdownFiles(fullPath));
|
|
2277
2294
|
} else if (entry.isFile() && entry.name.endsWith(".md")) {
|
|
2278
2295
|
results.push(fullPath);
|
|
@@ -2411,7 +2428,7 @@ var init_dist = __esm({
|
|
|
2411
2428
|
const entries = await fs3.readdir(dir, { withFileTypes: true });
|
|
2412
2429
|
for (const entry of entries) {
|
|
2413
2430
|
const fullPath = path4.join(dir, entry.name);
|
|
2414
|
-
if (entry.isDirectory()) {
|
|
2431
|
+
if (entry.isDirectory() && entry.name !== "node_modules" && entry.name !== "dist" && entry.name !== "target" && entry.name !== "build" && entry.name !== ".git" && entry.name !== ".gradle" && entry.name !== ".harness" && entry.name !== "vendor" && entry.name !== "bin" && entry.name !== "obj" && entry.name !== "venv" && entry.name !== "_build" && entry.name !== "deps" && entry.name !== "coverage") {
|
|
2415
2432
|
results.push(...await this.findMarkdownFiles(fullPath));
|
|
2416
2433
|
} else if (entry.isFile() && entry.name.endsWith(".md")) {
|
|
2417
2434
|
results.push(fullPath);
|
|
@@ -7,10 +7,10 @@ import {
|
|
|
7
7
|
import {
|
|
8
8
|
findConfigFile,
|
|
9
9
|
loadConfig
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-TQRCODRJ.js";
|
|
11
11
|
import {
|
|
12
12
|
init_dist
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-ZIYLIYN4.js";
|
|
14
14
|
import {
|
|
15
15
|
Ok
|
|
16
16
|
} from "./chunk-RL4VMEXL.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-ZV6GO6FA.js");
|
|
39
39
|
const typeFilter = input.type ?? "all";
|
|
40
40
|
const projectPath = sanitizePath(input.path);
|
|
41
41
|
let entryPoints;
|
|
@@ -58,10 +58,10 @@ async function handleCheckPerformance(input) {
|
|
|
58
58
|
});
|
|
59
59
|
let graphOptions;
|
|
60
60
|
try {
|
|
61
|
-
const { loadGraphStore } = await import("./graph-loader-
|
|
61
|
+
const { loadGraphStore } = await import("./graph-loader-KXVS3YK3.js");
|
|
62
62
|
const store = await loadGraphStore(projectPath);
|
|
63
63
|
if (store) {
|
|
64
|
-
const { GraphComplexityAdapter, GraphCouplingAdapter } = await import("./dist-
|
|
64
|
+
const { GraphComplexityAdapter, GraphCouplingAdapter } = await import("./dist-HPWNWCT6.js");
|
|
65
65
|
const complexityAdapter = new GraphComplexityAdapter(store);
|
|
66
66
|
const couplingAdapter = new GraphCouplingAdapter(store);
|
|
67
67
|
graphOptions = {
|
|
@@ -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-ZV6GO6FA.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-ZV6GO6FA.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-ZV6GO6FA.js");
|
|
180
180
|
const resolver = new CriticalPathResolver(sanitizePath(input.path));
|
|
181
181
|
const result = await resolver.resolve();
|
|
182
182
|
return resultToMcpResponse(Ok(result));
|