@yasserkhanorg/e2e-agents 1.8.5 → 1.9.5
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/README.md +95 -8
- package/dist/adapters/cypress.d.ts +10 -0
- package/dist/adapters/cypress.d.ts.map +1 -0
- package/dist/adapters/cypress.js +86 -0
- package/dist/adapters/framework_adapter.d.ts +41 -0
- package/dist/adapters/framework_adapter.d.ts.map +1 -0
- package/dist/adapters/framework_adapter.js +152 -0
- package/dist/adapters/playwright.d.ts +10 -0
- package/dist/adapters/playwright.d.ts.map +1 -0
- package/dist/adapters/playwright.js +86 -0
- package/dist/adapters/pytest.d.ts +10 -0
- package/dist/adapters/pytest.d.ts.map +1 -0
- package/dist/adapters/pytest.js +96 -0
- package/dist/adapters/supertest.d.ts +12 -0
- package/dist/adapters/supertest.d.ts.map +1 -0
- package/dist/adapters/supertest.js +85 -0
- package/dist/agent/config.d.ts +1 -1
- package/dist/agent/config.d.ts.map +1 -1
- package/dist/agent/git.d.ts +1 -0
- package/dist/agent/git.d.ts.map +1 -1
- package/dist/agent/git.js +3 -0
- package/dist/agentic/fix_loop.d.ts.map +1 -1
- package/dist/agentic/fix_loop.js +5 -4
- package/dist/agentic/runner.d.ts +2 -0
- package/dist/agentic/runner.d.ts.map +1 -1
- package/dist/agentic/runner.js +15 -12
- package/dist/agents/cross-impact.d.ts.map +1 -1
- package/dist/agents/cross-impact.js +6 -1
- package/dist/agents/executor.d.ts.map +1 -1
- package/dist/agents/executor.js +6 -1
- package/dist/agents/strategist.d.ts.map +1 -1
- package/dist/agents/strategist.js +6 -1
- package/dist/agents/test-designer.d.ts.map +1 -1
- package/dist/agents/test-designer.js +6 -1
- package/dist/anthropic_provider.d.ts.map +1 -1
- package/dist/anthropic_provider.js +1 -0
- package/dist/base_provider.d.ts +56 -0
- package/dist/base_provider.d.ts.map +1 -1
- package/dist/base_provider.js +123 -1
- package/dist/budget_ledger.d.ts +28 -0
- package/dist/budget_ledger.d.ts.map +1 -0
- package/dist/budget_ledger.js +62 -0
- package/dist/cache/cached_provider.d.ts +45 -0
- package/dist/cache/cached_provider.d.ts.map +1 -0
- package/dist/cache/cached_provider.js +88 -0
- package/dist/cache/response_cache.d.ts +79 -0
- package/dist/cache/response_cache.d.ts.map +1 -0
- package/dist/cache/response_cache.js +177 -0
- package/dist/cli/commands/bootstrap.d.ts +3 -0
- package/dist/cli/commands/bootstrap.d.ts.map +1 -0
- package/dist/cli/commands/bootstrap.js +109 -0
- package/dist/cli/commands/cost_report.d.ts +3 -0
- package/dist/cli/commands/cost_report.d.ts.map +1 -0
- package/dist/cli/commands/cost_report.js +115 -0
- package/dist/cli/commands/crew.d.ts.map +1 -1
- package/dist/cli/commands/crew.js +118 -1
- package/dist/cli/commands/gate.d.ts +3 -0
- package/dist/cli/commands/gate.d.ts.map +1 -0
- package/dist/cli/commands/gate.js +86 -0
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +7 -62
- package/dist/cli/commands/train.d.ts.map +1 -1
- package/dist/cli/commands/train.js +16 -21
- package/dist/cli/defaults.d.ts +35 -0
- package/dist/cli/defaults.d.ts.map +1 -0
- package/dist/cli/defaults.js +125 -0
- package/dist/cli/errors.d.ts +27 -0
- package/dist/cli/errors.d.ts.map +1 -0
- package/dist/cli/errors.js +57 -0
- package/dist/cli/parse_args.d.ts.map +1 -1
- package/dist/cli/parse_args.js +24 -2
- package/dist/cli/types.d.ts +7 -1
- package/dist/cli/types.d.ts.map +1 -1
- package/dist/cli.js +47 -2
- package/dist/crew/context.d.ts +15 -0
- package/dist/crew/context.d.ts.map +1 -1
- package/dist/crew/orchestrator.d.ts +14 -0
- package/dist/crew/orchestrator.d.ts.map +1 -1
- package/dist/crew/orchestrator.js +162 -4
- package/dist/crew/protocol.d.ts +13 -0
- package/dist/crew/protocol.d.ts.map +1 -1
- package/dist/crew/provider.d.ts +15 -1
- package/dist/crew/provider.d.ts.map +1 -1
- package/dist/crew/provider.js +24 -4
- package/dist/custom_provider.d.ts.map +1 -1
- package/dist/custom_provider.js +1 -0
- package/dist/engine/diff_loader.d.ts.map +1 -1
- package/dist/engine/diff_loader.js +3 -14
- package/dist/engine/impact_engine.d.ts.map +1 -1
- package/dist/engine/impact_engine.js +9 -23
- package/dist/esm/adapters/cypress.js +49 -0
- package/dist/esm/adapters/framework_adapter.js +114 -0
- package/dist/esm/adapters/playwright.js +49 -0
- package/dist/esm/adapters/pytest.js +59 -0
- package/dist/esm/adapters/supertest.js +48 -0
- package/dist/esm/agent/git.js +3 -1
- package/dist/esm/agentic/fix_loop.js +5 -4
- package/dist/esm/agentic/runner.js +15 -12
- package/dist/esm/agents/cross-impact.js +6 -1
- package/dist/esm/agents/executor.js +6 -1
- package/dist/esm/agents/strategist.js +6 -1
- package/dist/esm/agents/test-designer.js +6 -1
- package/dist/esm/anthropic_provider.js +1 -0
- package/dist/esm/base_provider.js +121 -0
- package/dist/esm/budget_ledger.js +58 -0
- package/dist/esm/cache/cached_provider.js +82 -0
- package/dist/esm/cache/response_cache.js +140 -0
- package/dist/esm/cli/commands/bootstrap.js +106 -0
- package/dist/esm/cli/commands/cost_report.js +112 -0
- package/dist/esm/cli/commands/crew.js +118 -1
- package/dist/esm/cli/commands/gate.js +83 -0
- package/dist/esm/cli/commands/init.js +3 -58
- package/dist/esm/cli/commands/train.js +16 -21
- package/dist/esm/cli/defaults.js +118 -0
- package/dist/esm/cli/errors.js +52 -0
- package/dist/esm/cli/parse_args.js +24 -2
- package/dist/esm/cli.js +47 -2
- package/dist/esm/crew/orchestrator.js +162 -4
- package/dist/esm/crew/provider.js +24 -4
- package/dist/esm/custom_provider.js +1 -0
- package/dist/esm/engine/diff_loader.js +1 -12
- package/dist/esm/engine/impact_engine.js +9 -23
- package/dist/esm/index.js +21 -0
- package/dist/esm/knowledge/cluster_utils.js +60 -0
- package/dist/esm/knowledge/kg_bridge.js +381 -0
- package/dist/esm/knowledge/kg_types.js +3 -0
- package/dist/esm/knowledge/route_families.js +89 -0
- package/dist/esm/mcp-server.js +2 -4
- package/dist/esm/metrics/prometheus.js +149 -0
- package/dist/esm/model_router.js +59 -0
- package/dist/esm/ollama_provider.js +1 -0
- package/dist/esm/openai_provider.js +1 -0
- package/dist/esm/pipeline/orchestrator.js +6 -12
- package/dist/esm/pipeline/stage0_preprocess.js +12 -19
- package/dist/esm/pipeline/stage2_coverage.js +1 -0
- package/dist/esm/pipeline/stage3_generation.js +1 -0
- package/dist/esm/progress.js +112 -0
- package/dist/esm/prompts/coverage.js +7 -24
- package/dist/esm/prompts/cross-impact.js +3 -21
- package/dist/esm/prompts/generation.js +158 -36
- package/dist/esm/prompts/generation_profile.js +147 -0
- package/dist/esm/prompts/heal.js +33 -15
- package/dist/esm/prompts/impact.js +3 -22
- package/dist/esm/prompts/json_extract.js +36 -0
- package/dist/esm/prompts/strategist.js +2 -20
- package/dist/esm/prompts/test-designer.js +6 -21
- package/dist/esm/provider_factory.js +6 -4
- package/dist/esm/reporters/junit.js +86 -0
- package/dist/esm/reporters/reporter.js +3 -0
- package/dist/esm/reporters/sarif.js +131 -0
- package/dist/esm/resilience/circuit_breaker.js +78 -0
- package/dist/esm/resilience/retry.js +56 -0
- package/dist/esm/sanitize.js +66 -0
- package/dist/esm/training/kg_scanner.js +115 -0
- package/dist/esm/training/scanner.js +27 -34
- package/dist/esm/version.js +33 -0
- package/dist/index.d.ts +21 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +45 -1
- package/dist/knowledge/cluster_utils.d.ts +28 -0
- package/dist/knowledge/cluster_utils.d.ts.map +1 -0
- package/dist/knowledge/cluster_utils.js +67 -0
- package/dist/knowledge/kg_bridge.d.ts +31 -0
- package/dist/knowledge/kg_bridge.d.ts.map +1 -0
- package/dist/knowledge/kg_bridge.js +388 -0
- package/dist/knowledge/kg_types.d.ts +75 -0
- package/dist/knowledge/kg_types.d.ts.map +1 -0
- package/dist/knowledge/kg_types.js +4 -0
- package/dist/knowledge/route_families.d.ts +18 -0
- package/dist/knowledge/route_families.d.ts.map +1 -1
- package/dist/knowledge/route_families.js +91 -0
- package/dist/mcp-server.d.ts.map +1 -1
- package/dist/mcp-server.js +2 -4
- package/dist/metrics/prometheus.d.ts +37 -0
- package/dist/metrics/prometheus.d.ts.map +1 -0
- package/dist/metrics/prometheus.js +153 -0
- package/dist/model_router.d.ts +28 -0
- package/dist/model_router.d.ts.map +1 -0
- package/dist/model_router.js +63 -0
- package/dist/ollama_provider.d.ts.map +1 -1
- package/dist/ollama_provider.js +1 -0
- package/dist/openai_provider.d.ts.map +1 -1
- package/dist/openai_provider.js +1 -0
- package/dist/pipeline/orchestrator.d.ts +2 -0
- package/dist/pipeline/orchestrator.d.ts.map +1 -1
- package/dist/pipeline/orchestrator.js +6 -12
- package/dist/pipeline/stage0_preprocess.d.ts.map +1 -1
- package/dist/pipeline/stage0_preprocess.js +11 -18
- package/dist/pipeline/stage2_coverage.d.ts +2 -0
- package/dist/pipeline/stage2_coverage.d.ts.map +1 -1
- package/dist/pipeline/stage2_coverage.js +1 -0
- package/dist/pipeline/stage3_generation.d.ts +2 -0
- package/dist/pipeline/stage3_generation.d.ts.map +1 -1
- package/dist/pipeline/stage3_generation.js +1 -0
- package/dist/pipeline/stage4_heal.d.ts +2 -0
- package/dist/pipeline/stage4_heal.d.ts.map +1 -1
- package/dist/progress.d.ts +22 -0
- package/dist/progress.d.ts.map +1 -0
- package/dist/progress.js +116 -0
- package/dist/prompts/coverage.d.ts +2 -0
- package/dist/prompts/coverage.d.ts.map +1 -1
- package/dist/prompts/coverage.js +7 -24
- package/dist/prompts/cross-impact.d.ts +1 -0
- package/dist/prompts/cross-impact.d.ts.map +1 -1
- package/dist/prompts/cross-impact.js +3 -21
- package/dist/prompts/generation.d.ts +3 -1
- package/dist/prompts/generation.d.ts.map +1 -1
- package/dist/prompts/generation.js +158 -36
- package/dist/prompts/generation_profile.d.ts +29 -0
- package/dist/prompts/generation_profile.d.ts.map +1 -0
- package/dist/prompts/generation_profile.js +151 -0
- package/dist/prompts/heal.d.ts +3 -1
- package/dist/prompts/heal.d.ts.map +1 -1
- package/dist/prompts/heal.js +33 -15
- package/dist/prompts/impact.d.ts +1 -0
- package/dist/prompts/impact.d.ts.map +1 -1
- package/dist/prompts/impact.js +3 -22
- package/dist/prompts/json_extract.d.ts +14 -0
- package/dist/prompts/json_extract.d.ts.map +1 -0
- package/dist/prompts/json_extract.js +39 -0
- package/dist/prompts/strategist.d.ts.map +1 -1
- package/dist/prompts/strategist.js +2 -20
- package/dist/prompts/test-designer.d.ts +2 -0
- package/dist/prompts/test-designer.d.ts.map +1 -1
- package/dist/prompts/test-designer.js +6 -21
- package/dist/provider_factory.d.ts.map +1 -1
- package/dist/provider_factory.js +6 -4
- package/dist/reporters/junit.d.ts +6 -0
- package/dist/reporters/junit.d.ts.map +1 -0
- package/dist/reporters/junit.js +89 -0
- package/dist/reporters/reporter.d.ts +42 -0
- package/dist/reporters/reporter.d.ts.map +1 -0
- package/dist/reporters/reporter.js +4 -0
- package/dist/reporters/sarif.d.ts +7 -0
- package/dist/reporters/sarif.d.ts.map +1 -0
- package/dist/reporters/sarif.js +134 -0
- package/dist/resilience/circuit_breaker.d.ts +36 -0
- package/dist/resilience/circuit_breaker.d.ts.map +1 -0
- package/dist/resilience/circuit_breaker.js +82 -0
- package/dist/resilience/retry.d.ts +11 -0
- package/dist/resilience/retry.d.ts.map +1 -0
- package/dist/resilience/retry.js +59 -0
- package/dist/sanitize.d.ts +15 -0
- package/dist/sanitize.d.ts.map +1 -0
- package/dist/sanitize.js +71 -0
- package/dist/training/kg_scanner.d.ts +13 -0
- package/dist/training/kg_scanner.d.ts.map +1 -0
- package/dist/training/kg_scanner.js +118 -0
- package/dist/training/scanner.d.ts +7 -2
- package/dist/training/scanner.d.ts.map +1 -1
- package/dist/training/scanner.js +27 -34
- package/dist/version.d.ts +6 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +36 -0
- package/package.json +7 -2
- package/schemas/route-families.schema.json +31 -1
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
// See LICENSE.txt for license information.
|
|
3
3
|
import { readdirSync, readFileSync, lstatSync, existsSync } from 'fs';
|
|
4
4
|
import { join, relative, basename, resolve } from 'path';
|
|
5
|
+
import { normalizeToClusterId } from '../knowledge/cluster_utils.js';
|
|
5
6
|
const SOURCE_MAX_DEPTH = 3;
|
|
6
7
|
// One deeper than source to account for test framework wrapper dirs (e2e/, integration/)
|
|
7
8
|
const TEST_MAX_DEPTH = 5;
|
|
@@ -35,10 +36,11 @@ const STRUCTURAL_DIRS = new Set([
|
|
|
35
36
|
'middleware', 'contexts', 'providers', 'layouts', 'templates',
|
|
36
37
|
]);
|
|
37
38
|
/**
|
|
38
|
-
*
|
|
39
|
+
* Default server Go files that are infrastructure / cross-cutting concerns,
|
|
39
40
|
* not feature-specific domains. Matched after stripping _local/_store suffixes.
|
|
41
|
+
* Override via ScannerConfig.serverInfraFiles.
|
|
40
42
|
*/
|
|
41
|
-
const
|
|
43
|
+
const DEFAULT_SERVER_INFRA_FILES = new Set([
|
|
42
44
|
'api', 'apitestlib', 'context', 'helpers', 'params', 'swagger',
|
|
43
45
|
'app', 'server', 'enterprise', 'product_service', 'security_update_check',
|
|
44
46
|
'store', 'adapters', 'errors', 'integrity', 'migrate', 'doc',
|
|
@@ -48,10 +50,11 @@ const SERVER_INFRA_FILES = new Set([
|
|
|
48
50
|
'manifest', 'permission', 'log', 'utils',
|
|
49
51
|
]);
|
|
50
52
|
/**
|
|
51
|
-
*
|
|
53
|
+
* Default server tier directories to scan for Go domain files.
|
|
52
54
|
* Each tier represents a layer of the backend architecture.
|
|
55
|
+
* Override via ScannerConfig.serverTiers.
|
|
53
56
|
*/
|
|
54
|
-
const
|
|
57
|
+
const DEFAULT_SERVER_TIERS = [
|
|
55
58
|
'channels/api4',
|
|
56
59
|
'channels/app',
|
|
57
60
|
'channels/store/sqlstore',
|
|
@@ -64,13 +67,7 @@ const includes = (arr, v) => arr.includes(v);
|
|
|
64
67
|
function isSkipped(name) {
|
|
65
68
|
return name.startsWith('.') || SKIP_DIRS.has(name);
|
|
66
69
|
}
|
|
67
|
-
|
|
68
|
-
return name
|
|
69
|
-
.replace(/[A-Z]/g, (c, idx) => (idx > 0 ? `_${c.toLowerCase()}` : c.toLowerCase()))
|
|
70
|
-
.replace(/[^a-z0-9_]/g, '_')
|
|
71
|
-
.replace(/_+/g, '_')
|
|
72
|
-
.replace(/^_|_$/g, '');
|
|
73
|
-
}
|
|
70
|
+
const normalizeId = normalizeToClusterId;
|
|
74
71
|
function extractFamilyHint(dirPath, projectRoot) {
|
|
75
72
|
const rel = relative(projectRoot, dirPath).replace(/\\/g, '/');
|
|
76
73
|
const parts = rel.split('/').filter(Boolean);
|
|
@@ -88,32 +85,25 @@ function walkDirs(root, projectRoot, category, maxDepth, results, depth = 0) {
|
|
|
88
85
|
if (depth > maxDepth || !existsSync(root)) {
|
|
89
86
|
return;
|
|
90
87
|
}
|
|
91
|
-
let
|
|
88
|
+
let dirents;
|
|
92
89
|
try {
|
|
93
|
-
|
|
90
|
+
dirents = readdirSync(root, { withFileTypes: true });
|
|
94
91
|
}
|
|
95
92
|
catch {
|
|
96
93
|
// ENOENT or EACCES — skip inaccessible entries
|
|
97
94
|
return;
|
|
98
95
|
}
|
|
99
|
-
const hasSourceFiles =
|
|
100
|
-
|
|
96
|
+
const hasSourceFiles = dirents.some((d) => {
|
|
97
|
+
if (!d.isFile())
|
|
98
|
+
return false;
|
|
99
|
+
const ext = d.name.slice(d.name.lastIndexOf('.'));
|
|
101
100
|
return ['.ts', '.tsx', '.js', '.jsx', '.go', '.py', '.rs'].includes(ext);
|
|
102
101
|
});
|
|
103
|
-
const subdirs =
|
|
104
|
-
if (
|
|
102
|
+
const subdirs = dirents.filter((d) => {
|
|
103
|
+
if (!d.isDirectory() || d.isSymbolicLink())
|
|
105
104
|
return false;
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
if (stat.isSymbolicLink())
|
|
109
|
-
return false;
|
|
110
|
-
return stat.isDirectory();
|
|
111
|
-
}
|
|
112
|
-
catch {
|
|
113
|
-
// ENOENT or EACCES — skip inaccessible entries
|
|
114
|
-
return false;
|
|
115
|
-
}
|
|
116
|
-
});
|
|
105
|
+
return !isSkipped(d.name);
|
|
106
|
+
}).map((d) => d.name);
|
|
117
107
|
if (hasSourceFiles && depth >= 1) {
|
|
118
108
|
results.push({
|
|
119
109
|
path: resolve(root),
|
|
@@ -410,7 +400,7 @@ function findParentDomain(name, allDomains) {
|
|
|
410
400
|
*
|
|
411
401
|
* Each domain becomes a candidate family with precise serverPaths.
|
|
412
402
|
*/
|
|
413
|
-
export function discoverServerDerivedFamilies(serverRoot) {
|
|
403
|
+
export function discoverServerDerivedFamilies(serverRoot, infraFiles = DEFAULT_SERVER_INFRA_FILES, tiers = DEFAULT_SERVER_TIERS) {
|
|
414
404
|
const resolved = resolve(serverRoot);
|
|
415
405
|
// First pass: collect all raw domain names across tiers
|
|
416
406
|
const allRawDomains = new Set();
|
|
@@ -421,7 +411,7 @@ export function discoverServerDerivedFamilies(serverRoot) {
|
|
|
421
411
|
return;
|
|
422
412
|
const baseName = entry.replace('.go', '');
|
|
423
413
|
const domain = normalizeServerDomain(baseName);
|
|
424
|
-
if (!domain ||
|
|
414
|
+
if (!domain || infraFiles.has(domain))
|
|
425
415
|
return;
|
|
426
416
|
allRawDomains.add(domain);
|
|
427
417
|
if (!domainTierFiles.has(domain))
|
|
@@ -431,7 +421,7 @@ export function discoverServerDerivedFamilies(serverRoot) {
|
|
|
431
421
|
tierMap.set(tierRelPath, new Set());
|
|
432
422
|
tierMap.get(tierRelPath).add(baseName);
|
|
433
423
|
}
|
|
434
|
-
for (const tier of
|
|
424
|
+
for (const tier of tiers) {
|
|
435
425
|
const tierPath = join(resolved, tier);
|
|
436
426
|
if (!existsSync(tierPath))
|
|
437
427
|
continue;
|
|
@@ -468,7 +458,7 @@ export function discoverServerDerivedFamilies(serverRoot) {
|
|
|
468
458
|
if (!lstatSync(jobPath).isDirectory() || isSkipped(entry))
|
|
469
459
|
continue;
|
|
470
460
|
const domain = normalizeId(entry);
|
|
471
|
-
if (
|
|
461
|
+
if (infraFiles.has(domain))
|
|
472
462
|
continue;
|
|
473
463
|
allRawDomains.add(domain);
|
|
474
464
|
const jobFiles = readdirSync(jobPath);
|
|
@@ -755,7 +745,10 @@ export function discoverNameMatchedPaths(appPath, gitRepoRoot) {
|
|
|
755
745
|
}
|
|
756
746
|
return result;
|
|
757
747
|
}
|
|
758
|
-
export function scanProject(projectRoot, testsRoot, serverRoot, gitRepoRoot) {
|
|
748
|
+
export function scanProject(projectRoot, testsRoot, serverRoot, gitRepoRoot, config) {
|
|
749
|
+
// Resolve scanner config for this run (passed to functions, no module-level mutation)
|
|
750
|
+
const resolvedInfraFiles = config?.serverInfraFiles || DEFAULT_SERVER_INFRA_FILES;
|
|
751
|
+
const resolvedTiers = config?.serverTiers || DEFAULT_SERVER_TIERS;
|
|
759
752
|
const resolved = resolve(projectRoot);
|
|
760
753
|
const resolvedTestsRoot = testsRoot ? resolve(testsRoot) : resolved;
|
|
761
754
|
const sourceDirs = discoverSourceDirs(resolved);
|
|
@@ -818,7 +811,7 @@ export function scanProject(projectRoot, testsRoot, serverRoot, gitRepoRoot) {
|
|
|
818
811
|
// When a separate serverRoot is provided, discover families from Go source
|
|
819
812
|
// filenames across the three-tier backend (api4, app, store).
|
|
820
813
|
if (serverRoot) {
|
|
821
|
-
const { multiTierFamilies: serverMulti, singleTierFamilies: serverSingle } = discoverServerDerivedFamilies(resolve(serverRoot));
|
|
814
|
+
const { multiTierFamilies: serverMulti, singleTierFamilies: serverSingle } = discoverServerDerivedFamilies(resolve(serverRoot), resolvedInfraFiles, resolvedTiers);
|
|
822
815
|
const existingIds = new Set(families.map((f) => f.id));
|
|
823
816
|
// Merge ALL server families (multi + single tier) into existing families,
|
|
824
817
|
// but only add NEW families if they span ≥2 tiers.
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
|
|
2
|
+
// See LICENSE.txt for license information.
|
|
3
|
+
import { readFileSync } from 'fs';
|
|
4
|
+
import { join, dirname } from 'path';
|
|
5
|
+
let _version;
|
|
6
|
+
/**
|
|
7
|
+
* Returns the package version by reading the nearest package.json.
|
|
8
|
+
* Cached after first call.
|
|
9
|
+
*/
|
|
10
|
+
export function getVersion() {
|
|
11
|
+
if (_version)
|
|
12
|
+
return _version;
|
|
13
|
+
try {
|
|
14
|
+
// Walk up from this file's compiled location to find package.json
|
|
15
|
+
for (let d = __dirname, prev = ''; d !== prev; prev = d, d = dirname(d)) {
|
|
16
|
+
try {
|
|
17
|
+
const pkg = JSON.parse(readFileSync(join(d, 'package.json'), 'utf-8'));
|
|
18
|
+
if (pkg.name === '@yasserkhanorg/e2e-agents' && pkg.version) {
|
|
19
|
+
_version = pkg.version;
|
|
20
|
+
return _version;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
catch {
|
|
24
|
+
// keep walking up
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
catch {
|
|
29
|
+
// fallback
|
|
30
|
+
}
|
|
31
|
+
_version = 'unknown';
|
|
32
|
+
return _version;
|
|
33
|
+
}
|
package/dist/index.d.ts
CHANGED
|
@@ -57,7 +57,7 @@ export type { AgenticConfig, AgenticResult, AgenticSummary, PlaywrightRunResult,
|
|
|
57
57
|
export { CrewOrchestrator } from './crew/orchestrator.js';
|
|
58
58
|
export type { CrewConfig, CrewResult } from './crew/orchestrator.js';
|
|
59
59
|
export type { CrewContext } from './crew/context.js';
|
|
60
|
-
export type { Agent, AgentTask, AgentResult, AgentMessage } from './crew/protocol.js';
|
|
60
|
+
export type { Agent, AgentPlugin, AgentTask, AgentResult, AgentMessage } from './crew/protocol.js';
|
|
61
61
|
export type { AgentRole, TestCaseType, TestCase, TestDesign, CrossImpact, Finding, RegressionRisk, StrategyEntry, } from './crew/types.js';
|
|
62
62
|
export type { WorkflowDef, WorkflowName } from './crew/workflows.js';
|
|
63
63
|
export { WORKFLOWS } from './crew/workflows.js';
|
|
@@ -71,9 +71,29 @@ export { StrategistAgent } from './agents/strategist.js';
|
|
|
71
71
|
export { TestDesignerAgent } from './agents/test-designer.js';
|
|
72
72
|
export { CrossImpactAgent } from './agents/cross-impact.js';
|
|
73
73
|
export { RegressionAdvisorAgent } from './agents/regression-advisor.js';
|
|
74
|
+
export { BaseProvider, BudgetExceededError } from './base_provider.js';
|
|
75
|
+
export { BudgetLedger } from './budget_ledger.js';
|
|
76
|
+
export { ModelRouter } from './model_router.js';
|
|
77
|
+
export type { TaskComplexity, ModelRoutingConfig } from './model_router.js';
|
|
78
|
+
export { withRetry } from './resilience/retry.js';
|
|
79
|
+
export type { RetryConfig } from './resilience/retry.js';
|
|
80
|
+
export { CircuitBreaker } from './resilience/circuit_breaker.js';
|
|
81
|
+
export type { CircuitBreakerConfig } from './resilience/circuit_breaker.js';
|
|
82
|
+
export { PrometheusMetrics } from './metrics/prometheus.js';
|
|
83
|
+
export { sanitizeSecrets, containsSecrets, sanitizeObject } from './sanitize.js';
|
|
84
|
+
export { CliError, classifyError, EXIT_CODES } from './cli/errors.js';
|
|
85
|
+
export type { ExitCode } from './cli/errors.js';
|
|
74
86
|
export { scanProject } from './training/scanner.js';
|
|
75
87
|
export { mergeFamilies, detectStaleFamilies } from './training/merger.js';
|
|
76
88
|
export { enrichFamilies } from './training/enricher.js';
|
|
77
89
|
export { getCommitFiles, validateCommit, buildValidationReport, formatValidationReport } from './training/validator.js';
|
|
78
90
|
export type { ScanResult, ScannedFamily, ScannedFeature, DiscoveredDir, EnrichmentResult, ValidationReport, CommitValidation, MergeResult, TrainOptions, } from './training/types.js';
|
|
91
|
+
export type { KnowledgeGraph, KGNode, KGEdge, KGProject } from './knowledge/kg_types.js';
|
|
92
|
+
export { loadKnowledgeGraph, classifyProjectType, transformKGToFamilies, loadDiffOverlay } from './knowledge/kg_bridge.js';
|
|
93
|
+
export { scanFromKnowledgeGraph } from './training/kg_scanner.js';
|
|
94
|
+
export type { GenerationProfile } from './prompts/generation_profile.js';
|
|
95
|
+
export { resolveGenerationProfile, isMattermostProfile } from './prompts/generation_profile.js';
|
|
96
|
+
export type { RunCommand } from './adapters/framework_adapter.js';
|
|
97
|
+
export { detectFramework, detectTestMode } from './adapters/framework_adapter.js';
|
|
98
|
+
export { serializeManifest } from './knowledge/route_families.js';
|
|
79
99
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;GAWG;AAGH,YAAY,EACR,WAAW,EACX,eAAe,EACf,UAAU,EACV,WAAW,EACX,UAAU,EACV,oBAAoB,EACpB,kBAAkB,EAClB,cAAc,EACd,eAAe,EACf,YAAY,EACZ,YAAY,EACZ,YAAY,GACf,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EAAC,gBAAgB,EAAE,0BAA0B,EAAC,MAAM,yBAAyB,CAAC;AAGrF,OAAO,EAAC,iBAAiB,EAAE,mBAAmB,EAAC,MAAM,yBAAyB,CAAC;AAC/E,OAAO,EAAC,cAAc,EAAE,gBAAgB,EAAC,MAAM,sBAAsB,CAAC;AACtE,OAAO,EAAC,cAAc,EAAE,gBAAgB,EAAC,MAAM,sBAAsB,CAAC;AACtE,OAAO,EAAC,cAAc,EAAC,MAAM,sBAAsB,CAAC;AAGpD,OAAO,EAAC,kBAAkB,EAAE,qBAAqB,EAAC,MAAM,uBAAuB,CAAC;AAChF,YAAY,EAAC,YAAY,EAAC,MAAM,uBAAuB,CAAC;AAGxD,OAAO,EAAC,0BAA0B,EAAE,2BAA2B,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,mBAAmB,EAAC,MAAM,UAAU,CAAC;AACjJ,YAAY,EACR,eAAe,EACf,sBAAsB,EACtB,4BAA4B,EAC5B,6BAA6B,GAChC,MAAM,UAAU,CAAC;AAGlB,OAAO,EAAC,aAAa,IAAI,eAAe,EAAE,OAAO,EAAE,qBAAqB,EAAE,cAAc,EAAC,MAAM,2BAA2B,CAAC;AAC3H,YAAY,EAAC,YAAY,EAAE,eAAe,EAAE,cAAc,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,UAAU,EAAE,cAAc,EAAE,SAAS,EAAC,MAAM,2BAA2B,CAAC;AAC5K,OAAO,EAAC,gBAAgB,EAAC,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAC,mBAAmB,EAAC,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAC,0BAA0B,EAAE,eAAe,EAAE,cAAc,EAAE,qBAAqB,EAAC,MAAM,qBAAqB,CAAC;AACvH,YAAY,EAAC,2BAA2B,EAAE,kBAAkB,EAAE,YAAY,EAAE,kBAAkB,EAAC,MAAM,qBAAqB,CAAC;AAC3H,OAAO,EAAC,sBAAsB,EAAC,MAAM,oBAAoB,CAAC;AAC1D,YAAY,EAAC,6BAA6B,EAAE,4BAA4B,EAAC,MAAM,oBAAoB,CAAC;AACpG,OAAO,EAAC,uBAAuB,EAAC,MAAM,gCAAgC,CAAC;AACvE,YAAY,EAAC,yBAAyB,EAAE,wBAAwB,EAAE,uBAAuB,EAAC,MAAM,gCAAgC,CAAC;AACjI,OAAO,EAAC,wBAAwB,EAAC,MAAM,iCAAiC,CAAC;AACzE,YAAY,EAAC,0BAA0B,EAAE,yBAAyB,EAAC,MAAM,iCAAiC,CAAC;AAG3G,OAAO,EAAC,WAAW,EAAC,MAAM,4BAA4B,CAAC;AACvD,YAAY,EAAC,cAAc,EAAE,cAAc,EAAC,MAAM,4BAA4B,CAAC;AAC/E,YAAY,EAAC,YAAY,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,UAAU,EAAE,cAAc,EAAC,MAAM,+BAA+B,CAAC;AACrI,OAAO,EAAC,kBAAkB,EAAC,MAAM,iCAAiC,CAAC;AACnE,YAAY,EAAC,gBAAgB,EAAE,gBAAgB,EAAE,aAAa,EAAC,MAAM,iCAAiC,CAAC;AACvG,OAAO,EAAC,qBAAqB,EAAE,uBAAuB,EAAE,yBAAyB,EAAC,MAAM,yBAAyB,CAAC;AAClH,YAAY,EAAC,uBAAuB,EAAE,uBAAuB,EAAC,MAAM,yBAAyB,CAAC;AAC9F,OAAO,EAAC,YAAY,EAAE,cAAc,EAAE,kBAAkB,EAAE,kBAAkB,EAAC,MAAM,2BAA2B,CAAC;AAC/G,YAAY,EAAC,UAAU,EAAE,UAAU,EAAE,UAAU,EAAC,MAAM,2BAA2B,CAAC;AAClF,OAAO,EAAC,eAAe,EAAE,qBAAqB,EAAC,MAAM,mBAAmB,CAAC;AACzE,YAAY,EAAC,iBAAiB,EAAC,MAAM,mBAAmB,CAAC;AAGzD,OAAO,EAAC,uBAAuB,EAAE,mBAAmB,EAAE,4BAA4B,EAAE,qBAAqB,EAAE,sBAAsB,EAAC,MAAM,+BAA+B,CAAC;AACxK,YAAY,EAAC,WAAW,EAAE,YAAY,EAAE,mBAAmB,EAAE,WAAW,EAAE,eAAe,EAAC,MAAM,+BAA+B,CAAC;AAChI,OAAO,EAAC,eAAe,EAAE,qBAAqB,EAAC,MAAM,4BAA4B,CAAC;AAClF,YAAY,EAAC,iBAAiB,EAAE,iBAAiB,EAAC,MAAM,4BAA4B,CAAC;AACrF,OAAO,EAAC,cAAc,EAAE,iBAAiB,EAAC,MAAM,2BAA2B,CAAC;AAC5E,YAAY,EAAC,SAAS,EAAE,SAAS,EAAC,MAAM,2BAA2B,CAAC;AAGpE,YAAY,EAAC,UAAU,EAAE,YAAY,EAAE,YAAY,EAAE,OAAO,EAAE,WAAW,EAAC,MAAM,kBAAkB,CAAC;AACnG,YAAY,EAAC,UAAU,EAAC,MAAM,iBAAiB,CAAC;AAGhD,OAAO,EAAC,oBAAoB,EAAC,MAAM,qBAAqB,CAAC;AACzD,YAAY,EAAC,aAAa,EAAE,iBAAiB,EAAC,MAAM,qBAAqB,CAAC;AAC1E,YAAY,EAAC,aAAa,EAAE,aAAa,EAAE,cAAc,EAAE,mBAAmB,EAAE,WAAW,EAAC,MAAM,oBAAoB,CAAC;AAGvH,OAAO,EAAC,gBAAgB,EAAC,MAAM,wBAAwB,CAAC;AACxD,YAAY,EAAC,UAAU,EAAE,UAAU,EAAC,MAAM,wBAAwB,CAAC;AACnE,YAAY,EAAC,WAAW,EAAC,MAAM,mBAAmB,CAAC;AACnD,YAAY,EAAC,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,YAAY,EAAC,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
// See LICENSE.txt for license information.
|
|
4
4
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
5
5
|
exports.runAgenticGeneration = exports.getSpecsForFamily = exports.buildSpecIndex = exports.loadOrBuildApiSurface = exports.buildApiSurface = exports.getUserFlowsForBinding = exports.getPriorityForBinding = exports.getCypressSpecDirsForBinding = exports.bindFilesToFamilies = exports.loadRouteFamilyManifest = exports.buildQualityFixPrompt = exports.buildHealPrompt = exports.renderHealMarkdown = exports.resolveHealTargets = exports.healFromReport = exports.runHealStage = exports.detectHallucinatedMethods = exports.parseGenerationResponse = exports.buildGenerationPrompt = exports.runGenerationStage = exports.runPipeline = exports.captureTraceabilityInput = exports.ingestTraceabilityInput = exports.finalizeGeneratedTests = exports.getAdaptiveThresholds = exports.readFlakyTests = exports.readCalibration = exports.appendFeedbackAndRecompute = exports.buildPlanFromImpact = exports.extractScenarios = exports.getPartialGaps = exports.getGapsWithSuppressed = exports.getGaps = exports.analyzeImpactV2 = exports.captureTraceability = exports.ingestTraceability = exports.handoffGeneratedTests = exports.recommendTestsDeterministic = exports.analyzeImpactDeterministic = exports.validateProviderSetup = exports.LLMProviderFactory = exports.CustomProvider = exports.checkOpenAISetup = exports.OpenAIProvider = exports.checkOllamaSetup = exports.OllamaProvider = exports.checkAnthropicSetup = exports.AnthropicProvider = exports.UnsupportedCapabilityError = exports.LLMProviderError = void 0;
|
|
6
|
-
exports.formatValidationReport = exports.buildValidationReport = exports.validateCommit = exports.getCommitFiles = exports.enrichFamilies = exports.detectStaleFamilies = exports.mergeFamilies = exports.scanProject = exports.RegressionAdvisorAgent = exports.CrossImpactAgent = exports.TestDesignerAgent = exports.StrategistAgent = exports.ExplorerAgent = exports.HealerAgent = exports.ExecutorAgent = exports.GeneratorAgent = exports.CoverageEvaluatorAgent = exports.ImpactAnalystAgent = exports.WORKFLOWS = exports.CrewOrchestrator = void 0;
|
|
6
|
+
exports.serializeManifest = exports.detectTestMode = exports.detectFramework = exports.isMattermostProfile = exports.resolveGenerationProfile = exports.scanFromKnowledgeGraph = exports.loadDiffOverlay = exports.transformKGToFamilies = exports.classifyProjectType = exports.loadKnowledgeGraph = exports.formatValidationReport = exports.buildValidationReport = exports.validateCommit = exports.getCommitFiles = exports.enrichFamilies = exports.detectStaleFamilies = exports.mergeFamilies = exports.scanProject = exports.EXIT_CODES = exports.classifyError = exports.CliError = exports.sanitizeObject = exports.containsSecrets = exports.sanitizeSecrets = exports.PrometheusMetrics = exports.CircuitBreaker = exports.withRetry = exports.ModelRouter = exports.BudgetLedger = exports.BudgetExceededError = exports.BaseProvider = exports.RegressionAdvisorAgent = exports.CrossImpactAgent = exports.TestDesignerAgent = exports.StrategistAgent = exports.ExplorerAgent = exports.HealerAgent = exports.ExecutorAgent = exports.GeneratorAgent = exports.CoverageEvaluatorAgent = exports.ImpactAnalystAgent = exports.WORKFLOWS = exports.CrewOrchestrator = void 0;
|
|
7
7
|
var provider_interface_js_1 = require("./provider_interface.js");
|
|
8
8
|
Object.defineProperty(exports, "LLMProviderError", { enumerable: true, get: function () { return provider_interface_js_1.LLMProviderError; } });
|
|
9
9
|
Object.defineProperty(exports, "UnsupportedCapabilityError", { enumerable: true, get: function () { return provider_interface_js_1.UnsupportedCapabilityError; } });
|
|
@@ -110,6 +110,34 @@ var cross_impact_js_1 = require("./agents/cross-impact.js");
|
|
|
110
110
|
Object.defineProperty(exports, "CrossImpactAgent", { enumerable: true, get: function () { return cross_impact_js_1.CrossImpactAgent; } });
|
|
111
111
|
var regression_advisor_js_1 = require("./agents/regression-advisor.js");
|
|
112
112
|
Object.defineProperty(exports, "RegressionAdvisorAgent", { enumerable: true, get: function () { return regression_advisor_js_1.RegressionAdvisorAgent; } });
|
|
113
|
+
// Base provider (for extending with custom providers)
|
|
114
|
+
var base_provider_js_1 = require("./base_provider.js");
|
|
115
|
+
Object.defineProperty(exports, "BaseProvider", { enumerable: true, get: function () { return base_provider_js_1.BaseProvider; } });
|
|
116
|
+
Object.defineProperty(exports, "BudgetExceededError", { enumerable: true, get: function () { return base_provider_js_1.BudgetExceededError; } });
|
|
117
|
+
// Budget tracking
|
|
118
|
+
var budget_ledger_js_1 = require("./budget_ledger.js");
|
|
119
|
+
Object.defineProperty(exports, "BudgetLedger", { enumerable: true, get: function () { return budget_ledger_js_1.BudgetLedger; } });
|
|
120
|
+
// Model routing
|
|
121
|
+
var model_router_js_1 = require("./model_router.js");
|
|
122
|
+
Object.defineProperty(exports, "ModelRouter", { enumerable: true, get: function () { return model_router_js_1.ModelRouter; } });
|
|
123
|
+
// Resilience
|
|
124
|
+
var retry_js_1 = require("./resilience/retry.js");
|
|
125
|
+
Object.defineProperty(exports, "withRetry", { enumerable: true, get: function () { return retry_js_1.withRetry; } });
|
|
126
|
+
var circuit_breaker_js_1 = require("./resilience/circuit_breaker.js");
|
|
127
|
+
Object.defineProperty(exports, "CircuitBreaker", { enumerable: true, get: function () { return circuit_breaker_js_1.CircuitBreaker; } });
|
|
128
|
+
// Metrics
|
|
129
|
+
var prometheus_js_1 = require("./metrics/prometheus.js");
|
|
130
|
+
Object.defineProperty(exports, "PrometheusMetrics", { enumerable: true, get: function () { return prometheus_js_1.PrometheusMetrics; } });
|
|
131
|
+
// Secret scanning
|
|
132
|
+
var sanitize_js_1 = require("./sanitize.js");
|
|
133
|
+
Object.defineProperty(exports, "sanitizeSecrets", { enumerable: true, get: function () { return sanitize_js_1.sanitizeSecrets; } });
|
|
134
|
+
Object.defineProperty(exports, "containsSecrets", { enumerable: true, get: function () { return sanitize_js_1.containsSecrets; } });
|
|
135
|
+
Object.defineProperty(exports, "sanitizeObject", { enumerable: true, get: function () { return sanitize_js_1.sanitizeObject; } });
|
|
136
|
+
// CLI errors
|
|
137
|
+
var errors_js_1 = require("./cli/errors.js");
|
|
138
|
+
Object.defineProperty(exports, "CliError", { enumerable: true, get: function () { return errors_js_1.CliError; } });
|
|
139
|
+
Object.defineProperty(exports, "classifyError", { enumerable: true, get: function () { return errors_js_1.classifyError; } });
|
|
140
|
+
Object.defineProperty(exports, "EXIT_CODES", { enumerable: true, get: function () { return errors_js_1.EXIT_CODES; } });
|
|
113
141
|
// Training (route-families bootstrap and maintenance)
|
|
114
142
|
var scanner_js_1 = require("./training/scanner.js");
|
|
115
143
|
Object.defineProperty(exports, "scanProject", { enumerable: true, get: function () { return scanner_js_1.scanProject; } });
|
|
@@ -123,3 +151,19 @@ Object.defineProperty(exports, "getCommitFiles", { enumerable: true, get: functi
|
|
|
123
151
|
Object.defineProperty(exports, "validateCommit", { enumerable: true, get: function () { return validator_js_1.validateCommit; } });
|
|
124
152
|
Object.defineProperty(exports, "buildValidationReport", { enumerable: true, get: function () { return validator_js_1.buildValidationReport; } });
|
|
125
153
|
Object.defineProperty(exports, "formatValidationReport", { enumerable: true, get: function () { return validator_js_1.formatValidationReport; } });
|
|
154
|
+
var kg_bridge_js_1 = require("./knowledge/kg_bridge.js");
|
|
155
|
+
Object.defineProperty(exports, "loadKnowledgeGraph", { enumerable: true, get: function () { return kg_bridge_js_1.loadKnowledgeGraph; } });
|
|
156
|
+
Object.defineProperty(exports, "classifyProjectType", { enumerable: true, get: function () { return kg_bridge_js_1.classifyProjectType; } });
|
|
157
|
+
Object.defineProperty(exports, "transformKGToFamilies", { enumerable: true, get: function () { return kg_bridge_js_1.transformKGToFamilies; } });
|
|
158
|
+
Object.defineProperty(exports, "loadDiffOverlay", { enumerable: true, get: function () { return kg_bridge_js_1.loadDiffOverlay; } });
|
|
159
|
+
var kg_scanner_js_1 = require("./training/kg_scanner.js");
|
|
160
|
+
Object.defineProperty(exports, "scanFromKnowledgeGraph", { enumerable: true, get: function () { return kg_scanner_js_1.scanFromKnowledgeGraph; } });
|
|
161
|
+
var generation_profile_js_1 = require("./prompts/generation_profile.js");
|
|
162
|
+
Object.defineProperty(exports, "resolveGenerationProfile", { enumerable: true, get: function () { return generation_profile_js_1.resolveGenerationProfile; } });
|
|
163
|
+
Object.defineProperty(exports, "isMattermostProfile", { enumerable: true, get: function () { return generation_profile_js_1.isMattermostProfile; } });
|
|
164
|
+
var framework_adapter_js_1 = require("./adapters/framework_adapter.js");
|
|
165
|
+
Object.defineProperty(exports, "detectFramework", { enumerable: true, get: function () { return framework_adapter_js_1.detectFramework; } });
|
|
166
|
+
Object.defineProperty(exports, "detectTestMode", { enumerable: true, get: function () { return framework_adapter_js_1.detectTestMode; } });
|
|
167
|
+
// Route families (additional)
|
|
168
|
+
var route_families_js_2 = require("./knowledge/route_families.js");
|
|
169
|
+
Object.defineProperty(exports, "serializeManifest", { enumerable: true, get: function () { return route_families_js_2.serializeManifest; } });
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared cluster ID derivation for knowledge graph processing.
|
|
3
|
+
* Used by both kg_bridge.ts and kg_scanner.ts.
|
|
4
|
+
*/
|
|
5
|
+
/** Default directories to skip when deriving cluster IDs from file paths. */
|
|
6
|
+
declare const DEFAULT_SKIP_DIRS: Set<string>;
|
|
7
|
+
/** Extended skip set that also excludes test directories. */
|
|
8
|
+
declare const SKIP_DIRS_WITH_TESTS: Set<string>;
|
|
9
|
+
/**
|
|
10
|
+
* Normalize a name to a snake_case cluster ID.
|
|
11
|
+
* Handles camelCase conversion, then strips non-alphanumeric characters.
|
|
12
|
+
*/
|
|
13
|
+
export declare function normalizeToClusterId(name: string): string;
|
|
14
|
+
/**
|
|
15
|
+
* Derive a cluster ID from a node that has an optional filePath and name.
|
|
16
|
+
* Prefers file path grouping for consistency.
|
|
17
|
+
*/
|
|
18
|
+
export declare function deriveClusterId(node: {
|
|
19
|
+
filePath?: string;
|
|
20
|
+
name: string;
|
|
21
|
+
}, skipDirs?: Set<string>): string | null;
|
|
22
|
+
/**
|
|
23
|
+
* Derive a cluster ID from a file path by finding the first meaningful
|
|
24
|
+
* directory segment after skipping common structural prefixes.
|
|
25
|
+
*/
|
|
26
|
+
export declare function deriveClusterIdFromPath(filePath: string, skipDirs?: Set<string>): string | null;
|
|
27
|
+
export { DEFAULT_SKIP_DIRS, SKIP_DIRS_WITH_TESTS };
|
|
28
|
+
//# sourceMappingURL=cluster_utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cluster_utils.d.ts","sourceRoot":"","sources":["../../src/knowledge/cluster_utils.ts"],"names":[],"mappings":"AAGA;;;GAGG;AAEH,6EAA6E;AAC7E,QAAA,MAAM,iBAAiB,aAGrB,CAAC;AAEH,6DAA6D;AAC7D,QAAA,MAAM,oBAAoB,aAGxB,CAAC;AAEH;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAMzD;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAC3B,IAAI,EAAE;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAC,EACvC,QAAQ,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,GACvB,MAAM,GAAG,IAAI,CAMf;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CACnC,QAAQ,EAAE,MAAM,EAChB,QAAQ,GAAE,GAAG,CAAC,MAAM,CAAqB,GAC1C,MAAM,GAAG,IAAI,CAef;AAED,OAAO,EAAC,iBAAiB,EAAE,oBAAoB,EAAC,CAAC"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
|
|
3
|
+
// See LICENSE.txt for license information.
|
|
4
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
5
|
+
exports.SKIP_DIRS_WITH_TESTS = exports.DEFAULT_SKIP_DIRS = void 0;
|
|
6
|
+
exports.normalizeToClusterId = normalizeToClusterId;
|
|
7
|
+
exports.deriveClusterId = deriveClusterId;
|
|
8
|
+
exports.deriveClusterIdFromPath = deriveClusterIdFromPath;
|
|
9
|
+
/**
|
|
10
|
+
* Shared cluster ID derivation for knowledge graph processing.
|
|
11
|
+
* Used by both kg_bridge.ts and kg_scanner.ts.
|
|
12
|
+
*/
|
|
13
|
+
/** Default directories to skip when deriving cluster IDs from file paths. */
|
|
14
|
+
const DEFAULT_SKIP_DIRS = new Set([
|
|
15
|
+
'src', 'app', 'lib', 'packages', 'server', 'api', 'pages',
|
|
16
|
+
'components', 'features', 'modules',
|
|
17
|
+
]);
|
|
18
|
+
exports.DEFAULT_SKIP_DIRS = DEFAULT_SKIP_DIRS;
|
|
19
|
+
/** Extended skip set that also excludes test directories. */
|
|
20
|
+
const SKIP_DIRS_WITH_TESTS = new Set([
|
|
21
|
+
...DEFAULT_SKIP_DIRS,
|
|
22
|
+
'test', 'tests', 'e2e', 'spec', 'specs',
|
|
23
|
+
]);
|
|
24
|
+
exports.SKIP_DIRS_WITH_TESTS = SKIP_DIRS_WITH_TESTS;
|
|
25
|
+
/**
|
|
26
|
+
* Normalize a name to a snake_case cluster ID.
|
|
27
|
+
* Handles camelCase conversion, then strips non-alphanumeric characters.
|
|
28
|
+
*/
|
|
29
|
+
function normalizeToClusterId(name) {
|
|
30
|
+
return name
|
|
31
|
+
.replace(/[A-Z]/g, (c, idx) => (idx > 0 ? `_${c.toLowerCase()}` : c.toLowerCase()))
|
|
32
|
+
.replace(/[^a-z0-9_]/g, '_')
|
|
33
|
+
.replace(/_+/g, '_')
|
|
34
|
+
.replace(/^_|_$/g, '');
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Derive a cluster ID from a node that has an optional filePath and name.
|
|
38
|
+
* Prefers file path grouping for consistency.
|
|
39
|
+
*/
|
|
40
|
+
function deriveClusterId(node, skipDirs) {
|
|
41
|
+
if (node.filePath) {
|
|
42
|
+
return deriveClusterIdFromPath(node.filePath, skipDirs);
|
|
43
|
+
}
|
|
44
|
+
const name = normalizeToClusterId(node.name);
|
|
45
|
+
return name && name.length > 1 ? name : null;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Derive a cluster ID from a file path by finding the first meaningful
|
|
49
|
+
* directory segment after skipping common structural prefixes.
|
|
50
|
+
*/
|
|
51
|
+
function deriveClusterIdFromPath(filePath, skipDirs = DEFAULT_SKIP_DIRS) {
|
|
52
|
+
const parts = filePath.replace(/\\/g, '/').split('/').filter(Boolean);
|
|
53
|
+
for (const part of parts) {
|
|
54
|
+
if (skipDirs.has(part))
|
|
55
|
+
continue;
|
|
56
|
+
if (part.includes('.'))
|
|
57
|
+
continue; // skip files
|
|
58
|
+
const normalized = part.toLowerCase()
|
|
59
|
+
.replace(/[^a-z0-9_]/g, '_')
|
|
60
|
+
.replace(/_+/g, '_')
|
|
61
|
+
.replace(/^_|_$/g, '');
|
|
62
|
+
if (normalized && normalized.length > 1) {
|
|
63
|
+
return normalized;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
return null;
|
|
67
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type { KnowledgeGraph, DiffOverlay } from './kg_types.js';
|
|
2
|
+
import type { RouteFamilyManifest } from './route_families.js';
|
|
3
|
+
export type ProjectType = 'frontend' | 'backend' | 'fullstack';
|
|
4
|
+
/**
|
|
5
|
+
* Loads the knowledge graph from .understand-anything/knowledge-graph.json
|
|
6
|
+
* or from a custom path when provided.
|
|
7
|
+
*/
|
|
8
|
+
export declare function loadKnowledgeGraph(projectRoot: string, customPath?: string): KnowledgeGraph | null;
|
|
9
|
+
/**
|
|
10
|
+
* Classifies project type based on KG framework metadata.
|
|
11
|
+
*/
|
|
12
|
+
export declare function classifyProjectType(kg: KnowledgeGraph): ProjectType;
|
|
13
|
+
/**
|
|
14
|
+
* Core bridge: transforms KG into a RouteFamilyManifest.
|
|
15
|
+
*
|
|
16
|
+
* Strategy:
|
|
17
|
+
* - Frontend: cluster UI-layer nodes into families by module/component groups
|
|
18
|
+
* - Backend: cluster API-layer nodes, follow calls edges into Service→Data layers
|
|
19
|
+
* - Priority: P0 = high fan-in nodes, P1 = moderate, P2 = leaf/utility
|
|
20
|
+
* - userFlows: derived from KG tour steps referencing family nodes
|
|
21
|
+
*/
|
|
22
|
+
export declare function transformKGToFamilies(kg: KnowledgeGraph): RouteFamilyManifest;
|
|
23
|
+
/**
|
|
24
|
+
* Loads the diff overlay from .understand-anything/diff-overlay.json
|
|
25
|
+
*/
|
|
26
|
+
export declare function loadDiffOverlay(projectRoot: string): DiffOverlay | null;
|
|
27
|
+
/**
|
|
28
|
+
* Maps diff overlay changes to file paths using KG node resolution.
|
|
29
|
+
*/
|
|
30
|
+
export declare function diffOverlayToChangedFiles(overlay: DiffOverlay, kg: KnowledgeGraph): string[];
|
|
31
|
+
//# sourceMappingURL=kg_bridge.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kg_bridge.d.ts","sourceRoot":"","sources":["../../src/knowledge/kg_bridge.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAC,cAAc,EAAkB,WAAW,EAAc,MAAM,eAAe,CAAC;AAE5F,OAAO,KAAK,EAAc,mBAAmB,EAAkB,MAAM,qBAAqB,CAAC;AAE3F,MAAM,MAAM,WAAW,GAAG,UAAU,GAAG,SAAS,GAAG,WAAW,CAAC;AAkB/D;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI,CA6DlG;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,cAAc,GAAG,WAAW,CAQnE;AAED;;;;;;;;GAQG;AACH,wBAAgB,qBAAqB,CAAC,EAAE,EAAE,cAAc,GAAG,mBAAmB,CAwC7E;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,CAevE;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,WAAW,EAAE,EAAE,EAAE,cAAc,GAAG,MAAM,EAAE,CAkB5F"}
|