Update understand-anything graph metadata
This commit is contained in:
733
.understand-anything/fingerprints.json
Normal file
733
.understand-anything/fingerprints.json
Normal file
@@ -0,0 +1,733 @@
|
||||
{
|
||||
"version": "1.0.0",
|
||||
"gitCommitHash": "042c4d655090e0ee334208511ec63b6d909d4354",
|
||||
"generatedAt": "2026-06-23T06:34:02.856Z",
|
||||
"files": {
|
||||
".agents/skills/lemana-vpn-operations/SKILL.md": {
|
||||
"filePath": ".agents/skills/lemana-vpn-operations/SKILL.md",
|
||||
"contentHash": "27cec75695c23c1dc759d61b5b6250306f3b494688aabc794014711b59aa89ab",
|
||||
"functions": [],
|
||||
"classes": [],
|
||||
"imports": [],
|
||||
"exports": [],
|
||||
"totalLines": 71,
|
||||
"hasStructuralAnalysis": true
|
||||
},
|
||||
".agents/skills/lemana-vpn-sso-autofill/SKILL.md": {
|
||||
"filePath": ".agents/skills/lemana-vpn-sso-autofill/SKILL.md",
|
||||
"contentHash": "e597d0e67861787f5c444c74376bdd514614765dbe27dd62b62f7e61925a643c",
|
||||
"functions": [],
|
||||
"classes": [],
|
||||
"imports": [],
|
||||
"exports": [],
|
||||
"totalLines": 81,
|
||||
"hasStructuralAnalysis": true
|
||||
},
|
||||
".agents/skills/lemana-vpn-testing/SKILL.md": {
|
||||
"filePath": ".agents/skills/lemana-vpn-testing/SKILL.md",
|
||||
"contentHash": "6f4698688ef498f4f1427024a735d7d36cb96a96f36bf8597977fdc28e3ffa13",
|
||||
"functions": [],
|
||||
"classes": [],
|
||||
"imports": [],
|
||||
"exports": [],
|
||||
"totalLines": 102,
|
||||
"hasStructuralAnalysis": true
|
||||
},
|
||||
"AGENTS.md": {
|
||||
"filePath": "AGENTS.md",
|
||||
"contentHash": "3ccea1ed9dacb6f1173a03d8053c5466fc03aebcadb6dbf4db52814c82bc6a92",
|
||||
"functions": [],
|
||||
"classes": [],
|
||||
"imports": [],
|
||||
"exports": [],
|
||||
"totalLines": 89,
|
||||
"hasStructuralAnalysis": true
|
||||
},
|
||||
"app/Package.swift": {
|
||||
"filePath": "app/Package.swift",
|
||||
"contentHash": "338b2954b4fde437b35e7b419d7aff8451d91df790429a168d80d19bf5b99f75",
|
||||
"functions": [],
|
||||
"classes": [],
|
||||
"imports": [],
|
||||
"exports": [],
|
||||
"totalLines": 15,
|
||||
"hasStructuralAnalysis": false
|
||||
},
|
||||
"app/Sources/LemanaVPN/LemanaVPNApp.swift": {
|
||||
"filePath": "app/Sources/LemanaVPN/LemanaVPNApp.swift",
|
||||
"contentHash": "0caddaae55a376d20d023c3e82b525fa2a54002a2730978e22826aad56574474",
|
||||
"functions": [],
|
||||
"classes": [],
|
||||
"imports": [],
|
||||
"exports": [],
|
||||
"totalLines": 191,
|
||||
"hasStructuralAnalysis": false
|
||||
},
|
||||
"app/Sources/LemanaVPN/VPNManager.swift": {
|
||||
"filePath": "app/Sources/LemanaVPN/VPNManager.swift",
|
||||
"contentHash": "16b7da9acd2bad9ff71f3c067ae2bd420c3ef11cab4dc6d9c509be2d0a011d67",
|
||||
"functions": [],
|
||||
"classes": [],
|
||||
"imports": [],
|
||||
"exports": [],
|
||||
"totalLines": 698,
|
||||
"hasStructuralAnalysis": false
|
||||
},
|
||||
"bin/vpn-lemanapro.sh": {
|
||||
"filePath": "bin/vpn-lemanapro.sh",
|
||||
"contentHash": "e1946792a405d2178b197ea11285029ef172a65dd9f9c6b4a8f308e0ac58bbc2",
|
||||
"functions": [
|
||||
{
|
||||
"name": "_emit",
|
||||
"params": [],
|
||||
"exported": false,
|
||||
"lineCount": 8
|
||||
},
|
||||
{
|
||||
"name": "_write_status",
|
||||
"params": [],
|
||||
"exported": false,
|
||||
"lineCount": 4
|
||||
},
|
||||
{
|
||||
"name": "_clear_status",
|
||||
"params": [],
|
||||
"exported": false,
|
||||
"lineCount": 3
|
||||
},
|
||||
{
|
||||
"name": "_prepare_connection_log",
|
||||
"params": [],
|
||||
"exported": false,
|
||||
"lineCount": 8
|
||||
},
|
||||
{
|
||||
"name": "_log_connection_line",
|
||||
"params": [],
|
||||
"exported": false,
|
||||
"lineCount": 3
|
||||
},
|
||||
{
|
||||
"name": "_show_connection_log_tail",
|
||||
"params": [],
|
||||
"exported": false,
|
||||
"lineCount": 5
|
||||
},
|
||||
{
|
||||
"name": "_start_connect_progress",
|
||||
"params": [],
|
||||
"exported": false,
|
||||
"lineCount": 9
|
||||
},
|
||||
{
|
||||
"name": "_stop_connect_progress",
|
||||
"params": [],
|
||||
"exported": false,
|
||||
"lineCount": 7
|
||||
},
|
||||
{
|
||||
"name": "_json_get",
|
||||
"params": [],
|
||||
"exported": false,
|
||||
"lineCount": 4
|
||||
},
|
||||
{
|
||||
"name": "_find_webengine_process",
|
||||
"params": [],
|
||||
"exported": false,
|
||||
"lineCount": 7
|
||||
},
|
||||
{
|
||||
"name": "_find_authenticator",
|
||||
"params": [],
|
||||
"exported": false,
|
||||
"lineCount": 7
|
||||
},
|
||||
{
|
||||
"name": "_module_bool",
|
||||
"params": [],
|
||||
"exported": false,
|
||||
"lineCount": 7
|
||||
},
|
||||
{
|
||||
"name": "_patches_active",
|
||||
"params": [],
|
||||
"exported": false,
|
||||
"lineCount": 15
|
||||
},
|
||||
{
|
||||
"name": "_keychain_has",
|
||||
"params": [],
|
||||
"exported": false,
|
||||
"lineCount": 3
|
||||
},
|
||||
{
|
||||
"name": "_module_status_json",
|
||||
"params": [],
|
||||
"exported": false,
|
||||
"lineCount": 40
|
||||
},
|
||||
{
|
||||
"name": "_module_human_part",
|
||||
"params": [],
|
||||
"exported": false,
|
||||
"lineCount": 10
|
||||
},
|
||||
{
|
||||
"name": "_module_status_human",
|
||||
"params": [],
|
||||
"exported": false,
|
||||
"lineCount": 35
|
||||
},
|
||||
{
|
||||
"name": "_check_status",
|
||||
"params": [],
|
||||
"exported": false,
|
||||
"lineCount": 63
|
||||
},
|
||||
{
|
||||
"name": "_patch_oc",
|
||||
"params": [],
|
||||
"exported": false,
|
||||
"lineCount": 228
|
||||
},
|
||||
{
|
||||
"name": "autoFill",
|
||||
"params": [],
|
||||
"exported": false,
|
||||
"lineCount": 4
|
||||
},
|
||||
{
|
||||
"name": "autoFill",
|
||||
"params": [],
|
||||
"exported": false,
|
||||
"lineCount": 10
|
||||
},
|
||||
{
|
||||
"name": "_store_keychain",
|
||||
"params": [],
|
||||
"exported": false,
|
||||
"lineCount": 16
|
||||
},
|
||||
{
|
||||
"name": "_normalize_totp_secret",
|
||||
"params": [],
|
||||
"exported": false,
|
||||
"lineCount": 27
|
||||
},
|
||||
{
|
||||
"name": "_can_prompt",
|
||||
"params": [],
|
||||
"exported": false,
|
||||
"lineCount": 3
|
||||
},
|
||||
{
|
||||
"name": "_prompt_read",
|
||||
"params": [],
|
||||
"exported": false,
|
||||
"lineCount": 19
|
||||
},
|
||||
{
|
||||
"name": "_persist_username",
|
||||
"params": [],
|
||||
"exported": false,
|
||||
"lineCount": 44
|
||||
},
|
||||
{
|
||||
"name": "_ensure_username",
|
||||
"params": [],
|
||||
"exported": false,
|
||||
"lineCount": 26
|
||||
},
|
||||
{
|
||||
"name": "_configure_keychain",
|
||||
"params": [],
|
||||
"exported": false,
|
||||
"lineCount": 39
|
||||
},
|
||||
{
|
||||
"name": "_ensure_keychain_credentials",
|
||||
"params": [],
|
||||
"exported": false,
|
||||
"lineCount": 28
|
||||
},
|
||||
{
|
||||
"name": "_bw_cache_session",
|
||||
"params": [],
|
||||
"exported": false,
|
||||
"lineCount": 6
|
||||
},
|
||||
{
|
||||
"name": "_bw_unlock",
|
||||
"params": [],
|
||||
"exported": false,
|
||||
"lineCount": 67
|
||||
},
|
||||
{
|
||||
"name": "_sync_bitwarden",
|
||||
"params": [],
|
||||
"exported": false,
|
||||
"lineCount": 35
|
||||
},
|
||||
{
|
||||
"name": "_sync_credentials",
|
||||
"params": [],
|
||||
"exported": false,
|
||||
"lineCount": 10
|
||||
},
|
||||
{
|
||||
"name": "_dns_cleanup",
|
||||
"params": [],
|
||||
"exported": false,
|
||||
"lineCount": 17
|
||||
},
|
||||
{
|
||||
"name": "_filter_output",
|
||||
"params": [],
|
||||
"exported": false,
|
||||
"lineCount": 51
|
||||
}
|
||||
],
|
||||
"classes": [],
|
||||
"imports": [],
|
||||
"exports": [],
|
||||
"totalLines": 1091,
|
||||
"hasStructuralAnalysis": true
|
||||
},
|
||||
"docs/goals/manual-first-auth-flow/GOAL.md": {
|
||||
"filePath": "docs/goals/manual-first-auth-flow/GOAL.md",
|
||||
"contentHash": "27fc0e7feddd4c77f78f1966ab1e58c3727b4796f8600003e31e81b907b6ebe7",
|
||||
"functions": [],
|
||||
"classes": [],
|
||||
"imports": [],
|
||||
"exports": [],
|
||||
"totalLines": 14,
|
||||
"hasStructuralAnalysis": true
|
||||
},
|
||||
"docs/goals/manual-first-auth-flow/PLAN.md": {
|
||||
"filePath": "docs/goals/manual-first-auth-flow/PLAN.md",
|
||||
"contentHash": "459cb4b63f0ea0eee13ed6c8dd91d4bae1be7adaf443b2824a93d2217cbe1c58",
|
||||
"functions": [],
|
||||
"classes": [],
|
||||
"imports": [],
|
||||
"exports": [],
|
||||
"totalLines": 441,
|
||||
"hasStructuralAnalysis": true
|
||||
},
|
||||
"docs/superpowers/plans/2026-05-24-keychain-totp-provider.md": {
|
||||
"filePath": "docs/superpowers/plans/2026-05-24-keychain-totp-provider.md",
|
||||
"contentHash": "1a5d622b3bb8c6277d5d97effbdd07713975b4595bec236ff8710abde772c5dc",
|
||||
"functions": [],
|
||||
"classes": [],
|
||||
"imports": [],
|
||||
"exports": [],
|
||||
"totalLines": 936,
|
||||
"hasStructuralAnalysis": true
|
||||
},
|
||||
"install.sh": {
|
||||
"filePath": "install.sh",
|
||||
"contentHash": "d33186be9dc6457ca80886f629995edf21143d091b6902814853424400a1ec6f",
|
||||
"functions": [
|
||||
{
|
||||
"name": "usage",
|
||||
"params": [],
|
||||
"exported": false,
|
||||
"lineCount": 35
|
||||
},
|
||||
{
|
||||
"name": "log",
|
||||
"params": [],
|
||||
"exported": false,
|
||||
"lineCount": 3
|
||||
},
|
||||
{
|
||||
"name": "color_line",
|
||||
"params": [],
|
||||
"exported": false,
|
||||
"lineCount": 5
|
||||
},
|
||||
{
|
||||
"name": "log_step",
|
||||
"params": [],
|
||||
"exported": false,
|
||||
"lineCount": 3
|
||||
},
|
||||
{
|
||||
"name": "log_info",
|
||||
"params": [],
|
||||
"exported": false,
|
||||
"lineCount": 3
|
||||
},
|
||||
{
|
||||
"name": "log_detail",
|
||||
"params": [],
|
||||
"exported": false,
|
||||
"lineCount": 3
|
||||
},
|
||||
{
|
||||
"name": "log_ok",
|
||||
"params": [],
|
||||
"exported": false,
|
||||
"lineCount": 3
|
||||
},
|
||||
{
|
||||
"name": "log_warn",
|
||||
"params": [],
|
||||
"exported": false,
|
||||
"lineCount": 3
|
||||
},
|
||||
{
|
||||
"name": "log_skip",
|
||||
"params": [],
|
||||
"exported": false,
|
||||
"lineCount": 3
|
||||
},
|
||||
{
|
||||
"name": "die",
|
||||
"params": [],
|
||||
"exported": false,
|
||||
"lineCount": 4
|
||||
},
|
||||
{
|
||||
"name": "run",
|
||||
"params": [],
|
||||
"exported": false,
|
||||
"lineCount": 11
|
||||
},
|
||||
{
|
||||
"name": "need_cmd",
|
||||
"params": [],
|
||||
"exported": false,
|
||||
"lineCount": 3
|
||||
},
|
||||
{
|
||||
"name": "has_tty",
|
||||
"params": [],
|
||||
"exported": false,
|
||||
"lineCount": 3
|
||||
},
|
||||
{
|
||||
"name": "interactive_enabled",
|
||||
"params": [],
|
||||
"exported": false,
|
||||
"lineCount": 8
|
||||
},
|
||||
{
|
||||
"name": "prompt_printf",
|
||||
"params": [],
|
||||
"exported": false,
|
||||
"lineCount": 7
|
||||
},
|
||||
{
|
||||
"name": "prompt_read_answer",
|
||||
"params": [],
|
||||
"exported": false,
|
||||
"lineCount": 7
|
||||
},
|
||||
{
|
||||
"name": "yes_no",
|
||||
"params": [],
|
||||
"exported": false,
|
||||
"lineCount": 27
|
||||
},
|
||||
{
|
||||
"name": "choose_credential_source_interactive",
|
||||
"params": [],
|
||||
"exported": false,
|
||||
"lineCount": 51
|
||||
},
|
||||
{
|
||||
"name": "bool_word",
|
||||
"params": [],
|
||||
"exported": false,
|
||||
"lineCount": 7
|
||||
},
|
||||
{
|
||||
"name": "keychain_has",
|
||||
"params": [],
|
||||
"exported": false,
|
||||
"lineCount": 3
|
||||
},
|
||||
{
|
||||
"name": "zsh_aliases_installed",
|
||||
"params": [],
|
||||
"exported": false,
|
||||
"lineCount": 3
|
||||
},
|
||||
{
|
||||
"name": "print_detected_state",
|
||||
"params": [],
|
||||
"exported": false,
|
||||
"lineCount": 18
|
||||
},
|
||||
{
|
||||
"name": "choose_modules",
|
||||
"params": [],
|
||||
"exported": false,
|
||||
"lineCount": 96
|
||||
},
|
||||
{
|
||||
"name": "script_dir",
|
||||
"params": [],
|
||||
"exported": false,
|
||||
"lineCount": 6
|
||||
},
|
||||
{
|
||||
"name": "download_file",
|
||||
"params": [],
|
||||
"exported": false,
|
||||
"lineCount": 18
|
||||
},
|
||||
{
|
||||
"name": "write_file",
|
||||
"params": [],
|
||||
"exported": false,
|
||||
"lineCount": 9
|
||||
},
|
||||
{
|
||||
"name": "install_homebrew_packages",
|
||||
"params": [],
|
||||
"exported": false,
|
||||
"lineCount": 27
|
||||
},
|
||||
{
|
||||
"name": "install_openconnect_lite",
|
||||
"params": [],
|
||||
"exported": false,
|
||||
"lineCount": 18
|
||||
},
|
||||
{
|
||||
"name": "install_cli",
|
||||
"params": [],
|
||||
"exported": false,
|
||||
"lineCount": 15
|
||||
},
|
||||
{
|
||||
"name": "install_config",
|
||||
"params": [],
|
||||
"exported": false,
|
||||
"lineCount": 25
|
||||
},
|
||||
{
|
||||
"name": "install_dns_cleanup",
|
||||
"params": [],
|
||||
"exported": false,
|
||||
"lineCount": 14
|
||||
},
|
||||
{
|
||||
"name": "install_sudoers",
|
||||
"params": [],
|
||||
"exported": false,
|
||||
"lineCount": 28
|
||||
},
|
||||
{
|
||||
"name": "install_touchid_helper",
|
||||
"params": [],
|
||||
"exported": false,
|
||||
"lineCount": 24
|
||||
},
|
||||
{
|
||||
"name": "install_menu_bar_app",
|
||||
"params": [],
|
||||
"exported": false,
|
||||
"lineCount": 60
|
||||
},
|
||||
{
|
||||
"name": "install_launch_agent",
|
||||
"params": [],
|
||||
"exported": false,
|
||||
"lineCount": 41
|
||||
},
|
||||
{
|
||||
"name": "restart_running_menu_bar_app",
|
||||
"params": [],
|
||||
"exported": false,
|
||||
"lineCount": 19
|
||||
},
|
||||
{
|
||||
"name": "install_shell_aliases",
|
||||
"params": [],
|
||||
"exported": false,
|
||||
"lineCount": 45
|
||||
},
|
||||
{
|
||||
"name": "vpn",
|
||||
"params": [],
|
||||
"exported": false,
|
||||
"lineCount": 1
|
||||
},
|
||||
{
|
||||
"name": "maybe_login_bitwarden",
|
||||
"params": [],
|
||||
"exported": false,
|
||||
"lineCount": 22
|
||||
},
|
||||
{
|
||||
"name": "main",
|
||||
"params": [],
|
||||
"exported": false,
|
||||
"lineCount": 40
|
||||
}
|
||||
],
|
||||
"classes": [],
|
||||
"imports": [],
|
||||
"exports": [],
|
||||
"totalLines": 944,
|
||||
"hasStructuralAnalysis": true
|
||||
},
|
||||
"libexec/lemana-vpn-dns-cleanup": {
|
||||
"filePath": "libexec/lemana-vpn-dns-cleanup",
|
||||
"contentHash": "9338f2615ba4ef133b42b07dcdbc9e54ddf59b301fd1434e81ea3f36bba16dfb",
|
||||
"functions": [],
|
||||
"classes": [],
|
||||
"imports": [],
|
||||
"exports": [],
|
||||
"totalLines": 24,
|
||||
"hasStructuralAnalysis": false
|
||||
},
|
||||
"README.md": {
|
||||
"filePath": "README.md",
|
||||
"contentHash": "fa2024f70a4eb7556b501ec01f5c74d7981939d20a805bdbb4a534853618560d",
|
||||
"functions": [],
|
||||
"classes": [],
|
||||
"imports": [],
|
||||
"exports": [],
|
||||
"totalLines": 580,
|
||||
"hasStructuralAnalysis": true
|
||||
},
|
||||
"templates/openconnect-lite-config.toml": {
|
||||
"filePath": "templates/openconnect-lite-config.toml",
|
||||
"contentHash": "e3378bc1f313fd8087886e582f9ec402268649125db4b0320365b5c3f65611b6",
|
||||
"functions": [],
|
||||
"classes": [],
|
||||
"imports": [],
|
||||
"exports": [],
|
||||
"totalLines": 33,
|
||||
"hasStructuralAnalysis": true
|
||||
},
|
||||
"tests/smoke.sh": {
|
||||
"filePath": "tests/smoke.sh",
|
||||
"contentHash": "1cf9648a22e831c0693d328edcbc0e5e6561084244a20dfb37d95dd6f7f8f23e",
|
||||
"functions": [
|
||||
{
|
||||
"name": "autoFill",
|
||||
"params": [],
|
||||
"exported": false,
|
||||
"lineCount": 4
|
||||
}
|
||||
],
|
||||
"classes": [],
|
||||
"imports": [],
|
||||
"exports": [],
|
||||
"totalLines": 439,
|
||||
"hasStructuralAnalysis": true
|
||||
},
|
||||
"uninstall.sh": {
|
||||
"filePath": "uninstall.sh",
|
||||
"contentHash": "6ad75a4fbbe52575eb3672a1eac06734e13f4a82d77cba17dfe2aee75b6ecfba",
|
||||
"functions": [
|
||||
{
|
||||
"name": "usage",
|
||||
"params": [],
|
||||
"exported": false,
|
||||
"lineCount": 18
|
||||
},
|
||||
{
|
||||
"name": "log",
|
||||
"params": [],
|
||||
"exported": false,
|
||||
"lineCount": 3
|
||||
},
|
||||
{
|
||||
"name": "color_line",
|
||||
"params": [],
|
||||
"exported": false,
|
||||
"lineCount": 5
|
||||
},
|
||||
{
|
||||
"name": "log_step",
|
||||
"params": [],
|
||||
"exported": false,
|
||||
"lineCount": 3
|
||||
},
|
||||
{
|
||||
"name": "log_info",
|
||||
"params": [],
|
||||
"exported": false,
|
||||
"lineCount": 3
|
||||
},
|
||||
{
|
||||
"name": "log_detail",
|
||||
"params": [],
|
||||
"exported": false,
|
||||
"lineCount": 3
|
||||
},
|
||||
{
|
||||
"name": "log_ok",
|
||||
"params": [],
|
||||
"exported": false,
|
||||
"lineCount": 3
|
||||
},
|
||||
{
|
||||
"name": "log_warn",
|
||||
"params": [],
|
||||
"exported": false,
|
||||
"lineCount": 3
|
||||
},
|
||||
{
|
||||
"name": "log_skip",
|
||||
"params": [],
|
||||
"exported": false,
|
||||
"lineCount": 3
|
||||
},
|
||||
{
|
||||
"name": "die",
|
||||
"params": [],
|
||||
"exported": false,
|
||||
"lineCount": 4
|
||||
},
|
||||
{
|
||||
"name": "run",
|
||||
"params": [],
|
||||
"exported": false,
|
||||
"lineCount": 11
|
||||
},
|
||||
{
|
||||
"name": "find_webengine_process",
|
||||
"params": [],
|
||||
"exported": false,
|
||||
"lineCount": 7
|
||||
},
|
||||
{
|
||||
"name": "restore_openconnect_lite_patch",
|
||||
"params": [],
|
||||
"exported": false,
|
||||
"lineCount": 21
|
||||
},
|
||||
{
|
||||
"name": "remove_zshrc_block",
|
||||
"params": [],
|
||||
"exported": false,
|
||||
"lineCount": 22
|
||||
},
|
||||
{
|
||||
"name": "remove_keychain_entries",
|
||||
"params": [],
|
||||
"exported": false,
|
||||
"lineCount": 29
|
||||
},
|
||||
{
|
||||
"name": "main",
|
||||
"params": [],
|
||||
"exported": false,
|
||||
"lineCount": 83
|
||||
}
|
||||
],
|
||||
"classes": [],
|
||||
"imports": [],
|
||||
"exports": [],
|
||||
"totalLines": 321,
|
||||
"hasStructuralAnalysis": true
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1566,6 +1566,472 @@
|
||||
"type": "contains",
|
||||
"direction": "forward",
|
||||
"weight": 1
|
||||
},
|
||||
{
|
||||
"source": "document:README.md",
|
||||
"target": "file:install.sh",
|
||||
"type": "documents",
|
||||
"direction": "forward",
|
||||
"weight": 0.5
|
||||
},
|
||||
{
|
||||
"source": "document:README.md",
|
||||
"target": "file:bin/vpn-lemanapro.sh",
|
||||
"type": "documents",
|
||||
"direction": "forward",
|
||||
"weight": 0.5
|
||||
},
|
||||
{
|
||||
"source": "document:README.md",
|
||||
"target": "file:app/Sources/LemanaVPN/LemanaVPNApp.swift",
|
||||
"type": "documents",
|
||||
"direction": "forward",
|
||||
"weight": 0.5
|
||||
},
|
||||
{
|
||||
"source": "document:README.md",
|
||||
"target": "file:app/Sources/LemanaVPN/VPNManager.swift",
|
||||
"type": "documents",
|
||||
"direction": "forward",
|
||||
"weight": 0.5
|
||||
},
|
||||
{
|
||||
"source": "document:README.md",
|
||||
"target": "file:uninstall.sh",
|
||||
"type": "documents",
|
||||
"direction": "forward",
|
||||
"weight": 0.5
|
||||
},
|
||||
{
|
||||
"source": "document:README.md",
|
||||
"target": "config:templates/openconnect-lite-config.toml",
|
||||
"type": "documents",
|
||||
"direction": "forward",
|
||||
"weight": 0.5
|
||||
},
|
||||
{
|
||||
"source": "document:README.md",
|
||||
"target": "file:libexec/lemana-vpn-dns-cleanup",
|
||||
"type": "documents",
|
||||
"direction": "forward",
|
||||
"weight": 0.5
|
||||
},
|
||||
{
|
||||
"source": "document:AGENTS.md",
|
||||
"target": "document:.agents/skills/lemana-vpn-operations/SKILL.md",
|
||||
"type": "documents",
|
||||
"direction": "forward",
|
||||
"weight": 0.5
|
||||
},
|
||||
{
|
||||
"source": "document:AGENTS.md",
|
||||
"target": "document:.agents/skills/lemana-vpn-sso-autofill/SKILL.md",
|
||||
"type": "documents",
|
||||
"direction": "forward",
|
||||
"weight": 0.5
|
||||
},
|
||||
{
|
||||
"source": "document:AGENTS.md",
|
||||
"target": "document:.agents/skills/lemana-vpn-testing/SKILL.md",
|
||||
"type": "documents",
|
||||
"direction": "forward",
|
||||
"weight": 0.5
|
||||
},
|
||||
{
|
||||
"source": "document:.agents/skills/lemana-vpn-operations/SKILL.md",
|
||||
"target": "file:install.sh",
|
||||
"type": "documents",
|
||||
"direction": "forward",
|
||||
"weight": 0.5
|
||||
},
|
||||
{
|
||||
"source": "document:.agents/skills/lemana-vpn-operations/SKILL.md",
|
||||
"target": "file:bin/vpn-lemanapro.sh",
|
||||
"type": "documents",
|
||||
"direction": "forward",
|
||||
"weight": 0.5
|
||||
},
|
||||
{
|
||||
"source": "document:.agents/skills/lemana-vpn-operations/SKILL.md",
|
||||
"target": "file:uninstall.sh",
|
||||
"type": "documents",
|
||||
"direction": "forward",
|
||||
"weight": 0.5
|
||||
},
|
||||
{
|
||||
"source": "document:.agents/skills/lemana-vpn-sso-autofill/SKILL.md",
|
||||
"target": "file:bin/vpn-lemanapro.sh",
|
||||
"type": "documents",
|
||||
"direction": "forward",
|
||||
"weight": 0.5
|
||||
},
|
||||
{
|
||||
"source": "document:.agents/skills/lemana-vpn-sso-autofill/SKILL.md",
|
||||
"target": "config:templates/openconnect-lite-config.toml",
|
||||
"type": "documents",
|
||||
"direction": "forward",
|
||||
"weight": 0.5
|
||||
},
|
||||
{
|
||||
"source": "document:.agents/skills/lemana-vpn-testing/SKILL.md",
|
||||
"target": "file:tests/smoke.sh",
|
||||
"type": "documents",
|
||||
"direction": "forward",
|
||||
"weight": 0.5
|
||||
},
|
||||
{
|
||||
"source": "document:docs/goals/manual-first-auth-flow/GOAL.md",
|
||||
"target": "document:docs/goals/manual-first-auth-flow/PLAN.md",
|
||||
"type": "documents",
|
||||
"direction": "forward",
|
||||
"weight": 0.5
|
||||
},
|
||||
{
|
||||
"source": "document:docs/goals/manual-first-auth-flow/PLAN.md",
|
||||
"target": "file:install.sh",
|
||||
"type": "documents",
|
||||
"direction": "forward",
|
||||
"weight": 0.5
|
||||
},
|
||||
{
|
||||
"source": "document:docs/goals/manual-first-auth-flow/PLAN.md",
|
||||
"target": "file:bin/vpn-lemanapro.sh",
|
||||
"type": "documents",
|
||||
"direction": "forward",
|
||||
"weight": 0.5
|
||||
},
|
||||
{
|
||||
"source": "document:docs/goals/manual-first-auth-flow/PLAN.md",
|
||||
"target": "file:app/Sources/LemanaVPN/VPNManager.swift",
|
||||
"type": "documents",
|
||||
"direction": "forward",
|
||||
"weight": 0.5
|
||||
},
|
||||
{
|
||||
"source": "document:docs/goals/manual-first-auth-flow/PLAN.md",
|
||||
"target": "file:tests/smoke.sh",
|
||||
"type": "documents",
|
||||
"direction": "forward",
|
||||
"weight": 0.5
|
||||
},
|
||||
{
|
||||
"source": "document:docs/superpowers/plans/2026-05-24-keychain-totp-provider.md",
|
||||
"target": "file:install.sh",
|
||||
"type": "documents",
|
||||
"direction": "forward",
|
||||
"weight": 0.5
|
||||
},
|
||||
{
|
||||
"source": "document:docs/superpowers/plans/2026-05-24-keychain-totp-provider.md",
|
||||
"target": "file:bin/vpn-lemanapro.sh",
|
||||
"type": "documents",
|
||||
"direction": "forward",
|
||||
"weight": 0.5
|
||||
},
|
||||
{
|
||||
"source": "document:docs/superpowers/plans/2026-05-24-keychain-totp-provider.md",
|
||||
"target": "file:app/Sources/LemanaVPN/VPNManager.swift",
|
||||
"type": "documents",
|
||||
"direction": "forward",
|
||||
"weight": 0.5
|
||||
},
|
||||
{
|
||||
"source": "document:docs/superpowers/plans/2026-05-24-keychain-totp-provider.md",
|
||||
"target": "file:tests/smoke.sh",
|
||||
"type": "documents",
|
||||
"direction": "forward",
|
||||
"weight": 0.5
|
||||
},
|
||||
{
|
||||
"source": "file:install.sh",
|
||||
"target": "file:bin/vpn-lemanapro.sh",
|
||||
"type": "depends_on",
|
||||
"direction": "forward",
|
||||
"weight": 0.6
|
||||
},
|
||||
{
|
||||
"source": "file:install.sh",
|
||||
"target": "file:uninstall.sh",
|
||||
"type": "depends_on",
|
||||
"direction": "forward",
|
||||
"weight": 0.6
|
||||
},
|
||||
{
|
||||
"source": "file:install.sh",
|
||||
"target": "config:templates/openconnect-lite-config.toml",
|
||||
"type": "depends_on",
|
||||
"direction": "forward",
|
||||
"weight": 0.6
|
||||
},
|
||||
{
|
||||
"source": "file:install.sh",
|
||||
"target": "file:libexec/lemana-vpn-dns-cleanup",
|
||||
"type": "depends_on",
|
||||
"direction": "forward",
|
||||
"weight": 0.6
|
||||
},
|
||||
{
|
||||
"source": "file:install.sh",
|
||||
"target": "file:app/Package.swift",
|
||||
"type": "depends_on",
|
||||
"direction": "forward",
|
||||
"weight": 0.6
|
||||
},
|
||||
{
|
||||
"source": "file:install.sh",
|
||||
"target": "file:app/Sources/LemanaVPN/LemanaVPNApp.swift",
|
||||
"type": "depends_on",
|
||||
"direction": "forward",
|
||||
"weight": 0.6
|
||||
},
|
||||
{
|
||||
"source": "file:install.sh",
|
||||
"target": "file:app/Sources/LemanaVPN/VPNManager.swift",
|
||||
"type": "depends_on",
|
||||
"direction": "forward",
|
||||
"weight": 0.6
|
||||
},
|
||||
{
|
||||
"source": "file:uninstall.sh",
|
||||
"target": "file:bin/vpn-lemanapro.sh",
|
||||
"type": "depends_on",
|
||||
"direction": "forward",
|
||||
"weight": 0.6
|
||||
},
|
||||
{
|
||||
"source": "file:uninstall.sh",
|
||||
"target": "file:libexec/lemana-vpn-dns-cleanup",
|
||||
"type": "depends_on",
|
||||
"direction": "forward",
|
||||
"weight": 0.6
|
||||
},
|
||||
{
|
||||
"source": "file:app/Sources/LemanaVPN/LemanaVPNApp.swift",
|
||||
"target": "file:app/Sources/LemanaVPN/VPNManager.swift",
|
||||
"type": "depends_on",
|
||||
"direction": "forward",
|
||||
"weight": 0.6
|
||||
},
|
||||
{
|
||||
"source": "file:app/Sources/LemanaVPN/VPNManager.swift",
|
||||
"target": "file:bin/vpn-lemanapro.sh",
|
||||
"type": "depends_on",
|
||||
"direction": "forward",
|
||||
"weight": 0.6
|
||||
},
|
||||
{
|
||||
"source": "file:bin/vpn-lemanapro.sh",
|
||||
"target": "config:templates/openconnect-lite-config.toml",
|
||||
"type": "depends_on",
|
||||
"direction": "forward",
|
||||
"weight": 0.6
|
||||
},
|
||||
{
|
||||
"source": "file:bin/vpn-lemanapro.sh",
|
||||
"target": "file:libexec/lemana-vpn-dns-cleanup",
|
||||
"type": "depends_on",
|
||||
"direction": "forward",
|
||||
"weight": 0.6
|
||||
},
|
||||
{
|
||||
"source": "file:app/Package.swift",
|
||||
"target": "file:app/Sources/LemanaVPN/LemanaVPNApp.swift",
|
||||
"type": "configures",
|
||||
"direction": "forward",
|
||||
"weight": 0.6
|
||||
},
|
||||
{
|
||||
"source": "file:app/Package.swift",
|
||||
"target": "file:app/Sources/LemanaVPN/VPNManager.swift",
|
||||
"type": "configures",
|
||||
"direction": "forward",
|
||||
"weight": 0.6
|
||||
},
|
||||
{
|
||||
"source": "config:templates/openconnect-lite-config.toml",
|
||||
"target": "file:bin/vpn-lemanapro.sh",
|
||||
"type": "configures",
|
||||
"direction": "forward",
|
||||
"weight": 0.6
|
||||
},
|
||||
{
|
||||
"source": "file:install.sh",
|
||||
"target": "file:tests/smoke.sh",
|
||||
"type": "tested_by",
|
||||
"direction": "forward",
|
||||
"weight": 0.5
|
||||
},
|
||||
{
|
||||
"source": "file:uninstall.sh",
|
||||
"target": "file:tests/smoke.sh",
|
||||
"type": "tested_by",
|
||||
"direction": "forward",
|
||||
"weight": 0.5
|
||||
},
|
||||
{
|
||||
"source": "file:bin/vpn-lemanapro.sh",
|
||||
"target": "file:tests/smoke.sh",
|
||||
"type": "tested_by",
|
||||
"direction": "forward",
|
||||
"weight": 0.5
|
||||
},
|
||||
{
|
||||
"source": "file:app/Sources/LemanaVPN/LemanaVPNApp.swift",
|
||||
"target": "file:tests/smoke.sh",
|
||||
"type": "tested_by",
|
||||
"direction": "forward",
|
||||
"weight": 0.5
|
||||
},
|
||||
{
|
||||
"source": "file:app/Sources/LemanaVPN/VPNManager.swift",
|
||||
"target": "file:tests/smoke.sh",
|
||||
"type": "tested_by",
|
||||
"direction": "forward",
|
||||
"weight": 0.5
|
||||
},
|
||||
{
|
||||
"source": "config:templates/openconnect-lite-config.toml",
|
||||
"target": "file:tests/smoke.sh",
|
||||
"type": "tested_by",
|
||||
"direction": "forward",
|
||||
"weight": 0.5
|
||||
}
|
||||
],
|
||||
"version": "1.0.0",
|
||||
"project": {
|
||||
"name": "Lemana VPN",
|
||||
"languages": [
|
||||
"markdown",
|
||||
"swift",
|
||||
"shell",
|
||||
"unknown",
|
||||
"toml"
|
||||
],
|
||||
"frameworks": [
|
||||
"SwiftUI",
|
||||
"AppKit",
|
||||
"openconnect-lite",
|
||||
"Bitwarden CLI",
|
||||
"macOS Keychain"
|
||||
],
|
||||
"description": "macOS-пакет для корпоративного VPN Lemana: installer, CLI runtime, SSO/autofill через openconnect-lite, DNS cleanup wrapper и Swift menu bar app.",
|
||||
"analyzedAt": "2026-06-23T06:33:02.614Z",
|
||||
"gitCommitHash": "042c4d655090e0ee334208511ec63b6d909d4354"
|
||||
},
|
||||
"layers": [
|
||||
{
|
||||
"id": "layer:documentation-and-agent-guidance",
|
||||
"name": "Документация и agent guidance",
|
||||
"description": "Пользовательская документация, локальные agent skills и планы, которые описывают ожидаемые операции, safety rules и будущие изменения.",
|
||||
"nodeIds": [
|
||||
"document:README.md",
|
||||
"document:AGENTS.md",
|
||||
"document:.agents/skills/lemana-vpn-operations/SKILL.md",
|
||||
"document:.agents/skills/lemana-vpn-sso-autofill/SKILL.md",
|
||||
"document:.agents/skills/lemana-vpn-testing/SKILL.md",
|
||||
"document:docs/goals/manual-first-auth-flow/GOAL.md",
|
||||
"document:docs/goals/manual-first-auth-flow/PLAN.md",
|
||||
"document:docs/superpowers/plans/2026-05-24-keychain-totp-provider.md"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "layer:installer-and-uninstaller",
|
||||
"name": "Installer и uninstall слой",
|
||||
"description": "Shell scripts, которые устанавливают, обновляют и удаляют локальный VPN пакет, включая dependencies, app bundle, aliases, sudoers и cleanup.",
|
||||
"nodeIds": [
|
||||
"file:install.sh",
|
||||
"file:uninstall.sh"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "layer:runtime-cli-and-system-integration",
|
||||
"name": "Runtime CLI и системная интеграция",
|
||||
"description": "Основной CLI, openconnect-lite config и DNS cleanup wrapper, которые управляют SSO, credentials, VPN session status и системной очисткой DNS.",
|
||||
"nodeIds": [
|
||||
"file:bin/vpn-lemanapro.sh",
|
||||
"config:templates/openconnect-lite-config.toml",
|
||||
"file:libexec/lemana-vpn-dns-cleanup"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "layer:swift-menu-bar-app",
|
||||
"name": "Swift menu bar app",
|
||||
"description": "Swift Package и SwiftUI/AppKit код menu bar приложения, которое запускает CLI, показывает статус и предоставляет user-facing actions.",
|
||||
"nodeIds": [
|
||||
"file:app/Package.swift",
|
||||
"file:app/Sources/LemanaVPN/LemanaVPNApp.swift",
|
||||
"file:app/Sources/LemanaVPN/VPNManager.swift"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "layer:verification",
|
||||
"name": "Verification слой",
|
||||
"description": "Non-live smoke suite, который закрепляет синтаксис, installer/runtime/app wiring и SSO patch/config expectations.",
|
||||
"nodeIds": [
|
||||
"file:tests/smoke.sh"
|
||||
]
|
||||
}
|
||||
],
|
||||
"tour": [
|
||||
{
|
||||
"order": 1,
|
||||
"title": "Назначение проекта",
|
||||
"description": "Начните с README и AGENTS, чтобы понять пользовательский контракт, состав пакета и правила безопасной работы с live VPN.",
|
||||
"nodeIds": [
|
||||
"document:README.md",
|
||||
"document:AGENTS.md"
|
||||
],
|
||||
"languageLesson": "Markdown здесь используется как операционный runbook: таблицы путей, shell blocks и safety sections важнее обычного prose."
|
||||
},
|
||||
{
|
||||
"order": 2,
|
||||
"title": "Установка и удаление",
|
||||
"description": "Разберите installer и uninstaller: они определяют, какие артефакты попадают в систему и как их безопасно откатить.",
|
||||
"nodeIds": [
|
||||
"file:install.sh",
|
||||
"file:uninstall.sh"
|
||||
],
|
||||
"languageLesson": "Shell strict-mode и idempotent функции помогают повторять установку без ручной чистки состояния."
|
||||
},
|
||||
{
|
||||
"order": 3,
|
||||
"title": "Runtime CLI",
|
||||
"description": "Основной runtime находится в `vpn-lemanapro.sh`: он синхронизирует credentials, применяет patches, запускает SSO и публикует JSON events.",
|
||||
"nodeIds": [
|
||||
"file:bin/vpn-lemanapro.sh",
|
||||
"config:templates/openconnect-lite-config.toml",
|
||||
"file:libexec/lemana-vpn-dns-cleanup"
|
||||
]
|
||||
},
|
||||
{
|
||||
"order": 4,
|
||||
"title": "SSO, credentials и autofill",
|
||||
"description": "SSO skill и historical plans объясняют, почему runtime разделяет Bitwarden sync, Keychain-only flow, TOTP normalization и manual/full-manual режимы.",
|
||||
"nodeIds": [
|
||||
"document:.agents/skills/lemana-vpn-sso-autofill/SKILL.md",
|
||||
"document:docs/superpowers/plans/2026-05-24-keychain-totp-provider.md",
|
||||
"file:bin/vpn-lemanapro.sh"
|
||||
]
|
||||
},
|
||||
{
|
||||
"order": 5,
|
||||
"title": "Menu bar app",
|
||||
"description": "Swift layer показывает user-facing поверхность: `LemanaVPNApp` строит меню, а `VPNManager` мостит app с CLI JSON events и health checks.",
|
||||
"nodeIds": [
|
||||
"file:app/Package.swift",
|
||||
"file:app/Sources/LemanaVPN/LemanaVPNApp.swift",
|
||||
"file:app/Sources/LemanaVPN/VPNManager.swift"
|
||||
],
|
||||
"languageLesson": "SwiftUI state flow здесь строится вокруг `ObservableObject` и `@Published`: изменения CLI events автоматически обновляют меню."
|
||||
},
|
||||
{
|
||||
"order": 6,
|
||||
"title": "Проверка без live VPN",
|
||||
"description": "Закончите smoke suite и testing skill: они показывают, какие проверки можно делать до любого реального подключения.",
|
||||
"nodeIds": [
|
||||
"file:tests/smoke.sh",
|
||||
"document:.agents/skills/lemana-vpn-testing/SKILL.md"
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
2037
.understand-anything/knowledge-graph.json
Normal file
2037
.understand-anything/knowledge-graph.json
Normal file
File diff suppressed because it is too large
Load Diff
6
.understand-anything/meta.json
Normal file
6
.understand-anything/meta.json
Normal file
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"lastAnalyzedAt": "2026-06-23T06:34:14.317Z",
|
||||
"gitCommitHash": "042c4d655090e0ee334208511ec63b6d909d4354",
|
||||
"version": "1.0.0",
|
||||
"analyzedFiles": 17
|
||||
}
|
||||
Reference in New Issue
Block a user