{ "name": "Lemana VPN", "projectName": "Lemana VPN", "description": "macOS-пакет для корпоративного VPN Lemana: installer, CLI runtime, SSO/autofill через openconnect-lite, DNS cleanup wrapper и Swift menu bar app.", "rawDescription": "CLI-установка корпоративного VPN vpn.lemanapro.ru для macOS.", "readmeHead": "# Lemana VPN\n\nCLI-установка корпоративного VPN `vpn.lemanapro.ru` для macOS.\n\n**Модули по умолчанию:** Core: включён; Bitwarden: включён; Touch ID: включён; DNS cleanup: включён; Swift Menu Bar app: включён; автозапуск приложения: включён; runtime-патчи: применяются автоматически перед подключением.\n\n**Credential sources:** `bitwarden` синхронизирует LDAP-пароль и TOTP seed из Bitwarden в macOS Keychain; `keychain` хранит LDAP-пароль и постоянный TOTP seed напрямую в macOS Keychain. Оба источника используют один и тот же runtime `openconnect-lite` для SSO/autofill.\n\nРепозиторий собирает в один воспроизводимый пакет то, что раньше было ручной локальной настройкой:\n\n- `openconnect` как VPN-клиент;\n- `openconnect-lite` для SAML SSO через Keycloak;\n- опциональный Bitwarden CLI для LDAP-пароля и TOTP seed;\n- опциональный Touch ID helper для мастер-пароля Bitwarden;\n- Swift Menu Bar app `LemanaVPN.app`;\n- безопасный DNS cleanup через root-owned wrapper;\n- алиасы `vpn`, `vpn-auto`, `vpn-manual`, `vpn-manual-full`, `vpn-debug`, `vpn-fix-dns`.\n\n## Быстрая установка\n\n```sh\ncurl -fsSL https://git.dokops.ru/dokril/lemana-vpn/raw/branch/main/install.sh | sh\n```\n\nЕсли установка запущена из терминала, скрипт работает как интерактивный wizard: проверит, что уже стоит, спросит как хранить credentials, предложит нужные модули и проведёт через настройку.\n\nПосле установки открой новый shell или выполни:\n\n```sh\nexec zsh\nvpn\n```\n\n## Интерактивная установка\n\nОбычный путь — запустить installer без флагов и ответить на вопросы:\n\n```sh\ncurl -fsSL https://git.dokops.ru/dokril/lemana-vpn/raw/branch/main/install.sh | sh\n```\n\nПервый важный вопрос — как хранить VPN credentials:\n\n```text\nКак хранить VPN credentials?\n 1) Bitwarden -> macOS Keychain\n 2) macOS Keychain: ввести LDAP password и TOTP seed сейчас\n 3) macOS Keychain: настрою вручную позже\nВыбор [1/2/3, Enter=1]:\n```\n\nЧто означают варианты:\n\n- `1` — использовать Bitwarden как sync-provider: installer поставит/проверит `bw`, а при запуске `vpn` CLI переложит LDAP password и TOTP seed из Bitwarden в macOS Keychain.\n- `2` — бесплатный Keychain-only путь: после установки CLI спросит LDAP password и постоянный TOTP seed или `otpauth://...secret=...`, затем сохранит их в macOS Keychain.\n- `3` — поставить CLI/app сейчас, а credentials настроить позже командой `vpn --configure-keychain`.\n\nДальше installer спросит только про системные модули: Touch ID для Bitwarden, sudoers, aliases, Swift Menu Bar app и автозапуск.\n\nФлаги остаются для CI, повторяемых установок и диагностики. Для обычной установки они не нужны.\n\nПроверить действия без изменений:\n\n```sh\ncurl -fsSL https://git.dokops.ru/dokril/lemana-vpn/raw/branch/main/install.sh | sh -s -- --dry-run\n```\n\nПример неинтерактивного режима для автоматизации:\n\n```sh\ncurl -fsSL https://git.dokops.ru/dokril/lemana-vpn/raw/branch/main/install.sh \\\n | sh -s -- --non-interactive --credential-source keychain --configure-keychain\n```\n\nПринудительно включить интерактивные вопросы:\n\n```sh\n", "languages": [ "markdown", "swift", "shell", "unknown", "toml" ], "frameworks": [ "SwiftUI", "AppKit", "openconnect-lite", "Bitwarden CLI", "macOS Keychain" ], "files": [ { "path": ".agents/skills/lemana-vpn-operations/SKILL.md", "language": "markdown", "sizeLines": 70, "fileCategory": "docs" }, { "path": ".agents/skills/lemana-vpn-sso-autofill/SKILL.md", "language": "markdown", "sizeLines": 80, "fileCategory": "docs" }, { "path": ".agents/skills/lemana-vpn-testing/SKILL.md", "language": "markdown", "sizeLines": 101, "fileCategory": "docs" }, { "path": "AGENTS.md", "language": "markdown", "sizeLines": 88, "fileCategory": "docs" }, { "path": "app/Package.swift", "language": "swift", "sizeLines": 14, "fileCategory": "code" }, { "path": "app/Sources/LemanaVPN/LemanaVPNApp.swift", "language": "swift", "sizeLines": 190, "fileCategory": "code" }, { "path": "app/Sources/LemanaVPN/VPNManager.swift", "language": "swift", "sizeLines": 697, "fileCategory": "code" }, { "path": "bin/vpn-lemanapro.sh", "language": "shell", "sizeLines": 1090, "fileCategory": "script" }, { "path": "docs/goals/manual-first-auth-flow/GOAL.md", "language": "markdown", "sizeLines": 12, "fileCategory": "docs" }, { "path": "docs/goals/manual-first-auth-flow/PLAN.md", "language": "markdown", "sizeLines": 251, "fileCategory": "docs" }, { "path": "docs/superpowers/plans/2026-05-24-keychain-totp-provider.md", "language": "markdown", "sizeLines": 935, "fileCategory": "docs" }, { "path": "install.sh", "language": "shell", "sizeLines": 943, "fileCategory": "script" }, { "path": "libexec/lemana-vpn-dns-cleanup", "language": "unknown", "sizeLines": 23, "fileCategory": "code" }, { "path": "README.md", "language": "markdown", "sizeLines": 579, "fileCategory": "docs" }, { "path": "templates/openconnect-lite-config.toml", "language": "toml", "sizeLines": 32, "fileCategory": "config" }, { "path": "tests/smoke.sh", "language": "shell", "sizeLines": 438, "fileCategory": "script" }, { "path": "uninstall.sh", "language": "shell", "sizeLines": 320, "fileCategory": "script" } ], "totalFiles": 17, "filteredByIgnore": 3, "estimatedComplexity": "small", "stats": { "filesScanned": 17, "byCategory": { "docs": 8, "code": 4, "script": 4, "config": 1 }, "byLanguage": { "markdown": 8, "swift": 3, "shell": 4, "unknown": 1, "toml": 1 } }, "importMap": { ".agents/skills/lemana-vpn-operations/SKILL.md": [], ".agents/skills/lemana-vpn-sso-autofill/SKILL.md": [], ".agents/skills/lemana-vpn-testing/SKILL.md": [], "AGENTS.md": [], "app/Package.swift": [], "app/Sources/LemanaVPN/LemanaVPNApp.swift": [], "app/Sources/LemanaVPN/VPNManager.swift": [], "bin/vpn-lemanapro.sh": [], "docs/goals/manual-first-auth-flow/GOAL.md": [], "docs/goals/manual-first-auth-flow/PLAN.md": [], "docs/superpowers/plans/2026-05-24-keychain-totp-provider.md": [], "install.sh": [], "libexec/lemana-vpn-dns-cleanup": [], "README.md": [], "templates/openconnect-lite-config.toml": [], "tests/smoke.sh": [], "uninstall.sh": [] } }