@yasserkhanorg/e2e-agents 0.9.0 → 0.11.0
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 +112 -584
- package/dist/agent/api_catalog.d.ts +11 -0
- package/dist/agent/api_catalog.d.ts.map +1 -0
- package/dist/agent/api_catalog.js +210 -0
- package/dist/agent/llm_agents_flow.d.ts +15 -0
- package/dist/agent/llm_agents_flow.d.ts.map +1 -0
- package/dist/agent/llm_agents_flow.js +434 -0
- package/dist/agent/native_flow.d.ts +6 -0
- package/dist/agent/native_flow.d.ts.map +1 -0
- package/dist/agent/native_flow.js +179 -0
- package/dist/agent/pipeline.d.ts +2 -25
- package/dist/agent/pipeline.d.ts.map +1 -1
- package/dist/agent/pipeline.js +30 -1329
- package/dist/agent/pipeline_types.d.ts +54 -0
- package/dist/agent/pipeline_types.d.ts.map +1 -0
- package/dist/agent/pipeline_types.js +4 -0
- package/dist/agent/pipeline_utils.d.ts +12 -0
- package/dist/agent/pipeline_utils.d.ts.map +1 -0
- package/dist/agent/pipeline_utils.js +156 -0
- package/dist/agent/process_runner.d.ts +10 -0
- package/dist/agent/process_runner.d.ts.map +1 -0
- package/dist/agent/process_runner.js +92 -0
- package/dist/agent/spec_generator.d.ts +5 -0
- package/dist/agent/spec_generator.d.ts.map +1 -0
- package/dist/agent/spec_generator.js +253 -0
- package/dist/agent/validation_runner.d.ts +5 -0
- package/dist/agent/validation_runner.d.ts.map +1 -0
- package/dist/agent/validation_runner.js +77 -0
- package/dist/agentic/playwright_runner.js +1 -1
- package/dist/cli/commands/analyze.d.ts +3 -0
- package/dist/cli/commands/analyze.d.ts.map +1 -0
- package/dist/cli/commands/analyze.js +77 -0
- package/dist/cli/commands/feedback.d.ts +3 -0
- package/dist/cli/commands/feedback.d.ts.map +1 -0
- package/dist/cli/commands/feedback.js +39 -0
- package/dist/cli/commands/finalize.d.ts +3 -0
- package/dist/cli/commands/finalize.d.ts.map +1 -0
- package/dist/cli/commands/finalize.js +41 -0
- package/dist/cli/commands/generate.d.ts +4 -0
- package/dist/cli/commands/generate.d.ts.map +1 -0
- package/dist/cli/commands/generate.js +108 -0
- package/dist/cli/commands/heal.d.ts +3 -0
- package/dist/cli/commands/heal.d.ts.map +1 -0
- package/dist/cli/commands/heal.js +60 -0
- package/dist/cli/commands/impact.d.ts +4 -0
- package/dist/cli/commands/impact.d.ts.map +1 -0
- package/dist/cli/commands/impact.js +26 -0
- package/dist/cli/commands/llm_health.d.ts +2 -0
- package/dist/cli/commands/llm_health.d.ts.map +1 -0
- package/dist/cli/commands/llm_health.js +38 -0
- package/dist/cli/commands/plan.d.ts +4 -0
- package/dist/cli/commands/plan.d.ts.map +1 -0
- package/dist/cli/commands/plan.js +83 -0
- package/dist/cli/commands/traceability.d.ts +4 -0
- package/dist/cli/commands/traceability.d.ts.map +1 -0
- package/dist/cli/commands/traceability.js +77 -0
- package/dist/cli/parse_args.d.ts +6 -0
- package/dist/cli/parse_args.d.ts.map +1 -0
- package/dist/cli/parse_args.js +216 -0
- package/dist/cli/types.d.ts +70 -0
- package/dist/cli/types.d.ts.map +1 -0
- package/dist/cli/types.js +4 -0
- package/dist/cli/usage.d.ts +2 -0
- package/dist/cli/usage.d.ts.map +1 -0
- package/dist/cli/usage.js +86 -0
- package/dist/cli.js +26 -1057
- package/dist/esm/agent/api_catalog.js +199 -0
- package/dist/esm/agent/llm_agents_flow.js +421 -0
- package/dist/esm/agent/native_flow.js +175 -0
- package/dist/esm/agent/pipeline.js +8 -1307
- package/dist/esm/agent/pipeline_types.js +3 -0
- package/dist/esm/agent/pipeline_utils.js +146 -0
- package/dist/esm/agent/process_runner.js +83 -0
- package/dist/esm/agent/spec_generator.js +249 -0
- package/dist/esm/agent/validation_runner.js +73 -0
- package/dist/esm/agentic/playwright_runner.js +1 -1
- package/dist/esm/cli/commands/analyze.js +74 -0
- package/dist/esm/cli/commands/feedback.js +36 -0
- package/dist/esm/cli/commands/finalize.js +38 -0
- package/dist/esm/cli/commands/generate.js +105 -0
- package/dist/esm/cli/commands/heal.js +57 -0
- package/dist/esm/cli/commands/impact.js +23 -0
- package/dist/esm/cli/commands/llm_health.js +35 -0
- package/dist/esm/cli/commands/plan.js +80 -0
- package/dist/esm/cli/commands/traceability.js +73 -0
- package/dist/esm/cli/parse_args.js +210 -0
- package/dist/esm/cli/types.js +3 -0
- package/dist/esm/cli/usage.js +83 -0
- package/dist/esm/cli.js +20 -1051
- package/dist/esm/mcp-server.js +18 -1
- package/dist/mcp-server.d.ts.map +1 -1
- package/dist/mcp-server.js +17 -0
- package/package.json +2 -4
package/dist/esm/mcp-server.js
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* Exposes tools for Claude and Playwright agents to discover, generate, and heal tests
|
|
6
6
|
*/
|
|
7
7
|
import { spawnSync } from 'child_process';
|
|
8
|
-
import { readFileSync, writeFileSync, existsSync } from 'fs';
|
|
8
|
+
import { readFileSync, writeFileSync, existsSync, realpathSync } from 'fs';
|
|
9
9
|
import { resolve } from 'path';
|
|
10
10
|
import { globSync } from 'glob';
|
|
11
11
|
/**
|
|
@@ -285,6 +285,23 @@ export class E2EAgentsMCPServer {
|
|
|
285
285
|
if (!validatePathIsWithinRoot(filePath, this.repoRoot)) {
|
|
286
286
|
return JSON.stringify({ error: 'Access denied' });
|
|
287
287
|
}
|
|
288
|
+
// SECURITY: Symlink resolution — resolve the real path to prevent symlink escape.
|
|
289
|
+
// Only check if the parent directory exists (file itself may not exist yet).
|
|
290
|
+
const parentDir = resolve(filePath, '..');
|
|
291
|
+
if (existsSync(parentDir)) {
|
|
292
|
+
const realParent = realpathSync(parentDir);
|
|
293
|
+
if (!validatePathIsWithinRoot(realParent, this.repoRoot)) {
|
|
294
|
+
return JSON.stringify({ error: 'Access denied' });
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
// SECURITY: Restrict writes to test-related paths only.
|
|
298
|
+
// Allowed: specs/, .e2e-ai-agents/, and files matching *.spec.ts / *.test.ts
|
|
299
|
+
const relPath = args.path.replace(/\\/g, '/');
|
|
300
|
+
const isTestSpec = /\.(spec|test)\.(ts|js|tsx|jsx)$/.test(relPath);
|
|
301
|
+
const isAllowedDir = relPath.startsWith('specs/') || relPath.startsWith('.e2e-ai-agents/');
|
|
302
|
+
if (!isTestSpec && !isAllowedDir) {
|
|
303
|
+
return JSON.stringify({ error: 'Access denied: writes restricted to test specs and .e2e-ai-agents/' });
|
|
304
|
+
}
|
|
288
305
|
// SECURITY: Size limit to prevent resource exhaustion
|
|
289
306
|
if (args.content.length > 10 * 1024 * 1024) {
|
|
290
307
|
// 10MB limit
|
package/dist/mcp-server.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-server.d.ts","sourceRoot":"","sources":["../src/mcp-server.ts"],"names":[],"mappings":"AAaA,UAAU,IAAI;IACV,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACxC;AA4GD;;;GAGG;AACH,qBAAa,kBAAkB;IAC3B,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,WAAW,CAAc;gBAErB,QAAQ,GAAE,MAAsB;IAM5C,OAAO,CAAC,WAAW;IAmGnB;;;OAGG;IACG,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;IAwB5E,OAAO,CAAC,aAAa;IA6BrB,OAAO,CAAC,QAAQ;IAmBhB,OAAO,CAAC,SAAS;
|
|
1
|
+
{"version":3,"file":"mcp-server.d.ts","sourceRoot":"","sources":["../src/mcp-server.ts"],"names":[],"mappings":"AAaA,UAAU,IAAI;IACV,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACxC;AA4GD;;;GAGG;AACH,qBAAa,kBAAkB;IAC3B,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,WAAW,CAAc;gBAErB,QAAQ,GAAE,MAAsB;IAM5C,OAAO,CAAC,WAAW;IAmGnB;;;OAGG;IACG,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;IAwB5E,OAAO,CAAC,aAAa;IA6BrB,OAAO,CAAC,QAAQ;IAmBhB,OAAO,CAAC,SAAS;IAwCjB,OAAO,CAAC,QAAQ;IAyDhB,OAAO,CAAC,aAAa;IA2BrB,OAAO,CAAC,oBAAoB;IAqD5B,OAAO,CAAC,eAAe;IAwBvB,OAAO,CAAC,sBAAsB;IAW9B;;OAEG;IACH,QAAQ,IAAI,IAAI,EAAE;CAGrB;AAYD,eAAe,kBAAkB,CAAC"}
|
package/dist/mcp-server.js
CHANGED
|
@@ -288,6 +288,23 @@ class E2EAgentsMCPServer {
|
|
|
288
288
|
if (!validatePathIsWithinRoot(filePath, this.repoRoot)) {
|
|
289
289
|
return JSON.stringify({ error: 'Access denied' });
|
|
290
290
|
}
|
|
291
|
+
// SECURITY: Symlink resolution — resolve the real path to prevent symlink escape.
|
|
292
|
+
// Only check if the parent directory exists (file itself may not exist yet).
|
|
293
|
+
const parentDir = (0, path_1.resolve)(filePath, '..');
|
|
294
|
+
if ((0, fs_1.existsSync)(parentDir)) {
|
|
295
|
+
const realParent = (0, fs_1.realpathSync)(parentDir);
|
|
296
|
+
if (!validatePathIsWithinRoot(realParent, this.repoRoot)) {
|
|
297
|
+
return JSON.stringify({ error: 'Access denied' });
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
// SECURITY: Restrict writes to test-related paths only.
|
|
301
|
+
// Allowed: specs/, .e2e-ai-agents/, and files matching *.spec.ts / *.test.ts
|
|
302
|
+
const relPath = args.path.replace(/\\/g, '/');
|
|
303
|
+
const isTestSpec = /\.(spec|test)\.(ts|js|tsx|jsx)$/.test(relPath);
|
|
304
|
+
const isAllowedDir = relPath.startsWith('specs/') || relPath.startsWith('.e2e-ai-agents/');
|
|
305
|
+
if (!isTestSpec && !isAllowedDir) {
|
|
306
|
+
return JSON.stringify({ error: 'Access denied: writes restricted to test specs and .e2e-ai-agents/' });
|
|
307
|
+
}
|
|
291
308
|
// SECURITY: Size limit to prevent resource exhaustion
|
|
292
309
|
if (args.content.length > 10 * 1024 * 1024) {
|
|
293
310
|
// 10MB limit
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@yasserkhanorg/e2e-agents",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.11.0",
|
|
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",
|
|
@@ -53,12 +53,10 @@
|
|
|
53
53
|
"@anthropic-ai/sdk": "^0.73.0",
|
|
54
54
|
"glob": "^11.0.0",
|
|
55
55
|
"marked": "^15.0.6",
|
|
56
|
-
"openai": "^4.73.0"
|
|
57
|
-
"pdf-parse": "^1.1.1"
|
|
56
|
+
"openai": "^4.73.0"
|
|
58
57
|
},
|
|
59
58
|
"devDependencies": {
|
|
60
59
|
"@types/node": "^22.0.0",
|
|
61
|
-
"@types/pdf-parse": "^1.1.4",
|
|
62
60
|
"typescript": "^5.6.0"
|
|
63
61
|
},
|
|
64
62
|
"repository": {
|