cursorflow 2.2.1__tar.gz → 2.2.3__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-2.2.1 → cursorflow-2.2.3}/PKG-INFO +1 -1
- {cursorflow-2.2.1 → cursorflow-2.2.3}/cursorflow/__init__.py +1 -1
- {cursorflow-2.2.1 → cursorflow-2.2.3}/cursorflow/cli.py +50 -1
- {cursorflow-2.2.1 → cursorflow-2.2.3}/cursorflow/core/browser_controller.py +1 -1
- {cursorflow-2.2.1 → cursorflow-2.2.3}/pyproject.toml +1 -1
- {cursorflow-2.2.1 → cursorflow-2.2.3}/FIRST_TIME_SETUP.md +0 -0
- {cursorflow-2.2.1 → cursorflow-2.2.3}/LICENSE +0 -0
- {cursorflow-2.2.1 → cursorflow-2.2.3}/MANIFEST.in +0 -0
- {cursorflow-2.2.1 → cursorflow-2.2.3}/POST_INSTALL_MESSAGE.txt +0 -0
- {cursorflow-2.2.1 → cursorflow-2.2.3}/README.md +0 -0
- {cursorflow-2.2.1 → cursorflow-2.2.3}/cursorflow/auto_init.py +0 -0
- {cursorflow-2.2.1 → cursorflow-2.2.3}/cursorflow/auto_updater.py +0 -0
- {cursorflow-2.2.1 → cursorflow-2.2.3}/cursorflow/core/action_validator.py +0 -0
- {cursorflow-2.2.1 → cursorflow-2.2.3}/cursorflow/core/agent.py +0 -0
- {cursorflow-2.2.1 → cursorflow-2.2.3}/cursorflow/core/auth_handler.py +0 -0
- {cursorflow-2.2.1 → cursorflow-2.2.3}/cursorflow/core/browser_engine.py +0 -0
- {cursorflow-2.2.1 → cursorflow-2.2.3}/cursorflow/core/config_validator.py +0 -0
- {cursorflow-2.2.1 → cursorflow-2.2.3}/cursorflow/core/css_iterator.py +0 -0
- {cursorflow-2.2.1 → cursorflow-2.2.3}/cursorflow/core/cursor_integration.py +0 -0
- {cursorflow-2.2.1 → cursorflow-2.2.3}/cursorflow/core/cursorflow.py +0 -0
- {cursorflow-2.2.1 → cursorflow-2.2.3}/cursorflow/core/error_context_collector.py +0 -0
- {cursorflow-2.2.1 → cursorflow-2.2.3}/cursorflow/core/error_correlator.py +0 -0
- {cursorflow-2.2.1 → cursorflow-2.2.3}/cursorflow/core/event_correlator.py +0 -0
- {cursorflow-2.2.1 → cursorflow-2.2.3}/cursorflow/core/file_change_monitor.py +0 -0
- {cursorflow-2.2.1 → cursorflow-2.2.3}/cursorflow/core/hmr_detector.py +0 -0
- {cursorflow-2.2.1 → cursorflow-2.2.3}/cursorflow/core/log_collector.py +0 -0
- {cursorflow-2.2.1 → cursorflow-2.2.3}/cursorflow/core/log_monitor.py +0 -0
- {cursorflow-2.2.1 → cursorflow-2.2.3}/cursorflow/core/mockup_comparator.py +0 -0
- {cursorflow-2.2.1 → cursorflow-2.2.3}/cursorflow/core/persistent_session.py +0 -0
- {cursorflow-2.2.1 → cursorflow-2.2.3}/cursorflow/core/report_generator.py +0 -0
- {cursorflow-2.2.1 → cursorflow-2.2.3}/cursorflow/core/trace_manager.py +0 -0
- {cursorflow-2.2.1 → cursorflow-2.2.3}/cursorflow/install_cursorflow_rules.py +0 -0
- {cursorflow-2.2.1 → cursorflow-2.2.3}/cursorflow/log_sources/local_file.py +0 -0
- {cursorflow-2.2.1 → cursorflow-2.2.3}/cursorflow/log_sources/ssh_remote.py +0 -0
- {cursorflow-2.2.1 → cursorflow-2.2.3}/cursorflow/post_install.py +0 -0
- {cursorflow-2.2.1 → cursorflow-2.2.3}/cursorflow/rules/__init__.py +0 -0
- {cursorflow-2.2.1 → cursorflow-2.2.3}/cursorflow/rules/cursorflow-installation.mdc +0 -0
- {cursorflow-2.2.1 → cursorflow-2.2.3}/cursorflow/rules/cursorflow-usage.mdc +0 -0
- {cursorflow-2.2.1 → cursorflow-2.2.3}/cursorflow/updater.py +0 -0
- {cursorflow-2.2.1 → cursorflow-2.2.3}/cursorflow.egg-info/SOURCES.txt +0 -0
- {cursorflow-2.2.1 → cursorflow-2.2.3}/docs/USER_MANUAL.md +0 -0
- {cursorflow-2.2.1 → cursorflow-2.2.3}/examples/comprehensive_screenshot_example.py +0 -0
- {cursorflow-2.2.1 → cursorflow-2.2.3}/examples/enhanced_screenshot_example.py +0 -0
- {cursorflow-2.2.1 → cursorflow-2.2.3}/examples/mockup_comparison_example.py +0 -0
- {cursorflow-2.2.1 → cursorflow-2.2.3}/examples/opensas_example.py +0 -0
- {cursorflow-2.2.1 → cursorflow-2.2.3}/examples/react_example.py +0 -0
- {cursorflow-2.2.1 → cursorflow-2.2.3}/examples/responsive_testing_example.py +0 -0
- {cursorflow-2.2.1 → cursorflow-2.2.3}/examples/v2_comprehensive_demo.py +0 -0
- {cursorflow-2.2.1 → cursorflow-2.2.3}/setup.cfg +0 -0
- {cursorflow-2.2.1 → cursorflow-2.2.3}/setup.py +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: cursorflow
|
3
|
-
Version: 2.2.
|
3
|
+
Version: 2.2.3
|
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
|
@@ -33,6 +33,9 @@ def main(ctx):
|
|
33
33
|
if ctx.invoked_subcommand in skip_init_check:
|
34
34
|
return
|
35
35
|
|
36
|
+
# Check for version mismatch and auto-update rules
|
37
|
+
_check_and_update_rules_if_needed()
|
38
|
+
|
36
39
|
# Check if project is initialized, offer to auto-initialize
|
37
40
|
from .auto_init import is_project_initialized, auto_initialize_if_needed
|
38
41
|
|
@@ -87,6 +90,8 @@ def main(ctx):
|
|
87
90
|
help='Timeout in seconds for wait operations')
|
88
91
|
@click.option('--wait-for-network-idle', is_flag=True,
|
89
92
|
help='Wait for network to be idle (no requests for 2s)')
|
93
|
+
@click.option('--wait', type=float,
|
94
|
+
help='Wait for specified seconds before continuing')
|
90
95
|
@click.option('--click', multiple=True,
|
91
96
|
help='Click element by selector (can specify multiple)')
|
92
97
|
@click.option('--hover', multiple=True,
|
@@ -104,7 +109,7 @@ def main(ctx):
|
|
104
109
|
@click.option('--quiet', '-q', is_flag=True,
|
105
110
|
help='Minimal output, JSON results only')
|
106
111
|
def test(base_url, path, actions, output, logs, config, verbose, headless, timeout, responsive,
|
107
|
-
save_session, use_session, wait_for, wait_timeout, wait_for_network_idle,
|
112
|
+
save_session, use_session, wait_for, wait_timeout, wait_for_network_idle, wait,
|
108
113
|
click, hover, fill, screenshot, open_trace, show_console, show_all_console, quiet):
|
109
114
|
"""
|
110
115
|
Test UI flows and interactions with real-time log monitoring
|
@@ -146,6 +151,8 @@ def test(base_url, path, actions, output, logs, config, verbose, headless, timeo
|
|
146
151
|
test_actions.append({"navigate": path})
|
147
152
|
|
148
153
|
# Wait options
|
154
|
+
if wait:
|
155
|
+
test_actions.append({"wait_for_timeout": int(wait * 1000)})
|
149
156
|
if wait_for:
|
150
157
|
test_actions.append({"wait_for_selector": wait_for})
|
151
158
|
if wait_for_network_idle:
|
@@ -1065,5 +1072,47 @@ def display_smoke_test_summary(results: Dict):
|
|
1065
1072
|
|
1066
1073
|
console.print(table)
|
1067
1074
|
|
1075
|
+
def _check_and_update_rules_if_needed():
|
1076
|
+
"""
|
1077
|
+
Auto-update Cursor rules when package version changes
|
1078
|
+
|
1079
|
+
Silently updates rules to match installed package version
|
1080
|
+
"""
|
1081
|
+
try:
|
1082
|
+
# Check if project has rules installed
|
1083
|
+
rules_dir = Path('.cursor/rules')
|
1084
|
+
if not rules_dir.exists():
|
1085
|
+
return # Not initialized yet
|
1086
|
+
|
1087
|
+
# Check version file
|
1088
|
+
version_file = Path('.cursorflow/version_info.json')
|
1089
|
+
if not version_file.exists():
|
1090
|
+
return # No version tracking
|
1091
|
+
|
1092
|
+
# Compare versions
|
1093
|
+
import json
|
1094
|
+
with open(version_file, 'r') as f:
|
1095
|
+
version_info = json.load(f)
|
1096
|
+
|
1097
|
+
installed_version = version_info.get('installed_version', '0.0.0')
|
1098
|
+
current_version = __version__
|
1099
|
+
|
1100
|
+
# If versions don't match, auto-update rules
|
1101
|
+
if installed_version != current_version:
|
1102
|
+
from .install_cursorflow_rules import install_cursorflow_rules
|
1103
|
+
|
1104
|
+
# Silent update
|
1105
|
+
import logging
|
1106
|
+
logger = logging.getLogger(__name__)
|
1107
|
+
logger.info(f"Auto-updating Cursor rules: {installed_version} → {current_version}")
|
1108
|
+
|
1109
|
+
install_cursorflow_rules('.', force=False)
|
1110
|
+
|
1111
|
+
except Exception as e:
|
1112
|
+
# Silent failure - don't break user's workflow
|
1113
|
+
import logging
|
1114
|
+
logging.getLogger(__name__).debug(f"Rules auto-update skipped: {e}")
|
1115
|
+
|
1116
|
+
|
1068
1117
|
if __name__ == '__main__':
|
1069
1118
|
main()
|
@@ -1313,7 +1313,7 @@ class BrowserController:
|
|
1313
1313
|
const animInfo = {
|
1314
1314
|
element_selector: element.tagName.toLowerCase() +
|
1315
1315
|
(element.id ? '#' + element.id : '') +
|
1316
|
-
(element.className ? '.' + element.className.split(' ').join('.') : ''),
|
1316
|
+
(element.className && typeof element.className === 'string' ? '.' + element.className.split(' ').join('.') : ''),
|
1317
1317
|
animation_name: animation.animationName || 'transition',
|
1318
1318
|
duration: animation.effect?.getTiming?.()?.duration || 0,
|
1319
1319
|
delay: animation.effect?.getTiming?.()?.delay || 0,
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
4
4
|
|
5
5
|
[project]
|
6
6
|
name = "cursorflow"
|
7
|
-
version = "2.2.
|
7
|
+
version = "2.2.3"
|
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
|
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
|
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
|