agentic-qe 3.7.5 → 3.7.7

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 (138) hide show
  1. package/.claude/skills/skills-manifest.json +1 -1
  2. package/CHANGELOG.md +38 -0
  3. package/dist/cli/bundle.js +6220 -1373
  4. package/dist/cli/commands/security.d.ts.map +1 -1
  5. package/dist/cli/commands/security.js +66 -1
  6. package/dist/cli/commands/security.js.map +1 -1
  7. package/dist/cli/commands/test.d.ts.map +1 -1
  8. package/dist/cli/commands/test.js +86 -3
  9. package/dist/cli/commands/test.js.map +1 -1
  10. package/dist/cli/index.js +119 -0
  11. package/dist/cli/index.js.map +1 -1
  12. package/dist/coordination/workflow-orchestrator.d.ts.map +1 -1
  13. package/dist/coordination/workflow-orchestrator.js +2 -6
  14. package/dist/coordination/workflow-orchestrator.js.map +1 -1
  15. package/dist/domains/test-execution/services/e2e/adaptive-locator-service.d.ts +71 -0
  16. package/dist/domains/test-execution/services/e2e/adaptive-locator-service.d.ts.map +1 -0
  17. package/dist/domains/test-execution/services/e2e/adaptive-locator-service.js +456 -0
  18. package/dist/domains/test-execution/services/e2e/adaptive-locator-service.js.map +1 -0
  19. package/dist/domains/test-execution/services/e2e/adaptive-locator-types.d.ts +81 -0
  20. package/dist/domains/test-execution/services/e2e/adaptive-locator-types.d.ts.map +1 -0
  21. package/dist/domains/test-execution/services/e2e/adaptive-locator-types.js +20 -0
  22. package/dist/domains/test-execution/services/e2e/adaptive-locator-types.js.map +1 -0
  23. package/dist/domains/test-execution/services/e2e/browser-orchestrator.d.ts +19 -0
  24. package/dist/domains/test-execution/services/e2e/browser-orchestrator.d.ts.map +1 -1
  25. package/dist/domains/test-execution/services/e2e/browser-orchestrator.js +82 -0
  26. package/dist/domains/test-execution/services/e2e/browser-orchestrator.js.map +1 -1
  27. package/dist/domains/test-execution/services/e2e/index.d.ts +2 -0
  28. package/dist/domains/test-execution/services/e2e/index.d.ts.map +1 -1
  29. package/dist/domains/test-execution/services/e2e/index.js +5 -0
  30. package/dist/domains/test-execution/services/e2e/index.js.map +1 -1
  31. package/dist/domains/test-execution/services/e2e/step-executors.d.ts +6 -0
  32. package/dist/domains/test-execution/services/e2e/step-executors.d.ts.map +1 -1
  33. package/dist/domains/test-execution/services/e2e/step-executors.js +17 -2
  34. package/dist/domains/test-execution/services/e2e/step-executors.js.map +1 -1
  35. package/dist/domains/test-execution/services/e2e/types.d.ts +18 -1
  36. package/dist/domains/test-execution/services/e2e/types.d.ts.map +1 -1
  37. package/dist/domains/test-execution/services/e2e/types.js.map +1 -1
  38. package/dist/integrations/browser/client-factory.d.ts +6 -1
  39. package/dist/integrations/browser/client-factory.d.ts.map +1 -1
  40. package/dist/integrations/browser/client-factory.js +37 -2
  41. package/dist/integrations/browser/client-factory.js.map +1 -1
  42. package/dist/integrations/browser/index.d.ts +5 -1
  43. package/dist/integrations/browser/index.d.ts.map +1 -1
  44. package/dist/integrations/browser/index.js +8 -1
  45. package/dist/integrations/browser/index.js.map +1 -1
  46. package/dist/integrations/browser/page-pool-types.d.ts +70 -0
  47. package/dist/integrations/browser/page-pool-types.d.ts.map +1 -0
  48. package/dist/integrations/browser/page-pool-types.js +19 -0
  49. package/dist/integrations/browser/page-pool-types.js.map +1 -0
  50. package/dist/integrations/browser/page-pool.d.ts +79 -0
  51. package/dist/integrations/browser/page-pool.d.ts.map +1 -0
  52. package/dist/integrations/browser/page-pool.js +288 -0
  53. package/dist/integrations/browser/page-pool.js.map +1 -0
  54. package/dist/integrations/browser/resource-blocking.d.ts +47 -0
  55. package/dist/integrations/browser/resource-blocking.d.ts.map +1 -0
  56. package/dist/integrations/browser/resource-blocking.js +195 -0
  57. package/dist/integrations/browser/resource-blocking.js.map +1 -0
  58. package/dist/integrations/browser/stealth/index.d.ts +8 -0
  59. package/dist/integrations/browser/stealth/index.d.ts.map +1 -0
  60. package/dist/integrations/browser/stealth/index.js +7 -0
  61. package/dist/integrations/browser/stealth/index.js.map +1 -0
  62. package/dist/integrations/browser/stealth/stealth-client.d.ts +51 -0
  63. package/dist/integrations/browser/stealth/stealth-client.d.ts.map +1 -0
  64. package/dist/integrations/browser/stealth/stealth-client.js +359 -0
  65. package/dist/integrations/browser/stealth/stealth-client.js.map +1 -0
  66. package/dist/integrations/browser/stealth/stealth-types.d.ts +35 -0
  67. package/dist/integrations/browser/stealth/stealth-types.d.ts.map +1 -0
  68. package/dist/integrations/browser/stealth/stealth-types.js +17 -0
  69. package/dist/integrations/browser/stealth/stealth-types.js.map +1 -0
  70. package/dist/integrations/browser/types.d.ts +13 -10
  71. package/dist/integrations/browser/types.d.ts.map +1 -1
  72. package/dist/integrations/browser/types.js.map +1 -1
  73. package/dist/mcp/bundle.js +5090 -222
  74. package/dist/mcp/handlers/core-handlers.d.ts.map +1 -1
  75. package/dist/mcp/handlers/core-handlers.js +35 -0
  76. package/dist/mcp/handlers/core-handlers.js.map +1 -1
  77. package/dist/mcp/protocol-server.d.ts.map +1 -1
  78. package/dist/mcp/protocol-server.js +4 -1
  79. package/dist/mcp/protocol-server.js.map +1 -1
  80. package/dist/mcp/qe-tool-bridge.d.ts +27 -0
  81. package/dist/mcp/qe-tool-bridge.d.ts.map +1 -0
  82. package/dist/mcp/qe-tool-bridge.js +87 -0
  83. package/dist/mcp/qe-tool-bridge.js.map +1 -0
  84. package/dist/mcp/tools/registry.d.ts +4 -0
  85. package/dist/mcp/tools/registry.d.ts.map +1 -1
  86. package/dist/mcp/tools/registry.js +20 -0
  87. package/dist/mcp/tools/registry.js.map +1 -1
  88. package/dist/mcp/tools/security-compliance/visual-security.d.ts +45 -0
  89. package/dist/mcp/tools/security-compliance/visual-security.d.ts.map +1 -0
  90. package/dist/mcp/tools/security-compliance/visual-security.js +218 -0
  91. package/dist/mcp/tools/security-compliance/visual-security.js.map +1 -0
  92. package/dist/mcp/tools/test-execution/browser-workflow.d.ts +50 -0
  93. package/dist/mcp/tools/test-execution/browser-workflow.d.ts.map +1 -0
  94. package/dist/mcp/tools/test-execution/browser-workflow.js +145 -0
  95. package/dist/mcp/tools/test-execution/browser-workflow.js.map +1 -0
  96. package/dist/mcp/tools/test-execution/load-test.d.ts +37 -0
  97. package/dist/mcp/tools/test-execution/load-test.d.ts.map +1 -0
  98. package/dist/mcp/tools/test-execution/load-test.js +98 -0
  99. package/dist/mcp/tools/test-execution/load-test.js.map +1 -0
  100. package/dist/mcp/tools/test-execution/schedule.d.ts +44 -0
  101. package/dist/mcp/tools/test-execution/schedule.d.ts.map +1 -0
  102. package/dist/mcp/tools/test-execution/schedule.js +96 -0
  103. package/dist/mcp/tools/test-execution/schedule.js.map +1 -0
  104. package/dist/planning/goap-planner.d.ts.map +1 -1
  105. package/dist/planning/goap-planner.js +7 -28
  106. package/dist/planning/goap-planner.js.map +1 -1
  107. package/dist/planning/plan-executor.d.ts.map +1 -1
  108. package/dist/planning/plan-executor.js +7 -28
  109. package/dist/planning/plan-executor.js.map +1 -1
  110. package/package.json +3 -10
  111. package/dist/cli/commands/qe-tools.d.ts +0 -27
  112. package/dist/cli/commands/qe-tools.d.ts.map +0 -1
  113. package/dist/cli/commands/qe-tools.js +0 -771
  114. package/dist/cli/commands/qe-tools.js.map +0 -1
  115. package/dist/neural-optimizer/index.d.ts +0 -55
  116. package/dist/neural-optimizer/index.d.ts.map +0 -1
  117. package/dist/neural-optimizer/index.js +0 -57
  118. package/dist/neural-optimizer/index.js.map +0 -1
  119. package/dist/neural-optimizer/replay-buffer.d.ts +0 -126
  120. package/dist/neural-optimizer/replay-buffer.d.ts.map +0 -1
  121. package/dist/neural-optimizer/replay-buffer.js +0 -356
  122. package/dist/neural-optimizer/replay-buffer.js.map +0 -1
  123. package/dist/neural-optimizer/swarm-topology.d.ts +0 -157
  124. package/dist/neural-optimizer/swarm-topology.d.ts.map +0 -1
  125. package/dist/neural-optimizer/swarm-topology.js +0 -384
  126. package/dist/neural-optimizer/swarm-topology.js.map +0 -1
  127. package/dist/neural-optimizer/topology-optimizer.d.ts +0 -137
  128. package/dist/neural-optimizer/topology-optimizer.d.ts.map +0 -1
  129. package/dist/neural-optimizer/topology-optimizer.js +0 -657
  130. package/dist/neural-optimizer/topology-optimizer.js.map +0 -1
  131. package/dist/neural-optimizer/types.d.ts +0 -333
  132. package/dist/neural-optimizer/types.d.ts.map +0 -1
  133. package/dist/neural-optimizer/types.js +0 -57
  134. package/dist/neural-optimizer/types.js.map +0 -1
  135. package/dist/neural-optimizer/value-network.d.ts +0 -129
  136. package/dist/neural-optimizer/value-network.d.ts.map +0 -1
  137. package/dist/neural-optimizer/value-network.js +0 -279
  138. package/dist/neural-optimizer/value-network.js.map +0 -1
@@ -25,6 +25,7 @@
25
25
  */
26
26
  import { BrowserUnavailableError } from './types';
27
27
  import { AgentBrowserClient } from './agent-browser/client';
28
+ import { StealthBrowserClient } from './stealth/stealth-client';
28
29
  // ============================================================================
29
30
  // Availability Checks
30
31
  // ============================================================================
@@ -72,6 +73,12 @@ const AGENT_BROWSER_REQUIRED_USE_CASES = [
72
73
  'responsive-testing', // Requires device emulation
73
74
  'auth-testing', // Requires state persistence
74
75
  ];
76
+ /**
77
+ * Use cases that prefer the stealth browser client
78
+ */
79
+ const STEALTH_PREFERRED_USE_CASES = [
80
+ 'stealth-testing', // Bot-protected environments
81
+ ];
75
82
  /**
76
83
  * Use cases that can use either tool
77
84
  * Both Vibium and agent-browser support these capabilities
@@ -206,6 +213,12 @@ class VibiumClientStub {
206
213
  */
207
214
  export async function createBrowserClient(options = {}) {
208
215
  const { preference = 'auto', useCase } = options;
216
+ // If use case prefers stealth, try it first
217
+ if (useCase && STEALTH_PREFERRED_USE_CASES.includes(useCase)) {
218
+ if (await isStealthAvailable()) {
219
+ return new StealthBrowserClient();
220
+ }
221
+ }
209
222
  // If use case requires agent-browser, use it directly
210
223
  if (useCase && requiresAgentBrowser(useCase)) {
211
224
  return createAgentBrowserClient();
@@ -214,6 +227,12 @@ export async function createBrowserClient(options = {}) {
214
227
  if (preference === 'agent-browser') {
215
228
  return createAgentBrowserClient();
216
229
  }
230
+ if (preference === 'stealth') {
231
+ if (await isStealthAvailable()) {
232
+ return new StealthBrowserClient();
233
+ }
234
+ throw new BrowserUnavailableError('stealth', 'Patchright is not installed');
235
+ }
217
236
  if (preference === 'vibium') {
218
237
  const available = await isVibiumAvailable();
219
238
  if (available) {
@@ -298,11 +317,12 @@ export async function getBrowserClientForUseCase(useCase) {
298
317
  * @returns Promise<{ vibium: boolean; agentBrowser: boolean }> Availability status
299
318
  */
300
319
  export async function getBrowserToolAvailability() {
301
- const [vibium, agentBrowser] = await Promise.all([
320
+ const [vibium, agentBrowser, stealth] = await Promise.all([
302
321
  isVibiumAvailable(),
303
322
  isAgentBrowserAvailable(),
323
+ isStealthAvailable(),
304
324
  ]);
305
- return { vibium, agentBrowser };
325
+ return { vibium, agentBrowser, stealth };
306
326
  }
307
327
  /**
308
328
  * Get the recommended tool for a use case
@@ -311,6 +331,9 @@ export async function getBrowserToolAvailability() {
311
331
  * @returns 'agent-browser' | 'vibium' | 'either' Recommendation
312
332
  */
313
333
  export function getRecommendedToolForUseCase(useCase) {
334
+ if (STEALTH_PREFERRED_USE_CASES.includes(useCase)) {
335
+ return 'stealth';
336
+ }
314
337
  if (requiresAgentBrowser(useCase)) {
315
338
  return 'agent-browser';
316
339
  }
@@ -320,4 +343,16 @@ export function getRecommendedToolForUseCase(useCase) {
320
343
  // Default to either for any unknown use cases
321
344
  return 'either';
322
345
  }
346
+ /**
347
+ * Check if stealth browser (Patchright) is available
348
+ */
349
+ export async function isStealthAvailable() {
350
+ try {
351
+ const client = new StealthBrowserClient();
352
+ return await client.isAvailable();
353
+ }
354
+ catch {
355
+ return false;
356
+ }
357
+ }
323
358
  //# sourceMappingURL=client-factory.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"client-factory.js","sourceRoot":"","sources":["../../../src/integrations/browser/client-factory.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client-factory.js","sourceRoot":"","sources":["../../../src/integrations/browser/client-factory.ts"],"names":[],"mappings":"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"}
@@ -49,7 +49,11 @@
49
49
  * - For Auth Testing: Use agent-browser (state persistence)
50
50
  */
51
51
  export { type ElementTarget, type BrowserToolPreference, type BrowserUseCase, type BrowserLaunchOptions, type BrowserSessionInfo, type BrowserNavigateResult, type BrowserScreenshotResult, type SnapshotElement, type ParsedSnapshot, type IBrowserClient, type IAgentBrowserClient, BrowserError, BrowserUnavailableError, BrowserTimeoutError, BrowserElementNotFoundError, } from './types';
52
- export { type BrowserClientFactoryOptions, createBrowserClient, createAgentBrowserClient, getBrowserClientForUseCase, isVibiumAvailable, isAgentBrowserAvailable, getBrowserToolAvailability, getRecommendedToolForUseCase, } from './client-factory';
52
+ export { type BrowserClientFactoryOptions, createBrowserClient, createAgentBrowserClient, getBrowserClientForUseCase, isVibiumAvailable, isAgentBrowserAvailable, isStealthAvailable, getBrowserToolAvailability, getRecommendedToolForUseCase, } from './client-factory';
53
53
  export { AgentBrowserClient } from './agent-browser/client';
54
+ export { type ResourceCategory, type ResourceBlockingConfig, type ResourceBlockingPreset, shouldBlockRequest, getResourceBlockingPreset, } from './resource-blocking';
55
+ export { BrowserPagePool, createBrowserPagePool, } from './page-pool';
56
+ export { type PageState, type PooledPage, type BrowserPagePoolConfig, type PagePoolStats, DEFAULT_PAGE_POOL_CONFIG, } from './page-pool-types';
57
+ export { StealthBrowserClient, type StealthBrowserConfig, DEFAULT_STEALTH_CONFIG, } from './stealth';
54
58
  export { WebContentFetcher, createWebContentFetcher, fetchWebContent, type FetchTier, type FetchStatus, type WebContentFetchResult, type WebContentFetchOptions, } from './web-content-fetcher';
55
59
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/integrations/browser/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiDG;AAEH,OAAO,EAEL,KAAK,aAAa,EAClB,KAAK,qBAAqB,EAC1B,KAAK,cAAc,EACnB,KAAK,oBAAoB,EACzB,KAAK,kBAAkB,EACvB,KAAK,qBAAqB,EAC1B,KAAK,uBAAuB,EAC5B,KAAK,eAAe,EACpB,KAAK,cAAc,EAEnB,KAAK,cAAc,EACnB,KAAK,mBAAmB,EAExB,YAAY,EACZ,uBAAuB,EACvB,mBAAmB,EACnB,2BAA2B,GAC5B,MAAM,SAAS,CAAC;AAGjB,OAAO,EAEL,KAAK,2BAA2B,EAEhC,mBAAmB,EACnB,wBAAwB,EACxB,0BAA0B,EAE1B,iBAAiB,EACjB,uBAAuB,EAEvB,0BAA0B,EAC1B,4BAA4B,GAC7B,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAG5D,OAAO,EAEL,iBAAiB,EAEjB,uBAAuB,EACvB,eAAe,EAEf,KAAK,SAAS,EACd,KAAK,WAAW,EAChB,KAAK,qBAAqB,EAC1B,KAAK,sBAAsB,GAC5B,MAAM,uBAAuB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/integrations/browser/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiDG;AAEH,OAAO,EAEL,KAAK,aAAa,EAClB,KAAK,qBAAqB,EAC1B,KAAK,cAAc,EACnB,KAAK,oBAAoB,EACzB,KAAK,kBAAkB,EACvB,KAAK,qBAAqB,EAC1B,KAAK,uBAAuB,EAC5B,KAAK,eAAe,EACpB,KAAK,cAAc,EAEnB,KAAK,cAAc,EACnB,KAAK,mBAAmB,EAExB,YAAY,EACZ,uBAAuB,EACvB,mBAAmB,EACnB,2BAA2B,GAC5B,MAAM,SAAS,CAAC;AAGjB,OAAO,EAEL,KAAK,2BAA2B,EAEhC,mBAAmB,EACnB,wBAAwB,EACxB,0BAA0B,EAE1B,iBAAiB,EACjB,uBAAuB,EACvB,kBAAkB,EAElB,0BAA0B,EAC1B,4BAA4B,GAC7B,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAG5D,OAAO,EACL,KAAK,gBAAgB,EACrB,KAAK,sBAAsB,EAC3B,KAAK,sBAAsB,EAC3B,kBAAkB,EAClB,yBAAyB,GAC1B,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EACL,eAAe,EACf,qBAAqB,GACtB,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,KAAK,SAAS,EACd,KAAK,UAAU,EACf,KAAK,qBAAqB,EAC1B,KAAK,aAAa,EAClB,wBAAwB,GACzB,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EACL,oBAAoB,EACpB,KAAK,oBAAoB,EACzB,sBAAsB,GACvB,MAAM,WAAW,CAAC;AAGnB,OAAO,EAEL,iBAAiB,EAEjB,uBAAuB,EACvB,eAAe,EAEf,KAAK,SAAS,EACd,KAAK,WAAW,EAChB,KAAK,qBAAqB,EAC1B,KAAK,sBAAsB,GAC5B,MAAM,uBAAuB,CAAC"}
@@ -56,11 +56,18 @@ export {
56
56
  // Main factory functions
57
57
  createBrowserClient, createAgentBrowserClient, getBrowserClientForUseCase,
58
58
  // Availability checks
59
- isVibiumAvailable, isAgentBrowserAvailable,
59
+ isVibiumAvailable, isAgentBrowserAvailable, isStealthAvailable,
60
60
  // Utility functions
61
61
  getBrowserToolAvailability, getRecommendedToolForUseCase, } from './client-factory';
62
62
  // Re-export AgentBrowserClient for direct instantiation if needed
63
63
  export { AgentBrowserClient } from './agent-browser/client';
64
+ // Resource Blocking
65
+ export { shouldBlockRequest, getResourceBlockingPreset, } from './resource-blocking';
66
+ // Page Pool
67
+ export { BrowserPagePool, createBrowserPagePool, } from './page-pool';
68
+ export { DEFAULT_PAGE_POOL_CONFIG, } from './page-pool-types';
69
+ // Stealth Browser
70
+ export { StealthBrowserClient, DEFAULT_STEALTH_CONFIG, } from './stealth';
64
71
  // Web Content Fetcher - 5-tier browser cascade
65
72
  export {
66
73
  // Main class
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/integrations/browser/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiDG;AAEH,OAAO;AAcL,SAAS;AACT,YAAY,EACZ,uBAAuB,EACvB,mBAAmB,EACnB,2BAA2B,GAC5B,MAAM,SAAS,CAAC;AAEjB,oBAAoB;AACpB,OAAO;AAGL,yBAAyB;AACzB,mBAAmB,EACnB,wBAAwB,EACxB,0BAA0B;AAC1B,sBAAsB;AACtB,iBAAiB,EACjB,uBAAuB;AACvB,oBAAoB;AACpB,0BAA0B,EAC1B,4BAA4B,GAC7B,MAAM,kBAAkB,CAAC;AAE1B,kEAAkE;AAClE,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAE5D,+CAA+C;AAC/C,OAAO;AACL,aAAa;AACb,iBAAiB;AACjB,oBAAoB;AACpB,uBAAuB,EACvB,eAAe,GAMhB,MAAM,uBAAuB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/integrations/browser/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiDG;AAEH,OAAO;AAcL,SAAS;AACT,YAAY,EACZ,uBAAuB,EACvB,mBAAmB,EACnB,2BAA2B,GAC5B,MAAM,SAAS,CAAC;AAEjB,oBAAoB;AACpB,OAAO;AAGL,yBAAyB;AACzB,mBAAmB,EACnB,wBAAwB,EACxB,0BAA0B;AAC1B,sBAAsB;AACtB,iBAAiB,EACjB,uBAAuB,EACvB,kBAAkB;AAClB,oBAAoB;AACpB,0BAA0B,EAC1B,4BAA4B,GAC7B,MAAM,kBAAkB,CAAC;AAE1B,kEAAkE;AAClE,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAE5D,oBAAoB;AACpB,OAAO,EAIL,kBAAkB,EAClB,yBAAyB,GAC1B,MAAM,qBAAqB,CAAC;AAE7B,YAAY;AACZ,OAAO,EACL,eAAe,EACf,qBAAqB,GACtB,MAAM,aAAa,CAAC;AAErB,OAAO,EAKL,wBAAwB,GACzB,MAAM,mBAAmB,CAAC;AAE3B,kBAAkB;AAClB,OAAO,EACL,oBAAoB,EAEpB,sBAAsB,GACvB,MAAM,WAAW,CAAC;AAEnB,+CAA+C;AAC/C,OAAO;AACL,aAAa;AACb,iBAAiB;AACjB,oBAAoB;AACpB,uBAAuB,EACvB,eAAe,GAMhB,MAAM,uBAAuB,CAAC"}
@@ -0,0 +1,70 @@
1
+ /**
2
+ * Browser Page Pool Types
3
+ *
4
+ * Manages concurrent browser pages for parallel E2E test execution.
5
+ * Follows the ConnectionPoolImpl pattern from src/mcp/connection-pool.ts.
6
+ *
7
+ * @module integrations/browser/page-pool-types
8
+ */
9
+ /**
10
+ * State of a pooled browser page
11
+ */
12
+ export type PageState = 'ready' | 'busy' | 'error' | 'closed';
13
+ /**
14
+ * A managed browser page within the pool
15
+ */
16
+ export interface PooledPage {
17
+ /** Unique page identifier */
18
+ id: string;
19
+ /** Current page state */
20
+ state: PageState;
21
+ /** When the page was created (ms since epoch) */
22
+ createdAt: number;
23
+ /** When the page was last used (ms since epoch) */
24
+ lastUsedAt: number;
25
+ /** Health score (0-1, where 1 is healthy) */
26
+ health: number;
27
+ /** Current URL */
28
+ url?: string;
29
+ /** Cumulative error count */
30
+ errorCount: number;
31
+ /** Total requests served by this page */
32
+ requestsServed: number;
33
+ }
34
+ /**
35
+ * Browser page pool configuration
36
+ */
37
+ export interface BrowserPagePoolConfig {
38
+ /** Maximum concurrent pages (default: 6) */
39
+ maxPages: number;
40
+ /** Minimum pre-warmed pages (default: 1) */
41
+ minPages: number;
42
+ /** Idle timeout before page is closed in ms (default: 120000) */
43
+ idleTimeoutMs: number;
44
+ /** Health check interval in ms (default: 15000) */
45
+ healthCheckIntervalMs: number;
46
+ /** Minimum health score to keep a page (default: 0.5) */
47
+ healthThreshold: number;
48
+ }
49
+ /**
50
+ * Default page pool configuration
51
+ */
52
+ export declare const DEFAULT_PAGE_POOL_CONFIG: BrowserPagePoolConfig;
53
+ /**
54
+ * Page pool statistics for monitoring
55
+ */
56
+ export interface PagePoolStats {
57
+ /** Total pages in the pool */
58
+ totalPages: number;
59
+ /** Pages ready for use */
60
+ readyPages: number;
61
+ /** Pages currently in use */
62
+ busyPages: number;
63
+ /** Pages in error state */
64
+ errorPages: number;
65
+ /** Ratio of successful acquisitions to total attempts */
66
+ poolHitRate: number;
67
+ /** Average time to acquire a page in ms */
68
+ avgAcquisitionTimeMs: number;
69
+ }
70
+ //# sourceMappingURL=page-pool-types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"page-pool-types.d.ts","sourceRoot":"","sources":["../../../src/integrations/browser/page-pool-types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAMH;;GAEG;AACH,MAAM,MAAM,SAAS,GAAG,OAAO,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAC;AAE9D;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,6BAA6B;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,yBAAyB;IACzB,KAAK,EAAE,SAAS,CAAC;IACjB,iDAAiD;IACjD,SAAS,EAAE,MAAM,CAAC;IAClB,mDAAmD;IACnD,UAAU,EAAE,MAAM,CAAC;IACnB,6CAA6C;IAC7C,MAAM,EAAE,MAAM,CAAC;IACf,kBAAkB;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,6BAA6B;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,yCAAyC;IACzC,cAAc,EAAE,MAAM,CAAC;CACxB;AAMD;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,4CAA4C;IAC5C,QAAQ,EAAE,MAAM,CAAC;IACjB,4CAA4C;IAC5C,QAAQ,EAAE,MAAM,CAAC;IACjB,iEAAiE;IACjE,aAAa,EAAE,MAAM,CAAC;IACtB,mDAAmD;IACnD,qBAAqB,EAAE,MAAM,CAAC;IAC9B,yDAAyD;IACzD,eAAe,EAAE,MAAM,CAAC;CACzB;AAED;;GAEG;AACH,eAAO,MAAM,wBAAwB,EAAE,qBAMtC,CAAC;AAMF;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,8BAA8B;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,0BAA0B;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,6BAA6B;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,2BAA2B;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,yDAAyD;IACzD,WAAW,EAAE,MAAM,CAAC;IACpB,2CAA2C;IAC3C,oBAAoB,EAAE,MAAM,CAAC;CAC9B"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Browser Page Pool Types
3
+ *
4
+ * Manages concurrent browser pages for parallel E2E test execution.
5
+ * Follows the ConnectionPoolImpl pattern from src/mcp/connection-pool.ts.
6
+ *
7
+ * @module integrations/browser/page-pool-types
8
+ */
9
+ /**
10
+ * Default page pool configuration
11
+ */
12
+ export const DEFAULT_PAGE_POOL_CONFIG = {
13
+ maxPages: 6,
14
+ minPages: 1,
15
+ idleTimeoutMs: 120_000,
16
+ healthCheckIntervalMs: 15_000,
17
+ healthThreshold: 0.5,
18
+ };
19
+ //# sourceMappingURL=page-pool-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"page-pool-types.js","sourceRoot":"","sources":["../../../src/integrations/browser/page-pool-types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAqDH;;GAEG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAA0B;IAC7D,QAAQ,EAAE,CAAC;IACX,QAAQ,EAAE,CAAC;IACX,aAAa,EAAE,OAAO;IACtB,qBAAqB,EAAE,MAAM;IAC7B,eAAe,EAAE,GAAG;CACrB,CAAC"}
@@ -0,0 +1,79 @@
1
+ /**
2
+ * Browser Page Pool
3
+ *
4
+ * Manages concurrent browser pages with state tracking for parallel E2E execution.
5
+ * Follows the ConnectionPoolImpl pattern from src/mcp/connection-pool.ts.
6
+ *
7
+ * @module integrations/browser/page-pool
8
+ */
9
+ import type { PooledPage, BrowserPagePoolConfig, PagePoolStats } from './page-pool-types';
10
+ /**
11
+ * Browser Page Pool
12
+ *
13
+ * Manages a pool of browser pages for concurrent E2E test execution.
14
+ * Uses semaphore pattern for thread-safe acquisition and idle set for O(1) lookup.
15
+ */
16
+ export declare class BrowserPagePool {
17
+ private readonly pages;
18
+ private readonly readyPages;
19
+ private readonly config;
20
+ private healthCheckInterval;
21
+ private initialized;
22
+ private totalRequests;
23
+ private cacheHits;
24
+ private acquisitionTimes;
25
+ private readonly MAX_SAMPLES;
26
+ private acquireQueue;
27
+ private processing;
28
+ constructor(config?: Partial<BrowserPagePoolConfig>);
29
+ /**
30
+ * Initialize the pool, pre-warming minPages
31
+ */
32
+ initialize(): Promise<void>;
33
+ /**
34
+ * Acquire a ready page from the pool (sync fast path)
35
+ */
36
+ acquire(): PooledPage | null;
37
+ /**
38
+ * Acquire a page asynchronously (thread-safe for concurrent callers)
39
+ */
40
+ acquireAsync(): Promise<PooledPage | null>;
41
+ /**
42
+ * Release a page back to the pool.
43
+ * If there are pending acquireAsync waiters, resolves the next one immediately.
44
+ */
45
+ release(pageId: string): void;
46
+ /**
47
+ * Mark a page as errored
48
+ */
49
+ markError(pageId: string): void;
50
+ /**
51
+ * Remove errored and timed-out pages, maintain minPages
52
+ */
53
+ prune(): number;
54
+ /**
55
+ * Get pool statistics
56
+ */
57
+ getStats(): PagePoolStats;
58
+ /**
59
+ * Shut down the pool and release all resources
60
+ */
61
+ shutdown(): Promise<void>;
62
+ /**
63
+ * Get a page by id (for diagnostics)
64
+ */
65
+ getPage(pageId: string): PooledPage | undefined;
66
+ /**
67
+ * Get all pages (for diagnostics)
68
+ */
69
+ getAllPages(): PooledPage[];
70
+ private createPage;
71
+ private processQueue;
72
+ private runHealthChecks;
73
+ private trackAcquisitionTime;
74
+ }
75
+ /**
76
+ * Create a new browser page pool instance
77
+ */
78
+ export declare function createBrowserPagePool(config?: Partial<BrowserPagePoolConfig>): BrowserPagePool;
79
+ //# sourceMappingURL=page-pool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"page-pool.d.ts","sourceRoot":"","sources":["../../../src/integrations/browser/page-pool.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,KAAK,EAEV,UAAU,EACV,qBAAqB,EACrB,aAAa,EACd,MAAM,mBAAmB,CAAC;AAO3B;;;;;GAKG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAiC;IACvD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAqB;IAChD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAwB;IAC/C,OAAO,CAAC,mBAAmB,CAA+C;IAC1E,OAAO,CAAC,WAAW,CAAS;IAG5B,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,SAAS,CAAK;IACtB,OAAO,CAAC,gBAAgB,CAAgB;IACxC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAO;IAGnC,OAAO,CAAC,YAAY,CAAgD;IACpE,OAAO,CAAC,UAAU,CAAS;gBAEf,MAAM,CAAC,EAAE,OAAO,CAAC,qBAAqB,CAAC;IAInD;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAoBjC;;OAEG;IACH,OAAO,IAAI,UAAU,GAAG,IAAI;IA8B5B;;OAEG;IACH,YAAY,IAAI,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IAO1C;;;OAGG;IACH,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAuB7B;;OAEG;IACH,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAU/B;;OAEG;IACH,KAAK,IAAI,MAAM;IA2Bf;;OAEG;IACH,QAAQ,IAAI,aAAa;IAkCzB;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAqB/B;;OAEG;IACH,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS;IAI/C;;OAEG;IACH,WAAW,IAAI,UAAU,EAAE;IAQ3B,OAAO,CAAC,UAAU;IAiBlB,OAAO,CAAC,YAAY;IAepB,OAAO,CAAC,eAAe;IA0BvB,OAAO,CAAC,oBAAoB;CAM7B;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,MAAM,CAAC,EAAE,OAAO,CAAC,qBAAqB,CAAC,GACtC,eAAe,CAEjB"}
@@ -0,0 +1,288 @@
1
+ /**
2
+ * Browser Page Pool
3
+ *
4
+ * Manages concurrent browser pages with state tracking for parallel E2E execution.
5
+ * Follows the ConnectionPoolImpl pattern from src/mcp/connection-pool.ts.
6
+ *
7
+ * @module integrations/browser/page-pool
8
+ */
9
+ import { randomUUID } from 'crypto';
10
+ import { DEFAULT_PAGE_POOL_CONFIG } from './page-pool-types';
11
+ // ============================================================================
12
+ // Browser Page Pool
13
+ // ============================================================================
14
+ /**
15
+ * Browser Page Pool
16
+ *
17
+ * Manages a pool of browser pages for concurrent E2E test execution.
18
+ * Uses semaphore pattern for thread-safe acquisition and idle set for O(1) lookup.
19
+ */
20
+ export class BrowserPagePool {
21
+ pages = new Map();
22
+ readyPages = new Set();
23
+ config;
24
+ healthCheckInterval = null;
25
+ initialized = false;
26
+ // Performance tracking
27
+ totalRequests = 0;
28
+ cacheHits = 0;
29
+ acquisitionTimes = [];
30
+ MAX_SAMPLES = 100;
31
+ // Semaphore for async acquire
32
+ acquireQueue = [];
33
+ processing = false;
34
+ constructor(config) {
35
+ this.config = { ...DEFAULT_PAGE_POOL_CONFIG, ...config };
36
+ }
37
+ /**
38
+ * Initialize the pool, pre-warming minPages
39
+ */
40
+ async initialize() {
41
+ if (this.initialized)
42
+ return;
43
+ for (let i = 0; i < this.config.minPages; i++) {
44
+ this.createPage();
45
+ }
46
+ if (this.config.healthCheckIntervalMs > 0) {
47
+ this.healthCheckInterval = setInterval(() => {
48
+ this.runHealthChecks();
49
+ }, this.config.healthCheckIntervalMs);
50
+ if (this.healthCheckInterval.unref) {
51
+ this.healthCheckInterval.unref();
52
+ }
53
+ }
54
+ this.initialized = true;
55
+ }
56
+ /**
57
+ * Acquire a ready page from the pool (sync fast path)
58
+ */
59
+ acquire() {
60
+ const start = performance.now();
61
+ this.totalRequests++;
62
+ for (const pageId of this.readyPages) {
63
+ const page = this.pages.get(pageId);
64
+ if (page && page.health >= this.config.healthThreshold) {
65
+ page.state = 'busy';
66
+ page.lastUsedAt = Date.now();
67
+ this.readyPages.delete(pageId);
68
+ this.cacheHits++;
69
+ this.trackAcquisitionTime(performance.now() - start);
70
+ return page;
71
+ }
72
+ this.readyPages.delete(pageId);
73
+ }
74
+ // Try to create a new page if under capacity (not a cache hit — page is new)
75
+ if (this.pages.size < this.config.maxPages) {
76
+ const page = this.createPage();
77
+ page.state = 'busy';
78
+ this.readyPages.delete(page.id);
79
+ this.trackAcquisitionTime(performance.now() - start);
80
+ return page;
81
+ }
82
+ this.trackAcquisitionTime(performance.now() - start);
83
+ return null;
84
+ }
85
+ /**
86
+ * Acquire a page asynchronously (thread-safe for concurrent callers)
87
+ */
88
+ acquireAsync() {
89
+ return new Promise((resolve) => {
90
+ this.acquireQueue.push(resolve);
91
+ this.processQueue();
92
+ });
93
+ }
94
+ /**
95
+ * Release a page back to the pool.
96
+ * If there are pending acquireAsync waiters, resolves the next one immediately.
97
+ */
98
+ release(pageId) {
99
+ const page = this.pages.get(pageId);
100
+ if (!page)
101
+ return;
102
+ page.state = 'ready';
103
+ page.lastUsedAt = Date.now();
104
+ page.requestsServed++;
105
+ if (page.health >= this.config.healthThreshold) {
106
+ // If a waiter is queued, give this page directly to them
107
+ if (this.acquireQueue.length > 0) {
108
+ const resolve = this.acquireQueue.shift();
109
+ page.state = 'busy';
110
+ page.lastUsedAt = Date.now();
111
+ this.totalRequests++;
112
+ this.cacheHits++;
113
+ resolve(page);
114
+ return;
115
+ }
116
+ this.readyPages.add(pageId);
117
+ }
118
+ }
119
+ /**
120
+ * Mark a page as errored
121
+ */
122
+ markError(pageId) {
123
+ const page = this.pages.get(pageId);
124
+ if (!page)
125
+ return;
126
+ page.state = 'error';
127
+ page.errorCount++;
128
+ page.health = Math.max(0, page.health - 0.3);
129
+ this.readyPages.delete(pageId);
130
+ }
131
+ /**
132
+ * Remove errored and timed-out pages, maintain minPages
133
+ */
134
+ prune() {
135
+ const now = Date.now();
136
+ const toRemove = [];
137
+ for (const [id, page] of this.pages) {
138
+ const isError = page.state === 'error' || page.health < this.config.healthThreshold;
139
+ const isIdleExpired = page.state === 'ready' && now - page.lastUsedAt > this.config.idleTimeoutMs;
140
+ if (isError || isIdleExpired) {
141
+ toRemove.push(id);
142
+ }
143
+ }
144
+ for (const id of toRemove) {
145
+ this.pages.delete(id);
146
+ this.readyPages.delete(id);
147
+ }
148
+ // Maintain minimum pages
149
+ while (this.pages.size < this.config.minPages) {
150
+ this.createPage();
151
+ }
152
+ return toRemove.length;
153
+ }
154
+ /**
155
+ * Get pool statistics
156
+ */
157
+ getStats() {
158
+ let readyCount = 0;
159
+ let busyCount = 0;
160
+ let errorCount = 0;
161
+ for (const page of this.pages.values()) {
162
+ switch (page.state) {
163
+ case 'ready':
164
+ readyCount++;
165
+ break;
166
+ case 'busy':
167
+ busyCount++;
168
+ break;
169
+ case 'error':
170
+ errorCount++;
171
+ break;
172
+ }
173
+ }
174
+ const avg = this.acquisitionTimes.length > 0
175
+ ? this.acquisitionTimes.reduce((a, b) => a + b, 0) / this.acquisitionTimes.length
176
+ : 0;
177
+ return {
178
+ totalPages: this.pages.size,
179
+ readyPages: readyCount,
180
+ busyPages: busyCount,
181
+ errorPages: errorCount,
182
+ poolHitRate: this.totalRequests > 0 ? this.cacheHits / this.totalRequests : 0,
183
+ avgAcquisitionTimeMs: avg,
184
+ };
185
+ }
186
+ /**
187
+ * Shut down the pool and release all resources
188
+ */
189
+ async shutdown() {
190
+ if (this.healthCheckInterval) {
191
+ clearInterval(this.healthCheckInterval);
192
+ this.healthCheckInterval = null;
193
+ }
194
+ for (const page of this.pages.values()) {
195
+ page.state = 'closed';
196
+ }
197
+ this.pages.clear();
198
+ this.readyPages.clear();
199
+ this.initialized = false;
200
+ // Reject any pending acquire requests
201
+ for (const resolve of this.acquireQueue) {
202
+ resolve(null);
203
+ }
204
+ this.acquireQueue = [];
205
+ }
206
+ /**
207
+ * Get a page by id (for diagnostics)
208
+ */
209
+ getPage(pageId) {
210
+ return this.pages.get(pageId);
211
+ }
212
+ /**
213
+ * Get all pages (for diagnostics)
214
+ */
215
+ getAllPages() {
216
+ return Array.from(this.pages.values());
217
+ }
218
+ // ==========================================================================
219
+ // Private
220
+ // ==========================================================================
221
+ createPage() {
222
+ const id = `page-${randomUUID().split('-')[0]}`;
223
+ const now = Date.now();
224
+ const page = {
225
+ id,
226
+ state: 'ready',
227
+ createdAt: now,
228
+ lastUsedAt: now,
229
+ health: 1.0,
230
+ errorCount: 0,
231
+ requestsServed: 0,
232
+ };
233
+ this.pages.set(id, page);
234
+ this.readyPages.add(id);
235
+ return page;
236
+ }
237
+ processQueue() {
238
+ if (this.processing || this.acquireQueue.length === 0)
239
+ return;
240
+ this.processing = true;
241
+ const resolve = this.acquireQueue.shift();
242
+ try {
243
+ resolve(this.acquire());
244
+ }
245
+ finally {
246
+ this.processing = false;
247
+ if (this.acquireQueue.length > 0) {
248
+ setImmediate(() => this.processQueue());
249
+ }
250
+ }
251
+ }
252
+ runHealthChecks() {
253
+ for (const page of this.pages.values()) {
254
+ if (page.state === 'closed')
255
+ continue;
256
+ // Degrade health based on error rate
257
+ const total = page.requestsServed + page.errorCount;
258
+ if (total > 0) {
259
+ const errorRate = page.errorCount / total;
260
+ page.health = Math.max(0, 1 - errorRate * 0.8);
261
+ }
262
+ const wasReady = this.readyPages.has(page.id);
263
+ const isHealthy = page.health >= this.config.healthThreshold;
264
+ if (page.state === 'ready' && !isHealthy) {
265
+ page.state = 'error';
266
+ this.readyPages.delete(page.id);
267
+ }
268
+ else if (page.state === 'error' && isHealthy && !wasReady) {
269
+ page.state = 'ready';
270
+ this.readyPages.add(page.id);
271
+ }
272
+ }
273
+ this.prune();
274
+ }
275
+ trackAcquisitionTime(ms) {
276
+ this.acquisitionTimes.push(ms);
277
+ if (this.acquisitionTimes.length > this.MAX_SAMPLES) {
278
+ this.acquisitionTimes.shift();
279
+ }
280
+ }
281
+ }
282
+ /**
283
+ * Create a new browser page pool instance
284
+ */
285
+ export function createBrowserPagePool(config) {
286
+ return new BrowserPagePool(config);
287
+ }
288
+ //# sourceMappingURL=page-pool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"page-pool.js","sourceRoot":"","sources":["../../../src/integrations/browser/page-pool.ts"],"names":[],"mappings":"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"}