@yasserkhanorg/e2e-agents 1.8.4 → 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/plan_crew.d.ts.map +1 -1
- package/dist/cli/commands/plan_crew.js +33 -21
- 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/plan_crew.js +33 -21
- 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
package/dist/training/scanner.js
CHANGED
|
@@ -11,6 +11,7 @@ exports.discoverNameMatchedPaths = discoverNameMatchedPaths;
|
|
|
11
11
|
exports.scanProject = scanProject;
|
|
12
12
|
const fs_1 = require("fs");
|
|
13
13
|
const path_1 = require("path");
|
|
14
|
+
const cluster_utils_js_1 = require("../knowledge/cluster_utils.js");
|
|
14
15
|
const SOURCE_MAX_DEPTH = 3;
|
|
15
16
|
// One deeper than source to account for test framework wrapper dirs (e2e/, integration/)
|
|
16
17
|
const TEST_MAX_DEPTH = 5;
|
|
@@ -44,10 +45,11 @@ const STRUCTURAL_DIRS = new Set([
|
|
|
44
45
|
'middleware', 'contexts', 'providers', 'layouts', 'templates',
|
|
45
46
|
]);
|
|
46
47
|
/**
|
|
47
|
-
*
|
|
48
|
+
* Default server Go files that are infrastructure / cross-cutting concerns,
|
|
48
49
|
* not feature-specific domains. Matched after stripping _local/_store suffixes.
|
|
50
|
+
* Override via ScannerConfig.serverInfraFiles.
|
|
49
51
|
*/
|
|
50
|
-
const
|
|
52
|
+
const DEFAULT_SERVER_INFRA_FILES = new Set([
|
|
51
53
|
'api', 'apitestlib', 'context', 'helpers', 'params', 'swagger',
|
|
52
54
|
'app', 'server', 'enterprise', 'product_service', 'security_update_check',
|
|
53
55
|
'store', 'adapters', 'errors', 'integrity', 'migrate', 'doc',
|
|
@@ -57,10 +59,11 @@ const SERVER_INFRA_FILES = new Set([
|
|
|
57
59
|
'manifest', 'permission', 'log', 'utils',
|
|
58
60
|
]);
|
|
59
61
|
/**
|
|
60
|
-
*
|
|
62
|
+
* Default server tier directories to scan for Go domain files.
|
|
61
63
|
* Each tier represents a layer of the backend architecture.
|
|
64
|
+
* Override via ScannerConfig.serverTiers.
|
|
62
65
|
*/
|
|
63
|
-
const
|
|
66
|
+
const DEFAULT_SERVER_TIERS = [
|
|
64
67
|
'channels/api4',
|
|
65
68
|
'channels/app',
|
|
66
69
|
'channels/store/sqlstore',
|
|
@@ -73,13 +76,7 @@ const includes = (arr, v) => arr.includes(v);
|
|
|
73
76
|
function isSkipped(name) {
|
|
74
77
|
return name.startsWith('.') || SKIP_DIRS.has(name);
|
|
75
78
|
}
|
|
76
|
-
|
|
77
|
-
return name
|
|
78
|
-
.replace(/[A-Z]/g, (c, idx) => (idx > 0 ? `_${c.toLowerCase()}` : c.toLowerCase()))
|
|
79
|
-
.replace(/[^a-z0-9_]/g, '_')
|
|
80
|
-
.replace(/_+/g, '_')
|
|
81
|
-
.replace(/^_|_$/g, '');
|
|
82
|
-
}
|
|
79
|
+
const normalizeId = cluster_utils_js_1.normalizeToClusterId;
|
|
83
80
|
function extractFamilyHint(dirPath, projectRoot) {
|
|
84
81
|
const rel = (0, path_1.relative)(projectRoot, dirPath).replace(/\\/g, '/');
|
|
85
82
|
const parts = rel.split('/').filter(Boolean);
|
|
@@ -97,32 +94,25 @@ function walkDirs(root, projectRoot, category, maxDepth, results, depth = 0) {
|
|
|
97
94
|
if (depth > maxDepth || !(0, fs_1.existsSync)(root)) {
|
|
98
95
|
return;
|
|
99
96
|
}
|
|
100
|
-
let
|
|
97
|
+
let dirents;
|
|
101
98
|
try {
|
|
102
|
-
|
|
99
|
+
dirents = (0, fs_1.readdirSync)(root, { withFileTypes: true });
|
|
103
100
|
}
|
|
104
101
|
catch {
|
|
105
102
|
// ENOENT or EACCES — skip inaccessible entries
|
|
106
103
|
return;
|
|
107
104
|
}
|
|
108
|
-
const hasSourceFiles =
|
|
109
|
-
|
|
105
|
+
const hasSourceFiles = dirents.some((d) => {
|
|
106
|
+
if (!d.isFile())
|
|
107
|
+
return false;
|
|
108
|
+
const ext = d.name.slice(d.name.lastIndexOf('.'));
|
|
110
109
|
return ['.ts', '.tsx', '.js', '.jsx', '.go', '.py', '.rs'].includes(ext);
|
|
111
110
|
});
|
|
112
|
-
const subdirs =
|
|
113
|
-
if (
|
|
111
|
+
const subdirs = dirents.filter((d) => {
|
|
112
|
+
if (!d.isDirectory() || d.isSymbolicLink())
|
|
114
113
|
return false;
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
if (stat.isSymbolicLink())
|
|
118
|
-
return false;
|
|
119
|
-
return stat.isDirectory();
|
|
120
|
-
}
|
|
121
|
-
catch {
|
|
122
|
-
// ENOENT or EACCES — skip inaccessible entries
|
|
123
|
-
return false;
|
|
124
|
-
}
|
|
125
|
-
});
|
|
114
|
+
return !isSkipped(d.name);
|
|
115
|
+
}).map((d) => d.name);
|
|
126
116
|
if (hasSourceFiles && depth >= 1) {
|
|
127
117
|
results.push({
|
|
128
118
|
path: (0, path_1.resolve)(root),
|
|
@@ -419,7 +409,7 @@ function findParentDomain(name, allDomains) {
|
|
|
419
409
|
*
|
|
420
410
|
* Each domain becomes a candidate family with precise serverPaths.
|
|
421
411
|
*/
|
|
422
|
-
function discoverServerDerivedFamilies(serverRoot) {
|
|
412
|
+
function discoverServerDerivedFamilies(serverRoot, infraFiles = DEFAULT_SERVER_INFRA_FILES, tiers = DEFAULT_SERVER_TIERS) {
|
|
423
413
|
const resolved = (0, path_1.resolve)(serverRoot);
|
|
424
414
|
// First pass: collect all raw domain names across tiers
|
|
425
415
|
const allRawDomains = new Set();
|
|
@@ -430,7 +420,7 @@ function discoverServerDerivedFamilies(serverRoot) {
|
|
|
430
420
|
return;
|
|
431
421
|
const baseName = entry.replace('.go', '');
|
|
432
422
|
const domain = normalizeServerDomain(baseName);
|
|
433
|
-
if (!domain ||
|
|
423
|
+
if (!domain || infraFiles.has(domain))
|
|
434
424
|
return;
|
|
435
425
|
allRawDomains.add(domain);
|
|
436
426
|
if (!domainTierFiles.has(domain))
|
|
@@ -440,7 +430,7 @@ function discoverServerDerivedFamilies(serverRoot) {
|
|
|
440
430
|
tierMap.set(tierRelPath, new Set());
|
|
441
431
|
tierMap.get(tierRelPath).add(baseName);
|
|
442
432
|
}
|
|
443
|
-
for (const tier of
|
|
433
|
+
for (const tier of tiers) {
|
|
444
434
|
const tierPath = (0, path_1.join)(resolved, tier);
|
|
445
435
|
if (!(0, fs_1.existsSync)(tierPath))
|
|
446
436
|
continue;
|
|
@@ -477,7 +467,7 @@ function discoverServerDerivedFamilies(serverRoot) {
|
|
|
477
467
|
if (!(0, fs_1.lstatSync)(jobPath).isDirectory() || isSkipped(entry))
|
|
478
468
|
continue;
|
|
479
469
|
const domain = normalizeId(entry);
|
|
480
|
-
if (
|
|
470
|
+
if (infraFiles.has(domain))
|
|
481
471
|
continue;
|
|
482
472
|
allRawDomains.add(domain);
|
|
483
473
|
const jobFiles = (0, fs_1.readdirSync)(jobPath);
|
|
@@ -764,7 +754,10 @@ function discoverNameMatchedPaths(appPath, gitRepoRoot) {
|
|
|
764
754
|
}
|
|
765
755
|
return result;
|
|
766
756
|
}
|
|
767
|
-
function scanProject(projectRoot, testsRoot, serverRoot, gitRepoRoot) {
|
|
757
|
+
function scanProject(projectRoot, testsRoot, serverRoot, gitRepoRoot, config) {
|
|
758
|
+
// Resolve scanner config for this run (passed to functions, no module-level mutation)
|
|
759
|
+
const resolvedInfraFiles = config?.serverInfraFiles || DEFAULT_SERVER_INFRA_FILES;
|
|
760
|
+
const resolvedTiers = config?.serverTiers || DEFAULT_SERVER_TIERS;
|
|
768
761
|
const resolved = (0, path_1.resolve)(projectRoot);
|
|
769
762
|
const resolvedTestsRoot = testsRoot ? (0, path_1.resolve)(testsRoot) : resolved;
|
|
770
763
|
const sourceDirs = discoverSourceDirs(resolved);
|
|
@@ -827,7 +820,7 @@ function scanProject(projectRoot, testsRoot, serverRoot, gitRepoRoot) {
|
|
|
827
820
|
// When a separate serverRoot is provided, discover families from Go source
|
|
828
821
|
// filenames across the three-tier backend (api4, app, store).
|
|
829
822
|
if (serverRoot) {
|
|
830
|
-
const { multiTierFamilies: serverMulti, singleTierFamilies: serverSingle } = discoverServerDerivedFamilies((0, path_1.resolve)(serverRoot));
|
|
823
|
+
const { multiTierFamilies: serverMulti, singleTierFamilies: serverSingle } = discoverServerDerivedFamilies((0, path_1.resolve)(serverRoot), resolvedInfraFiles, resolvedTiers);
|
|
831
824
|
const existingIds = new Set(families.map((f) => f.id));
|
|
832
825
|
// Merge ALL server families (multi + single tier) into existing families,
|
|
833
826
|
// but only add NEW families if they span ≥2 tiers.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAQA;;;GAGG;AACH,wBAAgB,UAAU,IAAI,MAAM,CAoBnC"}
|
package/dist/version.js
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
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.getVersion = getVersion;
|
|
6
|
+
const fs_1 = require("fs");
|
|
7
|
+
const path_1 = require("path");
|
|
8
|
+
let _version;
|
|
9
|
+
/**
|
|
10
|
+
* Returns the package version by reading the nearest package.json.
|
|
11
|
+
* Cached after first call.
|
|
12
|
+
*/
|
|
13
|
+
function getVersion() {
|
|
14
|
+
if (_version)
|
|
15
|
+
return _version;
|
|
16
|
+
try {
|
|
17
|
+
// Walk up from this file's compiled location to find package.json
|
|
18
|
+
for (let d = __dirname, prev = ''; d !== prev; prev = d, d = (0, path_1.dirname)(d)) {
|
|
19
|
+
try {
|
|
20
|
+
const pkg = JSON.parse((0, fs_1.readFileSync)((0, path_1.join)(d, 'package.json'), 'utf-8'));
|
|
21
|
+
if (pkg.name === '@yasserkhanorg/e2e-agents' && pkg.version) {
|
|
22
|
+
_version = pkg.version;
|
|
23
|
+
return _version;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
catch {
|
|
27
|
+
// keep walking up
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
catch {
|
|
32
|
+
// fallback
|
|
33
|
+
}
|
|
34
|
+
_version = 'unknown';
|
|
35
|
+
return _version;
|
|
36
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@yasserkhanorg/e2e-agents",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.9.5",
|
|
4
4
|
"description": "AI-powered E2E test impact analysis, generation, and healing. Analyzes code changes to identify affected Playwright tests, detects coverage gaps, and generates or repairs specs using pluggable LLM providers (Claude, OpenAI, Ollama). Includes MCP server, traceability, and CI/CD integration.",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"module": "dist/esm/index.js",
|
|
@@ -56,6 +56,7 @@
|
|
|
56
56
|
"dependencies": {
|
|
57
57
|
"@anthropic-ai/sdk": "^0.73.0",
|
|
58
58
|
"glob": "^11.0.0",
|
|
59
|
+
"minimatch": "^10.0.0",
|
|
59
60
|
"marked": "^15.0.6",
|
|
60
61
|
"openai": "^4.73.0"
|
|
61
62
|
},
|
|
@@ -103,7 +104,11 @@
|
|
|
103
104
|
"vision-analysis",
|
|
104
105
|
"screenshot-analysis",
|
|
105
106
|
"test-discovery",
|
|
106
|
-
"test-healing"
|
|
107
|
+
"test-healing",
|
|
108
|
+
"impact-analysis",
|
|
109
|
+
"coverage",
|
|
110
|
+
"qa",
|
|
111
|
+
"ci-cd"
|
|
107
112
|
],
|
|
108
113
|
"engines": {
|
|
109
114
|
"node": ">=20.0.0"
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
3
|
"title": "Route Families Manifest",
|
|
4
|
-
"description": "Maps
|
|
4
|
+
"description": "Maps route families to file patterns, page objects, components, and nested features.",
|
|
5
5
|
"type": "object",
|
|
6
6
|
"required": ["families"],
|
|
7
7
|
"properties": {
|
|
@@ -65,6 +65,36 @@
|
|
|
65
65
|
"$ref": "#/$defs/RouteFeature"
|
|
66
66
|
},
|
|
67
67
|
"description": "Nested features within this family for finer-grained binding"
|
|
68
|
+
},
|
|
69
|
+
"apiEndpoints": {
|
|
70
|
+
"type": "array",
|
|
71
|
+
"items": {
|
|
72
|
+
"$ref": "#/$defs/ApiEndpoint"
|
|
73
|
+
},
|
|
74
|
+
"description": "API endpoints this family covers (for backend/API testing)"
|
|
75
|
+
},
|
|
76
|
+
"testType": {
|
|
77
|
+
"type": "string",
|
|
78
|
+
"enum": ["ui", "api", "both"],
|
|
79
|
+
"description": "Type of tests to generate: UI (browser), API, or both. Defaults to 'ui' for backward compatibility."
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
},
|
|
83
|
+
"ApiEndpoint": {
|
|
84
|
+
"type": "object",
|
|
85
|
+
"required": ["method", "path"],
|
|
86
|
+
"properties": {
|
|
87
|
+
"method": {
|
|
88
|
+
"type": "string",
|
|
89
|
+
"description": "HTTP method (GET, POST, PUT, DELETE, PATCH)"
|
|
90
|
+
},
|
|
91
|
+
"path": {
|
|
92
|
+
"type": "string",
|
|
93
|
+
"description": "API endpoint path, e.g. '/api/v4/users'"
|
|
94
|
+
},
|
|
95
|
+
"description": {
|
|
96
|
+
"type": "string",
|
|
97
|
+
"description": "Human-readable description of the endpoint"
|
|
68
98
|
}
|
|
69
99
|
}
|
|
70
100
|
},
|