agentic-qe 3.7.6 → 3.7.8

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 (171) hide show
  1. package/.claude/helpers/statusline-v3.cjs +13 -1
  2. package/.claude/skills/skills-manifest.json +1 -1
  3. package/CHANGELOG.md +39 -0
  4. package/README.md +36 -0
  5. package/dist/cli/bundle.js +2052 -183
  6. package/dist/coordination/complexity-composition/index.d.ts +2 -0
  7. package/dist/coordination/complexity-composition/index.d.ts.map +1 -0
  8. package/dist/coordination/complexity-composition/index.js +2 -0
  9. package/dist/coordination/complexity-composition/index.js.map +1 -0
  10. package/dist/coordination/complexity-composition/team-composer.d.ts +72 -0
  11. package/dist/coordination/complexity-composition/team-composer.d.ts.map +1 -0
  12. package/dist/coordination/complexity-composition/team-composer.js +221 -0
  13. package/dist/coordination/complexity-composition/team-composer.js.map +1 -0
  14. package/dist/coordination/consensus/consensus-engine.d.ts +10 -1
  15. package/dist/coordination/consensus/consensus-engine.d.ts.map +1 -1
  16. package/dist/coordination/consensus/consensus-engine.js +31 -1
  17. package/dist/coordination/consensus/consensus-engine.js.map +1 -1
  18. package/dist/coordination/consensus/index.d.ts +1 -0
  19. package/dist/coordination/consensus/index.d.ts.map +1 -1
  20. package/dist/coordination/consensus/index.js +4 -0
  21. package/dist/coordination/consensus/index.js.map +1 -1
  22. package/dist/coordination/consensus/interfaces.d.ts +5 -0
  23. package/dist/coordination/consensus/interfaces.d.ts.map +1 -1
  24. package/dist/coordination/consensus/interfaces.js +1 -0
  25. package/dist/coordination/consensus/interfaces.js.map +1 -1
  26. package/dist/coordination/consensus/sycophancy-scorer.d.ts +62 -0
  27. package/dist/coordination/consensus/sycophancy-scorer.d.ts.map +1 -0
  28. package/dist/coordination/consensus/sycophancy-scorer.js +200 -0
  29. package/dist/coordination/consensus/sycophancy-scorer.js.map +1 -0
  30. package/dist/coordination/fleet-tiers/tier-selector.d.ts +20 -0
  31. package/dist/coordination/fleet-tiers/tier-selector.d.ts.map +1 -1
  32. package/dist/coordination/fleet-tiers/tier-selector.js +31 -0
  33. package/dist/coordination/fleet-tiers/tier-selector.js.map +1 -1
  34. package/dist/coordination/fleet-tiers/types.d.ts +2 -0
  35. package/dist/coordination/fleet-tiers/types.d.ts.map +1 -1
  36. package/dist/domains/test-execution/services/e2e/adaptive-locator-service.d.ts +71 -0
  37. package/dist/domains/test-execution/services/e2e/adaptive-locator-service.d.ts.map +1 -0
  38. package/dist/domains/test-execution/services/e2e/adaptive-locator-service.js +456 -0
  39. package/dist/domains/test-execution/services/e2e/adaptive-locator-service.js.map +1 -0
  40. package/dist/domains/test-execution/services/e2e/adaptive-locator-types.d.ts +81 -0
  41. package/dist/domains/test-execution/services/e2e/adaptive-locator-types.d.ts.map +1 -0
  42. package/dist/domains/test-execution/services/e2e/adaptive-locator-types.js +20 -0
  43. package/dist/domains/test-execution/services/e2e/adaptive-locator-types.js.map +1 -0
  44. package/dist/domains/test-execution/services/e2e/browser-orchestrator.d.ts +19 -0
  45. package/dist/domains/test-execution/services/e2e/browser-orchestrator.d.ts.map +1 -1
  46. package/dist/domains/test-execution/services/e2e/browser-orchestrator.js +82 -0
  47. package/dist/domains/test-execution/services/e2e/browser-orchestrator.js.map +1 -1
  48. package/dist/domains/test-execution/services/e2e/index.d.ts +2 -0
  49. package/dist/domains/test-execution/services/e2e/index.d.ts.map +1 -1
  50. package/dist/domains/test-execution/services/e2e/index.js +5 -0
  51. package/dist/domains/test-execution/services/e2e/index.js.map +1 -1
  52. package/dist/domains/test-execution/services/e2e/step-executors.d.ts +6 -0
  53. package/dist/domains/test-execution/services/e2e/step-executors.d.ts.map +1 -1
  54. package/dist/domains/test-execution/services/e2e/step-executors.js +17 -2
  55. package/dist/domains/test-execution/services/e2e/step-executors.js.map +1 -1
  56. package/dist/domains/test-execution/services/e2e/types.d.ts +18 -1
  57. package/dist/domains/test-execution/services/e2e/types.d.ts.map +1 -1
  58. package/dist/domains/test-execution/services/e2e/types.js.map +1 -1
  59. package/dist/domains/test-generation/blind-review/blind-review-orchestrator.d.ts +65 -0
  60. package/dist/domains/test-generation/blind-review/blind-review-orchestrator.d.ts.map +1 -0
  61. package/dist/domains/test-generation/blind-review/blind-review-orchestrator.js +189 -0
  62. package/dist/domains/test-generation/blind-review/blind-review-orchestrator.js.map +1 -0
  63. package/dist/domains/test-generation/blind-review/index.d.ts +2 -0
  64. package/dist/domains/test-generation/blind-review/index.d.ts.map +1 -0
  65. package/dist/domains/test-generation/blind-review/index.js +2 -0
  66. package/dist/domains/test-generation/blind-review/index.js.map +1 -0
  67. package/dist/domains/test-generation/gates/index.d.ts +2 -0
  68. package/dist/domains/test-generation/gates/index.d.ts.map +1 -0
  69. package/dist/domains/test-generation/gates/index.js +2 -0
  70. package/dist/domains/test-generation/gates/index.js.map +1 -0
  71. package/dist/domains/test-generation/gates/test-quality-gate.d.ts +85 -0
  72. package/dist/domains/test-generation/gates/test-quality-gate.d.ts.map +1 -0
  73. package/dist/domains/test-generation/gates/test-quality-gate.js +320 -0
  74. package/dist/domains/test-generation/gates/test-quality-gate.js.map +1 -0
  75. package/dist/domains/test-generation/interfaces.d.ts +3 -0
  76. package/dist/domains/test-generation/interfaces.d.ts.map +1 -1
  77. package/dist/domains/test-generation/pattern-injection/edge-case-injector.d.ts +68 -0
  78. package/dist/domains/test-generation/pattern-injection/edge-case-injector.d.ts.map +1 -0
  79. package/dist/domains/test-generation/pattern-injection/edge-case-injector.js +225 -0
  80. package/dist/domains/test-generation/pattern-injection/edge-case-injector.js.map +1 -0
  81. package/dist/domains/test-generation/pattern-injection/index.d.ts +2 -0
  82. package/dist/domains/test-generation/pattern-injection/index.d.ts.map +1 -0
  83. package/dist/domains/test-generation/pattern-injection/index.js +2 -0
  84. package/dist/domains/test-generation/pattern-injection/index.js.map +1 -0
  85. package/dist/domains/test-generation/services/test-generator.d.ts +6 -0
  86. package/dist/domains/test-generation/services/test-generator.d.ts.map +1 -1
  87. package/dist/domains/test-generation/services/test-generator.js +29 -0
  88. package/dist/domains/test-generation/services/test-generator.js.map +1 -1
  89. package/dist/integrations/agentic-flow/reasoning-bank/experience-replay.d.ts +8 -2
  90. package/dist/integrations/agentic-flow/reasoning-bank/experience-replay.d.ts.map +1 -1
  91. package/dist/integrations/agentic-flow/reasoning-bank/experience-replay.js +62 -38
  92. package/dist/integrations/agentic-flow/reasoning-bank/experience-replay.js.map +1 -1
  93. package/dist/integrations/browser/client-factory.d.ts +6 -1
  94. package/dist/integrations/browser/client-factory.d.ts.map +1 -1
  95. package/dist/integrations/browser/client-factory.js +37 -2
  96. package/dist/integrations/browser/client-factory.js.map +1 -1
  97. package/dist/integrations/browser/index.d.ts +5 -1
  98. package/dist/integrations/browser/index.d.ts.map +1 -1
  99. package/dist/integrations/browser/index.js +8 -1
  100. package/dist/integrations/browser/index.js.map +1 -1
  101. package/dist/integrations/browser/page-pool-types.d.ts +70 -0
  102. package/dist/integrations/browser/page-pool-types.d.ts.map +1 -0
  103. package/dist/integrations/browser/page-pool-types.js +19 -0
  104. package/dist/integrations/browser/page-pool-types.js.map +1 -0
  105. package/dist/integrations/browser/page-pool.d.ts +79 -0
  106. package/dist/integrations/browser/page-pool.d.ts.map +1 -0
  107. package/dist/integrations/browser/page-pool.js +288 -0
  108. package/dist/integrations/browser/page-pool.js.map +1 -0
  109. package/dist/integrations/browser/resource-blocking.d.ts +47 -0
  110. package/dist/integrations/browser/resource-blocking.d.ts.map +1 -0
  111. package/dist/integrations/browser/resource-blocking.js +195 -0
  112. package/dist/integrations/browser/resource-blocking.js.map +1 -0
  113. package/dist/integrations/browser/stealth/index.d.ts +8 -0
  114. package/dist/integrations/browser/stealth/index.d.ts.map +1 -0
  115. package/dist/integrations/browser/stealth/index.js +7 -0
  116. package/dist/integrations/browser/stealth/index.js.map +1 -0
  117. package/dist/integrations/browser/stealth/stealth-client.d.ts +51 -0
  118. package/dist/integrations/browser/stealth/stealth-client.d.ts.map +1 -0
  119. package/dist/integrations/browser/stealth/stealth-client.js +359 -0
  120. package/dist/integrations/browser/stealth/stealth-client.js.map +1 -0
  121. package/dist/integrations/browser/stealth/stealth-types.d.ts +35 -0
  122. package/dist/integrations/browser/stealth/stealth-types.d.ts.map +1 -0
  123. package/dist/integrations/browser/stealth/stealth-types.js +17 -0
  124. package/dist/integrations/browser/stealth/stealth-types.js.map +1 -0
  125. package/dist/integrations/browser/types.d.ts +13 -10
  126. package/dist/integrations/browser/types.d.ts.map +1 -1
  127. package/dist/integrations/browser/types.js.map +1 -1
  128. package/dist/learning/experience-capture.d.ts +12 -2
  129. package/dist/learning/experience-capture.d.ts.map +1 -1
  130. package/dist/learning/experience-capture.js +28 -35
  131. package/dist/learning/experience-capture.js.map +1 -1
  132. package/dist/learning/experience-consolidation.d.ts +74 -0
  133. package/dist/learning/experience-consolidation.d.ts.map +1 -0
  134. package/dist/learning/experience-consolidation.js +403 -0
  135. package/dist/learning/experience-consolidation.js.map +1 -0
  136. package/dist/mcp/bundle.js +3050 -341
  137. package/dist/routing/calibration/ema-calibrator.d.ts +93 -0
  138. package/dist/routing/calibration/ema-calibrator.d.ts.map +1 -0
  139. package/dist/routing/calibration/ema-calibrator.js +140 -0
  140. package/dist/routing/calibration/ema-calibrator.js.map +1 -0
  141. package/dist/routing/calibration/index.d.ts +2 -0
  142. package/dist/routing/calibration/index.d.ts.map +1 -0
  143. package/dist/routing/calibration/index.js +2 -0
  144. package/dist/routing/calibration/index.js.map +1 -0
  145. package/dist/routing/escalation/auto-escalation-tracker.d.ts +62 -0
  146. package/dist/routing/escalation/auto-escalation-tracker.d.ts.map +1 -0
  147. package/dist/routing/escalation/auto-escalation-tracker.js +116 -0
  148. package/dist/routing/escalation/auto-escalation-tracker.js.map +1 -0
  149. package/dist/routing/escalation/index.d.ts +2 -0
  150. package/dist/routing/escalation/index.d.ts.map +1 -0
  151. package/dist/routing/escalation/index.js +2 -0
  152. package/dist/routing/escalation/index.js.map +1 -0
  153. package/dist/routing/index.d.ts +4 -0
  154. package/dist/routing/index.d.ts.map +1 -1
  155. package/dist/routing/index.js +4 -0
  156. package/dist/routing/index.js.map +1 -1
  157. package/dist/routing/routing-config.d.ts +4 -0
  158. package/dist/routing/routing-config.d.ts.map +1 -1
  159. package/dist/routing/routing-config.js +2 -0
  160. package/dist/routing/routing-config.js.map +1 -1
  161. package/dist/routing/routing-feedback.d.ts +35 -2
  162. package/dist/routing/routing-feedback.d.ts.map +1 -1
  163. package/dist/routing/routing-feedback.js +97 -3
  164. package/dist/routing/routing-feedback.js.map +1 -1
  165. package/dist/routing/types.d.ts +2 -0
  166. package/dist/routing/types.d.ts.map +1 -1
  167. package/dist/routing/types.js.map +1 -1
  168. package/dist/workers/workers/learning-consolidation.d.ts.map +1 -1
  169. package/dist/workers/workers/learning-consolidation.js +32 -0
  170. package/dist/workers/workers/learning-consolidation.js.map +1 -1
  171. package/package.json +1 -1
@@ -308,7 +308,19 @@ function getLearningMetrics(projectDir) {
308
308
  // V3 trajectories (new V3 trajectory tracking)
309
309
  const trajectories = parseInt(sqlite3Query(dbPath, 'SELECT COUNT(*) FROM qe_trajectories')) || 0;
310
310
  // Captured experiences (task execution captures)
311
- const capturedExp = parseInt(sqlite3Query(dbPath, 'SELECT COUNT(*) FROM captured_experiences')) || 0;
311
+ // Use SUM(consolidation_count) for monotonically non-decreasing counter:
312
+ // - New experience → +1
313
+ // - Merge A into B → A excluded (consolidated_into set), B's count += A's count → net 0
314
+ // - Archive → row stays, still counted → net 0
315
+ // Falls back to COUNT(*) if consolidation columns not yet added
316
+ let capturedExp = 0;
317
+ const consolidatedQuery = sqlite3Query(dbPath,
318
+ "SELECT COALESCE(SUM(consolidation_count), COUNT(*)) FROM captured_experiences WHERE consolidated_into IS NULL OR consolidated_into = 'archived'", '__FAIL__');
319
+ if (consolidatedQuery !== '__FAIL__') {
320
+ capturedExp = parseInt(consolidatedQuery) || 0;
321
+ } else {
322
+ capturedExp = parseInt(sqlite3Query(dbPath, 'SELECT COUNT(*) FROM captured_experiences')) || 0;
323
+ }
312
324
  // Memory entries with learning data (MCP-stored experiences)
313
325
  const memoryLearning = parseInt(sqlite3Query(dbPath, "SELECT COUNT(*) FROM memory_entries WHERE key LIKE 'learning%' OR key LIKE 'phase2/learning%'")) || 0;
314
326
  // QE pattern usage (hook-recorded outcomes from aqe hooks post-task/post-edit)
@@ -904,7 +904,7 @@
904
904
  },
905
905
  "metadata": {
906
906
  "generatedBy": "Agentic QE Fleet",
907
- "fleetVersion": "3.7.6",
907
+ "fleetVersion": "3.7.8",
908
908
  "manifestVersion": "1.3.0",
909
909
  "lastUpdated": "2026-02-04T00:00:00.000Z",
910
910
  "contributors": [
package/CHANGELOG.md CHANGED
@@ -5,6 +5,45 @@ All notable changes to the Agentic QE project will be documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [3.7.8] - 2026-03-04
9
+
10
+ ### Added
11
+
12
+ - **Loki-Mode adversarial quality gates (ADR-074)** — 7 new features to catch sycophantic AI outputs, hollow tests, and routing drift. All enabled by default (opt-out via config flags):
13
+ - **Anti-sycophancy scorer**: Detects rubber-stamp consensus via Jaccard similarity, confidence uniformity, and reasoning overlap across model votes
14
+ - **Test quality gates**: Catches tautological assertions (`expect(true).toBe(true)`), empty test bodies, and missing source imports in generated tests
15
+ - **Blind review orchestrator**: Runs N parallel test generators with varied temperatures, deduplicates results via Jaccard similarity
16
+ - **EMA calibration**: Exponential moving average tracks per-agent accuracy and derives dynamic voting weights, with SQLite state persistence
17
+ - **Edge-case injection**: Queries historical patterns from the learning store and injects proven edge cases into test generation prompts
18
+ - **Complexity-driven team composition**: Maps 8-dimension complexity analysis (AST + security + concurrency + API surface) to agent team composition
19
+ - **Auto-escalation tracker**: Consecutive failures auto-promote agent tier; consecutive successes auto-demote for cost optimization
20
+ - **Smart experience consolidation** — Replace destructive pruning with intelligent consolidation that preserves high-value learning patterns while managing memory growth
21
+ - **Multi-language test generation plan** — Architecture decision records (ADR-075 through ADR-079) for unified test framework type system, Tree-sitter WASM parser, compilation validation loop, backward-compatible API, and language-specific path resolution
22
+
23
+ ### Changed
24
+
25
+ - **Loki-mode features enabled by default** — All 6 config flags (`enableSycophancyCheck`, `enableTestQualityGate`, `enableEdgeCaseInjection`, `enableEMACalibration`, `enableAutoEscalation`, `enableComplexityComposition`) default to `true` for immediate quality improvement
26
+
27
+ ## [3.7.7] - 2026-03-02
28
+
29
+ ### Added
30
+
31
+ - **Resource blocking for E2E tests** — Block non-essential resources (images, fonts, tracking, ads) during test execution with three presets: `functional` (fastest, blocks all non-essential), `visual` (blocks nothing), and `performance` (blocks heavy resources). Includes domain-based tracker/ad detection for 30+ known domains.
32
+ - **Adaptive locator for resilient selectors** — When a CSS/XPath selector fails, falls back to text, ARIA, and similarity-based fingerprint matching to find the intended element. Reduces E2E flakiness when UI changes break selectors. Weighted scoring across tag name, ARIA role, classes, text content, attributes, and DOM position.
33
+ - **Browser page pool** — Manages concurrent browser page lifecycle with async acquire/release, health-based pruning, and pool statistics. Async waiters are notified when pages become available.
34
+ - **Stealth browser client via Patchright** — Optional `IBrowserClient` implementation using Patchright (drop-in Playwright replacement) for bot-protected test environments. Supports persistent contexts, Cloudflare challenge detection, proxy configuration, and integrated resource blocking. Lazy-loaded so it doesn't affect builds when not installed.
35
+ - **`stealth-testing` browser use case** — New use case in the browser client factory for intelligent tool selection when testing against bot-protected sites.
36
+
37
+ ### Changed
38
+
39
+ - **Step executors use adaptive locator** — Click and type steps now resolve element targets through the adaptive fallback chain when configured, using the actual page URL (not just base URL) for fingerprint keying.
40
+ - **Resource blocking wired into browser orchestrator** — `applyResourceBlocking()` calls `abortRoute()` on agent-browser clients for tracker/ad domains during test launch.
41
+ - **`getBrowserToolAvailability()` includes stealth** — Return type now includes `stealth: boolean` alongside vibium and agent-browser.
42
+
43
+ ### Security
44
+
45
+ - **Fix JS injection in adaptive locator** — Text fallback now uses `JSON.stringify()` instead of manual escaping to safely interpolate stored text content into browser-evaluated scripts.
46
+
8
47
  ## [3.7.6] - 2026-03-02
9
48
 
10
49
  ### Security
package/README.md CHANGED
@@ -94,6 +94,7 @@ For client-specific setup examples, see [Platform Setup Guide](docs/platform-set
94
94
  - ✅ **OpenCode Support** (v3.7.1): 59 agent configs, 86 skill configs (78 QE + 8 general dev), 5 tool wrappers, SSE/WS/HTTP transport, output compaction, graceful degradation, `aqe init --with-opencode` auto-provisioning
95
95
  - ✅ **AWS Kiro Support** (v3.7.2): 87 agent configs, 86 skill configs, 5 event-driven hooks, 2 steering files, MCP config, `aqe init --with-kiro` auto-provisioning
96
96
  - ✅ **Multi-Platform Support** (v3.7.4): 8 new platform integrations — GitHub Copilot, Cursor, Cline, Kilo Code, Roo Code, OpenAI Codex CLI, Windsurf, Continue.dev — with JSON/TOML/YAML config generation, behavioral rules, and `aqe platform list/setup/verify` CLI
97
+ - ✅ **Loki-Mode Quality Gates** (v3.7.7): Anti-sycophancy scoring, test quality gates, blind review, EMA calibration, edge-case injection, complexity-driven composition, auto-escalation — enabled by default (opt-out)
97
98
  - ✅ **V2 Backward Compatibility**: All V2 agents map to V3 equivalents
98
99
  - ✅ **78 QE Skills**: 46 Tier 3 verified + 32 additional QE skills (QCSD swarms, n8n testing, enterprise integration, qe-* domains)
99
100
 
@@ -299,6 +300,41 @@ aqe learning stats
299
300
 
300
301
  ---
301
302
 
303
+ ### 🛡️ Loki-Mode Quality Gates (v3.7.7)
304
+
305
+ V3.7.7 adds **7 adversarial quality features** inspired by loki-mode — designed to catch sycophantic AI outputs, hollow tests, and routing drift. All features are **enabled by default** (opt-out via config flags).
306
+
307
+ | Feature | Config Flag | Description |
308
+ |---------|------------|-------------|
309
+ | **Anti-Sycophancy Scorer** | `enableSycophancyCheck` | Detects rubber-stamp consensus via Jaccard similarity, confidence uniformity, and reasoning overlap |
310
+ | **Test Quality Gates** | `enableTestQualityGate` | Catches tautological assertions (`expect(true).toBe(true)`), empty test bodies, and missing source imports |
311
+ | **Blind Review** | N/A (API option) | Runs N parallel test generators with varied temperatures, deduplicates via Jaccard |
312
+ | **EMA Calibration** | `enableEMACalibration` | Exponential moving average tracks per-agent accuracy, derives dynamic voting weights |
313
+ | **Edge-Case Injection** | `enableEdgeCaseInjection` | Queries historical patterns and injects proven edge cases into test generation prompts |
314
+ | **Complexity Composition** | `enableComplexityComposition` | Maps 8-dimension complexity (AST + security + concurrency) to agent team composition |
315
+ | **Auto-Escalation** | `enableAutoEscalation` | Consecutive failures auto-promote agent tier; consecutive successes auto-demote |
316
+
317
+ ```typescript
318
+ // All features are ON by default. To disable specific features:
319
+ const config: Partial<RoutingConfig> = {
320
+ enableEMACalibration: false, // Disable EMA voting weights
321
+ enableAutoEscalation: false, // Disable auto tier promotion
322
+ };
323
+
324
+ const consensusConfig: Partial<ConsensusEngineConfig> = {
325
+ enableSycophancyCheck: false, // Disable rubber-stamp detection
326
+ };
327
+
328
+ const testConfig: Partial<TestGeneratorConfig> = {
329
+ enableTestQualityGate: false, // Disable tautology detection
330
+ enableEdgeCaseInjection: false, // Disable pattern injection
331
+ };
332
+ ```
333
+
334
+ > See [docs/loki-mode-features.md](docs/loki-mode-features.md) for detailed usage examples and configuration reference.
335
+
336
+ ---
337
+
302
338
  ### 🌙 Dream Cycles & Neural Learning
303
339
 
304
340
  V3 introduces **Dream cycles** for neural consolidation and continuous improvement: