cursorflow 2.2.3__tar.gz → 2.2.4__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 (50) hide show
  1. {cursorflow-2.2.3 → cursorflow-2.2.4}/PKG-INFO +26 -1
  2. {cursorflow-2.2.3 → cursorflow-2.2.4}/README.md +25 -0
  3. {cursorflow-2.2.3 → cursorflow-2.2.4}/cursorflow/__init__.py +1 -1
  4. {cursorflow-2.2.3 → cursorflow-2.2.4}/cursorflow/cli.py +108 -0
  5. {cursorflow-2.2.3 → cursorflow-2.2.4}/pyproject.toml +1 -1
  6. {cursorflow-2.2.3 → cursorflow-2.2.4}/FIRST_TIME_SETUP.md +0 -0
  7. {cursorflow-2.2.3 → cursorflow-2.2.4}/LICENSE +0 -0
  8. {cursorflow-2.2.3 → cursorflow-2.2.4}/MANIFEST.in +0 -0
  9. {cursorflow-2.2.3 → cursorflow-2.2.4}/POST_INSTALL_MESSAGE.txt +0 -0
  10. {cursorflow-2.2.3 → cursorflow-2.2.4}/cursorflow/auto_init.py +0 -0
  11. {cursorflow-2.2.3 → cursorflow-2.2.4}/cursorflow/auto_updater.py +0 -0
  12. {cursorflow-2.2.3 → cursorflow-2.2.4}/cursorflow/core/action_validator.py +0 -0
  13. {cursorflow-2.2.3 → cursorflow-2.2.4}/cursorflow/core/agent.py +0 -0
  14. {cursorflow-2.2.3 → cursorflow-2.2.4}/cursorflow/core/auth_handler.py +0 -0
  15. {cursorflow-2.2.3 → cursorflow-2.2.4}/cursorflow/core/browser_controller.py +0 -0
  16. {cursorflow-2.2.3 → cursorflow-2.2.4}/cursorflow/core/browser_engine.py +0 -0
  17. {cursorflow-2.2.3 → cursorflow-2.2.4}/cursorflow/core/config_validator.py +0 -0
  18. {cursorflow-2.2.3 → cursorflow-2.2.4}/cursorflow/core/css_iterator.py +0 -0
  19. {cursorflow-2.2.3 → cursorflow-2.2.4}/cursorflow/core/cursor_integration.py +0 -0
  20. {cursorflow-2.2.3 → cursorflow-2.2.4}/cursorflow/core/cursorflow.py +0 -0
  21. {cursorflow-2.2.3 → cursorflow-2.2.4}/cursorflow/core/error_context_collector.py +0 -0
  22. {cursorflow-2.2.3 → cursorflow-2.2.4}/cursorflow/core/error_correlator.py +0 -0
  23. {cursorflow-2.2.3 → cursorflow-2.2.4}/cursorflow/core/event_correlator.py +0 -0
  24. {cursorflow-2.2.3 → cursorflow-2.2.4}/cursorflow/core/file_change_monitor.py +0 -0
  25. {cursorflow-2.2.3 → cursorflow-2.2.4}/cursorflow/core/hmr_detector.py +0 -0
  26. {cursorflow-2.2.3 → cursorflow-2.2.4}/cursorflow/core/log_collector.py +0 -0
  27. {cursorflow-2.2.3 → cursorflow-2.2.4}/cursorflow/core/log_monitor.py +0 -0
  28. {cursorflow-2.2.3 → cursorflow-2.2.4}/cursorflow/core/mockup_comparator.py +0 -0
  29. {cursorflow-2.2.3 → cursorflow-2.2.4}/cursorflow/core/persistent_session.py +0 -0
  30. {cursorflow-2.2.3 → cursorflow-2.2.4}/cursorflow/core/report_generator.py +0 -0
  31. {cursorflow-2.2.3 → cursorflow-2.2.4}/cursorflow/core/trace_manager.py +0 -0
  32. {cursorflow-2.2.3 → cursorflow-2.2.4}/cursorflow/install_cursorflow_rules.py +0 -0
  33. {cursorflow-2.2.3 → cursorflow-2.2.4}/cursorflow/log_sources/local_file.py +0 -0
  34. {cursorflow-2.2.3 → cursorflow-2.2.4}/cursorflow/log_sources/ssh_remote.py +0 -0
  35. {cursorflow-2.2.3 → cursorflow-2.2.4}/cursorflow/post_install.py +0 -0
  36. {cursorflow-2.2.3 → cursorflow-2.2.4}/cursorflow/rules/__init__.py +0 -0
  37. {cursorflow-2.2.3 → cursorflow-2.2.4}/cursorflow/rules/cursorflow-installation.mdc +0 -0
  38. {cursorflow-2.2.3 → cursorflow-2.2.4}/cursorflow/rules/cursorflow-usage.mdc +0 -0
  39. {cursorflow-2.2.3 → cursorflow-2.2.4}/cursorflow/updater.py +0 -0
  40. {cursorflow-2.2.3 → cursorflow-2.2.4}/cursorflow.egg-info/SOURCES.txt +0 -0
  41. {cursorflow-2.2.3 → cursorflow-2.2.4}/docs/USER_MANUAL.md +0 -0
  42. {cursorflow-2.2.3 → cursorflow-2.2.4}/examples/comprehensive_screenshot_example.py +0 -0
  43. {cursorflow-2.2.3 → cursorflow-2.2.4}/examples/enhanced_screenshot_example.py +0 -0
  44. {cursorflow-2.2.3 → cursorflow-2.2.4}/examples/mockup_comparison_example.py +0 -0
  45. {cursorflow-2.2.3 → cursorflow-2.2.4}/examples/opensas_example.py +0 -0
  46. {cursorflow-2.2.3 → cursorflow-2.2.4}/examples/react_example.py +0 -0
  47. {cursorflow-2.2.3 → cursorflow-2.2.4}/examples/responsive_testing_example.py +0 -0
  48. {cursorflow-2.2.3 → cursorflow-2.2.4}/examples/v2_comprehensive_demo.py +0 -0
  49. {cursorflow-2.2.3 → cursorflow-2.2.4}/setup.cfg +0 -0
  50. {cursorflow-2.2.3 → cursorflow-2.2.4}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: cursorflow
3
- Version: 2.2.3
3
+ Version: 2.2.4
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
@@ -119,6 +119,31 @@ cursorflow test --actions '[
119
119
 
120
120
  ---
121
121
 
122
+ ## 🧹 Artifact Management
123
+
124
+ CursorFlow generates valuable debugging data (screenshots, traces, sessions). Manage disk space:
125
+
126
+ ```bash
127
+ # Clean old artifacts (>7 days)
128
+ cursorflow cleanup --artifacts --old-only
129
+
130
+ # Clean all artifacts
131
+ cursorflow cleanup --artifacts
132
+
133
+ # Clean saved sessions
134
+ cursorflow cleanup --sessions
135
+
136
+ # Clean everything
137
+ cursorflow cleanup --all
138
+
139
+ # Preview before deleting
140
+ cursorflow cleanup --all --dry-run
141
+ ```
142
+
143
+ **See:** [Artifact Cleanup Guide](docs/user/ARTIFACT_CLEANUP_GUIDE.md)
144
+
145
+ ---
146
+
122
147
  ## 🚀 Complete Page Intelligence
123
148
 
124
149
  Every test captures everything needed for debugging:
@@ -74,6 +74,31 @@ cursorflow test --actions '[
74
74
 
75
75
  ---
76
76
 
77
+ ## 🧹 Artifact Management
78
+
79
+ CursorFlow generates valuable debugging data (screenshots, traces, sessions). Manage disk space:
80
+
81
+ ```bash
82
+ # Clean old artifacts (>7 days)
83
+ cursorflow cleanup --artifacts --old-only
84
+
85
+ # Clean all artifacts
86
+ cursorflow cleanup --artifacts
87
+
88
+ # Clean saved sessions
89
+ cursorflow cleanup --sessions
90
+
91
+ # Clean everything
92
+ cursorflow cleanup --all
93
+
94
+ # Preview before deleting
95
+ cursorflow cleanup --all --dry-run
96
+ ```
97
+
98
+ **See:** [Artifact Cleanup Guide](docs/user/ARTIFACT_CLEANUP_GUIDE.md)
99
+
100
+ ---
101
+
77
102
  ## 🚀 Complete Page Intelligence
78
103
 
79
104
  Every test captures everything needed for debugging:
@@ -56,7 +56,7 @@ def _get_version():
56
56
  pass
57
57
 
58
58
  # Fallback version - should match pyproject.toml
59
- return "2.2.3"
59
+ return "2.2.4"
60
60
 
61
61
  __version__ = _get_version()
62
62
  __author__ = "GeekWarrior Development"
@@ -913,6 +913,114 @@ def timeline(session):
913
913
  except Exception as e:
914
914
  console.print(f"[red]❌ Failed to load timeline: {e}[/red]")
915
915
 
916
+ @main.command()
917
+ @click.option('--artifacts', is_flag=True, help='Clean all artifacts (screenshots, traces)')
918
+ @click.option('--sessions', is_flag=True, help='Clean all saved sessions')
919
+ @click.option('--old-only', is_flag=True, help='Only clean artifacts older than 7 days')
920
+ @click.option('--all', 'clean_all', is_flag=True, help='Clean everything (artifacts, sessions, results)')
921
+ @click.option('--dry-run', is_flag=True, help='Show what would be deleted without deleting')
922
+ def cleanup(artifacts, sessions, old_only, clean_all, dry_run):
923
+ """
924
+ Clean up CursorFlow artifacts and data
925
+
926
+ Examples:
927
+ cursorflow cleanup --artifacts # Clean screenshots and traces
928
+ cursorflow cleanup --sessions # Clean saved sessions
929
+ cursorflow cleanup --all # Clean everything
930
+ cursorflow cleanup --old-only --artifacts # Clean old artifacts only
931
+ cursorflow cleanup --dry-run --all # Preview what would be deleted
932
+ """
933
+ import shutil
934
+ from datetime import datetime, timedelta
935
+
936
+ cursorflow_dir = Path('.cursorflow')
937
+
938
+ if not cursorflow_dir.exists():
939
+ console.print("[yellow]⚠️ No .cursorflow directory found[/yellow]")
940
+ return
941
+
942
+ total_size = 0
943
+ items_to_delete = []
944
+
945
+ # Calculate cutoff time for old-only mode
946
+ cutoff_time = datetime.now() - timedelta(days=7) if old_only else None
947
+
948
+ # Artifacts cleanup
949
+ if artifacts or clean_all:
950
+ artifacts_dir = cursorflow_dir / 'artifacts'
951
+ if artifacts_dir.exists():
952
+ for item in artifacts_dir.rglob('*'):
953
+ if item.is_file():
954
+ # Check age if old-only mode
955
+ if old_only:
956
+ file_time = datetime.fromtimestamp(item.stat().st_mtime)
957
+ if file_time > cutoff_time:
958
+ continue
959
+
960
+ size = item.stat().st_size
961
+ total_size += size
962
+ items_to_delete.append(('artifact', item, size))
963
+
964
+ # Sessions cleanup
965
+ if sessions or clean_all:
966
+ sessions_dir = cursorflow_dir / 'sessions'
967
+ if sessions_dir.exists():
968
+ for session_dir in sessions_dir.iterdir():
969
+ if session_dir.is_dir():
970
+ # Calculate session size
971
+ session_size = sum(f.stat().st_size for f in session_dir.rglob('*') if f.is_file())
972
+ total_size += session_size
973
+ items_to_delete.append(('session', session_dir, session_size))
974
+
975
+ # Display what will be deleted
976
+ if not items_to_delete:
977
+ console.print("✨ Nothing to clean - directory is already tidy!")
978
+ return
979
+
980
+ console.print(f"\n📊 Cleanup Summary:")
981
+ console.print(f" • Items to delete: {len(items_to_delete)}")
982
+ console.print(f" • Total size: {total_size / 1024 / 1024:.2f} MB")
983
+
984
+ # Show breakdown
985
+ artifact_count = sum(1 for t, _, _ in items_to_delete if t == 'artifact')
986
+ session_count = sum(1 for t, _, _ in items_to_delete if t == 'session')
987
+
988
+ if artifact_count:
989
+ artifact_size = sum(s for t, _, s in items_to_delete if t == 'artifact')
990
+ console.print(f" • Artifacts: {artifact_count} files ({artifact_size / 1024 / 1024:.2f} MB)")
991
+ if session_count:
992
+ session_size = sum(s for t, _, s in items_to_delete if t == 'session')
993
+ console.print(f" • Sessions: {session_count} sessions ({session_size / 1024 / 1024:.2f} MB)")
994
+
995
+ if dry_run:
996
+ console.print("\n🔍 Dry run - nothing deleted")
997
+ console.print(" Run without --dry-run to actually delete")
998
+ return
999
+
1000
+ # Confirm deletion
1001
+ import sys
1002
+ if sys.stdin.isatty():
1003
+ response = input("\n❓ Proceed with cleanup? [y/N]: ").strip().lower()
1004
+ if response != 'y':
1005
+ console.print("❌ Cleanup cancelled")
1006
+ return
1007
+
1008
+ # Delete items
1009
+ deleted_count = 0
1010
+ for item_type, item_path, _ in items_to_delete:
1011
+ try:
1012
+ if item_path.is_dir():
1013
+ shutil.rmtree(item_path)
1014
+ else:
1015
+ item_path.unlink()
1016
+ deleted_count += 1
1017
+ except Exception as e:
1018
+ console.print(f"[red]⚠️ Failed to delete {item_path}: {e}[/red]")
1019
+
1020
+ console.print(f"\n✅ Cleanup complete!")
1021
+ console.print(f" • Deleted {deleted_count}/{len(items_to_delete)} items")
1022
+ console.print(f" • Freed {total_size / 1024 / 1024:.2f} MB")
1023
+
916
1024
  @main.command()
917
1025
  @click.argument('project_path')
918
1026
  # Framework detection removed - CursorFlow is framework-agnostic
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "cursorflow"
7
- version = "2.2.3"
7
+ version = "2.2.4"
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