{
  "directed": false,
  "multigraph": false,
  "graph": {},
  "nodes": [
    {
      "label": "browser_agent.py",
      "file_type": "code",
      "source_file": "browser_agent.py",
      "source_location": "L1",
      "id": "browser_agent_py",
      "community": 7,
      "norm_label": "browser_agent.py"
    },
    {
      "label": "BrowserAgent",
      "file_type": "code",
      "source_file": "browser_agent.py",
      "source_location": "L46",
      "id": "nami_army_browser_agent_browseragent",
      "community": 8,
      "norm_label": "browseragent"
    },
    {
      "label": ".__init__()",
      "file_type": "code",
      "source_file": "browser_agent.py",
      "source_location": "L49",
      "id": "nami_army_browser_agent_browseragent_init",
      "community": 8,
      "norm_label": ".__init__()"
    },
    {
      "label": ".connect()",
      "file_type": "code",
      "source_file": "browser_agent.py",
      "source_location": "L56",
      "id": "nami_army_browser_agent_browseragent_connect",
      "community": 7,
      "norm_label": ".connect()"
    },
    {
      "label": "._send_and_wait()",
      "file_type": "code",
      "source_file": "browser_agent.py",
      "source_location": "L84",
      "id": "nami_army_browser_agent_browseragent_send_and_wait",
      "community": 6,
      "norm_label": "._send_and_wait()"
    },
    {
      "label": ".ping()",
      "file_type": "code",
      "source_file": "browser_agent.py",
      "source_location": "L112",
      "id": "nami_army_browser_agent_browseragent_ping",
      "community": 7,
      "norm_label": ".ping()"
    },
    {
      "label": ".navigate()",
      "file_type": "code",
      "source_file": "browser_agent.py",
      "source_location": "L121",
      "id": "nami_army_browser_agent_browseragent_navigate",
      "community": 6,
      "norm_label": ".navigate()"
    },
    {
      "label": ".screenshot()",
      "file_type": "code",
      "source_file": "browser_agent.py",
      "source_location": "L128",
      "id": "nami_army_browser_agent_browseragent_screenshot",
      "community": 14,
      "norm_label": ".screenshot()"
    },
    {
      "label": ".click()",
      "file_type": "code",
      "source_file": "browser_agent.py",
      "source_location": "L155",
      "id": "nami_army_browser_agent_browseragent_click",
      "community": 6,
      "norm_label": ".click()"
    },
    {
      "label": ".type_text()",
      "file_type": "code",
      "source_file": "browser_agent.py",
      "source_location": "L162",
      "id": "nami_army_browser_agent_browseragent_type_text",
      "community": 11,
      "norm_label": ".type_text()"
    },
    {
      "label": ".evaluate()",
      "file_type": "code",
      "source_file": "browser_agent.py",
      "source_location": "L169",
      "id": "nami_army_browser_agent_browseragent_evaluate",
      "community": 13,
      "norm_label": ".evaluate()"
    },
    {
      "label": ".get_html()",
      "file_type": "code",
      "source_file": "browser_agent.py",
      "source_location": "L177",
      "id": "nami_army_browser_agent_browseragent_get_html",
      "community": 10,
      "norm_label": ".get_html()"
    },
    {
      "label": ".scroll()",
      "file_type": "code",
      "source_file": "browser_agent.py",
      "source_location": "L185",
      "id": "nami_army_browser_agent_browseragent_scroll",
      "community": 12,
      "norm_label": ".scroll()"
    },
    {
      "label": ".get_page_info()",
      "file_type": "code",
      "source_file": "browser_agent.py",
      "source_location": "L192",
      "id": "nami_army_browser_agent_browseragent_get_page_info",
      "community": 9,
      "norm_label": ".get_page_info()"
    },
    {
      "label": ".close()",
      "file_type": "code",
      "source_file": "browser_agent.py",
      "source_location": "L199",
      "id": "nami_army_browser_agent_browseragent_close",
      "community": 8,
      "norm_label": ".close()"
    },
    {
      "label": "cli_main()",
      "file_type": "code",
      "source_file": "browser_agent.py",
      "source_location": "L208",
      "id": "nami_army_browser_agent_cli_main",
      "community": 7,
      "norm_label": "cli_main()"
    },
    {
      "label": "High-level browser control via Nami Bridge WebSocket relay.",
      "file_type": "rationale",
      "source_file": "browser_agent.py",
      "source_location": "L47",
      "id": "nami_army_browser_agent_rationale_47",
      "community": 8,
      "norm_label": "high-level browser control via nami bridge websocket relay."
    },
    {
      "label": "Connect to Nami Bridge and register as agent.",
      "file_type": "rationale",
      "source_file": "browser_agent.py",
      "source_location": "L57",
      "id": "nami_army_browser_agent_rationale_57",
      "community": 7,
      "norm_label": "connect to nami bridge and register as agent."
    },
    {
      "label": "Send a message and wait for a matching response.",
      "file_type": "rationale",
      "source_file": "browser_agent.py",
      "source_location": "L85",
      "id": "nami_army_browser_agent_rationale_85",
      "community": 6,
      "norm_label": "send a message and wait for a matching response."
    },
    {
      "label": "Check if browser is alive.",
      "file_type": "rationale",
      "source_file": "browser_agent.py",
      "source_location": "L113",
      "id": "nami_army_browser_agent_rationale_113",
      "community": 7,
      "norm_label": "check if browser is alive."
    },
    {
      "label": "Navigate the active tab to a URL.",
      "file_type": "rationale",
      "source_file": "browser_agent.py",
      "source_location": "L122",
      "id": "nami_army_browser_agent_rationale_122",
      "community": 6,
      "norm_label": "navigate the active tab to a url."
    },
    {
      "label": "Capture a screenshot of the current tab. Returns path if saved.",
      "file_type": "rationale",
      "source_file": "browser_agent.py",
      "source_location": "L129",
      "id": "nami_army_browser_agent_rationale_129",
      "community": 14,
      "norm_label": "capture a screenshot of the current tab. returns path if saved."
    },
    {
      "label": "Click an element by CSS selector.",
      "file_type": "rationale",
      "source_file": "browser_agent.py",
      "source_location": "L156",
      "id": "nami_army_browser_agent_rationale_156",
      "community": 6,
      "norm_label": "click an element by css selector."
    },
    {
      "label": "Type text into an input element.",
      "file_type": "rationale",
      "source_file": "browser_agent.py",
      "source_location": "L163",
      "id": "nami_army_browser_agent_rationale_163",
      "community": 11,
      "norm_label": "type text into an input element."
    },
    {
      "label": "Execute JavaScript in the active tab and return the result.",
      "file_type": "rationale",
      "source_file": "browser_agent.py",
      "source_location": "L170",
      "id": "nami_army_browser_agent_rationale_170",
      "community": 13,
      "norm_label": "execute javascript in the active tab and return the result."
    },
    {
      "label": "Get the full HTML of the current page.",
      "file_type": "rationale",
      "source_file": "browser_agent.py",
      "source_location": "L178",
      "id": "nami_army_browser_agent_rationale_178",
      "community": 10,
      "norm_label": "get the full html of the current page."
    },
    {
      "label": "Scroll the page by pixels.",
      "file_type": "rationale",
      "source_file": "browser_agent.py",
      "source_location": "L186",
      "id": "nami_army_browser_agent_rationale_186",
      "community": 12,
      "norm_label": "scroll the page by pixels."
    },
    {
      "label": "Get current page URL and title.",
      "file_type": "rationale",
      "source_file": "browser_agent.py",
      "source_location": "L193",
      "id": "nami_army_browser_agent_rationale_193",
      "community": 9,
      "norm_label": "get current page url and title."
    },
    {
      "label": "Close the WebSocket connection.",
      "file_type": "rationale",
      "source_file": "browser_agent.py",
      "source_location": "L200",
      "id": "nami_army_browser_agent_rationale_200",
      "community": 8,
      "norm_label": "close the websocket connection."
    },
    {
      "label": "health_alerts.py",
      "file_type": "code",
      "source_file": "health_alerts.py",
      "source_location": "L1",
      "id": "health_alerts_py",
      "community": 1,
      "norm_label": "health_alerts.py"
    },
    {
      "label": "telegram_send()",
      "file_type": "code",
      "source_file": "health_alerts.py",
      "source_location": "L37",
      "id": "nami_army_health_alerts_telegram_send",
      "community": 1,
      "norm_label": "telegram_send()"
    },
    {
      "label": "load_state()",
      "file_type": "code",
      "source_file": "health_alerts.py",
      "source_location": "L76",
      "id": "nami_army_health_alerts_load_state",
      "community": 1,
      "norm_label": "load_state()"
    },
    {
      "label": "save_state()",
      "file_type": "code",
      "source_file": "health_alerts.py",
      "source_location": "L82",
      "id": "nami_army_health_alerts_save_state",
      "community": 1,
      "norm_label": "save_state()"
    },
    {
      "label": "fetch_status()",
      "file_type": "code",
      "source_file": "health_alerts.py",
      "source_location": "L87",
      "id": "nami_army_health_alerts_fetch_status",
      "community": 1,
      "norm_label": "fetch_status()"
    },
    {
      "label": "format_service_name()",
      "file_type": "code",
      "source_file": "health_alerts.py",
      "source_location": "L98",
      "id": "nami_army_health_alerts_format_service_name",
      "community": 1,
      "norm_label": "format_service_name()"
    },
    {
      "label": "format_down_alert()",
      "file_type": "code",
      "source_file": "health_alerts.py",
      "source_location": "L103",
      "id": "nami_army_health_alerts_format_down_alert",
      "community": 1,
      "norm_label": "format_down_alert()"
    },
    {
      "label": "format_recovery_alert()",
      "file_type": "code",
      "source_file": "health_alerts.py",
      "source_location": "L126",
      "id": "nami_army_health_alerts_format_recovery_alert",
      "community": 1,
      "norm_label": "format_recovery_alert()"
    },
    {
      "label": "format_daily_summary()",
      "file_type": "code",
      "source_file": "health_alerts.py",
      "source_location": "L152",
      "id": "nami_army_health_alerts_format_daily_summary",
      "community": 1,
      "norm_label": "format_daily_summary()"
    },
    {
      "label": "try_restart()",
      "file_type": "code",
      "source_file": "health_alerts.py",
      "source_location": "L181",
      "id": "nami_army_health_alerts_try_restart",
      "community": 1,
      "norm_label": "try_restart()"
    },
    {
      "label": "main()",
      "file_type": "code",
      "source_file": "health_alerts.py",
      "source_location": "L204",
      "id": "nami_army_health_alerts_main",
      "community": 1,
      "norm_label": "main()"
    },
    {
      "label": "Send message to Telegram. Returns True if successful.",
      "file_type": "rationale",
      "source_file": "health_alerts.py",
      "source_location": "L38",
      "id": "nami_army_health_alerts_rationale_38",
      "community": 1,
      "norm_label": "send message to telegram. returns true if successful."
    },
    {
      "label": "Format a DOWN alert message",
      "file_type": "rationale",
      "source_file": "health_alerts.py",
      "source_location": "L104",
      "id": "nami_army_health_alerts_rationale_104",
      "community": 1,
      "norm_label": "format a down alert message"
    },
    {
      "label": "Format a RECOVERY alert message",
      "file_type": "rationale",
      "source_file": "health_alerts.py",
      "source_location": "L127",
      "id": "nami_army_health_alerts_rationale_127",
      "community": 1,
      "norm_label": "format a recovery alert message"
    },
    {
      "label": "Format daily summary message",
      "file_type": "rationale",
      "source_file": "health_alerts.py",
      "source_location": "L153",
      "id": "nami_army_health_alerts_rationale_153",
      "community": 1,
      "norm_label": "format daily summary message"
    },
    {
      "label": "Try to restart a service via systemctl. Returns True if restarted.",
      "file_type": "rationale",
      "source_file": "health_alerts.py",
      "source_location": "L182",
      "id": "nami_army_health_alerts_rationale_182",
      "community": 1,
      "norm_label": "try to restart a service via systemctl. returns true if restarted."
    },
    {
      "label": "test_browser.py",
      "file_type": "code",
      "source_file": "test_browser.py",
      "source_location": "L1",
      "id": "test_browser_py",
      "community": 5,
      "norm_label": "test_browser.py"
    },
    {
      "label": "Colors",
      "file_type": "code",
      "source_file": "test_browser.py",
      "source_location": "L23",
      "id": "nami_army_test_browser_colors",
      "community": 5,
      "norm_label": "colors"
    },
    {
      "label": "ok()",
      "file_type": "code",
      "source_file": "test_browser.py",
      "source_location": "L33",
      "id": "nami_army_test_browser_ok",
      "community": 5,
      "norm_label": "ok()"
    },
    {
      "label": "fail()",
      "file_type": "code",
      "source_file": "test_browser.py",
      "source_location": "L37",
      "id": "nami_army_test_browser_fail",
      "community": 5,
      "norm_label": "fail()"
    },
    {
      "label": "warn()",
      "file_type": "code",
      "source_file": "test_browser.py",
      "source_location": "L41",
      "id": "nami_army_test_browser_warn",
      "community": 5,
      "norm_label": "warn()"
    },
    {
      "label": "info()",
      "file_type": "code",
      "source_file": "test_browser.py",
      "source_location": "L45",
      "id": "nami_army_test_browser_info",
      "community": 5,
      "norm_label": "info()"
    },
    {
      "label": "main()",
      "file_type": "code",
      "source_file": "test_browser.py",
      "source_location": "L49",
      "id": "nami_army_test_browser_main",
      "community": 5,
      "norm_label": "main()"
    },
    {
      "label": "draw_alert.py",
      "file_type": "code",
      "source_file": "draw_alert.py",
      "source_location": "L1",
      "id": "draw_alert_py",
      "community": 3,
      "norm_label": "draw_alert.py"
    },
    {
      "label": "_read_secret()",
      "file_type": "code",
      "source_file": "draw_alert.py",
      "source_location": "L13",
      "id": "nami_army_draw_alert_read_secret",
      "community": 3,
      "norm_label": "_read_secret()"
    },
    {
      "label": "db_query()",
      "file_type": "code",
      "source_file": "draw_alert.py",
      "source_location": "L28",
      "id": "nami_army_draw_alert_db_query",
      "community": 3,
      "norm_label": "db_query()"
    },
    {
      "label": "get_latest_draw()",
      "file_type": "code",
      "source_file": "draw_alert.py",
      "source_location": "L40",
      "id": "nami_army_draw_alert_get_latest_draw",
      "community": 3,
      "norm_label": "get_latest_draw()"
    },
    {
      "label": "get_prediction_for_draw()",
      "file_type": "code",
      "source_file": "draw_alert.py",
      "source_location": "L59",
      "id": "nami_army_draw_alert_get_prediction_for_draw",
      "community": 3,
      "norm_label": "get_prediction_for_draw()"
    },
    {
      "label": "format_alert()",
      "file_type": "code",
      "source_file": "draw_alert.py",
      "source_location": "L115",
      "id": "nami_army_draw_alert_format_alert",
      "community": 3,
      "norm_label": "format_alert()"
    },
    {
      "label": "mark_notified()",
      "file_type": "code",
      "source_file": "draw_alert.py",
      "source_location": "L147",
      "id": "nami_army_draw_alert_mark_notified",
      "community": 3,
      "norm_label": "mark_notified()"
    },
    {
      "label": "send_to_vip()",
      "file_type": "code",
      "source_file": "draw_alert.py",
      "source_location": "L159",
      "id": "nami_army_draw_alert_send_to_vip",
      "community": 3,
      "norm_label": "send_to_vip()"
    },
    {
      "label": "main()",
      "file_type": "code",
      "source_file": "draw_alert.py",
      "source_location": "L174",
      "id": "nami_army_draw_alert_main",
      "community": 3,
      "norm_label": "main()"
    },
    {
      "label": "Get latest drawn date",
      "file_type": "rationale",
      "source_file": "draw_alert.py",
      "source_location": "L41",
      "id": "nami_army_draw_alert_rationale_41",
      "community": 3,
      "norm_label": "get latest drawn date"
    },
    {
      "label": "Get evaluated prediction for a specific draw date",
      "file_type": "rationale",
      "source_file": "draw_alert.py",
      "source_location": "L60",
      "id": "nami_army_draw_alert_rationale_60",
      "community": 3,
      "norm_label": "get evaluated prediction for a specific draw date"
    },
    {
      "label": "Format draw result alert",
      "file_type": "rationale",
      "source_file": "draw_alert.py",
      "source_location": "L116",
      "id": "nami_army_draw_alert_rationale_116",
      "community": 3,
      "norm_label": "format draw result alert"
    },
    {
      "label": "Mark draw as notified to prevent re-send",
      "file_type": "rationale",
      "source_file": "draw_alert.py",
      "source_location": "L148",
      "id": "nami_army_draw_alert_rationale_148",
      "community": 3,
      "norm_label": "mark draw as notified to prevent re-send"
    },
    {
      "label": "api_gateway.py",
      "file_type": "code",
      "source_file": "api_gateway.py",
      "source_location": "L1",
      "id": "api_gateway_py",
      "community": 0,
      "norm_label": "api_gateway.py"
    },
    {
      "label": "check_systemd()",
      "file_type": "code",
      "source_file": "api_gateway.py",
      "source_location": "L72",
      "id": "nami_army_api_gateway_check_systemd",
      "community": 0,
      "norm_label": "check_systemd()"
    },
    {
      "label": "get_system_metrics()",
      "file_type": "code",
      "source_file": "api_gateway.py",
      "source_location": "L80",
      "id": "nami_army_api_gateway_get_system_metrics",
      "community": 0,
      "norm_label": "get_system_metrics()"
    },
    {
      "label": "check_all_services()",
      "file_type": "code",
      "source_file": "api_gateway.py",
      "source_location": "L126",
      "id": "nami_army_api_gateway_check_all_services",
      "community": 0,
      "norm_label": "check_all_services()"
    },
    {
      "label": "root()",
      "file_type": "code",
      "source_file": "api_gateway.py",
      "source_location": "L150",
      "id": "nami_army_api_gateway_root",
      "community": 0,
      "norm_label": "root()"
    },
    {
      "label": "api_status()",
      "file_type": "code",
      "source_file": "api_gateway.py",
      "source_location": "L170",
      "id": "nami_army_api_gateway_api_status",
      "community": 0,
      "norm_label": "api_status()"
    },
    {
      "label": "api_services()",
      "file_type": "code",
      "source_file": "api_gateway.py",
      "source_location": "L196",
      "id": "nami_army_api_gateway_api_services",
      "community": 0,
      "norm_label": "api_services()"
    },
    {
      "label": "api_agents()",
      "file_type": "code",
      "source_file": "api_gateway.py",
      "source_location": "L214",
      "id": "nami_army_api_gateway_api_agents",
      "community": 0,
      "norm_label": "api_agents()"
    },
    {
      "label": "api_bridge()",
      "file_type": "code",
      "source_file": "api_gateway.py",
      "source_location": "L232",
      "id": "nami_army_api_gateway_api_bridge",
      "community": 0,
      "norm_label": "api_bridge()"
    },
    {
      "label": "api_health()",
      "file_type": "code",
      "source_file": "api_gateway.py",
      "source_location": "L272",
      "id": "nami_army_api_gateway_api_health",
      "community": 0,
      "norm_label": "api_health()"
    },
    {
      "label": "api_backup()",
      "file_type": "code",
      "source_file": "api_gateway.py",
      "source_location": "L278",
      "id": "nami_army_api_gateway_api_backup",
      "community": 0,
      "norm_label": "api_backup()"
    },
    {
      "label": "health()",
      "file_type": "code",
      "source_file": "api_gateway.py",
      "source_location": "L297",
      "id": "nami_army_api_gateway_health",
      "community": 0,
      "norm_label": "health()"
    },
    {
      "label": "main()",
      "file_type": "code",
      "source_file": "api_gateway.py",
      "source_location": "L304",
      "id": "nami_army_api_gateway_main",
      "community": 0,
      "norm_label": "main()"
    },
    {
      "label": "Get system metrics: CPU, RAM, Disk, Uptime",
      "file_type": "rationale",
      "source_file": "api_gateway.py",
      "source_location": "L81",
      "id": "nami_army_api_gateway_rationale_81",
      "community": 0,
      "norm_label": "get system metrics: cpu, ram, disk, uptime"
    },
    {
      "label": "Get status of all services",
      "file_type": "rationale",
      "source_file": "api_gateway.py",
      "source_location": "L171",
      "id": "nami_army_api_gateway_rationale_171",
      "community": 0,
      "norm_label": "get status of all services"
    },
    {
      "label": "List all services with endpoints",
      "file_type": "rationale",
      "source_file": "api_gateway.py",
      "source_location": "L197",
      "id": "nami_army_api_gateway_rationale_197",
      "community": 0,
      "norm_label": "list all services with endpoints"
    },
    {
      "label": "Backup status \u2014 reads from backup_state.json",
      "file_type": "rationale",
      "source_file": "api_gateway.py",
      "source_location": "L279",
      "id": "nami_army_api_gateway_rationale_279",
      "community": 0,
      "norm_label": "backup status \u2014 reads from backup_state.json"
    },
    {
      "label": "Health check (for load balancers)",
      "file_type": "rationale",
      "source_file": "api_gateway.py",
      "source_location": "L298",
      "id": "nami_army_api_gateway_rationale_298",
      "community": 0,
      "norm_label": "health check (for load balancers)"
    },
    {
      "label": "vip_lottery_sender.py",
      "file_type": "code",
      "source_file": "vip_lottery_sender.py",
      "source_location": "L1",
      "id": "vip_lottery_sender_py",
      "community": 4,
      "norm_label": "vip_lottery_sender.py"
    },
    {
      "label": "_read_secret()",
      "file_type": "code",
      "source_file": "vip_lottery_sender.py",
      "source_location": "L14",
      "id": "nami_army_vip_lottery_sender_read_secret",
      "community": 4,
      "norm_label": "_read_secret()"
    },
    {
      "label": "db_query()",
      "file_type": "code",
      "source_file": "vip_lottery_sender.py",
      "source_location": "L29",
      "id": "nami_army_vip_lottery_sender_db_query",
      "community": 4,
      "norm_label": "db_query()"
    },
    {
      "label": "fetch_vip_data()",
      "file_type": "code",
      "source_file": "vip_lottery_sender.py",
      "source_location": "L43",
      "id": "nami_army_vip_lottery_sender_fetch_vip_data",
      "community": 4,
      "norm_label": "fetch_vip_data()"
    },
    {
      "label": "format_message()",
      "file_type": "code",
      "source_file": "vip_lottery_sender.py",
      "source_location": "L137",
      "id": "nami_army_vip_lottery_sender_format_message",
      "community": 4,
      "norm_label": "format_message()"
    },
    {
      "label": "send_to_vip()",
      "file_type": "code",
      "source_file": "vip_lottery_sender.py",
      "source_location": "L193",
      "id": "nami_army_vip_lottery_sender_send_to_vip",
      "community": 4,
      "norm_label": "send_to_vip()"
    },
    {
      "label": "main()",
      "file_type": "code",
      "source_file": "vip_lottery_sender.py",
      "source_location": "L209",
      "id": "nami_army_vip_lottery_sender_main",
      "community": 4,
      "norm_label": "main()"
    },
    {
      "label": "Run a psql query and return stripped output",
      "file_type": "rationale",
      "source_file": "vip_lottery_sender.py",
      "source_location": "L30",
      "id": "nami_army_vip_lottery_sender_rationale_30",
      "community": 4,
      "norm_label": "run a psql query and return stripped output"
    },
    {
      "label": "Fetch all VIP prediction data from DB",
      "file_type": "rationale",
      "source_file": "vip_lottery_sender.py",
      "source_location": "L44",
      "id": "nami_army_vip_lottery_sender_rationale_44",
      "community": 4,
      "norm_label": "fetch all vip prediction data from db"
    },
    {
      "label": "Format VIP message in HTML",
      "file_type": "rationale",
      "source_file": "vip_lottery_sender.py",
      "source_location": "L138",
      "id": "nami_army_vip_lottery_sender_rationale_138",
      "community": 4,
      "norm_label": "format vip message in html"
    },
    {
      "label": "Send message to VIP channel",
      "file_type": "rationale",
      "source_file": "vip_lottery_sender.py",
      "source_location": "L194",
      "id": "nami_army_vip_lottery_sender_rationale_194",
      "community": 4,
      "norm_label": "send message to vip channel"
    },
    {
      "label": "health_monitor.py",
      "file_type": "code",
      "source_file": "health_monitor.py",
      "source_location": "L1",
      "id": "health_monitor_py",
      "community": 2,
      "norm_label": "health_monitor.py"
    },
    {
      "label": "check_systemd()",
      "file_type": "code",
      "source_file": "health_monitor.py",
      "source_location": "L115",
      "id": "nami_army_health_monitor_check_systemd",
      "community": 2,
      "norm_label": "check_systemd()"
    },
    {
      "label": "check_port()",
      "file_type": "code",
      "source_file": "health_monitor.py",
      "source_location": "L128",
      "id": "nami_army_health_monitor_check_port",
      "community": 2,
      "norm_label": "check_port()"
    },
    {
      "label": "check_all()",
      "file_type": "code",
      "source_file": "health_monitor.py",
      "source_location": "L141",
      "id": "nami_army_health_monitor_check_all",
      "community": 2,
      "norm_label": "check_all()"
    },
    {
      "label": "load_previous_state()",
      "file_type": "code",
      "source_file": "health_monitor.py",
      "source_location": "L167",
      "id": "nami_army_health_monitor_load_previous_state",
      "community": 2,
      "norm_label": "load_previous_state()"
    },
    {
      "label": "save_state()",
      "file_type": "code",
      "source_file": "health_monitor.py",
      "source_location": "L177",
      "id": "nami_army_health_monitor_save_state",
      "community": 2,
      "norm_label": "save_state()"
    },
    {
      "label": "detect_changes()",
      "file_type": "code",
      "source_file": "health_monitor.py",
      "source_location": "L183",
      "id": "nami_army_health_monitor_detect_changes",
      "community": 2,
      "norm_label": "detect_changes()"
    },
    {
      "label": "format_telegram_message()",
      "file_type": "code",
      "source_file": "health_monitor.py",
      "source_location": "L202",
      "id": "nami_army_health_monitor_format_telegram_message",
      "community": 2,
      "norm_label": "format_telegram_message()"
    },
    {
      "label": "main()",
      "file_type": "code",
      "source_file": "health_monitor.py",
      "source_location": "L242",
      "id": "nami_army_health_monitor_main",
      "community": 2,
      "norm_label": "main()"
    },
    {
      "label": "Check if a systemd service is active.",
      "file_type": "rationale",
      "source_file": "health_monitor.py",
      "source_location": "L116",
      "id": "nami_army_health_monitor_rationale_116",
      "community": 2,
      "norm_label": "check if a systemd service is active."
    },
    {
      "label": "Check if a port is listening.",
      "file_type": "rationale",
      "source_file": "health_monitor.py",
      "source_location": "L129",
      "id": "nami_army_health_monitor_rationale_129",
      "community": 2,
      "norm_label": "check if a port is listening."
    },
    {
      "label": "Check all services and return status dict.",
      "file_type": "rationale",
      "source_file": "health_monitor.py",
      "source_location": "L142",
      "id": "nami_army_health_monitor_rationale_142",
      "community": 2,
      "norm_label": "check all services and return status dict."
    },
    {
      "label": "Load last known state from file.",
      "file_type": "rationale",
      "source_file": "health_monitor.py",
      "source_location": "L168",
      "id": "nami_army_health_monitor_rationale_168",
      "community": 2,
      "norm_label": "load last known state from file."
    },
    {
      "label": "Save current state to file.",
      "file_type": "rationale",
      "source_file": "health_monitor.py",
      "source_location": "L178",
      "id": "nami_army_health_monitor_rationale_178",
      "community": 2,
      "norm_label": "save current state to file."
    },
    {
      "label": "Detect services that changed state.",
      "file_type": "rationale",
      "source_file": "health_monitor.py",
      "source_location": "L184",
      "id": "nami_army_health_monitor_rationale_184",
      "community": 2,
      "norm_label": "detect services that changed state."
    },
    {
      "label": "Format alert message for Telegram.",
      "file_type": "rationale",
      "source_file": "health_monitor.py",
      "source_location": "L203",
      "id": "nami_army_health_monitor_rationale_203",
      "community": 2,
      "norm_label": "format alert message for telegram."
    }
  ],
  "links": [
    {
      "relation": "contains",
      "confidence": "EXTRACTED",
      "source_file": "browser_agent.py",
      "source_location": "L46",
      "weight": 1.0,
      "source": "browser_agent_py",
      "target": "nami_army_browser_agent_browseragent",
      "confidence_score": 1.0
    },
    {
      "relation": "contains",
      "confidence": "EXTRACTED",
      "source_file": "browser_agent.py",
      "source_location": "L208",
      "weight": 1.0,
      "source": "browser_agent_py",
      "target": "nami_army_browser_agent_cli_main",
      "confidence_score": 1.0
    },
    {
      "relation": "method",
      "confidence": "EXTRACTED",
      "source_file": "browser_agent.py",
      "source_location": "L49",
      "weight": 1.0,
      "source": "nami_army_browser_agent_browseragent",
      "target": "nami_army_browser_agent_browseragent_init",
      "confidence_score": 1.0
    },
    {
      "relation": "method",
      "confidence": "EXTRACTED",
      "source_file": "browser_agent.py",
      "source_location": "L56",
      "weight": 1.0,
      "source": "nami_army_browser_agent_browseragent",
      "target": "nami_army_browser_agent_browseragent_connect",
      "confidence_score": 1.0
    },
    {
      "relation": "method",
      "confidence": "EXTRACTED",
      "source_file": "browser_agent.py",
      "source_location": "L84",
      "weight": 1.0,
      "source": "nami_army_browser_agent_browseragent",
      "target": "nami_army_browser_agent_browseragent_send_and_wait",
      "confidence_score": 1.0
    },
    {
      "relation": "method",
      "confidence": "EXTRACTED",
      "source_file": "browser_agent.py",
      "source_location": "L112",
      "weight": 1.0,
      "source": "nami_army_browser_agent_browseragent",
      "target": "nami_army_browser_agent_browseragent_ping",
      "confidence_score": 1.0
    },
    {
      "relation": "method",
      "confidence": "EXTRACTED",
      "source_file": "browser_agent.py",
      "source_location": "L121",
      "weight": 1.0,
      "source": "nami_army_browser_agent_browseragent",
      "target": "nami_army_browser_agent_browseragent_navigate",
      "confidence_score": 1.0
    },
    {
      "relation": "method",
      "confidence": "EXTRACTED",
      "source_file": "browser_agent.py",
      "source_location": "L128",
      "weight": 1.0,
      "source": "nami_army_browser_agent_browseragent",
      "target": "nami_army_browser_agent_browseragent_screenshot",
      "confidence_score": 1.0
    },
    {
      "relation": "method",
      "confidence": "EXTRACTED",
      "source_file": "browser_agent.py",
      "source_location": "L155",
      "weight": 1.0,
      "source": "nami_army_browser_agent_browseragent",
      "target": "nami_army_browser_agent_browseragent_click",
      "confidence_score": 1.0
    },
    {
      "relation": "method",
      "confidence": "EXTRACTED",
      "source_file": "browser_agent.py",
      "source_location": "L162",
      "weight": 1.0,
      "source": "nami_army_browser_agent_browseragent",
      "target": "nami_army_browser_agent_browseragent_type_text",
      "confidence_score": 1.0
    },
    {
      "relation": "method",
      "confidence": "EXTRACTED",
      "source_file": "browser_agent.py",
      "source_location": "L169",
      "weight": 1.0,
      "source": "nami_army_browser_agent_browseragent",
      "target": "nami_army_browser_agent_browseragent_evaluate",
      "confidence_score": 1.0
    },
    {
      "relation": "method",
      "confidence": "EXTRACTED",
      "source_file": "browser_agent.py",
      "source_location": "L177",
      "weight": 1.0,
      "source": "nami_army_browser_agent_browseragent",
      "target": "nami_army_browser_agent_browseragent_get_html",
      "confidence_score": 1.0
    },
    {
      "relation": "method",
      "confidence": "EXTRACTED",
      "source_file": "browser_agent.py",
      "source_location": "L185",
      "weight": 1.0,
      "source": "nami_army_browser_agent_browseragent",
      "target": "nami_army_browser_agent_browseragent_scroll",
      "confidence_score": 1.0
    },
    {
      "relation": "method",
      "confidence": "EXTRACTED",
      "source_file": "browser_agent.py",
      "source_location": "L192",
      "weight": 1.0,
      "source": "nami_army_browser_agent_browseragent",
      "target": "nami_army_browser_agent_browseragent_get_page_info",
      "confidence_score": 1.0
    },
    {
      "relation": "method",
      "confidence": "EXTRACTED",
      "source_file": "browser_agent.py",
      "source_location": "L199",
      "weight": 1.0,
      "source": "nami_army_browser_agent_browseragent",
      "target": "nami_army_browser_agent_browseragent_close",
      "confidence_score": 1.0
    },
    {
      "relation": "calls",
      "context": "call",
      "confidence": "EXTRACTED",
      "source_file": "browser_agent.py",
      "source_location": "L245",
      "weight": 1.0,
      "source": "nami_army_browser_agent_cli_main",
      "target": "nami_army_browser_agent_browseragent",
      "confidence_score": 1.0
    },
    {
      "relation": "rationale_for",
      "confidence": "EXTRACTED",
      "source_file": "browser_agent.py",
      "source_location": "L47",
      "weight": 1.0,
      "source": "nami_army_browser_agent_rationale_47",
      "target": "nami_army_browser_agent_browseragent",
      "confidence_score": 1.0
    },
    {
      "relation": "calls",
      "context": "call",
      "confidence": "INFERRED",
      "confidence_score": 0.8,
      "source_file": "test_browser.py",
      "source_location": "L53",
      "weight": 1.0,
      "source": "nami_army_test_browser_main",
      "target": "nami_army_browser_agent_browseragent"
    },
    {
      "relation": "calls",
      "context": "call",
      "confidence": "EXTRACTED",
      "source_file": "browser_agent.py",
      "source_location": "L77",
      "weight": 1.0,
      "source": "nami_army_browser_agent_browseragent_connect",
      "target": "nami_army_browser_agent_browseragent_ping",
      "confidence_score": 1.0
    },
    {
      "relation": "calls",
      "context": "call",
      "confidence": "EXTRACTED",
      "source_file": "browser_agent.py",
      "source_location": "L248",
      "weight": 1.0,
      "source": "nami_army_browser_agent_cli_main",
      "target": "nami_army_browser_agent_browseragent_connect",
      "confidence_score": 1.0
    },
    {
      "relation": "rationale_for",
      "confidence": "EXTRACTED",
      "source_file": "browser_agent.py",
      "source_location": "L57",
      "weight": 1.0,
      "source": "nami_army_browser_agent_rationale_57",
      "target": "nami_army_browser_agent_browseragent_connect",
      "confidence_score": 1.0
    },
    {
      "relation": "calls",
      "context": "call",
      "confidence": "EXTRACTED",
      "source_file": "browser_agent.py",
      "source_location": "L123",
      "weight": 1.0,
      "source": "nami_army_browser_agent_browseragent_navigate",
      "target": "nami_army_browser_agent_browseragent_send_and_wait",
      "confidence_score": 1.0
    },
    {
      "relation": "calls",
      "context": "call",
      "confidence": "EXTRACTED",
      "source_file": "browser_agent.py",
      "source_location": "L130",
      "weight": 1.0,
      "source": "nami_army_browser_agent_browseragent_screenshot",
      "target": "nami_army_browser_agent_browseragent_send_and_wait",
      "confidence_score": 1.0
    },
    {
      "relation": "calls",
      "context": "call",
      "confidence": "EXTRACTED",
      "source_file": "browser_agent.py",
      "source_location": "L157",
      "weight": 1.0,
      "source": "nami_army_browser_agent_browseragent_click",
      "target": "nami_army_browser_agent_browseragent_send_and_wait",
      "confidence_score": 1.0
    },
    {
      "relation": "calls",
      "context": "call",
      "confidence": "EXTRACTED",
      "source_file": "browser_agent.py",
      "source_location": "L164",
      "weight": 1.0,
      "source": "nami_army_browser_agent_browseragent_type_text",
      "target": "nami_army_browser_agent_browseragent_send_and_wait",
      "confidence_score": 1.0
    },
    {
      "relation": "calls",
      "context": "call",
      "confidence": "EXTRACTED",
      "source_file": "browser_agent.py",
      "source_location": "L171",
      "weight": 1.0,
      "source": "nami_army_browser_agent_browseragent_evaluate",
      "target": "nami_army_browser_agent_browseragent_send_and_wait",
      "confidence_score": 1.0
    },
    {
      "relation": "calls",
      "context": "call",
      "confidence": "EXTRACTED",
      "source_file": "browser_agent.py",
      "source_location": "L179",
      "weight": 1.0,
      "source": "nami_army_browser_agent_browseragent_get_html",
      "target": "nami_army_browser_agent_browseragent_send_and_wait",
      "confidence_score": 1.0
    },
    {
      "relation": "calls",
      "context": "call",
      "confidence": "EXTRACTED",
      "source_file": "browser_agent.py",
      "source_location": "L187",
      "weight": 1.0,
      "source": "nami_army_browser_agent_browseragent_scroll",
      "target": "nami_army_browser_agent_browseragent_send_and_wait",
      "confidence_score": 1.0
    },
    {
      "relation": "calls",
      "context": "call",
      "confidence": "EXTRACTED",
      "source_file": "browser_agent.py",
      "source_location": "L194",
      "weight": 1.0,
      "source": "nami_army_browser_agent_browseragent_get_page_info",
      "target": "nami_army_browser_agent_browseragent_send_and_wait",
      "confidence_score": 1.0
    },
    {
      "relation": "rationale_for",
      "confidence": "EXTRACTED",
      "source_file": "browser_agent.py",
      "source_location": "L85",
      "weight": 1.0,
      "source": "nami_army_browser_agent_rationale_85",
      "target": "nami_army_browser_agent_browseragent_send_and_wait",
      "confidence_score": 1.0
    },
    {
      "relation": "calls",
      "context": "call",
      "confidence": "EXTRACTED",
      "source_file": "browser_agent.py",
      "source_location": "L258",
      "weight": 1.0,
      "source": "nami_army_browser_agent_cli_main",
      "target": "nami_army_browser_agent_browseragent_ping",
      "confidence_score": 1.0
    },
    {
      "relation": "rationale_for",
      "confidence": "EXTRACTED",
      "source_file": "browser_agent.py",
      "source_location": "L113",
      "weight": 1.0,
      "source": "nami_army_browser_agent_rationale_113",
      "target": "nami_army_browser_agent_browseragent_ping",
      "confidence_score": 1.0
    },
    {
      "relation": "calls",
      "context": "call",
      "confidence": "EXTRACTED",
      "source_file": "browser_agent.py",
      "source_location": "L269",
      "weight": 1.0,
      "source": "nami_army_browser_agent_cli_main",
      "target": "nami_army_browser_agent_browseragent_navigate",
      "confidence_score": 1.0
    },
    {
      "relation": "rationale_for",
      "confidence": "EXTRACTED",
      "source_file": "browser_agent.py",
      "source_location": "L122",
      "weight": 1.0,
      "source": "nami_army_browser_agent_rationale_122",
      "target": "nami_army_browser_agent_browseragent_navigate",
      "confidence_score": 1.0
    },
    {
      "relation": "calls",
      "context": "call",
      "confidence": "EXTRACTED",
      "source_file": "browser_agent.py",
      "source_location": "L309",
      "weight": 1.0,
      "source": "nami_army_browser_agent_cli_main",
      "target": "nami_army_browser_agent_browseragent_screenshot",
      "confidence_score": 1.0
    },
    {
      "relation": "rationale_for",
      "confidence": "EXTRACTED",
      "source_file": "browser_agent.py",
      "source_location": "L129",
      "weight": 1.0,
      "source": "nami_army_browser_agent_rationale_129",
      "target": "nami_army_browser_agent_browseragent_screenshot",
      "confidence_score": 1.0
    },
    {
      "relation": "calls",
      "context": "call",
      "confidence": "EXTRACTED",
      "source_file": "browser_agent.py",
      "source_location": "L280",
      "weight": 1.0,
      "source": "nami_army_browser_agent_cli_main",
      "target": "nami_army_browser_agent_browseragent_click",
      "confidence_score": 1.0
    },
    {
      "relation": "rationale_for",
      "confidence": "EXTRACTED",
      "source_file": "browser_agent.py",
      "source_location": "L156",
      "weight": 1.0,
      "source": "nami_army_browser_agent_rationale_156",
      "target": "nami_army_browser_agent_browseragent_click",
      "confidence_score": 1.0
    },
    {
      "relation": "calls",
      "context": "call",
      "confidence": "EXTRACTED",
      "source_file": "browser_agent.py",
      "source_location": "L286",
      "weight": 1.0,
      "source": "nami_army_browser_agent_cli_main",
      "target": "nami_army_browser_agent_browseragent_type_text",
      "confidence_score": 1.0
    },
    {
      "relation": "rationale_for",
      "confidence": "EXTRACTED",
      "source_file": "browser_agent.py",
      "source_location": "L163",
      "weight": 1.0,
      "source": "nami_army_browser_agent_rationale_163",
      "target": "nami_army_browser_agent_browseragent_type_text",
      "confidence_score": 1.0
    },
    {
      "relation": "calls",
      "context": "call",
      "confidence": "EXTRACTED",
      "source_file": "browser_agent.py",
      "source_location": "L275",
      "weight": 1.0,
      "source": "nami_army_browser_agent_cli_main",
      "target": "nami_army_browser_agent_browseragent_evaluate",
      "confidence_score": 1.0
    },
    {
      "relation": "rationale_for",
      "confidence": "EXTRACTED",
      "source_file": "browser_agent.py",
      "source_location": "L170",
      "weight": 1.0,
      "source": "nami_army_browser_agent_rationale_170",
      "target": "nami_army_browser_agent_browseragent_evaluate",
      "confidence_score": 1.0
    },
    {
      "relation": "calls",
      "context": "call",
      "confidence": "EXTRACTED",
      "source_file": "browser_agent.py",
      "source_location": "L296",
      "weight": 1.0,
      "source": "nami_army_browser_agent_cli_main",
      "target": "nami_army_browser_agent_browseragent_get_html",
      "confidence_score": 1.0
    },
    {
      "relation": "rationale_for",
      "confidence": "EXTRACTED",
      "source_file": "browser_agent.py",
      "source_location": "L178",
      "weight": 1.0,
      "source": "nami_army_browser_agent_rationale_178",
      "target": "nami_army_browser_agent_browseragent_get_html",
      "confidence_score": 1.0
    },
    {
      "relation": "calls",
      "context": "call",
      "confidence": "EXTRACTED",
      "source_file": "browser_agent.py",
      "source_location": "L291",
      "weight": 1.0,
      "source": "nami_army_browser_agent_cli_main",
      "target": "nami_army_browser_agent_browseragent_scroll",
      "confidence_score": 1.0
    },
    {
      "relation": "rationale_for",
      "confidence": "EXTRACTED",
      "source_file": "browser_agent.py",
      "source_location": "L186",
      "weight": 1.0,
      "source": "nami_army_browser_agent_rationale_186",
      "target": "nami_army_browser_agent_browseragent_scroll",
      "confidence_score": 1.0
    },
    {
      "relation": "calls",
      "context": "call",
      "confidence": "EXTRACTED",
      "source_file": "browser_agent.py",
      "source_location": "L303",
      "weight": 1.0,
      "source": "nami_army_browser_agent_cli_main",
      "target": "nami_army_browser_agent_browseragent_get_page_info",
      "confidence_score": 1.0
    },
    {
      "relation": "rationale_for",
      "confidence": "EXTRACTED",
      "source_file": "browser_agent.py",
      "source_location": "L193",
      "weight": 1.0,
      "source": "nami_army_browser_agent_rationale_193",
      "target": "nami_army_browser_agent_browseragent_get_page_info",
      "confidence_score": 1.0
    },
    {
      "relation": "calls",
      "context": "call",
      "confidence": "EXTRACTED",
      "source_file": "browser_agent.py",
      "source_location": "L319",
      "weight": 1.0,
      "source": "nami_army_browser_agent_cli_main",
      "target": "nami_army_browser_agent_browseragent_close",
      "confidence_score": 1.0
    },
    {
      "relation": "rationale_for",
      "confidence": "EXTRACTED",
      "source_file": "browser_agent.py",
      "source_location": "L200",
      "weight": 1.0,
      "source": "nami_army_browser_agent_rationale_200",
      "target": "nami_army_browser_agent_browseragent_close",
      "confidence_score": 1.0
    },
    {
      "relation": "contains",
      "confidence": "EXTRACTED",
      "source_file": "health_alerts.py",
      "source_location": "L37",
      "weight": 1.0,
      "source": "health_alerts_py",
      "target": "nami_army_health_alerts_telegram_send",
      "confidence_score": 1.0
    },
    {
      "relation": "contains",
      "confidence": "EXTRACTED",
      "source_file": "health_alerts.py",
      "source_location": "L76",
      "weight": 1.0,
      "source": "health_alerts_py",
      "target": "nami_army_health_alerts_load_state",
      "confidence_score": 1.0
    },
    {
      "relation": "contains",
      "confidence": "EXTRACTED",
      "source_file": "health_alerts.py",
      "source_location": "L82",
      "weight": 1.0,
      "source": "health_alerts_py",
      "target": "nami_army_health_alerts_save_state",
      "confidence_score": 1.0
    },
    {
      "relation": "contains",
      "confidence": "EXTRACTED",
      "source_file": "health_alerts.py",
      "source_location": "L87",
      "weight": 1.0,
      "source": "health_alerts_py",
      "target": "nami_army_health_alerts_fetch_status",
      "confidence_score": 1.0
    },
    {
      "relation": "contains",
      "confidence": "EXTRACTED",
      "source_file": "health_alerts.py",
      "source_location": "L98",
      "weight": 1.0,
      "source": "health_alerts_py",
      "target": "nami_army_health_alerts_format_service_name",
      "confidence_score": 1.0
    },
    {
      "relation": "contains",
      "confidence": "EXTRACTED",
      "source_file": "health_alerts.py",
      "source_location": "L103",
      "weight": 1.0,
      "source": "health_alerts_py",
      "target": "nami_army_health_alerts_format_down_alert",
      "confidence_score": 1.0
    },
    {
      "relation": "contains",
      "confidence": "EXTRACTED",
      "source_file": "health_alerts.py",
      "source_location": "L126",
      "weight": 1.0,
      "source": "health_alerts_py",
      "target": "nami_army_health_alerts_format_recovery_alert",
      "confidence_score": 1.0
    },
    {
      "relation": "contains",
      "confidence": "EXTRACTED",
      "source_file": "health_alerts.py",
      "source_location": "L152",
      "weight": 1.0,
      "source": "health_alerts_py",
      "target": "nami_army_health_alerts_format_daily_summary",
      "confidence_score": 1.0
    },
    {
      "relation": "contains",
      "confidence": "EXTRACTED",
      "source_file": "health_alerts.py",
      "source_location": "L181",
      "weight": 1.0,
      "source": "health_alerts_py",
      "target": "nami_army_health_alerts_try_restart",
      "confidence_score": 1.0
    },
    {
      "relation": "contains",
      "confidence": "EXTRACTED",
      "source_file": "health_alerts.py",
      "source_location": "L204",
      "weight": 1.0,
      "source": "health_alerts_py",
      "target": "nami_army_health_alerts_main",
      "confidence_score": 1.0
    },
    {
      "relation": "calls",
      "context": "call",
      "confidence": "EXTRACTED",
      "source_file": "health_alerts.py",
      "source_location": "L249",
      "weight": 1.0,
      "source": "nami_army_health_alerts_main",
      "target": "nami_army_health_alerts_telegram_send",
      "confidence_score": 1.0
    },
    {
      "relation": "rationale_for",
      "confidence": "EXTRACTED",
      "source_file": "health_alerts.py",
      "source_location": "L38",
      "weight": 1.0,
      "source": "nami_army_health_alerts_rationale_38",
      "target": "nami_army_health_alerts_telegram_send",
      "confidence_score": 1.0
    },
    {
      "relation": "calls",
      "context": "call",
      "confidence": "EXTRACTED",
      "source_file": "health_alerts.py",
      "source_location": "L205",
      "weight": 1.0,
      "source": "nami_army_health_alerts_main",
      "target": "nami_army_health_alerts_load_state",
      "confidence_score": 1.0
    },
    {
      "relation": "calls",
      "context": "call",
      "confidence": "EXTRACTED",
      "source_file": "health_alerts.py",
      "source_location": "L275",
      "weight": 1.0,
      "source": "nami_army_health_alerts_main",
      "target": "nami_army_health_alerts_save_state",
      "confidence_score": 1.0
    },
    {
      "relation": "calls",
      "context": "call",
      "confidence": "EXTRACTED",
      "source_file": "health_alerts.py",
      "source_location": "L206",
      "weight": 1.0,
      "source": "nami_army_health_alerts_main",
      "target": "nami_army_health_alerts_fetch_status",
      "confidence_score": 1.0
    },
    {
      "relation": "calls",
      "context": "call",
      "confidence": "EXTRACTED",
      "source_file": "health_alerts.py",
      "source_location": "L248",
      "weight": 1.0,
      "source": "nami_army_health_alerts_main",
      "target": "nami_army_health_alerts_format_down_alert",
      "confidence_score": 1.0
    },
    {
      "relation": "rationale_for",
      "confidence": "EXTRACTED",
      "source_file": "health_alerts.py",
      "source_location": "L104",
      "weight": 1.0,
      "source": "nami_army_health_alerts_rationale_104",
      "target": "nami_army_health_alerts_format_down_alert",
      "confidence_score": 1.0
    },
    {
      "relation": "calls",
      "context": "call",
      "confidence": "EXTRACTED",
      "source_file": "health_alerts.py",
      "source_location": "L255",
      "weight": 1.0,
      "source": "nami_army_health_alerts_main",
      "target": "nami_army_health_alerts_format_recovery_alert",
      "confidence_score": 1.0
    },
    {
      "relation": "rationale_for",
      "confidence": "EXTRACTED",
      "source_file": "health_alerts.py",
      "source_location": "L127",
      "weight": 1.0,
      "source": "nami_army_health_alerts_rationale_127",
      "target": "nami_army_health_alerts_format_recovery_alert",
      "confidence_score": 1.0
    },
    {
      "relation": "calls",
      "context": "call",
      "confidence": "EXTRACTED",
      "source_file": "health_alerts.py",
      "source_location": "L265",
      "weight": 1.0,
      "source": "nami_army_health_alerts_main",
      "target": "nami_army_health_alerts_format_daily_summary",
      "confidence_score": 1.0
    },
    {
      "relation": "rationale_for",
      "confidence": "EXTRACTED",
      "source_file": "health_alerts.py",
      "source_location": "L153",
      "weight": 1.0,
      "source": "nami_army_health_alerts_rationale_153",
      "target": "nami_army_health_alerts_format_daily_summary",
      "confidence_score": 1.0
    },
    {
      "relation": "calls",
      "context": "call",
      "confidence": "EXTRACTED",
      "source_file": "health_alerts.py",
      "source_location": "L234",
      "weight": 1.0,
      "source": "nami_army_health_alerts_main",
      "target": "nami_army_health_alerts_try_restart",
      "confidence_score": 1.0
    },
    {
      "relation": "rationale_for",
      "confidence": "EXTRACTED",
      "source_file": "health_alerts.py",
      "source_location": "L182",
      "weight": 1.0,
      "source": "nami_army_health_alerts_rationale_182",
      "target": "nami_army_health_alerts_try_restart",
      "confidence_score": 1.0
    },
    {
      "relation": "contains",
      "confidence": "EXTRACTED",
      "source_file": "test_browser.py",
      "source_location": "L23",
      "weight": 1.0,
      "source": "test_browser_py",
      "target": "nami_army_test_browser_colors",
      "confidence_score": 1.0
    },
    {
      "relation": "contains",
      "confidence": "EXTRACTED",
      "source_file": "test_browser.py",
      "source_location": "L33",
      "weight": 1.0,
      "source": "test_browser_py",
      "target": "nami_army_test_browser_ok",
      "confidence_score": 1.0
    },
    {
      "relation": "contains",
      "confidence": "EXTRACTED",
      "source_file": "test_browser.py",
      "source_location": "L37",
      "weight": 1.0,
      "source": "test_browser_py",
      "target": "nami_army_test_browser_fail",
      "confidence_score": 1.0
    },
    {
      "relation": "contains",
      "confidence": "EXTRACTED",
      "source_file": "test_browser.py",
      "source_location": "L41",
      "weight": 1.0,
      "source": "test_browser_py",
      "target": "nami_army_test_browser_warn",
      "confidence_score": 1.0
    },
    {
      "relation": "contains",
      "confidence": "EXTRACTED",
      "source_file": "test_browser.py",
      "source_location": "L45",
      "weight": 1.0,
      "source": "test_browser_py",
      "target": "nami_army_test_browser_info",
      "confidence_score": 1.0
    },
    {
      "relation": "contains",
      "confidence": "EXTRACTED",
      "source_file": "test_browser.py",
      "source_location": "L49",
      "weight": 1.0,
      "source": "test_browser_py",
      "target": "nami_army_test_browser_main",
      "confidence_score": 1.0
    },
    {
      "relation": "calls",
      "context": "call",
      "confidence": "EXTRACTED",
      "source_file": "test_browser.py",
      "source_location": "L62",
      "weight": 1.0,
      "source": "nami_army_test_browser_main",
      "target": "nami_army_test_browser_ok",
      "confidence_score": 1.0
    },
    {
      "relation": "calls",
      "context": "call",
      "confidence": "EXTRACTED",
      "source_file": "test_browser.py",
      "source_location": "L65",
      "weight": 1.0,
      "source": "nami_army_test_browser_main",
      "target": "nami_army_test_browser_fail",
      "confidence_score": 1.0
    },
    {
      "relation": "calls",
      "context": "call",
      "confidence": "EXTRACTED",
      "source_file": "test_browser.py",
      "source_location": "L81",
      "weight": 1.0,
      "source": "nami_army_test_browser_main",
      "target": "nami_army_test_browser_warn",
      "confidence_score": 1.0
    },
    {
      "relation": "calls",
      "context": "call",
      "confidence": "EXTRACTED",
      "source_file": "test_browser.py",
      "source_location": "L82",
      "weight": 1.0,
      "source": "nami_army_test_browser_main",
      "target": "nami_army_test_browser_info",
      "confidence_score": 1.0
    },
    {
      "relation": "contains",
      "confidence": "EXTRACTED",
      "source_file": "draw_alert.py",
      "source_location": "L13",
      "weight": 1.0,
      "source": "draw_alert_py",
      "target": "nami_army_draw_alert_read_secret",
      "confidence_score": 1.0
    },
    {
      "relation": "contains",
      "confidence": "EXTRACTED",
      "source_file": "draw_alert.py",
      "source_location": "L28",
      "weight": 1.0,
      "source": "draw_alert_py",
      "target": "nami_army_draw_alert_db_query",
      "confidence_score": 1.0
    },
    {
      "relation": "contains",
      "confidence": "EXTRACTED",
      "source_file": "draw_alert.py",
      "source_location": "L40",
      "weight": 1.0,
      "source": "draw_alert_py",
      "target": "nami_army_draw_alert_get_latest_draw",
      "confidence_score": 1.0
    },
    {
      "relation": "contains",
      "confidence": "EXTRACTED",
      "source_file": "draw_alert.py",
      "source_location": "L59",
      "weight": 1.0,
      "source": "draw_alert_py",
      "target": "nami_army_draw_alert_get_prediction_for_draw",
      "confidence_score": 1.0
    },
    {
      "relation": "contains",
      "confidence": "EXTRACTED",
      "source_file": "draw_alert.py",
      "source_location": "L115",
      "weight": 1.0,
      "source": "draw_alert_py",
      "target": "nami_army_draw_alert_format_alert",
      "confidence_score": 1.0
    },
    {
      "relation": "contains",
      "confidence": "EXTRACTED",
      "source_file": "draw_alert.py",
      "source_location": "L147",
      "weight": 1.0,
      "source": "draw_alert_py",
      "target": "nami_army_draw_alert_mark_notified",
      "confidence_score": 1.0
    },
    {
      "relation": "contains",
      "confidence": "EXTRACTED",
      "source_file": "draw_alert.py",
      "source_location": "L159",
      "weight": 1.0,
      "source": "draw_alert_py",
      "target": "nami_army_draw_alert_send_to_vip",
      "confidence_score": 1.0
    },
    {
      "relation": "contains",
      "confidence": "EXTRACTED",
      "source_file": "draw_alert.py",
      "source_location": "L174",
      "weight": 1.0,
      "source": "draw_alert_py",
      "target": "nami_army_draw_alert_main",
      "confidence_score": 1.0
    },
    {
      "relation": "calls",
      "context": "call",
      "confidence": "EXTRACTED",
      "source_file": "draw_alert.py",
      "source_location": "L42",
      "weight": 1.0,
      "source": "nami_army_draw_alert_get_latest_draw",
      "target": "nami_army_draw_alert_db_query",
      "confidence_score": 1.0
    },
    {
      "relation": "calls",
      "context": "call",
      "confidence": "EXTRACTED",
      "source_file": "draw_alert.py",
      "source_location": "L61",
      "weight": 1.0,
      "source": "nami_army_draw_alert_get_prediction_for_draw",
      "target": "nami_army_draw_alert_db_query",
      "confidence_score": 1.0
    },
    {
      "relation": "calls",
      "context": "call",
      "confidence": "EXTRACTED",
      "source_file": "draw_alert.py",
      "source_location": "L149",
      "weight": 1.0,
      "source": "nami_army_draw_alert_mark_notified",
      "target": "nami_army_draw_alert_db_query",
      "confidence_score": 1.0
    },
    {
      "relation": "calls",
      "context": "call",
      "confidence": "EXTRACTED",
      "source_file": "draw_alert.py",
      "source_location": "L177",
      "weight": 1.0,
      "source": "nami_army_draw_alert_main",
      "target": "nami_army_draw_alert_get_latest_draw",
      "confidence_score": 1.0
    },
    {
      "relation": "rationale_for",
      "confidence": "EXTRACTED",
      "source_file": "draw_alert.py",
      "source_location": "L41",
      "weight": 1.0,
      "source": "nami_army_draw_alert_rationale_41",
      "target": "nami_army_draw_alert_get_latest_draw",
      "confidence_score": 1.0
    },
    {
      "relation": "calls",
      "context": "call",
      "confidence": "EXTRACTED",
      "source_file": "draw_alert.py",
      "source_location": "L189",
      "weight": 1.0,
      "source": "nami_army_draw_alert_main",
      "target": "nami_army_draw_alert_get_prediction_for_draw",
      "confidence_score": 1.0
    },
    {
      "relation": "rationale_for",
      "confidence": "EXTRACTED",
      "source_file": "draw_alert.py",
      "source_location": "L60",
      "weight": 1.0,
      "source": "nami_army_draw_alert_rationale_60",
      "target": "nami_army_draw_alert_get_prediction_for_draw",
      "confidence_score": 1.0
    },
    {
      "relation": "calls",
      "context": "call",
      "confidence": "EXTRACTED",
      "source_file": "draw_alert.py",
      "source_location": "L199",
      "weight": 1.0,
      "source": "nami_army_draw_alert_main",
      "target": "nami_army_draw_alert_format_alert",
      "confidence_score": 1.0
    },
    {
      "relation": "rationale_for",
      "confidence": "EXTRACTED",
      "source_file": "draw_alert.py",
      "source_location": "L116",
      "weight": 1.0,
      "source": "nami_army_draw_alert_rationale_116",
      "target": "nami_army_draw_alert_format_alert",
      "confidence_score": 1.0
    },
    {
      "relation": "calls",
      "context": "call",
      "confidence": "EXTRACTED",
      "source_file": "draw_alert.py",
      "source_location": "L203",
      "weight": 1.0,
      "source": "nami_army_draw_alert_main",
      "target": "nami_army_draw_alert_mark_notified",
      "confidence_score": 1.0
    },
    {
      "relation": "rationale_for",
      "confidence": "EXTRACTED",
      "source_file": "draw_alert.py",
      "source_location": "L148",
      "weight": 1.0,
      "source": "nami_army_draw_alert_rationale_148",
      "target": "nami_army_draw_alert_mark_notified",
      "confidence_score": 1.0
    },
    {
      "relation": "calls",
      "context": "call",
      "confidence": "EXTRACTED",
      "source_file": "draw_alert.py",
      "source_location": "L200",
      "weight": 1.0,
      "source": "nami_army_draw_alert_main",
      "target": "nami_army_draw_alert_send_to_vip",
      "confidence_score": 1.0
    },
    {
      "relation": "contains",
      "confidence": "EXTRACTED",
      "source_file": "api_gateway.py",
      "source_location": "L72",
      "weight": 1.0,
      "source": "api_gateway_py",
      "target": "nami_army_api_gateway_check_systemd",
      "confidence_score": 1.0
    },
    {
      "relation": "contains",
      "confidence": "EXTRACTED",
      "source_file": "api_gateway.py",
      "source_location": "L80",
      "weight": 1.0,
      "source": "api_gateway_py",
      "target": "nami_army_api_gateway_get_system_metrics",
      "confidence_score": 1.0
    },
    {
      "relation": "contains",
      "confidence": "EXTRACTED",
      "source_file": "api_gateway.py",
      "source_location": "L126",
      "weight": 1.0,
      "source": "api_gateway_py",
      "target": "nami_army_api_gateway_check_all_services",
      "confidence_score": 1.0
    },
    {
      "relation": "contains",
      "confidence": "EXTRACTED",
      "source_file": "api_gateway.py",
      "source_location": "L150",
      "weight": 1.0,
      "source": "api_gateway_py",
      "target": "nami_army_api_gateway_root",
      "confidence_score": 1.0
    },
    {
      "relation": "contains",
      "confidence": "EXTRACTED",
      "source_file": "api_gateway.py",
      "source_location": "L170",
      "weight": 1.0,
      "source": "api_gateway_py",
      "target": "nami_army_api_gateway_api_status",
      "confidence_score": 1.0
    },
    {
      "relation": "contains",
      "confidence": "EXTRACTED",
      "source_file": "api_gateway.py",
      "source_location": "L196",
      "weight": 1.0,
      "source": "api_gateway_py",
      "target": "nami_army_api_gateway_api_services",
      "confidence_score": 1.0
    },
    {
      "relation": "contains",
      "confidence": "EXTRACTED",
      "source_file": "api_gateway.py",
      "source_location": "L214",
      "weight": 1.0,
      "source": "api_gateway_py",
      "target": "nami_army_api_gateway_api_agents",
      "confidence_score": 1.0
    },
    {
      "relation": "contains",
      "confidence": "EXTRACTED",
      "source_file": "api_gateway.py",
      "source_location": "L232",
      "weight": 1.0,
      "source": "api_gateway_py",
      "target": "nami_army_api_gateway_api_bridge",
      "confidence_score": 1.0
    },
    {
      "relation": "contains",
      "confidence": "EXTRACTED",
      "source_file": "api_gateway.py",
      "source_location": "L272",
      "weight": 1.0,
      "source": "api_gateway_py",
      "target": "nami_army_api_gateway_api_health",
      "confidence_score": 1.0
    },
    {
      "relation": "contains",
      "confidence": "EXTRACTED",
      "source_file": "api_gateway.py",
      "source_location": "L278",
      "weight": 1.0,
      "source": "api_gateway_py",
      "target": "nami_army_api_gateway_api_backup",
      "confidence_score": 1.0
    },
    {
      "relation": "contains",
      "confidence": "EXTRACTED",
      "source_file": "api_gateway.py",
      "source_location": "L297",
      "weight": 1.0,
      "source": "api_gateway_py",
      "target": "nami_army_api_gateway_health",
      "confidence_score": 1.0
    },
    {
      "relation": "contains",
      "confidence": "EXTRACTED",
      "source_file": "api_gateway.py",
      "source_location": "L304",
      "weight": 1.0,
      "source": "api_gateway_py",
      "target": "nami_army_api_gateway_main",
      "confidence_score": 1.0
    },
    {
      "relation": "calls",
      "context": "call",
      "confidence": "EXTRACTED",
      "source_file": "api_gateway.py",
      "source_location": "L132",
      "weight": 1.0,
      "source": "nami_army_api_gateway_check_all_services",
      "target": "nami_army_api_gateway_check_systemd",
      "confidence_score": 1.0
    },
    {
      "relation": "calls",
      "context": "call",
      "confidence": "EXTRACTED",
      "source_file": "api_gateway.py",
      "source_location": "L173",
      "weight": 1.0,
      "source": "nami_army_api_gateway_api_status",
      "target": "nami_army_api_gateway_get_system_metrics",
      "confidence_score": 1.0
    },
    {
      "relation": "rationale_for",
      "confidence": "EXTRACTED",
      "source_file": "api_gateway.py",
      "source_location": "L81",
      "weight": 1.0,
      "source": "nami_army_api_gateway_rationale_81",
      "target": "nami_army_api_gateway_get_system_metrics",
      "confidence_score": 1.0
    },
    {
      "relation": "calls",
      "context": "call",
      "confidence": "EXTRACTED",
      "source_file": "api_gateway.py",
      "source_location": "L172",
      "weight": 1.0,
      "source": "nami_army_api_gateway_api_status",
      "target": "nami_army_api_gateway_check_all_services",
      "confidence_score": 1.0
    },
    {
      "relation": "rationale_for",
      "confidence": "EXTRACTED",
      "source_file": "api_gateway.py",
      "source_location": "L171",
      "weight": 1.0,
      "source": "nami_army_api_gateway_rationale_171",
      "target": "nami_army_api_gateway_api_status",
      "confidence_score": 1.0
    },
    {
      "relation": "rationale_for",
      "confidence": "EXTRACTED",
      "source_file": "api_gateway.py",
      "source_location": "L197",
      "weight": 1.0,
      "source": "nami_army_api_gateway_rationale_197",
      "target": "nami_army_api_gateway_api_services",
      "confidence_score": 1.0
    },
    {
      "relation": "rationale_for",
      "confidence": "EXTRACTED",
      "source_file": "api_gateway.py",
      "source_location": "L279",
      "weight": 1.0,
      "source": "nami_army_api_gateway_rationale_279",
      "target": "nami_army_api_gateway_api_backup",
      "confidence_score": 1.0
    },
    {
      "relation": "rationale_for",
      "confidence": "EXTRACTED",
      "source_file": "api_gateway.py",
      "source_location": "L298",
      "weight": 1.0,
      "source": "nami_army_api_gateway_rationale_298",
      "target": "nami_army_api_gateway_health",
      "confidence_score": 1.0
    },
    {
      "relation": "contains",
      "confidence": "EXTRACTED",
      "source_file": "vip_lottery_sender.py",
      "source_location": "L14",
      "weight": 1.0,
      "source": "vip_lottery_sender_py",
      "target": "nami_army_vip_lottery_sender_read_secret",
      "confidence_score": 1.0
    },
    {
      "relation": "contains",
      "confidence": "EXTRACTED",
      "source_file": "vip_lottery_sender.py",
      "source_location": "L29",
      "weight": 1.0,
      "source": "vip_lottery_sender_py",
      "target": "nami_army_vip_lottery_sender_db_query",
      "confidence_score": 1.0
    },
    {
      "relation": "contains",
      "confidence": "EXTRACTED",
      "source_file": "vip_lottery_sender.py",
      "source_location": "L43",
      "weight": 1.0,
      "source": "vip_lottery_sender_py",
      "target": "nami_army_vip_lottery_sender_fetch_vip_data",
      "confidence_score": 1.0
    },
    {
      "relation": "contains",
      "confidence": "EXTRACTED",
      "source_file": "vip_lottery_sender.py",
      "source_location": "L137",
      "weight": 1.0,
      "source": "vip_lottery_sender_py",
      "target": "nami_army_vip_lottery_sender_format_message",
      "confidence_score": 1.0
    },
    {
      "relation": "contains",
      "confidence": "EXTRACTED",
      "source_file": "vip_lottery_sender.py",
      "source_location": "L193",
      "weight": 1.0,
      "source": "vip_lottery_sender_py",
      "target": "nami_army_vip_lottery_sender_send_to_vip",
      "confidence_score": 1.0
    },
    {
      "relation": "contains",
      "confidence": "EXTRACTED",
      "source_file": "vip_lottery_sender.py",
      "source_location": "L209",
      "weight": 1.0,
      "source": "vip_lottery_sender_py",
      "target": "nami_army_vip_lottery_sender_main",
      "confidence_score": 1.0
    },
    {
      "relation": "calls",
      "context": "call",
      "confidence": "EXTRACTED",
      "source_file": "vip_lottery_sender.py",
      "source_location": "L51",
      "weight": 1.0,
      "source": "nami_army_vip_lottery_sender_fetch_vip_data",
      "target": "nami_army_vip_lottery_sender_db_query",
      "confidence_score": 1.0
    },
    {
      "relation": "rationale_for",
      "confidence": "EXTRACTED",
      "source_file": "vip_lottery_sender.py",
      "source_location": "L30",
      "weight": 1.0,
      "source": "nami_army_vip_lottery_sender_rationale_30",
      "target": "nami_army_vip_lottery_sender_db_query",
      "confidence_score": 1.0
    },
    {
      "relation": "calls",
      "context": "call",
      "confidence": "EXTRACTED",
      "source_file": "vip_lottery_sender.py",
      "source_location": "L211",
      "weight": 1.0,
      "source": "nami_army_vip_lottery_sender_main",
      "target": "nami_army_vip_lottery_sender_fetch_vip_data",
      "confidence_score": 1.0
    },
    {
      "relation": "rationale_for",
      "confidence": "EXTRACTED",
      "source_file": "vip_lottery_sender.py",
      "source_location": "L44",
      "weight": 1.0,
      "source": "nami_army_vip_lottery_sender_rationale_44",
      "target": "nami_army_vip_lottery_sender_fetch_vip_data",
      "confidence_score": 1.0
    },
    {
      "relation": "calls",
      "context": "call",
      "confidence": "EXTRACTED",
      "source_file": "vip_lottery_sender.py",
      "source_location": "L224",
      "weight": 1.0,
      "source": "nami_army_vip_lottery_sender_main",
      "target": "nami_army_vip_lottery_sender_format_message",
      "confidence_score": 1.0
    },
    {
      "relation": "rationale_for",
      "confidence": "EXTRACTED",
      "source_file": "vip_lottery_sender.py",
      "source_location": "L138",
      "weight": 1.0,
      "source": "nami_army_vip_lottery_sender_rationale_138",
      "target": "nami_army_vip_lottery_sender_format_message",
      "confidence_score": 1.0
    },
    {
      "relation": "calls",
      "context": "call",
      "confidence": "EXTRACTED",
      "source_file": "vip_lottery_sender.py",
      "source_location": "L225",
      "weight": 1.0,
      "source": "nami_army_vip_lottery_sender_main",
      "target": "nami_army_vip_lottery_sender_send_to_vip",
      "confidence_score": 1.0
    },
    {
      "relation": "rationale_for",
      "confidence": "EXTRACTED",
      "source_file": "vip_lottery_sender.py",
      "source_location": "L194",
      "weight": 1.0,
      "source": "nami_army_vip_lottery_sender_rationale_194",
      "target": "nami_army_vip_lottery_sender_send_to_vip",
      "confidence_score": 1.0
    },
    {
      "relation": "contains",
      "confidence": "EXTRACTED",
      "source_file": "health_monitor.py",
      "source_location": "L115",
      "weight": 1.0,
      "source": "health_monitor_py",
      "target": "nami_army_health_monitor_check_systemd",
      "confidence_score": 1.0
    },
    {
      "relation": "contains",
      "confidence": "EXTRACTED",
      "source_file": "health_monitor.py",
      "source_location": "L128",
      "weight": 1.0,
      "source": "health_monitor_py",
      "target": "nami_army_health_monitor_check_port",
      "confidence_score": 1.0
    },
    {
      "relation": "contains",
      "confidence": "EXTRACTED",
      "source_file": "health_monitor.py",
      "source_location": "L141",
      "weight": 1.0,
      "source": "health_monitor_py",
      "target": "nami_army_health_monitor_check_all",
      "confidence_score": 1.0
    },
    {
      "relation": "contains",
      "confidence": "EXTRACTED",
      "source_file": "health_monitor.py",
      "source_location": "L167",
      "weight": 1.0,
      "source": "health_monitor_py",
      "target": "nami_army_health_monitor_load_previous_state",
      "confidence_score": 1.0
    },
    {
      "relation": "contains",
      "confidence": "EXTRACTED",
      "source_file": "health_monitor.py",
      "source_location": "L177",
      "weight": 1.0,
      "source": "health_monitor_py",
      "target": "nami_army_health_monitor_save_state",
      "confidence_score": 1.0
    },
    {
      "relation": "contains",
      "confidence": "EXTRACTED",
      "source_file": "health_monitor.py",
      "source_location": "L183",
      "weight": 1.0,
      "source": "health_monitor_py",
      "target": "nami_army_health_monitor_detect_changes",
      "confidence_score": 1.0
    },
    {
      "relation": "contains",
      "confidence": "EXTRACTED",
      "source_file": "health_monitor.py",
      "source_location": "L202",
      "weight": 1.0,
      "source": "health_monitor_py",
      "target": "nami_army_health_monitor_format_telegram_message",
      "confidence_score": 1.0
    },
    {
      "relation": "contains",
      "confidence": "EXTRACTED",
      "source_file": "health_monitor.py",
      "source_location": "L242",
      "weight": 1.0,
      "source": "health_monitor_py",
      "target": "nami_army_health_monitor_main",
      "confidence_score": 1.0
    },
    {
      "relation": "calls",
      "context": "call",
      "confidence": "EXTRACTED",
      "source_file": "health_monitor.py",
      "source_location": "L149",
      "weight": 1.0,
      "source": "nami_army_health_monitor_check_all",
      "target": "nami_army_health_monitor_check_systemd",
      "confidence_score": 1.0
    },
    {
      "relation": "rationale_for",
      "confidence": "EXTRACTED",
      "source_file": "health_monitor.py",
      "source_location": "L116",
      "weight": 1.0,
      "source": "nami_army_health_monitor_rationale_116",
      "target": "nami_army_health_monitor_check_systemd",
      "confidence_score": 1.0
    },
    {
      "relation": "calls",
      "context": "call",
      "confidence": "EXTRACTED",
      "source_file": "health_monitor.py",
      "source_location": "L151",
      "weight": 1.0,
      "source": "nami_army_health_monitor_check_all",
      "target": "nami_army_health_monitor_check_port",
      "confidence_score": 1.0
    },
    {
      "relation": "rationale_for",
      "confidence": "EXTRACTED",
      "source_file": "health_monitor.py",
      "source_location": "L129",
      "weight": 1.0,
      "source": "nami_army_health_monitor_rationale_129",
      "target": "nami_army_health_monitor_check_port",
      "confidence_score": 1.0
    },
    {
      "relation": "calls",
      "context": "call",
      "confidence": "EXTRACTED",
      "source_file": "health_monitor.py",
      "source_location": "L244",
      "weight": 1.0,
      "source": "nami_army_health_monitor_main",
      "target": "nami_army_health_monitor_check_all",
      "confidence_score": 1.0
    },
    {
      "relation": "rationale_for",
      "confidence": "EXTRACTED",
      "source_file": "health_monitor.py",
      "source_location": "L142",
      "weight": 1.0,
      "source": "nami_army_health_monitor_rationale_142",
      "target": "nami_army_health_monitor_check_all",
      "confidence_score": 1.0
    },
    {
      "relation": "calls",
      "context": "call",
      "confidence": "EXTRACTED",
      "source_file": "health_monitor.py",
      "source_location": "L247",
      "weight": 1.0,
      "source": "nami_army_health_monitor_main",
      "target": "nami_army_health_monitor_load_previous_state",
      "confidence_score": 1.0
    },
    {
      "relation": "rationale_for",
      "confidence": "EXTRACTED",
      "source_file": "health_monitor.py",
      "source_location": "L168",
      "weight": 1.0,
      "source": "nami_army_health_monitor_rationale_168",
      "target": "nami_army_health_monitor_load_previous_state",
      "confidence_score": 1.0
    },
    {
      "relation": "calls",
      "context": "call",
      "confidence": "EXTRACTED",
      "source_file": "health_monitor.py",
      "source_location": "L280",
      "weight": 1.0,
      "source": "nami_army_health_monitor_main",
      "target": "nami_army_health_monitor_save_state",
      "confidence_score": 1.0
    },
    {
      "relation": "rationale_for",
      "confidence": "EXTRACTED",
      "source_file": "health_monitor.py",
      "source_location": "L178",
      "weight": 1.0,
      "source": "nami_army_health_monitor_rationale_178",
      "target": "nami_army_health_monitor_save_state",
      "confidence_score": 1.0
    },
    {
      "relation": "calls",
      "context": "call",
      "confidence": "EXTRACTED",
      "source_file": "health_monitor.py",
      "source_location": "L250",
      "weight": 1.0,
      "source": "nami_army_health_monitor_main",
      "target": "nami_army_health_monitor_detect_changes",
      "confidence_score": 1.0
    },
    {
      "relation": "rationale_for",
      "confidence": "EXTRACTED",
      "source_file": "health_monitor.py",
      "source_location": "L184",
      "weight": 1.0,
      "source": "nami_army_health_monitor_rationale_184",
      "target": "nami_army_health_monitor_detect_changes",
      "confidence_score": 1.0
    },
    {
      "relation": "calls",
      "context": "call",
      "confidence": "EXTRACTED",
      "source_file": "health_monitor.py",
      "source_location": "L274",
      "weight": 1.0,
      "source": "nami_army_health_monitor_main",
      "target": "nami_army_health_monitor_format_telegram_message",
      "confidence_score": 1.0
    },
    {
      "relation": "rationale_for",
      "confidence": "EXTRACTED",
      "source_file": "health_monitor.py",
      "source_location": "L203",
      "weight": 1.0,
      "source": "nami_army_health_monitor_rationale_203",
      "target": "nami_army_health_monitor_format_telegram_message",
      "confidence_score": 1.0
    }
  ],
  "hyperedges": []
}