cursorflow 2.1.5__tar.gz → 2.1.6__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 (48) hide show
  1. {cursorflow-2.1.5 → cursorflow-2.1.6}/FIRST_TIME_SETUP.md +10 -7
  2. {cursorflow-2.1.5 → cursorflow-2.1.6}/PKG-INFO +5 -2
  3. {cursorflow-2.1.5 → cursorflow-2.1.6}/README.md +4 -1
  4. {cursorflow-2.1.5 → cursorflow-2.1.6}/cursorflow/__init__.py +1 -1
  5. {cursorflow-2.1.5 → cursorflow-2.1.6}/cursorflow/auto_init.py +17 -13
  6. {cursorflow-2.1.5 → cursorflow-2.1.6}/cursorflow/cli.py +19 -12
  7. {cursorflow-2.1.5 → cursorflow-2.1.6}/cursorflow/install_cursorflow_rules.py +14 -11
  8. {cursorflow-2.1.5 → cursorflow-2.1.6}/cursorflow/rules/cursorflow-installation.mdc +1 -1
  9. {cursorflow-2.1.5 → cursorflow-2.1.6}/cursorflow/updater.py +4 -3
  10. {cursorflow-2.1.5 → cursorflow-2.1.6}/pyproject.toml +1 -1
  11. {cursorflow-2.1.5 → cursorflow-2.1.6}/LICENSE +0 -0
  12. {cursorflow-2.1.5 → cursorflow-2.1.6}/MANIFEST.in +0 -0
  13. {cursorflow-2.1.5 → cursorflow-2.1.6}/POST_INSTALL_MESSAGE.txt +0 -0
  14. {cursorflow-2.1.5 → cursorflow-2.1.6}/cursorflow/auto_updater.py +0 -0
  15. {cursorflow-2.1.5 → cursorflow-2.1.6}/cursorflow/core/agent.py +0 -0
  16. {cursorflow-2.1.5 → cursorflow-2.1.6}/cursorflow/core/auth_handler.py +0 -0
  17. {cursorflow-2.1.5 → cursorflow-2.1.6}/cursorflow/core/browser_controller.py +0 -0
  18. {cursorflow-2.1.5 → cursorflow-2.1.6}/cursorflow/core/browser_engine.py +0 -0
  19. {cursorflow-2.1.5 → cursorflow-2.1.6}/cursorflow/core/css_iterator.py +0 -0
  20. {cursorflow-2.1.5 → cursorflow-2.1.6}/cursorflow/core/cursor_integration.py +0 -0
  21. {cursorflow-2.1.5 → cursorflow-2.1.6}/cursorflow/core/cursorflow.py +0 -0
  22. {cursorflow-2.1.5 → cursorflow-2.1.6}/cursorflow/core/error_context_collector.py +0 -0
  23. {cursorflow-2.1.5 → cursorflow-2.1.6}/cursorflow/core/error_correlator.py +0 -0
  24. {cursorflow-2.1.5 → cursorflow-2.1.6}/cursorflow/core/event_correlator.py +0 -0
  25. {cursorflow-2.1.5 → cursorflow-2.1.6}/cursorflow/core/file_change_monitor.py +0 -0
  26. {cursorflow-2.1.5 → cursorflow-2.1.6}/cursorflow/core/hmr_detector.py +0 -0
  27. {cursorflow-2.1.5 → cursorflow-2.1.6}/cursorflow/core/log_collector.py +0 -0
  28. {cursorflow-2.1.5 → cursorflow-2.1.6}/cursorflow/core/log_monitor.py +0 -0
  29. {cursorflow-2.1.5 → cursorflow-2.1.6}/cursorflow/core/mockup_comparator.py +0 -0
  30. {cursorflow-2.1.5 → cursorflow-2.1.6}/cursorflow/core/persistent_session.py +0 -0
  31. {cursorflow-2.1.5 → cursorflow-2.1.6}/cursorflow/core/report_generator.py +0 -0
  32. {cursorflow-2.1.5 → cursorflow-2.1.6}/cursorflow/core/trace_manager.py +0 -0
  33. {cursorflow-2.1.5 → cursorflow-2.1.6}/cursorflow/log_sources/local_file.py +0 -0
  34. {cursorflow-2.1.5 → cursorflow-2.1.6}/cursorflow/log_sources/ssh_remote.py +0 -0
  35. {cursorflow-2.1.5 → cursorflow-2.1.6}/cursorflow/post_install.py +0 -0
  36. {cursorflow-2.1.5 → cursorflow-2.1.6}/cursorflow/rules/__init__.py +0 -0
  37. {cursorflow-2.1.5 → cursorflow-2.1.6}/cursorflow/rules/cursorflow-usage.mdc +0 -0
  38. {cursorflow-2.1.5 → cursorflow-2.1.6}/cursorflow.egg-info/SOURCES.txt +0 -0
  39. {cursorflow-2.1.5 → cursorflow-2.1.6}/docs/USER_MANUAL.md +0 -0
  40. {cursorflow-2.1.5 → cursorflow-2.1.6}/examples/comprehensive_screenshot_example.py +0 -0
  41. {cursorflow-2.1.5 → cursorflow-2.1.6}/examples/enhanced_screenshot_example.py +0 -0
  42. {cursorflow-2.1.5 → cursorflow-2.1.6}/examples/mockup_comparison_example.py +0 -0
  43. {cursorflow-2.1.5 → cursorflow-2.1.6}/examples/opensas_example.py +0 -0
  44. {cursorflow-2.1.5 → cursorflow-2.1.6}/examples/react_example.py +0 -0
  45. {cursorflow-2.1.5 → cursorflow-2.1.6}/examples/responsive_testing_example.py +0 -0
  46. {cursorflow-2.1.5 → cursorflow-2.1.6}/examples/v2_comprehensive_demo.py +0 -0
  47. {cursorflow-2.1.5 → cursorflow-2.1.6}/setup.cfg +0 -0
  48. {cursorflow-2.1.5 → cursorflow-2.1.6}/setup.py +0 -0
@@ -23,13 +23,16 @@ This sets up CursorFlow in your specific project:
23
23
  ```bash
24
24
  cd /path/to/your/project
25
25
  cursorflow install-rules
26
+
27
+ # Or for automation/CI (skip prompts)
28
+ cursorflow install-rules --yes
26
29
  ```
27
30
 
28
31
  **What this creates:**
29
32
  - `.cursor/rules/` - Cursor AI integration rules (tells Cursor how to use CursorFlow)
30
- - `cursorflow-config.json` - Project-specific settings (base URL, log paths, etc.)
33
+ - `.cursorflow/config.json` - Project-specific settings (base URL, log paths, etc.)
31
34
  - `.cursorflow/` - Artifacts directory (screenshots, sessions, test results)
32
- - `.gitignore` entries - Excludes CursorFlow artifacts from version control
35
+ - `.gitignore` entries - Excludes entire `.cursorflow/` directory from version control
33
36
 
34
37
  ## 🤔 Why Two Steps?
35
38
 
@@ -68,7 +71,7 @@ Copies usage rules that teach Cursor AI how to use CursorFlow:
68
71
  - `cursorflow-usage.mdc` - How to run tests and analyze results
69
72
  - `cursorflow-installation.mdc` - Installation and setup guidance
70
73
 
71
- ### 2. Configuration Template (`cursorflow-config.json`)
74
+ ### 2. Configuration File (`.cursorflow/config.json`)
72
75
  Auto-detects your project type and creates smart defaults:
73
76
 
74
77
  ```json
@@ -102,10 +105,10 @@ your-project/
102
105
  │ ├── cursorflow-usage.mdc
103
106
  │ └── cursorflow-installation.mdc
104
107
  ├── .cursorflow/
108
+ │ ├── config.json
105
109
  │ ├── artifacts/
106
110
  │ ├── sessions/
107
111
  │ └── version_info.json
108
- ├── cursorflow-config.json
109
112
  └── .gitignore (updated with CursorFlow entries)
110
113
  ```
111
114
 
@@ -155,7 +158,7 @@ cursorflow --version
155
158
  ls -la .cursor/rules/
156
159
  # Should show: cursorflow-usage.mdc, cursorflow-installation.mdc
157
160
 
158
- ls -la cursorflow-config.json
161
+ ls -la .cursorflow/config.json
159
162
  # Should exist
160
163
 
161
164
  ls -la .cursorflow/
@@ -199,9 +202,9 @@ ls -la .cursorflow/
199
202
  - [ ] Run tests
200
203
 
201
204
  3. **Version control:**
202
- - Commit `cursorflow-config.json` (team settings)
203
- - ❌ Don't commit `.cursorflow/` (artifacts, generated per-developer)
205
+ - Don't commit `.cursorflow/` (config, artifacts, all per-developer)
204
206
  - ✅ Commit `.cursor/rules/` (Cursor AI integration)
207
+ - 💡 Each dev runs `cursorflow install-rules` to create their own config
205
208
 
206
209
  ## 🎯 Remember
207
210
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: cursorflow
3
- Version: 2.1.5
3
+ Version: 2.1.6
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
@@ -148,11 +148,14 @@ playwright install chromium
148
148
  ```bash
149
149
  cd /path/to/your/project
150
150
  cursorflow install-rules
151
+
152
+ # Or skip prompts for automation/CI
153
+ cursorflow install-rules --yes
151
154
  ```
152
155
 
153
156
  This creates:
154
157
  - `.cursor/rules/` - Cursor AI integration rules
155
- - `cursorflow-config.json` - Project-specific configuration
158
+ - `.cursorflow/config.json` - Project-specific configuration
156
159
  - `.cursorflow/` - Artifacts and session storage
157
160
  - `.gitignore` entries for CursorFlow artifacts
158
161
 
@@ -103,11 +103,14 @@ playwright install chromium
103
103
  ```bash
104
104
  cd /path/to/your/project
105
105
  cursorflow install-rules
106
+
107
+ # Or skip prompts for automation/CI
108
+ cursorflow install-rules --yes
106
109
  ```
107
110
 
108
111
  This creates:
109
112
  - `.cursor/rules/` - Cursor AI integration rules
110
- - `cursorflow-config.json` - Project-specific configuration
113
+ - `.cursorflow/config.json` - Project-specific configuration
111
114
  - `.cursorflow/` - Artifacts and session storage
112
115
  - `.gitignore` entries for CursorFlow artifacts
113
116
 
@@ -56,7 +56,7 @@ def _get_version():
56
56
  pass
57
57
 
58
58
  # Fallback version - should match pyproject.toml
59
- return "2.1.5"
59
+ return "2.1.6"
60
60
 
61
61
  __version__ = _get_version()
62
62
  __author__ = "GeekWarrior Development"
@@ -17,7 +17,7 @@ def is_project_initialized(project_dir: Optional[str] = None) -> bool:
17
17
 
18
18
  Returns True if:
19
19
  - .cursor/rules/ contains CursorFlow rules
20
- - cursorflow-config.json exists
20
+ - .cursorflow/config.json exists
21
21
  - .cursorflow/ directory exists
22
22
  """
23
23
  if project_dir is None:
@@ -27,8 +27,7 @@ def is_project_initialized(project_dir: Optional[str] = None) -> bool:
27
27
 
28
28
  # Check for key indicators
29
29
  has_rules = (project_path / ".cursor" / "rules" / "cursorflow-usage.mdc").exists()
30
- has_config = (project_path / "cursorflow-config.json").exists()
31
- has_artifacts_dir = (project_path / ".cursorflow").exists()
30
+ has_config = (project_path / ".cursorflow" / "config.json").exists()
32
31
 
33
32
  # Need at least rules and config
34
33
  return has_rules and has_config
@@ -64,15 +63,20 @@ def auto_initialize_if_needed(project_dir: Optional[str] = None, interactive: bo
64
63
  return False
65
64
 
66
65
  # Interactive mode: ask user
67
- print("\n🎯 CursorFlow is not initialized in this project yet.")
68
- print(f"📁 Project directory: {project_path}")
69
- print("\nTo use CursorFlow, we need to set up:")
70
- print(" • Cursor AI rules in .cursor/rules/")
71
- print(" • Configuration file: cursorflow-config.json")
72
- print(" Artifacts directory: .cursorflow/")
73
- print(" .gitignore entries for CursorFlow artifacts")
74
-
75
- response = input("\n🚀 Initialize CursorFlow now? [Y/n]: ").strip().lower()
66
+ if not sys.stdin.isatty():
67
+ # Non-interactive environment (CI, pipes, etc) - auto-accept
68
+ print("🎯 CursorFlow not initialized. Auto-initializing (non-interactive mode)...")
69
+ response = 'y'
70
+ else:
71
+ print("\n🎯 CursorFlow is not initialized in this project yet.")
72
+ print(f"📁 Project directory: {project_path}")
73
+ print("\nTo use CursorFlow, we need to set up:")
74
+ print(" Cursor AI rules in .cursor/rules/")
75
+ print(" • Configuration file: .cursorflow/config.json")
76
+ print(" • Artifacts directory: .cursorflow/")
77
+ print(" • .gitignore entries for CursorFlow artifacts")
78
+
79
+ response = input("\n🚀 Initialize CursorFlow now? [Y/n]: ").strip().lower()
76
80
 
77
81
  if response in ('', 'y', 'yes'):
78
82
  try:
@@ -110,7 +114,7 @@ def get_initialization_warning() -> str:
110
114
  ║ ║
111
115
  ║ This creates: ║
112
116
  ║ • .cursor/rules/ (Cursor AI integration) ║
113
- ║ • cursorflow-config.json (project configuration)
117
+ ║ • .cursorflow/config.json (project configuration)
114
118
  ║ • .cursorflow/ (artifacts and sessions) ║
115
119
  ║ • .gitignore entries ║
116
120
  ║ ║
@@ -36,16 +36,21 @@ def main(ctx):
36
36
  from .auto_init import is_project_initialized, auto_initialize_if_needed
37
37
 
38
38
  if not is_project_initialized():
39
- console.print("\n[yellow]⚠️ CursorFlow not initialized in this project[/yellow]")
40
- console.print("This is a one-time setup that creates:")
41
- console.print(" • .cursor/rules/ (Cursor AI integration)")
42
- console.print(" • cursorflow-config.json (project configuration)")
43
- console.print(" • .cursorflow/ (artifacts directory)")
44
-
45
- # Auto-initialize with confirmation
46
- if not auto_initialize_if_needed(interactive=True):
39
+ # Check if running in non-interactive mode (CI, scripts, etc)
40
+ import sys
41
+ is_interactive = sys.stdin.isatty()
42
+
43
+ if is_interactive:
44
+ console.print("\n[yellow]⚠️ CursorFlow not initialized in this project[/yellow]")
45
+ console.print("This is a one-time setup that creates:")
46
+ console.print(" • .cursor/rules/ (Cursor AI integration)")
47
+ console.print(" • .cursorflow/config.json (project configuration)")
48
+ console.print(" • .cursorflow/ (artifacts directory)")
49
+
50
+ # Auto-initialize with confirmation (or silently if non-interactive)
51
+ if not auto_initialize_if_needed(interactive=is_interactive):
47
52
  console.print("\n[red]Cannot proceed without initialization.[/red]")
48
- console.print("Run: [cyan]cursorflow install-rules[/cyan]")
53
+ console.print("Run: [cyan]cursorflow install-rules --yes[/cyan]")
49
54
  ctx.exit(1)
50
55
 
51
56
  @main.command()
@@ -474,10 +479,12 @@ async def _run_auto_tests(framework: str, base_url: str, config: Dict):
474
479
  @click.argument('project_path', default='.')
475
480
  @click.option('--framework', '-f')
476
481
  @click.option('--force', is_flag=True, help='Force update existing configuration')
477
- def install_rules(project_path, framework, force):
482
+ @click.option('--yes', '-y', is_flag=True, help='Skip confirmation prompts')
483
+ def install_rules(project_path, framework, force, yes):
478
484
  """Install CursorFlow rules and configuration in a project"""
479
485
 
480
- console.print("🚀 Installing CursorFlow rules and configuration...")
486
+ if not yes:
487
+ console.print("🚀 Installing CursorFlow rules and configuration...")
481
488
 
482
489
  try:
483
490
  # Import and run the installation
@@ -487,7 +494,7 @@ def install_rules(project_path, framework, force):
487
494
  if success:
488
495
  console.print("[green]✅ CursorFlow rules installed successfully![/green]")
489
496
  console.print("\nNext steps:")
490
- console.print("1. Review cursorflow-config.json")
497
+ console.print("1. Review .cursorflow/config.json")
491
498
  console.print("2. Install dependencies: pip install cursorflow && playwright install chromium")
492
499
  console.print("3. Start testing: Use CursorFlow in Cursor!")
493
500
  else:
@@ -80,10 +80,9 @@ def install_cursorflow_rules(project_dir: str = ".", force: bool = False):
80
80
  setup_update_checking(project_path)
81
81
 
82
82
  print(f"\n📝 Next steps:")
83
- print(f" 1. Review cursorflow-config.json and update for your project")
84
- print(f" 2. Install CursorFlow: pip install cursorflow")
85
- print(f" 3. Install Playwright: playwright install chromium")
86
- print(f" 4. Start using CursorFlow for UI testing and CSS iteration!")
83
+ print(f" 1. Review .cursorflow/config.json and update for your project")
84
+ print(f" 2. Install Playwright: playwright install chromium")
85
+ print(f" 3. Start using CursorFlow for UI testing and CSS iteration!")
87
86
  print(f"\n🔄 Update commands:")
88
87
  print(f" - Check for updates: python -m cursorflow check-updates")
89
88
  print(f" - Update CursorFlow: python -m cursorflow update")
@@ -120,18 +119,22 @@ cursorflow_session_*.json
120
119
  def create_config_template(project_path: Path, force: bool = False):
121
120
  """Create or update CursorFlow configuration template"""
122
121
 
123
- config_path = project_path / "cursorflow-config.json"
122
+ # Create .cursorflow directory if it doesn't exist
123
+ cursorflow_dir = project_path / ".cursorflow"
124
+ cursorflow_dir.mkdir(exist_ok=True)
125
+
126
+ config_path = cursorflow_dir / "config.json"
124
127
 
125
128
  # Get current version
126
129
  try:
127
130
  import cursorflow
128
- current_version = getattr(cursorflow, '__version__', '2.1.5')
131
+ current_version = getattr(cursorflow, '__version__', '2.1.6')
129
132
  except ImportError:
130
- current_version = '2.1.5'
133
+ current_version = '2.1.6'
131
134
 
132
135
  if config_path.exists():
133
136
  if not force:
134
- print("ℹ️ cursorflow-config.json already exists (use --force to recreate)")
137
+ print("ℹ️ .cursorflow/config.json already exists (use --force to recreate)")
135
138
  # Smart update: only update version and add missing fields
136
139
  try:
137
140
  with open(config_path) as f:
@@ -198,7 +201,7 @@ def create_config_template(project_path: Path, force: bool = False):
198
201
  json.dump(config_template, f, indent=2)
199
202
 
200
203
  action = "Recreated" if force else "Created"
201
- print(f"✅ {action} configuration template: cursorflow-config.json")
204
+ print(f"✅ {action} configuration: .cursorflow/config.json")
202
205
  print(f" Detected project type: {project_type}")
203
206
  print(f" CursorFlow version: {current_version}")
204
207
 
@@ -302,9 +305,9 @@ def setup_update_checking(project_path: Path):
302
305
  # Create initial version tracking
303
306
  try:
304
307
  import cursorflow
305
- current_version = getattr(cursorflow, '__version__', '2.1.5')
308
+ current_version = getattr(cursorflow, '__version__', '2.1.6')
306
309
  except ImportError:
307
- current_version = '2.1.5'
310
+ current_version = '2.1.6'
308
311
 
309
312
  version_info = {
310
313
  "installed_version": current_version,
@@ -24,7 +24,7 @@ CursorFlow requires **TWO installations**:
24
24
  This step created THIS FILE you're reading right now.
25
25
 
26
26
  **If Cursor reports "command not found: cursorflow"**, the user needs Step 1.
27
- **If you can run cursorflow but tests fail**, check `cursorflow-config.json` in project root.
27
+ **If you can run cursorflow but tests fail**, check `.cursorflow/config.json` configuration.
28
28
 
29
29
  ## 🚀 **When to Install CursorFlow**
30
30
 
@@ -363,7 +363,7 @@ class CursorFlowUpdater:
363
363
 
364
364
  async def _migrate_configuration(self) -> bool:
365
365
  """Migrate configuration to new format if needed"""
366
- config_file = self.project_dir / "cursorflow-config.json"
366
+ config_file = self.project_dir / ".cursorflow" / "config.json"
367
367
 
368
368
  if not config_file.exists():
369
369
  return True
@@ -417,9 +417,10 @@ class CursorFlowUpdater:
417
417
  backup_path = backup_dir / backup_name
418
418
 
419
419
  # Backup configuration and rules
420
- if (self.project_dir / "cursorflow-config.json").exists():
420
+ config_file = self.project_dir / ".cursorflow" / "config.json"
421
+ if config_file.exists():
421
422
  shutil.copy2(
422
- self.project_dir / "cursorflow-config.json",
423
+ config_file,
423
424
  backup_path.with_suffix('.config.json')
424
425
  )
425
426
 
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "cursorflow"
7
- version = "2.1.5"
7
+ version = "2.1.6"
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