import subprocess, os, re from datetime import datetime DIVERGED = """advice_reconciliation.py branch_scanner.py bulk_strategy_regenerate.py collect_evaluation_data.py cron_to_xmpp.py market_insight.py market_screener.py market_watch.py memory_guardian.py mo_provider.py mofin_collect.py mofin_health.py mofin_news.py multi_timeframe.py premarket_full_review.py promote_candidates.py prune_branches.py server.py stock_profile.py stock_sector_enrich.py strategy_evaluator.py strategy_feedback.py strategy_lifecycle.py strategy_tree.py system_audit.py system_health_check.py technical_analysis.py trend_detector.py xiaoguo_news_processor.py xiaoguo_scanner.py xmpp_agent_core.py""".split() SEARCH_DIRS = ['/home/hmo/MoFin/deploy/profile-scripts', '/home/hmo/.hermes/profiles/position-analyst/scripts', '/home/hmo/.hermes/scripts'] now = datetime.now() print(f"{'file':35s} {'imported_by':40s} {'cron?':5s} {'root_mtime':12s} {'deploy_mtime':12s} verdict") print('-' * 130) for f in DIVERGED: stem = f[:-3] # 谁 import 它 r = subprocess.run( f"grep -rln -E '(^|\\s)(from|import)\\s+{stem}(\\s|$|\\.)' /home/hmo/MoFin/deploy/profile-scripts /home/hmo/.hermes/profiles/position-analyst/scripts /home/hmo/MoFin --include='*.py' 2>/dev/null | grep -v venv | grep -v '{f}' | head -3", shell=True, capture_output=True, text=True, timeout=15) importers = [os.path.basename(x) for x in r.stdout.splitlines() if x.strip() and f not in x] imported = ','.join(importers[:3]) if importers else '-' # 是否在 cron 里被直接执行 in_cron = subprocess.run( f"grep -l '\"script\": \"{f}\"' /home/hmo/.hermes/profiles/position-analyst/cron/jobs.json /home/hmo/.hermes/cron/jobs.json 2>/dev/null", shell=True, capture_output=True, text=True, timeout=5) is_cron = 'Y' if in_cron.stdout.strip() else '-' # mtimes root_p = f'/home/hmo/MoFin/{f}' deploy_p = f'/home/hmo/MoFin/deploy/profile-scripts/{f}' rm = datetime.fromtimestamp(os.path.getmtime(root_p)).strftime('%m-%d') if os.path.exists(root_p) else '-' dm = datetime.fromtimestamp(os.path.getmtime(deploy_p)).strftime('%m-%d') if os.path.exists(deploy_p) else '-' # verdict if importers: verdict = 'LIBRARY->root为准' elif is_cron == 'Y': verdict = 'CRON->deploy为准' else: verdict = '待查' print(f"{f:35s} {imported:40s} {is_cron:5s} {rm:12s} {dm:12s} {verdict}")