@yasserkhanorg/e2e-agents 0.7.2 → 0.7.3

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.
@@ -1 +1 @@
1
- {"version":3,"file":"impact_engine.d.ts","sourceRoot":"","sources":["../../src/engine/impact_engine.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAGR,eAAe,EAClB,MAAM,gCAAgC,CAAC;AASxC,OAAO,KAAK,EAAC,mBAAmB,EAAC,MAAM,oBAAoB,CAAC;AAE5D,MAAM,MAAM,cAAc,GAAG,SAAS,GAAG,SAAS,GAAG,WAAW,CAAC;AAEjE,MAAM,WAAW,eAAe;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,eAAe,CAAC;IAC1B,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,cAAc,EAAE,cAAc,CAAC;CAClC;AAED,MAAM,WAAW,YAAY;IACzB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,gBAAgB,EAAE,eAAe,EAAE,CAAC;IACpC,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACtB;AAED,MAAM,WAAW,mBAAmB;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,mBAAmB,CAAC;IACpC,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;CAC5B;AAuGD,wBAAgB,aAAa,CACzB,YAAY,EAAE,MAAM,EAAE,EACtB,OAAO,EAAE,mBAAmB,GAC7B,YAAY,CA2Ed;AAYD;;GAEG;AACH,wBAAgB,OAAO,CAAC,MAAM,EAAE,YAAY,GAAG,eAAe,EAAE,CAI/D;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,YAAY,GAAG,eAAe,EAAE,CAItE"}
1
+ {"version":3,"file":"impact_engine.d.ts","sourceRoot":"","sources":["../../src/engine/impact_engine.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAGR,eAAe,EAClB,MAAM,gCAAgC,CAAC;AASxC,OAAO,KAAK,EAAC,mBAAmB,EAAC,MAAM,oBAAoB,CAAC;AAE5D,MAAM,MAAM,cAAc,GAAG,SAAS,GAAG,SAAS,GAAG,WAAW,CAAC;AAEjE,MAAM,WAAW,eAAe;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,eAAe,CAAC;IAC1B,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,cAAc,EAAE,cAAc,CAAC;CAClC;AAED,MAAM,WAAW,YAAY;IACzB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,gBAAgB,EAAE,eAAe,EAAE,CAAC;IACpC,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACtB;AAED,MAAM,WAAW,mBAAmB;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,mBAAmB,CAAC;IACpC,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;CAC5B;AAwGD,wBAAgB,aAAa,CACzB,YAAY,EAAE,MAAM,EAAE,EACtB,OAAO,EAAE,mBAAmB,GAC7B,YAAY,CA2Ed;AAYD;;GAEG;AACH,wBAAgB,OAAO,CAAC,MAAM,EAAE,YAAY,GAAG,eAAe,EAAE,CAI/D;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,YAAY,GAAG,eAAe,EAAE,CAItE"}
@@ -73,12 +73,13 @@ function resolveCypressSpecs(cypressRoot, specDirs) {
73
73
  return specs;
74
74
  }
75
75
  function computeCoverageStatus(pwSpecs, cySpecs) {
76
- const hasPw = pwSpecs.length > 0;
77
- const hasCy = cySpecs.length > 0;
78
- if (hasPw && hasCy) {
76
+ // Playwright is the primary framework — having Playwright specs is sufficient for "covered".
77
+ // Cypress-only = partial (advisory: legacy coverage, migrate when possible).
78
+ // Neither = uncovered (must add tests).
79
+ if (pwSpecs.length > 0) {
79
80
  return 'covered';
80
81
  }
81
- if (hasPw || hasCy) {
82
+ if (cySpecs.length > 0) {
82
83
  return 'partial';
83
84
  }
84
85
  return 'uncovered';
@@ -1 +1 @@
1
- {"version":3,"file":"plan_builder.d.ts","sourceRoot":"","sources":["../../src/engine/plan_builder.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAC,YAAY,EAAC,MAAM,oBAAoB,CAAC;AACrD,OAAO,KAAK,EAAC,YAAY,EAAkB,MAAM,oBAAoB,CAAC;AAEtE,OAAO,KAAK,EAAC,kBAAkB,EAAC,MAAM,oBAAoB,CAAC;AAG3D,OAAO,KAAK,EACR,UAAU,EACV,SAAS,EACT,kBAAkB,EAIrB,MAAM,kBAAkB,CAAC;AAE1B,YAAY,EAAC,UAAU,EAAE,SAAS,EAAE,kBAAkB,EAAC,CAAC;AAqOxD,wBAAgB,mBAAmB,CAC/B,MAAM,EAAE,YAAY,EACpB,cAAc,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,EACtC,YAAY,CAAC,EAAE,kBAAkB,GAClC,UAAU,CAkIZ;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,MAAM,CAMzE;AAED,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,CAgEhE;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,YAAY,SAAiC,GAAG,MAAM,CAMvH"}
1
+ {"version":3,"file":"plan_builder.d.ts","sourceRoot":"","sources":["../../src/engine/plan_builder.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAC,YAAY,EAAC,MAAM,oBAAoB,CAAC;AACrD,OAAO,KAAK,EAAC,YAAY,EAAkB,MAAM,oBAAoB,CAAC;AAEtE,OAAO,KAAK,EAAC,kBAAkB,EAAC,MAAM,oBAAoB,CAAC;AAG3D,OAAO,KAAK,EACR,UAAU,EACV,SAAS,EACT,kBAAkB,EAIrB,MAAM,kBAAkB,CAAC;AAE1B,YAAY,EAAC,UAAU,EAAE,SAAS,EAAE,kBAAkB,EAAC,CAAC;AAqOxD,wBAAgB,mBAAmB,CAC/B,MAAM,EAAE,YAAY,EACpB,cAAc,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,EACtC,YAAY,CAAC,EAAE,kBAAkB,GAClC,UAAU,CAgIZ;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,MAAM,CAMzE;AAED,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,CAgEhE;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,YAAY,SAAiC,GAAG,MAAM,CAMvH"}
@@ -226,7 +226,7 @@ function buildPlanFromImpact(impact, policyOverride, aiEnrichment) {
226
226
  const aiFeature = f.featureId
227
227
  ? (aiFeatureByFeatureId.get(f.featureId) ?? aiFeatureByFamilyId.get(f.familyId))
228
228
  : aiFeatureByFamilyId.get(f.familyId);
229
- const baseReasons = [`No Playwright or Cypress tests found for ${label}`];
229
+ const baseReasons = [`No E2E tests found for ${label}`];
230
230
  const reasons = aiFeature && aiFeature.aiReasons.length > 0
231
231
  ? [...baseReasons, ...aiFeature.aiReasons.slice(0, 2)]
232
232
  : baseReasons;
@@ -243,15 +243,13 @@ function buildPlanFromImpact(impact, policyOverride, aiEnrichment) {
243
243
  source: aiFeature ? 'ai+deterministic' : 'deterministic',
244
244
  };
245
245
  });
246
- // Add partial gaps as advisory info
246
+ // Add partial gaps as advisory info (Cypress-only coverage — Playwright migration recommended)
247
247
  for (const f of partialGaps) {
248
- const coverageType = f.playwrightSpecs.length > 0 ? 'Cypress' : 'Playwright';
249
- const hasOpposite = f.playwrightSpecs.length > 0 ? 'Playwright' : 'Cypress';
250
248
  const label = featureLabel(f);
251
249
  const aiFeature = f.featureId
252
250
  ? (aiFeatureByFeatureId.get(f.featureId) ?? aiFeatureByFamilyId.get(f.familyId))
253
251
  : aiFeatureByFamilyId.get(f.familyId);
254
- const baseReasons = [`Missing ${coverageType} tests for ${label} (has ${hasOpposite} only)`];
252
+ const baseReasons = [`${label} is covered by Cypress only — consider adding Playwright tests`];
255
253
  const reasons = aiFeature && aiFeature.aiReasons.length > 0
256
254
  ? [...baseReasons, ...aiFeature.aiReasons.slice(0, 2)]
257
255
  : baseReasons;
@@ -68,12 +68,13 @@ function resolveCypressSpecs(cypressRoot, specDirs) {
68
68
  return specs;
69
69
  }
70
70
  function computeCoverageStatus(pwSpecs, cySpecs) {
71
- const hasPw = pwSpecs.length > 0;
72
- const hasCy = cySpecs.length > 0;
73
- if (hasPw && hasCy) {
71
+ // Playwright is the primary framework — having Playwright specs is sufficient for "covered".
72
+ // Cypress-only = partial (advisory: legacy coverage, migrate when possible).
73
+ // Neither = uncovered (must add tests).
74
+ if (pwSpecs.length > 0) {
74
75
  return 'covered';
75
76
  }
76
- if (hasPw || hasCy) {
77
+ if (cySpecs.length > 0) {
77
78
  return 'partial';
78
79
  }
79
80
  return 'uncovered';
@@ -220,7 +220,7 @@ export function buildPlanFromImpact(impact, policyOverride, aiEnrichment) {
220
220
  const aiFeature = f.featureId
221
221
  ? (aiFeatureByFeatureId.get(f.featureId) ?? aiFeatureByFamilyId.get(f.familyId))
222
222
  : aiFeatureByFamilyId.get(f.familyId);
223
- const baseReasons = [`No Playwright or Cypress tests found for ${label}`];
223
+ const baseReasons = [`No E2E tests found for ${label}`];
224
224
  const reasons = aiFeature && aiFeature.aiReasons.length > 0
225
225
  ? [...baseReasons, ...aiFeature.aiReasons.slice(0, 2)]
226
226
  : baseReasons;
@@ -237,15 +237,13 @@ export function buildPlanFromImpact(impact, policyOverride, aiEnrichment) {
237
237
  source: aiFeature ? 'ai+deterministic' : 'deterministic',
238
238
  };
239
239
  });
240
- // Add partial gaps as advisory info
240
+ // Add partial gaps as advisory info (Cypress-only coverage — Playwright migration recommended)
241
241
  for (const f of partialGaps) {
242
- const coverageType = f.playwrightSpecs.length > 0 ? 'Cypress' : 'Playwright';
243
- const hasOpposite = f.playwrightSpecs.length > 0 ? 'Playwright' : 'Cypress';
244
242
  const label = featureLabel(f);
245
243
  const aiFeature = f.featureId
246
244
  ? (aiFeatureByFeatureId.get(f.featureId) ?? aiFeatureByFamilyId.get(f.familyId))
247
245
  : aiFeatureByFamilyId.get(f.familyId);
248
- const baseReasons = [`Missing ${coverageType} tests for ${label} (has ${hasOpposite} only)`];
246
+ const baseReasons = [`${label} is covered by Cypress only — consider adding Playwright tests`];
249
247
  const reasons = aiFeature && aiFeature.aiReasons.length > 0
250
248
  ? [...baseReasons, ...aiFeature.aiReasons.slice(0, 2)]
251
249
  : baseReasons;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yasserkhanorg/e2e-agents",
3
- "version": "0.7.2",
3
+ "version": "0.7.3",
4
4
  "description": "Pluggable LLM provider library for AI-powered test automation. Use Claude, Ollama, or your own LLM. Integrate with Playwright, Jest, or any test framework. MCP server for test agents, cost tracking, and hybrid provider mode.",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/esm/index.js",