{ "scriptCompleted": true, "filesAnalyzed": 4, "filesSkipped": [], "results": [ { "path": "AGENTS.md", "language": "markdown", "fileCategory": "docs", "totalLines": 88, "nonEmptyLines": 61, "sections": [ { "heading": "Lemana VPN Agent Instructions", "level": 1, "line": 1 }, { "heading": "Scope", "level": 2, "line": 3 }, { "heading": "System Model", "level": 2, "line": 13 }, { "heading": "Live VPN Safety", "level": 2, "line": 22 }, { "heading": "Testing", "level": 2, "line": 44 }, { "heading": "Answer Contract", "level": 2, "line": 60 } ], "metrics": { "importCount": 0, "exportCount": 0, "functionCount": 0, "classCount": 0, "sectionCount": 6 } }, { "path": "README.md", "language": "markdown", "fileCategory": "docs", "totalLines": 579, "nonEmptyLines": 405, "sections": [ { "heading": "Lemana VPN", "level": 1, "line": 1 }, { "heading": "Быстрая установка", "level": 2, "line": 19 }, { "heading": "Интерактивная установка", "level": 2, "line": 34 }, { "heading": "Что ставится", "level": 2, "line": 94 }, { "heading": "Статус модулей", "level": 2, "line": 111 }, { "heading": "Интерактивная установка", "level": 2, "line": 148 }, { "heading": "Логи установщика и удаления", "level": 2, "line": 183 }, { "heading": "Модули", "level": 2, "line": 201 }, { "heading": "Core", "level": 3, "line": 203 }, { "heading": "Как работают credential sources", "level": 3, "line": 214 }, { "heading": "Bitwarden", "level": 3, "line": 235 }, { "heading": "Если Bitwarden нет", "level": 3, "line": 259 }, { "heading": "Touch ID", "level": 3, "line": 302 }, { "heading": "Swift Menu Bar app", "level": 3, "line": 314 }, { "heading": "Использование", "level": 2, "line": 352 }, { "heading": "Настройка", "level": 2, "line": 385 }, { "heading": "Bitwarden item", "level": 2, "line": 415 }, { "heading": "Почему DNS wrapper, а не wildcard sudoers", "level": 2, "line": 426 }, { "heading": "Runtime-патчи openconnect-lite", "level": 2, "line": 432 }, { "heading": "Диагностика", "level": 2, "line": 460 }, { "heading": "Удаление", "level": 2, "line": 528 } ], "metrics": { "importCount": 0, "exportCount": 0, "functionCount": 0, "classCount": 0, "sectionCount": 21 } }, { "path": "install.sh", "language": "shell", "fileCategory": "script", "totalLines": 943, "nonEmptyLines": 824, "functions": [ { "name": "usage", "startLine": 72, "endLine": 106, "params": [] }, { "name": "log", "startLine": 220, "endLine": 222, "params": [] }, { "name": "color_line", "startLine": 224, "endLine": 228, "params": [] }, { "name": "log_step", "startLine": 230, "endLine": 232, "params": [] }, { "name": "log_info", "startLine": 234, "endLine": 236, "params": [] }, { "name": "log_detail", "startLine": 238, "endLine": 240, "params": [] }, { "name": "log_ok", "startLine": 242, "endLine": 244, "params": [] }, { "name": "log_warn", "startLine": 246, "endLine": 248, "params": [] }, { "name": "log_skip", "startLine": 250, "endLine": 252, "params": [] }, { "name": "die", "startLine": 254, "endLine": 257, "params": [] }, { "name": "run", "startLine": 259, "endLine": 269, "params": [] }, { "name": "need_cmd", "startLine": 271, "endLine": 273, "params": [] }, { "name": "has_tty", "startLine": 275, "endLine": 277, "params": [] }, { "name": "interactive_enabled", "startLine": 279, "endLine": 286, "params": [] }, { "name": "prompt_printf", "startLine": 288, "endLine": 294, "params": [] }, { "name": "prompt_read_answer", "startLine": 296, "endLine": 302, "params": [] }, { "name": "yes_no", "startLine": 304, "endLine": 330, "params": [] }, { "name": "choose_credential_source_interactive", "startLine": 332, "endLine": 382, "params": [] }, { "name": "bool_word", "startLine": 384, "endLine": 390, "params": [] }, { "name": "keychain_has", "startLine": 392, "endLine": 394, "params": [] }, { "name": "zsh_aliases_installed", "startLine": 396, "endLine": 398, "params": [] }, { "name": "print_detected_state", "startLine": 400, "endLine": 417, "params": [] }, { "name": "choose_modules", "startLine": 419, "endLine": 514, "params": [] }, { "name": "script_dir", "startLine": 516, "endLine": 521, "params": [] }, { "name": "download_file", "startLine": 523, "endLine": 540, "params": [] }, { "name": "write_file", "startLine": 542, "endLine": 550, "params": [] }, { "name": "install_homebrew_packages", "startLine": 552, "endLine": 578, "params": [] }, { "name": "install_openconnect_lite", "startLine": 580, "endLine": 597, "params": [] }, { "name": "install_cli", "startLine": 599, "endLine": 613, "params": [] }, { "name": "install_config", "startLine": 615, "endLine": 639, "params": [] }, { "name": "install_dns_cleanup", "startLine": 641, "endLine": 654, "params": [] }, { "name": "install_sudoers", "startLine": 656, "endLine": 683, "params": [] }, { "name": "install_touchid_helper", "startLine": 685, "endLine": 708, "params": [] }, { "name": "install_menu_bar_app", "startLine": 710, "endLine": 769, "params": [] }, { "name": "install_launch_agent", "startLine": 771, "endLine": 811, "params": [] }, { "name": "restart_running_menu_bar_app", "startLine": 813, "endLine": 831, "params": [] }, { "name": "install_shell_aliases", "startLine": 833, "endLine": 877, "params": [] }, { "name": "vpn", "startLine": 854, "endLine": 854, "params": [] }, { "name": "maybe_login_bitwarden", "startLine": 879, "endLine": 900, "params": [] }, { "name": "main", "startLine": 902, "endLine": 941, "params": [] } ], "metrics": { "importCount": 0, "exportCount": 0, "functionCount": 40, "classCount": 0 } }, { "path": "uninstall.sh", "language": "shell", "fileCategory": "script", "totalLines": 320, "nonEmptyLines": 279, "functions": [ { "name": "usage", "startLine": 62, "endLine": 79, "params": [] }, { "name": "log", "startLine": 102, "endLine": 104, "params": [] }, { "name": "color_line", "startLine": 106, "endLine": 110, "params": [] }, { "name": "log_step", "startLine": 112, "endLine": 114, "params": [] }, { "name": "log_info", "startLine": 116, "endLine": 118, "params": [] }, { "name": "log_detail", "startLine": 120, "endLine": 122, "params": [] }, { "name": "log_ok", "startLine": 124, "endLine": 126, "params": [] }, { "name": "log_warn", "startLine": 128, "endLine": 130, "params": [] }, { "name": "log_skip", "startLine": 132, "endLine": 134, "params": [] }, { "name": "die", "startLine": 136, "endLine": 139, "params": [] }, { "name": "run", "startLine": 141, "endLine": 151, "params": [] }, { "name": "find_webengine_process", "startLine": 153, "endLine": 159, "params": [] }, { "name": "restore_openconnect_lite_patch", "startLine": 161, "endLine": 181, "params": [] }, { "name": "remove_zshrc_block", "startLine": 183, "endLine": 204, "params": [] }, { "name": "remove_keychain_entries", "startLine": 206, "endLine": 234, "params": [] }, { "name": "main", "startLine": 236, "endLine": 318, "params": [] } ], "metrics": { "importCount": 0, "exportCount": 0, "functionCount": 16, "classCount": 0 } } ] }