agentic-qe 1.5.1 → 1.6.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/.claude/agents/.claude-flow/metrics/agent-metrics.json +1 -0
- package/.claude/agents/.claude-flow/metrics/performance.json +87 -0
- package/.claude/agents/.claude-flow/metrics/task-metrics.json +10 -0
- package/.claude/agents/qe-api-contract-validator.md +118 -0
- package/.claude/agents/qe-chaos-engineer.md +320 -5
- package/.claude/agents/qe-code-complexity.md +360 -0
- package/.claude/agents/qe-coverage-analyzer.md +112 -0
- package/.claude/agents/qe-deployment-readiness.md +322 -6
- package/.claude/agents/qe-flaky-test-hunter.md +115 -0
- package/.claude/agents/qe-fleet-commander.md +319 -6
- package/.claude/agents/qe-performance-tester.md +234 -0
- package/.claude/agents/qe-production-intelligence.md +114 -0
- package/.claude/agents/qe-quality-analyzer.md +126 -0
- package/.claude/agents/qe-quality-gate.md +119 -0
- package/.claude/agents/qe-regression-risk-analyzer.md +114 -0
- package/.claude/agents/qe-requirements-validator.md +114 -0
- package/.claude/agents/qe-security-scanner.md +118 -0
- package/.claude/agents/qe-test-data-architect.md +234 -0
- package/.claude/agents/qe-test-executor.md +115 -0
- package/.claude/agents/qe-test-generator.md +114 -0
- package/.claude/agents/qe-visual-tester.md +305 -6
- package/.claude/agents/subagents/qe-code-reviewer.md +0 -4
- package/.claude/agents/subagents/qe-data-generator.md +0 -16
- package/.claude/agents/subagents/qe-integration-tester.md +0 -17
- package/.claude/agents/subagents/qe-performance-validator.md +0 -16
- package/.claude/agents/subagents/qe-security-auditor.md +0 -16
- package/.claude/agents/subagents/qe-test-implementer.md +0 -17
- package/.claude/agents/subagents/qe-test-refactorer.md +0 -17
- package/.claude/agents/subagents/qe-test-writer.md +0 -19
- package/CHANGELOG.md +261 -0
- package/README.md +37 -5
- package/dist/adapters/MemoryStoreAdapter.d.ts +38 -0
- package/dist/adapters/MemoryStoreAdapter.d.ts.map +1 -1
- package/dist/adapters/MemoryStoreAdapter.js +22 -0
- package/dist/adapters/MemoryStoreAdapter.js.map +1 -1
- package/dist/agents/BaseAgent.d.ts.map +1 -1
- package/dist/agents/BaseAgent.js +13 -0
- package/dist/agents/BaseAgent.js.map +1 -1
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +32 -1
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/core/memory/AgentDBService.d.ts +33 -28
- package/dist/core/memory/AgentDBService.d.ts.map +1 -1
- package/dist/core/memory/AgentDBService.js +233 -290
- package/dist/core/memory/AgentDBService.js.map +1 -1
- package/dist/core/memory/EnhancedAgentDBService.d.ts.map +1 -1
- package/dist/core/memory/EnhancedAgentDBService.js +5 -3
- package/dist/core/memory/EnhancedAgentDBService.js.map +1 -1
- package/dist/core/memory/RealAgentDBAdapter.d.ts +9 -2
- package/dist/core/memory/RealAgentDBAdapter.d.ts.map +1 -1
- package/dist/core/memory/RealAgentDBAdapter.js +126 -100
- package/dist/core/memory/RealAgentDBAdapter.js.map +1 -1
- package/dist/core/memory/SwarmMemoryManager.d.ts +58 -0
- package/dist/core/memory/SwarmMemoryManager.d.ts.map +1 -1
- package/dist/core/memory/SwarmMemoryManager.js +176 -0
- package/dist/core/memory/SwarmMemoryManager.js.map +1 -1
- package/dist/core/memory/index.d.ts.map +1 -1
- package/dist/core/memory/index.js +2 -1
- package/dist/core/memory/index.js.map +1 -1
- package/dist/learning/LearningEngine.d.ts +14 -27
- package/dist/learning/LearningEngine.d.ts.map +1 -1
- package/dist/learning/LearningEngine.js +57 -119
- package/dist/learning/LearningEngine.js.map +1 -1
- package/dist/learning/index.d.ts +0 -1
- package/dist/learning/index.d.ts.map +1 -1
- package/dist/learning/index.js +0 -1
- package/dist/learning/index.js.map +1 -1
- package/dist/mcp/handlers/learning/learning-query.d.ts +34 -0
- package/dist/mcp/handlers/learning/learning-query.d.ts.map +1 -0
- package/dist/mcp/handlers/learning/learning-query.js +156 -0
- package/dist/mcp/handlers/learning/learning-query.js.map +1 -0
- package/dist/mcp/handlers/learning/learning-store-experience.d.ts +30 -0
- package/dist/mcp/handlers/learning/learning-store-experience.d.ts.map +1 -0
- package/dist/mcp/handlers/learning/learning-store-experience.js +86 -0
- package/dist/mcp/handlers/learning/learning-store-experience.js.map +1 -0
- package/dist/mcp/handlers/learning/learning-store-pattern.d.ts +31 -0
- package/dist/mcp/handlers/learning/learning-store-pattern.d.ts.map +1 -0
- package/dist/mcp/handlers/learning/learning-store-pattern.js +126 -0
- package/dist/mcp/handlers/learning/learning-store-pattern.js.map +1 -0
- package/dist/mcp/handlers/learning/learning-store-qvalue.d.ts +30 -0
- package/dist/mcp/handlers/learning/learning-store-qvalue.d.ts.map +1 -0
- package/dist/mcp/handlers/learning/learning-store-qvalue.js +100 -0
- package/dist/mcp/handlers/learning/learning-store-qvalue.js.map +1 -0
- package/dist/mcp/server.d.ts +11 -0
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +98 -1
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/services/LearningEventListener.d.ts +123 -0
- package/dist/mcp/services/LearningEventListener.d.ts.map +1 -0
- package/dist/mcp/services/LearningEventListener.js +322 -0
- package/dist/mcp/services/LearningEventListener.js.map +1 -0
- package/dist/mcp/tools.d.ts +4 -0
- package/dist/mcp/tools.d.ts.map +1 -1
- package/dist/mcp/tools.js +179 -0
- package/dist/mcp/tools.js.map +1 -1
- package/dist/types/memory-interfaces.d.ts +71 -0
- package/dist/types/memory-interfaces.d.ts.map +1 -1
- package/dist/utils/Calculator.d.ts +35 -0
- package/dist/utils/Calculator.d.ts.map +1 -0
- package/dist/utils/Calculator.js +50 -0
- package/dist/utils/Calculator.js.map +1 -0
- package/dist/utils/Logger.d.ts.map +1 -1
- package/dist/utils/Logger.js +4 -1
- package/dist/utils/Logger.js.map +1 -1
- package/package.json +7 -5
- package/.claude/agents/qe-api-contract-validator.md.backup +0 -1148
- package/.claude/agents/qe-api-contract-validator.md.backup-20251107-134747 +0 -1148
- package/.claude/agents/qe-api-contract-validator.md.backup-phase2-20251107-140039 +0 -1123
- package/.claude/agents/qe-chaos-engineer.md.backup +0 -808
- package/.claude/agents/qe-chaos-engineer.md.backup-20251107-134747 +0 -808
- package/.claude/agents/qe-chaos-engineer.md.backup-phase2-20251107-140039 +0 -787
- package/.claude/agents/qe-code-complexity.md.backup +0 -291
- package/.claude/agents/qe-code-complexity.md.backup-20251107-134747 +0 -291
- package/.claude/agents/qe-code-complexity.md.backup-phase2-20251107-140039 +0 -286
- package/.claude/agents/qe-coverage-analyzer.md.backup +0 -467
- package/.claude/agents/qe-coverage-analyzer.md.backup-20251107-134747 +0 -467
- package/.claude/agents/qe-coverage-analyzer.md.backup-phase2-20251107-140039 +0 -438
- package/.claude/agents/qe-deployment-readiness.md.backup +0 -1166
- package/.claude/agents/qe-deployment-readiness.md.backup-20251107-134747 +0 -1166
- package/.claude/agents/qe-deployment-readiness.md.backup-phase2-20251107-140039 +0 -1140
- package/.claude/agents/qe-flaky-test-hunter.md.backup +0 -1195
- package/.claude/agents/qe-flaky-test-hunter.md.backup-20251107-134747 +0 -1195
- package/.claude/agents/qe-flaky-test-hunter.md.backup-phase2-20251107-140039 +0 -1162
- package/.claude/agents/qe-fleet-commander.md.backup +0 -718
- package/.claude/agents/qe-fleet-commander.md.backup-20251107-134747 +0 -718
- package/.claude/agents/qe-fleet-commander.md.backup-phase2-20251107-140039 +0 -697
- package/.claude/agents/qe-performance-tester.md.backup +0 -428
- package/.claude/agents/qe-performance-tester.md.backup-20251107-134747 +0 -428
- package/.claude/agents/qe-performance-tester.md.backup-phase2-20251107-140039 +0 -372
- package/.claude/agents/qe-production-intelligence.md.backup +0 -1219
- package/.claude/agents/qe-production-intelligence.md.backup-20251107-134747 +0 -1219
- package/.claude/agents/qe-production-intelligence.md.backup-phase2-20251107-140039 +0 -1194
- package/.claude/agents/qe-quality-analyzer.md.backup +0 -425
- package/.claude/agents/qe-quality-analyzer.md.backup-20251107-134747 +0 -425
- package/.claude/agents/qe-quality-analyzer.md.backup-phase2-20251107-140039 +0 -394
- package/.claude/agents/qe-quality-gate.md.backup +0 -446
- package/.claude/agents/qe-quality-gate.md.backup-20251107-134747 +0 -446
- package/.claude/agents/qe-quality-gate.md.backup-phase2-20251107-140039 +0 -415
- package/.claude/agents/qe-regression-risk-analyzer.md.backup +0 -1009
- package/.claude/agents/qe-regression-risk-analyzer.md.backup-20251107-134747 +0 -1009
- package/.claude/agents/qe-regression-risk-analyzer.md.backup-phase2-20251107-140039 +0 -984
- package/.claude/agents/qe-requirements-validator.md.backup +0 -748
- package/.claude/agents/qe-requirements-validator.md.backup-20251107-134747 +0 -748
- package/.claude/agents/qe-requirements-validator.md.backup-phase2-20251107-140039 +0 -723
- package/.claude/agents/qe-security-scanner.md.backup +0 -634
- package/.claude/agents/qe-security-scanner.md.backup-20251107-134747 +0 -634
- package/.claude/agents/qe-security-scanner.md.backup-phase2-20251107-140039 +0 -573
- package/.claude/agents/qe-test-data-architect.md.backup +0 -1064
- package/.claude/agents/qe-test-data-architect.md.backup-20251107-134747 +0 -1064
- package/.claude/agents/qe-test-data-architect.md.backup-phase2-20251107-140039 +0 -1040
- package/.claude/agents/qe-test-executor.md.backup +0 -389
- package/.claude/agents/qe-test-executor.md.backup-20251107-134747 +0 -389
- package/.claude/agents/qe-test-executor.md.backup-phase2-20251107-140039 +0 -369
- package/.claude/agents/qe-test-generator.md.backup +0 -997
- package/.claude/agents/qe-test-generator.md.backup-20251107-134747 +0 -997
- package/.claude/agents/qe-visual-tester.md.backup +0 -777
- package/.claude/agents/qe-visual-tester.md.backup-20251107-134747 +0 -777
- package/.claude/agents/qe-visual-tester.md.backup-phase2-20251107-140039 +0 -756
|
@@ -165,6 +165,7 @@ This agent uses **AQE hooks (Agentic QE native hooks)** for coordination (zero e
|
|
|
165
165
|
|
|
166
166
|
**Automatic Lifecycle Hooks:**
|
|
167
167
|
```typescript
|
|
168
|
+
// Called automatically by BaseAgent
|
|
168
169
|
protected async onPreTask(data: { assignment: TaskAssignment }): Promise<void> {
|
|
169
170
|
// Retrieve baselines
|
|
170
171
|
const baselines = await this.memoryStore.retrieve(`aqe/visual/baselines/${this.version}`, {
|
|
@@ -176,9 +177,26 @@ protected async onPreTask(data: { assignment: TaskAssignment }): Promise<void> {
|
|
|
176
177
|
partition: 'configuration'
|
|
177
178
|
});
|
|
178
179
|
|
|
180
|
+
// Verify environment for visual testing
|
|
181
|
+
const verification = await this.hookManager.executePreTaskVerification({
|
|
182
|
+
task: 'visual-testing',
|
|
183
|
+
context: {
|
|
184
|
+
requiredVars: ['BASELINE_VERSION', 'BROWSER'],
|
|
185
|
+
minMemoryMB: 2048,
|
|
186
|
+
requiredKeys: ['aqe/visual/baselines', 'aqe/visual/test-config']
|
|
187
|
+
}
|
|
188
|
+
});
|
|
189
|
+
|
|
190
|
+
// Emit visual testing starting event
|
|
179
191
|
this.eventBus.emit('visual-tester:starting', {
|
|
180
192
|
agentId: this.agentId,
|
|
181
|
-
pagesCount: testConfig.pages.length
|
|
193
|
+
pagesCount: testConfig.pages.length,
|
|
194
|
+
browser: process.env.BROWSER || 'chromium'
|
|
195
|
+
});
|
|
196
|
+
|
|
197
|
+
this.logger.info('Visual testing starting', {
|
|
198
|
+
pagesCount: testConfig.pages.length,
|
|
199
|
+
verification: verification.passed
|
|
182
200
|
});
|
|
183
201
|
}
|
|
184
202
|
|
|
@@ -186,26 +204,85 @@ protected async onPostTask(data: { assignment: TaskAssignment; result: any }): P
|
|
|
186
204
|
// Store visual test results
|
|
187
205
|
await this.memoryStore.store(`aqe/visual/test-results/${data.result.testRunId}`, data.result, {
|
|
188
206
|
partition: 'visual_results',
|
|
189
|
-
ttl: 86400
|
|
207
|
+
ttl: 86400 // 24 hours
|
|
190
208
|
});
|
|
191
209
|
|
|
192
210
|
// Store detected regressions
|
|
193
211
|
if (data.result.regressions.length > 0) {
|
|
194
212
|
await this.memoryStore.store(`aqe/visual/regressions/${data.result.buildId}`, data.result.regressions, {
|
|
195
|
-
partition: 'regressions'
|
|
213
|
+
partition: 'regressions',
|
|
214
|
+
ttl: 604800 // 7 days
|
|
196
215
|
});
|
|
197
216
|
}
|
|
198
217
|
|
|
199
218
|
// Store accessibility reports
|
|
200
219
|
await this.memoryStore.store(`aqe/visual/accessibility/${data.result.page}`, data.result.a11yReport, {
|
|
201
|
-
partition: 'accessibility'
|
|
220
|
+
partition: 'accessibility',
|
|
221
|
+
ttl: 604800 // 7 days
|
|
222
|
+
});
|
|
223
|
+
|
|
224
|
+
// Store visual testing metrics
|
|
225
|
+
await this.memoryStore.store('aqe/visual/metrics', {
|
|
226
|
+
timestamp: Date.now(),
|
|
227
|
+
pagesTested: data.result.pagesTested,
|
|
228
|
+
regressionsFound: data.result.regressions.length,
|
|
229
|
+
a11yViolations: data.result.a11yReport?.violations?.length || 0
|
|
230
|
+
}, {
|
|
231
|
+
partition: 'metrics',
|
|
232
|
+
ttl: 604800 // 7 days
|
|
202
233
|
});
|
|
203
234
|
|
|
235
|
+
// Emit completion event with visual testing stats
|
|
204
236
|
this.eventBus.emit('visual-tester:completed', {
|
|
205
237
|
agentId: this.agentId,
|
|
206
238
|
pagesTested: data.result.pagesTested,
|
|
207
239
|
regressionsFound: data.result.regressions.length
|
|
208
240
|
});
|
|
241
|
+
|
|
242
|
+
// Validate visual testing results
|
|
243
|
+
const validation = await this.hookManager.executePostTaskValidation({
|
|
244
|
+
task: 'visual-testing',
|
|
245
|
+
result: {
|
|
246
|
+
output: data.result,
|
|
247
|
+
regressions: data.result.regressions,
|
|
248
|
+
metrics: {
|
|
249
|
+
pagesTested: data.result.pagesTested,
|
|
250
|
+
regressionsFound: data.result.regressions.length
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
});
|
|
254
|
+
|
|
255
|
+
this.logger.info('Visual testing completed', {
|
|
256
|
+
pagesTested: data.result.pagesTested,
|
|
257
|
+
regressionsFound: data.result.regressions.length,
|
|
258
|
+
validated: validation.passed
|
|
259
|
+
});
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
protected async onTaskError(data: { assignment: TaskAssignment; error: Error }): Promise<void> {
|
|
263
|
+
// Store error for fleet analysis
|
|
264
|
+
await this.memoryStore.store(`aqe/errors/${data.assignment.task.id}`, {
|
|
265
|
+
error: data.error.message,
|
|
266
|
+
timestamp: Date.now(),
|
|
267
|
+
agent: this.agentId,
|
|
268
|
+
taskType: 'visual-testing',
|
|
269
|
+
page: data.assignment.task.metadata.page
|
|
270
|
+
}, {
|
|
271
|
+
partition: 'errors',
|
|
272
|
+
ttl: 604800 // 7 days
|
|
273
|
+
});
|
|
274
|
+
|
|
275
|
+
// Emit error event for fleet coordination
|
|
276
|
+
this.eventBus.emit('visual-tester:error', {
|
|
277
|
+
agentId: this.agentId,
|
|
278
|
+
error: data.error.message,
|
|
279
|
+
taskId: data.assignment.task.id
|
|
280
|
+
});
|
|
281
|
+
|
|
282
|
+
this.logger.error('Visual testing failed', {
|
|
283
|
+
error: data.error.message,
|
|
284
|
+
stack: data.error.stack
|
|
285
|
+
});
|
|
209
286
|
}
|
|
210
287
|
```
|
|
211
288
|
|
|
@@ -227,13 +304,235 @@ this.registerEventHandler({
|
|
|
227
304
|
});
|
|
228
305
|
```
|
|
229
306
|
|
|
230
|
-
**Advanced Verification:**
|
|
307
|
+
**Advanced Verification (Optional):**
|
|
231
308
|
```typescript
|
|
309
|
+
// Use VerificationHookManager for comprehensive validation
|
|
232
310
|
const hookManager = new VerificationHookManager(this.memoryStore);
|
|
233
311
|
const verification = await hookManager.executePreTaskVerification({
|
|
234
312
|
task: 'visual-regression-test',
|
|
235
|
-
context: {
|
|
313
|
+
context: {
|
|
314
|
+
requiredVars: ['BASELINE_VERSION', 'BROWSER'],
|
|
315
|
+
minMemoryMB: 2048,
|
|
316
|
+
requiredKeys: ['aqe/visual/baselines', 'aqe/visual/test-config']
|
|
317
|
+
}
|
|
318
|
+
});
|
|
319
|
+
```
|
|
320
|
+
|
|
321
|
+
## Learning Protocol (Phase 6 - Option C Implementation)
|
|
322
|
+
|
|
323
|
+
**⚠️ MANDATORY**: When executed via Claude Code Task tool, you MUST call learning MCP tools to persist learning data.
|
|
324
|
+
|
|
325
|
+
### Required Learning Actions (Call AFTER Task Completion)
|
|
326
|
+
|
|
327
|
+
**1. Store Learning Experience:**
|
|
328
|
+
```typescript
|
|
329
|
+
// Call this MCP tool after completing your task
|
|
330
|
+
mcp__agentic_qe__learning_store_experience({
|
|
331
|
+
agentId: "qe-visual-tester",
|
|
332
|
+
taskType: "visual-testing",
|
|
333
|
+
reward: 0.95, // Your assessment of task success (0-1 scale)
|
|
334
|
+
outcome: {
|
|
335
|
+
// Your actual results (agent-specific)
|
|
336
|
+
regressionsDetected: 3,
|
|
337
|
+
accuracy: 0.98,
|
|
338
|
+
falsePositives: 1,
|
|
339
|
+
executionTime: 8500
|
|
340
|
+
},
|
|
341
|
+
metadata: {
|
|
342
|
+
// Additional context (agent-specific)
|
|
343
|
+
algorithm: "ai-visual-diff",
|
|
344
|
+
threshold: 0.95,
|
|
345
|
+
accessibilityChecked: true
|
|
346
|
+
}
|
|
347
|
+
})
|
|
348
|
+
```
|
|
349
|
+
|
|
350
|
+
**2. Store Q-Values for Your Strategy:**
|
|
351
|
+
```typescript
|
|
352
|
+
// Store Q-value for the strategy you used
|
|
353
|
+
mcp__agentic_qe__learning_store_qvalue({
|
|
354
|
+
agentId: "qe-visual-tester",
|
|
355
|
+
stateKey: "visual-testing-state",
|
|
356
|
+
actionKey: "ai-screenshot-comparison",
|
|
357
|
+
qValue: 0.85, // Expected value of this approach (based on results)
|
|
358
|
+
metadata: {
|
|
359
|
+
// Strategy details (agent-specific)
|
|
360
|
+
comparisonStrategy: "ai-visual-diff",
|
|
361
|
+
accuracy: 0.98,
|
|
362
|
+
sensitivity: 0.95
|
|
363
|
+
}
|
|
364
|
+
})
|
|
365
|
+
```
|
|
366
|
+
|
|
367
|
+
**3. Store Successful Patterns:**
|
|
368
|
+
```typescript
|
|
369
|
+
// If you discovered a useful pattern, store it
|
|
370
|
+
mcp__agentic_qe__learning_store_pattern({
|
|
371
|
+
agentId: "qe-visual-tester",
|
|
372
|
+
pattern: "AI-powered visual diff with 95% threshold detects regressions with <2% false positives",
|
|
373
|
+
confidence: 0.95, // How confident you are (0-1)
|
|
374
|
+
domain: "visual-regression",
|
|
375
|
+
metadata: {
|
|
376
|
+
// Pattern context (agent-specific)
|
|
377
|
+
visualPatterns: ["layout-shift", "color-change", "element-missing"],
|
|
378
|
+
detectionAccuracy: 0.98
|
|
379
|
+
}
|
|
380
|
+
})
|
|
381
|
+
```
|
|
382
|
+
|
|
383
|
+
### Learning Query (Use at Task Start)
|
|
384
|
+
|
|
385
|
+
**Before starting your task**, query for past learnings:
|
|
386
|
+
|
|
387
|
+
```typescript
|
|
388
|
+
// Query for successful experiences
|
|
389
|
+
const pastLearnings = await mcp__agentic_qe__learning_query({
|
|
390
|
+
agentId: "qe-visual-tester",
|
|
391
|
+
taskType: "visual-testing",
|
|
392
|
+
minReward: 0.8, // Only get successful experiences
|
|
393
|
+
queryType: "all",
|
|
394
|
+
limit: 10
|
|
236
395
|
});
|
|
396
|
+
|
|
397
|
+
// Use the insights to optimize your current approach
|
|
398
|
+
if (pastLearnings.success && pastLearnings.data) {
|
|
399
|
+
const { experiences, qValues, patterns } = pastLearnings.data;
|
|
400
|
+
|
|
401
|
+
// Find best-performing strategy
|
|
402
|
+
const bestStrategy = qValues
|
|
403
|
+
.filter(qv => qv.state_key === "visual-testing-state")
|
|
404
|
+
.sort((a, b) => b.q_value - a.q_value)[0];
|
|
405
|
+
|
|
406
|
+
console.log(`Using learned best strategy: ${bestStrategy.action_key} (Q-value: ${bestStrategy.q_value})`);
|
|
407
|
+
|
|
408
|
+
// Check for relevant patterns
|
|
409
|
+
const relevantPatterns = patterns
|
|
410
|
+
.filter(p => p.domain === "visual-regression")
|
|
411
|
+
.sort((a, b) => b.confidence * b.success_rate - a.confidence * a.success_rate);
|
|
412
|
+
|
|
413
|
+
if (relevantPatterns.length > 0) {
|
|
414
|
+
console.log(`Applying pattern: ${relevantPatterns[0].pattern}`);
|
|
415
|
+
}
|
|
416
|
+
}
|
|
417
|
+
```
|
|
418
|
+
|
|
419
|
+
### Success Criteria for Learning
|
|
420
|
+
|
|
421
|
+
**Reward Assessment (0-1 scale):**
|
|
422
|
+
- **1.0**: Perfect execution (100% regressions detected, 0 false positives, <10s)
|
|
423
|
+
- **0.9**: Excellent (99%+ detected, <1% false positives, <20s)
|
|
424
|
+
- **0.7**: Good (95%+ detected, <5% false positives, <40s)
|
|
425
|
+
- **0.5**: Acceptable (90%+ detected, completed successfully)
|
|
426
|
+
- **<0.5**: Needs improvement (Missed regressions, many false positives)
|
|
427
|
+
|
|
428
|
+
**When to Call Learning Tools:**
|
|
429
|
+
- ✅ **ALWAYS** after completing main task
|
|
430
|
+
- ✅ **ALWAYS** after detecting significant findings
|
|
431
|
+
- ✅ **ALWAYS** after generating recommendations
|
|
432
|
+
- ✅ When discovering new effective strategies
|
|
433
|
+
- ✅ When achieving exceptional performance metrics
|
|
434
|
+
|
|
435
|
+
## Learning Integration (Phase 6)
|
|
436
|
+
|
|
437
|
+
This agent integrates with the **Learning Engine** to continuously improve visual regression detection and reduce false positives.
|
|
438
|
+
|
|
439
|
+
### Learning Protocol
|
|
440
|
+
|
|
441
|
+
```typescript
|
|
442
|
+
import { LearningEngine } from '@/learning/LearningEngine';
|
|
443
|
+
|
|
444
|
+
// Initialize learning engine
|
|
445
|
+
const learningEngine = new LearningEngine({
|
|
446
|
+
agentId: 'qe-visual-tester',
|
|
447
|
+
taskType: 'visual-testing',
|
|
448
|
+
domain: 'visual-testing',
|
|
449
|
+
learningRate: 0.01,
|
|
450
|
+
epsilon: 0.1,
|
|
451
|
+
discountFactor: 0.95
|
|
452
|
+
});
|
|
453
|
+
|
|
454
|
+
await learningEngine.initialize();
|
|
455
|
+
|
|
456
|
+
// Record visual testing episode
|
|
457
|
+
await learningEngine.recordEpisode({
|
|
458
|
+
state: {
|
|
459
|
+
page: 'dashboard',
|
|
460
|
+
browser: 'chromium',
|
|
461
|
+
viewport: 'desktop',
|
|
462
|
+
baselineVersion: 'v2.0.0'
|
|
463
|
+
},
|
|
464
|
+
action: {
|
|
465
|
+
comparisonAlgorithm: 'ai-visual-diff',
|
|
466
|
+
threshold: 0.95,
|
|
467
|
+
ignoreRegions: ['timestamp', 'user-avatar']
|
|
468
|
+
},
|
|
469
|
+
reward: visualRegressionConfirmed ? 1.0 : (falsePositive ? -0.5 : 0.5),
|
|
470
|
+
nextState: {
|
|
471
|
+
regressionsDetected: 2,
|
|
472
|
+
falsePositives: 0,
|
|
473
|
+
missedRegressions: 0
|
|
474
|
+
}
|
|
475
|
+
});
|
|
476
|
+
|
|
477
|
+
// Learn from visual testing outcomes
|
|
478
|
+
await learningEngine.learn();
|
|
479
|
+
|
|
480
|
+
// Get learned visual comparison settings
|
|
481
|
+
const prediction = await learningEngine.predict({
|
|
482
|
+
page: 'dashboard',
|
|
483
|
+
browser: 'chromium',
|
|
484
|
+
viewport: 'desktop'
|
|
485
|
+
});
|
|
486
|
+
```
|
|
487
|
+
|
|
488
|
+
### Reward Function
|
|
489
|
+
|
|
490
|
+
```typescript
|
|
491
|
+
function calculateVisualTestingReward(outcome: VisualTestOutcome): number {
|
|
492
|
+
let reward = 0;
|
|
493
|
+
|
|
494
|
+
// Reward for detecting actual regressions
|
|
495
|
+
reward += outcome.truePositives * 1.0;
|
|
496
|
+
|
|
497
|
+
// Penalty for false positives (wasted effort)
|
|
498
|
+
reward -= outcome.falsePositives * 0.5;
|
|
499
|
+
|
|
500
|
+
// Large penalty for missing regressions (false negatives)
|
|
501
|
+
reward -= outcome.falseNegatives * 2.0;
|
|
502
|
+
|
|
503
|
+
// Reward for correct negative (no regression correctly identified)
|
|
504
|
+
reward += outcome.trueNegatives * 0.2;
|
|
505
|
+
|
|
506
|
+
// Bonus for high accuracy
|
|
507
|
+
const accuracy = (outcome.truePositives + outcome.trueNegatives) /
|
|
508
|
+
(outcome.truePositives + outcome.trueNegatives +
|
|
509
|
+
outcome.falsePositives + outcome.falseNegatives);
|
|
510
|
+
if (accuracy > 0.95) {
|
|
511
|
+
reward += 0.5;
|
|
512
|
+
}
|
|
513
|
+
|
|
514
|
+
return reward;
|
|
515
|
+
}
|
|
516
|
+
```
|
|
517
|
+
|
|
518
|
+
### Learning Metrics
|
|
519
|
+
|
|
520
|
+
Track learning progress:
|
|
521
|
+
- **Detection Accuracy**: Percentage of correctly identified regressions
|
|
522
|
+
- **False Positive Rate**: Incorrectly flagged differences
|
|
523
|
+
- **False Negative Rate**: Missed visual regressions
|
|
524
|
+
- **Algorithm Selection**: Optimal comparison algorithm for each page type
|
|
525
|
+
- **Threshold Optimization**: Learned thresholds per page/browser combination
|
|
526
|
+
|
|
527
|
+
```bash
|
|
528
|
+
# View learning metrics
|
|
529
|
+
aqe learn status --agent qe-visual-tester
|
|
530
|
+
|
|
531
|
+
# Export learning history
|
|
532
|
+
aqe learn export --agent qe-visual-tester --format json
|
|
533
|
+
|
|
534
|
+
# Analyze detection accuracy
|
|
535
|
+
aqe learn analyze --agent qe-visual-tester --metric accuracy
|
|
237
536
|
```
|
|
238
537
|
|
|
239
538
|
### Agent Collaboration
|
|
@@ -1,22 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: qe-data-generator
|
|
3
|
-
role: specialized-subagent
|
|
4
|
-
parent_agent: qe-test-data-architect
|
|
5
|
-
phase: GENERATION
|
|
6
|
-
color: green
|
|
7
|
-
priority: medium
|
|
8
3
|
description: "Generates realistic test data for various scenarios"
|
|
9
|
-
capabilities:
|
|
10
|
-
- data-generation
|
|
11
|
-
- faker-integration
|
|
12
|
-
- constraint-satisfaction
|
|
13
|
-
- edge-case-generation
|
|
14
|
-
coordination:
|
|
15
|
-
protocol: aqe-hooks
|
|
16
|
-
parent_delegation: true
|
|
17
|
-
metadata:
|
|
18
|
-
version: "1.0.0"
|
|
19
|
-
parent_agents: ["qe-test-data-architect"]
|
|
20
4
|
---
|
|
21
5
|
|
|
22
6
|
# Data Generator Subagent
|
|
@@ -1,23 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: qe-integration-tester
|
|
3
|
-
role: specialized-subagent
|
|
4
|
-
parent_agent: qe-test-executor
|
|
5
|
-
phase: INTEGRATION
|
|
6
|
-
color: cyan
|
|
7
|
-
priority: high
|
|
8
3
|
description: "Specialized subagent for integration testing - validates component interactions and system integration"
|
|
9
|
-
capabilities:
|
|
10
|
-
- integration-testing
|
|
11
|
-
- api-testing
|
|
12
|
-
- database-testing
|
|
13
|
-
- service-integration
|
|
14
|
-
coordination:
|
|
15
|
-
protocol: aqe-hooks
|
|
16
|
-
parent_delegation: true
|
|
17
|
-
metadata:
|
|
18
|
-
version: "1.0.0"
|
|
19
|
-
test_type: "integration"
|
|
20
|
-
parent_agents: ["qe-test-executor", "qe-api-contract-validator"]
|
|
21
4
|
---
|
|
22
5
|
|
|
23
6
|
# Integration Tester Subagent
|
|
@@ -1,22 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: qe-performance-validator
|
|
3
|
-
role: specialized-subagent
|
|
4
|
-
parent_agent: qe-performance-tester
|
|
5
|
-
phase: VALIDATION
|
|
6
|
-
color: orange
|
|
7
|
-
priority: high
|
|
8
3
|
description: "Validates performance metrics against SLAs and benchmarks"
|
|
9
|
-
capabilities:
|
|
10
|
-
- performance-validation
|
|
11
|
-
- sla-checking
|
|
12
|
-
- benchmark-comparison
|
|
13
|
-
- threshold-enforcement
|
|
14
|
-
coordination:
|
|
15
|
-
protocol: aqe-hooks
|
|
16
|
-
parent_delegation: true
|
|
17
|
-
metadata:
|
|
18
|
-
version: "1.0.0"
|
|
19
|
-
parent_agents: ["qe-performance-tester"]
|
|
20
4
|
---
|
|
21
5
|
|
|
22
6
|
# Performance Validator Subagent
|
|
@@ -1,22 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: qe-security-auditor
|
|
3
|
-
role: specialized-subagent
|
|
4
|
-
parent_agent: qe-security-scanner
|
|
5
|
-
phase: AUDIT
|
|
6
|
-
color: red
|
|
7
|
-
priority: critical
|
|
8
3
|
description: "Audits code for security vulnerabilities and compliance"
|
|
9
|
-
capabilities:
|
|
10
|
-
- security-audit
|
|
11
|
-
- vulnerability-detection
|
|
12
|
-
- compliance-checking
|
|
13
|
-
- threat-modeling
|
|
14
|
-
coordination:
|
|
15
|
-
protocol: aqe-hooks
|
|
16
|
-
parent_delegation: true
|
|
17
|
-
metadata:
|
|
18
|
-
version: "1.0.0"
|
|
19
|
-
parent_agents: ["qe-security-scanner"]
|
|
20
4
|
---
|
|
21
5
|
|
|
22
6
|
# Security Auditor Subagent
|
|
@@ -1,23 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: qe-test-implementer
|
|
3
|
-
role: specialized-subagent
|
|
4
|
-
parent_agent: qe-test-generator
|
|
5
|
-
phase: GREEN
|
|
6
|
-
color: green
|
|
7
|
-
priority: critical
|
|
8
3
|
description: "Specialized subagent for making tests pass in TDD GREEN phase - implements minimal code to satisfy test requirements"
|
|
9
|
-
capabilities:
|
|
10
|
-
- minimal-implementation
|
|
11
|
-
- test-driven-coding
|
|
12
|
-
- incremental-development
|
|
13
|
-
- test-validation
|
|
14
|
-
coordination:
|
|
15
|
-
protocol: aqe-hooks
|
|
16
|
-
parent_delegation: true
|
|
17
|
-
metadata:
|
|
18
|
-
version: "1.0.0"
|
|
19
|
-
tdd_phase: "GREEN"
|
|
20
|
-
parent_agents: ["qe-test-generator", "qe-code-reviewer"]
|
|
21
4
|
---
|
|
22
5
|
|
|
23
6
|
# Test Implementer Subagent - TDD GREEN Phase
|
|
@@ -1,23 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: qe-test-refactorer
|
|
3
|
-
role: specialized-subagent
|
|
4
|
-
parent_agent: qe-test-generator
|
|
5
|
-
phase: REFACTOR
|
|
6
|
-
color: blue
|
|
7
|
-
priority: high
|
|
8
3
|
description: "Specialized subagent for refactoring code in TDD REFACTOR phase - improves code quality while maintaining passing tests"
|
|
9
|
-
capabilities:
|
|
10
|
-
- code-refactoring
|
|
11
|
-
- quality-improvement
|
|
12
|
-
- design-patterns
|
|
13
|
-
- continuous-testing
|
|
14
|
-
coordination:
|
|
15
|
-
protocol: aqe-hooks
|
|
16
|
-
parent_delegation: true
|
|
17
|
-
metadata:
|
|
18
|
-
version: "1.0.0"
|
|
19
|
-
tdd_phase: "REFACTOR"
|
|
20
|
-
parent_agents: ["qe-test-generator", "qe-code-reviewer"]
|
|
21
4
|
---
|
|
22
5
|
|
|
23
6
|
# Test Refactorer Subagent - TDD REFACTOR Phase
|
|
@@ -1,25 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: qe-test-writer
|
|
3
|
-
role: specialized-subagent
|
|
4
|
-
parent_agent: qe-test-generator
|
|
5
|
-
phase: RED
|
|
6
|
-
color: red
|
|
7
|
-
priority: critical
|
|
8
3
|
description: "Specialized subagent for writing failing tests in TDD RED phase - generates comprehensive test cases that define expected behavior before implementation"
|
|
9
|
-
capabilities:
|
|
10
|
-
- failing-test-generation
|
|
11
|
-
- behavior-specification
|
|
12
|
-
- test-case-design
|
|
13
|
-
- assertion-definition
|
|
14
|
-
- boundary-analysis
|
|
15
|
-
coordination:
|
|
16
|
-
protocol: aqe-hooks
|
|
17
|
-
parent_delegation: true
|
|
18
|
-
metadata:
|
|
19
|
-
version: "1.0.0"
|
|
20
|
-
tdd_phase: "RED"
|
|
21
|
-
frameworks: ["jest", "mocha", "vitest", "playwright"]
|
|
22
|
-
parent_agents: ["qe-test-generator", "qe-quality-gate"]
|
|
23
4
|
---
|
|
24
5
|
|
|
25
6
|
# Test Writer Subagent - TDD RED Phase
|