727 lines
17 KiB
JSON
727 lines
17 KiB
JSON
{
|
|
"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
|
|
}
|
|
}
|
|
]
|
|
} |