mycontext-cli 4.2.10 → 4.2.12

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 (139) hide show
  1. package/README.md +13 -4
  2. package/dist/README.md +13 -4
  3. package/dist/agents/implementations/ArchitectAgent.js.map +1 -1
  4. package/dist/agents/implementations/BuildStrategyAgent.js.map +1 -1
  5. package/dist/agents/implementations/CodeGenSubAgent.js.map +1 -1
  6. package/dist/agents/implementations/DemoRecorderAgent.d.ts +73 -0
  7. package/dist/agents/implementations/DemoRecorderAgent.d.ts.map +1 -0
  8. package/dist/agents/implementations/DemoRecorderAgent.js +485 -0
  9. package/dist/agents/implementations/DemoRecorderAgent.js.map +1 -0
  10. package/dist/agents/implementations/DesignPipelineAgent.d.ts +4 -0
  11. package/dist/agents/implementations/DesignPipelineAgent.d.ts.map +1 -1
  12. package/dist/agents/implementations/DesignPipelineAgent.js +82 -10
  13. package/dist/agents/implementations/DesignPipelineAgent.js.map +1 -1
  14. package/dist/agents/implementations/DocsSubAgent.js.map +1 -1
  15. package/dist/agents/implementations/FeaturePlannerAgent.d.ts +10 -0
  16. package/dist/agents/implementations/FeaturePlannerAgent.d.ts.map +1 -0
  17. package/dist/agents/implementations/FeaturePlannerAgent.js +35 -0
  18. package/dist/agents/implementations/FeaturePlannerAgent.js.map +1 -0
  19. package/dist/agents/implementations/QASubAgent.js.map +1 -1
  20. package/dist/agents/implementations/SecurityAgent.js.map +1 -1
  21. package/dist/agents/implementations/VOScriptExtractorAgent.d.ts +84 -0
  22. package/dist/agents/implementations/VOScriptExtractorAgent.d.ts.map +1 -0
  23. package/dist/agents/implementations/VOScriptExtractorAgent.js +414 -0
  24. package/dist/agents/implementations/VOScriptExtractorAgent.js.map +1 -0
  25. package/dist/agents/implementations/VisionNavigatorAgent.d.ts +52 -0
  26. package/dist/agents/implementations/VisionNavigatorAgent.d.ts.map +1 -0
  27. package/dist/agents/implementations/VisionNavigatorAgent.js +313 -0
  28. package/dist/agents/implementations/VisionNavigatorAgent.js.map +1 -0
  29. package/dist/agents/implementations/VisionTestCoordinator.d.ts +51 -0
  30. package/dist/agents/implementations/VisionTestCoordinator.d.ts.map +1 -0
  31. package/dist/agents/implementations/VisionTestCoordinator.js +348 -0
  32. package/dist/agents/implementations/VisionTestCoordinator.js.map +1 -0
  33. package/dist/agents/implementations/VisualValidatorAgent.d.ts +83 -0
  34. package/dist/agents/implementations/VisualValidatorAgent.d.ts.map +1 -0
  35. package/dist/agents/implementations/VisualValidatorAgent.js +472 -0
  36. package/dist/agents/implementations/VisualValidatorAgent.js.map +1 -0
  37. package/dist/agents/orchestrator/SubAgentOrchestrator.js.map +1 -1
  38. package/dist/cli.js +3 -0
  39. package/dist/cli.js.map +1 -1
  40. package/dist/clients/ClaudeSDKClient.d.ts +4 -0
  41. package/dist/clients/ClaudeSDKClient.d.ts.map +1 -1
  42. package/dist/clients/ClaudeSDKClient.js +8 -0
  43. package/dist/clients/ClaudeSDKClient.js.map +1 -1
  44. package/dist/clients/MyContextAIClient.d.ts +4 -0
  45. package/dist/clients/MyContextAIClient.d.ts.map +1 -1
  46. package/dist/clients/MyContextAIClient.js +69 -0
  47. package/dist/clients/MyContextAIClient.js.map +1 -1
  48. package/dist/clients/ProviderChain.d.ts +1 -0
  49. package/dist/clients/ProviderChain.d.ts.map +1 -1
  50. package/dist/clients/ProviderChain.js +3 -0
  51. package/dist/clients/ProviderChain.js.map +1 -1
  52. package/dist/clients/XAIClient.d.ts +4 -0
  53. package/dist/clients/XAIClient.d.ts.map +1 -1
  54. package/dist/clients/XAIClient.js +8 -0
  55. package/dist/clients/XAIClient.js.map +1 -1
  56. package/dist/commands/init.d.ts.map +1 -1
  57. package/dist/commands/init.js +110 -204
  58. package/dist/commands/init.js.map +1 -1
  59. package/dist/commands/plan-feature.d.ts +3 -0
  60. package/dist/commands/plan-feature.d.ts.map +1 -0
  61. package/dist/commands/plan-feature.js +57 -0
  62. package/dist/commands/plan-feature.js.map +1 -0
  63. package/dist/commands/sanitize.d.ts.map +1 -1
  64. package/dist/commands/sanitize.js +95 -7
  65. package/dist/commands/sanitize.js.map +1 -1
  66. package/dist/commands/vision-test.d.ts +67 -0
  67. package/dist/commands/vision-test.d.ts.map +1 -0
  68. package/dist/commands/vision-test.js +347 -0
  69. package/dist/commands/vision-test.js.map +1 -0
  70. package/dist/core/ai/AICore.d.ts +13 -0
  71. package/dist/core/ai/AICore.d.ts.map +1 -1
  72. package/dist/core/ai/AICore.js +65 -0
  73. package/dist/core/ai/AICore.js.map +1 -1
  74. package/dist/doctor/DoctorEngine.d.ts.map +1 -1
  75. package/dist/doctor/DoctorEngine.js +4 -1
  76. package/dist/doctor/DoctorEngine.js.map +1 -1
  77. package/dist/doctor/rules/index.d.ts +2 -1
  78. package/dist/doctor/rules/index.d.ts.map +1 -1
  79. package/dist/doctor/rules/index.js +4 -1
  80. package/dist/doctor/rules/index.js.map +1 -1
  81. package/dist/doctor/rules/node-rules.d.ts.map +1 -1
  82. package/dist/doctor/rules/node-rules.js +41 -0
  83. package/dist/doctor/rules/node-rules.js.map +1 -1
  84. package/dist/doctor/rules/security-rules.d.ts +6 -0
  85. package/dist/doctor/rules/security-rules.d.ts.map +1 -0
  86. package/dist/doctor/rules/security-rules.js +66 -0
  87. package/dist/doctor/rules/security-rules.js.map +1 -0
  88. package/dist/doctor/types.d.ts +1 -1
  89. package/dist/doctor/types.d.ts.map +1 -1
  90. package/dist/interfaces/AIClient.d.ts +1 -0
  91. package/dist/interfaces/AIClient.d.ts.map +1 -1
  92. package/dist/interfaces/AIClient.js.map +1 -1
  93. package/dist/mcp/vision-test-runner.d.ts +57 -0
  94. package/dist/mcp/vision-test-runner.d.ts.map +1 -0
  95. package/dist/mcp/vision-test-runner.js +337 -0
  96. package/dist/mcp/vision-test-runner.js.map +1 -0
  97. package/dist/mcp/vision-testing-server.d.ts +38 -0
  98. package/dist/mcp/vision-testing-server.d.ts.map +1 -0
  99. package/dist/mcp/vision-testing-server.js +637 -0
  100. package/dist/mcp/vision-testing-server.js.map +1 -0
  101. package/dist/package.json +1 -1
  102. package/dist/services/gemini-vision.d.ts +3 -11
  103. package/dist/services/gemini-vision.d.ts.map +1 -1
  104. package/dist/services/gemini-vision.js +13 -132
  105. package/dist/services/gemini-vision.js.map +1 -1
  106. package/dist/services/llmClarifier.d.ts +9 -0
  107. package/dist/services/llmClarifier.d.ts.map +1 -0
  108. package/dist/services/llmClarifier.js +22 -0
  109. package/dist/services/llmClarifier.js.map +1 -0
  110. package/dist/services/vision-element-finder.d.ts +64 -0
  111. package/dist/services/vision-element-finder.d.ts.map +1 -0
  112. package/dist/services/vision-element-finder.js +446 -0
  113. package/dist/services/vision-element-finder.js.map +1 -0
  114. package/dist/types/flow-testing.d.ts +1 -1
  115. package/dist/types/flow-testing.d.ts.map +1 -1
  116. package/dist/types/vision-testing.d.ts +382 -0
  117. package/dist/types/vision-testing.d.ts.map +1 -0
  118. package/dist/types/vision-testing.js +9 -0
  119. package/dist/types/vision-testing.js.map +1 -0
  120. package/dist/utils/claudeAgentClient.d.ts +4 -0
  121. package/dist/utils/claudeAgentClient.d.ts.map +1 -1
  122. package/dist/utils/claudeAgentClient.js +8 -0
  123. package/dist/utils/claudeAgentClient.js.map +1 -1
  124. package/dist/utils/geminiClient.d.ts +41 -6
  125. package/dist/utils/geminiClient.d.ts.map +1 -1
  126. package/dist/utils/geminiClient.js +124 -18
  127. package/dist/utils/geminiClient.js.map +1 -1
  128. package/dist/utils/githubModelsClient.d.ts +19 -6
  129. package/dist/utils/githubModelsClient.d.ts.map +1 -1
  130. package/dist/utils/githubModelsClient.js +94 -7
  131. package/dist/utils/githubModelsClient.js.map +1 -1
  132. package/dist/utils/openRouterClient.d.ts +12 -3
  133. package/dist/utils/openRouterClient.d.ts.map +1 -1
  134. package/dist/utils/openRouterClient.js +91 -2
  135. package/dist/utils/openRouterClient.js.map +1 -1
  136. package/dist/utils/unifiedDesignContextLoader.d.ts.map +1 -1
  137. package/dist/utils/unifiedDesignContextLoader.js +15 -0
  138. package/dist/utils/unifiedDesignContextLoader.js.map +1 -1
  139. package/package.json +1 -1
@@ -0,0 +1,348 @@
1
+ "use strict";
2
+ /**
3
+ * Vision Test Coordinator
4
+ *
5
+ * Orchestrates all vision-based testing agents using the Living Brain (context.json) as
6
+ * the communication blackboard. Coordinates navigation, validation, demo recording, and
7
+ * script generation in a cohesive workflow.
8
+ *
9
+ * Uses the SubAgentOrchestrator pattern for robust agent management.
10
+ */
11
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
12
+ if (k2 === undefined) k2 = k;
13
+ var desc = Object.getOwnPropertyDescriptor(m, k);
14
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
15
+ desc = { enumerable: true, get: function() { return m[k]; } };
16
+ }
17
+ Object.defineProperty(o, k2, desc);
18
+ }) : (function(o, m, k, k2) {
19
+ if (k2 === undefined) k2 = k;
20
+ o[k2] = m[k];
21
+ }));
22
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
23
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
24
+ }) : function(o, v) {
25
+ o["default"] = v;
26
+ });
27
+ var __importStar = (this && this.__importStar) || (function () {
28
+ var ownKeys = function(o) {
29
+ ownKeys = Object.getOwnPropertyNames || function (o) {
30
+ var ar = [];
31
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
32
+ return ar;
33
+ };
34
+ return ownKeys(o);
35
+ };
36
+ return function (mod) {
37
+ if (mod && mod.__esModule) return mod;
38
+ var result = {};
39
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
40
+ __setModuleDefault(result, mod);
41
+ return result;
42
+ };
43
+ })();
44
+ var __importDefault = (this && this.__importDefault) || function (mod) {
45
+ return (mod && mod.__esModule) ? mod : { "default": mod };
46
+ };
47
+ Object.defineProperty(exports, "__esModule", { value: true });
48
+ exports.VisionTestCoordinator = void 0;
49
+ const SubAgentOrchestrator_1 = require("../orchestrator/SubAgentOrchestrator");
50
+ const VisionNavigatorAgent_1 = require("./VisionNavigatorAgent");
51
+ const VisualValidatorAgent_1 = require("./VisualValidatorAgent");
52
+ const DemoRecorderAgent_1 = require("./DemoRecorderAgent");
53
+ const VOScriptExtractorAgent_1 = require("./VOScriptExtractorAgent");
54
+ const ContextService_1 = require("../../services/ContextService");
55
+ const AICore_1 = require("../../core/ai/AICore");
56
+ const uuid_1 = require("uuid");
57
+ const chalk_1 = __importDefault(require("chalk"));
58
+ const path = __importStar(require("path"));
59
+ class VisionTestCoordinator {
60
+ constructor() {
61
+ this.name = "VisionTestCoordinator";
62
+ this.description = "Master coordinator for vision-based testing workflows";
63
+ this.personality = `You are a master coordinator overseeing an autonomous testing team.
64
+ You delegate tasks to specialized agents, monitor their progress via the Living Brain, and
65
+ ensure all pieces come together into a cohesive test execution. You're the conductor of the
66
+ vision testing orchestra.`;
67
+ this.llmProvider = "multi"; // Uses multiple providers through agents
68
+ this.expertise = [
69
+ "Test orchestration",
70
+ "Agent coordination",
71
+ "Workflow management",
72
+ "Result aggregation",
73
+ "Living Brain communication",
74
+ ];
75
+ // Initialize orchestrator
76
+ this.orchestrator = new SubAgentOrchestrator_1.SubAgentOrchestrator();
77
+ // Initialize specialized agents
78
+ this.navigatorAgent = new VisionNavigatorAgent_1.VisionNavigatorAgent();
79
+ this.validatorAgent = new VisualValidatorAgent_1.VisualValidatorAgent();
80
+ this.recorderAgent = new DemoRecorderAgent_1.DemoRecorderAgent();
81
+ this.voExtractorAgent = new VOScriptExtractorAgent_1.VOScriptExtractorAgent();
82
+ // Register agents with orchestrator
83
+ this.orchestrator.registerAgent(this.navigatorAgent);
84
+ this.orchestrator.registerAgent(this.validatorAgent);
85
+ this.orchestrator.registerAgent(this.recorderAgent);
86
+ this.orchestrator.registerAgent(this.voExtractorAgent);
87
+ }
88
+ async run(input) {
89
+ const { page, browserContext, mission, projectPath } = input;
90
+ // Initialize context service
91
+ this.contextService = new ContextService_1.ContextService(projectPath);
92
+ await this.contextService.initialize();
93
+ const executionId = (0, uuid_1.v4)();
94
+ const startTime = Date.now();
95
+ console.log(chalk_1.default.bold.blue(`\n${"=".repeat(60)}`));
96
+ console.log(chalk_1.default.bold.blue(`🎯 VISION TEST COORDINATOR`));
97
+ console.log(chalk_1.default.bold.blue(`${"=".repeat(60)}\n`));
98
+ console.log(chalk_1.default.white(`Mission: ${mission.name}`));
99
+ console.log(chalk_1.default.gray(`ID: ${executionId}`));
100
+ console.log(chalk_1.default.gray(`Record Demo: ${mission.recordDemo || false}\n`));
101
+ // Write mission start to Living Brain
102
+ await this.writeLivingBrain({
103
+ timestamp: new Date().toISOString(),
104
+ agentName: this.name,
105
+ updateType: "test-start",
106
+ data: {
107
+ executionId,
108
+ missionId: mission.id,
109
+ missionName: mission.name,
110
+ recordDemo: mission.recordDemo,
111
+ },
112
+ metadata: {
113
+ testId: mission.id,
114
+ executionId,
115
+ },
116
+ });
117
+ try {
118
+ // PHASE 1: Navigation
119
+ console.log(chalk_1.default.bold.cyan(`\n━━━ PHASE 1: NAVIGATION ━━━`));
120
+ const navigationResult = await this.orchestrator.executeAgent(this.navigatorAgent.name, {
121
+ page,
122
+ mission,
123
+ projectPath,
124
+ maxSteps: 20,
125
+ });
126
+ const steps = navigationResult.steps;
127
+ console.log(chalk_1.default.green(`\n✓ Navigation complete: ${steps.length} steps executed`));
128
+ // PHASE 2: Validation (if validation rules exist)
129
+ console.log(chalk_1.default.bold.cyan(`\n━━━ PHASE 2: VALIDATION ━━━`));
130
+ let validationResults = [];
131
+ if (mission.validationRules &&
132
+ mission.validationRules.length > 0) {
133
+ // Get final screenshot
134
+ const finalStep = steps[steps.length - 1];
135
+ const currentScreenshot = finalStep?.screenshot || "";
136
+ const validationOutput = await this.orchestrator.executeAgent(this.validatorAgent.name, {
137
+ currentScreenshot,
138
+ baselineScreenshot: mission.baselineScreenshots?.[0],
139
+ validationRules: mission.validationRules,
140
+ projectPath,
141
+ page,
142
+ });
143
+ validationResults = validationOutput.results;
144
+ console.log(chalk_1.default.green(`\n✓ Validation complete: ${validationOutput.summary.passed}/${validationOutput.summary.totalChecks} passed`));
145
+ }
146
+ else {
147
+ console.log(chalk_1.default.gray(" No validation rules defined, skipping..."));
148
+ }
149
+ // PHASE 3: Demo Recording (if requested)
150
+ let demoArtifacts;
151
+ if (mission.recordDemo && mission.demoConfig) {
152
+ console.log(chalk_1.default.bold.cyan(`\n━━━ PHASE 3: DEMO RECORDING ━━━`));
153
+ const recorderOutput = await this.orchestrator.executeAgent(this.recorderAgent.name, {
154
+ browserContext,
155
+ steps,
156
+ config: mission.demoConfig,
157
+ projectPath,
158
+ missionName: mission.name,
159
+ missionDescription: mission.description,
160
+ });
161
+ demoArtifacts = recorderOutput.artifacts;
162
+ if (demoArtifacts) {
163
+ console.log(chalk_1.default.green(`\n✓ Demo artifacts generated in ${Object.keys(demoArtifacts.formats).length} format(s)`));
164
+ }
165
+ // PHASE 4: VO Script Generation (if requested)
166
+ if (mission.demoConfig.includeVoiceOver) {
167
+ console.log(chalk_1.default.bold.cyan(`\n━━━ PHASE 4: VO SCRIPT GENERATION ━━━`));
168
+ const voScriptPath = path.join(projectPath, ".mycontext", "demos", `${mission.name}-${Date.now()}`, "voiceover-script.json");
169
+ const voOutput = await this.orchestrator.executeAgent(this.voExtractorAgent.name, {
170
+ steps,
171
+ missionName: mission.name,
172
+ missionDescription: mission.description,
173
+ narrationStyle: mission.demoConfig.narrationStyle,
174
+ projectPath,
175
+ outputPath: voScriptPath,
176
+ generateAudio: mission.demoConfig.generateAudio,
177
+ ttsConfig: mission.demoConfig.ttsConfig,
178
+ });
179
+ if (demoArtifacts && voOutput.success) {
180
+ demoArtifacts.voiceOver = {
181
+ script: voOutput.script,
182
+ audio: voOutput.audioPath
183
+ ? {
184
+ path: voOutput.audioPath,
185
+ duration: voOutput.script.totalDuration,
186
+ format: "mp3",
187
+ }
188
+ : undefined,
189
+ };
190
+ }
191
+ console.log(chalk_1.default.green(`\n✓ Voice-over script generated with ${voOutput.script.segments.length} segments`));
192
+ }
193
+ }
194
+ // Calculate final result
195
+ const endTime = Date.now();
196
+ const duration = endTime - startTime;
197
+ const successfulSteps = steps.filter((s) => s.success).length;
198
+ const passedValidations = validationResults.filter((v) => v.passed).length;
199
+ const allStepsSuccessful = successfulSteps === steps.length;
200
+ const allValidationsPassed = validationResults.length === 0 ||
201
+ passedValidations === validationResults.length;
202
+ const finalStatus = allStepsSuccessful && allValidationsPassed ? "passed" : "failed";
203
+ // Get final URL
204
+ const finalUrl = page.url();
205
+ // Build test execution result
206
+ const testResult = {
207
+ missionId: mission.id,
208
+ executionId,
209
+ status: finalStatus,
210
+ startedAt: new Date(startTime).toISOString(),
211
+ completedAt: new Date(endTime).toISOString(),
212
+ duration,
213
+ steps,
214
+ validationResults,
215
+ finalState: {
216
+ url: finalUrl,
217
+ screenshot: steps[steps.length - 1]?.screenshot,
218
+ },
219
+ visualSummary: {
220
+ totalScreenshots: steps.filter((s) => s.screenshot).length,
221
+ visualRegressionsDetected: validationResults.filter((v) => !v.passed && v.rule.type?.includes("visual")).length,
222
+ colorSchemeMatches: validationResults.every((v) => v.passed || v.rule.type !== "color-scheme-match"),
223
+ layoutMatches: validationResults.every((v) => v.passed || v.rule.type !== "layout-match"),
224
+ },
225
+ demoArtifacts,
226
+ };
227
+ // Write completion to Living Brain
228
+ await this.writeLivingBrain({
229
+ timestamp: new Date().toISOString(),
230
+ agentName: this.name,
231
+ updateType: "test-complete",
232
+ data: {
233
+ executionId,
234
+ status: finalStatus,
235
+ duration,
236
+ totalSteps: steps.length,
237
+ successfulSteps,
238
+ validationResults: validationResults.length,
239
+ passedValidations,
240
+ demoGenerated: !!demoArtifacts,
241
+ },
242
+ metadata: {
243
+ testId: mission.id,
244
+ executionId,
245
+ },
246
+ });
247
+ // Print final summary
248
+ console.log(chalk_1.default.bold.blue(`\n${"=".repeat(60)}`));
249
+ console.log(chalk_1.default.bold[finalStatus === "passed" ? "green" : "red"](`${finalStatus === "passed" ? "✅ TEST PASSED" : "❌ TEST FAILED"}`));
250
+ console.log(chalk_1.default.bold.blue(`${"=".repeat(60)}\n`));
251
+ console.log(chalk_1.default.white(`Duration: ${(duration / 1000).toFixed(1)}s`));
252
+ console.log(chalk_1.default.white(`Steps: ${successfulSteps}/${steps.length} successful`));
253
+ if (validationResults.length > 0) {
254
+ console.log(chalk_1.default.white(`Validations: ${passedValidations}/${validationResults.length} passed`));
255
+ }
256
+ if (demoArtifacts) {
257
+ console.log(chalk_1.default.white(`Demo formats: ${Object.keys(demoArtifacts.formats).join(", ")}`));
258
+ }
259
+ console.log("");
260
+ return {
261
+ result: testResult,
262
+ success: finalStatus === "passed",
263
+ };
264
+ }
265
+ catch (error) {
266
+ const endTime = Date.now();
267
+ const duration = endTime - startTime;
268
+ console.error(chalk_1.default.red(`\n❌ Test execution error: ${error.message}`));
269
+ // Write error to Living Brain
270
+ await this.writeLivingBrain({
271
+ timestamp: new Date().toISOString(),
272
+ agentName: this.name,
273
+ updateType: "error",
274
+ data: {
275
+ executionId,
276
+ error: error.message,
277
+ stack: error.stack,
278
+ duration,
279
+ },
280
+ metadata: {
281
+ testId: mission.id,
282
+ executionId,
283
+ },
284
+ });
285
+ // Return error result
286
+ const errorResult = {
287
+ missionId: mission.id,
288
+ executionId,
289
+ status: "error",
290
+ startedAt: new Date(startTime).toISOString(),
291
+ completedAt: new Date(endTime).toISOString(),
292
+ duration,
293
+ steps: [],
294
+ validationResults: [],
295
+ finalState: {
296
+ url: page.url(),
297
+ },
298
+ error: {
299
+ message: error.message,
300
+ stack: error.stack,
301
+ },
302
+ };
303
+ return {
304
+ result: errorResult,
305
+ success: false,
306
+ };
307
+ }
308
+ }
309
+ /**
310
+ * Write update to Living Brain
311
+ */
312
+ async writeLivingBrain(update) {
313
+ try {
314
+ // Read current context using AICore
315
+ const aiCore = AICore_1.AICore.getInstance();
316
+ const currentContext = (await aiCore.getLivingContext()) || {};
317
+ if (!currentContext.testExecutionHistory) {
318
+ currentContext.testExecutionHistory = [];
319
+ }
320
+ currentContext.testExecutionHistory.push(update);
321
+ // Keep only last 100 updates
322
+ if (currentContext.testExecutionHistory.length > 100) {
323
+ currentContext.testExecutionHistory = currentContext.testExecutionHistory.slice(-100);
324
+ }
325
+ // Save back to context.json using AICore
326
+ await aiCore.saveLivingContext(currentContext);
327
+ }
328
+ catch (error) {
329
+ console.warn("Failed to write to Living Brain:", error);
330
+ }
331
+ }
332
+ async validate(input) {
333
+ return !!(input.page &&
334
+ input.browserContext &&
335
+ input.mission &&
336
+ input.projectPath);
337
+ }
338
+ async getStatus() {
339
+ return {
340
+ name: this.name,
341
+ status: "idle",
342
+ errorCount: 0,
343
+ successCount: 0,
344
+ };
345
+ }
346
+ }
347
+ exports.VisionTestCoordinator = VisionTestCoordinator;
348
+ //# sourceMappingURL=VisionTestCoordinator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VisionTestCoordinator.js","sourceRoot":"","sources":["../../../src/agents/implementations/VisionTestCoordinator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,83 @@
1
+ /**
2
+ * Visual Validator Agent
3
+ *
4
+ * Performs visual regression testing by comparing screenshots.
5
+ * Detects UI changes, color scheme drift, layout shifts, and more.
6
+ *
7
+ * Communicates via Living Brain (context.json).
8
+ */
9
+ import { Page } from "playwright";
10
+ import { SubAgent } from "../interfaces/SubAgent";
11
+ import { VisualValidationResult, VisionValidationRule, VisualDiffResult } from "../../types/vision-testing";
12
+ export interface VisualValidatorInput {
13
+ currentScreenshot: string;
14
+ baselineScreenshot?: string;
15
+ validationRules: VisionValidationRule[];
16
+ projectPath: string;
17
+ page?: Page;
18
+ }
19
+ export interface VisualValidatorOutput {
20
+ results: VisualValidationResult[];
21
+ passed: boolean;
22
+ visualDiff?: VisualDiffResult;
23
+ summary: {
24
+ totalChecks: number;
25
+ passed: number;
26
+ failed: number;
27
+ warnings: number;
28
+ };
29
+ }
30
+ export declare class VisualValidatorAgent implements SubAgent<VisualValidatorInput, VisualValidatorOutput> {
31
+ name: string;
32
+ description: string;
33
+ personality: string;
34
+ llmProvider: string;
35
+ expertise: string[];
36
+ private visionService;
37
+ private contextService?;
38
+ constructor();
39
+ run(input: VisualValidatorInput): Promise<VisualValidatorOutput>;
40
+ /**
41
+ * Validate visual match between current and baseline screenshots
42
+ */
43
+ private validateVisualMatch;
44
+ /**
45
+ * Validate color scheme matches expectations
46
+ */
47
+ private validateColorScheme;
48
+ /**
49
+ * Validate layout structure
50
+ */
51
+ private validateLayout;
52
+ /**
53
+ * Validate text readability
54
+ */
55
+ private validateTextReadability;
56
+ /**
57
+ * Validate no visual regression
58
+ */
59
+ private validateNoRegression;
60
+ /**
61
+ * Validate DOM-based rules (fallback for non-visual checks)
62
+ */
63
+ private validateDOMRule;
64
+ /**
65
+ * Compare two screenshots and detect differences
66
+ * NOTE: This is a placeholder - in production would use pixelmatch or sharp
67
+ */
68
+ private compareScreenshots;
69
+ /**
70
+ * Write update to Living Brain
71
+ */
72
+ private writeLivingBrain;
73
+ validate(input: VisualValidatorInput): Promise<boolean>;
74
+ getStatus(): Promise<{
75
+ name: string;
76
+ status: "idle" | "running" | "completed" | "error";
77
+ lastRun?: Date;
78
+ executionTime?: number;
79
+ errorCount: number;
80
+ successCount: number;
81
+ }>;
82
+ }
83
+ //# sourceMappingURL=VisualValidatorAgent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VisualValidatorAgent.d.ts","sourceRoot":"","sources":["../../../src/agents/implementations/VisualValidatorAgent.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAClC,OAAO,EACL,QAAQ,EACT,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EACL,sBAAsB,EACtB,oBAAoB,EACpB,gBAAgB,EAGjB,MAAM,4BAA4B,CAAC;AAQpC,MAAM,WAAW,oBAAoB;IACnC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,eAAe,EAAE,oBAAoB,EAAE,CAAC;IACxC,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,IAAI,CAAC;CACb;AAED,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,sBAAsB,EAAE,CAAC;IAClC,MAAM,EAAE,OAAO,CAAC;IAChB,UAAU,CAAC,EAAE,gBAAgB,CAAC;IAC9B,OAAO,EAAE;QACP,WAAW,EAAE,MAAM,CAAC;QACpB,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;CACH;AAED,qBAAa,oBACX,YAAW,QAAQ,CAAC,oBAAoB,EAAE,qBAAqB,CAAC;IAEhE,IAAI,SAA0B;IAC9B,WAAW,SACoE;IAC/E,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,EAAE,CAAC;IAEpB,OAAO,CAAC,aAAa,CAAsB;IAC3C,OAAO,CAAC,cAAc,CAAC,CAAiB;;IAqBlC,GAAG,CAAC,KAAK,EAAE,oBAAoB,GAAG,OAAO,CAAC,qBAAqB,CAAC;IA8ItE;;OAEG;YACW,mBAAmB;IAuDjC;;OAEG;YACW,mBAAmB;IAwCjC;;OAEG;YACW,cAAc;IA2B5B;;OAEG;YACW,uBAAuB;IAoCrC;;OAEG;YACW,oBAAoB;IAYlC;;OAEG;YACW,eAAe;IAmF7B;;;OAGG;YACW,kBAAkB;IAsChC;;OAEG;YACW,gBAAgB;IA0BxB,QAAQ,CAAC,KAAK,EAAE,oBAAoB,GAAG,OAAO,CAAC,OAAO,CAAC;IAQvD,SAAS,IAAI,OAAO,CAAC;QACzB,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,WAAW,GAAG,OAAO,CAAC;QACnD,OAAO,CAAC,EAAE,IAAI,CAAC;QACf,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,UAAU,EAAE,MAAM,CAAC;QACnB,YAAY,EAAE,MAAM,CAAC;KACtB,CAAC;CAQH"}