@yasserkhanorg/e2e-agents 0.3.2 → 0.3.4
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 +29 -20
- package/dist/agent/config.d.ts +3 -0
- package/dist/agent/config.d.ts.map +1 -1
- package/dist/agent/config.js +38 -0
- package/dist/agent/operational_insights.d.ts +1 -1
- package/dist/agent/operational_insights.d.ts.map +1 -1
- package/dist/agent/operational_insights.js +2 -1
- package/dist/agent/pipeline.d.ts +8 -1
- package/dist/agent/pipeline.d.ts.map +1 -1
- package/dist/agent/pipeline.js +844 -33
- package/dist/agent/plan.d.ts +39 -0
- package/dist/agent/plan.d.ts.map +1 -1
- package/dist/agent/plan.js +146 -0
- package/dist/agent/report.d.ts +16 -0
- package/dist/agent/report.d.ts.map +1 -1
- package/dist/agent/report.js +12 -0
- package/dist/agent/runner.d.ts.map +1 -1
- package/dist/agent/runner.js +66 -11
- package/dist/agent/tests.d.ts.map +1 -1
- package/dist/agent/tests.js +12 -2
- package/dist/api.d.ts.map +1 -1
- package/dist/api.js +1 -0
- package/dist/cli.js +111 -7
- package/dist/esm/agent/config.js +38 -0
- package/dist/esm/agent/operational_insights.js +2 -1
- package/dist/esm/agent/pipeline.js +844 -33
- package/dist/esm/agent/plan.js +145 -1
- package/dist/esm/agent/report.js +12 -0
- package/dist/esm/agent/runner.js +66 -11
- package/dist/esm/agent/tests.js +12 -2
- package/dist/esm/api.js +2 -1
- package/dist/esm/cli.js +112 -8
- package/package.json +1 -1
- package/schemas/impact.schema.json +37 -0
- package/schemas/plan.schema.json +48 -0
- package/dist/agent/cache_utils.d.ts +0 -38
- package/dist/agent/cache_utils.d.ts.map +0 -1
- package/dist/agent/cache_utils.js +0 -67
- package/dist/agent/impact-analyzer.d.ts +0 -114
- package/dist/agent/impact-analyzer.d.ts.map +0 -1
- package/dist/agent/impact-analyzer.js +0 -557
- package/dist/agent/index.d.ts +0 -21
- package/dist/agent/index.d.ts.map +0 -1
- package/dist/agent/index.js +0 -38
- package/dist/agent/model-router.d.ts +0 -57
- package/dist/agent/model-router.d.ts.map +0 -1
- package/dist/agent/model-router.js +0 -154
- package/dist/agent/report-generator.d.ts +0 -24
- package/dist/agent/report-generator.d.ts.map +0 -1
- package/dist/agent/report-generator.js +0 -250
- package/dist/agent/spec-bridge.d.ts +0 -101
- package/dist/agent/spec-bridge.d.ts.map +0 -1
- package/dist/agent/spec-bridge.js +0 -273
- package/dist/agent/spec-builder.d.ts +0 -102
- package/dist/agent/spec-builder.d.ts.map +0 -1
- package/dist/agent/spec-builder.js +0 -273
- package/dist/agent/telemetry.d.ts +0 -84
- package/dist/agent/telemetry.d.ts.map +0 -1
- package/dist/agent/telemetry.js +0 -220
- package/dist/agent/validators/selector-validator.d.ts +0 -74
- package/dist/agent/validators/selector-validator.d.ts.map +0 -1
- package/dist/agent/validators/selector-validator.js +0 -165
- package/dist/e2e-test-gen/index.d.ts +0 -51
- package/dist/e2e-test-gen/index.d.ts.map +0 -1
- package/dist/e2e-test-gen/index.js +0 -57
- package/dist/e2e-test-gen/spec_parser.d.ts +0 -142
- package/dist/e2e-test-gen/spec_parser.d.ts.map +0 -1
- package/dist/e2e-test-gen/spec_parser.js +0 -786
- package/dist/e2e-test-gen/types.d.ts +0 -185
- package/dist/e2e-test-gen/types.d.ts.map +0 -1
- package/dist/e2e-test-gen/types.js +0 -4
- package/dist/esm/agent/cache_utils.js +0 -63
- package/dist/esm/agent/impact-analyzer.js +0 -548
- package/dist/esm/agent/index.js +0 -22
- package/dist/esm/agent/model-router.js +0 -150
- package/dist/esm/agent/report-generator.js +0 -247
- package/dist/esm/agent/spec-bridge.js +0 -267
- package/dist/esm/agent/spec-builder.js +0 -267
- package/dist/esm/agent/telemetry.js +0 -216
- package/dist/esm/agent/validators/selector-validator.js +0 -160
- package/dist/esm/e2e-test-gen/index.js +0 -50
- package/dist/esm/e2e-test-gen/spec_parser.js +0 -782
- package/dist/esm/e2e-test-gen/types.js +0 -3
- package/dist/esm/plan-and-test-constants.js +0 -126
- package/dist/plan-and-test-constants.d.ts +0 -110
- package/dist/plan-and-test-constants.d.ts.map +0 -1
- package/dist/plan-and-test-constants.js +0 -132
package/README.md
CHANGED
|
@@ -133,6 +133,9 @@ Run AI-driven impact analysis or gap analysis on any frontend repo.
|
|
|
133
133
|
```bash
|
|
134
134
|
npx e2e-ai-agents impact --path /path/to/webapp
|
|
135
135
|
npx e2e-ai-agents gap --path /path/to/webapp
|
|
136
|
+
npx e2e-ai-agents plan --path /path/to/webapp
|
|
137
|
+
npx e2e-ai-agents generate --path /path/to/webapp --pipeline
|
|
138
|
+
npx e2e-ai-agents heal --path /path/to/webapp --traceability-report ./playwright-report.json
|
|
136
139
|
npx e2e-ai-agents suggest --path /path/to/webapp
|
|
137
140
|
npx e2e-ai-agents approve-and-generate --path /path/to/webapp
|
|
138
141
|
npx e2e-ai-agents finalize-generated-tests --path /path/to/webapp
|
|
@@ -199,7 +202,8 @@ Optional config file `e2e-ai-agents.config.json` (JSON):
|
|
|
199
202
|
"scenarios": 3,
|
|
200
203
|
"outputDir": "specs/functional/ai-assisted",
|
|
201
204
|
"heal": true,
|
|
202
|
-
"mcp": false
|
|
205
|
+
"mcp": false,
|
|
206
|
+
"mcpAllowFallback": false
|
|
203
207
|
},
|
|
204
208
|
"llm": { "provider": "anthropic", "fallback": "ollama" },
|
|
205
209
|
"policy": {
|
|
@@ -208,7 +212,9 @@ Optional config file `e2e-ai-agents.config.json` (JSON):
|
|
|
208
212
|
"forceFullOnWarningsAtOrAbove": 2,
|
|
209
213
|
"forceFullOnP0WithGaps": true,
|
|
210
214
|
"forceFullOnRiskyFiles": true,
|
|
211
|
-
"riskyFilePatterns": ["**/auth/**", "**/permissions/**", "**/security/**", "**/*.sql"]
|
|
215
|
+
"riskyFilePatterns": ["**/auth/**", "**/permissions/**", "**/security/**", "**/*.sql"],
|
|
216
|
+
"enforcementMode": "advisory",
|
|
217
|
+
"blockOnActions": ["must-add-tests"]
|
|
212
218
|
},
|
|
213
219
|
"flags": { "defaultState": "on" },
|
|
214
220
|
"audience": { "defaultRoles": ["member"] },
|
|
@@ -232,20 +238,36 @@ Notes:
|
|
|
232
238
|
- Impact analysis can apply subsystem-aware risk boosts and priority floors from a map (`impact.subsystemRisk`) to capture known high-blast-radius areas.
|
|
233
239
|
- Diffing is computed from `merge-base(<since>, HEAD)` when available, which is the standard PR-impact baseline.
|
|
234
240
|
- Reports are written under `testsRoot/.e2e-ai-agents/reports` (or app root if `testsRoot` is not set).
|
|
235
|
-
- Use `approve-and-generate` for explicit approval before
|
|
241
|
+
- Use `approve-and-generate` for explicit approval before generating/healing tests.
|
|
242
|
+
- Selector/data-testid patches are only applied when `--apply` is passed.
|
|
243
|
+
- `plan` is a direct alias for `suggest`.
|
|
244
|
+
- `generate` is a direct alias for `approve-and-generate`.
|
|
245
|
+
- `heal` targets flaky/failed specs from a Playwright JSON report (`--traceability-report`).
|
|
236
246
|
- `--apply` remains available as a legacy shortcut for direct `gap` execution.
|
|
237
247
|
- Use `--pipeline` to run the Playwright generation pipeline.
|
|
238
248
|
- If `e2e-test-gen-cli.ts` exists in `testsRoot`, it is used as the advanced runner.
|
|
239
249
|
- If it is absent, `@yasserkhanorg/e2e-agents` falls back to package-native generation with strategy-based templates, quality guardrails (`no test.describe`, single tag), and iterative heal attempts.
|
|
240
|
-
-
|
|
250
|
+
- `--pipeline-mcp` now attempts the official Playwright Test Agent loop first (planner/generator/healer) using:
|
|
251
|
+
- `npx playwright init-agents --loop=claude --prompts`
|
|
252
|
+
- `.mcp.json` (`playwright run-test-mcp-server`)
|
|
253
|
+
- `claude -p` non-interactive orchestration
|
|
254
|
+
- In MCP mode, fallback is strict by default: if official agent setup fails, generation stops instead of silently degrading.
|
|
255
|
+
- Use `--pipeline-mcp-allow-fallback` (or config `pipeline.mcpAllowFallback=true`) only when you explicitly want fallback generation.
|
|
256
|
+
- MCP prerequisites: Playwright config in `testsRoot` and Claude CLI installed/authenticated.
|
|
257
|
+
- Official MCP outputs are validated against discovered local API surface (`pw.*`, `pw.testBrowser.*`, `channelsPage.*`) to block invented methods (for example `pw.mainClient.*`).
|
|
258
|
+
- If fallback is enabled and official MCP agent execution is unavailable, pipeline falls back to `e2e-test-gen` (if present) or package-native generation with warnings in report output.
|
|
259
|
+
- `impact/gap` pipeline output now includes `pipeline.mcp` (`requested`, `active`, `backend`) so MCP activation is explicit.
|
|
241
260
|
- `suggest` writes `.e2e-ai-agents/plan.json` with `runSet` (`smoke|targeted|full`) and confidence.
|
|
242
261
|
- `suggest` also writes `.e2e-ai-agents/ci-summary.md` with CI status: `run-now`, `must-add-tests`, or `safe-to-merge`.
|
|
243
|
-
- CLI policy overrides: `--policy-min-confidence`, `--policy-safe-merge-confidence`, `--policy-force-full-on-warnings`, `--policy-risky-patterns`.
|
|
262
|
+
- CLI policy overrides: `--policy-min-confidence`, `--policy-safe-merge-confidence`, `--policy-force-full-on-warnings`, `--policy-risky-patterns`, `--policy-enforcement-mode`, `--policy-block-actions`.
|
|
244
263
|
- GitHub Actions output wiring: `--github-output $GITHUB_OUTPUT`.
|
|
245
264
|
- Optional merge gating: `--fail-on-must-add-tests` exits non-zero when uncovered P0/P1 gaps are detected. Leave this flag unset for advisory-only mode.
|
|
265
|
+
- `suggest` now appends run metrics to `.e2e-ai-agents/metrics.jsonl` and writes aggregated `.e2e-ai-agents/metrics-summary.json`.
|
|
246
266
|
- `impact/gap` now include actionable `testSuggestions` with linked source files and skeleton test code.
|
|
247
267
|
- `impact/gap` now include `impactModel` metadata (`flowMapping`, `testMapping`, `confidenceClass`, traceability stats, dependency graph stats).
|
|
268
|
+
- `impact/gap` now include `runMetadata` (run id/timestamps/duration/since ref) for auditability.
|
|
248
269
|
- `impact/gap` now include optional `impactModel.subsystemRisk` stats (map status, matched files/rules, boosted flows).
|
|
270
|
+
- `impact/gap` pipeline result rows now include failure taxonomy (`failureCategory`, `failureCode`) when generation/heal fails.
|
|
249
271
|
- `feedback` appends outcomes to `.e2e-ai-agents/feedback.json` and recomputes `.e2e-ai-agents/calibration.json`.
|
|
250
272
|
- `feedback` also computes intelligent flaky scores into `.e2e-ai-agents/flaky-tests.json`.
|
|
251
273
|
- `traceability-capture` converts Playwright JSON execution report + optional coverage map into `.e2e-ai-agents/traceability-input.json`.
|
|
@@ -566,21 +588,8 @@ Supported levels: `ERROR`, `WARN`, `INFO`, `DEBUG` (default: `INFO`)
|
|
|
566
588
|
|
|
567
589
|
### Caching
|
|
568
590
|
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
```typescript
|
|
572
|
-
import { SimpleCache } from '@yasserkhanorg/e2e-agents/agent/cache_utils';
|
|
573
|
-
|
|
574
|
-
// Create a 10-minute cache
|
|
575
|
-
const cache = new SimpleCache(10 * 60 * 1000);
|
|
576
|
-
|
|
577
|
-
// Store and retrieve
|
|
578
|
-
cache.set('key', {data: 'value'});
|
|
579
|
-
const value = cache.get('key');
|
|
580
|
-
|
|
581
|
-
// Check stats
|
|
582
|
-
const {size, entries} = cache.stats();
|
|
583
|
-
```
|
|
591
|
+
Repository context and analysis data are cached internally by the tool.
|
|
592
|
+
No public cache API is exposed; caching behavior is automatic.
|
|
584
593
|
|
|
585
594
|
### Performance Metrics (v0.3.0)
|
|
586
595
|
|
package/dist/agent/config.d.ts
CHANGED
|
@@ -53,6 +53,7 @@ export interface PipelineConfig {
|
|
|
53
53
|
parallel?: boolean;
|
|
54
54
|
dryRun?: boolean;
|
|
55
55
|
mcp?: boolean;
|
|
56
|
+
mcpAllowFallback?: boolean;
|
|
56
57
|
}
|
|
57
58
|
export interface LLMConfig {
|
|
58
59
|
provider?: string;
|
|
@@ -70,6 +71,8 @@ export interface PolicyConfig {
|
|
|
70
71
|
forceFullOnP0WithGaps: boolean;
|
|
71
72
|
forceFullOnRiskyFiles: boolean;
|
|
72
73
|
riskyFilePatterns: string[];
|
|
74
|
+
enforcementMode: 'advisory' | 'warn' | 'block';
|
|
75
|
+
blockOnActions: Array<'run-now' | 'must-add-tests' | 'safe-to-merge'>;
|
|
73
76
|
}
|
|
74
77
|
export interface DependencyGraphImpactConfig {
|
|
75
78
|
enabled: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/agent/config.ts"],"names":[],"mappings":"AAMA,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,KAAK,CAAC;AAC5C,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,YAAY,GAAG,SAAS,GAAG,UAAU,GAAG,SAAS,CAAC;AACvF,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,YAAY,GAAG,MAAM,CAAC;AAE5D,MAAM,WAAW,YAAY;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,cAAc;IAC3B,IAAI,EAAE,YAAY,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,cAAc;IAC3B,YAAY,EAAE,OAAO,CAAC;CACzB;AAED,MAAM,WAAW,mBAAmB;IAChC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACvB;AAED,MAAM,WAAW,mBAAmB;IAChC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACtB;AAED,MAAM,WAAW,oBAAoB;IACjC,cAAc,EAAE;QACZ,EAAE,EAAE,MAAM,CAAC;QACX,EAAE,EAAE,MAAM,CAAC;QACX,EAAE,EAAE,MAAM,CAAC;KACd,CAAC;IACF,eAAe,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,MAAM,SAAS,GAAG,IAAI,GAAG,KAAK,GAAG,SAAS,CAAC;AAEjD,MAAM,MAAM,YAAY,GAClB,cAAc,GACd,YAAY,GACZ,eAAe,GACf,QAAQ,GACR,OAAO,GACP,aAAa,CAAC;AAEpB,MAAM,WAAW,UAAU;IACvB,YAAY,EAAE,SAAS,CAAC;CAC3B;AAED,MAAM,WAAW,cAAc;IAC3B,YAAY,EAAE,YAAY,EAAE,CAAC;CAChC;AAED,MAAM,WAAW,iBAAiB;IAC9B,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,EAAE,MAAM,CAAC;IACzB,cAAc,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,cAAc;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,QAAQ,GAAG,UAAU,GAAG,SAAS,GAAG,QAAQ,CAAC;IACvD,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,GAAG,CAAC,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/agent/config.ts"],"names":[],"mappings":"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"}
|
package/dist/agent/config.js
CHANGED
|
@@ -75,7 +75,9 @@ const DEFAULT_CONFIG = {
|
|
|
75
75
|
scenarios: 3,
|
|
76
76
|
outputDir: 'specs/functional/ai-assisted',
|
|
77
77
|
heal: true,
|
|
78
|
+
project: 'chrome',
|
|
78
79
|
mcp: false,
|
|
80
|
+
mcpAllowFallback: false,
|
|
79
81
|
},
|
|
80
82
|
llm: {
|
|
81
83
|
provider: 'anthropic',
|
|
@@ -122,6 +124,8 @@ const DEFAULT_CONFIG = {
|
|
|
122
124
|
'**/*.sql',
|
|
123
125
|
'**/webhook/**',
|
|
124
126
|
],
|
|
127
|
+
enforcementMode: 'advisory',
|
|
128
|
+
blockOnActions: ['must-add-tests'],
|
|
125
129
|
},
|
|
126
130
|
flags: {
|
|
127
131
|
defaultState: 'on',
|
|
@@ -268,6 +272,18 @@ function normalizeFlagState(value) {
|
|
|
268
272
|
}
|
|
269
273
|
return undefined;
|
|
270
274
|
}
|
|
275
|
+
function normalizePolicyEnforcementMode(value) {
|
|
276
|
+
if (value === 'advisory' || value === 'warn' || value === 'block') {
|
|
277
|
+
return value;
|
|
278
|
+
}
|
|
279
|
+
return undefined;
|
|
280
|
+
}
|
|
281
|
+
function normalizePolicyBlockAction(value) {
|
|
282
|
+
if (value === 'run-now' || value === 'must-add-tests' || value === 'safe-to-merge') {
|
|
283
|
+
return value;
|
|
284
|
+
}
|
|
285
|
+
return undefined;
|
|
286
|
+
}
|
|
271
287
|
function extractConfigPatch(raw) {
|
|
272
288
|
const patch = {};
|
|
273
289
|
if (typeof raw.path === 'string') {
|
|
@@ -437,6 +453,9 @@ function extractConfigPatch(raw) {
|
|
|
437
453
|
parallel: pipeline.parallel !== undefined ? Boolean(pipeline.parallel) : undefined,
|
|
438
454
|
dryRun: pipeline.dryRun !== undefined ? Boolean(pipeline.dryRun) : undefined,
|
|
439
455
|
mcp: pipeline.mcp !== undefined ? Boolean(pipeline.mcp) : DEFAULT_CONFIG.pipeline.mcp,
|
|
456
|
+
mcpAllowFallback: pipeline.mcpAllowFallback !== undefined
|
|
457
|
+
? Boolean(pipeline.mcpAllowFallback)
|
|
458
|
+
: DEFAULT_CONFIG.pipeline.mcpAllowFallback,
|
|
440
459
|
};
|
|
441
460
|
}
|
|
442
461
|
if (raw.llm && typeof raw.llm === 'object') {
|
|
@@ -461,6 +480,11 @@ function extractConfigPatch(raw) {
|
|
|
461
480
|
}
|
|
462
481
|
if (raw.policy && typeof raw.policy === 'object') {
|
|
463
482
|
const policy = raw.policy;
|
|
483
|
+
const blockOnActions = Array.isArray(policy.blockOnActions)
|
|
484
|
+
? policy.blockOnActions
|
|
485
|
+
.map((value) => normalizePolicyBlockAction(value))
|
|
486
|
+
.filter((value) => Boolean(value))
|
|
487
|
+
: DEFAULT_CONFIG.policy.blockOnActions;
|
|
464
488
|
patch.policy = {
|
|
465
489
|
minConfidenceForTargeted: coerceNumber(policy.minConfidenceForTargeted) ?? DEFAULT_CONFIG.policy.minConfidenceForTargeted,
|
|
466
490
|
safeMergeMinConfidence: coerceNumber(policy.safeMergeMinConfidence) ?? DEFAULT_CONFIG.policy.safeMergeMinConfidence,
|
|
@@ -474,6 +498,8 @@ function extractConfigPatch(raw) {
|
|
|
474
498
|
riskyFilePatterns: Array.isArray(policy.riskyFilePatterns)
|
|
475
499
|
? policy.riskyFilePatterns.filter((pattern) => typeof pattern === 'string')
|
|
476
500
|
: DEFAULT_CONFIG.policy.riskyFilePatterns,
|
|
501
|
+
enforcementMode: normalizePolicyEnforcementMode(policy.enforcementMode) ?? DEFAULT_CONFIG.policy.enforcementMode,
|
|
502
|
+
blockOnActions: blockOnActions.length > 0 ? blockOnActions : DEFAULT_CONFIG.policy.blockOnActions,
|
|
477
503
|
};
|
|
478
504
|
}
|
|
479
505
|
if (raw.flags && typeof raw.flags === 'object') {
|
|
@@ -581,6 +607,12 @@ function resolveConfig(cwd, configPath, overrides) {
|
|
|
581
607
|
if (overrides.pipeline.dryRun !== undefined) {
|
|
582
608
|
pipelinePatch.dryRun = overrides.pipeline.dryRun;
|
|
583
609
|
}
|
|
610
|
+
if (overrides.pipeline.mcp !== undefined) {
|
|
611
|
+
pipelinePatch.mcp = overrides.pipeline.mcp;
|
|
612
|
+
}
|
|
613
|
+
if (overrides.pipeline.mcpAllowFallback !== undefined) {
|
|
614
|
+
pipelinePatch.mcpAllowFallback = overrides.pipeline.mcpAllowFallback;
|
|
615
|
+
}
|
|
584
616
|
config.pipeline = { ...config.pipeline, ...pipelinePatch };
|
|
585
617
|
}
|
|
586
618
|
if (overrides?.policy) {
|
|
@@ -603,6 +635,12 @@ function resolveConfig(cwd, configPath, overrides) {
|
|
|
603
635
|
if (overrides.policy.riskyFilePatterns && overrides.policy.riskyFilePatterns.length > 0) {
|
|
604
636
|
policyPatch.riskyFilePatterns = overrides.policy.riskyFilePatterns;
|
|
605
637
|
}
|
|
638
|
+
if (overrides.policy.enforcementMode !== undefined) {
|
|
639
|
+
policyPatch.enforcementMode = overrides.policy.enforcementMode;
|
|
640
|
+
}
|
|
641
|
+
if (overrides.policy.blockOnActions && overrides.policy.blockOnActions.length > 0) {
|
|
642
|
+
policyPatch.blockOnActions = overrides.policy.blockOnActions;
|
|
643
|
+
}
|
|
606
644
|
config.policy = { ...config.policy, ...policyPatch };
|
|
607
645
|
}
|
|
608
646
|
if (overrides?.specPDF) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"operational_insights.d.ts","sourceRoot":"","sources":["../../src/agent/operational_insights.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"operational_insights.d.ts","sourceRoot":"","sources":["../../src/agent/operational_insights.ts"],"names":[],"mappings":"AAKA,OAAO,EAAyB,KAAK,UAAU,EAAC,MAAM,WAAW,CAAC;AAClE,OAAO,KAAK,EAAC,kBAAkB,EAAC,MAAM,eAAe,CAAC;AAGtD,MAAM,WAAW,eAAe;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,IAAI,GAAG,MAAM,GAAG,QAAQ,CAAC;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,kBAAkB,CAAC;IACzD,aAAa,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,aAAa;IAC1B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,KAAK,EAAE,eAAe,EAAE,CAAC;CAC5B;AAED,MAAM,WAAW,iBAAiB;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;IACjC,OAAO,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,mBAAmB;IAChC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,KAAK,EAAE,iBAAiB,EAAE,CAAC;CAC9B;AAED,MAAM,WAAW,mBAAmB;IAChC,KAAK,CAAC,EAAE;QACJ,wBAAwB,EAAE,eAAe,EAAE,CAAC;QAC5C,2BAA2B,EAAE,MAAM,EAAE,CAAC;QACtC,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;KAC5B,CAAC;IACF,YAAY,CAAC,EAAE;QACX,MAAM,EAAE,iBAAiB,EAAE,CAAC;QAC5B,QAAQ,EAAE,iBAAiB,EAAE,CAAC;KACjC,CAAC;IACF,WAAW,CAAC,EAAE,kBAAkB,CAAC,SAAS,CAAC,CAAC;CAC/C;AA2CD,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,GAAG,UAAU,CA4FtF"}
|
|
@@ -5,6 +5,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
5
5
|
exports.applyOperationalInsights = applyOperationalInsights;
|
|
6
6
|
const fs_1 = require("fs");
|
|
7
7
|
const path_1 = require("path");
|
|
8
|
+
const plan_js_1 = require("./plan.js");
|
|
8
9
|
const test_path_js_1 = require("./test_path.js");
|
|
9
10
|
function readJson(path) {
|
|
10
11
|
if (!(0, fs_1.existsSync)(path)) {
|
|
@@ -122,5 +123,5 @@ function applyOperationalInsights(plan, appRoot) {
|
|
|
122
123
|
}
|
|
123
124
|
}
|
|
124
125
|
enhanced.insights = insights;
|
|
125
|
-
return enhanced;
|
|
126
|
+
return (0, plan_js_1.refreshPlanEnforcement)(enhanced);
|
|
126
127
|
}
|
package/dist/agent/pipeline.d.ts
CHANGED
|
@@ -7,11 +7,18 @@ export interface PipelineResult {
|
|
|
7
7
|
generateStatus: 'success' | 'skipped' | 'failed';
|
|
8
8
|
healStatus?: 'success' | 'skipped' | 'failed';
|
|
9
9
|
error?: string;
|
|
10
|
+
failureCategory?: 'config' | 'environment' | 'generation' | 'validation' | 'runtime' | 'quality' | 'path-safety' | 'unknown';
|
|
11
|
+
failureCode?: string;
|
|
10
12
|
}
|
|
11
13
|
export interface PipelineSummary {
|
|
12
|
-
runner: 'e2e-test-gen' | 'package-native' | 'unknown';
|
|
14
|
+
runner: 'playwright-agents' | 'e2e-test-gen' | 'package-native' | 'unknown';
|
|
13
15
|
results: PipelineResult[];
|
|
14
16
|
warnings: string[];
|
|
17
|
+
mcp?: {
|
|
18
|
+
requested: boolean;
|
|
19
|
+
active: boolean;
|
|
20
|
+
backend: 'playwright-agents' | 'e2e-test-gen' | 'package-native' | 'unknown';
|
|
21
|
+
};
|
|
15
22
|
}
|
|
16
23
|
export interface SpecHealTarget {
|
|
17
24
|
specPath: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pipeline.d.ts","sourceRoot":"","sources":["../../src/agent/pipeline.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAC,cAAc,EAAC,MAAM,aAAa,CAAC;AAChD,OAAO,KAAK,EAAC,UAAU,EAAC,MAAM,eAAe,CAAC;AAG9C,MAAM,WAAW,cAAc;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,SAAS,GAAG,SAAS,GAAG,QAAQ,CAAC;IACjD,UAAU,CAAC,EAAE,SAAS,GAAG,SAAS,GAAG,QAAQ,CAAC;IAC9C,KAAK,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"pipeline.d.ts","sourceRoot":"","sources":["../../src/agent/pipeline.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAC,cAAc,EAAC,MAAM,aAAa,CAAC;AAChD,OAAO,KAAK,EAAC,UAAU,EAAC,MAAM,eAAe,CAAC;AAG9C,MAAM,WAAW,cAAc;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,SAAS,GAAG,SAAS,GAAG,QAAQ,CAAC;IACjD,UAAU,CAAC,EAAE,SAAS,GAAG,SAAS,GAAG,QAAQ,CAAC;IAC9C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,eAAe,CAAC,EAAE,QAAQ,GAAG,aAAa,GAAG,YAAY,GAAG,YAAY,GAAG,SAAS,GAAG,SAAS,GAAG,aAAa,GAAG,SAAS,CAAC;IAC7H,WAAW,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,eAAe;IAC5B,MAAM,EAAE,mBAAmB,GAAG,cAAc,GAAG,gBAAgB,GAAG,SAAS,CAAC;IAC5E,OAAO,EAAE,cAAc,EAAE,CAAC;IAC1B,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,GAAG,CAAC,EAAE;QACF,SAAS,EAAE,OAAO,CAAC;QACnB,MAAM,EAAE,OAAO,CAAC;QAChB,OAAO,EAAE,mBAAmB,GAAG,cAAc,GAAG,gBAAgB,GAAG,SAAS,CAAC;KAChF,CAAC;CACL;AAED,MAAM,WAAW,cAAc;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC;CACnB;AAk9BD,wBAAgB,mBAAmB,CAC/B,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,cAAc,EAAE,EACzB,QAAQ,EAAE,cAAc,GACzB,eAAe,CA4FjB;AA4bD,wBAAgB,qBAAqB,CACjC,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,UAAU,EAAE,EACnB,QAAQ,EAAE,cAAc,GACzB,eAAe,CAmJjB"}
|