Check manual-full UI text in smoke test
This commit is contained in:
163
.understand-anything/intermediate/scan-result.json
Normal file
163
.understand-anything/intermediate/scan-result.json
Normal file
@@ -0,0 +1,163 @@
|
||||
{
|
||||
"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": []
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user