fix(physics): prevent infinite alignment loops on Reels and refine intent to avoid follow buttons

This commit is contained in:
2026-04-29 19:05:31 +02:00
parent 0f5b71708d
commit fc44633ebc
3 changed files with 27 additions and 7 deletions

View File

@@ -152,6 +152,13 @@ class Config:
help="Wipe all learned navigation and telepathic memories on boot to start 100%% blank.",
)
self.parser.add_argument(
"--goal",
type=str,
help="High-level autonomous goal for the bot (Tesla-style). Overrides config.yml goals.",
default=None,
)
# Interaction settings
self.parser.add_argument("--likes-count", help="Likes count", default="2-3")
self.parser.add_argument("--likes-percentage", help="Likes percentage", default="100")

View File

@@ -140,8 +140,8 @@ def align_active_post(device):
# Intents for structural discovery
intents = [
"post author username text (exclude follow buttons)",
"post author header profile",
"post username name",
"row_feed_photo_profile_name", # ID fallback
"clips_viewer_author_container", # Reels fallback
"feed post content", # Final desperation
@@ -151,6 +151,12 @@ def align_active_post(device):
attempts += 1
try:
xml = device.dump_hierarchy()
if "clips_video_container" in xml or "clips_viewer_container" in xml:
import logging
logger = logging.getLogger(__name__)
logger.info("🎯 [Alignment] Reels view detected. Auto-snapping is native.")
return True
from GramAddict.core.telepathic_engine import TelepathicEngine
telepath = TelepathicEngine.get_instance()

View File

@@ -128,23 +128,30 @@ def is_ad(xml_hierarchy: str, cognitive_stack: dict = None) -> bool:
try:
root = ET.fromstring(xml_hierarchy)
# Check if we are in a feed (to prevent false positives on profiles with 'Ad Tools' buttons)
from GramAddict.core.perception.feed_analysis import FEED_MARKERS
in_feed = any(marker in xml_hierarchy for marker in FEED_MARKERS)
for node in root.iter("node"):
attrib = node.attrib
content_desc = attrib.get("content-desc", "")
text = attrib.get("text", "")
res_id = attrib.get("resource-id", "")
# Structural check (Instagram specific)
# Structural check (Instagram specific) is always trusted
if any(marker_id in res_id for marker_id in AD_RESOURCE_IDS):
return True
# Exact label match: only trigger when the entire text/desc
# IS an ad marker (e.g. text="Ad", content-desc="Sponsored")
# This prevents false positives from "Create messaging ad"
if text.strip().lower() in AD_EXACT_LABELS:
return True
if content_desc.strip().lower() in AD_EXACT_LABELS:
return True
# We ONLY trust this if we are actually in a feed, to prevent triggering
# on the "Ad Tools" / "Ad" buttons present on business profiles.
if in_feed:
if text.strip().lower() in AD_EXACT_LABELS:
return True
if content_desc.strip().lower() in AD_EXACT_LABELS:
return True
except Exception:
pass