cursorflow 2.3.2__py3-none-any.whl → 2.4.0__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
@@ -801,6 +801,7 @@ def inspect(base_url, path, selector, verbose):
801
801
  )
802
802
 
803
803
  # Comprehensive inspection with full data capture
804
+ # v2.1: Captures ALL visible elements automatically
804
805
  console.print("📸 Capturing comprehensive page data...")
805
806
  results = asyncio.run(flow.execute_and_collect([
806
807
  {"navigate": path},
@@ -996,6 +997,7 @@ def measure(base_url, path, selector, verbose):
996
997
  selectors_list = list(selector)
997
998
 
998
999
  # Execute with screenshot to get comprehensive data
1000
+ # v2.1: Captures ALL visible elements automatically
999
1001
  results = asyncio.run(flow.execute_and_collect([
1000
1002
  {"navigate": path},
1001
1003
  {"wait_for_selector": "body"},
@@ -550,7 +550,7 @@ class BrowserController:
550
550
  }
551
551
 
552
552
  if capture_comprehensive_data:
553
- # Capture comprehensive page analysis
553
+ # Capture comprehensive page analysis (ALL visible elements)
554
554
  comprehensive_data = await self._capture_comprehensive_page_analysis()
555
555
 
556
556
  # Save comprehensive data alongside screenshot
@@ -1122,9 +1122,13 @@ class BrowserController:
1122
1122
  return failed
1123
1123
 
1124
1124
  async def _capture_comprehensive_page_analysis(self) -> Dict[str, Any]:
1125
- """Enhanced comprehensive page analysis with v2.0 features: fonts, animations, resources, storage"""
1125
+ """
1126
+ Enhanced comprehensive page analysis with v2.0 features: fonts, animations, resources, storage
1127
+
1128
+ v2.1: Now captures ALL visible elements - truly comprehensive, no hardcoded limits.
1129
+ """
1126
1130
  try:
1127
- # Capture DOM analysis
1131
+ # Capture DOM analysis (ALL visible elements)
1128
1132
  dom_analysis = await self._capture_dom_analysis()
1129
1133
 
1130
1134
  # Capture current network state
@@ -1684,7 +1688,12 @@ class BrowserController:
1684
1688
  }
1685
1689
 
1686
1690
  async def _capture_dom_analysis(self) -> Dict[str, Any]:
1687
- """Enhanced DOM analysis with multi-selector strategies and accessibility data (v2.0)"""
1691
+ """
1692
+ Enhanced DOM analysis with multi-selector strategies and accessibility data (v2.0)
1693
+
1694
+ Captures ALL visible elements on the page - truly comprehensive analysis.
1695
+ No hardcoded selector limits, no artificial filtering.
1696
+ """
1688
1697
  try:
1689
1698
  dom_analysis = await self.page.evaluate("""
1690
1699
  () => {
@@ -2022,46 +2031,29 @@ class BrowserController:
2022
2031
  };
2023
2032
  }
2024
2033
 
2025
- // Get all significant elements with enhanced analysis
2034
+ // Get ALL visible elements - truly comprehensive analysis
2026
2035
  const elements = [];
2027
- const selectors = [
2028
- // Structural elements
2029
- 'body', 'main', 'header', 'nav', 'aside', 'footer', 'section', 'article',
2030
- // Common containers
2031
- '.container', '.wrapper', '.content', '.sidebar', '.header', '.footer',
2032
- '.navbar', '.nav', '.menu', '.main', '.page', '.app', '.layout',
2033
- // Interactive elements
2034
- 'button', '.btn', '.button', 'a', '.link', 'input', 'form', '.form',
2035
- 'select', 'textarea', '.input', '.field',
2036
- // Content elements
2037
- 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'p', '.title', '.heading',
2038
- '.text', '.content', '.description',
2039
- // Layout elements
2040
- '.row', '.col', '.column', '.grid', '.flex', '.card', '.panel',
2041
- '.box', '.item', '.component',
2042
- // Common UI components
2043
- '.modal', '.dropdown', '.tooltip', '.alert', '.badge', '.tab',
2044
- '.table', '.list', '.menu-item'
2045
- ];
2046
2036
 
2047
- selectors.forEach(selector => {
2037
+ // Query EVERY element on the page (true comprehensive capture)
2038
+ const allElements = document.querySelectorAll('*');
2039
+
2040
+ allElements.forEach((element, globalIndex) => {
2048
2041
  try {
2049
- document.querySelectorAll(selector).forEach((element, index) => {
2050
- const computedStyles = getComputedStylesDetailed(element);
2051
- const visualContext = getVisualContext(element, computedStyles);
2042
+ const computedStyles = getComputedStylesDetailed(element);
2043
+ const visualContext = getVisualContext(element, computedStyles);
2044
+
2045
+ // Only include elements with meaningful size OR important semantic meaning
2046
+ // This filters out invisible helper elements but keeps everything visible
2047
+ if (visualContext.bounding_box.width > 0 && visualContext.bounding_box.height > 0 ||
2048
+ ['HTML', 'BODY', 'HEAD', 'HEADER', 'NAV', 'MAIN', 'ASIDE', 'FOOTER'].includes(element.tagName)) {
2052
2049
 
2053
- // Only include elements with meaningful size or important semantic meaning
2054
- if (visualContext.bounding_box.width > 0 && visualContext.bounding_box.height > 0 ||
2055
- ['HEADER', 'NAV', 'MAIN', 'ASIDE', 'FOOTER'].includes(element.tagName)) {
2056
-
2057
- elements.push({
2058
- // Basic element info
2059
- selector: selector,
2060
- index: index,
2061
- tagName: element.tagName.toLowerCase(),
2062
- id: element.id || null,
2063
- className: element.className || null,
2064
- textContent: element.textContent ? element.textContent.trim().substring(0, 200) : null,
2050
+ elements.push({
2051
+ // Basic element info
2052
+ index: globalIndex,
2053
+ tagName: element.tagName.toLowerCase(),
2054
+ id: element.id || null,
2055
+ className: element.className || null,
2056
+ textContent: element.textContent ? element.textContent.trim().substring(0, 200) : null,
2065
2057
 
2066
2058
  // v2.0 Enhancement: Multiple selector strategies
2067
2059
  selectors: generateMultipleSelectors(element),
@@ -2084,14 +2076,13 @@ class BrowserController:
2084
2076
  return attrs;
2085
2077
  }, {}),
2086
2078
 
2087
- // Element hierarchy info
2088
- childrenCount: element.children.length,
2089
- parentTagName: element.parentElement ? element.parentElement.tagName.toLowerCase() : null
2090
- });
2091
- }
2092
- });
2079
+ // Element hierarchy info
2080
+ childrenCount: element.children.length,
2081
+ parentTagName: element.parentElement ? element.parentElement.tagName.toLowerCase() : null
2082
+ });
2083
+ }
2093
2084
  } catch (e) {
2094
- console.warn(`Failed to analyze selector ${selector}:`, e);
2085
+ // Skip elements that fail to analyze (e.g., detached nodes, iframes)
2095
2086
  }
2096
2087
  });
2097
2088
 
@@ -2166,7 +2157,7 @@ class BrowserController:
2166
2157
  elements: elements,
2167
2158
  totalElements: elements.length,
2168
2159
  captureTimestamp: Date.now(),
2169
- analysisVersion: "2.0" // v2.0 enhanced analysis
2160
+ analysisVersion: "2.1" // v2.1: Truly comprehensive (ALL elements)
2170
2161
  };
2171
2162
  }
2172
2163
  """)
@@ -736,6 +736,7 @@ class CursorFlow:
736
736
  name = "screenshot"
737
737
  options = None
738
738
 
739
+ # v2.1: No need for additional_selectors - we capture ALL visible elements now
739
740
  screenshot_data = await self.browser.screenshot(name, options)
740
741
  self.artifacts["screenshots"].append(screenshot_data)
741
742
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: cursorflow
3
- Version: 2.3.2
3
+ Version: 2.4.0
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
@@ -1,19 +1,19 @@
1
1
  cursorflow/__init__.py,sha256=5G0Zm1HeS4oGx9S9E5GFRon5gduljQMlJhs1XEBUuE4,2763
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=rj5XCml0C8e3SzyUTTFjFVkniu-Mrvbp44Yl81AXupk,62757
4
+ cursorflow/cli.py,sha256=sukvrOvphTfXZSbFUAqePmp11SKlV2Vu6SL4hgrf20A,62877
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
8
8
  cursorflow/core/action_validator.py,sha256=SCk3w_62D1y0cCRDOajK8L44-abSj_KpnUBgR_yNVW4,6846
9
9
  cursorflow/core/agent.py,sha256=f3lecgEzDRDdGTVccAtorpLGfNJJ49bbsQAmgr0vNGg,10136
10
10
  cursorflow/core/auth_handler.py,sha256=oRafO6ZdxoHryBIvHsrNV8TECed4GXpJsdEiH0KdPPk,17149
11
- cursorflow/core/browser_controller.py,sha256=Efx48lxIz6MYZI8bHhIDpP_hqKDxeHSLvK8vgiPaXBM,147464
11
+ cursorflow/core/browser_controller.py,sha256=0jjYEzAr1qtuzHAhBn3Jff8FZrMBPx8gF0mDv7QWcgQ,146683
12
12
  cursorflow/core/browser_engine.py,sha256=7N9hPOyDrEhLWYgZW2981N9gKlHF6Lbp7D7h0zBzuz8,14851
13
13
  cursorflow/core/config_validator.py,sha256=HRtONSOmM0Xxt3-ok3xwnBADRiNnI0nNOMaS2OqOkDk,7286
14
14
  cursorflow/core/css_iterator.py,sha256=whLCIwbHZEWaH1HCbmqhNX5zrh_fL-r3hsxKjYsukcE,16478
15
15
  cursorflow/core/cursor_integration.py,sha256=MAeHjXYeqzaXnhskqkTDB-n5ixIHqapGe93X0lLKhws,67501
16
- cursorflow/core/cursorflow.py,sha256=OH-QmS8B8dO3RZag5ewqik0TEmVIdnyFYUJF4btzMo4,46375
16
+ cursorflow/core/cursorflow.py,sha256=qLTyLMf1fm2l5yDafalZXbtBHETsDXyJUSyoW4f8L_o,46470
17
17
  cursorflow/core/error_context_collector.py,sha256=so-aveqwb6_vRDbtKR2ln8_F84aaVIceNi1UHsaVPgc,26196
18
18
  cursorflow/core/error_correlator.py,sha256=g6YaIF2yFXUDrTuWHCyuES6K0696H8LDWmXH1qI8ddA,13367
19
19
  cursorflow/core/event_correlator.py,sha256=lCzXFnii17AQt3rOVOclez_AnjvBCF_2ZlnFG0mIN6c,7808
@@ -30,9 +30,9 @@ cursorflow/log_sources/ssh_remote.py,sha256=_Kwh0bhRpKgq-0c98oaX2hN6h9cT-wCHlqY5
30
30
  cursorflow/rules/__init__.py,sha256=gPcA-IkhXj03sl7cvZV0wwo7CtEkcyuKs4y0F5oQbqE,458
31
31
  cursorflow/rules/cursorflow-installation.mdc,sha256=D55pzzDPAVVbE3gAtKPUGoT-2fvB-FI2l6yrTdzUIEo,10208
32
32
  cursorflow/rules/cursorflow-usage.mdc,sha256=8TUeQ1hq2fTlgPqUBYOVBXrdEN0BR0Xp0d_1L-eUsME,23150
33
- cursorflow-2.3.2.dist-info/licenses/LICENSE,sha256=e4QbjAsj3bW-xgQOvQelr8sGLYDoqc48k6cKgCr_pBU,1080
34
- cursorflow-2.3.2.dist-info/METADATA,sha256=s-RjEI-vDB8r6pN_5C2u1w52oBYK1Zd5-mhbEKY61Aw,14793
35
- cursorflow-2.3.2.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
36
- cursorflow-2.3.2.dist-info/entry_points.txt,sha256=-Ed_n4Uff7wClEtWS-Py6xmQabecB9f0QAOjX0w7ljA,51
37
- cursorflow-2.3.2.dist-info/top_level.txt,sha256=t1UZwRyZP4u-ng2CEcNHmk_ZT4ibQxoihB2IjTF7ovc,11
38
- cursorflow-2.3.2.dist-info/RECORD,,
33
+ cursorflow-2.4.0.dist-info/licenses/LICENSE,sha256=e4QbjAsj3bW-xgQOvQelr8sGLYDoqc48k6cKgCr_pBU,1080
34
+ cursorflow-2.4.0.dist-info/METADATA,sha256=oFCddvoTKe7XNP3i6Qb8zoVGImxi-1BEb_Nyfv5jUTc,14793
35
+ cursorflow-2.4.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
36
+ cursorflow-2.4.0.dist-info/entry_points.txt,sha256=-Ed_n4Uff7wClEtWS-Py6xmQabecB9f0QAOjX0w7ljA,51
37
+ cursorflow-2.4.0.dist-info/top_level.txt,sha256=t1UZwRyZP4u-ng2CEcNHmk_ZT4ibQxoihB2IjTF7ovc,11
38
+ cursorflow-2.4.0.dist-info/RECORD,,