cursorflow 2.3.0__py3-none-any.whl → 2.3.2__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
@@ -823,6 +823,17 @@ def inspect(base_url, path, selector, verbose):
823
823
  if not matching_elements:
824
824
  console.print(f"[yellow]⚠️ No elements found matching: {selector}[/yellow]")
825
825
  console.print(f"💡 Total elements captured: {len(elements)}")
826
+
827
+ # Debug: Show some element IDs/classes to help user
828
+ if elements and verbose:
829
+ console.print(f"\n🔍 Debug - Sample of captured elements:")
830
+ for elem in elements[:10]:
831
+ elem_id = elem.get('id', '')
832
+ elem_classes = elem.get('className', '')
833
+ elem_tag = elem.get('tagName', '')
834
+ if elem_id or elem_classes:
835
+ console.print(f" {elem_tag}#{elem_id or '(no-id)'}.{elem_classes or '(no-classes)'}")
836
+
826
837
  return
827
838
 
828
839
  console.print(f"\n✅ Found [bold]{len(matching_elements)}[/bold] matching element(s)\n")
@@ -937,8 +948,10 @@ def _element_matches_selector(element: Dict, selector: str) -> bool:
937
948
  # Class selector
938
949
  if selector.startswith('.'):
939
950
  target_class = selector[1:]
940
- classes = element.get('className', '')
941
- return target_class in classes.split()
951
+ classes = element.get('className') or '' # Handle None from JSON
952
+ if not isinstance(classes, str):
953
+ return False
954
+ return target_class in classes.split() if classes else False
942
955
 
943
956
  # Tag selector
944
957
  tag = element.get('tagName', '').lower()
@@ -87,12 +87,20 @@ class LogCollector:
87
87
  """Initialize local file log sources"""
88
88
  paths = self.config.get("paths", ["logs/app.log"])
89
89
 
90
+ # Skip local log sources if we're clearly testing a remote URL
91
+ # (they won't work anyway and just cause confusing errors)
92
+ base_url = self.config.get("base_url", "")
93
+ if base_url and (base_url.startswith("http://") or base_url.startswith("https://")):
94
+ if not any("localhost" in base_url or "127.0.0.1" in base_url for url in [base_url]):
95
+ self.logger.debug("Skipping local log sources for remote URL testing")
96
+ return
97
+
90
98
  for path in paths:
91
99
  if Path(path).exists() or self.config.get("create_if_missing", True):
92
100
  source = LocalFileLogSource(path)
93
101
  self.log_sources.append(source)
94
102
  else:
95
- self.logger.warning(f"Log file not found: {path}")
103
+ self.logger.debug(f"Log file not found: {path}")
96
104
 
97
105
  def _init_docker_sources(self):
98
106
  """Initialize Docker container log sources"""
@@ -182,8 +190,12 @@ class LogCollector:
182
190
  # Brief pause to avoid overwhelming
183
191
  await asyncio.sleep(0.1)
184
192
 
193
+ except AttributeError as e:
194
+ # Log source doesn't support get_new_entries (incompatible source type)
195
+ self.logger.debug(f"Log source {source} is incompatible: {e}")
196
+ break # Stop monitoring this source
185
197
  except Exception as e:
186
- self.logger.warning(f"Log source error: {e}")
198
+ self.logger.debug(f"Log source error: {e}")
187
199
  await asyncio.sleep(1) # Wait before retry
188
200
 
189
201
  except Exception as e:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: cursorflow
3
- Version: 2.3.0
3
+ Version: 2.3.2
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,7 +1,7 @@
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=l8TTcX6ve5Zx4sAOkdX5P1OChrZkDjvkix4Fbgdf-VE,62069
4
+ cursorflow/cli.py,sha256=rj5XCml0C8e3SzyUTTFjFVkniu-Mrvbp44Yl81AXupk,62757
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
@@ -19,7 +19,7 @@ cursorflow/core/error_correlator.py,sha256=g6YaIF2yFXUDrTuWHCyuES6K0696H8LDWmXH1
19
19
  cursorflow/core/event_correlator.py,sha256=lCzXFnii17AQt3rOVOclez_AnjvBCF_2ZlnFG0mIN6c,7808
20
20
  cursorflow/core/file_change_monitor.py,sha256=tl_ZdsGW8LZBTImniD-lqaGgNb9dYjlDsP2XmevE0xk,21258
21
21
  cursorflow/core/hmr_detector.py,sha256=IrGYhXIeTBukffRXF74SW45cB_Im0cmq8RxxjtSz-2w,17431
22
- cursorflow/core/log_collector.py,sha256=5ZoPlTyV1-1Q5Wn7NmW4aQK211i5fjrXQt69osVRSD0,14427
22
+ cursorflow/core/log_collector.py,sha256=CYh41SLDI_t-hgzJqG3fTrSTDhEPFDktjO_mOQwucnE,15198
23
23
  cursorflow/core/log_monitor.py,sha256=pONMu_JHEnT0T62OA5KRZ4nClzKgNpifPyrfN5w_RM8,6704
24
24
  cursorflow/core/mockup_comparator.py,sha256=VLfEEaTgbcY0oTb-bhBD2uTbXGjbnOV7LXNVvXpWMrM,64695
25
25
  cursorflow/core/persistent_session.py,sha256=FsEHj4wKkycmdp6PFRHv3g333Y74yqra0x_qhUTQpik,36075
@@ -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.0.dist-info/licenses/LICENSE,sha256=e4QbjAsj3bW-xgQOvQelr8sGLYDoqc48k6cKgCr_pBU,1080
34
- cursorflow-2.3.0.dist-info/METADATA,sha256=hC0JZcjfBUi9MolXNXB80aX_YU23nH0Zgnr350bYKlI,14793
35
- cursorflow-2.3.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
36
- cursorflow-2.3.0.dist-info/entry_points.txt,sha256=-Ed_n4Uff7wClEtWS-Py6xmQabecB9f0QAOjX0w7ljA,51
37
- cursorflow-2.3.0.dist-info/top_level.txt,sha256=t1UZwRyZP4u-ng2CEcNHmk_ZT4ibQxoihB2IjTF7ovc,11
38
- cursorflow-2.3.0.dist-info/RECORD,,
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,,