"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();