#!/usr/bin/env python3 path = "/var/www/html/weval-technology-platform.html" with open(path, "rb") as f: raw = f.read() if b"crm_bridge" in raw: print("ALREADY_PATCHED") exit(0) # Exact bytes: 'truth', icon:'🔒' (\xf0\x9f\x94\x92), label:'Truth Registry', color:'#22c55e', count: TREE.truth_registry?.agents||0}, # In HTML context single quotes are literal (no backslash escape because we're in innerText template literal? let me check) # From dbg: b"'truth\\', icon:\\'\\xf0..." - YES backslash-escaped single quotes target_truth_line = b"'truth\\', icon:\\'\xf0\x9f\x94\x92\\', label:\\'Truth Registry\\', color:\\'#22c55e\\', count: TREE.truth_registry?.agents||0}," if target_truth_line in raw: # Add crm_bridge as 6th extras entry just after truth, before closing ]; new_entry = b"\n {id:\\'crm_bridge\\', icon:\\'\xf0\x9f\x94\x97\\', label:\\'CRM Bridge (4 CRMs)\\', color:\\'#22d3ee\\', count: 4}," new_raw = raw.replace(target_truth_line, target_truth_line + new_entry, 1) # Also patch navigateTo dispatcher nav_old = b"else if (modId === 'all_pages') renderAllPages();" nav_new = b"else if (modId === 'crm_bridge') { window.open('/wevia-ia/wevia-admin-crm-v68.php', '_blank'); return; }\n else if (modId === 'all_pages') renderAllPages();" if nav_old in new_raw: new_raw = new_raw.replace(nav_old, nav_new, 1) with open(path, "wb") as f: f.write(new_raw) added = len(new_raw) - len(raw) print(f"PATCHED ok - {len(raw)} → {len(new_raw)} (+{added}B)") print(f"crm_bridge count: {new_raw.count(b'crm_bridge')}") else: print("TARGET_NOT_FOUND - investigating...") idx = raw.find(b"truth_registry") print(f"truth_registry at {idx}") print(f"ctx: {raw[idx-60:idx+120]!r}")