cursorflow 2.7.8__py3-none-any.whl → 2.7.9__py3-none-any.whl

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/cli.py CHANGED
@@ -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
  {
@@ -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
  ---
@@ -1,7 +1,7 @@
1
1
  cursorflow/__init__.py,sha256=2V9xzG2tYxVWOTmSw2v9Jdbr7lSrMi_y2SMUMuNZdvw,2990
2
2
  cursorflow/auto_init.py,sha256=dXQaXXiXe4wkUP-jd8fcJ5fYVt7ASdTb47b7SzXymOM,6122
3
3
  cursorflow/auto_updater.py,sha256=oQ12TIMZ6Cm3HF-x9iRWFtvOLkRh-JWPqitS69-4roE,7851
4
- cursorflow/cli.py,sha256=Tt3I9d6SFplJjM4UPdxXklGjh1kt511-irE_jqDAw_A,87342
4
+ cursorflow/cli.py,sha256=M9TVyDEyi-2WVG4FxF2eAld9o0f35mbNBVFJeZ5Cyug,89736
5
5
  cursorflow/install_cursorflow_rules.py,sha256=DsZ0680y9JMuTKFXjdgYtOKIEAjBMsdwL8LmA9WEb5A,11864
6
6
  cursorflow/post_install.py,sha256=WieBiKWG0qBAQpF8iMVWUyb9Fr2Xky9qECTMPrlAbpE,2678
7
7
  cursorflow/updater.py,sha256=SroSQHQi5cYyzcOK_bf-WzmQmE7yeOs8qo3r__j-Z6E,19583
@@ -33,10 +33,10 @@ cursorflow/log_sources/local_file.py,sha256=GVnhsaifIdc41twXwbxRM9-fBeRDsknDpk5I
33
33
  cursorflow/log_sources/ssh_remote.py,sha256=_Kwh0bhRpKgq-0c98oaX2hN6h9cT-wCHlqY5NiWVCoY,8388
34
34
  cursorflow/rules/__init__.py,sha256=gPcA-IkhXj03sl7cvZV0wwo7CtEkcyuKs4y0F5oQbqE,458
35
35
  cursorflow/rules/cursorflow-installation.mdc,sha256=D55pzzDPAVVbE3gAtKPUGoT-2fvB-FI2l6yrTdzUIEo,10208
36
- cursorflow/rules/cursorflow-usage.mdc,sha256=wv7EOeybBUmgYGux9yE_8SWAgoNYa5DfbT5sC44WNOU,38768
37
- cursorflow-2.7.8.dist-info/licenses/LICENSE,sha256=e4QbjAsj3bW-xgQOvQelr8sGLYDoqc48k6cKgCr_pBU,1080
38
- cursorflow-2.7.8.dist-info/METADATA,sha256=aCPcMbLb-PrXzfCqebLSdwjW17Fs33sRVteAa81uRlM,21237
39
- cursorflow-2.7.8.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
40
- cursorflow-2.7.8.dist-info/entry_points.txt,sha256=-Ed_n4Uff7wClEtWS-Py6xmQabecB9f0QAOjX0w7ljA,51
41
- cursorflow-2.7.8.dist-info/top_level.txt,sha256=t1UZwRyZP4u-ng2CEcNHmk_ZT4ibQxoihB2IjTF7ovc,11
42
- cursorflow-2.7.8.dist-info/RECORD,,
36
+ cursorflow/rules/cursorflow-usage.mdc,sha256=b1hhZ9S6Oc5bElTM75QOLIgwbX0jCc1_25MwEd8Z--k,38844
37
+ cursorflow-2.7.9.dist-info/licenses/LICENSE,sha256=e4QbjAsj3bW-xgQOvQelr8sGLYDoqc48k6cKgCr_pBU,1080
38
+ cursorflow-2.7.9.dist-info/METADATA,sha256=9wRJgyI0SRgdHxsYH0Zq5bywy5bNwP1RYP33yDDsS-U,21329
39
+ cursorflow-2.7.9.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
40
+ cursorflow-2.7.9.dist-info/entry_points.txt,sha256=-Ed_n4Uff7wClEtWS-Py6xmQabecB9f0QAOjX0w7ljA,51
41
+ cursorflow-2.7.9.dist-info/top_level.txt,sha256=t1UZwRyZP4u-ng2CEcNHmk_ZT4ibQxoihB2IjTF7ovc,11
42
+ cursorflow-2.7.9.dist-info/RECORD,,