testchimp-runner-core 0.0.22 → 0.0.24

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 (151) hide show
  1. package/RELEASE_0.0.23.md +120 -0
  2. package/VISION_DIAGNOSTICS_IMPROVEMENTS.md +336 -0
  3. package/dist/credit-usage-service.d.ts +9 -0
  4. package/dist/credit-usage-service.d.ts.map +1 -1
  5. package/dist/credit-usage-service.js +20 -5
  6. package/dist/credit-usage-service.js.map +1 -1
  7. package/dist/env-loader.d.ts +5 -0
  8. package/dist/env-loader.d.ts.map +1 -1
  9. package/dist/env-loader.js +21 -0
  10. package/dist/env-loader.js.map +1 -1
  11. package/dist/execution-service.d.ts +7 -2
  12. package/dist/execution-service.d.ts.map +1 -1
  13. package/dist/execution-service.js +91 -36
  14. package/dist/execution-service.js.map +1 -1
  15. package/dist/index.d.ts +30 -2
  16. package/dist/index.d.ts.map +1 -1
  17. package/dist/index.js +91 -26
  18. package/dist/index.js.map +1 -1
  19. package/dist/llm-facade.d.ts +64 -8
  20. package/dist/llm-facade.d.ts.map +1 -1
  21. package/dist/llm-facade.js +361 -109
  22. package/dist/llm-facade.js.map +1 -1
  23. package/dist/llm-provider.d.ts +39 -0
  24. package/dist/llm-provider.d.ts.map +1 -0
  25. package/dist/llm-provider.js +7 -0
  26. package/dist/llm-provider.js.map +1 -0
  27. package/dist/model-constants.d.ts +21 -0
  28. package/dist/model-constants.d.ts.map +1 -0
  29. package/dist/model-constants.js +24 -0
  30. package/dist/model-constants.js.map +1 -0
  31. package/dist/orchestrator/index.d.ts +8 -0
  32. package/dist/orchestrator/index.d.ts.map +1 -0
  33. package/dist/orchestrator/index.js +23 -0
  34. package/dist/orchestrator/index.js.map +1 -0
  35. package/dist/orchestrator/orchestrator-agent.d.ts +66 -0
  36. package/dist/orchestrator/orchestrator-agent.d.ts.map +1 -0
  37. package/dist/orchestrator/orchestrator-agent.js +860 -0
  38. package/dist/orchestrator/orchestrator-agent.js.map +1 -0
  39. package/dist/orchestrator/tool-registry.d.ts +74 -0
  40. package/dist/orchestrator/tool-registry.d.ts.map +1 -0
  41. package/dist/orchestrator/tool-registry.js +131 -0
  42. package/dist/orchestrator/tool-registry.js.map +1 -0
  43. package/dist/orchestrator/tools/check-page-ready.d.ts +13 -0
  44. package/dist/orchestrator/tools/check-page-ready.d.ts.map +1 -0
  45. package/dist/orchestrator/tools/check-page-ready.js +72 -0
  46. package/dist/orchestrator/tools/check-page-ready.js.map +1 -0
  47. package/dist/orchestrator/tools/extract-data.d.ts +13 -0
  48. package/dist/orchestrator/tools/extract-data.d.ts.map +1 -0
  49. package/dist/orchestrator/tools/extract-data.js +84 -0
  50. package/dist/orchestrator/tools/extract-data.js.map +1 -0
  51. package/dist/orchestrator/tools/index.d.ts +10 -0
  52. package/dist/orchestrator/tools/index.d.ts.map +1 -0
  53. package/dist/orchestrator/tools/index.js +18 -0
  54. package/dist/orchestrator/tools/index.js.map +1 -0
  55. package/dist/orchestrator/tools/inspect-page.d.ts +13 -0
  56. package/dist/orchestrator/tools/inspect-page.d.ts.map +1 -0
  57. package/dist/orchestrator/tools/inspect-page.js +39 -0
  58. package/dist/orchestrator/tools/inspect-page.js.map +1 -0
  59. package/dist/orchestrator/tools/recall-history.d.ts +13 -0
  60. package/dist/orchestrator/tools/recall-history.d.ts.map +1 -0
  61. package/dist/orchestrator/tools/recall-history.js +64 -0
  62. package/dist/orchestrator/tools/recall-history.js.map +1 -0
  63. package/dist/orchestrator/tools/take-screenshot.d.ts +15 -0
  64. package/dist/orchestrator/tools/take-screenshot.d.ts.map +1 -0
  65. package/dist/orchestrator/tools/take-screenshot.js +112 -0
  66. package/dist/orchestrator/tools/take-screenshot.js.map +1 -0
  67. package/dist/orchestrator/types.d.ts +133 -0
  68. package/dist/orchestrator/types.d.ts.map +1 -0
  69. package/dist/orchestrator/types.js +28 -0
  70. package/dist/orchestrator/types.js.map +1 -0
  71. package/dist/playwright-mcp-service.d.ts +9 -0
  72. package/dist/playwright-mcp-service.d.ts.map +1 -1
  73. package/dist/playwright-mcp-service.js +20 -5
  74. package/dist/playwright-mcp-service.js.map +1 -1
  75. package/dist/progress-reporter.d.ts +97 -0
  76. package/dist/progress-reporter.d.ts.map +1 -0
  77. package/dist/progress-reporter.js +18 -0
  78. package/dist/progress-reporter.js.map +1 -0
  79. package/dist/prompts.d.ts +24 -0
  80. package/dist/prompts.d.ts.map +1 -1
  81. package/dist/prompts.js +593 -68
  82. package/dist/prompts.js.map +1 -1
  83. package/dist/providers/backend-proxy-llm-provider.d.ts +25 -0
  84. package/dist/providers/backend-proxy-llm-provider.d.ts.map +1 -0
  85. package/dist/providers/backend-proxy-llm-provider.js +76 -0
  86. package/dist/providers/backend-proxy-llm-provider.js.map +1 -0
  87. package/dist/providers/local-llm-provider.d.ts +21 -0
  88. package/dist/providers/local-llm-provider.d.ts.map +1 -0
  89. package/dist/providers/local-llm-provider.js +35 -0
  90. package/dist/providers/local-llm-provider.js.map +1 -0
  91. package/dist/scenario-service.d.ts +27 -1
  92. package/dist/scenario-service.d.ts.map +1 -1
  93. package/dist/scenario-service.js +48 -12
  94. package/dist/scenario-service.js.map +1 -1
  95. package/dist/scenario-worker-class.d.ts +39 -2
  96. package/dist/scenario-worker-class.d.ts.map +1 -1
  97. package/dist/scenario-worker-class.js +614 -86
  98. package/dist/scenario-worker-class.js.map +1 -1
  99. package/dist/script-utils.d.ts +2 -0
  100. package/dist/script-utils.d.ts.map +1 -1
  101. package/dist/script-utils.js +44 -4
  102. package/dist/script-utils.js.map +1 -1
  103. package/dist/types.d.ts +11 -0
  104. package/dist/types.d.ts.map +1 -1
  105. package/dist/types.js.map +1 -1
  106. package/dist/utils/browser-utils.d.ts +20 -1
  107. package/dist/utils/browser-utils.d.ts.map +1 -1
  108. package/dist/utils/browser-utils.js +102 -51
  109. package/dist/utils/browser-utils.js.map +1 -1
  110. package/dist/utils/page-info-utils.d.ts +23 -4
  111. package/dist/utils/page-info-utils.d.ts.map +1 -1
  112. package/dist/utils/page-info-utils.js +174 -43
  113. package/dist/utils/page-info-utils.js.map +1 -1
  114. package/package.json +1 -2
  115. package/plandocs/HUMAN_LIKE_IMPROVEMENTS.md +642 -0
  116. package/plandocs/MULTI_AGENT_ARCHITECTURE_REVIEW.md +844 -0
  117. package/plandocs/ORCHESTRATOR_MVP_SUMMARY.md +539 -0
  118. package/plandocs/PHASE1_ABSTRACTION_COMPLETE.md +241 -0
  119. package/plandocs/PHASE1_FINAL_STATUS.md +210 -0
  120. package/plandocs/PLANNING_SESSION_SUMMARY.md +372 -0
  121. package/plandocs/SCRIPT_CLEANUP_FEATURE.md +201 -0
  122. package/plandocs/SCRIPT_GENERATION_ARCHITECTURE.md +364 -0
  123. package/plandocs/SELECTOR_IMPROVEMENTS.md +139 -0
  124. package/src/credit-usage-service.ts +23 -5
  125. package/src/env-loader.ts +22 -0
  126. package/src/execution-service.ts +152 -42
  127. package/src/index.ts +169 -26
  128. package/src/llm-facade.ts +500 -126
  129. package/src/llm-provider.ts +43 -0
  130. package/src/model-constants.ts +23 -0
  131. package/src/orchestrator/index.ts +33 -0
  132. package/src/orchestrator/orchestrator-agent.ts +1042 -0
  133. package/src/orchestrator/tool-registry.ts +182 -0
  134. package/src/orchestrator/tools/check-page-ready.ts +75 -0
  135. package/src/orchestrator/tools/extract-data.ts +92 -0
  136. package/src/orchestrator/tools/index.ts +11 -0
  137. package/src/orchestrator/tools/inspect-page.ts +42 -0
  138. package/src/orchestrator/tools/recall-history.ts +72 -0
  139. package/src/orchestrator/tools/take-screenshot.ts +128 -0
  140. package/src/orchestrator/types.ts +200 -0
  141. package/src/playwright-mcp-service.ts +23 -5
  142. package/src/progress-reporter.ts +109 -0
  143. package/src/prompts.ts +606 -69
  144. package/src/providers/backend-proxy-llm-provider.ts +91 -0
  145. package/src/providers/local-llm-provider.ts +38 -0
  146. package/src/scenario-service.ts +83 -13
  147. package/src/scenario-worker-class.ts +740 -72
  148. package/src/script-utils.ts +50 -5
  149. package/src/types.ts +13 -1
  150. package/src/utils/browser-utils.ts +123 -51
  151. package/src/utils/page-info-utils.ts +210 -53
@@ -0,0 +1,120 @@
1
+ # Release 0.0.23 - Published to npm
2
+
3
+ ## Summary
4
+ Published `testchimp-runner-core@0.0.23` to npm registry and updated `testchimp-vs-extension` to use the published package instead of local file references.
5
+
6
+ ## Changes in 0.0.23
7
+
8
+ ### New Features
9
+ 1. **Script Cleanup Feature** - Final LLM-based cleanup pass to remove redundancies
10
+ 2. **Semantic Selector Preference** - Prioritize getByRole, getByLabel, etc. over auto-generated IDs
11
+ 3. **Playwright Expect Assertions** - Use expect() for verifications instead of manual checks
12
+ 4. **Focused Step Execution** - Only execute what's explicitly asked in each step
13
+
14
+ ### Improvements
15
+ 1. Enhanced selector generation priority in page-info-utils
16
+ 2. Improved orchestrator prompts for better code quality
17
+ 3. Fixed comment placement in generated scripts
18
+ 4. Made expect() available in command execution context
19
+ 5. Added comprehensive guidance to avoid extra assertions
20
+
21
+ ### Bug Fixes
22
+ 1. Fixed duplicate/orphaned comments in generated scripts
23
+ 2. Removed self-dependency from package.json
24
+ 3. Fixed comment ordering (now always appears before code)
25
+
26
+ ## Publishing Details
27
+
28
+ ### Version Update
29
+ - **Previous:** 0.0.22 (local tarball)
30
+ - **Current:** 0.0.23 (npm published)
31
+ - **Registry:** https://registry.npmjs.org/
32
+ - **Package Size:** 14.0 MB
33
+ - **Unpacked Size:** 14.8 MB
34
+ - **Files:** 166
35
+
36
+ ### Package Changes
37
+ **runner-core/package.json:**
38
+ - Updated version from 0.0.22 → 0.0.23
39
+ - Removed self-dependency on testchimp-runner-core
40
+
41
+ **vs-ext/package.json:**
42
+ - Changed from: `"testchimp-runner-core": "file:testchimp-runner-core-0.0.22.tgz"`
43
+ - Changed to: `"testchimp-runner-core": "^0.0.23"`
44
+
45
+ ### Cleanup Performed
46
+ - Removed all local .tgz tarball files
47
+ - Removed testchimp-runner-core@0.0.22 directory from vs-ext
48
+ - Clean installation from npm registry
49
+
50
+ ## Verification
51
+
52
+ ```bash
53
+ $ npm list testchimp-runner-core
54
+ testchimp-vs-extension@0.0.8
55
+ └── testchimp-runner-core@0.0.23
56
+ ```
57
+
58
+ ✅ **vs-ext successfully using published npm package**
59
+
60
+ ## Build Status
61
+
62
+ ✅ **runner-core**
63
+ - Clean build successful
64
+ - TypeScript compilation: ✓
65
+ - Published to npm: ✓
66
+
67
+ ✅ **vs-ext**
68
+ - Dependencies installed from npm: ✓
69
+ - Webpack production build: ✓ (492 KiB)
70
+ - Extension bundle: Ready
71
+
72
+ ## Benefits of npm Publishing
73
+
74
+ ### For Development
75
+ 1. **Version Control** - Clear versioning in package.json
76
+ 2. **Dependency Management** - Standard npm workflow
77
+ 3. **Faster Installs** - No need to rebuild tarball
78
+ 4. **Better CI/CD** - Can reference specific versions
79
+
80
+ ### For Distribution
81
+ 1. **Public Access** - Anyone can install via npm
82
+ 2. **Version History** - All versions tracked on npm
83
+ 3. **Automatic Updates** - Use semver ranges (^0.0.23)
84
+ 4. **No Local Files** - Cleaner repository
85
+
86
+ ## Next Steps
87
+
88
+ ### For Future Releases
89
+ 1. Update version in runner-core/package.json
90
+ 2. Build: `npm run build`
91
+ 3. Publish: `npm publish`
92
+ 4. Update vs-ext dependency to new version
93
+ 5. Install and rebuild vs-ext
94
+
95
+ ### Deployment
96
+ The vs-ext can now be:
97
+ - Packaged as .vsix with the npm-installed dependency
98
+ - Distributed without including runner-core tarball
99
+ - Updated independently by bumping the version range
100
+
101
+ ## Documentation
102
+
103
+ All features are documented in:
104
+ - `plandocs/SELECTOR_IMPROVEMENTS.md` - Selector preference strategy
105
+ - `plandocs/SCRIPT_CLEANUP_FEATURE.md` - Cleanup feature details
106
+ - This file - Release notes
107
+
108
+ ## Breaking Changes
109
+
110
+ None. All changes are backward compatible.
111
+
112
+ ## Migration Notes
113
+
114
+ For anyone using testchimp-runner-core@0.0.22:
115
+ 1. Update package.json to: `"testchimp-runner-core": "^0.0.23"`
116
+ 2. Run: `npm install`
117
+ 3. Rebuild your project
118
+
119
+ No code changes required - all improvements are in the core library.
120
+
@@ -0,0 +1,336 @@
1
+ # Vision-Based Diagnostic Analysis Improvements
2
+
3
+ ## Overview
4
+ Enhanced the test automation system to use screenshot-based vision analysis as a **diagnostic tool** to understand WHY failures occur and recommend better strategies based on visual reality vs DOM assumptions.
5
+
6
+ **Vision diagnostics are now utilized in BOTH:**
7
+ 1. **Script Generation** (`ScenarioWorker`) - When generating commands from scenarios
8
+ 2. **Script Repair/Execution** (`ExecutionService`) - When repairing failing scripts with AI
9
+
10
+ ## Problem Statement (From Logs)
11
+ 1. **Hallucinated Verification Targets**: Goal completion was creating fake sub-goals like "verify message was sent" and looking for non-existent elements like "Message sent" text
12
+ 2. **No Screenshot Analysis**: Vision mode was never triggering because LLM assessment always said "NO"
13
+
14
+ ## Solutions Implemented
15
+
16
+ ### 1. Fixed Hallucinated Verification Targets ✅
17
+
18
+ #### A. Goal Completion Check (`prompts.ts` lines 55-129)
19
+ **Changes:**
20
+ - System prompt: "Be EXTREMELY CONSERVATIVE - mark goals complete when PRIMARY action succeeds. DO NOT invent verification steps"
21
+ - Added golden rule: "If goal is SIMPLE ACTION and action SUCCEEDED, mark COMPLETE immediately"
22
+ - Explicit examples showing action goals complete after action succeeds (no verification needed)
23
+
24
+ **Example:**
25
+ ```
26
+ Before: "Click send button" → click succeeds → "INCOMPLETE - need to verify message sent"
27
+ After: "Click send button" → click succeeds → "COMPLETE ✅"
28
+ ```
29
+
30
+ #### B. Command Generation Anti-Hallucination (`prompts.ts` lines 215-225)
31
+ **New Section: "NEVER Hallucinate Verification Elements"**
32
+ - ONLY verify elements that ACTUALLY EXIST in current DOM state
33
+ - Don't invent success messages, confirmations, or sent indicators
34
+ - Use alternative verification: state changes, network, page load
35
+ - Stop trying to find elements after previous attempts failed
36
+
37
+ #### C. Smart Hallucination Detection (`llm-facade.ts` lines 573-599)
38
+ **Automatic Detection:**
39
+ - Detects when LLM repeatedly tries to find non-existent elements (2+ attempts)
40
+ - Shows "⚠️ HALLUCINATION ALERT" with guidance to stop and use alternatives
41
+ - Analyzes command patterns (getByText, toBeVisible) + errors (not found, timeout)
42
+
43
+ ### 2. Enabled Screenshot-Based Diagnostic Analysis 📸
44
+
45
+ #### A. Conservative Screenshot Trigger (`scenario-worker-class.ts` line 193)
46
+ ```typescript
47
+ // ONLY on attempt 2 (3rd attempt, after exactly 2 failures)
48
+ // This is the ONLY chance to use vision - must be absolutely necessary
49
+ if (attempt === 2 && lastError && !usedVisionMode)
50
+ ```
51
+
52
+ **Attempt Flow:**
53
+ - Attempt 0: First try (DOM-based)
54
+ - Attempt 1: Second try (DOM-based)
55
+ - **Attempt 2: Third try - Vision assessment (if truly needed)**
56
+ - Attempt 3: Fourth try (final, DOM-based)
57
+
58
+ #### B. Conservative Screenshot Assessment (`prompts.ts` lines 131-191)
59
+ **System Prompt:** "Be LIBERAL in recommending screenshots - visual context provides diagnostic insights DOM cannot"
60
+
61
+ **Diagnostic Value Framework:**
62
+ 1. Identify WHY attempts failed (DOM assumptions vs visual reality)
63
+ 2. Detect hallucinated elements (see if expected elements exist visually)
64
+ 3. Recommend better strategies (verification based on what's visible)
65
+ 4. Find visual blockers (overlays, modals, layout issues)
66
+ 5. Correct wrong assumptions (actual state vs expected state)
67
+
68
+ **Hallucination Detection in Assessment:**
69
+ - If "not found/timeout" errors + verification attempts → HIGH chance of hallucination
70
+ - Screenshot reveals if elements actually exist
71
+
72
+ #### C. Enhanced Vision Mode as Diagnostic Tool (`prompts.ts` lines 359-462)
73
+
74
+ **System Prompt:** "Analyze screenshot to understand WHY previous attempts failed and recommend BEST next step based on visual reality vs DOM assumptions"
75
+
76
+ **Three Primary Tasks:**
77
+ 1. **DEBUG WHY PREVIOUS ATTEMPTS FAILED** - Compare what you assumed vs what you SEE
78
+ 2. **IDENTIFY THE ROOT CAUSE** - Why did DOM-based approaches fail?
79
+ 3. **RECOMMEND SMARTER ALTERNATIVES** - What should we do instead?
80
+
81
+ **Critical Questions Framework:**
82
+
83
+ 🔍 **Visual vs DOM Reality Check:**
84
+ - What do you SEE vs what DOM suggested?
85
+ - Are elements you tried to find VISIBLE on screen?
86
+ - Are there visual indicators you missed?
87
+ - What's ACTUALLY present vs ASSUMED?
88
+
89
+ 🚫 **Why Did Previous Attempts Fail?**
90
+ - Looking for elements that DON'T EXIST? (hallucination)
91
+ - Wrong selectors for elements that ARE visible?
92
+ - Elements blocked/covered by overlays?
93
+ - Elements in different state than expected?
94
+ - Page in different state than assumed?
95
+
96
+ 💡 **What Should You Do Differently?**
97
+ - If verification elements don't exist: Use state-based verification
98
+ - If elements blocked: Remove blocker first
99
+ - If wrong selector: Use visual clues for better selectors
100
+ - If goal achieved: Confirm with simple wait/check
101
+
102
+ **Verification Strategy Based on Visual Reality:**
103
+
104
+ ```
105
+ IF you see success indicators in screenshot:
106
+ ✅ Use them: await expect(page.getByText('visible-text-here')).toBeVisible()
107
+
108
+ IF you DON'T see success indicators but action appears complete:
109
+ ✅ Use state-based checks:
110
+ - Button disabled check
111
+ - Form cleared/reset check
112
+ - URL changed check
113
+ - Network response verification
114
+ - Load state verification
115
+
116
+ IF previous attempts looked for non-existent elements:
117
+ ❌ STOP looking for them
118
+ ✅ Switch to alternative verification
119
+ ```
120
+
121
+ **Comparison Analysis Template:**
122
+ ```
123
+ "Based on screenshot analysis:
124
+ - DOM suggested: [what you thought was there]
125
+ - Visual reality: [what you actually see]
126
+ - Why previous failed: [root cause analysis]
127
+ - Better approach: [what to do instead]"
128
+ ```
129
+
130
+ #### D. Enhanced Diagnostic Logging (`llm-facade.ts` lines 313-328)
131
+
132
+ **Vision Mode Response Now Includes:**
133
+ - `visualInsights`: What screenshot revealed that DOM couldn't tell you
134
+ - `failureRootCause`: Why previous DOM-based attempts failed
135
+ - `recommendedAlternative`: Better verification/interaction strategy
136
+ - `reasoning`: Full diagnostic analysis
137
+
138
+ **Console Logging:**
139
+ ```
140
+ 📸 Visual insights: [what was discovered]
141
+ 🔍 Root cause analysis: [why it failed]
142
+ 💡 Recommended alternative: [what to do instead]
143
+ 🧠 Vision-based reasoning: [full analysis]
144
+ ```
145
+
146
+ ## Code Modularization
147
+
148
+ Vision diagnostics are properly modularized and reused across both flows:
149
+
150
+ 1. **`LLMFacade` Methods** (shared by both flows):
151
+ - `assessScreenshotNeed()` - Conservative assessment if screenshot would help
152
+ - `getVisionDiagnostics()` - Supervisor analyzes screenshot (gpt-4o)
153
+ - `generateCommandFromSupervisorInstructions()` - Worker generates command (gpt-4.1-mini)
154
+
155
+ 2. **Two-Step Supervisor Pattern** (used consistently):
156
+ ```typescript
157
+ // Step 1: Supervisor analyzes screenshot (expensive vision model)
158
+ const supervisorDiagnostics = await llmFacade.getVisionDiagnostics(...)
159
+
160
+ // Step 2: Use insights for action
161
+ // - In generation: Generate command from instructions
162
+ // - In repair: Enhance failure context with visual insights
163
+ ```
164
+
165
+ 3. **No Code Duplication**:
166
+ - Vision prompts defined once in `prompts.ts`
167
+ - LLM calls handled by `LLMFacade`
168
+ - Both flows use same vision assessment logic
169
+
170
+ ## Behavioral Changes
171
+
172
+ ### Script Generation - Before:
173
+ ```
174
+ 1. Click send button → succeeds
175
+ 2. Goal check → "INCOMPLETE - verify message sent" (hallucinated)
176
+ 3. Try: await expect(page.getByText('Message sent')).toBeVisible()
177
+ 4. Fail: Element not found
178
+ 5. Try: await page.getByRole('status').waitFor()
179
+ 6. Fail: Timeout
180
+ 7. Repeat until max failures
181
+ 8. Screenshot assessment → "NO, not needed"
182
+ 9. Vision mode → never triggers
183
+ ```
184
+
185
+ ### Script Generation - After:
186
+ ```
187
+ 1. Click send button → succeeds
188
+ 2. Goal check → "COMPLETE ✅" (action succeeded, no verification needed)
189
+ OR if verification truly needed but wrong approach:
190
+ 3. After 2 failures → Screenshot assessment
191
+ 4. Assessment → "YES - Diagnostic value: Visual reveals if success indicators exist"
192
+ 5. Vision mode activates with screenshot
193
+ 6. Diagnostic analysis:
194
+ - "DOM suggested: Success message would appear"
195
+ - "Visual reality: No success message visible, button is now disabled"
196
+ - "Root cause: Hallucinated verification element that doesn't exist"
197
+ - "Better approach: Check button disabled state instead"
198
+ 7. Generates: await expect(page.locator('button[name="Send"]')).toBeDisabled()
199
+ 8. Success ✅
200
+ ```
201
+
202
+ ### Script Repair - Before:
203
+ ```
204
+ 1. Script step fails: await page.click('button[name="Submit"]')
205
+ 2. AI Repair attempt 1: Try different selector → Fails
206
+ 3. AI Repair attempt 2: Try with wait → Fails
207
+ 4. AI Repair attempt 3: Try another approach → Fails
208
+ 5. Give up - repair failed
209
+ ```
210
+
211
+ ### Script Repair - After:
212
+ ```
213
+ 1. Script step fails: await page.click('button[name="Submit"]')
214
+ 2. AI Repair attempt 1: Try different selector → Fails
215
+ 3. AI Repair attempt 2: Try with wait → Fails
216
+ 4. After 2 failures → Screenshot assessment
217
+ 5. Assessment → "YES - Visual analysis can reveal why repairs are failing"
218
+ 6. Vision supervisor analyzes screenshot:
219
+ - "Visual analysis: Button is disabled and grayed out"
220
+ - "Root cause: Trying to click a disabled button"
221
+ - "Recommended approach: Wait for button to become enabled first"
222
+ 7. AI Repair attempt 3 with vision insights: Insert wait step before click
223
+ 8. Success ✅ (vision-aided repair)
224
+ ```
225
+
226
+ ## Cost Considerations
227
+
228
+ **Vision Mode (GPT-4o) Triggers in Both Flows:**
229
+
230
+ 1. **Script Generation** (`ScenarioWorker`):
231
+ - After 2 failed command generation attempts (3rd attempt)
232
+ - Only when LLM assessment says "YES"
233
+ - Prevents endless DOM-based retries on wrong assumptions
234
+
235
+ 2. **Script Repair** (`ExecutionService`):
236
+ - After 2 failed repair attempts (3rd/final repair attempt)
237
+ - Only when LLM assessment says "YES"
238
+ - Prevents wasted repair cycles on wrong strategy
239
+
240
+ **What You Get (Both Flows):**
241
+ - Root cause analysis of failures
242
+ - Visual vs DOM reality comparison
243
+ - Recommended alternative strategies
244
+ - Smart fallback only when truly needed
245
+ - Prevents wasted attempts on wrong approaches
246
+
247
+ ## Files Modified
248
+
249
+ 1. **`/runner-core/src/prompts.ts`**
250
+ - Enhanced goal completion check (lines 55-129)
251
+ - Enhanced screenshot assessment (lines 131-184)
252
+ - Enhanced vision mode prompt with diagnostics (lines 359-462)
253
+ - Added anti-hallucination sections
254
+
255
+ 2. **`/runner-core/src/llm-facade.ts`**
256
+ - Added hallucination detection (lines 573-599)
257
+ - Enhanced vision logging (lines 313-328)
258
+ - Vision methods: `assessScreenshotNeed`, `getVisionDiagnostics`, `generateCommandFromSupervisorInstructions`
259
+
260
+ 3. **`/runner-core/src/scenario-worker-class.ts`** (Script Generation)
261
+ - Vision fallback on attempt 2 (line 197)
262
+ - Two-step supervisor pattern for command generation (lines 197-241)
263
+
264
+ 4. **`/runner-core/src/execution-service.ts`** (Script Repair/Execution)
265
+ - Vision fallback on final repair attempt after 2 failures (lines 500-594)
266
+ - Vision-enhanced context for repair suggestions
267
+ - Same supervisor pattern for consistency
268
+
269
+ ## Testing Recommendations
270
+
271
+ ### Script Generation Tests
272
+
273
+ 1. **Test with messaging flow:**
274
+ - Verify "send message" steps complete without hallucinated verification
275
+ - Check if vision mode provides diagnostic insights when command generation fails
276
+
277
+ 2. **Test with form submission:**
278
+ - Ensure submit actions complete without looking for non-existent confirmations
279
+ - Verify alternative verification strategies are used
280
+
281
+ ### Script Repair Tests
282
+
283
+ 1. **Test with selector failures:**
284
+ - Run script with outdated selectors
285
+ - Verify vision diagnostics reveal actual element state
286
+ - Check that repairs use vision insights
287
+
288
+ 2. **Test with state-dependent failures:**
289
+ - Run script where timing/state causes failures
290
+ - Verify vision reveals actual page state (e.g., disabled buttons, loading states)
291
+ - Check that repairs address root cause
292
+
293
+ ### Monitor Both Flows
294
+
295
+ 1. **Vision mode activation:**
296
+ - Should trigger after 2 failures when truly needed (not for every failure)
297
+ - Check diagnostic logs for root cause analysis
298
+ - Verify recommended alternatives are sensible
299
+
300
+ 2. **Success patterns:**
301
+ - Look for "(vision-aided)" markers in success logs
302
+ - Track improvement in success rate after vision diagnostics added
303
+
304
+ ## Next Steps
305
+
306
+ 1. **Monitor logs for:**
307
+ - Reduced hallucination instances (generation flow)
308
+ - Vision mode diagnostic quality (both flows)
309
+ - Alternative verification strategies effectiveness (generation flow)
310
+ - Repair success rate improvement (repair flow)
311
+
312
+ 2. **Metrics to track:**
313
+ - Vision mode activation rate in generation vs repair
314
+ - Hallucination detection rate
315
+ - Test success rate improvement (generation)
316
+ - Repair success rate improvement (execution)
317
+ - Cost vs benefit of vision mode in each flow
318
+
319
+ 3. **Potential future enhancements:**
320
+ - Learn from vision diagnostics to improve DOM-only approaches
321
+ - Build a library of common visual patterns and solutions
322
+ - Optimize screenshot timing based on diagnostic value
323
+ - Consider vision diagnostics for other failure scenarios
324
+ - Share vision insights between generation and repair flows
325
+
326
+ ## Summary
327
+
328
+ **✅ Vision-based diagnostics are now properly integrated into BOTH:**
329
+ - **Script Generation** - Helps generate better commands when DOM info insufficient
330
+ - **Script Repair** - Helps diagnose why repairs fail and suggest better fixes
331
+
332
+ **✅ Properly modularized with no code duplication:**
333
+ - Shared `LLMFacade` methods
334
+ - Consistent two-step supervisor pattern
335
+ - Single source of truth for prompts and logic
336
+
@@ -15,7 +15,16 @@ export interface InsertCreditUsageResponse {
15
15
  export declare class CreditUsageService {
16
16
  private backendUrl;
17
17
  private authConfig;
18
+ private logger?;
18
19
  constructor(authConfig?: AuthConfig, backendUrl?: string);
20
+ /**
21
+ * Set a logger callback for capturing execution logs
22
+ */
23
+ setLogger(logger: (message: string, level?: 'log' | 'error' | 'warn') => void): void;
24
+ /**
25
+ * Log a message using the configured logger
26
+ */
27
+ private log;
19
28
  /**
20
29
  * Update authentication configuration
21
30
  */
@@ -1 +1 @@
1
- {"version":3,"file":"credit-usage-service.d.ts","sourceRoot":"","sources":["../src/credit-usage-service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAkB,MAAM,eAAe,CAAC;AAG3D,oBAAY,iBAAiB;IAC3B,2BAA2B,IAAI;IAC/B,aAAa,IAAI;IACjB,WAAW,IAAI;IACf,eAAe,IAAI;CACpB;AAED,MAAM,WAAW,wBAAwB;IACvC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,iBAAiB,CAAC;IACjC,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,yBAAyB;CAEzC;AAED,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,UAAU,CAAoB;gBAE1B,UAAU,CAAC,EAAE,UAAU,EAAE,UAAU,CAAC,EAAE,MAAM;IAaxD;;OAEG;IACH,aAAa,CAAC,UAAU,EAAE,UAAU,GAAG,IAAI;IAI3C;;OAEG;IACH,aAAa,IAAI,UAAU,GAAG,IAAI;IAIlC;;OAEG;IACG,iBAAiB,CACrB,OAAO,EAAE,MAAM,YAAI,EACnB,WAAW,EAAE,iBAAiB,EAC9B,KAAK,CAAC,EAAE,MAAM,GACb,OAAO,CAAC,yBAAyB,CAAC;IA8BrC;;OAEG;IACG,4BAA4B,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAUjE;;OAEG;IACG,oBAAoB,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAS1D"}
1
+ {"version":3,"file":"credit-usage-service.d.ts","sourceRoot":"","sources":["../src/credit-usage-service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAkB,MAAM,eAAe,CAAC;AAG3D,oBAAY,iBAAiB;IAC3B,2BAA2B,IAAI;IAC/B,aAAa,IAAI;IACjB,WAAW,IAAI;IACf,eAAe,IAAI;CACpB;AAED,MAAM,WAAW,wBAAwB;IACvC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,iBAAiB,CAAC;IACjC,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,yBAAyB;CAEzC;AAED,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,UAAU,CAAoB;IACtC,OAAO,CAAC,MAAM,CAAC,CAA8D;gBAEjE,UAAU,CAAC,EAAE,UAAU,EAAE,UAAU,CAAC,EAAE,MAAM;IAaxD;;OAEG;IACH,SAAS,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK,GAAG,OAAO,GAAG,MAAM,KAAK,IAAI,GAAG,IAAI;IAIpF;;OAEG;IACH,OAAO,CAAC,GAAG;IAOX;;OAEG;IACH,aAAa,CAAC,UAAU,EAAE,UAAU,GAAG,IAAI;IAI3C;;OAEG;IACH,aAAa,IAAI,UAAU,GAAG,IAAI;IAIlC;;OAEG;IACG,iBAAiB,CACrB,OAAO,EAAE,MAAM,YAAI,EACnB,WAAW,EAAE,iBAAiB,EAC9B,KAAK,CAAC,EAAE,MAAM,GACb,OAAO,CAAC,yBAAyB,CAAC;IA8BrC;;OAEG;IACG,4BAA4B,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAUjE;;OAEG;IACG,oBAAoB,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAS1D"}
@@ -27,6 +27,21 @@ class CreditUsageService {
27
27
  }
28
28
  this.authConfig = authConfig || null;
29
29
  }
30
+ /**
31
+ * Set a logger callback for capturing execution logs
32
+ */
33
+ setLogger(logger) {
34
+ this.logger = logger;
35
+ }
36
+ /**
37
+ * Log a message using the configured logger
38
+ */
39
+ log(message, level = 'log') {
40
+ if (this.logger) {
41
+ this.logger(message, level);
42
+ }
43
+ // No console fallback - logs are routed to consumer
44
+ }
30
45
  /**
31
46
  * Update authentication configuration
32
47
  */
@@ -64,7 +79,7 @@ class CreditUsageService {
64
79
  return response.data;
65
80
  }
66
81
  catch (error) {
67
- console.error('Credit usage report failed:', error);
82
+ this.log(`Credit usage report failed: ${error}`, 'error');
68
83
  throw new Error(`Credit usage report failed: ${error.message}`);
69
84
  }
70
85
  }
@@ -74,10 +89,10 @@ class CreditUsageService {
74
89
  async reportScriptGenerationCredit(jobId) {
75
90
  try {
76
91
  await this.reportCreditUsage(1, CreditUsageReason.SCRIPT_GENERATE, jobId);
77
- console.log(`Credit usage reported for script generation${jobId ? ` (job: ${jobId})` : ''}`);
92
+ this.log(`Credit usage reported for script generation${jobId ? ` (job: ${jobId})` : ''}`);
78
93
  }
79
94
  catch (error) {
80
- console.error('Failed to report script generation credit usage:', error);
95
+ this.log(`Failed to report script generation credit usage: ${error}`, 'error');
81
96
  // Don't throw - credit reporting should not break the main flow
82
97
  }
83
98
  }
@@ -87,10 +102,10 @@ class CreditUsageService {
87
102
  async reportAIRepairCredit(jobId) {
88
103
  try {
89
104
  await this.reportCreditUsage(1, CreditUsageReason.TEST_REPAIR, jobId);
90
- console.log(`Credit usage reported for AI repair${jobId ? ` (job: ${jobId})` : ''}`);
105
+ this.log(`Credit usage reported for AI repair${jobId ? ` (job: ${jobId})` : ''}`);
91
106
  }
92
107
  catch (error) {
93
- console.error('Failed to report AI repair credit usage:', error);
108
+ this.log(`Failed to report AI repair credit usage: ${error}`, 'error');
94
109
  // Don't throw - credit reporting should not break the main flow
95
110
  }
96
111
  }
@@ -1 +1 @@
1
- {"version":3,"file":"credit-usage-service.js","sourceRoot":"","sources":["../src/credit-usage-service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"credit-usage-service.js","sourceRoot":"","sources":["../src/credit-usage-service.ts"],"names":[],"mappings":"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"}
@@ -16,5 +16,10 @@ export declare function loadEnvConfig(): EnvConfig;
16
16
  * Get a specific environment variable
17
17
  */
18
18
  export declare function getEnvVar(key: keyof EnvConfig): string | undefined;
19
+ /**
20
+ * Check if we're running in development mode (localhost)
21
+ * Returns false for staging and production environments
22
+ */
23
+ export declare function isDevelopmentMode(): boolean;
19
24
  export {};
20
25
  //# sourceMappingURL=env-loader.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"env-loader.d.ts","sourceRoot":"","sources":["../src/env-loader.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,UAAU,SAAS;IACjB,qBAAqB,EAAE,MAAM,CAAC;CAC/B;AAID;;;GAGG;AACH,wBAAgB,aAAa,IAAI,SAAS,CA6EzC;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,SAAS,GAAG,MAAM,GAAG,SAAS,CAGlE"}
1
+ {"version":3,"file":"env-loader.d.ts","sourceRoot":"","sources":["../src/env-loader.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,UAAU,SAAS;IACjB,qBAAqB,EAAE,MAAM,CAAC;CAC/B;AAID;;;GAGG;AACH,wBAAgB,aAAa,IAAI,SAAS,CA6EzC;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,SAAS,GAAG,MAAM,GAAG,SAAS,CAGlE;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,IAAI,OAAO,CAgB3C"}
@@ -8,6 +8,7 @@
8
8
  Object.defineProperty(exports, "__esModule", { value: true });
9
9
  exports.loadEnvConfig = loadEnvConfig;
10
10
  exports.getEnvVar = getEnvVar;
11
+ exports.isDevelopmentMode = isDevelopmentMode;
11
12
  let cachedConfig = null;
12
13
  /**
13
14
  * Load environment configuration from the packaged env file
@@ -91,4 +92,24 @@ function getEnvVar(key) {
91
92
  const config = loadEnvConfig();
92
93
  return config[key];
93
94
  }
95
+ /**
96
+ * Check if we're running in development mode (localhost)
97
+ * Returns false for staging and production environments
98
+ */
99
+ function isDevelopmentMode() {
100
+ try {
101
+ const config = loadEnvConfig();
102
+ const backendUrl = config.TESTCHIMP_BACKEND_URL || '';
103
+ // Consider it development mode if:
104
+ // 1. Backend URL contains localhost or 127.0.0.1
105
+ // 2. NODE_ENV is explicitly set to 'development'
106
+ const isLocalhost = backendUrl.includes('localhost') || backendUrl.includes('127.0.0.1');
107
+ const isDevEnv = process.env.NODE_ENV === 'development';
108
+ return isLocalhost || isDevEnv;
109
+ }
110
+ catch (error) {
111
+ // If we can't determine, assume production for safety (suppress verbose logs)
112
+ return false;
113
+ }
114
+ }
94
115
  //# sourceMappingURL=env-loader.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"env-loader.js","sourceRoot":"","sources":["../src/env-loader.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"env-loader.js","sourceRoot":"","sources":["../src/env-loader.ts"],"names":[],"mappings":"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"}
@@ -1,22 +1,26 @@
1
1
  import { PlaywrightExecutionRequest, PlaywrightExecutionResponse, ScriptExecutionRequest, ScriptExecutionResponse } from './types';
2
2
  import { AuthConfig } from './auth-config';
3
+ import { LLMProvider } from './llm-provider';
4
+ import { ProgressReporter } from './progress-reporter';
3
5
  /**
4
6
  * Service for orchestrating Playwright script execution
5
7
  */
6
8
  export declare class ExecutionService {
7
9
  private playwrightService;
8
10
  private llmFacade;
11
+ private llmProvider;
12
+ private progressReporter?;
9
13
  private creditUsageService;
10
14
  private maxConcurrentExecutions;
11
15
  private activeExecutions;
12
16
  private logger?;
13
- constructor(authConfig?: AuthConfig, backendUrl?: string, maxConcurrentExecutions?: number);
17
+ constructor(authConfig?: AuthConfig, backendUrl?: string, maxConcurrentExecutions?: number, llmProvider?: LLMProvider, progressReporter?: ProgressReporter);
14
18
  /**
15
19
  * Set a logger callback for capturing execution logs
16
20
  */
17
21
  setLogger(logger: (message: string, level?: 'log' | 'error' | 'warn') => void): void;
18
22
  /**
19
- * Log a message using the configured logger or console
23
+ * Log a message using the configured logger
20
24
  */
21
25
  private log;
22
26
  /**
@@ -25,6 +29,7 @@ export declare class ExecutionService {
25
29
  initialize(): Promise<void>;
26
30
  /**
27
31
  * Set authentication configuration for the service
32
+ * Note: This recreates the LLM provider with new auth config
28
33
  */
29
34
  setAuthConfig(authConfig: AuthConfig): void;
30
35
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"execution-service.d.ts","sourceRoot":"","sources":["../src/execution-service.ts"],"names":[],"mappings":"AACA,OAAO,EACL,0BAA0B,EAC1B,2BAA2B,EAE3B,sBAAsB,EACtB,uBAAuB,EAKxB,MAAM,SAAS,CAAC;AAKjB,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAI3C;;GAEG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,iBAAiB,CAAoB;IAC7C,OAAO,CAAC,SAAS,CAAY;IAC7B,OAAO,CAAC,kBAAkB,CAAqB;IAC/C,OAAO,CAAC,uBAAuB,CAAS;IACxC,OAAO,CAAC,gBAAgB,CAAgC;IACxD,OAAO,CAAC,MAAM,CAAC,CAA8D;gBAEjE,UAAU,CAAC,EAAE,UAAU,EAAE,UAAU,CAAC,EAAE,MAAM,EAAE,uBAAuB,GAAE,MAAW;IAO9F;;OAEG;IACH,SAAS,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK,GAAG,OAAO,GAAG,MAAM,KAAK,IAAI,GAAG,IAAI;IAIpF;;OAEG;IACH,OAAO,CAAC,GAAG;IAcX;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAIjC;;OAEG;IACH,aAAa,CAAC,UAAU,EAAE,UAAU,GAAG,IAAI;IAM3C;;OAEG;IACG,aAAa,CAAC,OAAO,EAAE,sBAAsB,GAAG,OAAO,CAAC,uBAAuB,CAAC;IAkBtF;;OAEG;YACW,qBAAqB;IAmBnC;;OAEG;IACG,gBAAgB,CAAC,OAAO,EAAE,0BAA0B,GAAG,OAAO,CAAC,2BAA2B,CAAC;IAgCjG;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAsC7B;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAI5B;;OAEG;IACH,OAAO,IAAI,OAAO;YAIJ,UAAU;YAwDV,eAAe;YAsGf,oBAAoB;IAgBlC,OAAO,CAAC,4BAA4B;YA8CtB,iBAAiB;YAuOjB,eAAe;IAyB7B;;OAEG;IACH,OAAO,CAAC,aAAa;YAeP,oBAAoB;YAoDpB,oBAAoB;YAiBpB,mBAAmB;IAejC,OAAO,CAAC,mBAAmB;IA4B3B,OAAO,CAAC,yBAAyB;YA0CnB,0BAA0B;YAkF1B,iBAAiB;IA0D/B,OAAO,CAAC,qBAAqB;IAsB7B;;OAEG;YACW,iBAAiB;IAI/B;;OAEG;IACH,OAAO,CAAC,kBAAkB;CAkC3B"}
1
+ {"version":3,"file":"execution-service.d.ts","sourceRoot":"","sources":["../src/execution-service.ts"],"names":[],"mappings":"AACA,OAAO,EACL,0BAA0B,EAC1B,2BAA2B,EAE3B,sBAAsB,EACtB,uBAAuB,EAKxB,MAAM,SAAS,CAAC;AAKjB,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAI3C,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAGvD;;GAEG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,iBAAiB,CAAoB;IAC7C,OAAO,CAAC,SAAS,CAAY;IAC7B,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,gBAAgB,CAAC,CAAmB;IAC5C,OAAO,CAAC,kBAAkB,CAAqB;IAC/C,OAAO,CAAC,uBAAuB,CAAS;IACxC,OAAO,CAAC,gBAAgB,CAAgC;IACxD,OAAO,CAAC,MAAM,CAAC,CAA8D;gBAG3E,UAAU,CAAC,EAAE,UAAU,EACvB,UAAU,CAAC,EAAE,MAAM,EACnB,uBAAuB,GAAE,MAAW,EACpC,WAAW,CAAC,EAAE,WAAW,EACzB,gBAAgB,CAAC,EAAE,gBAAgB;IAarC;;OAEG;IACH,SAAS,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK,GAAG,OAAO,GAAG,MAAM,KAAK,IAAI,GAAG,IAAI;IAIpF;;OAEG;IACH,OAAO,CAAC,GAAG;IAOX;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAIjC;;;OAGG;IACH,aAAa,CAAC,UAAU,EAAE,UAAU,GAAG,IAAI;IAQ3C;;OAEG;IACG,aAAa,CAAC,OAAO,EAAE,sBAAsB,GAAG,OAAO,CAAC,uBAAuB,CAAC;IAkBtF;;OAEG;YACW,qBAAqB;IAmBnC;;OAEG;IACG,gBAAgB,CAAC,OAAO,EAAE,0BAA0B,GAAG,OAAO,CAAC,2BAA2B,CAAC;IAgCjG;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAsC7B;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAI5B;;OAEG;IACH,OAAO,IAAI,OAAO;YAIJ,UAAU;YAwDV,eAAe;YAsGf,oBAAoB;IAgBlC,OAAO,CAAC,4BAA4B;YA8CtB,iBAAiB;YAqUjB,eAAe;IA0B7B;;OAEG;IACH,OAAO,CAAC,aAAa;YAeP,oBAAoB;YAoDpB,oBAAoB;YAiBpB,mBAAmB;IAcjC,OAAO,CAAC,mBAAmB;IA4B3B,OAAO,CAAC,yBAAyB;YA0CnB,0BAA0B;YAkF1B,iBAAiB;IA0D/B,OAAO,CAAC,qBAAqB;IAyB7B;;OAEG;YACW,iBAAiB;IAI/B;;OAEG;IACH,OAAO,CAAC,kBAAkB;CAkC3B"}