cursorflow 1.3.0__tar.gz → 1.3.1__tar.gz
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.
- {cursorflow-1.3.0 → cursorflow-1.3.1}/PKG-INFO +28 -7
- {cursorflow-1.3.0 → cursorflow-1.3.1}/README.md +27 -6
- {cursorflow-1.3.0 → cursorflow-1.3.1}/cursorflow/cli.py +33 -11
- {cursorflow-1.3.0 → cursorflow-1.3.1}/docs/USER_MANUAL.md +137 -14
- {cursorflow-1.3.0 → cursorflow-1.3.1}/pyproject.toml +1 -1
- {cursorflow-1.3.0 → cursorflow-1.3.1}/LICENSE +0 -0
- {cursorflow-1.3.0 → cursorflow-1.3.1}/MANIFEST.in +0 -0
- {cursorflow-1.3.0 → cursorflow-1.3.1}/cursorflow/__init__.py +0 -0
- {cursorflow-1.3.0 → cursorflow-1.3.1}/cursorflow/auto_updater.py +0 -0
- {cursorflow-1.3.0 → cursorflow-1.3.1}/cursorflow/core/agent.py +0 -0
- {cursorflow-1.3.0 → cursorflow-1.3.1}/cursorflow/core/auth_handler.py +0 -0
- {cursorflow-1.3.0 → cursorflow-1.3.1}/cursorflow/core/browser_controller.py +0 -0
- {cursorflow-1.3.0 → cursorflow-1.3.1}/cursorflow/core/browser_engine.py +0 -0
- {cursorflow-1.3.0 → cursorflow-1.3.1}/cursorflow/core/css_iterator.py +0 -0
- {cursorflow-1.3.0 → cursorflow-1.3.1}/cursorflow/core/cursor_integration.py +0 -0
- {cursorflow-1.3.0 → cursorflow-1.3.1}/cursorflow/core/cursorflow.py +0 -0
- {cursorflow-1.3.0 → cursorflow-1.3.1}/cursorflow/core/error_correlator.py +0 -0
- {cursorflow-1.3.0 → cursorflow-1.3.1}/cursorflow/core/event_correlator.py +0 -0
- {cursorflow-1.3.0 → cursorflow-1.3.1}/cursorflow/core/file_change_monitor.py +0 -0
- {cursorflow-1.3.0 → cursorflow-1.3.1}/cursorflow/core/log_collector.py +0 -0
- {cursorflow-1.3.0 → cursorflow-1.3.1}/cursorflow/core/log_monitor.py +0 -0
- {cursorflow-1.3.0 → cursorflow-1.3.1}/cursorflow/core/mockup_comparator.py +0 -0
- {cursorflow-1.3.0 → cursorflow-1.3.1}/cursorflow/core/persistent_session.py +0 -0
- {cursorflow-1.3.0 → cursorflow-1.3.1}/cursorflow/core/report_generator.py +0 -0
- {cursorflow-1.3.0 → cursorflow-1.3.1}/cursorflow/log_sources/local_file.py +0 -0
- {cursorflow-1.3.0 → cursorflow-1.3.1}/cursorflow/log_sources/ssh_remote.py +0 -0
- {cursorflow-1.3.0 → cursorflow-1.3.1}/cursorflow/updater.py +0 -0
- {cursorflow-1.3.0 → cursorflow-1.3.1}/cursorflow.egg-info/SOURCES.txt +0 -0
- {cursorflow-1.3.0 → cursorflow-1.3.1}/examples/comprehensive_screenshot_example.py +0 -0
- {cursorflow-1.3.0 → cursorflow-1.3.1}/examples/mockup_comparison_example.py +0 -0
- {cursorflow-1.3.0 → cursorflow-1.3.1}/examples/opensas_example.py +0 -0
- {cursorflow-1.3.0 → cursorflow-1.3.1}/examples/react_example.py +0 -0
- {cursorflow-1.3.0 → cursorflow-1.3.1}/setup.cfg +0 -0
- {cursorflow-1.3.0 → cursorflow-1.3.1}/setup.py +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: cursorflow
|
3
|
-
Version: 1.3.
|
3
|
+
Version: 1.3.1
|
4
4
|
Summary: Complete page intelligence for AI-driven development - captures DOM, network, console, and performance data
|
5
5
|
Author-email: GeekWarrior Development <support@cursorflow.dev>
|
6
6
|
License-Expression: MIT
|
@@ -77,8 +77,12 @@ All data structured for AI consumption:
|
|
77
77
|
# Install
|
78
78
|
pip install cursorflow
|
79
79
|
|
80
|
-
# Test any
|
81
|
-
cursorflow test
|
80
|
+
# Test any page - captures everything automatically
|
81
|
+
cursorflow test --base-url http://localhost:3000 --actions '[
|
82
|
+
{"navigate": "/dashboard"},
|
83
|
+
{"wait_for": "#main-content"},
|
84
|
+
{"screenshot": "dashboard-loaded"}
|
85
|
+
]'
|
82
86
|
|
83
87
|
# Compare mockup to implementation
|
84
88
|
cursorflow compare-mockup https://mockup.com/design --base-url http://localhost:3000
|
@@ -134,14 +138,31 @@ results = await flow.css_iteration_persistent(
|
|
134
138
|
## 🔧 CLI Commands
|
135
139
|
|
136
140
|
```bash
|
137
|
-
# Test
|
138
|
-
cursorflow test
|
141
|
+
# Test any page with custom actions
|
142
|
+
cursorflow test --base-url http://localhost:3000 --actions '[
|
143
|
+
{"navigate": "/login"},
|
144
|
+
{"fill": {"selector": "#username", "value": "test@example.com"}},
|
145
|
+
{"fill": {"selector": "#password", "value": "password123"}},
|
146
|
+
{"click": "#login-button"},
|
147
|
+
{"wait_for": ".dashboard"},
|
148
|
+
{"screenshot": "logged-in"}
|
149
|
+
]'
|
150
|
+
|
151
|
+
# Simple page test (just navigate and screenshot)
|
152
|
+
cursorflow test --base-url http://localhost:3000 --path "/dashboard"
|
139
153
|
|
140
154
|
# Compare mockup to implementation
|
141
|
-
cursorflow compare-mockup https://mockup.com/design
|
155
|
+
cursorflow compare-mockup https://mockup.com/design \
|
156
|
+
--base-url http://localhost:3000 \
|
157
|
+
--viewports '[{"width": 1440, "height": 900, "name": "desktop"}]'
|
142
158
|
|
143
159
|
# Iterate on CSS improvements
|
144
|
-
cursorflow iterate-mockup https://mockup.com/design
|
160
|
+
cursorflow iterate-mockup https://mockup.com/design \
|
161
|
+
--base-url http://localhost:3000 \
|
162
|
+
--css-improvements '[
|
163
|
+
{"name": "spacing", "css": ".container { gap: 2rem; }"},
|
164
|
+
{"name": "colors", "css": ".button { background: blue; }"}
|
165
|
+
]'
|
145
166
|
```
|
146
167
|
|
147
168
|
## 🌐 Universal Framework Support
|
@@ -35,8 +35,12 @@ All data structured for AI consumption:
|
|
35
35
|
# Install
|
36
36
|
pip install cursorflow
|
37
37
|
|
38
|
-
# Test any
|
39
|
-
cursorflow test
|
38
|
+
# Test any page - captures everything automatically
|
39
|
+
cursorflow test --base-url http://localhost:3000 --actions '[
|
40
|
+
{"navigate": "/dashboard"},
|
41
|
+
{"wait_for": "#main-content"},
|
42
|
+
{"screenshot": "dashboard-loaded"}
|
43
|
+
]'
|
40
44
|
|
41
45
|
# Compare mockup to implementation
|
42
46
|
cursorflow compare-mockup https://mockup.com/design --base-url http://localhost:3000
|
@@ -92,14 +96,31 @@ results = await flow.css_iteration_persistent(
|
|
92
96
|
## 🔧 CLI Commands
|
93
97
|
|
94
98
|
```bash
|
95
|
-
# Test
|
96
|
-
cursorflow test
|
99
|
+
# Test any page with custom actions
|
100
|
+
cursorflow test --base-url http://localhost:3000 --actions '[
|
101
|
+
{"navigate": "/login"},
|
102
|
+
{"fill": {"selector": "#username", "value": "test@example.com"}},
|
103
|
+
{"fill": {"selector": "#password", "value": "password123"}},
|
104
|
+
{"click": "#login-button"},
|
105
|
+
{"wait_for": ".dashboard"},
|
106
|
+
{"screenshot": "logged-in"}
|
107
|
+
]'
|
108
|
+
|
109
|
+
# Simple page test (just navigate and screenshot)
|
110
|
+
cursorflow test --base-url http://localhost:3000 --path "/dashboard"
|
97
111
|
|
98
112
|
# Compare mockup to implementation
|
99
|
-
cursorflow compare-mockup https://mockup.com/design
|
113
|
+
cursorflow compare-mockup https://mockup.com/design \
|
114
|
+
--base-url http://localhost:3000 \
|
115
|
+
--viewports '[{"width": 1440, "height": 900, "name": "desktop"}]'
|
100
116
|
|
101
117
|
# Iterate on CSS improvements
|
102
|
-
cursorflow iterate-mockup https://mockup.com/design
|
118
|
+
cursorflow iterate-mockup https://mockup.com/design \
|
119
|
+
--base-url http://localhost:3000 \
|
120
|
+
--css-improvements '[
|
121
|
+
{"name": "spacing", "css": ".container { gap: 2rem; }"},
|
122
|
+
{"name": "colors", "css": ".button { background: blue; }"}
|
123
|
+
]'
|
103
124
|
```
|
104
125
|
|
105
126
|
## 🌐 Universal Framework Support
|
@@ -26,11 +26,14 @@ def main():
|
|
26
26
|
pass
|
27
27
|
|
28
28
|
@main.command()
|
29
|
-
@click.
|
30
|
-
|
31
|
-
|
29
|
+
@click.option('--base-url', '-u', required=True,
|
30
|
+
help='Base URL for testing (e.g., http://localhost:3000)')
|
31
|
+
@click.option('--path', '-p',
|
32
|
+
help='Simple path to navigate to (e.g., "/dashboard")')
|
32
33
|
@click.option('--actions', '-a',
|
33
34
|
help='JSON file with test actions, or inline JSON string')
|
35
|
+
@click.option('--output', '-o',
|
36
|
+
help='Output file for results (auto-generated if not specified)')
|
34
37
|
@click.option('--logs', '-l',
|
35
38
|
type=click.Choice(['local', 'ssh', 'docker', 'systemd']),
|
36
39
|
default='local',
|
@@ -39,7 +42,11 @@ def main():
|
|
39
42
|
help='Configuration file path')
|
40
43
|
@click.option('--verbose', '-v', is_flag=True,
|
41
44
|
help='Verbose output')
|
42
|
-
|
45
|
+
@click.option('--headless', is_flag=True, default=True,
|
46
|
+
help='Run browser in headless mode')
|
47
|
+
@click.option('--timeout', type=int, default=30,
|
48
|
+
help='Timeout in seconds for actions')
|
49
|
+
def test(base_url, path, actions, output, logs, config, verbose, headless, timeout):
|
43
50
|
"""Test UI flows and interactions with real-time log monitoring"""
|
44
51
|
|
45
52
|
if verbose:
|
@@ -65,14 +72,22 @@ def test(test_name, base_url, actions, logs, config, verbose):
|
|
65
72
|
except Exception as e:
|
66
73
|
console.print(f"[red]❌ Failed to load actions: {e}[/red]")
|
67
74
|
return
|
75
|
+
elif path:
|
76
|
+
# Simple path navigation
|
77
|
+
test_actions = [
|
78
|
+
{"navigate": path},
|
79
|
+
{"wait_for": "body"},
|
80
|
+
{"screenshot": "page_loaded"}
|
81
|
+
]
|
82
|
+
console.print(f"📋 Using simple path navigation to [cyan]{path}[/cyan]")
|
68
83
|
else:
|
69
|
-
# Default actions - just navigate and screenshot
|
84
|
+
# Default actions - just navigate to root and screenshot
|
70
85
|
test_actions = [
|
71
86
|
{"navigate": "/"},
|
72
87
|
{"wait_for": "body"},
|
73
88
|
{"screenshot": "baseline"}
|
74
89
|
]
|
75
|
-
console.print(f"📋 Using default actions (navigate + screenshot)")
|
90
|
+
console.print(f"📋 Using default actions (navigate to root + screenshot)")
|
76
91
|
|
77
92
|
# Load configuration
|
78
93
|
agent_config = {}
|
@@ -80,7 +95,8 @@ def test(test_name, base_url, actions, logs, config, verbose):
|
|
80
95
|
with open(config, 'r') as f:
|
81
96
|
agent_config = json.load(f)
|
82
97
|
|
83
|
-
|
98
|
+
test_description = path if path else "root page"
|
99
|
+
console.print(f"🎯 Testing [bold]{test_description}[/bold] at [blue]{base_url}[/blue]")
|
84
100
|
|
85
101
|
# Initialize CursorFlow (framework-agnostic)
|
86
102
|
try:
|
@@ -88,6 +104,7 @@ def test(test_name, base_url, actions, logs, config, verbose):
|
|
88
104
|
flow = CursorFlow(
|
89
105
|
base_url=base_url,
|
90
106
|
log_config={'source': logs, 'paths': ['logs/app.log']},
|
107
|
+
browser_config={'headless': headless, 'timeout': timeout},
|
91
108
|
**agent_config
|
92
109
|
)
|
93
110
|
except Exception as e:
|
@@ -99,7 +116,7 @@ def test(test_name, base_url, actions, logs, config, verbose):
|
|
99
116
|
console.print(f"🚀 Executing {len(test_actions)} actions...")
|
100
117
|
results = asyncio.run(flow.execute_and_collect(test_actions))
|
101
118
|
|
102
|
-
console.print(f"✅ Test completed: {
|
119
|
+
console.print(f"✅ Test completed: {test_description}")
|
103
120
|
console.print(f"📊 Browser events: {len(results.get('browser_events', []))}")
|
104
121
|
console.print(f"📋 Server logs: {len(results.get('server_logs', []))}")
|
105
122
|
console.print(f"📸 Screenshots: {len(results.get('artifacts', {}).get('screenshots', []))}")
|
@@ -110,11 +127,16 @@ def test(test_name, base_url, actions, logs, config, verbose):
|
|
110
127
|
console.print(f"⏰ Timeline events: {len(timeline)}")
|
111
128
|
|
112
129
|
# Save results to file for Cursor analysis
|
113
|
-
|
114
|
-
|
130
|
+
if not output:
|
131
|
+
# Auto-generate meaningful filename
|
132
|
+
session_id = results.get('session_id', 'unknown')
|
133
|
+
path_part = path.replace('/', '_') if path else 'root'
|
134
|
+
output = f"cursorflow_{path_part}_{session_id}.json"
|
135
|
+
|
136
|
+
with open(output, 'w') as f:
|
115
137
|
json.dump(results, f, indent=2, default=str)
|
116
138
|
|
117
|
-
console.print(f"💾 Full results saved to: [cyan]{
|
139
|
+
console.print(f"💾 Full results saved to: [cyan]{output}[/cyan]")
|
118
140
|
console.print(f"📁 Artifacts stored in: [cyan].cursorflow/artifacts/[/cyan]")
|
119
141
|
|
120
142
|
except Exception as e:
|
@@ -26,7 +26,7 @@
|
|
26
26
|
pip install cursorflow
|
27
27
|
|
28
28
|
# Test your app
|
29
|
-
cursorflow test
|
29
|
+
cursorflow test --base-url http://localhost:3000 --path "/dashboard"
|
30
30
|
```
|
31
31
|
|
32
32
|
**That's it!** CursorFlow captures screenshots, DOM data, network activity, console logs, and performance metrics automatically.
|
@@ -53,9 +53,9 @@ playwright install chromium # Optional - happens automatically
|
|
53
53
|
|
54
54
|
## 🎯 Basic Usage
|
55
55
|
|
56
|
-
### 1. Test Any
|
56
|
+
### 1. Test Any Page
|
57
57
|
```bash
|
58
|
-
cursorflow test
|
58
|
+
cursorflow test --base-url http://localhost:3000 --path "/dashboard"
|
59
59
|
```
|
60
60
|
|
61
61
|
### 2. Compare Design to Implementation
|
@@ -136,39 +136,162 @@ All data is structured for AI analysis:
|
|
136
136
|
|
137
137
|
### **Basic Testing**
|
138
138
|
```bash
|
139
|
-
#
|
140
|
-
cursorflow test
|
139
|
+
# Simple page test (navigate and screenshot)
|
140
|
+
cursorflow test --base-url http://localhost:3000 --path "/dashboard"
|
141
141
|
|
142
142
|
# Test with custom actions
|
143
|
-
cursorflow test
|
143
|
+
cursorflow test --base-url http://localhost:3000 --actions '[
|
144
144
|
{"navigate": "/login"},
|
145
|
-
{"fill": {"selector": "#username", "value": "test"}},
|
146
|
-
{"
|
147
|
-
{"
|
145
|
+
{"fill": {"selector": "#username", "value": "test@example.com"}},
|
146
|
+
{"fill": {"selector": "#password", "value": "password123"}},
|
147
|
+
{"click": "#login-button"},
|
148
|
+
{"wait_for": ".dashboard"},
|
149
|
+
{"screenshot": "logged-in"}
|
148
150
|
]'
|
151
|
+
|
152
|
+
# Test with all options
|
153
|
+
cursorflow test \
|
154
|
+
--base-url http://localhost:3000 \
|
155
|
+
--actions '[
|
156
|
+
{"navigate": "/products"},
|
157
|
+
{"wait_for": ".product-grid"},
|
158
|
+
{"click": ".filter-button"},
|
159
|
+
{"fill": {"selector": "#search", "value": "laptop"}},
|
160
|
+
{"click": "#apply-filter"},
|
161
|
+
{"wait": 2},
|
162
|
+
{"screenshot": "filtered-products"}
|
163
|
+
]' \
|
164
|
+
--output results.json \
|
165
|
+
--verbose
|
149
166
|
```
|
150
167
|
|
151
168
|
### **Mockup Comparison**
|
152
169
|
```bash
|
153
|
-
#
|
170
|
+
# Basic mockup comparison
|
154
171
|
cursorflow compare-mockup https://mockup.com/design \
|
155
172
|
--base-url http://localhost:3000
|
156
173
|
|
157
|
-
#
|
174
|
+
# Compare with multiple viewports
|
158
175
|
cursorflow compare-mockup https://mockup.com/design \
|
159
176
|
--base-url http://localhost:3000 \
|
160
177
|
--viewports '[
|
161
178
|
{"width": 1440, "height": 900, "name": "desktop"},
|
162
|
-
{"width": 768, "height": 1024, "name": "tablet"}
|
179
|
+
{"width": 768, "height": 1024, "name": "tablet"},
|
180
|
+
{"width": 375, "height": 667, "name": "mobile"}
|
163
181
|
]'
|
182
|
+
|
183
|
+
# Compare with custom actions on both mockup and implementation
|
184
|
+
cursorflow compare-mockup https://mockup.com/design \
|
185
|
+
--base-url http://localhost:3000 \
|
186
|
+
--mockup-actions '[
|
187
|
+
{"navigate": "/"},
|
188
|
+
{"click": "#menu-toggle"},
|
189
|
+
{"screenshot": "menu-open"}
|
190
|
+
]' \
|
191
|
+
--implementation-actions '[
|
192
|
+
{"navigate": "/"},
|
193
|
+
{"wait_for": "#main-nav"},
|
194
|
+
{"click": "#menu-toggle"},
|
195
|
+
{"wait": 1},
|
196
|
+
{"screenshot": "menu-open"}
|
197
|
+
]' \
|
198
|
+
--diff-threshold 0.1 \
|
199
|
+
--output comparison-results.json
|
164
200
|
```
|
165
201
|
|
166
202
|
### **CSS Iteration**
|
167
203
|
```bash
|
168
|
-
#
|
204
|
+
# Basic CSS iteration
|
205
|
+
cursorflow iterate-mockup https://mockup.com/design \
|
206
|
+
--base-url http://localhost:3000 \
|
207
|
+
--css-improvements '[
|
208
|
+
{"name": "spacing", "css": ".container { gap: 2rem; padding: 1.5rem; }"},
|
209
|
+
{"name": "colors", "css": ".button { background: #007bff; color: white; }"}
|
210
|
+
]'
|
211
|
+
|
212
|
+
# CSS iteration with custom base actions
|
213
|
+
cursorflow iterate-mockup https://mockup.com/design \
|
214
|
+
--base-url http://localhost:3000 \
|
215
|
+
--base-actions '[
|
216
|
+
{"navigate": "/dashboard"},
|
217
|
+
{"wait_for": "#main-content"},
|
218
|
+
{"screenshot": "baseline"}
|
219
|
+
]' \
|
220
|
+
--css-improvements '[
|
221
|
+
{"name": "improve-layout", "css": ".grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 1rem; }"},
|
222
|
+
{"name": "better-typography", "css": "h1 { font-size: 2.5rem; font-weight: 600; }"},
|
223
|
+
{"name": "enhanced-buttons", "css": ".btn { border-radius: 8px; box-shadow: 0 2px 4px rgba(0,0,0,0.1); }"}
|
224
|
+
]' \
|
225
|
+
--diff-threshold 0.05 \
|
226
|
+
--output iteration-results.json
|
227
|
+
|
228
|
+
# Load CSS improvements from file
|
169
229
|
cursorflow iterate-mockup https://mockup.com/design \
|
170
230
|
--base-url http://localhost:3000 \
|
171
|
-
--css-improvements improvements.json
|
231
|
+
--css-improvements @css-improvements.json
|
232
|
+
```
|
233
|
+
|
234
|
+
### **Complete CLI Options Reference**
|
235
|
+
|
236
|
+
#### **`cursorflow test` Options:**
|
237
|
+
```bash
|
238
|
+
cursorflow test [OPTIONS]
|
239
|
+
|
240
|
+
Required:
|
241
|
+
--base-url TEXT Base URL of the application to test
|
242
|
+
|
243
|
+
Optional:
|
244
|
+
--path TEXT Simple path to navigate to (e.g., "/dashboard")
|
245
|
+
--actions TEXT JSON array of actions to perform
|
246
|
+
--output TEXT Output file for results (default: prints to stdout)
|
247
|
+
--verbose Enable verbose logging
|
248
|
+
--headless Run browser in headless mode (default: true)
|
249
|
+
--timeout INTEGER Timeout in seconds for actions (default: 30)
|
250
|
+
```
|
251
|
+
|
252
|
+
#### **`cursorflow compare-mockup` Options:**
|
253
|
+
```bash
|
254
|
+
cursorflow compare-mockup MOCKUP_URL [OPTIONS]
|
255
|
+
|
256
|
+
Required:
|
257
|
+
MOCKUP_URL URL of the mockup/design to compare against
|
258
|
+
--base-url TEXT Base URL of the implementation
|
259
|
+
|
260
|
+
Optional:
|
261
|
+
--mockup-actions TEXT JSON array of actions for mockup
|
262
|
+
--implementation-actions TEXT JSON array of actions for implementation
|
263
|
+
--viewports TEXT JSON array of viewport configurations
|
264
|
+
--diff-threshold FLOAT Similarity threshold (0.0-1.0, default: 0.1)
|
265
|
+
--output TEXT Output file for comparison results
|
266
|
+
--verbose Enable verbose logging
|
267
|
+
```
|
268
|
+
|
269
|
+
#### **`cursorflow iterate-mockup` Options:**
|
270
|
+
```bash
|
271
|
+
cursorflow iterate-mockup MOCKUP_URL [OPTIONS]
|
272
|
+
|
273
|
+
Required:
|
274
|
+
MOCKUP_URL URL of the mockup/design to match
|
275
|
+
--base-url TEXT Base URL of the implementation
|
276
|
+
|
277
|
+
Optional:
|
278
|
+
--base-actions TEXT JSON array of base actions before CSS changes
|
279
|
+
--css-improvements TEXT JSON array of CSS improvements to test
|
280
|
+
--diff-threshold FLOAT Similarity threshold (0.0-1.0, default: 0.05)
|
281
|
+
--output TEXT Output file for iteration results
|
282
|
+
--verbose Enable verbose logging
|
283
|
+
```
|
284
|
+
|
285
|
+
#### **Action Types Reference:**
|
286
|
+
```json
|
287
|
+
{"navigate": "/path"} // Navigate to path
|
288
|
+
{"click": "#selector"} // Click element
|
289
|
+
{"fill": {"selector": "#input", "value": "text"}} // Fill input field
|
290
|
+
{"select": {"selector": "#dropdown", "value": "option"}} // Select dropdown option
|
291
|
+
{"wait": 2} // Wait seconds
|
292
|
+
{"wait_for": "#selector"} // Wait for element
|
293
|
+
{"screenshot": "name"} // Take screenshot
|
294
|
+
{"screenshot": "name", "full_page": true} // Full page screenshot
|
172
295
|
```
|
173
296
|
|
174
297
|
---
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
4
4
|
|
5
5
|
[project]
|
6
6
|
name = "cursorflow"
|
7
|
-
version = "1.3.
|
7
|
+
version = "1.3.1"
|
8
8
|
description = "Complete page intelligence for AI-driven development - captures DOM, network, console, and performance data"
|
9
9
|
authors = [
|
10
10
|
{name = "GeekWarrior Development", email = "support@cursorflow.dev"}
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|