docs: enterprise refactor plan with ralph specs
This commit is contained in:
86
dist/index.js
vendored
Normal file
86
dist/index.js
vendored
Normal file
@@ -0,0 +1,86 @@
|
||||
"use strict";
|
||||
/**
|
||||
* ABE — Autonomous Bug Explorer
|
||||
* Entry point: wires all components together and starts exploration.
|
||||
*
|
||||
* Usage:
|
||||
* npm run explore -- --url http://localhost:3000 --output ./reports
|
||||
* ts-node src/index.ts http://localhost:3000
|
||||
*/
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
const ExplorationEngine_1 = require("./core/ExplorationEngine");
|
||||
const StateGraph_1 = require("./core/StateGraph");
|
||||
const Logger_1 = require("./core/Logger");
|
||||
const PlaywrightAgent_1 = require("./plugins/agents/PlaywrightAgent");
|
||||
const ScreenshotCollector_1 = require("./plugins/collectors/ScreenshotCollector");
|
||||
const NetworkCollector_1 = require("./plugins/collectors/NetworkCollector");
|
||||
const DOMSnapshotCollector_1 = require("./plugins/collectors/DOMSnapshotCollector");
|
||||
const JSONExporter_1 = require("./plugins/exporters/JSONExporter");
|
||||
const MarkdownExporter_1 = require("./plugins/exporters/MarkdownExporter");
|
||||
const PlaywrightReproducer_1 = require("./plugins/reproducers/PlaywrightReproducer");
|
||||
// ─── Parse CLI arguments ─────────────────────────────────────────────────────
|
||||
function parseArgs() {
|
||||
const args = process.argv.slice(2);
|
||||
let url = 'http://localhost:3000';
|
||||
let outputDir = './reports';
|
||||
let seed = 42;
|
||||
let maxSteps = 100;
|
||||
for (let i = 0; i < args.length; i++) {
|
||||
if (args[i] === '--url' && args[i + 1])
|
||||
url = args[++i];
|
||||
else if (args[i] === '--output' && args[i + 1])
|
||||
outputDir = args[++i];
|
||||
else if (args[i] === '--seed' && args[i + 1])
|
||||
seed = parseInt(args[++i], 10);
|
||||
else if (args[i] === '--max-steps' && args[i + 1])
|
||||
maxSteps = parseInt(args[++i], 10);
|
||||
else if (!args[i].startsWith('--'))
|
||||
url = args[i];
|
||||
}
|
||||
return { url, outputDir, seed, maxSteps };
|
||||
}
|
||||
// ─── Main ─────────────────────────────────────────────────────────────────────
|
||||
async function main() {
|
||||
const { url, outputDir, seed, maxSteps } = parseArgs();
|
||||
const sessionId = `${new Date().toISOString().replace(/[:.]/g, '-')}_seed${seed}`;
|
||||
const logger = new Logger_1.FileLogger('./logs', sessionId);
|
||||
const graph = new StateGraph_1.StateGraph();
|
||||
const agent = new PlaywrightAgent_1.PlaywrightAgent({ seed, headless: true, logger });
|
||||
const collectors = [
|
||||
new ScreenshotCollector_1.ScreenshotCollector(outputDir),
|
||||
new NetworkCollector_1.NetworkCollector(),
|
||||
new DOMSnapshotCollector_1.DOMSnapshotCollector(outputDir),
|
||||
];
|
||||
const exporters = [
|
||||
new JSONExporter_1.JSONExporter(url),
|
||||
new MarkdownExporter_1.MarkdownExporter(),
|
||||
];
|
||||
const reproducer = new PlaywrightReproducer_1.PlaywrightReproducer();
|
||||
const engine = new ExplorationEngine_1.ExplorationEngine({
|
||||
graph,
|
||||
agent,
|
||||
collectors,
|
||||
exporters,
|
||||
reproducer,
|
||||
logger,
|
||||
seed,
|
||||
url,
|
||||
maxSteps,
|
||||
outputDir,
|
||||
});
|
||||
console.log(`[ABE] Starting exploration of ${url} (seed=${seed}, maxSteps=${maxSteps})`);
|
||||
try {
|
||||
const result = await engine.run();
|
||||
console.log(`[ABE] Exploration complete.`);
|
||||
console.log(` States visited : ${result.statesVisited}`);
|
||||
console.log(` Anomalies found: ${result.anomaliesFound}`);
|
||||
if (result.anomaliesFound > 0) {
|
||||
console.log(` Reports saved to: ${outputDir}/`);
|
||||
}
|
||||
}
|
||||
catch (err) {
|
||||
console.error('[ABE] Fatal error:', err);
|
||||
process.exit(1);
|
||||
}
|
||||
}
|
||||
main();
|
||||
Reference in New Issue
Block a user