@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.
Files changed (259) hide show
  1. package/README.md +95 -8
  2. package/dist/adapters/cypress.d.ts +10 -0
  3. package/dist/adapters/cypress.d.ts.map +1 -0
  4. package/dist/adapters/cypress.js +86 -0
  5. package/dist/adapters/framework_adapter.d.ts +41 -0
  6. package/dist/adapters/framework_adapter.d.ts.map +1 -0
  7. package/dist/adapters/framework_adapter.js +152 -0
  8. package/dist/adapters/playwright.d.ts +10 -0
  9. package/dist/adapters/playwright.d.ts.map +1 -0
  10. package/dist/adapters/playwright.js +86 -0
  11. package/dist/adapters/pytest.d.ts +10 -0
  12. package/dist/adapters/pytest.d.ts.map +1 -0
  13. package/dist/adapters/pytest.js +96 -0
  14. package/dist/adapters/supertest.d.ts +12 -0
  15. package/dist/adapters/supertest.d.ts.map +1 -0
  16. package/dist/adapters/supertest.js +85 -0
  17. package/dist/agent/config.d.ts +1 -1
  18. package/dist/agent/config.d.ts.map +1 -1
  19. package/dist/agent/git.d.ts +1 -0
  20. package/dist/agent/git.d.ts.map +1 -1
  21. package/dist/agent/git.js +3 -0
  22. package/dist/agentic/fix_loop.d.ts.map +1 -1
  23. package/dist/agentic/fix_loop.js +5 -4
  24. package/dist/agentic/runner.d.ts +2 -0
  25. package/dist/agentic/runner.d.ts.map +1 -1
  26. package/dist/agentic/runner.js +15 -12
  27. package/dist/agents/cross-impact.d.ts.map +1 -1
  28. package/dist/agents/cross-impact.js +6 -1
  29. package/dist/agents/executor.d.ts.map +1 -1
  30. package/dist/agents/executor.js +6 -1
  31. package/dist/agents/strategist.d.ts.map +1 -1
  32. package/dist/agents/strategist.js +6 -1
  33. package/dist/agents/test-designer.d.ts.map +1 -1
  34. package/dist/agents/test-designer.js +6 -1
  35. package/dist/anthropic_provider.d.ts.map +1 -1
  36. package/dist/anthropic_provider.js +1 -0
  37. package/dist/base_provider.d.ts +56 -0
  38. package/dist/base_provider.d.ts.map +1 -1
  39. package/dist/base_provider.js +123 -1
  40. package/dist/budget_ledger.d.ts +28 -0
  41. package/dist/budget_ledger.d.ts.map +1 -0
  42. package/dist/budget_ledger.js +62 -0
  43. package/dist/cache/cached_provider.d.ts +45 -0
  44. package/dist/cache/cached_provider.d.ts.map +1 -0
  45. package/dist/cache/cached_provider.js +88 -0
  46. package/dist/cache/response_cache.d.ts +79 -0
  47. package/dist/cache/response_cache.d.ts.map +1 -0
  48. package/dist/cache/response_cache.js +177 -0
  49. package/dist/cli/commands/bootstrap.d.ts +3 -0
  50. package/dist/cli/commands/bootstrap.d.ts.map +1 -0
  51. package/dist/cli/commands/bootstrap.js +109 -0
  52. package/dist/cli/commands/cost_report.d.ts +3 -0
  53. package/dist/cli/commands/cost_report.d.ts.map +1 -0
  54. package/dist/cli/commands/cost_report.js +115 -0
  55. package/dist/cli/commands/crew.d.ts.map +1 -1
  56. package/dist/cli/commands/crew.js +118 -1
  57. package/dist/cli/commands/gate.d.ts +3 -0
  58. package/dist/cli/commands/gate.d.ts.map +1 -0
  59. package/dist/cli/commands/gate.js +86 -0
  60. package/dist/cli/commands/init.d.ts.map +1 -1
  61. package/dist/cli/commands/init.js +7 -62
  62. package/dist/cli/commands/plan_crew.d.ts.map +1 -1
  63. package/dist/cli/commands/plan_crew.js +33 -21
  64. package/dist/cli/commands/train.d.ts.map +1 -1
  65. package/dist/cli/commands/train.js +16 -21
  66. package/dist/cli/defaults.d.ts +35 -0
  67. package/dist/cli/defaults.d.ts.map +1 -0
  68. package/dist/cli/defaults.js +125 -0
  69. package/dist/cli/errors.d.ts +27 -0
  70. package/dist/cli/errors.d.ts.map +1 -0
  71. package/dist/cli/errors.js +57 -0
  72. package/dist/cli/parse_args.d.ts.map +1 -1
  73. package/dist/cli/parse_args.js +24 -2
  74. package/dist/cli/types.d.ts +7 -1
  75. package/dist/cli/types.d.ts.map +1 -1
  76. package/dist/cli.js +47 -2
  77. package/dist/crew/context.d.ts +15 -0
  78. package/dist/crew/context.d.ts.map +1 -1
  79. package/dist/crew/orchestrator.d.ts +14 -0
  80. package/dist/crew/orchestrator.d.ts.map +1 -1
  81. package/dist/crew/orchestrator.js +162 -4
  82. package/dist/crew/protocol.d.ts +13 -0
  83. package/dist/crew/protocol.d.ts.map +1 -1
  84. package/dist/crew/provider.d.ts +15 -1
  85. package/dist/crew/provider.d.ts.map +1 -1
  86. package/dist/crew/provider.js +24 -4
  87. package/dist/custom_provider.d.ts.map +1 -1
  88. package/dist/custom_provider.js +1 -0
  89. package/dist/engine/diff_loader.d.ts.map +1 -1
  90. package/dist/engine/diff_loader.js +3 -14
  91. package/dist/engine/impact_engine.d.ts.map +1 -1
  92. package/dist/engine/impact_engine.js +9 -23
  93. package/dist/esm/adapters/cypress.js +49 -0
  94. package/dist/esm/adapters/framework_adapter.js +114 -0
  95. package/dist/esm/adapters/playwright.js +49 -0
  96. package/dist/esm/adapters/pytest.js +59 -0
  97. package/dist/esm/adapters/supertest.js +48 -0
  98. package/dist/esm/agent/git.js +3 -1
  99. package/dist/esm/agentic/fix_loop.js +5 -4
  100. package/dist/esm/agentic/runner.js +15 -12
  101. package/dist/esm/agents/cross-impact.js +6 -1
  102. package/dist/esm/agents/executor.js +6 -1
  103. package/dist/esm/agents/strategist.js +6 -1
  104. package/dist/esm/agents/test-designer.js +6 -1
  105. package/dist/esm/anthropic_provider.js +1 -0
  106. package/dist/esm/base_provider.js +121 -0
  107. package/dist/esm/budget_ledger.js +58 -0
  108. package/dist/esm/cache/cached_provider.js +82 -0
  109. package/dist/esm/cache/response_cache.js +140 -0
  110. package/dist/esm/cli/commands/bootstrap.js +106 -0
  111. package/dist/esm/cli/commands/cost_report.js +112 -0
  112. package/dist/esm/cli/commands/crew.js +118 -1
  113. package/dist/esm/cli/commands/gate.js +83 -0
  114. package/dist/esm/cli/commands/init.js +3 -58
  115. package/dist/esm/cli/commands/plan_crew.js +33 -21
  116. package/dist/esm/cli/commands/train.js +16 -21
  117. package/dist/esm/cli/defaults.js +118 -0
  118. package/dist/esm/cli/errors.js +52 -0
  119. package/dist/esm/cli/parse_args.js +24 -2
  120. package/dist/esm/cli.js +47 -2
  121. package/dist/esm/crew/orchestrator.js +162 -4
  122. package/dist/esm/crew/provider.js +24 -4
  123. package/dist/esm/custom_provider.js +1 -0
  124. package/dist/esm/engine/diff_loader.js +1 -12
  125. package/dist/esm/engine/impact_engine.js +9 -23
  126. package/dist/esm/index.js +21 -0
  127. package/dist/esm/knowledge/cluster_utils.js +60 -0
  128. package/dist/esm/knowledge/kg_bridge.js +381 -0
  129. package/dist/esm/knowledge/kg_types.js +3 -0
  130. package/dist/esm/knowledge/route_families.js +89 -0
  131. package/dist/esm/mcp-server.js +2 -4
  132. package/dist/esm/metrics/prometheus.js +149 -0
  133. package/dist/esm/model_router.js +59 -0
  134. package/dist/esm/ollama_provider.js +1 -0
  135. package/dist/esm/openai_provider.js +1 -0
  136. package/dist/esm/pipeline/orchestrator.js +6 -12
  137. package/dist/esm/pipeline/stage0_preprocess.js +12 -19
  138. package/dist/esm/pipeline/stage2_coverage.js +1 -0
  139. package/dist/esm/pipeline/stage3_generation.js +1 -0
  140. package/dist/esm/progress.js +112 -0
  141. package/dist/esm/prompts/coverage.js +7 -24
  142. package/dist/esm/prompts/cross-impact.js +3 -21
  143. package/dist/esm/prompts/generation.js +158 -36
  144. package/dist/esm/prompts/generation_profile.js +147 -0
  145. package/dist/esm/prompts/heal.js +33 -15
  146. package/dist/esm/prompts/impact.js +3 -22
  147. package/dist/esm/prompts/json_extract.js +36 -0
  148. package/dist/esm/prompts/strategist.js +2 -20
  149. package/dist/esm/prompts/test-designer.js +6 -21
  150. package/dist/esm/provider_factory.js +6 -4
  151. package/dist/esm/reporters/junit.js +86 -0
  152. package/dist/esm/reporters/reporter.js +3 -0
  153. package/dist/esm/reporters/sarif.js +131 -0
  154. package/dist/esm/resilience/circuit_breaker.js +78 -0
  155. package/dist/esm/resilience/retry.js +56 -0
  156. package/dist/esm/sanitize.js +66 -0
  157. package/dist/esm/training/kg_scanner.js +115 -0
  158. package/dist/esm/training/scanner.js +27 -34
  159. package/dist/esm/version.js +33 -0
  160. package/dist/index.d.ts +21 -1
  161. package/dist/index.d.ts.map +1 -1
  162. package/dist/index.js +45 -1
  163. package/dist/knowledge/cluster_utils.d.ts +28 -0
  164. package/dist/knowledge/cluster_utils.d.ts.map +1 -0
  165. package/dist/knowledge/cluster_utils.js +67 -0
  166. package/dist/knowledge/kg_bridge.d.ts +31 -0
  167. package/dist/knowledge/kg_bridge.d.ts.map +1 -0
  168. package/dist/knowledge/kg_bridge.js +388 -0
  169. package/dist/knowledge/kg_types.d.ts +75 -0
  170. package/dist/knowledge/kg_types.d.ts.map +1 -0
  171. package/dist/knowledge/kg_types.js +4 -0
  172. package/dist/knowledge/route_families.d.ts +18 -0
  173. package/dist/knowledge/route_families.d.ts.map +1 -1
  174. package/dist/knowledge/route_families.js +91 -0
  175. package/dist/mcp-server.d.ts.map +1 -1
  176. package/dist/mcp-server.js +2 -4
  177. package/dist/metrics/prometheus.d.ts +37 -0
  178. package/dist/metrics/prometheus.d.ts.map +1 -0
  179. package/dist/metrics/prometheus.js +153 -0
  180. package/dist/model_router.d.ts +28 -0
  181. package/dist/model_router.d.ts.map +1 -0
  182. package/dist/model_router.js +63 -0
  183. package/dist/ollama_provider.d.ts.map +1 -1
  184. package/dist/ollama_provider.js +1 -0
  185. package/dist/openai_provider.d.ts.map +1 -1
  186. package/dist/openai_provider.js +1 -0
  187. package/dist/pipeline/orchestrator.d.ts +2 -0
  188. package/dist/pipeline/orchestrator.d.ts.map +1 -1
  189. package/dist/pipeline/orchestrator.js +6 -12
  190. package/dist/pipeline/stage0_preprocess.d.ts.map +1 -1
  191. package/dist/pipeline/stage0_preprocess.js +11 -18
  192. package/dist/pipeline/stage2_coverage.d.ts +2 -0
  193. package/dist/pipeline/stage2_coverage.d.ts.map +1 -1
  194. package/dist/pipeline/stage2_coverage.js +1 -0
  195. package/dist/pipeline/stage3_generation.d.ts +2 -0
  196. package/dist/pipeline/stage3_generation.d.ts.map +1 -1
  197. package/dist/pipeline/stage3_generation.js +1 -0
  198. package/dist/pipeline/stage4_heal.d.ts +2 -0
  199. package/dist/pipeline/stage4_heal.d.ts.map +1 -1
  200. package/dist/progress.d.ts +22 -0
  201. package/dist/progress.d.ts.map +1 -0
  202. package/dist/progress.js +116 -0
  203. package/dist/prompts/coverage.d.ts +2 -0
  204. package/dist/prompts/coverage.d.ts.map +1 -1
  205. package/dist/prompts/coverage.js +7 -24
  206. package/dist/prompts/cross-impact.d.ts +1 -0
  207. package/dist/prompts/cross-impact.d.ts.map +1 -1
  208. package/dist/prompts/cross-impact.js +3 -21
  209. package/dist/prompts/generation.d.ts +3 -1
  210. package/dist/prompts/generation.d.ts.map +1 -1
  211. package/dist/prompts/generation.js +158 -36
  212. package/dist/prompts/generation_profile.d.ts +29 -0
  213. package/dist/prompts/generation_profile.d.ts.map +1 -0
  214. package/dist/prompts/generation_profile.js +151 -0
  215. package/dist/prompts/heal.d.ts +3 -1
  216. package/dist/prompts/heal.d.ts.map +1 -1
  217. package/dist/prompts/heal.js +33 -15
  218. package/dist/prompts/impact.d.ts +1 -0
  219. package/dist/prompts/impact.d.ts.map +1 -1
  220. package/dist/prompts/impact.js +3 -22
  221. package/dist/prompts/json_extract.d.ts +14 -0
  222. package/dist/prompts/json_extract.d.ts.map +1 -0
  223. package/dist/prompts/json_extract.js +39 -0
  224. package/dist/prompts/strategist.d.ts.map +1 -1
  225. package/dist/prompts/strategist.js +2 -20
  226. package/dist/prompts/test-designer.d.ts +2 -0
  227. package/dist/prompts/test-designer.d.ts.map +1 -1
  228. package/dist/prompts/test-designer.js +6 -21
  229. package/dist/provider_factory.d.ts.map +1 -1
  230. package/dist/provider_factory.js +6 -4
  231. package/dist/reporters/junit.d.ts +6 -0
  232. package/dist/reporters/junit.d.ts.map +1 -0
  233. package/dist/reporters/junit.js +89 -0
  234. package/dist/reporters/reporter.d.ts +42 -0
  235. package/dist/reporters/reporter.d.ts.map +1 -0
  236. package/dist/reporters/reporter.js +4 -0
  237. package/dist/reporters/sarif.d.ts +7 -0
  238. package/dist/reporters/sarif.d.ts.map +1 -0
  239. package/dist/reporters/sarif.js +134 -0
  240. package/dist/resilience/circuit_breaker.d.ts +36 -0
  241. package/dist/resilience/circuit_breaker.d.ts.map +1 -0
  242. package/dist/resilience/circuit_breaker.js +82 -0
  243. package/dist/resilience/retry.d.ts +11 -0
  244. package/dist/resilience/retry.d.ts.map +1 -0
  245. package/dist/resilience/retry.js +59 -0
  246. package/dist/sanitize.d.ts +15 -0
  247. package/dist/sanitize.d.ts.map +1 -0
  248. package/dist/sanitize.js +71 -0
  249. package/dist/training/kg_scanner.d.ts +13 -0
  250. package/dist/training/kg_scanner.d.ts.map +1 -0
  251. package/dist/training/kg_scanner.js +118 -0
  252. package/dist/training/scanner.d.ts +7 -2
  253. package/dist/training/scanner.d.ts.map +1 -1
  254. package/dist/training/scanner.js +27 -34
  255. package/dist/version.d.ts +6 -0
  256. package/dist/version.d.ts.map +1 -0
  257. package/dist/version.js +36 -0
  258. package/package.json +7 -2
  259. 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
- * Server Go files that are infrastructure / cross-cutting concerns,
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 SERVER_INFRA_FILES = new Set([
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
- * Server tier directories to scan for Go domain files.
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 SERVER_TIERS = [
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
- function normalizeId(name) {
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 entries;
88
+ let dirents;
92
89
  try {
93
- entries = readdirSync(root);
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 = entries.some((e) => {
100
- const ext = e.slice(e.lastIndexOf('.'));
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 = entries.filter((e) => {
104
- if (isSkipped(e))
102
+ const subdirs = dirents.filter((d) => {
103
+ if (!d.isDirectory() || d.isSymbolicLink())
105
104
  return false;
106
- try {
107
- const stat = lstatSync(join(root, e));
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 || SERVER_INFRA_FILES.has(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 SERVER_TIERS) {
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 (SERVER_INFRA_FILES.has(domain))
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
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
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"}