{ "scriptCompleted": true, "filesAnalyzed": 13, "filesSkipped": [], "results": [ { "path": ".agents/skills/lemana-vpn-operations/SKILL.md", "language": "markdown", "fileCategory": "docs", "totalLines": 70, "nonEmptyLines": 48, "sections": [ { "heading": "Lemana VPN Operations", "level": 1, "line": 6 }, { "heading": "Overview", "level": 2, "line": 8 }, { "heading": "System Map", "level": 2, "line": 12 }, { "heading": "Live Connection Rules", "level": 2, "line": 20 }, { "heading": "Update Commands", "level": 2, "line": 38 }, { "heading": "Answer Format", "level": 2, "line": 60 }, { "heading": "Common Mistakes", "level": 2, "line": 64 } ], "metrics": { "importCount": 0, "exportCount": 0, "functionCount": 0, "classCount": 0, "sectionCount": 7 } }, { "path": ".agents/skills/lemana-vpn-sso-autofill/SKILL.md", "language": "markdown", "fileCategory": "docs", "totalLines": 80, "nonEmptyLines": 54, "sections": [ { "heading": "Lemana VPN SSO And Autofill", "level": 1, "line": 6 }, { "heading": "Overview", "level": 2, "line": 8 }, { "heading": "Credential Flow", "level": 2, "line": 12 }, { "heading": "Runtime Patches", "level": 2, "line": 29 }, { "heading": "Modes", "level": 2, "line": 47 }, { "heading": "Testing", "level": 2, "line": 56 }, { "heading": "Troubleshooting Signals", "level": 2, "line": 76 } ], "metrics": { "importCount": 0, "exportCount": 0, "functionCount": 0, "classCount": 0, "sectionCount": 7 } }, { "path": ".agents/skills/lemana-vpn-testing/SKILL.md", "language": "markdown", "fileCategory": "docs", "totalLines": 101, "nonEmptyLines": 68, "sections": [ { "heading": "Lemana VPN Testing", "level": 1, "line": 6 }, { "heading": "Overview", "level": 2, "line": 8 }, { "heading": "Non-Live Verification", "level": 2, "line": 12 }, { "heading": "Status Checks", "level": 2, "line": 28 }, { "heading": "Live VPN Checks", "level": 2, "line": 46 }, { "heading": "Installer/Uninstaller Checks", "level": 2, "line": 83 }, { "heading": "Final Report", "level": 2, "line": 94 } ], "metrics": { "importCount": 0, "exportCount": 0, "functionCount": 0, "classCount": 0, "sectionCount": 7 } }, { "path": "app/Package.swift", "language": "swift", "fileCategory": "code", "totalLines": 14, "nonEmptyLines": 12, "metrics": {} }, { "path": "app/Sources/LemanaVPN/LemanaVPNApp.swift", "language": "swift", "fileCategory": "code", "totalLines": 190, "nonEmptyLines": 174, "metrics": {} }, { "path": "app/Sources/LemanaVPN/VPNManager.swift", "language": "swift", "fileCategory": "code", "totalLines": 697, "nonEmptyLines": 618, "metrics": {} }, { "path": "bin/vpn-lemanapro.sh", "language": "shell", "fileCategory": "script", "totalLines": 1090, "nonEmptyLines": 954, "functions": [ { "name": "_emit", "startLine": 119, "endLine": 126, "params": [] }, { "name": "_write_status", "startLine": 128, "endLine": 131, "params": [] }, { "name": "_clear_status", "startLine": 133, "endLine": 135, "params": [] }, { "name": "_prepare_connection_log", "startLine": 137, "endLine": 144, "params": [] }, { "name": "_log_connection_line", "startLine": 146, "endLine": 148, "params": [] }, { "name": "_show_connection_log_tail", "startLine": 150, "endLine": 154, "params": [] }, { "name": "_start_connect_progress", "startLine": 158, "endLine": 166, "params": [] }, { "name": "_stop_connect_progress", "startLine": 168, "endLine": 174, "params": [] }, { "name": "_json_get", "startLine": 176, "endLine": 179, "params": [] }, { "name": "_find_webengine_process", "startLine": 181, "endLine": 187, "params": [] }, { "name": "_find_authenticator", "startLine": 189, "endLine": 195, "params": [] }, { "name": "_module_bool", "startLine": 197, "endLine": 203, "params": [] }, { "name": "_patches_active", "startLine": 205, "endLine": 219, "params": [] }, { "name": "_keychain_has", "startLine": 221, "endLine": 223, "params": [] }, { "name": "_module_status_json", "startLine": 225, "endLine": 264, "params": [] }, { "name": "_module_human_part", "startLine": 266, "endLine": 275, "params": [] }, { "name": "_module_status_human", "startLine": 277, "endLine": 311, "params": [] }, { "name": "_check_status", "startLine": 313, "endLine": 375, "params": [] }, { "name": "_patch_oc", "startLine": 377, "endLine": 604, "params": [] }, { "name": "autoFill", "startLine": 470, "endLine": 473, "params": [] }, { "name": "autoFill", "startLine": 488, "endLine": 497, "params": [] }, { "name": "_store_keychain", "startLine": 606, "endLine": 621, "params": [] }, { "name": "_normalize_totp_secret", "startLine": 623, "endLine": 649, "params": [] }, { "name": "_can_prompt", "startLine": 651, "endLine": 653, "params": [] }, { "name": "_prompt_read", "startLine": 655, "endLine": 673, "params": [] }, { "name": "_persist_username", "startLine": 675, "endLine": 718, "params": [] }, { "name": "_ensure_username", "startLine": 720, "endLine": 745, "params": [] }, { "name": "_configure_keychain", "startLine": 747, "endLine": 785, "params": [] }, { "name": "_ensure_keychain_credentials", "startLine": 787, "endLine": 814, "params": [] }, { "name": "_bw_cache_session", "startLine": 816, "endLine": 821, "params": [] }, { "name": "_bw_unlock", "startLine": 823, "endLine": 889, "params": [] }, { "name": "_sync_bitwarden", "startLine": 891, "endLine": 925, "params": [] }, { "name": "_sync_credentials", "startLine": 927, "endLine": 936, "params": [] }, { "name": "_dns_cleanup", "startLine": 938, "endLine": 954, "params": [] }, { "name": "_filter_output", "startLine": 956, "endLine": 1006, "params": [] } ], "metrics": { "importCount": 0, "exportCount": 0, "functionCount": 35, "classCount": 0 } }, { "path": "docs/goals/manual-first-auth-flow/GOAL.md", "language": "markdown", "fileCategory": "docs", "totalLines": 13, "nonEmptyLines": 11, "sections": [ { "heading": "Goal: Manual-First Auth Flow", "level": 1, "line": 1 } ], "metrics": { "importCount": 0, "exportCount": 0, "functionCount": 0, "classCount": 0, "sectionCount": 1 } }, { "path": "docs/goals/manual-first-auth-flow/PLAN.md", "language": "markdown", "fileCategory": "docs", "totalLines": 440, "nonEmptyLines": 318, "sections": [ { "heading": "Manual-First Auth Flow Implementation Plan", "level": 1, "line": 1 }, { "heading": "Короткий План", "level": 2, "line": 18 }, { "heading": "Architecture Slice", "level": 2, "line": 40 }, { "heading": "Пользовательский Процесс Установки", "level": 2, "line": 120 }, { "heading": "Первый Экран", "level": 3, "line": 124 }, { "heading": "Шаг 1: Что Будет Установлено", "level": 3, "line": 148 }, { "heading": "Шаг 2: Базовый Режим Входа", "level": 3, "line": 162 }, { "heading": "Шаг 3: Автоматический Вход Только Для Продвинутого Пути", "level": 3, "line": 187 }, { "heading": "Шаг 4: Bitwarden Как Дополнительная Функция", "level": 3, "line": 214 }, { "heading": "Шаг 5: Touch ID Только После Bitwarden", "level": 3, "line": 234 }, { "heading": "Шаг 6: Понятный Прогресс Установки", "level": 3, "line": 246 }, { "heading": "Финальный Экран", "level": 3, "line": 265 }, { "heading": "Ошибки И Подсказки", "level": 3, "line": 292 }, { "heading": "Acceptance Evidence Для Installer UX", "level": 3, "line": 301 }, { "heading": "Дополнительные Функции", "level": 2, "line": 308 }, { "heading": "Tasks", "level": 2, "line": 345 }, { "heading": "Task 1: Rewrite user-facing contract and docs", "level": 3, "line": 347 }, { "heading": "Task 2: Change installer defaults and capability selection", "level": 3, "line": 356 }, { "heading": "Task 3: Refactor CLI auth profiles and partial Keychain support", "level": 3, "line": 365 }, { "heading": "Task 4: Preserve automatic compatibility without keeping it dominant", "level": 3, "line": 374 }, { "heading": "Task 5: Update Swift menu-bar app surface", "level": 3, "line": 383 }, { "heading": "Task 6: Expand smoke coverage", "level": 3, "line": 392 }, { "heading": "Task 7: Final verification and local update notes", "level": 3, "line": 401 }, { "heading": "Non-Goals", "level": 2, "line": 417 }, { "heading": "Risks", "level": 2, "line": 425 }, { "heading": "Execution Order", "level": 2, "line": 432 } ], "metrics": { "importCount": 0, "exportCount": 0, "functionCount": 0, "classCount": 0, "sectionCount": 26 } }, { "path": "docs/superpowers/plans/2026-05-24-keychain-totp-provider.md", "language": "markdown", "fileCategory": "docs", "totalLines": 935, "nonEmptyLines": 656, "sections": [ { "heading": "Keychain TOTP Provider Implementation Plan", "level": 1, "line": 1 }, { "heading": "File Structure", "level": 2, "line": 13 }, { "heading": "Task 1: Add Smoke Tests For Credential Source Separation", "level": 3, "line": 39 }, { "heading": "Task 2: Add Runtime Credential Source And TOTP Normalization", "level": 3, "line": 135 }, { "heading": "Task 3: Split Bitwarden Sync From Keychain Source Flow", "level": 3, "line": 325 }, { "heading": "Task 4: Update Installer Flags And Config", "level": 3, "line": 457 }, { "heading": "Task 5: Update Swift Menu-Bar Status Decoding", "level": 3, "line": 639 }, { "heading": "Task 6: Update Documentation", "level": 3, "line": 736 }, { "heading": "Task 7: Full Verification", "level": 3, "line": 799 }, { "heading": "Self-Review", "level": 2, "line": 931 } ], "metrics": { "importCount": 0, "exportCount": 0, "functionCount": 0, "classCount": 0, "sectionCount": 10 } }, { "path": "libexec/lemana-vpn-dns-cleanup", "language": "unknown", "fileCategory": "code", "totalLines": 23, "nonEmptyLines": 17, "metrics": {} }, { "path": "templates/openconnect-lite-config.toml", "language": "toml", "fileCategory": "config", "totalLines": 32, "nonEmptyLines": 23, "sections": [ { "heading": "default_profile", "level": 1, "line": 3 }, { "heading": "credentials", "level": 1, "line": 8 }, { "heading": "auto_fill_rules", "level": 1, "line": 11 }, { "heading": "[[auto_fill_rules.\"https://employee.auth.lemanapro.ru/*\"]]", "level": 5, "line": 13 }, { "heading": "[[auto_fill_rules.\"https://employee.auth.lemanapro.ru/*\"]]", "level": 5, "line": 17 }, { "heading": "[[auto_fill_rules.\"https://employee.auth.lemanapro.ru/*\"]]", "level": 5, "line": 21 }, { "heading": "[[auto_fill_rules.\"https://employee.auth.lemanapro.ru/*\"]]", "level": 5, "line": 25 }, { "heading": "[[auto_fill_rules.\"https://employee.auth.lemanapro.ru/*\"]]", "level": 5, "line": 29 } ], "metrics": { "importCount": 0, "exportCount": 0, "functionCount": 0, "classCount": 0, "sectionCount": 8 } }, { "path": "tests/smoke.sh", "language": "shell", "fileCategory": "script", "totalLines": 438, "nonEmptyLines": 392, "functions": [ { "name": "autoFill", "startLine": 113, "endLine": 116, "params": [] } ], "metrics": { "importCount": 0, "exportCount": 0, "functionCount": 1, "classCount": 0 } } ] }