Update understand-anything graph metadata
This commit is contained in:
@@ -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"
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
Reference in New Issue
Block a user