{
  "schema": "auto_service8700_manager_v250",
  "version": "2.3.8.324",
  "build_tag": "v324",
  "description": "Auto8700 v324: startup + hourly build update check + existing service/CDP recovery",
  "poll_interval_sec": 1.0,
  "debounce_sec": 3.0,
  "restart_on_start": true,
  "kill_on_exit": true,
  "start_missing_on_manager_start": false,
  "restart_only_after_seen_alive": true,
  "restart_if_process_exits": true,
  "restart_if_ports_down": true,
  "port_down_grace_sec": 8.0,
  "startup_health_timeout_sec": 30.0,
  "restart_cooldown_sec": 2.0,
  "log_time": true,
  "console_color": true,
  "manager_restart": {
    "enabled": true,
    "mode": "self_reexec",
    "keep_children": true,
    "command_file": "%TEMP%\\auto_service8700_manager_runtime\\auto_service8700_manager_command.json",
    "lock_file": "%TEMP%\\auto_service8700_manager_runtime\\auto_service8700_manager.lock.json",
    "single_instance_takeover": true
  },
  "ignore_dirs": [
    "__pycache__",
    "log",
    "logs",
    ".git",
    ".venv",
    "venv",
    "node_modules"
  ],
  "ignore_files": [
    "auto_service8700_manager.json",
    "auto_service8700_manager.default.json",
    "auto_service8700_manager.local.json"
  ],
  "ignore_extensions": [
    ".json",
    ".jsonl",
    ".log",
    ".tmp",
    ".lock",
    ".conf",
    ".cfg",
    ".ini",
    ".toml",
    ".yaml",
    ".yml",
    ".env",
    ".properties"
  ],
  "ig_chrome": {
    "enabled": true,
    "configured": false,
    "remote_debugging_port": 8700,
    "chrome_exe": "%PROGRAMFILES%\\Google\\Chrome\\Application\\chrome.exe",
    "user_data_dir": "%LOCALAPPDATA%\\Google\\Chrome\\User Data",
    "profile_scan_mode": "user_data_activity",
    "active_profile_seconds": 600,
    "activity_probe_paths": [
      "Network\\Reporting and NEL-journal",
      "Network\\Network Persistent State",
      "Preferences",
      "History",
      "Cookies",
      "Sessions",
      "Session Storage",
      "Local Storage"
    ],
    "startup_url": "https://www.instagram.com/explore/",
    "profiles": [],
    "force_user_data_dir": false,
    "preview_launch_in_threads": true,
    "preview_launch_gap_sec": 0.25,
    "launch_on_manager_start": true,
    "relaunch_if_closed": false,
    "debug_profile_policy": "first_only",
    "extension": {
      "enabled": false,
      "path": "D:\\_St\\IG_Ext",
      "reload_mode": "chrome_profile_restart"
    },
    "cdp_user_data_dir": "D:\\cdp-data-dir",
    "cdp_profile_directory": "Default",
    "lifecycle_preload": {
      "enabled": true,
      "block_unload_registration": true,
      "trace_event_types": [
        "unload",
        "beforeunload",
        "pagehide",
        "visibilitychange"
      ],
      "max_events": 50
    }
  },
  "auto8700_event_server": {
    "enabled": true,
    "host": "127.0.0.1",
    "port": 8707,
    "open_browser_on_start": false
  },
  "devtools_control_marker": {
    "enabled": true,
    "ws_ok_devtools_ok_prefix": "❤️❤️❤️",
    "ws_down_devtools_ok_prefix": "❤️💛❤️",
    "ws_ok_devtools_down_prefix": "❤️❤️💛",
    "ws_down_devtools_down_prefix": "❤️💛💛",
    "manual_prefix": "💛💛💛",
    "prefer_url_contains": "/explore/",
    "status_poll_sec": 5.0
  },
  "devtools_network_watch": {
    "enabled": false,
    "console": true,
    "file_log": false,
    "log_dir": "log\\devtools_network",
    "verbose": false,
    "capture_body": false,
    "max_body_chars": 2000,
    "print_media": true,
    "print_json": true,
    "print_graphql": true,
    "jpg_auto_capture": true,
    "jpg_capture_explore": false,
    "jpg_capture_single_post": true,
    "jpg_capture_profile": true,
    "jpg_capture_profile_reels": true
  },
  "auto_schedule": {
    "enabled": false,
    "time": "00:00",
    "last_run_date": "",
    "last_delegated_date": "",
    "last_request_id": "",
    "open_side": true,
    "cdp_storage_key": "IGBLUE_AUTO8700_SCHEDULE_V1",
    "ig_side_heartbeat_ts": 0,
    "ig_side_heartbeat_iso": "",
    "schedule1_enabled": false,
    "schedule1_time": "00:00",
    "schedule2_enabled": false,
    "schedule2_time": "00:00",
    "last_run_date_1": "",
    "last_run_date_2": "",
    "last_delegated_date_1": "",
    "last_delegated_date_2": "",
    "revision": 0,
    "updated_at": "",
    "updated_source": ""
  },
  "auto8700_ui": {
    "enabled": true,
    "alpha": 0.82,
    "x": 90,
    "y": 90,
    "stage": 0,
    "expanded_width": 1240,
    "compact_width": 520,
    "bar_height": 42
  },
  "services": [
    {
      "name": "WS8771",
      "enabled": true,
      "restart_strategy": "kill_then_start",
      "ports": [
        8771
      ],
      "health_ports": [
        8771
      ],
      "health_mode": "listen_only",
      "kill_ports_on_start": true,
      "kill_ports_on_restart": true,
      "watch_dirs": [
        "D:\\_St\\WS8771"
      ],
      "patterns": [
        "*.py",
        "*.bat"
      ],
      "recursive": true,
      "work_dir": "D:\\_St\\WS8771",
      "target": "_blank",
      "show_console": true,
      "bat_text": "@echo on\r\ncd /d \"D:\\_St\\WS8771\"\r\ncall py312 ws8771_main.py -v\r\npause\r\n",
      "watch_files": [
        "ws8771_main.py",
        "ws8771_ig_sort.py",
        "ws8771_html_report.py",
        "ws8771_folder_reconcile.py",
        "run_WS8771.bat"
      ]
    },
    {
      "name": "Cache8701",
      "enabled": true,
      "start_on_manager_start": true,
      "restart_strategy": "kill_then_start",
      "ports": [
        8701
      ],
      "health_ports": [
        8701
      ],
      "health_mode": "listen_only",
      "health_path": "/api/health",
      "health_expect_key": "ok",
      "health_expect_value": true,
      "kill_ports_on_start": true,
      "kill_ports_on_restart": true,
      "watch_dirs": [
        "D:\\_St\\Cache8701"
      ],
      "patterns": [
        "*.py",
        "*.json",
        "*.bat"
      ],
      "recursive": true,
      "work_dir": "D:\\_St\\Cache8701",
      "target": "_blank",
      "show_console": true,
      "bat_text": "@echo on\r\ncd /d \"D:\\_St\\Cache8701\"\r\ncall py312 cache8701_main.py --host 127.0.0.1 --port 8701\r\npause\r\n",
      "watch_files": [
        "cache8701_main.py",
        "cache8701_config.json",
        "run_Cache8701.bat"
      ],
      "startup_api_health_once": true,
      "runtime_health_check": false
    },
    {
      "name": "Analyze8780",
      "enabled": true,
      "start_on_manager_start": true,
      "restart_strategy": "kill_then_start",
      "ports": [
        8780
      ],
      "health_ports": [
        8780
      ],
      "health_mode": "listen_only",
      "health_path": "/api/health",
      "health_expect_key": "ok",
      "health_expect_value": true,
      "kill_ports_on_start": true,
      "kill_ports_on_restart": true,
      "watch_dirs": [
        "D:\\_St\\Analyze8780"
      ],
      "patterns": [
        "*.py",
        "*.html",
        "*.bat"
      ],
      "recursive": true,
      "work_dir": "D:\\_St\\Analyze8780",
      "target": "_blank",
      "show_console": true,
      "bat_text": "@echo on\r\ncd /d \"D:\\_St\\Analyze8780\"\r\ncall py312 analyze8780_main.py --host 127.0.0.1 --port 8780\r\npause\r\n",
      "watch_files": [
        "analyze8780_main.py",
        "analyze8780_repository.py",
        "run_Analyze8780.bat",
        "web/index.html"
      ],
      "startup_api_health_once": true,
      "runtime_health_check": false
    },
    {
      "name": "RTC8790_8791",
      "enabled": true,
      "restart_strategy": "kill_then_start",
      "ports": [
        8790,
        8791
      ],
      "health_ports": [
        8790,
        8791
      ],
      "health_mode": "listen_only",
      "kill_ports_on_start": true,
      "kill_ports_on_restart": true,
      "watch_dirs": [
        "D:\\_St\\RTC8790_8791"
      ],
      "patterns": [
        "*.py",
        "*.html",
        "*.js",
        "*.bat"
      ],
      "recursive": true,
      "work_dir": "D:\\_St\\RTC8790_8791",
      "target": "_blank",
      "show_console": true,
      "bat_text": "@echo on\r\ncd /d \"D:\\_St\\RTC8790_8791\"\r\ncall py312inst -r requirements.txt\r\ncall py312 rtc8790_8791_main.py -v --host 0.0.0.0 --http-port 8790 --ws-port 8791 --fps 12 --quality 70 --max-width 1280 --auto-start --viewer no --control on --source desktop\r\npause\r\n",
      "viewer_auto_open": false,
      "watch_files": [
        "rtc8790_8791_main.py",
        "yjm_ai_snapshot_ring.py",
        "yjm_capture_sources.py",
        "yjm_clipboard_sync.py",
        "yjm_file_transfer.py",
        "yjm_monitor_probe.py",
        "yjm_net_upnp.py",
        "yjm_remote_control.py",
        "yjm_remote_status.py",
        "yjm_settings.py",
        "yjm_win2rtc_capture.py",
        "host/__init__.py",
        "host/clipboard.py",
        "host/protocol.py",
        "web/viewer.html",
        "requirements.txt",
        "run_RTC8790_8791.bat"
      ]
    },
    {
      "name": "AUTO_SERVICE8700_MANAGER",
      "enabled": true,
      "restart_strategy": "start_then_self_takeover",
      "ports": [],
      "health_ports": [],
      "health_mode": "none",
      "kill_ports_on_start": false,
      "kill_ports_on_restart": false,
      "watch_dirs": [
        "D:\\_St\\Auto8700"
      ],
      "patterns": [
        "*.py",
        "*.bat"
      ],
      "recursive": false,
      "start_on_manager_start": false,
      "ignore_dirs": [
        "__pycache__",
        "log",
        "logs"
      ],
      "ignore_files": [
        "auto_service8700_manager.default.json",
        "auto_service8700_manager.local.json",
        "auto_service8700_manager.json"
      ],
      "ignore_extensions": [
        ".json",
        ".jsonl",
        ".log",
        ".tmp",
        ".lock"
      ],
      "work_dir": "D:\\_St\\Auto8700",
      "target": "_blank",
      "restart_cooldown_sec": 3.0,
      "bat_text": "@echo on\r\ncd /d \"D:\\_St\\Auto8700\"\r\ncall py312 auto_service8700_manager.py\r\n",
      "watch_files": [
        "auto_service8700_manager.py",
        "run_auto_service8700_manager.bat"
      ]
    }
  ],
  "shared_watch": {
    "name": "Shared",
    "enabled": true,
    "watch_dirs": [
      "D:\\_St\\Shared"
    ],
    "patterns": [
      "*.py",
      "*.bat"
    ],
    "recursive": true,
    "restart_services": [
      "WS8771",
      "Analyze8780",
      "RTC8790_8791"
    ]
  },
  "bat_catalog": {
    "AUTO_SERVICE8700_MANAGER": "@echo on\r\ncd /d \"D:\\_St\\Auto8700\"\r\ncall py312 auto_service8700_manager.py\r\n",
    "WS8771": "@echo on\r\ncd /d \"D:\\_St\\WS8771\"\r\ncall py312 ws8771_main.py -v\r\npause\r\n",
    "RTC8790_8791": "@echo on\r\ncd /d \"D:\\_St\\RTC8790_8791\"\r\ncall py312inst -r requirements.txt\r\ncall py312 rtc8790_8791_main.py -v --host 0.0.0.0 --http-port 8790 --ws-port 8791 --fps 12 --quality 70 --max-width 1280 --auto-start --viewer no --control on --source desktop\r\npause\r\n",
    "Analyze8780": "@echo on\r\ncd /d \"D:\\_St\\Analyze8780\"\r\ncall py312 analyze8780_main.py --host 127.0.0.1 --port 8780\r\npause\r\n"
  },
  "python_file_logs": {
    "enabled": true,
    "keep_files": 10,
    "root_dir": "logs",
    "prefix": "auto8700"
  },
  "python_logs": {
    "enabled": true,
    "run_enabled": true,
    "error_enabled": true,
    "keep_count": 10,
    "log_dir": "logs",
    "trace": {
      "ws_request": true,
      "cdp_devtools": true
    },
    "run_prefix": "auto_run_log",
    "err_prefix": "auto_err_log"
  },
  "cdp_mode_policy": {
    "precheck_before_services": true,
    "block_default_browser_before_cdp": true,
    "disable_rtc_viewer_on_manager_start": true,
    "auto_download_allowed_without_cdp": false,
    "schedule_requires_cdp_mode": true,
    "cdp_scope": "schedule_only",
    "auto_owner_source": "auto_start_tab_id"
  },
  "version_name": "2.3.8.324",
  "ignore_name_patterns": [
    "test_*",
    "*.bak",
    "*.old",
    "*.copy",
    "*~",
    ".#*"
  ],
  "auto_update": {
    "enabled": true,
    "check_on_start": true,
    "check_hourly": true,
    "version_url": "http://aiwk.yjm.kr/down/_St_ver.html",
    "timeout_sec": 3.0,
    "download_timeout_sec": 120.0,
    "publisher_marker": "AutoDistribute/AutoDistribute.py"
  }
}
