@tangle-network/browser-agent-driver 0.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.
Files changed (208) hide show
  1. package/LICENSE +196 -0
  2. package/README.md +149 -0
  3. package/dist/artifacts/composite-sink.d.ts +15 -0
  4. package/dist/artifacts/composite-sink.d.ts.map +1 -0
  5. package/dist/artifacts/composite-sink.js +27 -0
  6. package/dist/artifacts/composite-sink.js.map +1 -0
  7. package/dist/artifacts/filesystem-sink.d.ts +26 -0
  8. package/dist/artifacts/filesystem-sink.d.ts.map +1 -0
  9. package/dist/artifacts/filesystem-sink.js +81 -0
  10. package/dist/artifacts/filesystem-sink.js.map +1 -0
  11. package/dist/artifacts/types.d.ts +97 -0
  12. package/dist/artifacts/types.d.ts.map +1 -0
  13. package/dist/artifacts/types.js +9 -0
  14. package/dist/artifacts/types.js.map +1 -0
  15. package/dist/artifacts/webhook-sink.d.ts +71 -0
  16. package/dist/artifacts/webhook-sink.d.ts.map +1 -0
  17. package/dist/artifacts/webhook-sink.js +117 -0
  18. package/dist/artifacts/webhook-sink.js.map +1 -0
  19. package/dist/brain/index.d.ts +149 -0
  20. package/dist/brain/index.d.ts.map +1 -0
  21. package/dist/brain/index.js +1030 -0
  22. package/dist/brain/index.js.map +1 -0
  23. package/dist/browser-launch.d.ts +27 -0
  24. package/dist/browser-launch.d.ts.map +1 -0
  25. package/dist/browser-launch.js +92 -0
  26. package/dist/browser-launch.js.map +1 -0
  27. package/dist/cli.d.ts +14 -0
  28. package/dist/cli.d.ts.map +1 -0
  29. package/dist/cli.js +1035 -0
  30. package/dist/cli.js.map +1 -0
  31. package/dist/config.d.ts +143 -0
  32. package/dist/config.d.ts.map +1 -0
  33. package/dist/config.js +205 -0
  34. package/dist/config.js.map +1 -0
  35. package/dist/context-budget.d.ts +14 -0
  36. package/dist/context-budget.d.ts.map +1 -0
  37. package/dist/context-budget.js +39 -0
  38. package/dist/context-budget.js.map +1 -0
  39. package/dist/design-audit.d.ts +48 -0
  40. package/dist/design-audit.d.ts.map +1 -0
  41. package/dist/design-audit.js +172 -0
  42. package/dist/design-audit.js.map +1 -0
  43. package/dist/domain-policy.d.ts +4 -0
  44. package/dist/domain-policy.d.ts.map +1 -0
  45. package/dist/domain-policy.js +69 -0
  46. package/dist/domain-policy.js.map +1 -0
  47. package/dist/drivers/block-patterns.d.ts +11 -0
  48. package/dist/drivers/block-patterns.d.ts.map +1 -0
  49. package/dist/drivers/block-patterns.js +123 -0
  50. package/dist/drivers/block-patterns.js.map +1 -0
  51. package/dist/drivers/cdp-page-state.d.ts +22 -0
  52. package/dist/drivers/cdp-page-state.d.ts.map +1 -0
  53. package/dist/drivers/cdp-page-state.js +38 -0
  54. package/dist/drivers/cdp-page-state.js.map +1 -0
  55. package/dist/drivers/cdp-snapshot.d.ts +32 -0
  56. package/dist/drivers/cdp-snapshot.d.ts.map +1 -0
  57. package/dist/drivers/cdp-snapshot.js +120 -0
  58. package/dist/drivers/cdp-snapshot.js.map +1 -0
  59. package/dist/drivers/playwright.d.ts +84 -0
  60. package/dist/drivers/playwright.d.ts.map +1 -0
  61. package/dist/drivers/playwright.js +385 -0
  62. package/dist/drivers/playwright.js.map +1 -0
  63. package/dist/drivers/snapshot.d.ts +134 -0
  64. package/dist/drivers/snapshot.d.ts.map +1 -0
  65. package/dist/drivers/snapshot.js +354 -0
  66. package/dist/drivers/snapshot.js.map +1 -0
  67. package/dist/drivers/types.d.ts +37 -0
  68. package/dist/drivers/types.d.ts.map +1 -0
  69. package/dist/drivers/types.js +5 -0
  70. package/dist/drivers/types.js.map +1 -0
  71. package/dist/env-loader.d.ts +2 -0
  72. package/dist/env-loader.d.ts.map +1 -0
  73. package/dist/env-loader.js +35 -0
  74. package/dist/env-loader.js.map +1 -0
  75. package/dist/formatters/slack.d.ts +37 -0
  76. package/dist/formatters/slack.d.ts.map +1 -0
  77. package/dist/formatters/slack.js +97 -0
  78. package/dist/formatters/slack.js.map +1 -0
  79. package/dist/index.d.ts +60 -0
  80. package/dist/index.d.ts.map +1 -0
  81. package/dist/index.js +53 -0
  82. package/dist/index.js.map +1 -0
  83. package/dist/memory/analyzer.d.ts +67 -0
  84. package/dist/memory/analyzer.d.ts.map +1 -0
  85. package/dist/memory/analyzer.js +265 -0
  86. package/dist/memory/analyzer.js.map +1 -0
  87. package/dist/memory/knowledge.d.ts +55 -0
  88. package/dist/memory/knowledge.d.ts.map +1 -0
  89. package/dist/memory/knowledge.js +115 -0
  90. package/dist/memory/knowledge.js.map +1 -0
  91. package/dist/memory/project-store.d.ts +43 -0
  92. package/dist/memory/project-store.d.ts.map +1 -0
  93. package/dist/memory/project-store.js +119 -0
  94. package/dist/memory/project-store.js.map +1 -0
  95. package/dist/memory/selectors.d.ts +46 -0
  96. package/dist/memory/selectors.d.ts.map +1 -0
  97. package/dist/memory/selectors.js +89 -0
  98. package/dist/memory/selectors.js.map +1 -0
  99. package/dist/memory/store.d.ts +39 -0
  100. package/dist/memory/store.d.ts.map +1 -0
  101. package/dist/memory/store.js +193 -0
  102. package/dist/memory/store.js.map +1 -0
  103. package/dist/model-pricing.d.ts +41 -0
  104. package/dist/model-pricing.d.ts.map +1 -0
  105. package/dist/model-pricing.js +197 -0
  106. package/dist/model-pricing.js.map +1 -0
  107. package/dist/multi-actor.d.ts +108 -0
  108. package/dist/multi-actor.d.ts.map +1 -0
  109. package/dist/multi-actor.js +192 -0
  110. package/dist/multi-actor.js.map +1 -0
  111. package/dist/override-pipeline.d.ts +57 -0
  112. package/dist/override-pipeline.d.ts.map +1 -0
  113. package/dist/override-pipeline.js +26 -0
  114. package/dist/override-pipeline.js.map +1 -0
  115. package/dist/personas.d.ts +19 -0
  116. package/dist/personas.d.ts.map +1 -0
  117. package/dist/personas.js +86 -0
  118. package/dist/personas.js.map +1 -0
  119. package/dist/preview.d.ts +32 -0
  120. package/dist/preview.d.ts.map +1 -0
  121. package/dist/preview.js +138 -0
  122. package/dist/preview.js.map +1 -0
  123. package/dist/provider-defaults.d.ts +6 -0
  124. package/dist/provider-defaults.d.ts.map +1 -0
  125. package/dist/provider-defaults.js +40 -0
  126. package/dist/provider-defaults.js.map +1 -0
  127. package/dist/providers/sandbox-backend.d.ts +22 -0
  128. package/dist/providers/sandbox-backend.d.ts.map +1 -0
  129. package/dist/providers/sandbox-backend.js +259 -0
  130. package/dist/providers/sandbox-backend.js.map +1 -0
  131. package/dist/recovery.d.ts +91 -0
  132. package/dist/recovery.d.ts.map +1 -0
  133. package/dist/recovery.js +500 -0
  134. package/dist/recovery.js.map +1 -0
  135. package/dist/reporters/junit.d.ts +8 -0
  136. package/dist/reporters/junit.d.ts.map +1 -0
  137. package/dist/reporters/junit.js +99 -0
  138. package/dist/reporters/junit.js.map +1 -0
  139. package/dist/run-metrics.d.ts +4 -0
  140. package/dist/run-metrics.d.ts.map +1 -0
  141. package/dist/run-metrics.js +48 -0
  142. package/dist/run-metrics.js.map +1 -0
  143. package/dist/run-state.d.ts +22 -0
  144. package/dist/run-state.d.ts.map +1 -0
  145. package/dist/run-state.js +33 -0
  146. package/dist/run-state.js.map +1 -0
  147. package/dist/runner/goal-verification.d.ts +13 -0
  148. package/dist/runner/goal-verification.d.ts.map +1 -0
  149. package/dist/runner/goal-verification.js +152 -0
  150. package/dist/runner/goal-verification.js.map +1 -0
  151. package/dist/runner/index.d.ts +12 -0
  152. package/dist/runner/index.d.ts.map +1 -0
  153. package/dist/runner/index.js +18 -0
  154. package/dist/runner/index.js.map +1 -0
  155. package/dist/runner/overrides.d.ts +75 -0
  156. package/dist/runner/overrides.d.ts.map +1 -0
  157. package/dist/runner/overrides.js +385 -0
  158. package/dist/runner/overrides.js.map +1 -0
  159. package/dist/runner/page-analysis.d.ts +23 -0
  160. package/dist/runner/page-analysis.d.ts.map +1 -0
  161. package/dist/runner/page-analysis.js +91 -0
  162. package/dist/runner/page-analysis.js.map +1 -0
  163. package/dist/runner/runner.d.ts +66 -0
  164. package/dist/runner/runner.d.ts.map +1 -0
  165. package/dist/runner/runner.js +1314 -0
  166. package/dist/runner/runner.js.map +1 -0
  167. package/dist/runner/scout.d.ts +29 -0
  168. package/dist/runner/scout.d.ts.map +1 -0
  169. package/dist/runner/scout.js +81 -0
  170. package/dist/runner/scout.js.map +1 -0
  171. package/dist/runner/search-guidance.d.ts +31 -0
  172. package/dist/runner/search-guidance.d.ts.map +1 -0
  173. package/dist/runner/search-guidance.js +210 -0
  174. package/dist/runner/search-guidance.js.map +1 -0
  175. package/dist/runner/utils.d.ts +28 -0
  176. package/dist/runner/utils.d.ts.map +1 -0
  177. package/dist/runner/utils.js +119 -0
  178. package/dist/runner/utils.js.map +1 -0
  179. package/dist/runner.d.ts +8 -0
  180. package/dist/runner.d.ts.map +1 -0
  181. package/dist/runner.js +21 -0
  182. package/dist/runner.js.map +1 -0
  183. package/dist/supervisor/critic.d.ts +29 -0
  184. package/dist/supervisor/critic.d.ts.map +1 -0
  185. package/dist/supervisor/critic.js +320 -0
  186. package/dist/supervisor/critic.js.map +1 -0
  187. package/dist/supervisor/policy.d.ts +11 -0
  188. package/dist/supervisor/policy.d.ts.map +1 -0
  189. package/dist/supervisor/policy.js +118 -0
  190. package/dist/supervisor/policy.js.map +1 -0
  191. package/dist/test-report.d.ts +15 -0
  192. package/dist/test-report.d.ts.map +1 -0
  193. package/dist/test-report.js +241 -0
  194. package/dist/test-report.js.map +1 -0
  195. package/dist/test-runner.d.ts +99 -0
  196. package/dist/test-runner.d.ts.map +1 -0
  197. package/dist/test-runner.js +1075 -0
  198. package/dist/test-runner.js.map +1 -0
  199. package/dist/types.d.ts +493 -0
  200. package/dist/types.d.ts.map +1 -0
  201. package/dist/types.js +5 -0
  202. package/dist/types.js.map +1 -0
  203. package/dist/wallet/automation.d.ts +52 -0
  204. package/dist/wallet/automation.d.ts.map +1 -0
  205. package/dist/wallet/automation.js +507 -0
  206. package/dist/wallet/automation.js.map +1 -0
  207. package/package.json +101 -0
  208. package/scripts/postinstall-provider-patches.mjs +52 -0
@@ -0,0 +1,60 @@
1
+ /**
2
+ * @tangle-network/browser-agent-driver
3
+ *
4
+ * LLM-driven browser agent for UI automation, testing, and evaluation.
5
+ * Built on Playwright with accessibility tree observation, planning,
6
+ * verification, recovery, and trajectory memory.
7
+ */
8
+ export type { Action, ClickAction, TypeAction, PressAction, HoverAction, SelectAction, EvaluateAction, RunScriptAction, VerifyPreviewAction, ScrollAction, NavigateAction, WaitAction, CompleteAction, AbortAction, PageState, Scenario, AgentConfig, ObservabilityConfig, MicroPlanConfig, SupervisorConfig, SupervisorSignal, SupervisorDirective, Turn, AgentResult, SuccessCriterion, TestCase, TestResult, CriterionResult, TestSuiteResult, Trajectory, TrajectoryStep, DesignFinding, FlowAuditResult, DesignAuditReport, AuditFlow, GoalVerification, PreviewVerification, } from './types.js';
9
+ export type { Driver, ActionResult, ResourceBlockingOptions } from './drivers/types.js';
10
+ export { PlaywrightDriver } from './drivers/playwright.js';
11
+ export type { PlaywrightDriverOptions, ObserveTiming } from './drivers/playwright.js';
12
+ export { AriaSnapshotHelper, StaleRefError, dismissOverlays, stableHash, INTERACTIVE_ROLES } from './drivers/snapshot.js';
13
+ export type { ParsedElement, SnapshotDiff } from './drivers/snapshot.js';
14
+ export { ANALYTICS_PATTERNS, IMAGE_PATTERNS, MEDIA_PATTERNS } from './drivers/block-patterns.js';
15
+ export { buildCdpSnapshot } from './drivers/cdp-snapshot.js';
16
+ export type { CdpSnapshotResult } from './drivers/cdp-snapshot.js';
17
+ export { getPageMetadata } from './drivers/cdp-page-state.js';
18
+ export type { PageMetadata } from './drivers/cdp-page-state.js';
19
+ export { Brain } from './brain/index.js';
20
+ export type { BrainDecision, QualityEvaluation } from './brain/index.js';
21
+ export { AgentRunner, runAgent } from './runner.js';
22
+ export type { RunnerOptions } from './runner.js';
23
+ export { TestRunner } from './test-runner.js';
24
+ export type { TestRunnerOptions } from './test-runner.js';
25
+ export { generateReport, compareReports } from './test-report.js';
26
+ export type { ReportOptions } from './test-report.js';
27
+ export { loadPricing, calculateCost, getModelPricing } from './model-pricing.js';
28
+ export type { ModelPricing } from './model-pricing.js';
29
+ export { verifyPreview } from './preview.js';
30
+ export { DesignAuditor, generateDesignAuditReport } from './design-audit.js';
31
+ export { analyzeRecovery, detectBlockingModal, detectStuck, detectSelectorFailures, detectLoadingState, parseSnapshotElements, } from './recovery.js';
32
+ export { detectSupervisorSignal, formatSupervisorSignal } from './supervisor/policy.js';
33
+ export { requestSupervisorDirective } from './supervisor/critic.js';
34
+ export { ProjectStore } from './memory/project-store.js';
35
+ export { AppKnowledge } from './memory/knowledge.js';
36
+ export type { Fact, KnowledgeData } from './memory/knowledge.js';
37
+ export { SelectorCache } from './memory/selectors.js';
38
+ export type { SelectorEntry } from './memory/selectors.js';
39
+ export { TrajectoryStore } from './memory/store.js';
40
+ export type { TrajectoryStoreOptions } from './memory/store.js';
41
+ export { TrajectoryAnalyzer } from './memory/analyzer.js';
42
+ export type { RunAnalysis, ActionPattern, GoalPattern, TurnWaste } from './memory/analyzer.js';
43
+ export { defineConfig, defineTests, loadConfig, mergeConfig, toAgentConfig } from './config.js';
44
+ export type { DriverConfig } from './config.js';
45
+ export { buildBrowserLaunchPlan } from './browser-launch.js';
46
+ export type { BrowserLaunchPlan, BuildBrowserLaunchPlanOptions } from './browser-launch.js';
47
+ export { DEFAULT_WALLET_ACTION_SELECTORS, DEFAULT_CONNECT_SELECTORS, DEFAULT_CONNECTOR_SELECTORS, DEFAULT_PROMPT_PATHS, resolveWalletExtensionId, startWalletAutoApprover, settleWalletPrompts, runWalletOriginPreflight, runWalletPreflight, } from './wallet/automation.js';
48
+ export type { WalletAutomationOptions, WalletPreflightChainTarget, WalletPreflightOptions, WalletOriginPreflightResult, WalletPreflightResult, } from './wallet/automation.js';
49
+ export { generateJUnitXml } from './reporters/junit.js';
50
+ export { MultiActorSession, Actor } from './multi-actor.js';
51
+ export type { ActorConfig, MultiActorSessionConfig } from './multi-actor.js';
52
+ export { PERSONA_IDS, getPersonaDirective, withPersonaDirective, isPersonaId, listPersonaIds } from './personas.js';
53
+ export type { PersonaId, PersonaDirectiveInput } from './personas.js';
54
+ export type { Artifact, ArtifactSink, ArtifactType, ArtifactManifestEntry, ProgressEvent, } from './artifacts/types.js';
55
+ export { FilesystemSink } from './artifacts/filesystem-sink.js';
56
+ export { CompositeSink } from './artifacts/composite-sink.js';
57
+ export { WebhookSink } from './artifacts/webhook-sink.js';
58
+ export type { WebhookSinkOptions, WebhookPayload } from './artifacts/webhook-sink.js';
59
+ export { slackFormatter } from './formatters/slack.js';
60
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js ADDED
@@ -0,0 +1,53 @@
1
+ /**
2
+ * @tangle-network/browser-agent-driver
3
+ *
4
+ * LLM-driven browser agent for UI automation, testing, and evaluation.
5
+ * Built on Playwright with accessibility tree observation, planning,
6
+ * verification, recovery, and trajectory memory.
7
+ */
8
+ export { PlaywrightDriver } from './drivers/playwright.js';
9
+ export { AriaSnapshotHelper, StaleRefError, dismissOverlays, stableHash, INTERACTIVE_ROLES } from './drivers/snapshot.js';
10
+ export { ANALYTICS_PATTERNS, IMAGE_PATTERNS, MEDIA_PATTERNS } from './drivers/block-patterns.js';
11
+ export { buildCdpSnapshot } from './drivers/cdp-snapshot.js';
12
+ export { getPageMetadata } from './drivers/cdp-page-state.js';
13
+ // Brain (LLM decision engine)
14
+ export { Brain } from './brain/index.js';
15
+ // Agent runner (core observe -> decide -> execute loop)
16
+ export { AgentRunner, runAgent } from './runner.js';
17
+ // Test runner (suite orchestration, verification, parallelism)
18
+ export { TestRunner } from './test-runner.js';
19
+ export { generateReport, compareReports } from './test-report.js';
20
+ // Model pricing (LiteLLM-backed cost calculation)
21
+ export { loadPricing, calculateCost, getModelPricing } from './model-pricing.js';
22
+ // Preview verification
23
+ export { verifyPreview } from './preview.js';
24
+ // Design audit
25
+ export { DesignAuditor, generateDesignAuditReport } from './design-audit.js';
26
+ // Recovery
27
+ export { analyzeRecovery, detectBlockingModal, detectStuck, detectSelectorFailures, detectLoadingState, parseSnapshotElements, } from './recovery.js';
28
+ // Supervisor
29
+ export { detectSupervisorSignal, formatSupervisorSignal } from './supervisor/policy.js';
30
+ export { requestSupervisorDirective } from './supervisor/critic.js';
31
+ // Memory system
32
+ export { ProjectStore } from './memory/project-store.js';
33
+ export { AppKnowledge } from './memory/knowledge.js';
34
+ export { SelectorCache } from './memory/selectors.js';
35
+ export { TrajectoryStore } from './memory/store.js';
36
+ export { TrajectoryAnalyzer } from './memory/analyzer.js';
37
+ // Configuration
38
+ export { defineConfig, defineTests, loadConfig, mergeConfig, toAgentConfig } from './config.js';
39
+ export { buildBrowserLaunchPlan } from './browser-launch.js';
40
+ // Wallet automation helpers
41
+ export { DEFAULT_WALLET_ACTION_SELECTORS, DEFAULT_CONNECT_SELECTORS, DEFAULT_CONNECTOR_SELECTORS, DEFAULT_PROMPT_PATHS, resolveWalletExtensionId, startWalletAutoApprover, settleWalletPrompts, runWalletOriginPreflight, runWalletPreflight, } from './wallet/automation.js';
42
+ // JUnit reporter
43
+ export { generateJUnitXml } from './reporters/junit.js';
44
+ // Multi-actor sessions (coordinated multi-user browser testing)
45
+ export { MultiActorSession, Actor } from './multi-actor.js';
46
+ // Persona directives
47
+ export { PERSONA_IDS, getPersonaDirective, withPersonaDirective, isPersonaId, listPersonaIds } from './personas.js';
48
+ export { FilesystemSink } from './artifacts/filesystem-sink.js';
49
+ export { CompositeSink } from './artifacts/composite-sink.js';
50
+ export { WebhookSink } from './artifacts/webhook-sink.js';
51
+ // Payload formatters (for WebhookSink.formatPayload)
52
+ export { slackFormatter } from './formatters/slack.js';
53
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AA6CH,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAE3D,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAE,eAAe,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAE1H,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AACjG,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAE7D,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAG9D,8BAA8B;AAC9B,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAGzC,wDAAwD;AACxD,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAGpD,+DAA+D;AAC/D,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAGlE,kDAAkD;AAClD,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAGjF,uBAAuB;AACvB,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAE7C,eAAe;AACf,OAAO,EAAE,aAAa,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAE7E,WAAW;AACX,OAAO,EACL,eAAe,EACf,mBAAmB,EACnB,WAAW,EACX,sBAAsB,EACtB,kBAAkB,EAClB,qBAAqB,GACtB,MAAM,eAAe,CAAC;AAEvB,aAAa;AACb,OAAO,EAAE,sBAAsB,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AACxF,OAAO,EAAE,0BAA0B,EAAE,MAAM,wBAAwB,CAAC;AAEpE,gBAAgB;AAChB,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAErD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAEtD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAG1D,gBAAgB;AAChB,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEhG,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAG7D,4BAA4B;AAC5B,OAAO,EACL,+BAA+B,EAC/B,yBAAyB,EACzB,2BAA2B,EAC3B,oBAAoB,EACpB,wBAAwB,EACxB,uBAAuB,EACvB,mBAAmB,EACnB,wBAAwB,EACxB,kBAAkB,GACnB,MAAM,wBAAwB,CAAC;AAShC,iBAAiB;AACjB,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAExD,gEAAgE;AAChE,OAAO,EAAE,iBAAiB,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAG5D,qBAAqB;AACrB,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAWpH,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAG1D,qDAAqD;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC"}
@@ -0,0 +1,67 @@
1
+ /**
2
+ * Trajectory Analyzer — extracts failure patterns and optimization hints from test runs.
3
+ *
4
+ * Examines TestSuiteResult traces to identify:
5
+ * - Wasted turns (errors, retries, repeated actions, stuck loops)
6
+ * - Failure patterns (which selectors, action types, and goals fail)
7
+ * - Verification gaps (agent says success, ground-truth says failure)
8
+ * - Turn efficiency (how many turns are productive vs wasted)
9
+ *
10
+ * Produces RunAnalysis with structured findings and generateHints() for
11
+ * injecting optimization context into the Brain's system prompt.
12
+ */
13
+ import type { TestSuiteResult } from '../types.js';
14
+ export interface ActionPattern {
15
+ action: string;
16
+ selector?: string;
17
+ occurrences: number;
18
+ failures: number;
19
+ failureRate: number;
20
+ }
21
+ export interface GoalPattern {
22
+ goalPrefix: string;
23
+ attempts: number;
24
+ successes: number;
25
+ avgTurns: number;
26
+ avgDurationMs: number;
27
+ commonFailures: string[];
28
+ }
29
+ export interface TurnWaste {
30
+ category: 'stale-ref' | 'repeated-action' | 'stuck-loop' | 'error' | 'unnecessary-wait';
31
+ turnNumbers: number[];
32
+ description: string;
33
+ }
34
+ export interface RunAnalysis {
35
+ timestamp: string;
36
+ suiteModel: string;
37
+ totalTests: number;
38
+ passRate: number;
39
+ turnEfficiency: {
40
+ totalTurns: number;
41
+ productiveTurns: number;
42
+ wastedTurns: number;
43
+ efficiencyRate: number;
44
+ };
45
+ verificationGaps: {
46
+ agentSaysSuccess: number;
47
+ groundTruthConfirms: number;
48
+ falsePositiveRate: number;
49
+ };
50
+ actionPatterns: ActionPattern[];
51
+ goalPatterns: GoalPattern[];
52
+ wasteBreakdown: TurnWaste[];
53
+ topFailureReasons: string[];
54
+ }
55
+ export declare class TrajectoryAnalyzer {
56
+ analyze(suite: TestSuiteResult): RunAnalysis;
57
+ generateHints(analysis: RunAnalysis): string;
58
+ private analyzeTurnEfficiency;
59
+ private isWastedTurn;
60
+ private analyzeVerificationGaps;
61
+ private analyzeActionPatterns;
62
+ private analyzeGoalPatterns;
63
+ private analyzeWaste;
64
+ private extractFailureReasons;
65
+ private actionKey;
66
+ }
67
+ //# sourceMappingURL=analyzer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analyzer.d.ts","sourceRoot":"","sources":["../../src/memory/analyzer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,eAAe,EAA4B,MAAM,aAAa,CAAC;AAE7E,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,WAAW;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,EAAE,CAAC;CAC1B;AAED,MAAM,WAAW,SAAS;IACxB,QAAQ,EAAE,WAAW,GAAG,iBAAiB,GAAG,YAAY,GAAG,OAAO,GAAG,kBAAkB,CAAC;IACxF,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IAEjB,cAAc,EAAE;QACd,UAAU,EAAE,MAAM,CAAC;QACnB,eAAe,EAAE,MAAM,CAAC;QACxB,WAAW,EAAE,MAAM,CAAC;QACpB,cAAc,EAAE,MAAM,CAAC;KACxB,CAAC;IAEF,gBAAgB,EAAE;QAChB,gBAAgB,EAAE,MAAM,CAAC;QACzB,mBAAmB,EAAE,MAAM,CAAC;QAC5B,iBAAiB,EAAE,MAAM,CAAC;KAC3B,CAAC;IAEF,cAAc,EAAE,aAAa,EAAE,CAAC;IAChC,YAAY,EAAE,WAAW,EAAE,CAAC;IAC5B,cAAc,EAAE,SAAS,EAAE,CAAC;IAC5B,iBAAiB,EAAE,MAAM,EAAE,CAAC;CAC7B;AAED,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,KAAK,EAAE,eAAe,GAAG,WAAW;IAwB5C,aAAa,CAAC,QAAQ,EAAE,WAAW,GAAG,MAAM;IA0E5C,OAAO,CAAC,qBAAqB;IAwB7B,OAAO,CAAC,YAAY;IAOpB,OAAO,CAAC,uBAAuB;IAa/B,OAAO,CAAC,qBAAqB;IA6B7B,OAAO,CAAC,mBAAmB;IA6B3B,OAAO,CAAC,YAAY;IAgDpB,OAAO,CAAC,qBAAqB;IA2B7B,OAAO,CAAC,SAAS;CAgBlB"}
@@ -0,0 +1,265 @@
1
+ /**
2
+ * Trajectory Analyzer — extracts failure patterns and optimization hints from test runs.
3
+ *
4
+ * Examines TestSuiteResult traces to identify:
5
+ * - Wasted turns (errors, retries, repeated actions, stuck loops)
6
+ * - Failure patterns (which selectors, action types, and goals fail)
7
+ * - Verification gaps (agent says success, ground-truth says failure)
8
+ * - Turn efficiency (how many turns are productive vs wasted)
9
+ *
10
+ * Produces RunAnalysis with structured findings and generateHints() for
11
+ * injecting optimization context into the Brain's system prompt.
12
+ */
13
+ export class TrajectoryAnalyzer {
14
+ analyze(suite) {
15
+ const nonSkipped = suite.results.filter(r => !r.skipped);
16
+ const turnEfficiency = this.analyzeTurnEfficiency(nonSkipped);
17
+ const verificationGaps = this.analyzeVerificationGaps(nonSkipped);
18
+ const actionPatterns = this.analyzeActionPatterns(nonSkipped);
19
+ const goalPatterns = this.analyzeGoalPatterns(nonSkipped);
20
+ const wasteBreakdown = this.analyzeWaste(nonSkipped);
21
+ const topFailureReasons = this.extractFailureReasons(nonSkipped);
22
+ return {
23
+ timestamp: new Date().toISOString(),
24
+ suiteModel: suite.model,
25
+ totalTests: suite.results.length,
26
+ passRate: suite.summary.passRate,
27
+ turnEfficiency,
28
+ verificationGaps,
29
+ actionPatterns,
30
+ goalPatterns,
31
+ wasteBreakdown,
32
+ topFailureReasons,
33
+ };
34
+ }
35
+ generateHints(analysis) {
36
+ const hints = [];
37
+ // Turn efficiency hints
38
+ if (analysis.turnEfficiency.efficiencyRate < 0.7) {
39
+ hints.push(`EFFICIENCY WARNING: Only ${(analysis.turnEfficiency.efficiencyRate * 100).toFixed(0)}% of turns are productive. ` +
40
+ `${analysis.turnEfficiency.wastedTurns} turns were wasted on errors, retries, or repeated actions.`);
41
+ }
42
+ // Verification gap hints
43
+ if (analysis.verificationGaps.falsePositiveRate > 0.1) {
44
+ hints.push(`ACCURACY WARNING: The agent reports success ${(analysis.verificationGaps.falsePositiveRate * 100).toFixed(0)}% more often than ground-truth confirms. ` +
45
+ `Be more conservative with "complete" — verify the goal state thoroughly before completing.`);
46
+ }
47
+ // Action pattern hints
48
+ const highFailureActions = analysis.actionPatterns
49
+ .filter(p => p.failureRate > 0.3 && p.occurrences >= 3)
50
+ .sort((a, b) => b.failureRate - a.failureRate);
51
+ if (highFailureActions.length > 0) {
52
+ const actionHints = highFailureActions
53
+ .slice(0, 3)
54
+ .map(p => {
55
+ const selector = p.selector ? ` on "${p.selector}"` : '';
56
+ return `"${p.action}"${selector} fails ${(p.failureRate * 100).toFixed(0)}% of the time (${p.failures}/${p.occurrences})`;
57
+ });
58
+ hints.push(`HIGH-FAILURE ACTIONS: ${actionHints.join('; ')}. Try alternative approaches.`);
59
+ }
60
+ // Waste pattern hints
61
+ const staleRefWaste = analysis.wasteBreakdown.filter(w => w.category === 'stale-ref');
62
+ if (staleRefWaste.length > 0) {
63
+ const totalStaleRefs = staleRefWaste.reduce((sum, w) => sum + w.turnNumbers.length, 0);
64
+ hints.push(`STALE REFS: ${totalStaleRefs} turns wasted on stale @ref selectors. ` +
65
+ `Always use refs from the CURRENT observation, not previous turns.`);
66
+ }
67
+ const stuckWaste = analysis.wasteBreakdown.filter(w => w.category === 'stuck-loop');
68
+ if (stuckWaste.length > 0) {
69
+ hints.push(`STUCK LOOPS DETECTED: The agent repeated the same action sequence ${stuckWaste.length} time(s). ` +
70
+ `When an action doesn't produce the expected effect after 2 attempts, try a completely different strategy.`);
71
+ }
72
+ // Goal-specific hints
73
+ const slowGoals = analysis.goalPatterns
74
+ .filter(p => p.avgTurns > 15 && p.attempts >= 2)
75
+ .sort((a, b) => b.avgTurns - a.avgTurns);
76
+ if (slowGoals.length > 0) {
77
+ const goalHints = slowGoals
78
+ .slice(0, 2)
79
+ .map(p => `"${p.goalPrefix}" averages ${p.avgTurns.toFixed(0)} turns`);
80
+ hints.push(`SLOW GOALS: ${goalHints.join('; ')}. Consider more direct navigation strategies.`);
81
+ }
82
+ // Top failure reasons
83
+ if (analysis.topFailureReasons.length > 0) {
84
+ hints.push(`COMMON FAILURES: ${analysis.topFailureReasons.slice(0, 3).join('; ')}`);
85
+ }
86
+ if (hints.length === 0)
87
+ return '';
88
+ return `FEEDBACK FROM PREVIOUS RUNS:\n${hints.map(h => `- ${h}`).join('\n')}`;
89
+ }
90
+ analyzeTurnEfficiency(results) {
91
+ let totalTurns = 0;
92
+ let wastedTurns = 0;
93
+ for (const r of results) {
94
+ const turns = r.agentResult.turns;
95
+ totalTurns += turns.length;
96
+ for (const turn of turns) {
97
+ if (this.isWastedTurn(turn)) {
98
+ wastedTurns++;
99
+ }
100
+ }
101
+ }
102
+ const productiveTurns = totalTurns - wastedTurns;
103
+ return {
104
+ totalTurns,
105
+ productiveTurns,
106
+ wastedTurns,
107
+ efficiencyRate: totalTurns > 0 ? productiveTurns / totalTurns : 1,
108
+ };
109
+ }
110
+ isWastedTurn(turn) {
111
+ if (turn.error)
112
+ return true;
113
+ if (turn.action.action === 'wait' && 'ms' in turn.action && turn.action.ms === 0)
114
+ return true;
115
+ if (turn.verificationFailure)
116
+ return true;
117
+ return false;
118
+ }
119
+ analyzeVerificationGaps(results) {
120
+ const agentSaysSuccess = results.filter(r => r.agentSuccess).length;
121
+ const groundTruthConfirms = results.filter(r => r.agentSuccess && r.verified).length;
122
+ return {
123
+ agentSaysSuccess,
124
+ groundTruthConfirms,
125
+ falsePositiveRate: agentSaysSuccess > 0
126
+ ? (agentSaysSuccess - groundTruthConfirms) / agentSaysSuccess
127
+ : 0,
128
+ };
129
+ }
130
+ analyzeActionPatterns(results) {
131
+ const patternMap = new Map();
132
+ for (const r of results) {
133
+ for (const turn of r.agentResult.turns) {
134
+ const action = turn.action;
135
+ const selector = 'selector' in action ? String(action.selector) : undefined;
136
+ const key = `${action.action}:${selector || '*'}`;
137
+ const existing = patternMap.get(key) || { occurrences: 0, failures: 0, selector };
138
+ existing.occurrences++;
139
+ if (turn.error || turn.verificationFailure) {
140
+ existing.failures++;
141
+ }
142
+ patternMap.set(key, existing);
143
+ }
144
+ }
145
+ return [...patternMap.entries()]
146
+ .map(([_key, v]) => ({
147
+ action: _key.split(':')[0],
148
+ selector: v.selector,
149
+ occurrences: v.occurrences,
150
+ failures: v.failures,
151
+ failureRate: v.occurrences > 0 ? v.failures / v.occurrences : 0,
152
+ }))
153
+ .sort((a, b) => b.occurrences - a.occurrences);
154
+ }
155
+ analyzeGoalPatterns(results) {
156
+ const goalMap = new Map();
157
+ for (const r of results) {
158
+ const prefix = r.testCase.goal.split('\n')[0].slice(0, 80);
159
+ const existing = goalMap.get(prefix) || {
160
+ attempts: 0, successes: 0, turns: [], durations: [], failures: [],
161
+ };
162
+ existing.attempts++;
163
+ if (r.verified)
164
+ existing.successes++;
165
+ existing.turns.push(r.turnsUsed);
166
+ existing.durations.push(r.durationMs);
167
+ if (!r.verified && r.verdict) {
168
+ existing.failures.push(r.verdict);
169
+ }
170
+ goalMap.set(prefix, existing);
171
+ }
172
+ return [...goalMap.entries()].map(([goalPrefix, v]) => ({
173
+ goalPrefix,
174
+ attempts: v.attempts,
175
+ successes: v.successes,
176
+ avgTurns: v.turns.reduce((a, b) => a + b, 0) / v.turns.length,
177
+ avgDurationMs: v.durations.reduce((a, b) => a + b, 0) / v.durations.length,
178
+ commonFailures: v.failures,
179
+ }));
180
+ }
181
+ analyzeWaste(results) {
182
+ const waste = [];
183
+ for (const r of results) {
184
+ const turns = r.agentResult.turns;
185
+ // Detect stale ref errors
186
+ const staleRefTurns = turns
187
+ .filter(t => t.error?.includes('Stale ref'))
188
+ .map(t => t.turn);
189
+ if (staleRefTurns.length > 0) {
190
+ waste.push({
191
+ category: 'stale-ref',
192
+ turnNumbers: staleRefTurns,
193
+ description: `${r.testCase.name}: ${staleRefTurns.length} stale ref errors`,
194
+ });
195
+ }
196
+ // Detect stuck loops (same action repeated 3+ times consecutively)
197
+ for (let i = 2; i < turns.length; i++) {
198
+ const a1 = this.actionKey(turns[i - 2].action);
199
+ const a2 = this.actionKey(turns[i - 1].action);
200
+ const a3 = this.actionKey(turns[i].action);
201
+ if (a1 === a2 && a2 === a3) {
202
+ waste.push({
203
+ category: 'stuck-loop',
204
+ turnNumbers: [turns[i - 2].turn, turns[i - 1].turn, turns[i].turn],
205
+ description: `${r.testCase.name}: repeated "${a1}" at turns ${turns[i - 2].turn}-${turns[i].turn}`,
206
+ });
207
+ }
208
+ }
209
+ // Detect error turns
210
+ const errorTurns = turns
211
+ .filter(t => t.error && !t.error.includes('Stale ref'))
212
+ .map(t => t.turn);
213
+ if (errorTurns.length > 0) {
214
+ waste.push({
215
+ category: 'error',
216
+ turnNumbers: errorTurns,
217
+ description: `${r.testCase.name}: ${errorTurns.length} execution errors`,
218
+ });
219
+ }
220
+ }
221
+ return waste;
222
+ }
223
+ extractFailureReasons(results) {
224
+ const reasons = [];
225
+ for (const r of results) {
226
+ if (!r.verified && !r.skipped) {
227
+ if (r.criteriaResults) {
228
+ for (const cr of r.criteriaResults) {
229
+ if (!cr.passed && cr.detail) {
230
+ reasons.push(cr.detail);
231
+ }
232
+ }
233
+ }
234
+ else if (r.verdict) {
235
+ reasons.push(r.verdict);
236
+ }
237
+ }
238
+ }
239
+ // Deduplicate and return top reasons
240
+ const counts = new Map();
241
+ for (const reason of reasons) {
242
+ counts.set(reason, (counts.get(reason) || 0) + 1);
243
+ }
244
+ return [...counts.entries()]
245
+ .sort((a, b) => b[1] - a[1])
246
+ .map(([reason]) => reason);
247
+ }
248
+ actionKey(action) {
249
+ switch (action.action) {
250
+ case 'click':
251
+ return `click:${action.selector}`;
252
+ case 'type':
253
+ return `type:${action.selector}`;
254
+ case 'press':
255
+ return `press:${action.selector}:${action.key}`;
256
+ case 'scroll':
257
+ return `scroll:${action.direction}`;
258
+ case 'navigate':
259
+ return `navigate:${action.url}`;
260
+ default:
261
+ return action.action;
262
+ }
263
+ }
264
+ }
265
+ //# sourceMappingURL=analyzer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analyzer.js","sourceRoot":"","sources":["../../src/memory/analyzer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,55 @@
1
+ /**
2
+ * App Knowledge — domain-scoped fact accumulation with confidence scoring.
3
+ *
4
+ * Stores structured facts the agent discovers about a specific application,
5
+ * persisted across runs. Facts have confidence scores that increase with
6
+ * repeated confirmation and decay when contradicted.
7
+ *
8
+ * Fact types:
9
+ * - timing: wait durations, animation timings, load times
10
+ * - selector: reliable selectors for specific elements
11
+ * - pattern: multi-step interaction patterns (auth flows, navigation)
12
+ * - quirk: app-specific behaviors (shadow DOM, lazy loading, etc.)
13
+ */
14
+ export interface Fact {
15
+ type: 'timing' | 'selector' | 'pattern' | 'quirk';
16
+ key: string;
17
+ value: string;
18
+ confidence: number;
19
+ sources: number;
20
+ lastSeen: string;
21
+ }
22
+ export interface KnowledgeData {
23
+ domain: string;
24
+ facts: Fact[];
25
+ updatedAt: string;
26
+ }
27
+ export declare class AppKnowledge {
28
+ private path;
29
+ private data;
30
+ constructor(path: string, domain: string);
31
+ /** Get all facts with confidence above threshold */
32
+ getFacts(minConfidence?: number): Fact[];
33
+ /** Get facts of a specific type */
34
+ getFactsByType(type: Fact['type'], minConfidence?: number): Fact[];
35
+ /** Look up a specific fact by type and key */
36
+ getFact(type: Fact['type'], key: string): Fact | undefined;
37
+ /**
38
+ * Record a fact. If a matching fact exists:
39
+ * - Same value: boost confidence and increment sources
40
+ * - Different value: decay old fact's confidence, add new fact
41
+ */
42
+ recordFact(type: Fact['type'], key: string, value: string): void;
43
+ /** Merge multiple facts at once (e.g., from LLM extraction) */
44
+ recordFacts(facts: Array<{
45
+ type: Fact['type'];
46
+ key: string;
47
+ value: string;
48
+ }>): void;
49
+ /** Format knowledge for injection into brain context */
50
+ formatForBrain(): string;
51
+ /** Persist to disk */
52
+ save(): void;
53
+ private load;
54
+ }
55
+ //# sourceMappingURL=knowledge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"knowledge.d.ts","sourceRoot":"","sources":["../../src/memory/knowledge.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAIH,MAAM,WAAW,IAAI;IACnB,IAAI,EAAE,QAAQ,GAAG,UAAU,GAAG,SAAS,GAAG,OAAO,CAAC;IAClD,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,qBAAa,YAAY;IACvB,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,IAAI,CAAgB;gBAEhB,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAKxC,oDAAoD;IACpD,QAAQ,CAAC,aAAa,SAAM,GAAG,IAAI,EAAE;IAIrC,mCAAmC;IACnC,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,aAAa,SAAM,GAAG,IAAI,EAAE;IAI/D,8CAA8C;IAC9C,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS;IAI1D;;;;OAIG;IACH,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAkChE,+DAA+D;IAC/D,WAAW,CAAC,KAAK,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,GAAG,IAAI;IAMnF,wDAAwD;IACxD,cAAc,IAAI,MAAM;IAwBxB,sBAAsB;IACtB,IAAI,IAAI,IAAI;IAIZ,OAAO,CAAC,IAAI;CAUb"}