@harness-engineering/cli 1.27.1 → 1.28.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-architecture-advisor/SKILL.md +17 -5
- package/dist/agents/skills/claude-code/harness-architecture-advisor/skill.yaml +1 -1
- package/dist/agents/skills/claude-code/harness-autopilot/SKILL.md +4 -4
- package/dist/agents/skills/claude-code/harness-code-review/SKILL.md +1 -1
- package/dist/agents/skills/claude-code/harness-design-system/SKILL.md +6 -1
- package/dist/agents/skills/claude-code/harness-execution/SKILL.md +4 -4
- package/dist/agents/skills/claude-code/harness-i18n-process/SKILL.md +2 -2
- package/dist/agents/skills/claude-code/harness-integration/SKILL.md +1 -1
- package/dist/agents/skills/claude-code/harness-knowledge-pipeline/SKILL.md +1 -0
- package/dist/agents/skills/claude-code/harness-onboarding/SKILL.md +1 -1
- package/dist/agents/skills/claude-code/harness-planning/SKILL.md +3 -3
- package/dist/agents/skills/claude-code/harness-roadmap/SKILL.md +4 -3
- package/dist/agents/skills/claude-code/initialize-harness-project/SKILL.md +150 -10
- package/dist/agents/skills/claude-code/initialize-harness-project/skill.yaml +2 -1
- package/dist/agents/skills/codex/harness-architecture-advisor/SKILL.md +17 -5
- package/dist/agents/skills/codex/harness-architecture-advisor/skill.yaml +1 -1
- package/dist/agents/skills/codex/harness-autopilot/SKILL.md +4 -4
- package/dist/agents/skills/codex/harness-code-review/SKILL.md +1 -1
- package/dist/agents/skills/codex/harness-design-system/SKILL.md +6 -1
- package/dist/agents/skills/codex/harness-execution/SKILL.md +4 -4
- package/dist/agents/skills/codex/harness-i18n-process/SKILL.md +2 -2
- package/dist/agents/skills/codex/harness-integration/SKILL.md +1 -1
- package/dist/agents/skills/codex/harness-knowledge-pipeline/SKILL.md +1 -0
- package/dist/agents/skills/codex/harness-onboarding/SKILL.md +1 -1
- package/dist/agents/skills/codex/harness-planning/SKILL.md +3 -3
- package/dist/agents/skills/codex/harness-roadmap/SKILL.md +4 -3
- package/dist/agents/skills/codex/initialize-harness-project/SKILL.md +150 -10
- package/dist/agents/skills/codex/initialize-harness-project/skill.yaml +2 -1
- package/dist/agents/skills/cursor/harness-architecture-advisor/SKILL.md +17 -5
- package/dist/agents/skills/cursor/harness-architecture-advisor/skill.yaml +1 -1
- package/dist/agents/skills/cursor/harness-autopilot/SKILL.md +4 -4
- package/dist/agents/skills/cursor/harness-code-review/SKILL.md +1 -1
- package/dist/agents/skills/cursor/harness-design-system/SKILL.md +6 -1
- package/dist/agents/skills/cursor/harness-execution/SKILL.md +4 -4
- package/dist/agents/skills/cursor/harness-i18n-process/SKILL.md +2 -2
- package/dist/agents/skills/cursor/harness-integration/SKILL.md +1 -1
- package/dist/agents/skills/cursor/harness-knowledge-pipeline/SKILL.md +1 -0
- package/dist/agents/skills/cursor/harness-onboarding/SKILL.md +1 -1
- package/dist/agents/skills/cursor/harness-planning/SKILL.md +3 -3
- package/dist/agents/skills/cursor/harness-roadmap/SKILL.md +4 -3
- package/dist/agents/skills/cursor/initialize-harness-project/SKILL.md +150 -10
- package/dist/agents/skills/cursor/initialize-harness-project/skill.yaml +2 -1
- package/dist/agents/skills/gemini-cli/harness-architecture-advisor/SKILL.md +17 -5
- package/dist/agents/skills/gemini-cli/harness-architecture-advisor/skill.yaml +1 -1
- package/dist/agents/skills/gemini-cli/harness-autopilot/SKILL.md +4 -4
- package/dist/agents/skills/gemini-cli/harness-code-review/SKILL.md +1 -1
- package/dist/agents/skills/gemini-cli/harness-design-system/SKILL.md +6 -1
- package/dist/agents/skills/gemini-cli/harness-execution/SKILL.md +4 -4
- package/dist/agents/skills/gemini-cli/harness-i18n-process/SKILL.md +2 -2
- package/dist/agents/skills/gemini-cli/harness-integration/SKILL.md +1 -1
- package/dist/agents/skills/gemini-cli/harness-knowledge-pipeline/SKILL.md +1 -0
- package/dist/agents/skills/gemini-cli/harness-onboarding/SKILL.md +1 -1
- package/dist/agents/skills/gemini-cli/harness-planning/SKILL.md +3 -3
- package/dist/agents/skills/gemini-cli/harness-roadmap/SKILL.md +4 -3
- package/dist/agents/skills/gemini-cli/initialize-harness-project/SKILL.md +150 -10
- package/dist/agents/skills/gemini-cli/initialize-harness-project/skill.yaml +2 -1
- package/dist/{agents-md-2RN666DE.js → agents-md-76IEMV6O.js} +3 -3
- package/dist/{architecture-ZR33YKJB.js → architecture-5GVJRRUD.js} +4 -4
- package/dist/{assess-project-LLWWEQEV.js → assess-project-WDUFL7SO.js} +1 -1
- package/dist/bin/harness-mcp.js +15 -15
- package/dist/bin/harness.js +25 -25
- package/dist/{check-phase-gate-ZVG56NT2.js → check-phase-gate-QR3ONJYP.js} +4 -4
- package/dist/{chunk-FUS4OOGC.js → chunk-3WLXR23L.js} +1 -1
- package/dist/{chunk-IBTHD2UA.js → chunk-6JBJ5FSW.js} +2 -1
- package/dist/{chunk-C7RPQWBG.js → chunk-77OMOFZL.js} +1 -1
- package/dist/{chunk-YZH4I4JO.js → chunk-AJG2LCMA.js} +1 -1
- package/dist/{chunk-3AJW7VQ3.js → chunk-CS7K6ZQ3.js} +2 -2
- package/dist/{chunk-SDDQPMZK.js → chunk-D25P6763.js} +1 -1
- package/dist/{chunk-XKU37HGH.js → chunk-DHGL3SF2.js} +1 -1
- package/dist/{chunk-CJYNZMOP.js → chunk-E7QD4YHA.js} +8 -8
- package/dist/{chunk-BO4AJZRE.js → chunk-H43UQY6B.js} +1 -1
- package/dist/{chunk-SDPHFDQS.js → chunk-ILVO6LZY.js} +1 -1
- package/dist/{chunk-BZZNYHRY.js → chunk-K5ZOBBQB.js} +9 -9
- package/dist/{chunk-A4ETL34H.js → chunk-KLE6FXWM.js} +23 -1
- package/dist/{chunk-F3Y64VNF.js → chunk-L4RURCSF.js} +6 -6
- package/dist/{chunk-EGRQHLDM.js → chunk-LINAFNIK.js} +5 -5
- package/dist/{chunk-EHTUWULH.js → chunk-OPOSSZJS.js} +97 -93
- package/dist/{chunk-L3Y7L4EG.js → chunk-OQS7KURX.js} +1 -1
- package/dist/{chunk-T7UZOJF4.js → chunk-QZ46CI6E.js} +9 -9
- package/dist/{chunk-MGPVA2EM.js → chunk-TFNQ72RF.js} +5 -5
- package/dist/{chunk-3XMOWLK3.js → chunk-USG7DV5N.js} +2 -2
- package/dist/{chunk-776JFSPK.js → chunk-VITLE3PS.js} +1 -1
- package/dist/{chunk-2FOLD76X.js → chunk-WPSM7WT6.js} +2 -2
- package/dist/{chunk-GAIOIINV.js → chunk-X7XQ3ELM.js} +108 -36
- package/dist/{chunk-EICASBYP.js → chunk-YZZVOT7I.js} +1 -1
- package/dist/{chunk-VCC47EXU.js → chunk-Z63IDQ7Y.js} +860 -412
- package/dist/{chunk-Q5DKIL46.js → chunk-Z7ZF2XDL.js} +3 -3
- package/dist/{ci-workflow-JFOL4YWW.js → ci-workflow-GYQXE5X4.js} +3 -3
- package/dist/{dist-CPKL5Y2R.js → dist-46VOJIG4.js} +2 -2
- package/dist/{dist-BZS2XRLG.js → dist-BP6E6QGG.js} +7 -1
- package/dist/{docs-FUTRJQHA.js → docs-CVQMSMQC.js} +4 -4
- package/dist/{engine-FB3HCNVT.js → engine-23PJMRHA.js} +3 -3
- package/dist/{entropy-FIEE4YDA.js → entropy-K2YTZFCP.js} +3 -3
- package/dist/{feedback-7EC4T6XG.js → feedback-6HP42GTK.js} +1 -1
- package/dist/{generate-agent-definitions-FOSFADNR.js → generate-agent-definitions-6RJKL6VW.js} +4 -4
- package/dist/{graph-loader-QEI7SYOQ.js → graph-loader-BI3OFFFS.js} +1 -1
- package/dist/index.d.ts +44 -1
- package/dist/index.js +25 -25
- package/dist/{loader-HXUOBTYA.js → loader-U2WEC3PZ.js} +3 -3
- package/dist/{mcp-NUG4BMKJ.js → mcp-N6XVWPXJ.js} +15 -15
- package/dist/{performance-TYXBCTR7.js → performance-T3XAESWR.js} +4 -4
- package/dist/{review-pipeline-B4WPU6BQ.js → review-pipeline-HTC5HA5X.js} +3 -3
- package/dist/{runtime-HQQNOARD.js → runtime-UFXMNN3Q.js} +3 -3
- package/dist/{scan-M4EGDAQ2.js → scan-XRGMTO6K.js} +1 -1
- package/dist/{security-25VFLIAO.js → security-ROK5IFDA.js} +1 -1
- package/dist/{validate-EAVGKZQB.js → validate-IJHHQHT5.js} +4 -4
- package/dist/{validate-cross-check-SPL3H4O5.js → validate-cross-check-LUQYIA46.js} +3 -3
- package/package.json +6 -6
|
@@ -7,10 +7,10 @@ import {
|
|
|
7
7
|
import {
|
|
8
8
|
findConfigFile,
|
|
9
9
|
loadConfig
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-KLE6FXWM.js";
|
|
11
11
|
import {
|
|
12
12
|
init_dist
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-6JBJ5FSW.js";
|
|
14
14
|
import {
|
|
15
15
|
Ok
|
|
16
16
|
} from "./chunk-RL4VMEXL.js";
|
|
@@ -50,18 +50,18 @@ 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-46VOJIG4.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-46VOJIG4.js");
|
|
59
59
|
const domain2 = input.domain ?? "src";
|
|
60
|
-
const { loadGraphStore: loadGraphStore2 } = await import("./graph-loader-
|
|
60
|
+
const { loadGraphStore: loadGraphStore2 } = await import("./graph-loader-BI3OFFFS.js");
|
|
61
61
|
const store2 = await loadGraphStore2(projectPath);
|
|
62
62
|
let graphCoverage2;
|
|
63
63
|
if (store2) {
|
|
64
|
-
const { Assembler } = await import("./dist-
|
|
64
|
+
const { Assembler } = await import("./dist-BP6E6QGG.js");
|
|
65
65
|
const assembler = new Assembler(store2);
|
|
66
66
|
const report = assembler.checkCoverage();
|
|
67
67
|
graphCoverage2 = {
|
|
@@ -94,13 +94,13 @@ 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-46VOJIG4.js");
|
|
98
98
|
const domain = input.domain ?? "src";
|
|
99
|
-
const { loadGraphStore } = await import("./graph-loader-
|
|
99
|
+
const { loadGraphStore } = await import("./graph-loader-BI3OFFFS.js");
|
|
100
100
|
const store = await loadGraphStore(projectPath);
|
|
101
101
|
let graphCoverage;
|
|
102
102
|
if (store) {
|
|
103
|
-
const { Assembler } = await import("./dist-
|
|
103
|
+
const { Assembler } = await import("./dist-BP6E6QGG.js");
|
|
104
104
|
const assembler = new Assembler(store);
|
|
105
105
|
const report = assembler.checkCoverage();
|
|
106
106
|
graphCoverage = {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
resolveProjectConfig
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-AJG2LCMA.js";
|
|
4
4
|
import {
|
|
5
5
|
resultToMcpResponse
|
|
6
6
|
} from "./chunk-EPUKTTJZ.js";
|
|
@@ -38,7 +38,7 @@ async function handleCheckDependencies(input) {
|
|
|
38
38
|
const configResult = resolveProjectConfig(projectPath);
|
|
39
39
|
if (!configResult.ok) return resultToMcpResponse(configResult);
|
|
40
40
|
try {
|
|
41
|
-
const { validateDependencies, TypeScriptParser } = await import("./dist-
|
|
41
|
+
const { validateDependencies, TypeScriptParser } = await import("./dist-46VOJIG4.js");
|
|
42
42
|
const config = configResult.value;
|
|
43
43
|
const rawLayers = Array.isArray(config.layers) ? config.layers : [];
|
|
44
44
|
const layers = rawLayers.map((l) => ({
|
|
@@ -47,11 +47,11 @@ async function handleCheckDependencies(input) {
|
|
|
47
47
|
allowedDependencies: l.allowedDependencies
|
|
48
48
|
}));
|
|
49
49
|
const parser = new TypeScriptParser();
|
|
50
|
-
const { loadGraphStore } = await import("./graph-loader-
|
|
50
|
+
const { loadGraphStore } = await import("./graph-loader-BI3OFFFS.js");
|
|
51
51
|
const store = await loadGraphStore(projectPath);
|
|
52
52
|
let graphDependencyData;
|
|
53
53
|
if (store) {
|
|
54
|
-
const { GraphConstraintAdapter } = await import("./dist-
|
|
54
|
+
const { GraphConstraintAdapter } = await import("./dist-BP6E6QGG.js");
|
|
55
55
|
const adapter = new GraphConstraintAdapter(store);
|
|
56
56
|
const graphData = adapter.computeDependencyGraph();
|
|
57
57
|
graphDependencyData = {
|
|
@@ -69,7 +69,7 @@ async function handleCheckDependencies(input) {
|
|
|
69
69
|
if (store) {
|
|
70
70
|
const designTokenNodes = store.findNodes({ type: "design_token" });
|
|
71
71
|
if (designTokenNodes.length > 0) {
|
|
72
|
-
const { DesignConstraintAdapter } = await import("./dist-
|
|
72
|
+
const { DesignConstraintAdapter } = await import("./dist-BP6E6QGG.js");
|
|
73
73
|
const designAdapter = new DesignConstraintAdapter(store);
|
|
74
74
|
const fileNodes = store.findNodes({ type: "file" });
|
|
75
75
|
for (const fileNode of fileNodes) {
|
|
@@ -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-BP6E6QGG.js");
|
|
19
19
|
const graphDir = path.join(projectRoot, ".harness", "graph");
|
|
20
20
|
const store = new GraphStore();
|
|
21
21
|
const loaded = await store.load(graphDir);
|
|
@@ -4,7 +4,7 @@ import {
|
|
|
4
4
|
import {
|
|
5
5
|
init_dist,
|
|
6
6
|
paginate
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-6JBJ5FSW.js";
|
|
8
8
|
|
|
9
9
|
// src/mcp/tools/review-pipeline.ts
|
|
10
10
|
init_dist();
|
|
@@ -79,7 +79,7 @@ var runCodeReviewDefinition = {
|
|
|
79
79
|
};
|
|
80
80
|
async function handleRunCodeReview(input) {
|
|
81
81
|
try {
|
|
82
|
-
const { parseDiff, runReviewPipeline } = await import("./dist-
|
|
82
|
+
const { parseDiff, runReviewPipeline } = await import("./dist-46VOJIG4.js");
|
|
83
83
|
const parseResult = parseDiff(input.diff);
|
|
84
84
|
if (!parseResult.ok) {
|
|
85
85
|
return {
|
|
@@ -371,6 +371,65 @@ function detectEarsPattern(text) {
|
|
|
371
371
|
if (/^the\s+\w+\s+shall\b/.test(lower)) return "ubiquitous";
|
|
372
372
|
return void 0;
|
|
373
373
|
}
|
|
374
|
+
function matchPattern(filePath, pattern) {
|
|
375
|
+
const patternParts = pattern.split("/").filter((s) => s.length > 0);
|
|
376
|
+
if (patternParts.length !== 2 || patternParts[1] !== "<dir>") {
|
|
377
|
+
return null;
|
|
378
|
+
}
|
|
379
|
+
const prefix = patternParts[0];
|
|
380
|
+
const pathParts = filePath.split("/").filter((s) => s.length > 0);
|
|
381
|
+
if (pathParts.length < 2) return null;
|
|
382
|
+
if (pathParts[0] !== prefix) return null;
|
|
383
|
+
let dir = pathParts[1];
|
|
384
|
+
if (dir.length === 0) return null;
|
|
385
|
+
if (CODE_EXTENSIONS.some((ext) => dir.endsWith(ext))) {
|
|
386
|
+
const dotIdx = dir.lastIndexOf(".");
|
|
387
|
+
if (dotIdx > 0) dir = dir.slice(0, dotIdx);
|
|
388
|
+
}
|
|
389
|
+
if (dir.length === 0) return null;
|
|
390
|
+
return dir;
|
|
391
|
+
}
|
|
392
|
+
function inferDomain(node, options = {}) {
|
|
393
|
+
if (node.metadata?.domain && typeof node.metadata.domain === "string" && node.metadata.domain.length > 0) {
|
|
394
|
+
return node.metadata.domain;
|
|
395
|
+
}
|
|
396
|
+
const filePath = typeof node.path === "string" ? node.path : "";
|
|
397
|
+
const blocklist = new Set(DEFAULT_BLOCKLIST);
|
|
398
|
+
if (options.extraBlocklist) {
|
|
399
|
+
for (const seg of options.extraBlocklist) {
|
|
400
|
+
if (seg && seg.length > 0) blocklist.add(seg);
|
|
401
|
+
}
|
|
402
|
+
}
|
|
403
|
+
if (filePath.length > 0) {
|
|
404
|
+
const extraPatterns = options.extraPatterns ?? [];
|
|
405
|
+
for (const pattern of extraPatterns) {
|
|
406
|
+
const dir = matchPattern(filePath, pattern);
|
|
407
|
+
if (dir !== null) {
|
|
408
|
+
if (blocklist.has(dir)) return "unknown";
|
|
409
|
+
return dir;
|
|
410
|
+
}
|
|
411
|
+
}
|
|
412
|
+
for (const pattern of DEFAULT_PATTERNS) {
|
|
413
|
+
const dir = matchPattern(filePath, pattern);
|
|
414
|
+
if (dir !== null) {
|
|
415
|
+
if (blocklist.has(dir)) return "unknown";
|
|
416
|
+
return dir;
|
|
417
|
+
}
|
|
418
|
+
}
|
|
419
|
+
const segments = filePath.split("/").filter((s) => s.length > 0);
|
|
420
|
+
if (segments.length > 0) {
|
|
421
|
+
const first = segments[0];
|
|
422
|
+
if (!blocklist.has(first)) return first;
|
|
423
|
+
}
|
|
424
|
+
}
|
|
425
|
+
const source = node.metadata?.source;
|
|
426
|
+
if (source === "knowledge-linker" || source === "connector") {
|
|
427
|
+
const connector = node.metadata?.connectorName;
|
|
428
|
+
if (typeof connector === "string" && connector.length > 0) return connector;
|
|
429
|
+
return "general";
|
|
430
|
+
}
|
|
431
|
+
return "unknown";
|
|
432
|
+
}
|
|
374
433
|
function emptyResult2(diagramType = "unknown") {
|
|
375
434
|
return {
|
|
376
435
|
entities: [],
|
|
@@ -774,10 +833,10 @@ function toGrade(score) {
|
|
|
774
833
|
if (score >= 20) return "D";
|
|
775
834
|
return "F";
|
|
776
835
|
}
|
|
777
|
-
function groupByDomain(nodes,
|
|
836
|
+
function groupByDomain(nodes, _fallback, options = {}) {
|
|
778
837
|
const map = /* @__PURE__ */ new Map();
|
|
779
838
|
for (const node of nodes) {
|
|
780
|
-
const domain = node
|
|
839
|
+
const domain = inferDomain(node, options);
|
|
781
840
|
const group = map.get(domain) ?? [];
|
|
782
841
|
group.push(node);
|
|
783
842
|
map.set(domain, group);
|
|
@@ -1443,7 +1502,7 @@ function parseAntiPatterns(content) {
|
|
|
1443
1502
|
}
|
|
1444
1503
|
return patterns;
|
|
1445
1504
|
}
|
|
1446
|
-
var NODE_TYPES, EDGE_TYPES, OBSERVABILITY_TYPES, CURRENT_SCHEMA_VERSION, NODE_STABILITY, GraphNodeSchema, GraphEdgeSchema, POISONED_KEYS, GraphStore, VectorStore, DEFAULT_TTL_MS, PackedSummaryCache, ContextQL, TEST_TYPES, DOC_TYPES, CODE_TYPES, SKIP_METHOD_NAMES, FUNCTION_PATTERNS, CLASS_PATTERNS, INTERFACE_PATTERNS, METHOD_PATTERNS, GO_METHOD_PATTERN, VARIABLE_PATTERNS, SUPPORTED_EXTENSIONS, SKIP_EXTENSIONS, CodeIngestor, execFileAsync, GitIngestor, TopologicalLinker, CODE_NODE_TYPES, KnowledgeIngestor, BUSINESS_KNOWLEDGE_TYPES, GOVERNS_SOURCE_TYPES, CODE_NODE_TYPES2, MEASURABLE_TYPES, BusinessKnowledgeIngestor, CODE_NODE_TYPES3, DecisionIngestor, REQUIREMENT_SECTIONS, SECTION_HEADING_RE, NUMBERED_ITEM_RE, CODE_NODE_TYPES4, RequirementIngestor, MermaidParser, D2Parser, PlantUmlParser, DIAGRAM_EXTENSIONS, SKIP_DIRS, DiagramParser, HEURISTIC_PATTERNS, SCANNABLE_TYPES, KnowledgeLinker, StructuralDriftDetector, BUSINESS_NODE_TYPES, KnowledgeStagingAggregator, SKIP_DIRS2, EXT_TO_LANGUAGE, SKIP_EXTENSIONS2, EXTRACTOR_EDGE_TYPE, ExtractionRunner, PATTERNS, TestDescriptionExtractor, EnumConstantExtractor, ValidationRuleExtractor, ApiPathExtractor, ALL_EXTRACTORS, ImageAnalysisExtractor, KNOWLEDGE_NODE_TYPES, SIMILARITY_THRESHOLD, SEVERITY_MAP, ContradictionDetector, KNOWLEDGE_TYPES, CODE_TYPES2, KNOWLEDGE_EDGE_TYPES, CoverageScorer, VALID_BUSINESS_TYPES, DEFAULT_MAX_DOCS, MAX_COLLISION_SUFFIX, KnowledgeDocMaterializer, BUSINESS_NODE_TYPES2, SNAPSHOT_NODE_TYPES, KnowledgePipelineRunner, CODE_NODE_TYPES5, RETRYABLE_STATUSES, SANITIZE_RULES, SyncManager, SUMMARIZE_PROMPT, JiraConnector, SlackConnector, ConfluenceConnector, CIConnector, CONSTRAINT_KEYWORDS, FigmaConnector, MIN_CONTENT_LENGTH, CONCEPT_ITEM_TYPES, MiroConnector, STOP_WORDS, FusionLayer, CODE_NODE_TYPES6, GraphEntropyAdapter, GraphComplexityAdapter, GraphCouplingAdapter, DEFAULT_THRESHOLD, DEFAULT_METRICS, RECOGNIZED_METRICS, GraphAnomalyAdapter, INTENTS, SIGNAL_WEIGHTS, INTENT_SIGNALS, IntentClassifier, INTENT_KEYWORDS, STOP_WORDS2, PASCAL_OR_CAMEL_RE, FILE_PATH_RE, QUOTED_RE, EntityExtractor, EntityResolver, ResponseFormatter, CompositeProbabilityStrategy, DEFAULT_PROBABILITY_FLOOR, DEFAULT_MAX_DEPTH, CascadeSimulator, ENTITY_REQUIRED_INTENTS, classifier, extractor, formatter, PHASE_NODE_TYPES, CODE_NODE_TYPES7, Assembler, GraphConstraintAdapter, DesignIngestor, DesignConstraintAdapter, GraphFeedbackAdapter, DEFAULT_EDGE_TYPES, TaskIndependenceAnalyzer, ConflictPredictor, VERSION;
|
|
1505
|
+
var NODE_TYPES, EDGE_TYPES, OBSERVABILITY_TYPES, CURRENT_SCHEMA_VERSION, NODE_STABILITY, GraphNodeSchema, GraphEdgeSchema, POISONED_KEYS, GraphStore, VectorStore, DEFAULT_TTL_MS, PackedSummaryCache, ContextQL, TEST_TYPES, DOC_TYPES, CODE_TYPES, SKIP_METHOD_NAMES, FUNCTION_PATTERNS, CLASS_PATTERNS, INTERFACE_PATTERNS, METHOD_PATTERNS, GO_METHOD_PATTERN, VARIABLE_PATTERNS, SUPPORTED_EXTENSIONS, SKIP_EXTENSIONS, CodeIngestor, execFileAsync, GitIngestor, TopologicalLinker, CODE_NODE_TYPES, KnowledgeIngestor, BUSINESS_KNOWLEDGE_TYPES, GOVERNS_SOURCE_TYPES, CODE_NODE_TYPES2, MEASURABLE_TYPES, BusinessKnowledgeIngestor, CODE_NODE_TYPES3, DecisionIngestor, REQUIREMENT_SECTIONS, SECTION_HEADING_RE, NUMBERED_ITEM_RE, CODE_NODE_TYPES4, RequirementIngestor, DEFAULT_PATTERNS, DEFAULT_BLOCKLIST, CODE_EXTENSIONS, MermaidParser, D2Parser, PlantUmlParser, DIAGRAM_EXTENSIONS, SKIP_DIRS, DiagramParser, HEURISTIC_PATTERNS, SCANNABLE_TYPES, KnowledgeLinker, StructuralDriftDetector, BUSINESS_NODE_TYPES, KnowledgeStagingAggregator, SKIP_DIRS2, EXT_TO_LANGUAGE, SKIP_EXTENSIONS2, EXTRACTOR_EDGE_TYPE, ExtractionRunner, PATTERNS, TestDescriptionExtractor, EnumConstantExtractor, ValidationRuleExtractor, ApiPathExtractor, ALL_EXTRACTORS, ImageAnalysisExtractor, KNOWLEDGE_NODE_TYPES, SIMILARITY_THRESHOLD, SEVERITY_MAP, ContradictionDetector, KNOWLEDGE_TYPES, CODE_TYPES2, KNOWLEDGE_EDGE_TYPES, CoverageScorer, VALID_BUSINESS_TYPES, DEFAULT_MAX_DOCS, MAX_COLLISION_SUFFIX, KnowledgeDocMaterializer, BUSINESS_NODE_TYPES2, SNAPSHOT_NODE_TYPES, KnowledgePipelineRunner, CODE_NODE_TYPES5, RETRYABLE_STATUSES, SANITIZE_RULES, SyncManager, SUMMARIZE_PROMPT, JiraConnector, SlackConnector, ConfluenceConnector, CIConnector, CONSTRAINT_KEYWORDS, FigmaConnector, MIN_CONTENT_LENGTH, CONCEPT_ITEM_TYPES, MiroConnector, STOP_WORDS, FusionLayer, CODE_NODE_TYPES6, GraphEntropyAdapter, GraphComplexityAdapter, GraphCouplingAdapter, DEFAULT_THRESHOLD, DEFAULT_METRICS, RECOGNIZED_METRICS, GraphAnomalyAdapter, INTENTS, SIGNAL_WEIGHTS, INTENT_SIGNALS, IntentClassifier, INTENT_KEYWORDS, STOP_WORDS2, PASCAL_OR_CAMEL_RE, FILE_PATH_RE, QUOTED_RE, EntityExtractor, EntityResolver, ResponseFormatter, CompositeProbabilityStrategy, DEFAULT_PROBABILITY_FLOOR, DEFAULT_MAX_DEPTH, CascadeSimulator, ENTITY_REQUIRED_INTENTS, classifier, extractor, formatter, PHASE_NODE_TYPES, CODE_NODE_TYPES7, Assembler, GraphConstraintAdapter, DesignIngestor, DesignConstraintAdapter, GraphFeedbackAdapter, DEFAULT_EDGE_TYPES, TaskIndependenceAnalyzer, ConflictPredictor, VERSION;
|
|
1447
1506
|
var init_dist = __esm({
|
|
1448
1507
|
"../graph/dist/index.mjs"() {
|
|
1449
1508
|
NODE_TYPES = [
|
|
@@ -3452,6 +3511,27 @@ var init_dist = __esm({
|
|
|
3452
3511
|
return count;
|
|
3453
3512
|
}
|
|
3454
3513
|
};
|
|
3514
|
+
DEFAULT_PATTERNS = [
|
|
3515
|
+
"packages/<dir>",
|
|
3516
|
+
"apps/<dir>",
|
|
3517
|
+
"services/<dir>",
|
|
3518
|
+
"src/<dir>",
|
|
3519
|
+
"lib/<dir>"
|
|
3520
|
+
];
|
|
3521
|
+
DEFAULT_BLOCKLIST = /* @__PURE__ */ new Set([
|
|
3522
|
+
"node_modules",
|
|
3523
|
+
".harness",
|
|
3524
|
+
"dist",
|
|
3525
|
+
"build",
|
|
3526
|
+
".git",
|
|
3527
|
+
"coverage",
|
|
3528
|
+
".next",
|
|
3529
|
+
".turbo",
|
|
3530
|
+
".cache",
|
|
3531
|
+
"out",
|
|
3532
|
+
"tmp"
|
|
3533
|
+
]);
|
|
3534
|
+
CODE_EXTENSIONS = [".ts", ".tsx", ".js", ".jsx", ".mjs", ".cjs"];
|
|
3455
3535
|
MermaidParser = class {
|
|
3456
3536
|
canParse(_content, ext) {
|
|
3457
3537
|
return ext === ".mmd" || ext === ".mermaid";
|
|
@@ -3957,10 +4037,12 @@ var init_dist = __esm({
|
|
|
3957
4037
|
"business_fact"
|
|
3958
4038
|
];
|
|
3959
4039
|
KnowledgeStagingAggregator = class {
|
|
3960
|
-
constructor(projectDir) {
|
|
4040
|
+
constructor(projectDir, inferenceOptions = {}) {
|
|
3961
4041
|
this.projectDir = projectDir;
|
|
4042
|
+
this.inferenceOptions = inferenceOptions;
|
|
3962
4043
|
}
|
|
3963
4044
|
projectDir;
|
|
4045
|
+
inferenceOptions;
|
|
3964
4046
|
async aggregate(extractorResults, linkerResults, diagramResults) {
|
|
3965
4047
|
const all = [...extractorResults, ...linkerResults, ...diagramResults];
|
|
3966
4048
|
const byHash = /* @__PURE__ */ new Map();
|
|
@@ -4029,7 +4111,7 @@ var init_dist = __esm({
|
|
|
4029
4111
|
for (const nodeType of BUSINESS_NODE_TYPES) {
|
|
4030
4112
|
const nodes = store.findNodes({ type: nodeType });
|
|
4031
4113
|
for (const node of nodes) {
|
|
4032
|
-
const domain = node.
|
|
4114
|
+
const domain = inferDomain(node, this.inferenceOptions);
|
|
4033
4115
|
const list = extractedByDomain.get(domain) ?? [];
|
|
4034
4116
|
list.push(node);
|
|
4035
4117
|
extractedByDomain.set(domain, list);
|
|
@@ -5565,11 +5647,15 @@ var init_dist = __esm({
|
|
|
5565
5647
|
"annotates"
|
|
5566
5648
|
];
|
|
5567
5649
|
CoverageScorer = class {
|
|
5650
|
+
constructor(inferenceOptions = {}) {
|
|
5651
|
+
this.inferenceOptions = inferenceOptions;
|
|
5652
|
+
}
|
|
5653
|
+
inferenceOptions;
|
|
5568
5654
|
score(store) {
|
|
5569
5655
|
const knowledgeNodes = KNOWLEDGE_TYPES.flatMap((t) => store.findNodes({ type: t }));
|
|
5570
|
-
const domainMap = groupByDomain(knowledgeNodes,
|
|
5656
|
+
const domainMap = groupByDomain(knowledgeNodes, void 0, this.inferenceOptions);
|
|
5571
5657
|
const codeNodes = CODE_TYPES2.flatMap((t) => store.findNodes({ type: t }));
|
|
5572
|
-
const codeDomains = groupByDomain(codeNodes,
|
|
5658
|
+
const codeDomains = groupByDomain(codeNodes, void 0, this.inferenceOptions);
|
|
5573
5659
|
const allDomains = /* @__PURE__ */ new Set([...domainMap.keys(), ...codeDomains.keys()]);
|
|
5574
5660
|
const domains = [];
|
|
5575
5661
|
for (const domain of allDomains) {
|
|
@@ -5585,15 +5671,6 @@ var init_dist = __esm({
|
|
|
5585
5671
|
generatedAt: (/* @__PURE__ */ new Date()).toISOString()
|
|
5586
5672
|
};
|
|
5587
5673
|
}
|
|
5588
|
-
domainFromPath(filePath) {
|
|
5589
|
-
if (!filePath) return "unclassified";
|
|
5590
|
-
const parts = filePath.split("/");
|
|
5591
|
-
const pkgIdx = parts.indexOf("packages");
|
|
5592
|
-
if (pkgIdx >= 0 && parts[pkgIdx + 1]) return parts[pkgIdx + 1];
|
|
5593
|
-
const srcIdx = parts.indexOf("src");
|
|
5594
|
-
if (srcIdx >= 0 && parts[srcIdx + 1]) return parts[srcIdx + 1];
|
|
5595
|
-
return parts[0] ?? "unclassified";
|
|
5596
|
-
}
|
|
5597
5674
|
};
|
|
5598
5675
|
VALID_BUSINESS_TYPES = /* @__PURE__ */ new Set([
|
|
5599
5676
|
"business_rule",
|
|
@@ -5605,10 +5682,12 @@ var init_dist = __esm({
|
|
|
5605
5682
|
DEFAULT_MAX_DOCS = 50;
|
|
5606
5683
|
MAX_COLLISION_SUFFIX = 10;
|
|
5607
5684
|
KnowledgeDocMaterializer = class {
|
|
5608
|
-
constructor(store) {
|
|
5685
|
+
constructor(store, inferenceOptions = {}) {
|
|
5609
5686
|
this.store = store;
|
|
5687
|
+
this.inferenceOptions = inferenceOptions;
|
|
5610
5688
|
}
|
|
5611
5689
|
store;
|
|
5690
|
+
inferenceOptions;
|
|
5612
5691
|
async materialize(gapEntries, options) {
|
|
5613
5692
|
const maxDocs = options.maxDocs ?? DEFAULT_MAX_DOCS;
|
|
5614
5693
|
const created = [];
|
|
@@ -5664,21 +5743,8 @@ var init_dist = __esm({
|
|
|
5664
5743
|
return { node, domain, domainDir, nameKey };
|
|
5665
5744
|
}
|
|
5666
5745
|
inferDomain(node) {
|
|
5667
|
-
|
|
5668
|
-
|
|
5669
|
-
}
|
|
5670
|
-
if (node.path) {
|
|
5671
|
-
const pkgMatch = node.path.match(/^packages\/([^/]+)/);
|
|
5672
|
-
if (pkgMatch) return pkgMatch[1];
|
|
5673
|
-
const srcMatch = node.path.match(/^src\/([^/]+)/);
|
|
5674
|
-
if (srcMatch) return srcMatch[1];
|
|
5675
|
-
}
|
|
5676
|
-
if (node.metadata?.source === "knowledge-linker" || node.metadata?.source === "connector") {
|
|
5677
|
-
const connector = node.metadata.connectorName;
|
|
5678
|
-
if (typeof connector === "string") return connector;
|
|
5679
|
-
return "general";
|
|
5680
|
-
}
|
|
5681
|
-
return null;
|
|
5746
|
+
const result = inferDomain(node, this.inferenceOptions);
|
|
5747
|
+
return result === "unknown" ? null : result;
|
|
5682
5748
|
}
|
|
5683
5749
|
generateFilename(name) {
|
|
5684
5750
|
const slug = name.toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-|-$/g, "").slice(0, 60);
|
|
@@ -5770,7 +5836,10 @@ var init_dist = __esm({
|
|
|
5770
5836
|
this.store = store;
|
|
5771
5837
|
}
|
|
5772
5838
|
store;
|
|
5839
|
+
/** Resolved per-`run()` inference options. Set on entry to `run()`. */
|
|
5840
|
+
inferenceOptions = {};
|
|
5773
5841
|
async run(options) {
|
|
5842
|
+
this.inferenceOptions = options.inferenceOptions ?? {};
|
|
5774
5843
|
const remediations = [];
|
|
5775
5844
|
const preSnapshot = this.buildSnapshot(options.domain);
|
|
5776
5845
|
const extraction = await this.extract(options);
|
|
@@ -5778,7 +5847,7 @@ var init_dist = __esm({
|
|
|
5778
5847
|
let driftResult = this.reconcile(preSnapshot, postSnapshot);
|
|
5779
5848
|
const contradictions = new ContradictionDetector().detect(this.store);
|
|
5780
5849
|
let gapReport = await this.detect(options);
|
|
5781
|
-
const coverage = new CoverageScorer().score(this.store);
|
|
5850
|
+
const coverage = new CoverageScorer(this.inferenceOptions).score(this.store);
|
|
5782
5851
|
let materialization;
|
|
5783
5852
|
let iterations = 1;
|
|
5784
5853
|
if (options.fix) {
|
|
@@ -5941,7 +6010,7 @@ var init_dist = __esm({
|
|
|
5941
6010
|
// ── Phase 3: DETECT ───────────────────────────────────────────────────────
|
|
5942
6011
|
async detect(options) {
|
|
5943
6012
|
const knowledgeDir = path12.join(options.projectDir, "docs", "knowledge");
|
|
5944
|
-
const aggregator = new KnowledgeStagingAggregator(options.projectDir);
|
|
6013
|
+
const aggregator = new KnowledgeStagingAggregator(options.projectDir, this.inferenceOptions);
|
|
5945
6014
|
const gapReport = await aggregator.generateGapReport(knowledgeDir, this.store);
|
|
5946
6015
|
await aggregator.writeGapReport(gapReport);
|
|
5947
6016
|
return gapReport;
|
|
@@ -5969,7 +6038,7 @@ var init_dist = __esm({
|
|
|
5969
6038
|
const allGapEntries = gapReport.domains.flatMap((d) => d.gapEntries);
|
|
5970
6039
|
const materializable = allGapEntries.filter((e) => e.hasContent);
|
|
5971
6040
|
if (materializable.length > 0) {
|
|
5972
|
-
const materializer = new KnowledgeDocMaterializer(this.store);
|
|
6041
|
+
const materializer = new KnowledgeDocMaterializer(this.store, this.inferenceOptions);
|
|
5973
6042
|
const matResult = await materializer.materialize(materializable, {
|
|
5974
6043
|
projectDir: options.projectDir,
|
|
5975
6044
|
dryRun: false
|
|
@@ -5995,7 +6064,7 @@ var init_dist = __esm({
|
|
|
5995
6064
|
timestamp: (/* @__PURE__ */ new Date()).toISOString()
|
|
5996
6065
|
}));
|
|
5997
6066
|
if (stagedEntries.length > 0) {
|
|
5998
|
-
const aggregator = new KnowledgeStagingAggregator(options.projectDir);
|
|
6067
|
+
const aggregator = new KnowledgeStagingAggregator(options.projectDir, this.inferenceOptions);
|
|
5999
6068
|
await aggregator.aggregate(stagedEntries, [], []);
|
|
6000
6069
|
}
|
|
6001
6070
|
}
|
|
@@ -9301,6 +9370,9 @@ export {
|
|
|
9301
9370
|
BusinessKnowledgeIngestor,
|
|
9302
9371
|
DecisionIngestor,
|
|
9303
9372
|
RequirementIngestor,
|
|
9373
|
+
DEFAULT_PATTERNS,
|
|
9374
|
+
DEFAULT_BLOCKLIST,
|
|
9375
|
+
inferDomain,
|
|
9304
9376
|
MermaidParser,
|
|
9305
9377
|
D2Parser,
|
|
9306
9378
|
PlantUmlParser,
|