cursorflow 2.7.8__tar.gz → 2.7.9__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.
Files changed (55) hide show
  1. {cursorflow-2.7.8 → cursorflow-2.7.9}/PKG-INFO +4 -1
  2. {cursorflow-2.7.8 → cursorflow-2.7.9}/README.md +3 -0
  3. {cursorflow-2.7.8 → cursorflow-2.7.9}/cursorflow/cli.py +55 -10
  4. {cursorflow-2.7.8 → cursorflow-2.7.9}/cursorflow/rules/cursorflow-usage.mdc +3 -1
  5. {cursorflow-2.7.8 → cursorflow-2.7.9}/docs/user/USAGE_GUIDE.md +43 -0
  6. {cursorflow-2.7.8 → cursorflow-2.7.9}/pyproject.toml +1 -1
  7. {cursorflow-2.7.8 → cursorflow-2.7.9}/LICENSE +0 -0
  8. {cursorflow-2.7.8 → cursorflow-2.7.9}/MANIFEST.in +0 -0
  9. {cursorflow-2.7.8 → cursorflow-2.7.9}/cursorflow/__init__.py +0 -0
  10. {cursorflow-2.7.8 → cursorflow-2.7.9}/cursorflow/auto_init.py +0 -0
  11. {cursorflow-2.7.8 → cursorflow-2.7.9}/cursorflow/auto_updater.py +0 -0
  12. {cursorflow-2.7.8 → cursorflow-2.7.9}/cursorflow/core/action_validator.py +0 -0
  13. {cursorflow-2.7.8 → cursorflow-2.7.9}/cursorflow/core/agent.py +0 -0
  14. {cursorflow-2.7.8 → cursorflow-2.7.9}/cursorflow/core/auth_handler.py +0 -0
  15. {cursorflow-2.7.8 → cursorflow-2.7.9}/cursorflow/core/browser_controller.py +0 -0
  16. {cursorflow-2.7.8 → cursorflow-2.7.9}/cursorflow/core/browser_engine.py +0 -0
  17. {cursorflow-2.7.8 → cursorflow-2.7.9}/cursorflow/core/config_validator.py +0 -0
  18. {cursorflow-2.7.8 → cursorflow-2.7.9}/cursorflow/core/css_iterator.py +0 -0
  19. {cursorflow-2.7.8 → cursorflow-2.7.9}/cursorflow/core/cursor_integration.py +0 -0
  20. {cursorflow-2.7.8 → cursorflow-2.7.9}/cursorflow/core/cursorflow.py +0 -0
  21. {cursorflow-2.7.8 → cursorflow-2.7.9}/cursorflow/core/data_presenter.py +0 -0
  22. {cursorflow-2.7.8 → cursorflow-2.7.9}/cursorflow/core/error_context_collector.py +0 -0
  23. {cursorflow-2.7.8 → cursorflow-2.7.9}/cursorflow/core/error_correlator.py +0 -0
  24. {cursorflow-2.7.8 → cursorflow-2.7.9}/cursorflow/core/event_correlator.py +0 -0
  25. {cursorflow-2.7.8 → cursorflow-2.7.9}/cursorflow/core/file_change_monitor.py +0 -0
  26. {cursorflow-2.7.8 → cursorflow-2.7.9}/cursorflow/core/hmr_detector.py +0 -0
  27. {cursorflow-2.7.8 → cursorflow-2.7.9}/cursorflow/core/json_utils.py +0 -0
  28. {cursorflow-2.7.8 → cursorflow-2.7.9}/cursorflow/core/log_collector.py +0 -0
  29. {cursorflow-2.7.8 → cursorflow-2.7.9}/cursorflow/core/log_monitor.py +0 -0
  30. {cursorflow-2.7.8 → cursorflow-2.7.9}/cursorflow/core/mockup_comparator.py +0 -0
  31. {cursorflow-2.7.8 → cursorflow-2.7.9}/cursorflow/core/output_manager.py +0 -0
  32. {cursorflow-2.7.8 → cursorflow-2.7.9}/cursorflow/core/persistent_session.py +0 -0
  33. {cursorflow-2.7.8 → cursorflow-2.7.9}/cursorflow/core/query_engine.py +0 -0
  34. {cursorflow-2.7.8 → cursorflow-2.7.9}/cursorflow/core/report_generator.py +0 -0
  35. {cursorflow-2.7.8 → cursorflow-2.7.9}/cursorflow/core/trace_manager.py +0 -0
  36. {cursorflow-2.7.8 → cursorflow-2.7.9}/cursorflow/install_cursorflow_rules.py +0 -0
  37. {cursorflow-2.7.8 → cursorflow-2.7.9}/cursorflow/log_sources/local_file.py +0 -0
  38. {cursorflow-2.7.8 → cursorflow-2.7.9}/cursorflow/log_sources/ssh_remote.py +0 -0
  39. {cursorflow-2.7.8 → cursorflow-2.7.9}/cursorflow/post_install.py +0 -0
  40. {cursorflow-2.7.8 → cursorflow-2.7.9}/cursorflow/rules/__init__.py +0 -0
  41. {cursorflow-2.7.8 → cursorflow-2.7.9}/cursorflow/rules/cursorflow-installation.mdc +0 -0
  42. {cursorflow-2.7.8 → cursorflow-2.7.9}/cursorflow/updater.py +0 -0
  43. {cursorflow-2.7.8 → cursorflow-2.7.9}/cursorflow.egg-info/SOURCES.txt +0 -0
  44. {cursorflow-2.7.8 → cursorflow-2.7.9}/examples/comprehensive_screenshot_example.py +0 -0
  45. {cursorflow-2.7.8 → cursorflow-2.7.9}/examples/element_inspection_example.py +0 -0
  46. {cursorflow-2.7.8 → cursorflow-2.7.9}/examples/element_measurement_example.py +0 -0
  47. {cursorflow-2.7.8 → cursorflow-2.7.9}/examples/enhanced_screenshot_example.py +0 -0
  48. {cursorflow-2.7.8 → cursorflow-2.7.9}/examples/hot_reload_css_iteration.py +0 -0
  49. {cursorflow-2.7.8 → cursorflow-2.7.9}/examples/mockup_comparison_example.py +0 -0
  50. {cursorflow-2.7.8 → cursorflow-2.7.9}/examples/opensas_example.py +0 -0
  51. {cursorflow-2.7.8 → cursorflow-2.7.9}/examples/react_example.py +0 -0
  52. {cursorflow-2.7.8 → cursorflow-2.7.9}/examples/responsive_testing_example.py +0 -0
  53. {cursorflow-2.7.8 → cursorflow-2.7.9}/examples/v2_comprehensive_demo.py +0 -0
  54. {cursorflow-2.7.8 → cursorflow-2.7.9}/setup.cfg +0 -0
  55. {cursorflow-2.7.8 → cursorflow-2.7.9}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: cursorflow
3
- Version: 2.7.8
3
+ Version: 2.7.9
4
4
  Summary: 🔥 Complete page intelligence for AI-driven development with Hot Reload Intelligence - captures DOM, network, console, performance, HMR events, and comprehensive page analysis
5
5
  Author-email: GeekWarrior Development <rbush@cooltheory.com>
6
6
  License-Expression: MIT
@@ -184,6 +184,7 @@ cursorflow test --use-session "user" \
184
184
  # Capture SSO auth (opens browser for manual login)
185
185
  cursorflow capture-auth --base-url http://localhost:3000 \
186
186
  --path /dashboard \
187
+ --browser chrome \
187
188
  --output google-sso.json
188
189
 
189
190
  # Use captured auth
@@ -191,6 +192,8 @@ cursorflow capture-auth --base-url http://localhost:3000 \
191
192
  cursorflow test --use-session "sso-user" --path /dashboard
192
193
  ```
193
194
 
195
+ **Tip:** Use `--browser chrome` on macOS for better window visibility
196
+
194
197
  **See:** [Complete Authentication Guide](docs/user/USAGE_GUIDE.md#authentication--session-management)
195
198
 
196
199
  ---
@@ -139,6 +139,7 @@ cursorflow test --use-session "user" \
139
139
  # Capture SSO auth (opens browser for manual login)
140
140
  cursorflow capture-auth --base-url http://localhost:3000 \
141
141
  --path /dashboard \
142
+ --browser chrome \
142
143
  --output google-sso.json
143
144
 
144
145
  # Use captured auth
@@ -146,6 +147,8 @@ cursorflow capture-auth --base-url http://localhost:3000 \
146
147
  cursorflow test --use-session "sso-user" --path /dashboard
147
148
  ```
148
149
 
150
+ **Tip:** Use `--browser chrome` on macOS for better window visibility
151
+
149
152
  **See:** [Complete Authentication Guide](docs/user/USAGE_GUIDE.md#authentication--session-management)
150
153
 
151
154
  ---
@@ -1121,7 +1121,8 @@ def sessions(subcommand, name):
1121
1121
  @click.option('--path', '-p', default='/', help='Path to navigate to after login (e.g., /dashboard)')
1122
1122
  @click.option('--output', '-o', default='auth-capture.json', help='Output file for captured auth state')
1123
1123
  @click.option('--wait', type=int, default=60, help='Seconds to wait for manual login (default: 60)')
1124
- def capture_auth(base_url, path, output, wait):
1124
+ @click.option('--browser', type=click.Choice(['chromium', 'chrome', 'firefox']), default='chromium', help='Browser to use (default: chromium)')
1125
+ def capture_auth(base_url, path, output, wait, browser):
1125
1126
  """
1126
1127
  Capture authentication state after manual SSO/OAuth login
1127
1128
 
@@ -1143,25 +1144,30 @@ def capture_auth(base_url, path, output, wait):
1143
1144
  # Capture Google SSO auth
1144
1145
  cursorflow capture-auth --base-url http://localhost:3000 --path /dashboard
1145
1146
 
1147
+ # Use system Chrome (more visible on macOS)
1148
+ cursorflow capture-auth -u http://localhost:3000 --browser chrome
1149
+
1146
1150
  # Capture with custom wait time
1147
1151
  cursorflow capture-auth -u http://localhost:3000 -p /dashboard --wait 120
1148
1152
 
1149
1153
  # Save to custom file
1150
1154
  cursorflow capture-auth -u http://localhost:3000 --output google-sso.json
1151
1155
  """
1152
- console.print(f"\n🔐 SSO Authentication Capture")
1156
+ console.print(f"\n🔐 [bold]SSO Authentication Capture[/bold]")
1153
1157
  console.print(f"📍 Base URL: [cyan]{base_url}[/cyan]")
1154
1158
  console.print(f"🎯 Target path: [cyan]{path}[/cyan]")
1155
1159
  console.print(f"⏱️ Wait time: [yellow]{wait}[/yellow] seconds")
1156
1160
  console.print(f"📄 Output file: [green]{output}[/green]\n")
1157
1161
 
1158
- console.print("📋 [bold]Instructions:[/bold]")
1159
- console.print(" 1. Browser will open to your application")
1160
- console.print(" 2. [yellow]Complete SSO login manually[/yellow] (Google, Microsoft, Okta, etc.)")
1162
+ console.print("📋 [bold yellow]Instructions:[/bold yellow]")
1163
+ console.print(" 1. [bold]A Chromium browser window will open[/bold]")
1164
+ console.print(" 2. [yellow]Complete SSO login manually[/yellow] in that browser window")
1161
1165
  console.print(" 3. Navigate to a protected page (e.g., /dashboard)")
1162
- console.print(" 4. [green]Press Enter[/green] when fully logged in")
1166
+ console.print(" 4. Return here and [green]press Enter[/green] when fully logged in")
1163
1167
  console.print(" 5. CursorFlow will capture all auth state\n")
1164
1168
 
1169
+ console.print("[bold red]⚠️ Look for the browser window - it may open behind other windows![/bold red]\n")
1170
+
1165
1171
  input("Press Enter to open browser and start capture...")
1166
1172
 
1167
1173
  try:
@@ -1169,14 +1175,53 @@ def capture_auth(base_url, path, output, wait):
1169
1175
  import json
1170
1176
 
1171
1177
  async def capture_process():
1178
+ console.print("\n🚀 Starting Playwright...")
1172
1179
  async with async_playwright() as p:
1180
+ # Select browser based on user choice
1181
+ if browser == 'chrome':
1182
+ browser_type = p.chromium
1183
+ channel = 'chrome' # Use system Chrome if available
1184
+ elif browser == 'firefox':
1185
+ browser_type = p.firefox
1186
+ channel = None
1187
+ else: # chromium
1188
+ browser_type = p.chromium
1189
+ channel = None
1190
+
1173
1191
  # Launch browser in HEADED mode (user needs to interact)
1174
- browser = await p.chromium.launch(headless=False)
1175
- context = await browser.new_context()
1192
+ console.print(f"🌐 Launching [bold]{browser}[/bold] browser (headed mode)...")
1193
+ console.print("[yellow]👀 Watch for browser window - it should appear shortly...[/yellow]")
1194
+
1195
+ try:
1196
+ launch_options = {
1197
+ 'headless': False,
1198
+ 'slow_mo': 50,
1199
+ 'args': ['--start-maximized']
1200
+ }
1201
+ if channel:
1202
+ launch_options['channel'] = channel
1203
+
1204
+ browser_instance = await browser_type.launch(**launch_options)
1205
+ except Exception as e:
1206
+ console.print(f"[red]❌ Failed to launch browser: {e}[/red]")
1207
+ console.print("\n💡 Try installing Chromium:")
1208
+ console.print(" [cyan]playwright install chromium[/cyan]")
1209
+ raise
1210
+
1211
+ # Create context with viewport to ensure it's visible
1212
+ context = await browser_instance.new_context(
1213
+ viewport={'width': 1280, 'height': 720}
1214
+ )
1176
1215
  page = await context.new_page()
1177
1216
 
1178
- console.print(f"\n🌐 Opening browser to: [cyan]{base_url}[/cyan]")
1217
+ # Bring page to front
1218
+ await page.bring_to_front()
1219
+
1220
+ console.print(f"\n✅ [bold green]Browser window opened![/bold green]")
1221
+ console.print(f" 👉 [bold]If you don't see it, check behind other windows or different desktop spaces[/bold]")
1222
+ console.print(f"\n🌐 Navigating to: [cyan]{base_url}[/cyan]...")
1179
1223
  await page.goto(base_url)
1224
+ console.print(f"✅ Page loaded!")
1180
1225
 
1181
1226
  console.print(f"\n⏳ [yellow]Complete your SSO login in the browser...[/yellow]")
1182
1227
  console.print(f" Waiting up to {wait} seconds...")
@@ -1259,7 +1304,7 @@ def capture_auth(base_url, path, output, wait):
1259
1304
  console.print(f'\n {{\n "auth": {{\n "method": "cookies",\n "cookies": [... paste here ...]\n }}\n }}\n')
1260
1305
  console.print(f" 4. Test with: [cyan]cursorflow test --use-session sso-user[/cyan]\n")
1261
1306
 
1262
- await browser.close()
1307
+ await browser_instance.close()
1263
1308
 
1264
1309
  asyncio.run(capture_process())
1265
1310
 
@@ -1084,9 +1084,11 @@ cursorflow test --actions '[
1084
1084
  # 1. Capture SSO auth (opens browser, you login manually)
1085
1085
  cursorflow capture-auth --base-url http://localhost:3000 \
1086
1086
  --path /dashboard \
1087
+ --browser chrome \
1087
1088
  --output google-sso.json
1088
1089
 
1089
- # Browser opens, you complete SSO login, CursorFlow captures cookies
1090
+ # Browser opens (use --browser chrome for better visibility on macOS)
1091
+ # You complete SSO login, CursorFlow captures cookies
1090
1092
 
1091
1093
  # 2. Copy cookies from google-sso.json to .cursorflow/config.json:
1092
1094
  {
@@ -1056,6 +1056,31 @@ Clicked submit: button[type='submit']
1056
1056
  cat .cursorflow/sessions/test_session.json | python3 -m json.tool
1057
1057
  ```
1058
1058
 
1059
+ **Problem: "Browser not appearing" (capture-auth)**
1060
+
1061
+ **Solution:**
1062
+
1063
+ The browser IS launching but may be hidden by macOS window management:
1064
+
1065
+ 1. **Use system Chrome** (more visible):
1066
+ ```bash
1067
+ cursorflow capture-auth --base-url http://localhost:3000 \
1068
+ --browser chrome \
1069
+ --path /dashboard
1070
+ ```
1071
+
1072
+ 2. **Check all desktop spaces**:
1073
+ - Press F3 or swipe up with 3 fingers (Mission Control)
1074
+ - Look for Chromium/Chrome window
1075
+
1076
+ 3. **Check your Dock**:
1077
+ - Look for Chromium icon that appeared
1078
+ - Click to bring window forward
1079
+
1080
+ 4. **Verify browser launched**:
1081
+ - Look for "✅ Browser opened!" in terminal output
1082
+ - If you see this, browser is running somewhere
1083
+
1059
1084
  ---
1060
1085
 
1061
1086
  #### **Advanced Authentication Scenarios**
@@ -1161,6 +1186,12 @@ cursorflow capture-auth --base-url http://localhost:3000 \
1161
1186
  --path /dashboard \
1162
1187
  --output sso-auth.json
1163
1188
 
1189
+ # Use system Chrome for better visibility (recommended for macOS)
1190
+ cursorflow capture-auth --base-url http://localhost:3000 \
1191
+ --path /dashboard \
1192
+ --browser chrome \
1193
+ --output sso-auth.json
1194
+
1164
1195
  # This opens a browser, lets you login, then captures:
1165
1196
  # - All cookies (including third-party cookies if needed)
1166
1197
  # - localStorage state
@@ -1168,6 +1199,18 @@ cursorflow capture-auth --base-url http://localhost:3000 \
1168
1199
  # - Any tokens or auth data
1169
1200
  ```
1170
1201
 
1202
+ **Command Options:**
1203
+ - `--base-url`: Your application URL
1204
+ - `--path`: Page to navigate to after login (default: `/`)
1205
+ - `--output`: File to save auth state (default: `auth-capture.json`)
1206
+ - `--browser`: Browser to use - `chromium`, `chrome`, or `firefox` (default: `chromium`)
1207
+ - `--wait`: Maximum seconds to wait for login (default: `60`)
1208
+
1209
+ **Browser Visibility:**
1210
+ - Use `--browser chrome` on macOS for better window visibility
1211
+ - Browser opens maximized in headed mode
1212
+ - If you don't see it, check other desktop spaces or behind windows
1213
+
1171
1214
  **Step 3: Use captured auth in config**
1172
1215
  ```json
1173
1216
  {
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "cursorflow"
7
- version = "2.7.8"
7
+ version = "2.7.9"
8
8
  description = "🔥 Complete page intelligence for AI-driven development with Hot Reload Intelligence - captures DOM, network, console, performance, HMR events, and comprehensive page analysis"
9
9
  authors = [
10
10
  {name = "GeekWarrior Development", email = "rbush@cooltheory.com"}
File without changes
File without changes
File without changes
File without changes