mycontext-cli 4.0.0 → 4.1.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.
Files changed (67) hide show
  1. package/README.md +56 -114
  2. package/dist/cli.js +67 -0
  3. package/dist/cli.js.map +1 -1
  4. package/dist/clients/MyContextAIClient.d.ts.map +1 -1
  5. package/dist/clients/MyContextAIClient.js +12 -0
  6. package/dist/clients/MyContextAIClient.js.map +1 -1
  7. package/dist/commands/agent.d.ts +22 -0
  8. package/dist/commands/agent.d.ts.map +1 -0
  9. package/dist/commands/agent.js +245 -0
  10. package/dist/commands/agent.js.map +1 -0
  11. package/dist/commands/init.d.ts +5 -0
  12. package/dist/commands/init.d.ts.map +1 -1
  13. package/dist/commands/init.js +18 -2
  14. package/dist/commands/init.js.map +1 -1
  15. package/dist/commands/status.d.ts.map +1 -1
  16. package/dist/commands/status.js +0 -9
  17. package/dist/commands/status.js.map +1 -1
  18. package/dist/commands/sync-readme.d.ts +14 -0
  19. package/dist/commands/sync-readme.d.ts.map +1 -0
  20. package/dist/commands/sync-readme.js +131 -0
  21. package/dist/commands/sync-readme.js.map +1 -0
  22. package/dist/commands/test.d.ts +76 -0
  23. package/dist/commands/test.d.ts.map +1 -0
  24. package/dist/commands/test.js +361 -0
  25. package/dist/commands/test.js.map +1 -0
  26. package/dist/mcp/browser-test-runner.d.ts +89 -0
  27. package/dist/mcp/browser-test-runner.d.ts.map +1 -0
  28. package/dist/mcp/browser-test-runner.js +786 -0
  29. package/dist/mcp/browser-test-runner.js.map +1 -0
  30. package/dist/mcp/test-mission-manager.d.ts +82 -0
  31. package/dist/mcp/test-mission-manager.d.ts.map +1 -0
  32. package/dist/mcp/test-mission-manager.js +327 -0
  33. package/dist/mcp/test-mission-manager.js.map +1 -0
  34. package/dist/mcp/test-reporter.d.ts +54 -0
  35. package/dist/mcp/test-reporter.d.ts.map +1 -0
  36. package/dist/mcp/test-reporter.js +358 -0
  37. package/dist/mcp/test-reporter.js.map +1 -0
  38. package/dist/mcp/testing-server.d.ts +36 -0
  39. package/dist/mcp/testing-server.d.ts.map +1 -0
  40. package/dist/mcp/testing-server.js +516 -0
  41. package/dist/mcp/testing-server.js.map +1 -0
  42. package/dist/package.json +6 -2
  43. package/dist/services/ContextService.d.ts +38 -0
  44. package/dist/services/ContextService.d.ts.map +1 -0
  45. package/dist/services/ContextService.js +104 -0
  46. package/dist/services/ContextService.js.map +1 -0
  47. package/dist/services/ProbeManager.d.ts +32 -0
  48. package/dist/services/ProbeManager.d.ts.map +1 -0
  49. package/dist/services/ProbeManager.js +116 -0
  50. package/dist/services/ProbeManager.js.map +1 -0
  51. package/dist/types/design-pipeline.d.ts +6 -0
  52. package/dist/types/design-pipeline.d.ts.map +1 -1
  53. package/dist/types/flow-testing.d.ts +179 -0
  54. package/dist/types/flow-testing.d.ts.map +1 -0
  55. package/dist/types/flow-testing.js +7 -0
  56. package/dist/types/flow-testing.js.map +1 -0
  57. package/dist/types/index.d.ts +1 -0
  58. package/dist/types/index.d.ts.map +1 -1
  59. package/dist/utils/designManifestManager.d.ts +4 -0
  60. package/dist/utils/designManifestManager.d.ts.map +1 -1
  61. package/dist/utils/designManifestManager.js +161 -0
  62. package/dist/utils/designManifestManager.js.map +1 -1
  63. package/dist/utils/githubModelsClient.d.ts.map +1 -1
  64. package/dist/utils/githubModelsClient.js +6 -2
  65. package/dist/utils/githubModelsClient.js.map +1 -1
  66. package/dist/utils/mcpTools.d.ts +21 -21
  67. package/package.json +6 -2
@@ -0,0 +1,76 @@
1
+ /**
2
+ * Test Commands
3
+ *
4
+ * CLI wrapper commands for the Flow Testing MCP Server.
5
+ * Provides convenient commands for creating and running UI flow tests.
6
+ */
7
+ import { Command } from "commander";
8
+ interface TestCommandOptions {
9
+ headless?: boolean;
10
+ url?: string;
11
+ slowMo?: number;
12
+ verbose?: boolean;
13
+ }
14
+ interface TestInitOptions {
15
+ fromUserFlows?: boolean;
16
+ interactive?: boolean;
17
+ }
18
+ /**
19
+ * Test command handler
20
+ */
21
+ export declare class TestCommand {
22
+ private projectPath;
23
+ private missionManager;
24
+ private _testRunner?;
25
+ private _reporter?;
26
+ constructor(projectPath?: string);
27
+ private get testRunner();
28
+ private get reporter();
29
+ /**
30
+ * Run an ad-hoc test from natural language
31
+ */
32
+ runAdHocTest(missionDescription: string, options: TestCommandOptions): Promise<void>;
33
+ /**
34
+ * Run a saved test mission
35
+ */
36
+ runTest(missionId: string, options: TestCommandOptions): Promise<void>;
37
+ /**
38
+ * List all test missions
39
+ */
40
+ listMissions(options: {
41
+ status?: string;
42
+ tag?: string;
43
+ }): Promise<void>;
44
+ /**
45
+ * Initialize a new test mission
46
+ */
47
+ initMission(options: TestInitOptions): Promise<void>;
48
+ /**
49
+ * Initialize missions from user flows
50
+ */
51
+ private initFromUserFlows;
52
+ /**
53
+ * Initialize mission interactively
54
+ */
55
+ private initInteractive;
56
+ /**
57
+ * Show test report
58
+ */
59
+ showReport(executionId: string, options: {
60
+ verbose?: boolean;
61
+ }): Promise<void>;
62
+ /**
63
+ * Run all tests
64
+ */
65
+ runAll(options: TestCommandOptions): Promise<void>;
66
+ /**
67
+ * Import test missions from a JSON file
68
+ */
69
+ importMissions(filePath: string): Promise<void>;
70
+ }
71
+ /**
72
+ * Register test commands
73
+ */
74
+ export declare function registerTestCommands(program: Command): void;
75
+ export {};
76
+ //# sourceMappingURL=test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test.d.ts","sourceRoot":"","sources":["../../src/commands/test.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC,UAAU,kBAAkB;IAC1B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,UAAU,eAAe;IACvB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED;;GAEG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,cAAc,CAAqB;IAC3C,OAAO,CAAC,WAAW,CAAC,CAAoB;IACxC,OAAO,CAAC,SAAS,CAAC,CAAe;gBAErB,WAAW,CAAC,EAAE,MAAM;IAKhC,OAAO,KAAK,UAAU,GAKrB;IAED,OAAO,KAAK,QAAQ,GAKnB;IAED;;OAEG;IACG,YAAY,CAChB,kBAAkB,EAAE,MAAM,EAC1B,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAAC,IAAI,CAAC;IAgBhB;;OAEG;IACG,OAAO,CACX,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAAC,IAAI,CAAC;IAiChB;;OAEG;IACG,YAAY,CAAC,OAAO,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAiD7E;;OAEG;IACG,WAAW,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAmE1D;;OAEG;YACW,iBAAiB;IAoB/B;;OAEG;YACW,eAAe;IAc7B;;OAEG;IACG,UAAU,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE;QAAE,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAoBpF;;OAEG;IACG,MAAM,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;IA0CxD;;OAEG;IACG,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAqBtD;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAuF3D"}
@@ -0,0 +1,361 @@
1
+ "use strict";
2
+ /**
3
+ * Test Commands
4
+ *
5
+ * CLI wrapper commands for the Flow Testing MCP Server.
6
+ * Provides convenient commands for creating and running UI flow tests.
7
+ */
8
+ var __importDefault = (this && this.__importDefault) || function (mod) {
9
+ return (mod && mod.__esModule) ? mod : { "default": mod };
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.TestCommand = void 0;
13
+ exports.registerTestCommands = registerTestCommands;
14
+ const chalk_1 = __importDefault(require("chalk"));
15
+ const prompts_1 = __importDefault(require("prompts"));
16
+ const test_mission_manager_1 = require("../mcp/test-mission-manager");
17
+ const browser_test_runner_1 = require("../mcp/browser-test-runner");
18
+ const test_reporter_1 = require("../mcp/test-reporter");
19
+ /**
20
+ * Test command handler
21
+ */
22
+ class TestCommand {
23
+ constructor(projectPath) {
24
+ this.projectPath = projectPath || process.cwd();
25
+ this.missionManager = new test_mission_manager_1.TestMissionManager(this.projectPath);
26
+ }
27
+ get testRunner() {
28
+ if (!this._testRunner) {
29
+ this._testRunner = new browser_test_runner_1.BrowserTestRunner(this.projectPath);
30
+ }
31
+ return this._testRunner;
32
+ }
33
+ get reporter() {
34
+ if (!this._reporter) {
35
+ this._reporter = new test_reporter_1.TestReporter(this.projectPath);
36
+ }
37
+ return this._reporter;
38
+ }
39
+ /**
40
+ * Run an ad-hoc test from natural language
41
+ */
42
+ async runAdHocTest(missionDescription, options) {
43
+ console.log(chalk_1.default.blue.bold("\n🧪 Running Ad-Hoc Test\n"));
44
+ // Create temporary mission
45
+ const mission = await this.missionManager.createMission({
46
+ name: `ad-hoc-${Date.now()}`,
47
+ mission: missionDescription,
48
+ expectedOutcome: "Test completes successfully",
49
+ tags: ["ad-hoc"],
50
+ startUrl: options.url,
51
+ });
52
+ // Run test
53
+ await this.runTest(mission.id, options);
54
+ }
55
+ /**
56
+ * Run a saved test mission
57
+ */
58
+ async runTest(missionId, options) {
59
+ console.log(chalk_1.default.blue.bold("\n🧪 Running Test\n"));
60
+ // Get mission
61
+ const mission = await this.missionManager.getMission(missionId);
62
+ if (!mission) {
63
+ console.error(chalk_1.default.red(`❌ Mission not found: ${missionId}`));
64
+ console.log(chalk_1.default.gray("\nRun 'mycontext test:list' to see available missions"));
65
+ return;
66
+ }
67
+ console.log(chalk_1.default.cyan(`Mission: ${mission.name}`));
68
+ console.log(chalk_1.default.gray(mission.mission));
69
+ // Run test
70
+ const result = await this.testRunner.runTest(mission, {
71
+ headless: options.headless !== false,
72
+ baseUrl: options.url,
73
+ slowMo: options.slowMo,
74
+ });
75
+ // Save result
76
+ await this.missionManager.saveExecution(result);
77
+ // Generate and print report
78
+ const report = await this.reporter.generateReport(result, mission);
79
+ this.reporter.printReport(report);
80
+ // Exit with appropriate code
81
+ process.exit(result.status === "passed" ? 0 : 1);
82
+ }
83
+ /**
84
+ * List all test missions
85
+ */
86
+ async listMissions(options) {
87
+ console.log(chalk_1.default.blue.bold("\n📋 Test Missions\n"));
88
+ const missions = await this.missionManager.listMissions({
89
+ status: options.status,
90
+ tag: options.tag,
91
+ });
92
+ if (missions.length === 0) {
93
+ console.log(chalk_1.default.yellow("No test missions found."));
94
+ console.log(chalk_1.default.gray("\nCreate a mission with: mycontext test:init"));
95
+ return;
96
+ }
97
+ missions.forEach((mission, index) => {
98
+ console.log(chalk_1.default.bold(`${index + 1}. ${mission.name}`));
99
+ console.log(chalk_1.default.gray(` ID: ${mission.id}`));
100
+ console.log(chalk_1.default.gray(` Mission: ${mission.mission}`));
101
+ console.log(chalk_1.default.gray(` Expected: ${mission.expectedOutcome}`));
102
+ if (mission.tags && mission.tags.length > 0) {
103
+ console.log(chalk_1.default.gray(` Tags: ${mission.tags.join(", ")}`));
104
+ }
105
+ console.log(chalk_1.default.gray(` Created: ${new Date(mission.createdAt).toLocaleString()}`));
106
+ console.log("");
107
+ });
108
+ // Show statistics
109
+ const stats = await this.missionManager.getStatistics();
110
+ console.log(chalk_1.default.bold("Statistics:"));
111
+ console.log(chalk_1.default.gray(` Total Missions: ${stats.totalMissions}`));
112
+ console.log(chalk_1.default.gray(` Total Executions: ${stats.totalExecutions}`));
113
+ console.log(chalk_1.default.gray(` Pass Rate: ${stats.passRate}%`));
114
+ console.log(chalk_1.default.gray(` Average Duration: ${stats.averageDuration}ms`));
115
+ }
116
+ /**
117
+ * Initialize a new test mission
118
+ */
119
+ async initMission(options) {
120
+ console.log(chalk_1.default.blue.bold("\n🎬 Initialize Test Mission\n"));
121
+ if (options.fromUserFlows) {
122
+ await this.initFromUserFlows();
123
+ return;
124
+ }
125
+ if (options.interactive) {
126
+ await this.initInteractive();
127
+ return;
128
+ }
129
+ // Prompt for mission details
130
+ const answers = await (0, prompts_1.default)([
131
+ {
132
+ type: "text",
133
+ name: "name",
134
+ message: "Test mission name:",
135
+ validate: (value) => (value.length > 0 ? true : "Name is required"),
136
+ },
137
+ {
138
+ type: "text",
139
+ name: "mission",
140
+ message: "Mission description (what to test):",
141
+ validate: (value) => (value.length > 0 ? true : "Description is required"),
142
+ },
143
+ {
144
+ type: "text",
145
+ name: "expectedOutcome",
146
+ message: "Expected outcome:",
147
+ validate: (value) => (value.length > 0 ? true : "Expected outcome is required"),
148
+ },
149
+ {
150
+ type: "text",
151
+ name: "startUrl",
152
+ message: "Starting URL (optional):",
153
+ },
154
+ {
155
+ type: "text",
156
+ name: "tags",
157
+ message: "Tags (comma-separated, optional):",
158
+ },
159
+ ]);
160
+ if (!answers.name) {
161
+ console.log(chalk_1.default.yellow("\nCancelled"));
162
+ return;
163
+ }
164
+ // Create mission
165
+ const mission = await this.missionManager.createMission({
166
+ name: answers.name,
167
+ mission: answers.mission,
168
+ expectedOutcome: answers.expectedOutcome,
169
+ startUrl: answers.startUrl || undefined,
170
+ tags: answers.tags
171
+ ? answers.tags.split(",").map((t) => t.trim())
172
+ : [],
173
+ });
174
+ console.log(chalk_1.default.green(`\n✅ Mission created: ${mission.id}`));
175
+ console.log(chalk_1.default.gray(`\nRun with: mycontext test:run ${mission.name}`));
176
+ }
177
+ /**
178
+ * Initialize missions from user flows
179
+ */
180
+ async initFromUserFlows() {
181
+ console.log(chalk_1.default.cyan("Importing test missions from user flows..."));
182
+ try {
183
+ const missions = await this.missionManager.importFromUserFlows();
184
+ console.log(chalk_1.default.green(`\n✅ Imported ${missions.length} missions from user flows`));
185
+ missions.forEach((mission) => {
186
+ console.log(chalk_1.default.gray(` • ${mission.name}`));
187
+ });
188
+ console.log(chalk_1.default.gray("\nRun with: mycontext test:run <name>"));
189
+ }
190
+ catch (error) {
191
+ console.error(chalk_1.default.red(`\n❌ Error: ${error.message}`));
192
+ }
193
+ }
194
+ /**
195
+ * Initialize mission interactively
196
+ */
197
+ async initInteractive() {
198
+ console.log(chalk_1.default.yellow("\n🎥 Interactive recording mode is not yet implemented."));
199
+ console.log(chalk_1.default.gray("This feature will allow you to perform actions in a browser,"));
200
+ console.log(chalk_1.default.gray("and the AI will observe and create a reusable test."));
201
+ }
202
+ /**
203
+ * Show test report
204
+ */
205
+ async showReport(executionId, options) {
206
+ console.log(chalk_1.default.blue.bold("\n📊 Test Report\n"));
207
+ const report = await this.reporter.getReport(executionId);
208
+ if (!report) {
209
+ console.error(chalk_1.default.red(`❌ Report not found: ${executionId}`));
210
+ return;
211
+ }
212
+ if (options.verbose) {
213
+ const formatted = await this.reporter.formatReport(report, {
214
+ includeScreenshots: true,
215
+ });
216
+ console.log(formatted);
217
+ }
218
+ else {
219
+ this.reporter.printReport(report);
220
+ }
221
+ }
222
+ /**
223
+ * Run all tests
224
+ */
225
+ async runAll(options) {
226
+ console.log(chalk_1.default.blue.bold("\n🧪 Running All Tests\n"));
227
+ const missions = await this.missionManager.listMissions();
228
+ if (missions.length === 0) {
229
+ console.log(chalk_1.default.yellow("No test missions found."));
230
+ return;
231
+ }
232
+ const results = [];
233
+ for (const mission of missions) {
234
+ console.log(chalk_1.default.cyan(`\n▶ Running: ${mission.name}`));
235
+ const result = await this.testRunner.runTest(mission, {
236
+ headless: options.headless !== false,
237
+ baseUrl: options.url,
238
+ slowMo: options.slowMo,
239
+ });
240
+ await this.missionManager.saveExecution(result);
241
+ results.push(result);
242
+ }
243
+ // Summary
244
+ const passed = results.filter((r) => r.status === "passed").length;
245
+ const failed = results.filter((r) => r.status === "failed").length;
246
+ const errors = results.filter((r) => r.status === "error").length;
247
+ console.log(chalk_1.default.bold.blue("\n📊 Test Summary\n"));
248
+ console.log(chalk_1.default.green(` Passed: ${passed}/${results.length}`));
249
+ console.log(chalk_1.default.red(` Failed: ${failed}/${results.length}`));
250
+ console.log(chalk_1.default.yellow(` Errors: ${errors}/${results.length}`));
251
+ process.exit(failed > 0 || errors > 0 ? 1 : 0);
252
+ }
253
+ /**
254
+ * Import test missions from a JSON file
255
+ */
256
+ async importMissions(filePath) {
257
+ console.log(chalk_1.default.blue.bold("\n📥 Importing Test Missions\n"));
258
+ try {
259
+ const missions = await this.missionManager.importFromJson(filePath);
260
+ console.log(chalk_1.default.green(`\n✅ Successfully imported ${missions.length} missions:\n`));
261
+ missions.forEach((mission, index) => {
262
+ console.log(chalk_1.default.bold(`${index + 1}. ${mission.name}`));
263
+ console.log(chalk_1.default.gray(` ID: ${mission.id}`));
264
+ console.log(chalk_1.default.gray(` Tags: ${mission.tags?.join(", ") || "none"}`));
265
+ console.log("");
266
+ });
267
+ console.log(chalk_1.default.gray("Run tests with: mycontext test:run <mission-name>"));
268
+ }
269
+ catch (error) {
270
+ console.error(chalk_1.default.red(`\n❌ Import failed: ${error.message}`));
271
+ process.exit(1);
272
+ }
273
+ }
274
+ }
275
+ exports.TestCommand = TestCommand;
276
+ /**
277
+ * Register test commands
278
+ */
279
+ function registerTestCommands(program) {
280
+ const test = program
281
+ .command("test")
282
+ .description("Run UI flow tests with AI-powered navigation");
283
+ // test "mission description" - Run ad-hoc test
284
+ test
285
+ .argument("[mission]", "Natural language test mission")
286
+ .option("--no-headless", "Show browser (non-headless mode)")
287
+ .option("--url <url>", "Starting URL")
288
+ .option("--slow-mo <ms>", "Slow down by N milliseconds")
289
+ .option("-v, --verbose", "Verbose output")
290
+ .action(async (mission, options) => {
291
+ const cmd = new TestCommand();
292
+ if (mission) {
293
+ await cmd.runAdHocTest(mission, options);
294
+ }
295
+ else {
296
+ test.help();
297
+ }
298
+ });
299
+ // test:run <name> - Run saved mission
300
+ program
301
+ .command("test:run")
302
+ .description("Run a saved test mission")
303
+ .argument("<name>", "Mission name or ID")
304
+ .option("--no-headless", "Show browser (non-headless mode)")
305
+ .option("--url <url>", "Starting URL")
306
+ .option("--slow-mo <ms>", "Slow down by N milliseconds")
307
+ .action(async (name, options) => {
308
+ const cmd = new TestCommand();
309
+ await cmd.runTest(name, options);
310
+ });
311
+ // test:list - List missions
312
+ program
313
+ .command("test:list")
314
+ .description("List all test missions")
315
+ .option("--status <status>", "Filter by status (all|passing|failing)")
316
+ .option("--tag <tag>", "Filter by tag")
317
+ .action(async (options) => {
318
+ const cmd = new TestCommand();
319
+ await cmd.listMissions(options);
320
+ });
321
+ // test:init - Initialize mission
322
+ program
323
+ .command("test:init")
324
+ .description("Create a new test mission")
325
+ .option("--from-user-flows", "Import from 02-user-flows.md")
326
+ .option("--interactive", "Interactive recording mode")
327
+ .action(async (options) => {
328
+ const cmd = new TestCommand();
329
+ await cmd.initMission(options);
330
+ });
331
+ // test:report <id> - Show report
332
+ program
333
+ .command("test:report")
334
+ .description("Show test execution report")
335
+ .argument("<id>", "Execution ID")
336
+ .option("-v, --verbose", "Show full report")
337
+ .action(async (id, options) => {
338
+ const cmd = new TestCommand();
339
+ await cmd.showReport(id, options);
340
+ });
341
+ // test:all - Run all tests
342
+ program
343
+ .command("test:all")
344
+ .description("Run all test missions")
345
+ .option("--no-headless", "Show browser (non-headless mode)")
346
+ .option("--url <url>", "Starting URL")
347
+ .action(async (options) => {
348
+ const cmd = new TestCommand();
349
+ await cmd.runAll(options);
350
+ });
351
+ // test:import <file> - Import missions from JSON
352
+ program
353
+ .command("test:import")
354
+ .description("Import test missions from a JSON file")
355
+ .argument("<file>", "Path to JSON file containing test missions")
356
+ .action(async (file) => {
357
+ const cmd = new TestCommand();
358
+ await cmd.importMissions(file);
359
+ });
360
+ }
361
+ //# sourceMappingURL=test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test.js","sourceRoot":"","sources":["../../src/commands/test.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;;;;AAkXH,oDAuFC;AAvcD,kDAA0B;AAC1B,sDAA8B;AAE9B,sEAAiE;AACjE,oEAA+D;AAC/D,wDAAoD;AAepD;;GAEG;AACH,MAAa,WAAW;IAMtB,YAAY,WAAoB;QAC9B,IAAI,CAAC,WAAW,GAAG,WAAW,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;QAChD,IAAI,CAAC,cAAc,GAAG,IAAI,yCAAkB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACjE,CAAC;IAED,IAAY,UAAU;QACpB,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YACtB,IAAI,CAAC,WAAW,GAAG,IAAI,uCAAiB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAC7D,CAAC;QACD,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;IAED,IAAY,QAAQ;QAClB,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YACpB,IAAI,CAAC,SAAS,GAAG,IAAI,4BAAY,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACtD,CAAC;QACD,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,YAAY,CAChB,kBAA0B,EAC1B,OAA2B;QAE3B,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC,CAAC;QAE3D,2BAA2B;QAC3B,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC;YACtD,IAAI,EAAE,UAAU,IAAI,CAAC,GAAG,EAAE,EAAE;YAC5B,OAAO,EAAE,kBAAkB;YAC3B,eAAe,EAAE,6BAA6B;YAC9C,IAAI,EAAE,CAAC,QAAQ,CAAC;YAChB,QAAQ,EAAE,OAAO,CAAC,GAAG;SACtB,CAAC,CAAC;QAEH,WAAW;QACX,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;IAC1C,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,OAAO,CACX,SAAiB,EACjB,OAA2B;QAE3B,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC;QAEpD,cAAc;QACd,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;QAEhE,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,wBAAwB,SAAS,EAAE,CAAC,CAAC,CAAC;YAC9D,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,uDAAuD,CAAC,CAAC,CAAC;YACjF,OAAO;QACT,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,YAAY,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QACpD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;QAEzC,WAAW;QACX,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,OAAO,EAAE;YACpD,QAAQ,EAAE,OAAO,CAAC,QAAQ,KAAK,KAAK;YACpC,OAAO,EAAE,OAAO,CAAC,GAAG;YACpB,MAAM,EAAE,OAAO,CAAC,MAAM;SACvB,CAAC,CAAC;QAEH,cAAc;QACd,MAAM,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;QAEhD,4BAA4B;QAC5B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACnE,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QAElC,6BAA6B;QAC7B,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACnD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,YAAY,CAAC,OAA0C;QAC3D,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC,CAAC;QAErD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC;YACtD,MAAM,EAAE,OAAO,CAAC,MAAa;YAC7B,GAAG,EAAE,OAAO,CAAC,GAAG;SACjB,CAAC,CAAC;QAEH,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,yBAAyB,CAAC,CAAC,CAAC;YACrD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,8CAA8C,CAAC,CAAC,CAAC;YACxE,OAAO;QACT,CAAC;QAED,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE;YAClC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,GAAG,KAAK,GAAG,CAAC,KAAK,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;YACzD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,UAAU,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;YAChD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,eAAe,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;YAC1D,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,gBAAgB,OAAO,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC;YAEnE,IAAI,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC5C,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,YAAY,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;YACjE,CAAC;YAED,OAAO,CAAC,GAAG,CACT,eAAK,CAAC,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,cAAc,EAAE,EAAE,CAAC,CAC1E,CAAC;YACF,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAClB,CAAC,CAAC,CAAC;QAEH,kBAAkB;QAClB,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE,CAAC;QACxD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;QACvC,OAAO,CAAC,GAAG,CACT,eAAK,CAAC,IAAI,CAAC,qBAAqB,KAAK,CAAC,aAAa,EAAE,CAAC,CACvD,CAAC;QACF,OAAO,CAAC,GAAG,CACT,eAAK,CAAC,IAAI,CAAC,uBAAuB,KAAK,CAAC,eAAe,EAAE,CAAC,CAC3D,CAAC;QACF,OAAO,CAAC,GAAG,CACT,eAAK,CAAC,IAAI,CAAC,gBAAgB,KAAK,CAAC,QAAQ,GAAG,CAAC,CAC9C,CAAC;QACF,OAAO,CAAC,GAAG,CACT,eAAK,CAAC,IAAI,CACR,uBAAuB,KAAK,CAAC,eAAe,IAAI,CACjD,CACF,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,WAAW,CAAC,OAAwB;QACxC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC,CAAC;QAE/D,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;YAC1B,MAAM,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC/B,OAAO;QACT,CAAC;QAED,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;YACxB,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;YAC7B,OAAO;QACT,CAAC;QAED,6BAA6B;QAC7B,MAAM,OAAO,GAAG,MAAM,IAAA,iBAAO,EAAC;YAC5B;gBACE,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,MAAM;gBACZ,OAAO,EAAE,oBAAoB;gBAC7B,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,kBAAkB,CAAC;aACpE;YACD;gBACE,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,SAAS;gBACf,OAAO,EAAE,qCAAqC;gBAC9C,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,yBAAyB,CAAC;aAC3E;YACD;gBACE,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,iBAAiB;gBACvB,OAAO,EAAE,mBAAmB;gBAC5B,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,8BAA8B,CAAC;aAChF;YACD;gBACE,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,UAAU;gBAChB,OAAO,EAAE,0BAA0B;aACpC;YACD;gBACE,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,MAAM;gBACZ,OAAO,EAAE,mCAAmC;aAC7C;SACF,CAAC,CAAC;QAEH,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;YAClB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC;YACzC,OAAO;QACT,CAAC;QAED,iBAAiB;QACjB,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC;YACtD,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,eAAe,EAAE,OAAO,CAAC,eAAe;YACxC,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,SAAS;YACvC,IAAI,EAAE,OAAO,CAAC,IAAI;gBAChB,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;gBACtD,CAAC,CAAC,EAAE;SACP,CAAC,CAAC;QAEH,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,wBAAwB,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;QAC/D,OAAO,CAAC,GAAG,CACT,eAAK,CAAC,IAAI,CAAC,kCAAkC,OAAO,CAAC,IAAI,EAAE,CAAC,CAC7D,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,iBAAiB;QAC7B,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAC,CAAC;QAEtE,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,mBAAmB,EAAE,CAAC;YAEjE,OAAO,CAAC,GAAG,CACT,eAAK,CAAC,KAAK,CAAC,gBAAgB,QAAQ,CAAC,MAAM,2BAA2B,CAAC,CACxE,CAAC;YAEF,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;gBAC3B,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,OAAO,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;YACjD,CAAC,CAAC,CAAC;YAEH,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAC,CAAC;QACnE,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,cAAc,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QAC1D,CAAC;IACH,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,eAAe;QAC3B,OAAO,CAAC,GAAG,CACT,eAAK,CAAC,MAAM,CACV,yDAAyD,CAC1D,CACF,CAAC;QACF,OAAO,CAAC,GAAG,CACT,eAAK,CAAC,IAAI,CACR,8DAA8D,CAC/D,CACF,CAAC;QACF,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,qDAAqD,CAAC,CAAC,CAAC;IACjF,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,UAAU,CAAC,WAAmB,EAAE,OAA8B;QAClE,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC;QAEnD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;QAE1D,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,uBAAuB,WAAW,EAAE,CAAC,CAAC,CAAC;YAC/D,OAAO;QACT,CAAC;QAED,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YACpB,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,MAAM,EAAE;gBACzD,kBAAkB,EAAE,IAAI;aACzB,CAAC,CAAC;YACH,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACzB,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QACpC,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,MAAM,CAAC,OAA2B;QACtC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC,CAAC;QAEzD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE,CAAC;QAE1D,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,yBAAyB,CAAC,CAAC,CAAC;YACrD,OAAO;QACT,CAAC;QAED,MAAM,OAAO,GAAG,EAAE,CAAC;QAEnB,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC/B,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,gBAAgB,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;YAExD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,OAAO,EAAE;gBACpD,QAAQ,EAAE,OAAO,CAAC,QAAQ,KAAK,KAAK;gBACpC,OAAO,EAAE,OAAO,CAAC,GAAG;gBACpB,MAAM,EAAE,OAAO,CAAC,MAAM;aACvB,CAAC,CAAC;YAEH,MAAM,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;YAChD,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACvB,CAAC;QAED,UAAU;QACV,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,MAAM,CAAC;QACnE,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,MAAM,CAAC;QACnE,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,OAAO,CAAC,CAAC,MAAM,CAAC;QAElE,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC;QACpD,OAAO,CAAC,GAAG,CACT,eAAK,CAAC,KAAK,CAAC,aAAa,MAAM,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CACrD,CAAC;QACF,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,aAAa,MAAM,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAChE,OAAO,CAAC,GAAG,CACT,eAAK,CAAC,MAAM,CAAC,aAAa,MAAM,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CACtD,CAAC;QAEF,OAAO,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACjD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,cAAc,CAAC,QAAgB;QACnC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC,CAAC;QAE/D,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;YAEpE,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,6BAA6B,QAAQ,CAAC,MAAM,cAAc,CAAC,CAAC,CAAC;YAErF,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE;gBAClC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,GAAG,KAAK,GAAG,CAAC,KAAK,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;gBACzD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,UAAU,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;gBAChD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,YAAY,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,MAAM,EAAE,CAAC,CAAC,CAAC;gBAC1E,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAClB,CAAC,CAAC,CAAC;YAEH,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,mDAAmD,CAAC,CAAC,CAAC;QAC/E,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,sBAAsB,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;YAChE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;CACF;AApVD,kCAoVC;AAED;;GAEG;AACH,SAAgB,oBAAoB,CAAC,OAAgB;IACnD,MAAM,IAAI,GAAG,OAAO;SACjB,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,8CAA8C,CAAC,CAAC;IAE/D,+CAA+C;IAC/C,IAAI;SACD,QAAQ,CAAC,WAAW,EAAE,+BAA+B,CAAC;SACtD,MAAM,CAAC,eAAe,EAAE,kCAAkC,CAAC;SAC3D,MAAM,CAAC,aAAa,EAAE,cAAc,CAAC;SACrC,MAAM,CAAC,gBAAgB,EAAE,6BAA6B,CAAC;SACvD,MAAM,CAAC,eAAe,EAAE,gBAAgB,CAAC;SACzC,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE;QACjC,MAAM,GAAG,GAAG,IAAI,WAAW,EAAE,CAAC;QAC9B,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,GAAG,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAC3C,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,IAAI,EAAE,CAAC;QACd,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,sCAAsC;IACtC,OAAO;SACJ,OAAO,CAAC,UAAU,CAAC;SACnB,WAAW,CAAC,0BAA0B,CAAC;SACvC,QAAQ,CAAC,QAAQ,EAAE,oBAAoB,CAAC;SACxC,MAAM,CAAC,eAAe,EAAE,kCAAkC,CAAC;SAC3D,MAAM,CAAC,aAAa,EAAE,cAAc,CAAC;SACrC,MAAM,CAAC,gBAAgB,EAAE,6BAA6B,CAAC;SACvD,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE;QAC9B,MAAM,GAAG,GAAG,IAAI,WAAW,EAAE,CAAC;QAC9B,MAAM,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACnC,CAAC,CAAC,CAAC;IAEL,4BAA4B;IAC5B,OAAO;SACJ,OAAO,CAAC,WAAW,CAAC;SACpB,WAAW,CAAC,wBAAwB,CAAC;SACrC,MAAM,CAAC,mBAAmB,EAAE,wCAAwC,CAAC;SACrE,MAAM,CAAC,aAAa,EAAE,eAAe,CAAC;SACtC,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;QACxB,MAAM,GAAG,GAAG,IAAI,WAAW,EAAE,CAAC;QAC9B,MAAM,GAAG,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;IAClC,CAAC,CAAC,CAAC;IAEL,iCAAiC;IACjC,OAAO;SACJ,OAAO,CAAC,WAAW,CAAC;SACpB,WAAW,CAAC,2BAA2B,CAAC;SACxC,MAAM,CAAC,mBAAmB,EAAE,8BAA8B,CAAC;SAC3D,MAAM,CAAC,eAAe,EAAE,4BAA4B,CAAC;SACrD,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;QACxB,MAAM,GAAG,GAAG,IAAI,WAAW,EAAE,CAAC;QAC9B,MAAM,GAAG,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IACjC,CAAC,CAAC,CAAC;IAEL,iCAAiC;IACjC,OAAO;SACJ,OAAO,CAAC,aAAa,CAAC;SACtB,WAAW,CAAC,4BAA4B,CAAC;SACzC,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC;SAChC,MAAM,CAAC,eAAe,EAAE,kBAAkB,CAAC;SAC3C,MAAM,CAAC,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE;QAC5B,MAAM,GAAG,GAAG,IAAI,WAAW,EAAE,CAAC;QAC9B,MAAM,GAAG,CAAC,UAAU,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;IACpC,CAAC,CAAC,CAAC;IAEL,2BAA2B;IAC3B,OAAO;SACJ,OAAO,CAAC,UAAU,CAAC;SACnB,WAAW,CAAC,uBAAuB,CAAC;SACpC,MAAM,CAAC,eAAe,EAAE,kCAAkC,CAAC;SAC3D,MAAM,CAAC,aAAa,EAAE,cAAc,CAAC;SACrC,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;QACxB,MAAM,GAAG,GAAG,IAAI,WAAW,EAAE,CAAC;QAC9B,MAAM,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC5B,CAAC,CAAC,CAAC;IAEL,iDAAiD;IACjD,OAAO;SACJ,OAAO,CAAC,aAAa,CAAC;SACtB,WAAW,CAAC,uCAAuC,CAAC;SACpD,QAAQ,CAAC,QAAQ,EAAE,4CAA4C,CAAC;SAChE,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;QACrB,MAAM,GAAG,GAAG,IAAI,WAAW,EAAE,CAAC;QAC9B,MAAM,GAAG,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,89 @@
1
+ /**
2
+ * Browser Test Runner
3
+ *
4
+ * Executes test missions using Playwright + AI-powered navigation.
5
+ * The AI agent autonomously navigates the UI, makes decisions, and validates outcomes.
6
+ */
7
+ import { TestMission, TestExecutionResult, BrowserConfig, InteractiveTestSession } from "../types/flow-testing";
8
+ export declare class BrowserTestRunner {
9
+ private projectPath;
10
+ private browser?;
11
+ private context?;
12
+ private aiClient;
13
+ private contextService;
14
+ private screenshotsDir;
15
+ constructor(projectPath: string);
16
+ /**
17
+ * Initialize AI client from project config
18
+ */
19
+ private initializeAIClient;
20
+ /**
21
+ * Run a test mission
22
+ */
23
+ runTest(mission: TestMission, config?: BrowserConfig): Promise<TestExecutionResult>;
24
+ /**
25
+ * Execute mission using AI
26
+ */
27
+ private executeWithAI;
28
+ /**
29
+ * Ask AI for next action
30
+ */
31
+ private askAI;
32
+ /**
33
+ * Infer what value to use for a field based on test data
34
+ */
35
+ private inferFieldValue;
36
+ /**
37
+ * Execute an action on the page
38
+ */
39
+ private executeAction;
40
+ /**
41
+ * Convert jQuery-style or ambiguous selectors to Playwright-compatible selectors
42
+ */
43
+ private convertToPlaywrightSelector;
44
+ /**
45
+ * Try to find form inputs using intelligent strategies
46
+ */
47
+ private tryFormInputStrategies;
48
+ /**
49
+ * Find element using multiple strategies
50
+ */
51
+ private findElement;
52
+ /**
53
+ * Validate mission completion
54
+ */
55
+ private validateMission;
56
+ /**
57
+ * Get simplified DOM for AI analysis
58
+ */
59
+ private getSimplifiedDOM;
60
+ /**
61
+ * Get page content formatted for AI
62
+ */
63
+ private getPageContentForAI;
64
+ /**
65
+ * Generate AI notes about the test execution
66
+ */
67
+ private generateAINotes;
68
+ /**
69
+ * Take screenshot
70
+ */
71
+ private takeScreenshot;
72
+ /**
73
+ * Launch browser
74
+ */
75
+ private launchBrowser;
76
+ /**
77
+ * Close browser
78
+ */
79
+ private closeBrowser;
80
+ /**
81
+ * Start interactive recording mode
82
+ */
83
+ startRecording(name: string, startUrl: string): Promise<InteractiveTestSession>;
84
+ /**
85
+ * Start watch mode
86
+ */
87
+ startWatchMode(missions: string[], watchPaths: string[]): Promise<void>;
88
+ }
89
+ //# sourceMappingURL=browser-test-runner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browser-test-runner.d.ts","sourceRoot":"","sources":["../../src/mcp/browser-test-runner.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,EACL,WAAW,EACX,mBAAmB,EAGnB,aAAa,EACb,sBAAsB,EAGvB,MAAM,uBAAuB,CAAC;AAM/B,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,OAAO,CAAC,CAAU;IAC1B,OAAO,CAAC,OAAO,CAAC,CAAiB;IACjC,OAAO,CAAC,QAAQ,CAAW;IAC3B,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,cAAc,CAAS;gBAEnB,WAAW,EAAE,MAAM;IAc/B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAa1B;;OAEG;IACG,OAAO,CACX,OAAO,EAAE,WAAW,EACpB,MAAM,GAAE,aAAkC,GACzC,OAAO,CAAC,mBAAmB,CAAC;IAuJ/B;;OAEG;YACW,aAAa;IA0H3B;;OAEG;YACW,KAAK;IAwEnB;;OAEG;IACH,OAAO,CAAC,eAAe;IAqCvB;;OAEG;YACW,aAAa;IAuH3B;;OAEG;IACH,OAAO,CAAC,2BAA2B;IA8BnC;;OAEG;YACW,sBAAsB;IA8EpC;;OAEG;YACW,WAAW;IAoCzB;;OAEG;YACW,eAAe;IAsE7B;;OAEG;YACW,gBAAgB;IA2B9B;;OAEG;YACW,mBAAmB;IAUjC;;OAEG;YACW,eAAe;IAY7B;;OAEG;YACW,cAAc;IAe5B;;OAEG;YACW,aAAa;IAc3B;;OAEG;YACW,YAAY;IAS1B;;OAEG;IACG,cAAc,CAClB,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,sBAAsB,CAAC;IAMlC;;OAEG;IACG,cAAc,CAClB,QAAQ,EAAE,MAAM,EAAE,EAClB,UAAU,EAAE,MAAM,EAAE,GACnB,OAAO,CAAC,IAAI,CAAC;CAKjB"}