maps: fix — репо-папки как обычные файлы (было submodule/gitlink), 45 MAP.md теперь в репо
This commit is contained in:
Submodule Afanasov-smart deleted from 42e630a147
@@ -0,0 +1,125 @@
|
||||
# Afanasov-smart
|
||||
|
||||
## Назначение
|
||||
**Afanasov SmartLight Panel v4.0.2** — панель управления «умным» освещением частного объекта. Full-stack приложение: Node.js/Express backend + React/Vite SPA frontend.
|
||||
|
||||
Функции:
|
||||
- Управление устройствами Wiren Board по MQTT: реле (WB-MR6C, вкл/выкл) и диммеры (WB-MDM3, яркость 0–100), по каналам.
|
||||
- Автообнаружение устройств (MQTT retain-топики `/devices/{id}/...`).
|
||||
- Сцены, расписания (в т.ч. по восходу/закату), таймеры каналов.
|
||||
- Ворота/gates (trigger-реле).
|
||||
- Датчики + история показаний (SQLite `history.db` через better-sqlite3).
|
||||
- Погода (OpenWeatherMap) — для scheduler и UI.
|
||||
- Двухуровневая авторизация (роли `user` / `admin`, Basic Auth).
|
||||
|
||||
Репозиторий в анализируемом виде — это релизный zip `afanasov-v4.0.2-release.zip` (распакован для анализа). README отсутствует; описание собрано из `UPGRADE.md`, шапок package.json и docstring в исходниках.
|
||||
|
||||
## Архитектура
|
||||
|
||||
```mermaid
|
||||
graph TD
|
||||
subgraph FE[Frontend · React/Vite]
|
||||
App[App.jsx] --> Hooks[hooks: useAuth/useDevices/useTheme/useToast]
|
||||
App --> Comp[components: Header/Devices/Gates/Scenes/Sensors/AdminPanel]
|
||||
Comp --> ApiJS[utils/api.js · fetch /api]
|
||||
end
|
||||
|
||||
subgraph BE[Backend · Node/Express]
|
||||
Server[server.js] --> Alias[middleware/aliasRoutes]
|
||||
Server --> Auth[middleware/auth · detectRole/requireRole]
|
||||
Server --> R[routes: auth/devices/gates/scenes/schedules/sensors/system]
|
||||
R --> Store[services/dataStore]
|
||||
R --> Bridge[services/deviceBridge]
|
||||
R --> Hist[services/historyStore]
|
||||
R --> Weather[services/weatherApi]
|
||||
Server --> Disc[services/mqttDiscovery]
|
||||
Server --> Sched[services/scheduler]
|
||||
Sched --> Store
|
||||
Sched --> Bridge
|
||||
Sched --> Weather
|
||||
Disc --> Store
|
||||
Bridge --> MQTT[(MQTT broker · Wiren Board)]
|
||||
Disc --> MQTT
|
||||
Weather --> OWM[(OpenWeatherMap API)]
|
||||
Hist --> DB[(SQLite history.db)]
|
||||
Store --> JSON[(data/*.json: lines/scenes/gates/schedules)]
|
||||
end
|
||||
|
||||
ApiJS -->|HTTP /api| Server
|
||||
```
|
||||
|
||||
## Entry-points / маршруты
|
||||
|
||||
Всё под префиксом `/api`. Порт по умолчанию `3100`. SPA-fallback отдаёт `index.html` на всё не-`/api`.
|
||||
|
||||
| Метод | Путь | Роль | Файл |
|
||||
|---|---|---|---|
|
||||
| POST | /api/auth/login | — | routes/auth.js:29 |
|
||||
| GET | /api/auth/session | — | routes/auth.js:51 |
|
||||
| POST | /api/auth/passwords | admin | routes/auth.js:66 |
|
||||
| GET | /api/devices | — | routes/devices.js:56 |
|
||||
| POST | /api/devices/group-action | user | routes/devices.js:66 |
|
||||
| GET | /api/devices/:id | — | routes/devices.js:105 |
|
||||
| POST | /api/devices/:id/rename | admin | routes/devices.js:114 |
|
||||
| POST | /api/devices/:id/visibility | admin | routes/devices.js:128 |
|
||||
| POST | /api/devices/:id/ch/:ch/toggle | user | routes/devices.js:144 |
|
||||
| POST | /api/devices/:id/ch/:ch/state | user | routes/devices.js:155 |
|
||||
| POST | /api/devices/:id/ch/:ch/brightness | user | routes/devices.js:170 |
|
||||
| POST | /api/devices/:id/ch/:ch/timer | user | routes/devices.js:191 |
|
||||
| DELETE | /api/devices/:id/ch/:ch/timer | user | routes/devices.js:209 |
|
||||
| POST | /api/devices/:id/ch/:ch/mode | user | routes/devices.js:220 |
|
||||
| POST | /api/devices/:id/ch/:ch/label | admin | routes/devices.js:234 |
|
||||
| POST | /api/devices/:id/ch/:ch/visibility | admin | routes/devices.js:248 |
|
||||
| GET/POST | /api/gates | admin(POST) | routes/gates.js:46,51 |
|
||||
| PUT/DELETE | /api/gates/:id | admin | routes/gates.js:71,86 |
|
||||
| POST | /api/gates/:id/trigger | user | routes/gates.js:96 |
|
||||
| GET/POST | /api/scenes | admin(POST) | routes/scenes.js:111,116 |
|
||||
| PUT/DELETE | /api/scenes/:id | admin | routes/scenes.js:133,148 |
|
||||
| POST | /api/scenes/:id/activate | user | routes/scenes.js:160 |
|
||||
| GET/POST | /api/schedules | admin(POST) | routes/schedules.js:97,102 |
|
||||
| PUT/DELETE | /api/schedules/:id | admin | routes/schedules.js:123,138 |
|
||||
| POST | /api/schedules/:id/enabled | user | routes/schedules.js:148 |
|
||||
| GET | /api/sensors | — | routes/sensors.js:20 |
|
||||
| GET | /api/sensors/:id/history | — | routes/sensors.js:37 |
|
||||
| GET | /api/status | — | routes/system.js:29 |
|
||||
| GET | /api/weather | — | routes/system.js:47 |
|
||||
| GET | /api/discovery/status | — | routes/system.js:60 |
|
||||
| POST | /api/discovery/rescan | admin | routes/system.js:64 |
|
||||
| GET | /api/channel-names | — | routes/system.js:77 |
|
||||
| PUT | /api/channel-names/:id | admin | routes/system.js:84 |
|
||||
|
||||
Legacy-алиасы (middleware/aliasRoutes): `/api/lines...` → `/api/devices...` (переходная совместимость).
|
||||
|
||||
## Ключевые цепочки вызовов
|
||||
|
||||
1. **Вкл/выкл канала**: FE `api.toggle` → `POST /api/devices/:id/ch/:ch/toggle` → `auth.requireRole('user')` → `dataStore` (текущее состояние) → `deviceBridge` (mock или MQTT publish в топик WB `/devices/{id}/controls/K{N}/on`) → ответ, история.
|
||||
2. **Автообнаружение устройств**: старт `server.js` → `mqttDiscovery.start()` → подписка на `/devices/+/meta` и `/controls/+/meta` → парсинг retain-топиков → `dataStore` наполняется устройствами/каналами.
|
||||
3. **Активация сцены**: FE → `POST /api/scenes/:id/activate` → `scenes` route → чтение сцены из `dataStore` → серия команд через `deviceBridge` по каналам.
|
||||
4. **Расписание по закату**: `scheduler.init()` (tick) → `weatherApi.getWeather()` (sunrise/sunset UTC, кэш 10 мин) → сравнение с временем правил в `dataStore` → срабатывание через `deviceBridge`.
|
||||
5. **История датчика**: MQTT-показания → `historyStore` (SQLite) ; FE запрашивает `GET /api/sensors/:id/history` → выборка из `history.db` → график в `SensorHistoryModal`.
|
||||
|
||||
## Тех-долг
|
||||
|
||||
- **`backend/src/middleware/aliasRoutes.js`** — *предположение*: dead-code кандидат. Сам файл в docstring помечен как временный слой совместимости `/api/lines...` для старых фронтов; текущий frontend (`utils/api.js`) обращается только к `/api/devices...`. После подтверждения, что legacy-клиентов нет, middleware можно удалить. Точность — через codebase-memory-mcp.
|
||||
- **Погода/солнце**: docstring server.js упоминает сервис `sunrise`, но отдельного модуля нет — sunrise/sunset берётся из `weatherApi` (OpenWeatherMap). *Предположение*: расхождение комментария и кода, не дубль. Уточнить через codebase-memory-mcp.
|
||||
- **Дубли guard-логики ролей**: `requireRole(...)` повторяется во всех routes — это норма Express, не дубль, но кандидат на аудит консистентности прав (напр. group-action=user vs label=admin). *Предположение*.
|
||||
- Frontend: все компоненты (`Icon`, `ChannelRow`, `DeviceCard`, `SensorHistoryModal`, `ThemeSwitcher` и др.) имеют входящие импорты — явных dead-компонентов не выявлено.
|
||||
- `frontend/dist/` содержит собранный бандл (index-*.js/css) — артефакт сборки, в LOC кода не учитывался.
|
||||
|
||||
Все пометки выше — эвристика (греп по импортам/require). Достоверный dead-code/call-graph — через codebase-memory-mcp.
|
||||
|
||||
## Cross-service links
|
||||
Упоминаний ДРУГИХ наших сервисов/репо/доменов (`*.servaki.online`, finik/ru1/ru2/ru3/de/gate/vm-mts/158, agent-sync, egorin, orbit-*, homeassistant-backup и т.д.) **не обнаружено** — сервис автономный.
|
||||
|
||||
Внешние зависимости (не наши):
|
||||
- OpenWeatherMap API — `https://api.openweathermap.org/data/2.5/weather` (config.js:62, weatherApi.js).
|
||||
- MQTT-брокер Wiren Board — `mqtt://localhost:1883` по умолчанию (config MQTT_URL; deviceBridge, mqttDiscovery).
|
||||
- Локальный тестовый хост `http://192.168.0.234:$PORT` (scripts/install.sh) — деплой-адрес контроллера.
|
||||
|
||||
## TODO для Лилии (codebase-memory-mcp)
|
||||
- Построить **точный call-graph** backend (routes → services → deviceBridge/dataStore/historyStore) и FE (App → hooks → api.js эндпоинты) — сопоставить каждый route с вызывающим FE-методом `utils/api.js`.
|
||||
- Подтвердить/опровергнуть **dead-code**: `aliasRoutes.js` (реальные обращения к `/api/lines`?), расхождение комментария про модуль `sunrise`.
|
||||
- Зафиксировать **cross-service = none** и внешние интеграции (OpenWeatherMap, MQTT Wiren Board, IP 192.168.0.234) в графе зависимостей.
|
||||
- Индексировать **модель данных**: `data/*.json` (lines/scenes/gates/schedules/channel-names) + схему `history.db` (better-sqlite3).
|
||||
- Сохранить снапшот `graph.db.zst` для инкрементального обновления карты при следующих релизах (версионирование v4.0.x).
|
||||
- Сверить имена каналов из `scripts/apply-labels.sh` с памятью проекта (восстановление label-ов).
|
||||
-1
Submodule Heritage deleted from 14127d3f44
+151
@@ -0,0 +1,151 @@
|
||||
# Heritage
|
||||
|
||||
## Назначение
|
||||
|
||||
Веб-приложение «Родословное дерево семьи» (Family Tree) — построение, визуализация
|
||||
и ведение генеалогического дерева. Хранит персон (ФИО, пол, даты, фото, биография,
|
||||
контакты) и связи (родитель→ребёнок, брак/союз, приёмные). Даёт дерево с pan/zoom,
|
||||
поиск, карточки персон, роли (admin/editor/viewer), импорт/экспорт JSON/CSV/GEDCOM,
|
||||
светлую/тёмную тему.
|
||||
|
||||
Стек: **Frontend** — React + TypeScript + Vite + Tailwind + React Flow;
|
||||
**Backend** — Node.js + Express + PostgreSQL (JWT-авторизация, bcrypt).
|
||||
Развёртывание через `docker-compose` (db 5432 / backend 4000 / frontend 3000→80).
|
||||
|
||||
Дополнительно: автономные статичные HTML (`landing/`, `preview/`) для демонстрации
|
||||
без сборки и сервера, плюс папка `design/` с исходным макетом.
|
||||
|
||||
- Основной язык: **TypeScript + JavaScript** (React / Node).
|
||||
- Суммарный LOC (отслеживаемый код backend/src + frontend/src + db + landing + preview): **~2208**
|
||||
(React/Express-код ~815; статичные HTML/SQL ~1400). Папка `design/` (~92 КБ JS-макета) не входит в сборку.
|
||||
|
||||
## Архитектура
|
||||
|
||||
```mermaid
|
||||
graph TD
|
||||
subgraph Frontend[frontend/ React+Vite+Tailwind]
|
||||
MAIN[main.tsx] --> APP[App.tsx]
|
||||
APP --> TREE[FamilyTree.tsx<br/>React Flow]
|
||||
APP --> MODAL[PersonModal.tsx]
|
||||
TREE --> NODE[PersonNode.tsx]
|
||||
TREE --> LAYOUT[lib/layout.ts]
|
||||
APP --> CLIENT[api/client.ts]
|
||||
APP --> TYPES[types.ts]
|
||||
end
|
||||
|
||||
subgraph Backend[backend/ Express]
|
||||
INDEX[index.js<br/>app + /api/health] --> RAUTH[routes/auth.js]
|
||||
INDEX --> RPERS[routes/persons.js]
|
||||
INDEX --> RREL[routes/relations.js]
|
||||
INDEX --> RIO[routes/io.js]
|
||||
RAUTH --> MW[middleware/auth.js<br/>authRequired/requireRole]
|
||||
RPERS --> MW
|
||||
RREL --> MW
|
||||
RIO --> MW
|
||||
RAUTH --> POOL[db/pool.js]
|
||||
RPERS --> POOL
|
||||
RREL --> POOL
|
||||
RIO --> POOL
|
||||
MIGRATE[db/migrate.js] --> POOL
|
||||
end
|
||||
|
||||
subgraph Data[PostgreSQL]
|
||||
SCHEMA[db/schema.sql]
|
||||
SEED[db/seed.sql]
|
||||
end
|
||||
|
||||
subgraph Static[Автономные артефакты]
|
||||
LAND[landing/index.html]
|
||||
PREV[preview/index.html]
|
||||
DESIGN[design/*.js .dc.html]
|
||||
end
|
||||
|
||||
CLIENT -->|fetch /api| INDEX
|
||||
POOL --> Data
|
||||
LAND -.открыть дерево.-> PREV
|
||||
```
|
||||
|
||||
## Entry-points / маршруты
|
||||
|
||||
Backend Express, монтирование в `backend/src/index.js`
|
||||
(`/api/auth`, `/api/persons`, `/api/relations`, `/api/io`).
|
||||
|
||||
| Метод | Путь | Доступ | Файл | Назначение |
|
||||
|-------|------|--------|------|------------|
|
||||
| GET | `/api/health` | все | index.js:15 | Проверка живости |
|
||||
| POST | `/api/auth/register` | все | routes/auth.js:9 | Регистрация |
|
||||
| POST | `/api/auth/login` | все | routes/auth.js:27 | Вход, JWT |
|
||||
| GET | `/api/auth/me` | авторизован | routes/auth.js:37 | Текущий юзер |
|
||||
| GET | `/api/persons/tree` | авторизован | routes/persons.js:16 | Всё дерево |
|
||||
| GET | `/api/persons/search?q=` | авторизован | routes/persons.js:22 | Поиск |
|
||||
| GET | `/api/persons/:id` | авторизован | routes/persons.js:33 | Карточка + родня |
|
||||
| POST | `/api/persons` | admin, editor | routes/persons.js:47 | Создать |
|
||||
| PUT | `/api/persons/:id` | admin, editor | routes/persons.js:59 | Изменить |
|
||||
| DELETE | `/api/persons/:id` | admin | routes/persons.js:72 | Удалить |
|
||||
| POST | `/api/relations/parent-child` | admin, editor | routes/relations.js:9 | Связь родитель→ребёнок |
|
||||
| DELETE | `/api/relations/parent-child/:id` | admin, editor | routes/relations.js:18 | Удалить связь |
|
||||
| POST | `/api/relations/union` | admin, editor | routes/relations.js:24 | Брак/союз |
|
||||
| DELETE | `/api/relations/union/:id` | admin, editor | routes/relations.js:34 | Удалить союз |
|
||||
| GET | `/api/relations/history` | авторизован | routes/relations.js:40 | История изменений |
|
||||
| GET | `/api/io/export/json` | авторизован | routes/io.js:15 | Экспорт JSON |
|
||||
| GET | `/api/io/export/csv` | авторизован | routes/io.js:19 | Экспорт CSV |
|
||||
| GET | `/api/io/export/gedcom` | авторизован | routes/io.js:29 | Экспорт GEDCOM |
|
||||
| POST | `/api/io/import/json` | admin, editor | routes/io.js:53 | Импорт JSON |
|
||||
|
||||
Frontend не имеет своих HTTP-роутов — SPA; клиент API в `frontend/src/api/client.ts`
|
||||
(`BASE = VITE_API_URL || '/api'`). Nginx (`frontend/nginx.conf`) отдаёт статику.
|
||||
|
||||
## Ключевые цепочки вызовов
|
||||
|
||||
1. **Вход**: `App.tsx` форма → `api.login()` (client.ts) → `POST /api/auth/login`
|
||||
→ `routes/auth.js` bcrypt.compare + JWT → токен в `setToken()` → загрузка дерева.
|
||||
2. **Отрисовка дерева**: `App.tsx` → `api.tree()` → `GET /api/persons/tree` (SQL join)
|
||||
→ `FamilyTree.tsx` → `lib/layout.ts` (раскладка узлов) → `PersonNode.tsx` (React Flow).
|
||||
3. **Карточка персоны**: клик по узлу → `App.selected` → `PersonModal.tsx`
|
||||
→ `api.person(id)` → `GET /api/persons/:id` (персона + родня + медиа);
|
||||
`onNavigate` внутри модалки переключает на родственника.
|
||||
4. **Редактирование**: `PersonModal`/`App` → `api.create/update/remove` →
|
||||
`POST/PUT/DELETE /api/persons` с `requireRole(admin,editor)` → `db/pool.js` → Postgres.
|
||||
5. **Экспорт/импорт**: UI → `api.exportJson()/importJson()` → `routes/io.js`
|
||||
(сериализация JSON/CSV/GEDCOM либо запись импорта под ролью editor+).
|
||||
|
||||
## Cross-service links
|
||||
|
||||
Прямых runtime-вызовов к другим нашим сервисам **нет**. Единственная внешняя ссылка —
|
||||
исходный git-репозиторий в README: `git1.servaki.online/german/Heritage.git`
|
||||
(поддомен `*.servaki.online`, git-хостинг инфраструктуры). Коммит-история упоминает
|
||||
деплой-хост `vm-mts1` (сервер публикации фронта). Внешних API-интеграций
|
||||
(finik/gate/ru*/de и т.п.) не обнаружено.
|
||||
|
||||
## Тех-долг
|
||||
|
||||
*Все пункты — предположение (эвристика grep / отсутствие входящих ссылок); точность — через codebase-memory-mcp.*
|
||||
|
||||
- **`design/` (image-slot.js ~32 КБ, support.js ~60 КБ, Heritage Landing.dc.html)** —
|
||||
исходный макет конструктора `x-dc`; не импортируется ни фронтом, ни сборкой →
|
||||
кандидат в мёртвый код (артефакт дизайна). *предположение.*
|
||||
- **`Heritage проекта дизайн.zip` (137 КБ) в корне** — бинарный артефакт в репозитории,
|
||||
не используется кодом. *предположение — кандидат на вынос из git.*
|
||||
- **`backend/src/db/migrate.js`** — есть npm-скрипт `migrate`, но docker применяет
|
||||
`db/schema.sql`+`seed.sql` напрямую через initdb; в рантайме миграция не вызывается →
|
||||
возможный дубль пути инициализации БД. *предположение.*
|
||||
- **Дубль статики landing/preview vs React-приложение** — `landing/index.html` и
|
||||
`preview/index.html` реализуют функционал автономно (дерево, темы, импорт/экспорт)
|
||||
параллельно с полноценным React-фронтом → потенциальное расхождение/дублирование логики.
|
||||
*предположение.*
|
||||
- **`design/screens/01..04-landing.png`** — 4 png одинакового размера (21670 б),
|
||||
вероятно дубликаты-заглушки. *предположение.*
|
||||
- **JWT_SECRET / пароли по умолчанию** в docker-compose (`please_change_this_secret`,
|
||||
demo `password`) — не тех-долг архитектуры, но отметка для безопасности.
|
||||
|
||||
## TODO для Лилии (codebase-memory-mcp)
|
||||
|
||||
- Построить **точный call-graph** frontend↔backend: сопоставить методы `api.*`
|
||||
(client.ts) с конкретными обработчиками роутов и SQL в `db/pool.js`.
|
||||
- Подтвердить/опровергнуть **dead-code**: реально ли `design/*`, `.zip`,
|
||||
`db/migrate.js` без входящих ссылок; проверить импорты в `preview/landing`.
|
||||
- Уточнить **cross-service**: подтвердить, что нет сетевых вызовов к другим сервисам
|
||||
инфраструктуры; зафиксировать деплой-таргет `vm-mts1` и `git1.servaki.online`.
|
||||
- Разобрать **дубль логики** React-приложение vs `preview/index.html` — единый источник истины.
|
||||
- Снять **снапшот graph.db.zst** по финальному дереву модулей и связей для инкрементальных обновлений.
|
||||
- Зафиксировать схему БД (`db/schema.sql`, 118 строк) как узлы данных в графе памяти.
|
||||
-1
Submodule KPgenerator deleted from 28a313742c
@@ -0,0 +1,119 @@
|
||||
# KPgenerator
|
||||
|
||||
## Назначение
|
||||
Генератор коммерческих предложений (КП) для МПО-Информ / servaki. Реализован **не как обычное приложение, а как набор n8n-воркфлоу** (`http://192.168.1.158:5678`, доступ через finik). Репозиторий хранит **исходники Code-нод n8n** (файлы `build_*.js` / `prep_*.js`), shell-воркеры на finik, парсер прайсов и документацию.
|
||||
|
||||
Возможности: чат-страница для сборки КП → запись в Postgres (таблица `quotes`), HTML-рендер КП с печатью, генерация PDF (wkhtmltopdf) в MinIO, история/поиск по КП, ИИ-подбор шаблона (Ollama qwen2.5:1.5b с откатом на regex-правила), прайс-лист (`price_list`, импорт/поиск), отправка КП в Telegram (sendDocument) и голосовые комментарии (Voicebox TTS → sendVoice). Секреты вырезаны (хранятся на Я.Диске).
|
||||
|
||||
- **Язык:** JavaScript (тела n8n Code-нод) + Bash-воркеры + Python (парсер прайсов).
|
||||
- **LOC (исходники):** ~731 (JS ≈ 542, Bash ≈ 91, Python ≈ 78). Плюс не-код артефакты: README (~500 стр.), HTML-снапшот базы знаний, дубли zip.
|
||||
- **Ключевые ID:** воркфлоу «KP Dialog» `JT6mVXd7LV8Dmuog`, «Price List API» `mxPgqVNbxALGrMYx`, «KP CRUD» `kpgencrud01`; Postgres cred `kpgenpg0001`.
|
||||
|
||||
## Архитектура
|
||||
```mermaid
|
||||
graph TD
|
||||
subgraph Client["Браузер / чат kp.servaki.online"]
|
||||
PAGE["prep_page.js — SPA-чат + Telegram-логин"]
|
||||
VIEW["build_view.js — HTML/PDF рендер КП"]
|
||||
end
|
||||
subgraph N8N["n8n .158 — воркфлоу KP Dialog / Price API"]
|
||||
CREATE["prep_create.js — создать КП"]
|
||||
HIST["prep_history.js — история/поиск"]
|
||||
TPL["build_templates.js — шаблоны КП"]
|
||||
AI["build_ai.js — ИИ-подбор шаблона"]
|
||||
SETPDF["prep_setpdf.js — запись pdf_url"]
|
||||
TG["build_tg.js / prep_tg.js — отправка в Telegram"]
|
||||
TGAUTH["build_tgauth.js — проверка Telegram-подписи"]
|
||||
VENQ["prep_voice_enq.js — очередь голоса"]
|
||||
VPEND["prep_voice_pending.js — выдача задач воркеру"]
|
||||
VDONE["prep_voice_done.js — отметка готово"]
|
||||
end
|
||||
subgraph DB["Postgres (.158)"]
|
||||
QUOTES[("quotes")]
|
||||
PRICE[("price_list")]
|
||||
VQ[("tg_voice_queue")]
|
||||
end
|
||||
subgraph Workers["finik — cron-воркеры"]
|
||||
PDFSH["kp-pdf.sh — wkhtmltopdf → MinIO"]
|
||||
VOICESH["kp-voice.sh — TTS → MinIO → sendVoice"]
|
||||
end
|
||||
IMP["catalog-source/import_prices.py — парсер xlsx"]
|
||||
MINIO["MinIO aimedia / s3.servaki.online"]
|
||||
OLLAMA["Ollama .158:11434"]
|
||||
VOICEBOX["Voicebox 89.125.89.16:5501"]
|
||||
TGAPI["api.telegram.org @servaki_online_bot"]
|
||||
|
||||
PAGE --> CREATE --> QUOTES
|
||||
PAGE --> HIST --> QUOTES
|
||||
PAGE --> TPL
|
||||
PAGE --> AI --> OLLAMA
|
||||
PAGE --> VIEW
|
||||
PAGE --> TGAUTH --> TGAPI
|
||||
VIEW --> TG --> TGAPI
|
||||
VIEW --> VENQ --> VQ
|
||||
IMP --> PRICE
|
||||
PDFSH --> VIEW
|
||||
PDFSH --> MINIO
|
||||
PDFSH --> SETPDF --> QUOTES
|
||||
VOICESH --> VPEND --> VQ
|
||||
VOICESH --> VOICEBOX
|
||||
VOICESH --> MINIO
|
||||
VOICESH --> TGAPI
|
||||
VOICESH --> VDONE --> VQ
|
||||
```
|
||||
|
||||
## Entry-points / маршруты
|
||||
База: `http://192.168.1.158:5678/webhook`. Price-эндпоинты защищены заголовком `X-API-Key` (иначе 403).
|
||||
|
||||
| Метод | Путь | Исходник | Назначение |
|
||||
|-------|------|----------|-----------|
|
||||
| GET | `/webhook/kp-chat` | prep_page.js | Главная SPA-страница чата + Telegram-логин |
|
||||
| POST | `/webhook/kp-chat/create` | prep_create.js | Создать КП (INSERT в `quotes`) |
|
||||
| GET | `/webhook/kp-chat/view?id=&pdf=` | build_view.js | HTML/PDF-рендер КП (`?pdf=1` — режим для wkhtmltopdf) |
|
||||
| GET | `/webhook/kp-chat/history?q=` | prep_history.js | История/поиск по `quotes` (ILIKE, LIMIT 50) |
|
||||
| — | (templates) | build_templates.js | Каталог шаблонов КП |
|
||||
| POST | `/webhook/kp-chat/ai` | build_ai.js | ИИ-подбор шаблона (Ollama + откат на правила) |
|
||||
| POST | `/webhook/kp-chat/setpdf` | prep_setpdf.js | UPDATE `quotes.pdf_url` (только эта колонка) |
|
||||
| POST | `/webhook/kp-chat/telegram` | build_tg.js / prep_tg.js | sendDocument/sendMessage КП в Telegram |
|
||||
| POST | `/webhook/kp-chat/tg-auth` | build_tgauth.js | Проверка Telegram-подписи (чистый JS SHA-256/HMAC) |
|
||||
| POST | `/webhook/kp-chat/voice` | prep_voice_enq.js | Enqueue голосового комментария (`tg_voice_queue`) |
|
||||
| GET | `/webhook/kp-chat/voice-pending?key=` | prep_voice_pending.js | Выдача задач воркеру (key-protected) |
|
||||
| POST | `/webhook/kp-chat/voice-done` | prep_voice_done.js | Отметка задачи выполненной |
|
||||
| GET | `/webhook/kp` | (n8n нода) | Список КП (используется kp-pdf.sh) |
|
||||
| GET | `/webhook/price/init` | (Price API) | Создать таблицу `price_list` (идемпотентно) |
|
||||
| POST | `/webhook/price/import` | (Price API) | UPSERT позиций прайса |
|
||||
| GET | `/webhook/price/search?q=&category=` | (Price API) | Поиск позиций (LIMIT 50) |
|
||||
| PUT | `/api/v1/workflows/JT6mVXd7LV8Dmuog` | n8n API | Деплой/откат воркфлоу из бэкапа |
|
||||
|
||||
## Ключевые цепочки вызовов
|
||||
1. **Ручная сборка КП:** `/kp-chat` (prep_page) → правка позиций → `POST /kp-chat/create` (prep_create → INSERT `quotes`) → `GET /kp-chat/view?id=` (build_view) → кнопка «Печать».
|
||||
2. **PDF-пайплайн (cron */5 на finik):** kp-pdf.sh берёт `GET /webhook/kp` → для КП без pdf_url `wkhtmltopdf '<view>?pdf=1'` → `mc cp` в MinIO `aimedia/kp/` → `POST /kp-chat/setpdf {id,pdf_url}` → публичная ссылка `s3.servaki.online:8443/aimedia/kp/...`.
|
||||
3. **ИИ-подбор:** `POST /kp-chat/ai {text}` (build_ai) → regex-правила (база) + попытка Ollama `qwen2.5:1.5b` на `.158:11434` (извлекает объект) → при таймауте/ошибке автооткат на правила → загрузка шаблона в чат.
|
||||
4. **Отправка в Telegram:** кнопка «В Telegram» (build_view) → `POST /kp-chat/telegram {id,chat_id}` (build_tg) → sendDocument PDF из MinIO через @servaki_online_bot (chat_id из Telegram-логина, tg-auth → build_tgauth).
|
||||
5. **Голосовой комментарий (cron * на finik):** кнопка «Голосом» → `POST /kp-chat/voice` (enq → `tg_voice_queue`) → kp-voice.sh: `GET /voice-pending?key=` → Voicebox TTS (89.125.89.16) → `mc cp` opus в MinIO → sendVoice по URL → `POST /voice-done`.
|
||||
6. **Импорт прайса:** `catalog-source/import_prices.py` парсит `.xlsx` (openpyxl) → `_catalog_import.json` → `POST /webhook/price/import` (через finik).
|
||||
|
||||
## Тех-долг
|
||||
_Пометка: всё ниже — предположение по грепу/структуре; точность — через codebase-memory-mcp._
|
||||
- **Дубли-артефакты (dead):** `zi2jSxII` (56622 б = байт-в-байт `kpgen-full.zip`) и `ziB7i0OA` (55738 б = `kpgen-full-project.zip`) — безымянные копии архивов, кандидаты на удаление. Плюс три zip (`KP_Generator_MPOall.zip`, `kpgen-full.zip`, `kpgen-full-project.zip`) — снапшоты, не участвуют в рантайме.
|
||||
- **Не-код в репо:** `KP-knowledge-base-2026-06-27.html` — статический снапшот базы знаний (документация, не исполняется).
|
||||
- **`build_templates.js`** — не найдено явного webhook-роута в коде/README (шаблоны, вероятно, отдаются из prep_page или отдельной ноды); проверить, живой ли (ПРЕДПОЛОЖЕНИЕ).
|
||||
- **Токены/секреты** зашиты в `build_tg.js` (санитизированы в Gitea) — риск рассинхрона с Я.Диском.
|
||||
- **Хрупкость деплоя:** правка нод n8n только base64/quoted-heredoc (bash раскрывает `${...}`/`$json`); нет CI — откат вручную через `PUT /api/v1/workflows`.
|
||||
- **Общий прод-бот** @servaki_online_bot делится с ТИНКО-парсером на Proxmox — трогать webhook/getUpdates нельзя (жёсткая внешняя связанность).
|
||||
|
||||
## Cross-service links
|
||||
- **finik** — шлюз к n8n `.158`, хост cron-воркеров (kp-pdf.sh, kp-voice.sh), Caddy для публичных ссылок (kp-pdf.sh, kp-voice.sh, import_prices.py, README).
|
||||
- **vm-mts / .158** — `192.168.1.158`: n8n :5678, Postgres, Ollama :11434 (build_ai.js, kp-pdf.sh, kp-voice.sh).
|
||||
- **s3.servaki.online / MinIO aimedia** — хранилище PDF и voice-ogg (kp-pdf.sh, kp-voice.sh).
|
||||
- **kp.servaki.online** — домен чата (Telegram `/setdomain`).
|
||||
- **Telegram @servaki_online_bot** (id 8142796440) — общий прод-бот, только исходящие (build_tg.js, kp-voice.sh, build_tgauth.js).
|
||||
- **Voicebox/Piper** `89.125.89.16:5501` — TTS (kp-voice.sh).
|
||||
- **Внешние:** Ollama, api.telegram.org, прайсы Wirenboard/ТИНКО. Ссылок на другие наши репо из списка (agent-sync, Heritage, egorin, orbit-bot и т.д.) — **не обнаружено**.
|
||||
|
||||
## TODO для Лилии (codebase-memory-mcp)
|
||||
- **Точный call-graph:** воркфлоу собран из n8n-нод — граф связей восстановлен по README/грепу, а не из JSON воркфлоу. Дообогатить из экспортов `JT6mVXd7LV8Dmuog` / `mxPgqVNbxALGrMYx` (реальные связи WH→Prep→PG→Build→Resp).
|
||||
- **Dead-code:** подтвердить, что `zi2jSxII`/`ziB7i0OA` = дубли zip и удалимы; проверить живость `build_templates.js` (есть ли входящий роут).
|
||||
- **Cross-service:** зафиксировать рёбра KPgenerator → finik / .158 / MinIO / Voicebox / Telegram; свести с картами servaki-infra и orbit-bot (общий бот).
|
||||
- **Секреты:** сверить санитизированные `build_tg.js` / voice-скрипты с полной версией на Я.Диске.
|
||||
- **Снапшот `graph.db.zst`:** сохранить call-graph + маршруты + cross-service рёбра для инкрементального обновления при правке нод.
|
||||
-1
Submodule agent-sync deleted from 0279a432b2
@@ -0,0 +1,89 @@
|
||||
# agent-sync
|
||||
|
||||
## Назначение
|
||||
Транспорт и протокол обмена задачами/статусами/артефактами между агентами инфраструктуры **servaki** через Nextcloud (WebDAV, `n.servaki.online`, папка `/_agents/`). Не замена git (Gitea `git1.servaki.online` — канон кода/спек), а второй слой для крупного/оперативного: сборки, дампы, статусы-хартбиты, файловая очередь inbox/processing/done между агентами (`laptop-agent`, `lilia`/`les`, `claude-agent`).
|
||||
|
||||
Ядро — один переносимый POSIX-скрипт `ncx.sh` (git-bash на ПК + Linux-ВМ), работающий поверх `curl` + WebDAV. Секреты (app-password) хранятся вне git в `~/.servaki-secrets/nextcloud.env`.
|
||||
|
||||
- Основной язык: **POSIX shell (sh)**
|
||||
- Суммарный LOC по коду: **~197** (весь код — `ncx.sh`, 197 строк; остальное — Markdown-доки и `.env.example`)
|
||||
|
||||
## Архитектура
|
||||
Каталогов `src/*` нет — плоский репо. Модули = функции внутри `ncx.sh` (диспетчер `main` → подкоманды → WebDAV-примитивы → утилиты).
|
||||
|
||||
```mermaid
|
||||
graph TD
|
||||
ENV["nextcloud.env<br/>(секреты, вне git)"] --> NCX
|
||||
subgraph ncx.sh
|
||||
MAIN["main() — диспетчер CLI"]
|
||||
MAIN --> INIT[cmd_init]
|
||||
MAIN --> LS[cmd_ls]
|
||||
MAIN --> PUT[cmd_put]
|
||||
MAIN --> GET[cmd_get]
|
||||
MAIN --> MKDIR[cmd_mkdir]
|
||||
MAIN --> SEND[cmd_send_task]
|
||||
MAIN --> CLAIM[cmd_claim]
|
||||
MAIN --> DONE[cmd_done]
|
||||
MAIN --> STATUS[cmd_status]
|
||||
MAIN --> SELF[cmd_selftest]
|
||||
|
||||
NEED["_need_creds()<br/>DAV/ROOT URL"]
|
||||
CURL["_curl() — curl -K - (stdin auth)"]
|
||||
SHA["_sha256()"]
|
||||
MKCOL["_mkcol / _mkdirp (MKCOL)"]
|
||||
EXISTS["_exists (PROPFIND)"]
|
||||
MOVE["_move_noover (MOVE Overwrite:F)"]
|
||||
|
||||
INIT --> NEED --> CURL
|
||||
SEND --> PUT
|
||||
PUT --> SHA
|
||||
PUT --> MKCOL
|
||||
GET --> EXISTS
|
||||
GET --> SHA
|
||||
CLAIM --> LS
|
||||
CLAIM --> MOVE
|
||||
CLAIM --> PUT
|
||||
DONE --> PUT
|
||||
STATUS --> PUT
|
||||
end
|
||||
NCX[ncx.sh] -->|WebDAV/HTTPS| NC["Nextcloud n.servaki.online<br/>/_agents/"]
|
||||
```
|
||||
|
||||
## Entry-points / маршруты
|
||||
HTTP-сервера/роутов нет — это **WebDAV-клиент** (исходящие вызовы к Nextcloud). Публичный интерфейс — CLI-подкоманды. Все ходят через `_curl` (`curl --fail-with-body -K -`) к `NC_BASE/remote.php/dav/files/<user>/_agents/...`.
|
||||
|
||||
| Команда | Функция | WebDAV-метод(ы) | Назначение |
|
||||
|---|---|---|---|
|
||||
| `ncx init` | cmd_init | MKCOL | создать структуру `_agents/` под своего агента |
|
||||
| `ncx ls <path>` | cmd_ls | PROPFIND Depth:1 | листинг каталога |
|
||||
| `ncx put <local> <remote>` | cmd_put | PUT (+GET верификация) | залить файл + sha256-сайдкар, сверить целостность |
|
||||
| `ncx get <remote> <local>` | cmd_get | GET, PROPFIND | скачать + сверить sha256 |
|
||||
| `ncx mkdir <path>` | cmd_mkdir | MKCOL | создать каталог рекурсивно |
|
||||
| `ncx send-task <to> <local.md>` | cmd_send_task | PUT | положить задачу в `tasks/<to>/inbox` |
|
||||
| `ncx claim [agent]` | cmd_claim | MOVE Overwrite:F | атомарно забрать 1 задачу inbox→processing |
|
||||
| `ncx done <task> [result]` | cmd_done | PUT, DELETE | processing→done + результат + аудит |
|
||||
| `ncx status <local.md>` | cmd_status | PUT | опубликовать хартбит `status/<agent>-status.md` |
|
||||
| `ncx selftest` | cmd_selftest | — (оффлайн) | проверка окружения без сети |
|
||||
|
||||
## Ключевые цепочки вызовов
|
||||
1. **Публикация файла (`put`)**: `cmd_put` → `_sha256` (локальная сумма) → `_mkdirp`(MKCOL) → `_curl -T` (PUT тела) → PUT сайдкара `.sha256` → скачать назад в tmp → сверить sha256 → `_die` при расхождении. Гарантия целостности больших бинарей.
|
||||
2. **Отправка задачи (`send-task`)**: `cmd_send_task` → `_mkdirp tasks/<to>/inbox` → `cmd_put` (тело задачи с YAML-шапкой в inbox агента-получателя).
|
||||
3. **Атомарный захват (`claim`)**: `cmd_claim` → `cmd_ls inbox` → фильтр `.md` → цикл `_move_noover` (MOVE inbox→processing, `Overwrite: F`); код `201`=захвачено (exactly-once), `412`=уже занято → аудит-маркер в `audit/<agent>/` → GET тела в `./_ncx-work/`. Первый забравший выигрывает, гонок нет.
|
||||
4. **Завершение (`done`)**: `cmd_done` → дописать `result/done_by/done_at` в локальный файл → `cmd_put` в `done/` → `DELETE` из `processing/` → аудит-маркер.
|
||||
5. **Хартбит (`status`)**: `cmd_status` → `cmd_put` в `status/<agent>-status.md` (single-writer на файл → без конфликтов синка).
|
||||
|
||||
## Тех-долг
|
||||
_Ниже — предположения по эвристике (греп/чтение одного файла). Точность — через codebase-memory-mcp._
|
||||
|
||||
- **Dead-code кандидаты:** явных не найдено — все `_*`-примитивы и `cmd_*` достижимы из `main()`; `_exists` используется в `cmd_get`, `_move_noover` — в `cmd_claim`. _(предположение)_
|
||||
- **Дубли/расхождение доков:** структура `/_agents/` описана дважды и **по-разному**: `README.md`/`ncx.sh` = `inbox|processing|done` + `audit/`, а `AGENT-SYNC-NEXTCLOUD.md` = только `inbox|done` + `shared-memory/`. Второй документ помечен как «предложение схемы» и частично устарел относительно кода. _(предположение)_
|
||||
- **Хрупкая логика аудита** в `cmd_claim`: fallback между `/tmp/ncx-audit.$$` и `./.ncx-audit.$$` через двойную проверку `-f` — легко рассинхронизировать; кандидат на упрощение. _(предположение)_
|
||||
- **`cmd_claim` в pipe-подоболочке** (`... | while read`): `return 0` выходит из подоболочки, не из функции — семантика «одна задача за вызов» может вести себя неожиданно при нескольких задачах. _(предположение)_
|
||||
- **`shared-memory/`** упомянут в доке, но `cmd_init` его не создаёт — рассинхрон спеки и кода. _(предположение)_
|
||||
|
||||
## TODO для Лилии (codebase-memory-mcp)
|
||||
- Построить **точный call-graph** `ncx.sh` (функция→функция, включая косвенные вызовы через `main` case).
|
||||
- Подтвердить/опровергнуть **dead-code** (реальная достижимость `_exists`, аудит-fallback, поведение `return` в subshell `cmd_claim`).
|
||||
- **Cross-service links** — зафиксировать связи: `n.servaki.online` (85.208.87.14, Nextcloud 33.0.5), `git1.servaki.online` (Gitea, репо `german/agent-sync`), домены `*.servaki.online`; агенты-контрагенты `laptop-agent` / `lilia`(`les`) / `claude-agent`; упоминание репо `cascade` (git-канон). Проверить реальные обращения из других наших репо к `ncx`/`_agents/`.
|
||||
- Снять **снапшот graph.db.zst** и связать с этим MAP.md.
|
||||
- Сверить расхождение схемы `/_agents/` между `README.md` и `AGENT-SYNC-NEXTCLOUD.md`, пометить актуальную.
|
||||
-1
Submodule agro-panel deleted from 18cbced679
@@ -0,0 +1,100 @@
|
||||
# agro-panel
|
||||
|
||||
## Назначение
|
||||
|
||||
Веб-панель управления распределёнными объектами винодельни **Темпельхоф** (КФХ Битаров, регион КМВ). Single-file HTML-панель с тёмной адаптивной темой и встроенной SIP-телефонией (WebRTC → MikoPBX). Покрывает **9 локаций · 38 световых каналов · 13 ворот/калиток**: датчики (температура, влажность, освещённость), управление освещением (вкл/выкл, диммер, режимы «ручной / рассвет-закат / по датчику»), управление воротами (удержание 2 сек), камеры (заглушки), sparkline-графики на Canvas, ролевой доступ (operator / admin / system).
|
||||
|
||||
Данные в текущей версии **демо/симуляция** (генерируются в JS), реального бэкенда IoT ещё нет — планируется MQTT WebSocket bridge к Wiren Board 8.5 через AmneziaWG VPN. Репозиторий также содержит инфраструктурный слой: nginx-конфиг, скрипт деплоя на VPS и read-only скрипт бэкапа АТС MikoPBX в Gitea.
|
||||
|
||||
- **Основной язык:** HTML/Vanilla JS (single-file). Инфра — Bash, Nginx conf.
|
||||
- **LOC (исходники):** ~618 (agro-panel-v5.html 252 + v4-original 107 + backup-atc-to-gitea.sh 180 + deploy-panel.sh 79). Весь пакет с конфигом/доками ~1171.
|
||||
- **Стек:** Vanilla JS + Canvas, [SIP.js v0.21.2](https://sipjs.com/) (CDN jsdelivr/unpkg), WebRTC, Nginx + Let's Encrypt, MikoPBX (Asterisk 22), Gitea (git1.servaki.online).
|
||||
|
||||
## Архитектура
|
||||
|
||||
```mermaid
|
||||
graph TD
|
||||
subgraph "agro-panel-v5.html (single-file)"
|
||||
CORE["CORE: LL/St/Dm/aM<br/>состояние + симуляция данных"]
|
||||
AUTH["Auth + RBAC<br/>Us / Pm (operator/admin/system)"]
|
||||
NAV["Навигация<br/>rBN / rTSW / rSB"]
|
||||
SUM["rSum — сводка<br/>погода, тревоги, локации"]
|
||||
LOC["rLoc — локация<br/>датчики/свет/ворота/камеры"]
|
||||
ADM["rAdm — админ<br/>сессия, доступ оператора"]
|
||||
SIP["SIP PHONE MODULE<br/>UserAgent/Registerer/Inviter"]
|
||||
SPK["spk() — Canvas sparkline"]
|
||||
end
|
||||
V4["agro-panel-v4-original.html<br/>(прежняя версия, дубль-предок)"]
|
||||
NGINX["nginx-panel.tempelhoff.ru.conf"]
|
||||
DEPLOY["deploy-panel.sh"]
|
||||
BACKUP["backup-atc-to-gitea.sh"]
|
||||
|
||||
AUTH --> NAV --> CORE
|
||||
CORE --> SUM & LOC & ADM
|
||||
SUM --> SPK
|
||||
LOC --> SPK
|
||||
SIP -->|"wss://pbx1.tempelhoff.ru:8089/ws"| PBX["MikoPBX / Asterisk"]
|
||||
DEPLOY -->|scp+certbot| NGINX
|
||||
DEPLOY -->|"index.html"| WWW["/var/www/panel.tempelhoff.ru"]
|
||||
NGINX -->|serve| WWW
|
||||
BACKUP -->|"git push"| GITEA["git1.servaki.online<br/>german/milan-ats-bitarovy"]
|
||||
BACKUP -->|read-only dump| PBX
|
||||
|
||||
V4 -.устарел.-> CORE
|
||||
```
|
||||
|
||||
## Entry-points / маршруты
|
||||
|
||||
Полноценных HTTP-маршрутов сервера нет (статичный HTML). «Маршруты» — это Nginx-локации, внешние WS/CDN-эндпоинты и внутренняя SPA-навигация.
|
||||
|
||||
| Тип | Путь / эндпоинт | Где | Назначение |
|
||||
|---|---|---|---|
|
||||
| Nginx | `listen 80` → 301 | nginx-panel...conf:7 | HTTP→HTTPS редирект |
|
||||
| Nginx | `listen 443 ssl http2` | nginx-panel...conf:16 | TLS-хост panel.tempelhoff.ru |
|
||||
| Nginx | `location = /` | :53 | отдача index.html |
|
||||
| Nginx | `location /` (SPA) | :58 | статика панели |
|
||||
| Nginx | `location ~* \.(ico\|svg\|woff2?)$` | :47 | кэш ассетов |
|
||||
| Nginx | `location /mqtt` → `proxy_pass 127.0.0.1:9001` | :64 (закомм.) | будущий MQTT WS bridge |
|
||||
| Nginx | `location /cam/` → `proxy_pass 192.168.101.50` | :74 (закомм.) | будущий проксинг камер |
|
||||
| WS (исх.) | `wss://pbx1.tempelhoff.ru:8089/ws` | v5.html:209 | SIP-транспорт к MikoPBX |
|
||||
| CDN (исх.) | `cdn.jsdelivr.net/npm/sip.js@0.21.2` | v5.html:178,248 | загрузка SIP.js (fallback unpkg@0.20.0) |
|
||||
| SPA-nav | `go(id)` → hq/winery/pond/vineyard/garage/cold/bottling/geo/dept2/_admin | v5.html:195-197 | переключение локаций |
|
||||
| SIP call | `sip:{100}@pbx1.tempelhoff.ru` | v5.html:212,238 | исходящий звонок (Inviter) |
|
||||
|
||||
## Ключевые цепочки вызовов
|
||||
|
||||
1. **Загрузка и вход:** старт → генерация симуляции состояния (`LL`, `St`, `Dm`, `sD`, `wD`) → форма логина (`Us`: operator/admin/system) → RBAC-фильтр разделов (`Pm.operator.sections`) → `rBN`/`rTSW`/`rSB` рендер навигации → `rSum` (сводка).
|
||||
2. **Управление светом:** пользователь на карточке локации (`rLoc`) тапает тумблер → `doT()` инвертирует `St[k]` → `uLM()` обновляет метку → `logE()` в журнал + `navigator.vibrate`; диммер тянется мышью/тачем → `setD()` пишет `Dm[k]`; кнопки режима пишут `aM[k]` (manual/timer/lux).
|
||||
3. **Управление воротами:** `mousedown/touchstart` → `gS(k)` запускает удержание 2 сек с прогресс-баром → по достижении «ОТПРАВЛЕНО» → фаза «В ДВИЖЕНИИ 10 сек»; `mouseup/leave` → `gC(k)` отмена.
|
||||
4. **SIP-звонок:** авто-`initSIP()` (загрузка SIP.js с CDN) → `startUA()` создаёт `UserAgent` (WS `pbx1.tempelhoff.ru:8089`) → `onConnect` → `doRegister()` (`Registerer`, ext 100) → `doCall(number)` создаёт `Inviter` → состояния Establishing/Established (таймер + `remoteAudio.srcObject`) → `doHangup()` (`cancel`/`bye`/`dispose`).
|
||||
5. **Деплой + бэкап АТС:** `deploy-panel.sh` (scp → /var/www, nginx -t, reload, certbot) публикует панель; `backup-atc-to-gitea.sh` по cron 03:15 читает `/etc/asterisk/*.conf` + дамп `mikopbx.db` (маскирует пароли `***REDACTED***`) → `git push` в приватный Gitea `german/milan-ats-bitarovy`.
|
||||
|
||||
## Тех-долг
|
||||
|
||||
Пометка: всё ниже — **предположение, точность — через codebase-memory-mcp**.
|
||||
|
||||
- **Дубль версий (предположение):** `agro-panel-v4-original.html` (107 строк) — предшественник `agro-panel-v5.html` (252). Судя по README, актуальна только v5; v4 — кандидат в архив/удаление. Прямых входящих ссылок на v4 в репо нет.
|
||||
- **Dead-code / неиспользуемые маршруты (предположение):** закомментированные Nginx-локации `/mqtt` и `/cam/` — планы, не реализованы. MQTT WS bridge и проксинг камер отсутствуют в JS — камеры отрисованы заглушками (`camph 📹`, кнопка «Снимок» без обработчика).
|
||||
- **Захардкоженные секреты (предположение, безопасность):** `SIP_PASS='QURxVm9paVV3Slk9'` (base64) и учётки `Us` (operator/1234, admin/admin, system/system) зашиты прямо в клиентский HTML — фронт без бэкенда, любой с доступом к панели видит их. README-DEPLOY уже отмечает TODO про basic-auth/OAuth2-proxy.
|
||||
- **Нет реального бэкенда IoT (предположение):** данные датчиков/свет/ворота — JS-симуляция; действия не уходят на устройства. Cross-check актуальности — через codebase-memory-mcp.
|
||||
- **`PROMPT-PANEL.md` / `PROMPT-SIP.md`:** промпты-спеки для генерации, не код — не влияют на рантайм.
|
||||
|
||||
## Cross-service links
|
||||
|
||||
Упоминания других наших сервисов/доменов/репо:
|
||||
|
||||
- **git1.servaki.online** (Gitea, инфра `servaki-infra`) — цель бэкапа, репо `german/milan-ats-bitarovy`. — backup-atc-to-gitea.sh:18,23,30
|
||||
- **pbx1.tempelhoff.ru:8089** / **MikoPBX (Asterisk 22)** — SIP-бэкенд, вероятно репо **`tempelhoff-pbx`**. — v5.html:209,213; backup-atc-to-gitea.sh (весь)
|
||||
- **panel.tempelhoff.ru** / **85.198.84.96** (Milan АТС Битаровы, Beget Cloud) — хост деплоя. — deploy/nginx/README
|
||||
- **servaki.online** — головной бренд/портал (ссылки в сайдбаре и футере). — v5.html:197,202; README
|
||||
- **КФХ Битаров** → вероятно репо **`user-bitarov`**. — README-DEPLOY:67; backup-atc-to-gitea.sh:18,30
|
||||
- **Hikvision** (камеры) → вероятно **`mcp-hikvision`**. — PROMPT-PANEL.md:70; PROMPT-SIP.md:198
|
||||
- **Wiren Board 8.5 + AmneziaWG** (IoT/VPN, планово) — упомянуты в README, кода нет.
|
||||
|
||||
## TODO для Лилии (codebase-memory-mcp)
|
||||
|
||||
- **Точный call-graph:** распарсить `agro-panel-v5.html` inline-JS (функции `go/rSum/rLoc/rAdm/gS/gC/doT/setD/uLM/spk/initSIP/startUA/doRegister/doCall/doHangup/logE`) — построить точный граф вызовов; сейчас функции однобуквенно-минифицированы, ручной разбор частичен.
|
||||
- **Dead-code верификация:** подтвердить/опровергнуть статус `agro-panel-v4-original.html` (архив?), заглушек камер и закомментированных Nginx-локаций `/mqtt`, `/cam/`.
|
||||
- **Cross-service граф:** связать с реальными репо `tempelhoff-pbx`, `user-bitarov`, `mcp-hikvision`, `servaki-infra` (Gitea) и подтвердить, что панель — сателлит связки Битаров/Темпельхоф; уточнить отношение к `smartlight-panel` (похожий домен — управление светом).
|
||||
- **Секреты:** зафиксировать захардкоженные креды (SIP_PASS, Us) как security-долг для ротации и выноса в бэкенд.
|
||||
- **Снапшот graph.db.zst:** сделать снапшот для быстрого повторного анализа single-file панели без ре-парсинга минифицированного JS.
|
||||
-1
Submodule banya-bot deleted from 067408d03b
@@ -0,0 +1,96 @@
|
||||
# banya-bot
|
||||
|
||||
## Назначение
|
||||
|
||||
Telegram-бот «Банный бот» — планировщик мероприятий (баня / день рождения / ДР в бане) с обратным отсчётом, прогрессбаром, прогнозом погоды (OpenWeatherMap), ежедневными напоминаниями, календарём/выбором часа inline-кнопками и групповым голосованием за сброс таймера. Плюс Telegram Web App (HTML) с тем же календарём и панорамой Бештау.
|
||||
|
||||
Прод: контейнер `banya-bot` на fastvps `46.36.216.95` (миграция с Cloud.ru из-за блокировки Telegram API в РФ). Web App — nginx+Let's Encrypt на `https://banya.webapp.servaki.online:8443/`. Данные — `/data/{timers,users}.json`. Исходники — Gitea `git1.servaki.online/german/banya-bot`.
|
||||
|
||||
- Язык: JavaScript (Node.js 20, CommonJS), зависимость `node-telegram-bot-api@0.66`, polling. Web App — статический HTML/CSS/JS.
|
||||
- LOC (wc -l по исходникам): ~4837 суммарно — JS 1678 (`index.js` 460, `status-patch.js` 150, два идентичных `banya-bot-updated*.js` по 534), HTML 3159 (6 версий webapp, из них `index.html` == `banya-webapp-v3.html`).
|
||||
- Прод-код: **`index.js`** (v2.3). Остальные JS/HTML — прототипы и версии.
|
||||
|
||||
## Архитектура
|
||||
|
||||
```mermaid
|
||||
graph TD
|
||||
TG[Telegram API] -->|polling| BOT[index.js: TelegramBot]
|
||||
BOT --> CMD[Команды: /start /banya /webapp /admin /myid]
|
||||
BOT --> MSG[on message: ввод города]
|
||||
BOT --> CB[on callback_query: главный диспетчер]
|
||||
|
||||
CB --> MENU[sendMainMenu — фото Бештау + выбор события]
|
||||
CB --> CAL[buildCalendar / buildHourPicker]
|
||||
CB --> CITY[buildCityPicker / buildNotifyTimePicker]
|
||||
CB --> VOTE[Голосование: startVote / doReset]
|
||||
CB --> ADM[sendAdminPanel]
|
||||
|
||||
MENU --> EVENTS[EVENTS: banya/birthday/both]
|
||||
CAL --> TIMER[startTimer + startNotifyChecker]
|
||||
CITY --> TIMER
|
||||
TIMER --> FMT[formatMessage / progressBar]
|
||||
TIMER --> WX[buildWeatherBlock -> fetchJSON]
|
||||
WX --> OWM[OpenWeatherMap API]
|
||||
|
||||
TIMER --> STORE[(timers.json)]
|
||||
BOT --> USERS[(users.json)]
|
||||
|
||||
BOT --> WA[web_app URL]
|
||||
WA --> HTML[banya-webapp*.html / index.html]
|
||||
HTML --> HERO[banya.webapp.servaki.online:8443/beshtau.jpg]
|
||||
|
||||
PATCH[status-patch.js: /status v2.4] -.не подключён.-> BOT
|
||||
```
|
||||
|
||||
## Entry-points / маршруты
|
||||
|
||||
| Тип | Триггер | Файл:строка | Действие |
|
||||
|---|---|---|---|
|
||||
| Команда | `/start` \| `/banya` | index.js:291 | trackUser + sendMainMenu |
|
||||
| Команда | `/start` (отдельный) | index.js:452 | reply-клавиатура «Открыть Web App» |
|
||||
| Команда | `/webapp` | index.js:443 | inline-кнопка Web App |
|
||||
| Команда | `/admin` | index.js:251 | sendAdminPanel (только ADMIN_ID 1113994683) |
|
||||
| Команда | `/myid` | index.js:287 | вернуть user/chat id |
|
||||
| Событие | `on('message')` | index.js:293 | приём названия города (awaitingCity) |
|
||||
| Событие | `on('callback_query')` | index.js:307 | диспетчер: event_*, cal_*, city_*, notify_*, vote_*, reset*, admin_*, force_* |
|
||||
| Команда (не подключена) | `/status` | status-patch.js:64 | статус таймера (simple/деловой) — патч v2.4 |
|
||||
| Событие (не подключено) | `on('callback_query')` | status-patch.js:97 | обработчик формата /status |
|
||||
|
||||
Полноценного HTTP-сервера нет: `express`/`createServer` отсутствуют, Web App отдаётся внешним nginx. Внешние HTTP-вызовы (`https.get`) — только к OpenWeatherMap.
|
||||
|
||||
## Ключевые цепочки вызовов
|
||||
|
||||
1. **Создание таймера**: `/start` → `sendMainMenu` (фото Бештау) → `event_*` → `buildCalendar` → `cal_day_*` → `buildHourPicker` → `cal_hour_*` → `buildCityPicker` → (`city_default`/`city_custom`→on message) → `buildNotifyTimePicker` → `notify_hour_*` → создаётся `timers[chatId]` + `startTimer` (тик 1с, editMessageText) + `startNotifyChecker` (тик 30с).
|
||||
2. **Погода**: `startNotifyChecker`/создание таймера → `buildWeatherBlock(city, targetDate)` → `fetchJSON` к OWM `weather` и `forecast` → эмодзи по коду + подбор ближайшего слота к дате события.
|
||||
3. **Напоминания**: `startNotifyChecker` каждые 30с → пороги `ALERT_THRESHOLDS` (3д/1д/12ч/3ч/1ч) + ежедневное в `notifyHour` → `bot.sendMessage`, дедуп через `sentAlerts` в timers.json.
|
||||
4. **Сброс в группе (голосование)**: `reset`/`reset_menu` → в группе `startVote` (нужно VOTES_REQUIRED=2 «За», таймаут 5 мин) → `vote_yes` набирает кворум → `doReset` (clearInterval, удаление таймера, возврат в меню).
|
||||
5. **Восстановление после рестарта**: старт `index.js` → `loadTimers()` → цикл по `timers`: живые → `startTimer`+`startNotifyChecker`, протухшие удаляются, `saveTimers`.
|
||||
6. **Админка**: `/admin` → `sendAdminPanel` → callbacks `admin_refresh`/`admin_users_all` (editMessageText со статистикой по таймерам и пользователям из users.json).
|
||||
|
||||
## Тех-долг
|
||||
|
||||
Все пункты — **предположение (эвристика grep/diff), точность — через codebase-memory-mcp**:
|
||||
|
||||
- **Дубли-близнецы**: `banya-bot-updated.js` и `banya-bot-updated-with-webapp.js` — байт-в-байт идентичны (diff пустой), оба устаревшие прототипы (`WEBAPP_URL='https://your-domain.com/...'`), не запускаются (`package.json main=index.js`). Кандидаты в dead-code.
|
||||
- **Дубль HTML**: `index.html` == `banya-webapp-v3.html` (diff пустой). Плюс 4 других версии webapp (`banya-webapp.html`, `_1`, `-v2`, `-fix-tail`) — в прод отдаётся один файл. Множество версий → мёртвые.
|
||||
- **`status-patch.js`** — фича `/status` v2.4: ссылается на глобальный `bot`, но нигде не `require`-ится и не склеен с `index.js`; в README числится в TODO. Не подключён → мёртвый до интеграции.
|
||||
- **Дубль ассета**: `beshtau.jpg` в корне и в `assets/beshtau.jpg`; Dockerfile копирует только `assets/` → корневой лишний.
|
||||
- **Дубль доки**: `README.md` и `README.txt`.
|
||||
- **Хардкод-секреты в коде/доках**: `OWM_KEY` в `index.js:8`, Gitea-токен и IP в архивных .md — гигиена (см. README «Срочная гигиена»).
|
||||
- **Разъезд WEBAPP_URL**: `index.js` → `banya.webapp.servaki.online:8443`, а `fastvps-prepare.sh`/план → `banya.servaki.online`.
|
||||
|
||||
## Cross-service links (наши сервисы/домены)
|
||||
|
||||
- `servaki.online` и поддомены: `banya.webapp.servaki.online:8443` (прод Web App), `banya.servaki.online`, `admin.banya.servaki.online` (план админ-панели), `webapp.servaki.online`.
|
||||
- `git1.servaki.online` — Gitea, репо `german/banya-bot` (origin).
|
||||
- fastvps `46.36.216.95` — хост прода (nginx 8443, 3x-ui на 443).
|
||||
- Cloud.ru «NEXTcloud-vm» — прежний хост (источник миграции), Proxmox LXC — упоминается в плане.
|
||||
- Внешние (не наши): Telegram Bot API, OpenWeatherMap API.
|
||||
|
||||
## TODO для Лилии (codebase-memory-mcp)
|
||||
|
||||
- **Точный call-graph**: разобрать диспетчер `on('callback_query')` (index.js:307) по префиксам data — построить рёбра callback→handler; отдельно ветки force_/notify_/city_/cal_/vote_/admin_.
|
||||
- **Dead-code (подтвердить/опровергнуть)**: `banya-bot-updated*.js`, `status-patch.js`, лишние `banya-webapp*.html`, корневой `beshtau.jpg`, `README.txt` — проверить входящие ссылки и историю деплоя; решить, интегрировать ли `/status`.
|
||||
- **Cross-service**: зафиксировать связи с `git1.servaki.online` (Gitea), fastvps `46.36.216.95`, поддоменами `*.servaki.online`; свести реальный WEBAPP_URL vs. план; отметить внешние API (Telegram/OWM).
|
||||
- **Дубли**: подтвердить идентичность файлов хэшами, пометить канонический (`index.js`, `index.html`).
|
||||
- **Снапшот graph.db.zst**: сохранить граф модулей/вызовов и таблицу entry-points для инкрементального обогащения.
|
||||
-1
Submodule cascade deleted from b00cc2cc26
Submodule cascade-de-ru deleted from da60786716
@@ -0,0 +1,75 @@
|
||||
# cascade-de-ru
|
||||
|
||||
## Назначение
|
||||
|
||||
Артефакт-репозиторий (не код) — документация и клиентские QR-коды для **тройного каскада AmneziaWG** с выходом в Германию (DE `91.217.149.209`). Весь интернет-трафик клиента через full-tunnel выходит в немецкий IP.
|
||||
|
||||
Содержимое:
|
||||
- `README.md` (39 строк) — топология, таблица аккаунтов, серверная конфигурация, инструкция импорта в AmneziaVPN.
|
||||
- `casc-de-ru2.png`, `casc-de-ru3.png` — QR-коды клиентских конфигов (`.conf` в репо не закоммичены).
|
||||
|
||||
Основной «язык»: Markdown + бинарные PNG. Исходного кода нет — это операционный конфиг-снапшот инфраструктуры.
|
||||
|
||||
Топология:
|
||||
```
|
||||
Клиент ─AmneziaWG─► [вход RU2 или RU3] ─policy-route─► awg-de ─UDP-релей ru1:39005─► [DE] ─MASQUERADE eth0─► интернет (нем. IP)
|
||||
```
|
||||
|
||||
## Архитектура
|
||||
|
||||
```mermaid
|
||||
graph TD
|
||||
Client[Клиент AmneziaVPN]
|
||||
QR2[casc-de-ru2.png / .conf]
|
||||
QR3[casc-de-ru3.png / .conf]
|
||||
RU2[Вход RU2 87.242.102.17:51827<br/>awg-de2c 10.87.0.1/24]
|
||||
RU3[Вход RU3 45.151.31.222:51828<br/>awg-de3c 10.88.0.1/24]
|
||||
RU1[Транзит RU1 5.188.30.72<br/>UDP-релей :39005 + backbone awg-de]
|
||||
DE[Выход DE 91.217.149.209<br/>MASQUERADE eth0]
|
||||
NET[Интернет / немецкий IP]
|
||||
|
||||
Client -.импорт QR/conf.-> QR2
|
||||
Client -.импорт QR/conf.-> QR3
|
||||
QR2 --> RU2
|
||||
QR3 --> RU3
|
||||
RU2 -->|policy-route table 226| RU1
|
||||
RU3 -->|policy-route table 226| RU1
|
||||
RU1 -->|DNAT :39005 to 443| DE
|
||||
DE --> NET
|
||||
```
|
||||
|
||||
## Entry-points / маршруты
|
||||
|
||||
HTTP-маршрутов нет (не приложение). «Точки входа» — сетевые endpoint'ы каскада.
|
||||
|
||||
| Тип | Endpoint / артефакт | Роль |
|
||||
|-----|--------------------|------|
|
||||
| WG вход | RU2 `87.242.102.17:51827` (iface `awg-de2c`, 10.87.0.0/24) | Приём клиента, аккаунт ru2 |
|
||||
| WG вход | RU3 `45.151.31.222:51828` (iface `awg-de3c`, 10.88.0.0/24) | Приём клиента, аккаунт ru3 |
|
||||
| UDP-релей | RU1 `5.188.30.72:39005` → DNAT `91.217.149.209:443` | Транзит RU2/RU3 → DE |
|
||||
| Egress | DE `91.217.149.209`, MASQUERADE `eth0` | Выход в интернет нем. IP |
|
||||
| Клиентский | `casc-de-ru2.png`, `casc-de-ru3.png` | QR импорта конфигов |
|
||||
| Проверка | `https://1.1.1.1/cdn-cgi/trace` | Валидация egress (`loc=DE`) |
|
||||
|
||||
## Ключевые цепочки вызовов
|
||||
|
||||
1. **Импорт клиента (ru2):** пользователь сканирует `casc-de-ru2.png` в AmneziaVPN → поднимается AmneziaWG-туннель на RU2:51827 → клиент 10.87.0.2/32.
|
||||
2. **Full-tunnel через ru2:** трафик клиента → RU2 `awg-de2c` → policy-route table 226 (`from 10.87.0.0/24 → default dev awg-de`) → MASQUERADE в awg-de.
|
||||
3. **Транзит через ru1:** хоп RU2/RU3 → DE не идёт напрямую (провайдеры режут UDP к DE), поэтому через backbone-туннель до RU1 и UDP-релей `:39005` (DNAT на `91.217.149.209:443`).
|
||||
4. **Egress DE:** пакеты приходят на DE замаскированными в 10.20.0.0/24 → уже существующий NAT в eth0 → выход нем. IP.
|
||||
5. **Ветка ru3:** аналогично сценарию 2-4, но вход RU3:51828, iface `awg-de3c`, подсеть 10.88.0.0/24, клиент 10.88.0.2/32.
|
||||
|
||||
## Тех-долг
|
||||
|
||||
- **Dead-code кандидаты:** отсутствуют — исходного кода/экспортов нет (только README + 2 PNG). *(предположение; точность — через codebase-memory-mcp)*
|
||||
- **Дубли:** ветки ru2 и ru3 почти идентичны (различие лишь в подсети/порту/iface) — потенциальная параметризация конфигов. *(предположение; точность — через codebase-memory-mcp)*
|
||||
- **Не закоммичены `.conf`:** README ссылается на `casc-de-ru2.conf` / `casc-de-ru3.conf`, но в репо только их QR-PNG — источник конфигов вне репозитория (риск рассинхрона). *(предположение)*
|
||||
- **Хардкод чувствительных данных:** IP/порты/обфускация зашиты в артефактах — при ротации требуется ручное обновление QR и README.
|
||||
|
||||
## TODO для Лилии (codebase-memory-mcp)
|
||||
|
||||
- Подтвердить, что репо — чистый артефакт-снапшот без исполняемого кода (нет call-graph как такового).
|
||||
- Cross-service: связать узлы каскада с инфра-репо и узлами: **ru1** (5.188.30.72), **ru2** (87.242.102.17), **ru3** (45.151.31.222), **de** (91.217.149.209), а также **servaki-infra** / **gate** — где описаны systemd-юниты `awg-de2c`/`awg-de3c` и релей `:39005`.
|
||||
- Дообогатить точным dead-code анализом (ожидаемо пусто) и картой дублей ru2/ru3.
|
||||
- Приложить снапшот `graph.db.zst` инфраструктурного слоя (WG-интерфейсы, таблицы маршрутизации 226, MASQUERADE-правила).
|
||||
- Проверить местонахождение исходных `.conf` (вне репо) и зафиксировать связь QR → conf → серверный peer.
|
||||
+105
@@ -0,0 +1,105 @@
|
||||
# cascade
|
||||
|
||||
## Назначение
|
||||
|
||||
Рабочая папка проекта **каскадного VPN** `RU → FI → {NL | DE}` + WireGuard site-to-site слой на 40–50 сотрудников. На 80% это документация/runbook'и (Markdown), на 20% — код management-слоя: node-agent (FastAPI/mTLS), Telegram-боты (aiogram), подписочный endpoint, панель мониторинга mesh, action-API для перезагрузок, скрипты оркестрации mesh и baseline-диагностики. Точка истины по архитектуре — `cascade-vpn-architecture.md`. Секреты в код/память не кладутся.
|
||||
|
||||
- Основной язык: **Python** (16 файлов) + **Shell** (27 файлов) + **JSX/React** (3 файла).
|
||||
- Суммарный LOC по коду (py/js/jsx/sh/sql/bat/ps1): **≈6 261**.
|
||||
- Всего файлов в репо: 224 (большинство — `.md`).
|
||||
|
||||
## Архитектура
|
||||
|
||||
```mermaid
|
||||
graph TD
|
||||
subgraph docs["Документация (runbooks/ knowledge/ deploy/*.md)"]
|
||||
ARCH[cascade-vpn-architecture.md<br/>точка истины]
|
||||
RB[runbooks/ phase-0..5]
|
||||
KN[knowledge/ NODES, MEMORY, loc-*]
|
||||
end
|
||||
|
||||
subgraph mgmt["code/ — management слой"]
|
||||
AGENT[agent.py<br/>FastAPI node-agent :8443]
|
||||
BOTM[code/bot.py<br/>MGMT-бот aiogram]
|
||||
SUB[sub.py<br/>subscription :sub]
|
||||
CADDY[caddy/ Caddyfile mTLS]
|
||||
WG[wg/ конфиги+new_wg_client.sh]
|
||||
end
|
||||
|
||||
subgraph client["bot/ — клиентский бот"]
|
||||
BOTC[bot.py<br/>/start /key /stats /revoke /admin]
|
||||
end
|
||||
|
||||
subgraph panel["deploy/panel-api + mesh-status"]
|
||||
PAPI[panel-api.py<br/>BaseHTTPServer /api/*]
|
||||
PNOT[panel-notifier.py timer]
|
||||
MESHUI[mesh-status/*.jsx<br/>React панели]
|
||||
end
|
||||
|
||||
subgraph ops["deploy/scripts + action-api + ats"]
|
||||
AAPI[action-api.py<br/>/reboot challenge]
|
||||
MESH[mesh.sh + merge-*.py<br/>state-producer, zabbix]
|
||||
ATS[ats-security/ f2b attack-map]
|
||||
end
|
||||
|
||||
ARCH --> mgmt
|
||||
RB --> mgmt
|
||||
BOTM -->|HTTP mTLS| AGENT
|
||||
AGENT --> WG
|
||||
AGENT --> CADDY
|
||||
BOTC -->|выдача ключей| SUB
|
||||
BOTC --> WG
|
||||
PAPI --> MESH
|
||||
MESHUI -->|fetch| PAPI
|
||||
PNOT --> PAPI
|
||||
MESH --> KN
|
||||
AAPI --> AGENT
|
||||
```
|
||||
|
||||
## Entry-points / маршруты
|
||||
|
||||
| Метод | Путь | Файл | Назначение |
|
||||
|---|---|---|---|
|
||||
| GET | `/status` | code/agent.py:46 | метрики + состояние x-ui |
|
||||
| POST | `/xray/restart` | code/agent.py:66 | перезапуск x-ui |
|
||||
| GET | `/cascade/test` | code/agent.py:72 | e2e-тест каскада с ноды |
|
||||
| GET | `/conf/summary` | code/agent.py:94 | обзор XRay-config для сверки |
|
||||
| GET | `/wg/peers` | code/agent.py:120 | MGMT: список peer'ов WG |
|
||||
| POST | `/wg/add_peer` | code/agent.py:144 | MGMT: добавить peer (+QR) |
|
||||
| POST | `/wg/revoke_peer` | code/agent.py:155 | MGMT: удалить peer |
|
||||
| GET | `/wg/office_status` | code/agent.py:180 | MGMT: ping офиса через wg0/wg1 |
|
||||
| GET | `/sub/{token}` | code/sub.py:45 | подписка (subscription URL) |
|
||||
| GET | `/health` | code/sub.py:77 | healthcheck |
|
||||
| GET | `/api/whoami`,`/state`,`/users` | deploy/panel-api/panel-api.py:229-237 | панель: контекст/состояние/юзеры |
|
||||
| POST | `/users` (`/api` prefix) | deploy/panel-api/panel-api.py:252 | панель: мутация юзеров |
|
||||
| GET | `/health` | deploy/action-api/action-api.py:277 | action-API healthcheck |
|
||||
| POST | `/reboot/challenge`,`/reboot` | deploy/action-api/action-api.py:297-302 | защищённая перезагрузка ноды |
|
||||
| TG-cmd | `/start /key /stats /revoke /admin /help` | bot/bot.py:144-260 | клиентский бот выдачи VPN |
|
||||
| TG-cmd | `/status /restart /test /wg_status /wg_add /wg_office` | code/bot.py:78-219 | MGMT-бот (проксирует agent.py) |
|
||||
|
||||
## Ключевые цепочки вызовов
|
||||
|
||||
1. **Выдача клиенту VPN**: TG `/key` (bot/bot.py) → генерит UUID/конфиг → отдаёт subscription-ссылку `sub.servaki.online/sub/{token}` (sub.py) → клиент подтягивает конфиг.
|
||||
2. **Добавление WG-peer**: MGMT-бот `/wg_add` (code/bot.py) → HTTP mTLS через Caddy → `POST /wg/add_peer` (agent.py) → `new_wg_client.sh` генерит ключи → возврат conf+QR.
|
||||
3. **Проверка каскада**: MGMT-бот `/test` → `GET /cascade/test` (agent.py) → outbound-тест RU→FI→exit → отчёт в Telegram.
|
||||
4. **Mesh-мониторинг**: `state-producer.sh`/`mesh.sh` собирают `state.json` → `merge-health.py`/`merge-config.py` мёржат → `panel-api.py /api/state` → React `mesh-status/*.jsx` рендерит + `panel-notifier.py` шлёт алерты.
|
||||
5. **Удалённая перезагрузка ноды**: оператор → `POST /reboot/challenge` → подпись → `POST /reboot` (action-api.py) → систем-reboot ноды.
|
||||
|
||||
## Тех-долг
|
||||
|
||||
_Пометка: всё ниже — **предположение** по эвристике (grep, без реального call-graph). Точность — через codebase-memory-mcp._
|
||||
|
||||
- **Дубли ботов**: `code/bot.py` (MGMT) и `bot/bot.py` (клиентский) — разные роли, но много общего кода aiogram/setup; кандидат на общий модуль.
|
||||
- **Версионные дубли UI**: `mesh-status/SmartHomeMesh.jsx` (735) vs `SmartHomeMesh.v2.jsx` (939) — вероятно v1 мёртв (dead-code кандидат). `MeshStatus.jsx` (311) — возможно предшественник.
|
||||
- **Дубли merge-скриптов**: `merge-health.py` присутствует в `deploy/scripts/` и `mesh-status/` — дивергенция копий.
|
||||
- **Дубли имён**: `run.sh`, `state.json`, `README.md`, `SKILL.md` в нескольких каталогах — конфиг разбросан.
|
||||
- **Одиночные утилиты без явных входящих ссылок** (dead-code кандидаты): `gen_links.py`, `ats-security/attack-map.py|digest.py|make-html.py`, `scripts/generate-uuids.sh` — упоминаются лишь в паре md; проверить, живые ли.
|
||||
- **Смешение кода и доков**: ~200 `.md` рядом с кодом усложняет навигацию; напрашивается вынос кода в отдельный подпакет.
|
||||
|
||||
## TODO для Лилии (codebase-memory-mcp)
|
||||
|
||||
- Построить **точный call-graph** для `code/agent.py` ↔ `code/bot.py` (какие эндпоинты реально дёргаются ботом) и `mesh-status/*.jsx` → `panel-api.py`.
|
||||
- Подтвердить **dead-code**: `SmartHomeMesh.jsx` (v1), `MeshStatus.jsx`, `gen_links.py`, `ats-security/*`, `generate-uuids.sh` — есть ли живые вызовы/деплой-ссылки.
|
||||
- Разрешить **дубли** `merge-health.py` (две копии) — какая канонична.
|
||||
- Разметить **cross-service links**: поддомены servaki.online (finik/ru1/ru2/ru3/de/ee*/gate/wg/sub/panel/zabbix/grafana/ha/matrix/n8n/git1/s3), внешние репо (`gate-web-relay`, `agent-sync`, `banya-bot`, tempelhoff), кто реально ходит по HTTP.
|
||||
- Снять **снапшот graph.db.zst** после первичного обогащения для инкрементального дифа.
|
||||
Submodule claude-memory deleted from 5ee57c7be6
@@ -0,0 +1,84 @@
|
||||
# claude-memory
|
||||
|
||||
## Назначение
|
||||
Приватный канон долговременной памяти агента Claude по проекту **servaki** (оператор german/Gerka1). Это **не код, а база знаний** — набор Markdown-заметок (`node_type: memory`) с фактами об инфраструктуре, проектах, workflow и договорённостях оператора. Локальный путь: `~/.claude/projects/C--Windows-System32/memory`, remote — Gitea `git1.servaki.online/german/claude-memory` (создан 2026-06-30). Пуш через `git -c http.extraHeader="Authorization: token <tok>"`; `.gitignore` режет `*.env` и `.servaki-secrets/`.
|
||||
|
||||
`MEMORY.md` — индекс всех заметок с однострочными аннотациями и wiki-ссылками (`[[...]]`) между ними.
|
||||
|
||||
## Архитектура
|
||||
Модулей/сервисов нет — это граф взаимосвязанных заметок. Ниже — карта wiki-ссылок (`[[...]]`) между файлами памяти.
|
||||
|
||||
```mermaid
|
||||
graph TD
|
||||
IDX[MEMORY.md — индекс]
|
||||
EXCH[servaki-agent-exchange]
|
||||
REPOS[servaki-gitea-repos]
|
||||
BRANCH[servaki-git-branch-workflow]
|
||||
YAUTH[servaki-monitor-yauth-auth]
|
||||
NAMING[servaki-orbita-naming]
|
||||
MEDIA[media-gen-skills]
|
||||
GATE[servaki-gate-project]
|
||||
|
||||
IDX --> EXCH
|
||||
IDX --> REPOS
|
||||
IDX --> BRANCH
|
||||
IDX --> YAUTH
|
||||
IDX --> NAMING
|
||||
IDX --> MEDIA
|
||||
IDX --> GATE
|
||||
|
||||
EXCH --> REPOS
|
||||
REPOS --> EXCH
|
||||
BRANCH --> EXCH
|
||||
BRANCH --> REPOS
|
||||
YAUTH --> REPOS
|
||||
NAMING --> REPOS
|
||||
NAMING --> YAUTH
|
||||
MEDIA --> EXCH
|
||||
GATE --> REPOS
|
||||
GATE --> EXCH
|
||||
```
|
||||
|
||||
## Entry-points / маршруты
|
||||
HTTP entry-points **отсутствуют** — репозиторий не содержит исполняемого кода (только `.md` + `.gitignore`). «Точки входа» здесь = файлы знаний.
|
||||
|
||||
| Файл | Тип | О чём |
|
||||
|------|-----|-------|
|
||||
| `MEMORY.md` | index | Оглавление всех заметок |
|
||||
| `servaki-agent-exchange.md` | project | Git-канон (Gitea) + Nextcloud-обмен, роли агентов, `agent-sync`/`ncx.sh` |
|
||||
| `servaki-gitea-repos.md` | project | Карта флота Gitea (~46 репо), категории |
|
||||
| `servaki-git-branch-workflow.md` | feedback | Правило: фиксы через ветку+PR, не в main |
|
||||
| `servaki-monitor-yauth-auth.md` | project | Демо-вход `?yauth` зажат (DEV+demo), прод — Яндекс ID |
|
||||
| `servaki-orbita-naming.md` | project | «Орбита» = мониторинг, НЕ репо `orbit-*` |
|
||||
| `media-gen-skills.md` | reference | Скилы Runway/Together/hyperframes, окружение ноута |
|
||||
| `servaki-gate-project.md` | project | «Ворота» gate-web-relay: реле SR-201 + VPS FastAPI + бот |
|
||||
|
||||
## Ключевые цепочки вызовов
|
||||
Т.к. кода нет, «цепочки» = сценарии использования памяти агентом.
|
||||
|
||||
1. **Старт задачи по servaki** → читать `MEMORY.md` → по ссылке в `servaki-agent-exchange` (где git-канон, где секреты `~/.servaki-secrets/*.env`) → в `servaki-gitea-repos` (какой из ~46 репо трогать).
|
||||
2. **Правка любого репо** → `servaki-git-branch-workflow`: создать `fix/*`/`feat/*`, пуш ветки с токеном из `gitea-token.env`, открыть PR, не мерджить без подтверждения.
|
||||
3. **Слово «Орбита» от оператора** → `servaki-orbita-naming`: это мониторинг (`servaki-monitor` + `servaki-gps-monitoring`), НЕ боты `orbit-*` (Камелия). Далее `servaki-monitor-yauth-auth`: не ослаблять `?yauth`.
|
||||
4. **Задача про Nextcloud/Web-UI/app-password** → `servaki-agent-exchange`: делает браузерный агент, laptop-agent готовит промпт; блокер — нет app-password для headless `ncx`.
|
||||
5. **Генерация медиа (видео/звук/картинки)** → `media-gen-skills`: какие скилы стоят, чего не хватает (API-ключи, Node/FFmpeg на ноуте нет), motion=hyperframes отложен.
|
||||
|
||||
## Тех-долг
|
||||
> Пометка: всё ниже — **предположение** (эвристика на markdown), точность — через codebase-memory-mcp.
|
||||
|
||||
- **Dead-code кандидаты:** исполняемого кода нет → классических dead-exports нет. Как «висячие» узлы можно рассматривать заметки, на которые нет входящих ссылок кроме индекса: `media-gen-skills`, `servaki-gate-project` ссылаются наружу, но входящих (кроме `MEMORY.md`) на них нет — низкая связность, не удалять (это листья-справочники).
|
||||
- **Возможные дубли/устаревание:**
|
||||
- Счётчик репо расходится внутри одной заметки `servaki-gitea-repos`: «31» → «32» → «33» → «ВСЕГО 46». Требует консолидации в единый актуальный список (предположение).
|
||||
- Пары легко спутать: `mpo-inform-site` vs `site-mpo-inform-ru`/`site-mpoinform-ru`; `delodecor` vs `site-delodecor-ru` — заметка прямо предупреждает «не путать».
|
||||
- `servaki-monitor` упоминается с задвоением («servaki-monitor/servaki-monitor», «servaki-monitor/servaki-monitor») — вероятно опечатка/старый алиас.
|
||||
- **Статусные факты с датами** (протухают): «Nextcloud 33.0.6 на 2026-06-30», «обмен холодный с 06-17», «app-password не выдан» — нуждаются в periodic-ревизии.
|
||||
|
||||
## Cross-service links (упоминания других сервисов/репо/доменов)
|
||||
Домены `*.servaki.online`: `git1.` (Gitea-канон), `n.` (Nextcloud-обмен), `gps.` (прод servaki-monitor), `gate.` (деплой Ворот), `192.168.1.120` (LAN-Gitea cascade).
|
||||
Инфра-узлы: mesh1 (+ сервер `261049` для gate), сервер/ВМ **«Лилия»/«Лес»** (headless-агент `lilia`), ноут `laptop-agent`, браузерный `claude-agent`.
|
||||
Репо из общего списка, упомянутые здесь: `agent-sync`, `Heritage`, `Afanasov-smart`, `KPgenerator`, `agro-panel`, `banya-bot`, `cascade-de-ru`, `cascade`, `delodecor`, `egorin`, `homeassistant-backup`, `home-router`, `gate-web-relay`, `leronx`, `lilia-ee-media-router`, `matrix-migration`, `mcp-hikvision`, `media-projects`, `mesh1-status`, `mesh2-status`, `mpo-design-system`, `ops-configs`, `orbit-bot`, `orbit-kameliya`, `router-koval`, `mpo-inform-site`, `servaki-gps-monitoring`, `servaki-infra`, `servaki-monitor`, `site-delodecor-ru`, `site-eba-sh-ru`, `site-egida1-ru`, `site-ermashova26-ru`, `site-idea-s-ru`, `site-mpo-inform-ru`, `site-mpoinform-ru`, `site-servaki-online`, `site-tempelhoff-ru`, `smartlight-panel`, `tempelhoff-pbx`, `user-mobile-wa`, `user-bitarov`, `vpn-clients`, `vpn-vps-ruslan`. Плюс `orbit-panel` (пустой).
|
||||
|
||||
## TODO для Лилии (codebase-memory-mcp)
|
||||
- **Точный call-graph:** здесь кода нет — вместо call-graph построить **граф wiki-ссылок** (`[[...]]`) и front-matter `originSessionId`, связать заметки с реальными репо флота.
|
||||
- **Dead-code / устаревшие факты:** выявить протухшие статус-строки (даты, счётчики репо 31→46, «Nextcloud 33.0.6», «app-password не выдан») и слабосвязанные листья-заметки.
|
||||
- **Cross-service:** нормализовать упоминания ~44 репо и поддоменов `*.servaki.online` в машиночитаемые ребра «память → репо/сервис»; развести дубли (`mpo-inform-site` vs `site-mpo*`, `delodecor` vs `site-delodecor-ru`).
|
||||
- **Снапшот graph.db.zst:** сохранить снимок графа знаний (узлы=заметки, ребра=ссылки) для инкрементального обогащения; при новых сессиях мержить дельту, а не переписывать.
|
||||
-1
Submodule delodecor deleted from c1ad455e44
@@ -0,0 +1,73 @@
|
||||
# delodecor
|
||||
|
||||
## Назначение
|
||||
Одностраничный статический лендинг мастерской изделий из дерева **DeloDecor** (мебель, интерьеры, уход за древесиной). Чистый front-end: единственный файл `index.html` содержит разметку, CSS (кастомный курсор, wood-палитра, reveal-анимации) и inline-JS (скролл-эффекты, табы интерьеров, счётчики). Бэкенда нет — контакты через `tel:`, Telegram, WhatsApp. Репозиторий фактически = ZIP-архив с сайтом + скрипт заливки на Gitea.
|
||||
|
||||
## Архитектура
|
||||
Проекта как модульного кода нет — это один HTML-документ. «Модули» = секции страницы и inline-скрипты.
|
||||
|
||||
```mermaid
|
||||
graph TD
|
||||
subgraph repo[repo-delodecor]
|
||||
ZIP[delodecor-site2.zip] --> INNER[delodecor-site.zip + index.html]
|
||||
ZIP --> DEPLOY[deploy-gitea.sh]
|
||||
INNER --> HTML[index.html 1239 строк]
|
||||
end
|
||||
subgraph page[index.html]
|
||||
NAV[nav #mainNav]
|
||||
HERO[section .hero]
|
||||
ABOUT[#about]
|
||||
SERVICES[#services]
|
||||
CARE[#care]
|
||||
WOOD[#wood-types]
|
||||
INTER[#interiors + табы data-tab]
|
||||
CONTACT[#contact tel/tg/wa]
|
||||
JS[inline script: курсор, scroll-reveal, табы, счётчики]
|
||||
end
|
||||
HTML --> NAV --> HERO --> ABOUT --> SERVICES --> CARE --> WOOD --> INTER --> CONTACT
|
||||
JS -.управляет.-> NAV
|
||||
JS -.табы.-> INTER
|
||||
DEPLOY -->|git push| GITEA[git1.servaki.online]
|
||||
CONTACT -->|footer credit| SERVAKI[servaki.online]
|
||||
HTML -->|CDN шрифты/фото| EXT[fonts.googleapis.com / images.unsplash.com]
|
||||
```
|
||||
|
||||
## Entry-points / маршруты
|
||||
HTTP-серверных маршрутов нет (статика). Точки входа = файл и внешние ссылки.
|
||||
|
||||
| Тип | Путь / цель | Назначение |
|
||||
|-----|-------------|------------|
|
||||
| Файл-вход | `index.html` | Единственная страница сайта |
|
||||
| Deploy | `deploy-gitea.sh` | `curl` создаёт репо + `git push` на Gitea |
|
||||
| Anchor-навигация | `#about #services #care #wood-types #interiors #contact` | Внутренние секции |
|
||||
| Контакт | `tel:+79001234567` | Телефон |
|
||||
| Контакт | `https://t.me/` | Telegram (заглушка, без username) |
|
||||
| Контакт | `https://wa.me/` | WhatsApp (заглушка, без номера) |
|
||||
| Внешний API | `https://git1.servaki.online/api/v1/user/repos` | Создание репозитория в Gitea |
|
||||
|
||||
## Ключевые цепочки вызовов
|
||||
1. **Загрузка страницы** → браузер тянет шрифты Google Fonts и фото Unsplash по CDN → рендер секций.
|
||||
2. **Кастомный курсор**: `mousemove` → обновление `#cursorMain`, `animateTrail()` (rAF) двигает `#cursorTrail`; hover по интерактивам меняет класс курсора.
|
||||
3. **Scroll-reveal + навбар**: `scroll` → `IntersectionObserver`/проверка `.reveal*` добавляет видимость; класс на `#mainNav` при прокрутке; параллакс `.divider img`.
|
||||
4. **Табы интерьеров**: клик по `.interior-tab[data-tab]` → снятие/установка `active` → подмена `#interiorMainImg/Title/Desc`.
|
||||
5. **Плавный скролл**: клик по `a[href^="#"]` → `preventDefault` → `scrollIntoView` к секции; анимация `.stat-number` счётчиков.
|
||||
6. **Деплой** (вне рантайма сайта): `deploy-gitea.sh` → `curl` создаёт репо → `git push` на `git1.servaki.online`.
|
||||
|
||||
## Тех-долг
|
||||
- **Дубль (подтверждено)**: `delodecor-site2.zip` содержит `delodecor-site.zip`, внутри которого `index.html`, **идентичный** внешнему `index.html` (`diff` = identical). Матрёшка из двух ZIP с одним и тем же файлом — избыточно.
|
||||
- **Dead-ссылки-кандидаты (предположение)**: `https://t.me/` и `https://wa.me/` — без username/номера, ведут «в никуда»; `tel:+79001234567` выглядит как плейсхолдер. Точность — через codebase-memory-mcp.
|
||||
- **Секрет в репо (подтверждено)**: `deploy-gitea.sh` содержит Gitea-токен `efda0783…` в открытом виде — рекомендуется ротация/удаление из истории.
|
||||
- **Нет сборки/CI**: чистая статика без package.json, тестов, линтеров.
|
||||
- **Внешние зависимости рантайма**: шрифты Google + фото Unsplash по CDN — офлайн/приватность-риск (предположение, не критично для лендинга).
|
||||
|
||||
## Cross-service links
|
||||
- `servaki.online` — кредит в футере («Создано servaki.online»).
|
||||
- `git1.servaki.online` — Gitea, целевой хост деплоя (в `deploy-gitea.sh`).
|
||||
- Связанное репо по неймингу: **site-delodecor-ru** (из списка наших репо) — вероятный «боевой»/зеркальный вариант этого же сайта. (предположение)
|
||||
|
||||
## TODO для Лилии (codebase-memory-mcp)
|
||||
- Уточнить **точный call-graph** inline-JS (курсор / scroll-reveal / табы / счётчики) — сейчас по грепу, без прогонки.
|
||||
- Подтвердить **dead-code / dead-ссылки**: заглушки `t.me`, `wa.me`, плейсхолдер-телефон — реальны ли, заменяются ли при деплое.
|
||||
- Развести **cross-service**: связь `delodecor` ↔ `site-delodecor-ru` ↔ `servaki.online`/`git1.servaki.online` (какой репо боевой, где хостится).
|
||||
- Зафиксировать **факт дубля ZIP-матрёшки** и решение (распаковать в plain-репо vs хранить архив).
|
||||
- Снять **снапшот `graph.db.zst`** после первичного индексирования для быстрого восстановления карты.
|
||||
-1
Submodule egorin deleted from b1c52ab748
@@ -0,0 +1,64 @@
|
||||
# egorin
|
||||
|
||||
> Структурная авто-карта (греп-анализ, без codebase-memory-mcp). Семантику (call-graph/dead-code) дополнит Лилия — см. `../HANDOFF-lilia.md`.
|
||||
|
||||
## Назначение
|
||||
Servaki Monitor — Смартпанель
|
||||
|
||||
## Метрики
|
||||
Язык: **TypeScript** · LOC: **9693** · файлов: 114 · модулей: 11
|
||||
|
||||
## Архитектура (модули)
|
||||
```mermaid
|
||||
graph TD
|
||||
R[egorin]
|
||||
R --> App_tsx["App.tsx"]
|
||||
R --> api["api"]
|
||||
R --> components["components"]
|
||||
R --> config["config"]
|
||||
R --> core["core"]
|
||||
R --> data["data"]
|
||||
R --> index_css["index.css"]
|
||||
R --> lib["lib"]
|
||||
R --> main_tsx["main.tsx"]
|
||||
R --> modules["modules"]
|
||||
R --> vite_env_d_ts["vite-env.d.ts"]
|
||||
```
|
||||
|
||||
## Entry-points / маршруты
|
||||
| Маршрут |
|
||||
|---|
|
||||
| `/api/admin/activity` |
|
||||
| `/api/admin/daily` |
|
||||
| `/api/admin/online` |
|
||||
| `/api/admin/stats` |
|
||||
| `/api/admin/users` |
|
||||
| `/api/admin/users/:id` |
|
||||
| `/api/admin/users/:id/block` |
|
||||
| `/api/admin/users/:id/unblock` |
|
||||
| `/api/auth/yandex/callback` |
|
||||
| `/api/auth/yandex/start` |
|
||||
| `/api/billing` |
|
||||
| `/api/billing/topup` |
|
||||
| `/api/cabinet/links` |
|
||||
| `/api/cabinet/links/:email` |
|
||||
| `/api/channels` |
|
||||
| `/api/devices` |
|
||||
| `/api/devices/:imei` |
|
||||
| `/api/devices/bind` |
|
||||
| `/api/energy/series` |
|
||||
| `/api/entities` |
|
||||
| `/api/events` |
|
||||
| `/api/health` |
|
||||
| `/api/login` |
|
||||
| `/api/me` |
|
||||
| `/api/tracks/:id` |
|
||||
|
||||
## Межсервисные связи (упоминания)
|
||||
`Afanasov-smart`, `Heritage`, `KPgenerator`, `agro-panel`, `banya-bot`, `cascade`, `cascade-de-ru`, `claude-memory`, `delodecor`, `finik`, `gate`, `gate-web-relay`, `home-router`, `homeassistant-backup`, `influx`, `lilia-ee-media-router`, `matrix-migration`, `media-projects`, `mesh1-status`, `mesh2-status`, `mosquitto`, `mpo-inform-site`, `ops-configs`, `orbit-bot`, `orbit-kameliya`, `router-koval`, `ru2`, `ru3`, `servaki-gps-monitoring`, `servaki-infra`, `servaki-monitor`, `servaki.online`, `smartlight-panel`, `tempelhoff-pbx`, `traccar`, `user-bitarov`, `user-mobile-wa`, `vm-mts`, `vpn-clients`, `vpn-vps-ruslan`
|
||||
|
||||
## Тех-долг (предположения — точность через codebase-memory-mcp)
|
||||
- Dead-code/дубли автоматически грепом не определяются надёжно → задача Лилии (MCP).
|
||||
|
||||
## TODO для Лилии (codebase-memory-mcp)
|
||||
- `index` репо через MCP; `get_architecture` (точные слои); dead-code detection; cross-service links (точные вызовы); снапшот `graph.db.zst` рядом с этим MAP.md.
|
||||
Submodule gate-web-relay deleted from ccf4f70078
@@ -0,0 +1,57 @@
|
||||
# gate-web-relay
|
||||
|
||||
> Структурная авто-карта (греп-анализ, без codebase-memory-mcp). Семантику (call-graph/dead-code) дополнит Лилия — см. `../HANDOFF-lilia.md`.
|
||||
|
||||
## Назначение
|
||||
Репозиторий gate-web-relay (Python), 154 файлов.
|
||||
|
||||
## Метрики
|
||||
Язык: **Python** · LOC: **5230** · файлов: 154 · модулей: 4
|
||||
|
||||
## Архитектура (модули)
|
||||
```mermaid
|
||||
graph TD
|
||||
R[gate-web-relay]
|
||||
R --> agent["agent"]
|
||||
R --> api["api"]
|
||||
R --> bot["bot"]
|
||||
R --> deploy["deploy"]
|
||||
```
|
||||
|
||||
## Entry-points / маршруты
|
||||
| Маршрут |
|
||||
|---|
|
||||
| `/` |
|
||||
| `/audit` |
|
||||
| `/change-password` |
|
||||
| `/close` |
|
||||
| `/g/{code}` |
|
||||
| `/guest` |
|
||||
| `/healthz` |
|
||||
| `/locations` |
|
||||
| `/login` |
|
||||
| `/me` |
|
||||
| `/open` |
|
||||
| `/providers` |
|
||||
| `/status` |
|
||||
| `/ws/agent` |
|
||||
| `/yandex/callback` |
|
||||
| `/yandex/start` |
|
||||
| `/{aid}` |
|
||||
| `/{code}/info` |
|
||||
| `/{code}/use` |
|
||||
| `/{gid}` |
|
||||
| `/{location_id}` |
|
||||
| `/{location_id}/access` |
|
||||
| `/{location_id}/access/{user_id}` |
|
||||
| `/{request_id}/approve` |
|
||||
| `/{request_id}/reject` |
|
||||
|
||||
## Межсервисные связи (упоминания)
|
||||
`5.188`, `78.17.64.57`, `gate`, `ru1`, `servaki.online`
|
||||
|
||||
## Тех-долг (предположения — точность через codebase-memory-mcp)
|
||||
- Dead-code/дубли автоматически грепом не определяются надёжно → задача Лилии (MCP).
|
||||
|
||||
## TODO для Лилии (codebase-memory-mcp)
|
||||
- `index` репо через MCP; `get_architecture` (точные слои); dead-code detection; cross-service links (точные вызовы); снапшот `graph.db.zst` рядом с этим MAP.md.
|
||||
-1
Submodule home-router deleted from fa57642a49
@@ -0,0 +1,30 @@
|
||||
# home-router
|
||||
|
||||
> Структурная авто-карта (греп-анализ, без codebase-memory-mcp). Семантику (call-graph/dead-code) дополнит Лилия — см. `../HANDOFF-lilia.md`.
|
||||
|
||||
## Назначение
|
||||
Home Keenetic Giga config backups + change docs
|
||||
|
||||
## Метрики
|
||||
Язык: **Markdown** · LOC: **0** · файлов: 7 · модулей: 0
|
||||
|
||||
## Архитектура (модули)
|
||||
```mermaid
|
||||
graph TD
|
||||
R[home-router]
|
||||
|
||||
```
|
||||
|
||||
## Entry-points / маршруты
|
||||
| Маршрут |
|
||||
|---|
|
||||
| _(маршрутов не найдено грепом)_ |
|
||||
|
||||
## Межсервисные связи (упоминания)
|
||||
_нет_
|
||||
|
||||
## Тех-долг (предположения — точность через codebase-memory-mcp)
|
||||
- Dead-code/дубли автоматически грепом не определяются надёжно → задача Лилии (MCP).
|
||||
|
||||
## TODO для Лилии (codebase-memory-mcp)
|
||||
- `index` репо через MCP; `get_architecture` (точные слои); dead-code detection; cross-service links (точные вызовы); снапшот `graph.db.zst` рядом с этим MAP.md.
|
||||
Submodule homeassistant-backup deleted from df38626eb3
@@ -0,0 +1,30 @@
|
||||
# homeassistant-backup
|
||||
|
||||
> Структурная авто-карта (греп-анализ, без codebase-memory-mcp). Семантику (call-graph/dead-code) дополнит Лилия — см. `../HANDOFF-lilia.md`.
|
||||
|
||||
## Назначение
|
||||
homeassistant-backup
|
||||
|
||||
## Метрики
|
||||
Язык: **Markdown** · LOC: **0** · файлов: 1 · модулей: 0
|
||||
|
||||
## Архитектура (модули)
|
||||
```mermaid
|
||||
graph TD
|
||||
R[homeassistant-backup]
|
||||
|
||||
```
|
||||
|
||||
## Entry-points / маршруты
|
||||
| Маршрут |
|
||||
|---|
|
||||
| _(маршрутов не найдено грепом)_ |
|
||||
|
||||
## Межсервисные связи (упоминания)
|
||||
_нет_
|
||||
|
||||
## Тех-долг (предположения — точность через codebase-memory-mcp)
|
||||
- Dead-code/дубли автоматически грепом не определяются надёжно → задача Лилии (MCP).
|
||||
|
||||
## TODO для Лилии (codebase-memory-mcp)
|
||||
- `index` репо через MCP; `get_architecture` (точные слои); dead-code detection; cross-service links (точные вызовы); снапшот `graph.db.zst` рядом с этим MAP.md.
|
||||
-1
Submodule leronx deleted from cd88a8803b
@@ -0,0 +1,32 @@
|
||||
# leronx
|
||||
|
||||
> Структурная авто-карта (греп-анализ, без codebase-memory-mcp). Семантику (call-graph/dead-code) дополнит Лилия — см. `../HANDOFF-lilia.md`.
|
||||
|
||||
## Назначение
|
||||
LeronX — AI Video Generation Pipeline
|
||||
|
||||
## Метрики
|
||||
Язык: **Markdown** · LOC: **317** · файлов: 13 · модулей: 3
|
||||
|
||||
## Архитектура (модули)
|
||||
```mermaid
|
||||
graph TD
|
||||
R[leronx]
|
||||
R --> config["config"]
|
||||
R --> docs["docs"]
|
||||
R --> examples["examples"]
|
||||
```
|
||||
|
||||
## Entry-points / маршруты
|
||||
| Маршрут |
|
||||
|---|
|
||||
| _(маршрутов не найдено грепом)_ |
|
||||
|
||||
## Межсервисные связи (упоминания)
|
||||
`servaki.online`
|
||||
|
||||
## Тех-долг (предположения — точность через codebase-memory-mcp)
|
||||
- Dead-code/дубли автоматически грепом не определяются надёжно → задача Лилии (MCP).
|
||||
|
||||
## TODO для Лилии (codebase-memory-mcp)
|
||||
- `index` репо через MCP; `get_architecture` (точные слои); dead-code detection; cross-service links (точные вызовы); снапшот `graph.db.zst` рядом с этим MAP.md.
|
||||
Submodule lilia-ee-media-router deleted from 36ccca41f4
@@ -0,0 +1,30 @@
|
||||
# lilia-ee-media-router
|
||||
|
||||
> Структурная авто-карта (греп-анализ, без codebase-memory-mcp). Семантику (call-graph/dead-code) дополнит Лилия — см. `../HANDOFF-lilia.md`.
|
||||
|
||||
## Назначение
|
||||
lilia-ee-media-router
|
||||
|
||||
## Метрики
|
||||
Язык: **Markdown** · LOC: **0** · файлов: 7 · модулей: 0
|
||||
|
||||
## Архитектура (модули)
|
||||
```mermaid
|
||||
graph TD
|
||||
R[lilia-ee-media-router]
|
||||
|
||||
```
|
||||
|
||||
## Entry-points / маршруты
|
||||
| Маршрут |
|
||||
|---|
|
||||
| _(маршрутов не найдено грепом)_ |
|
||||
|
||||
## Межсервисные связи (упоминания)
|
||||
_нет_
|
||||
|
||||
## Тех-долг (предположения — точность через codebase-memory-mcp)
|
||||
- Dead-code/дубли автоматически грепом не определяются надёжно → задача Лилии (MCP).
|
||||
|
||||
## TODO для Лилии (codebase-memory-mcp)
|
||||
- `index` репо через MCP; `get_architecture` (точные слои); dead-code detection; cross-service links (точные вызовы); снапшот `graph.db.zst` рядом с этим MAP.md.
|
||||
Submodule matrix-migration deleted from 0b31c310b6
@@ -0,0 +1,31 @@
|
||||
# matrix-migration
|
||||
|
||||
> Структурная авто-карта (греп-анализ, без codebase-memory-mcp). Семантику (call-graph/dead-code) дополнит Лилия — см. `../HANDOFF-lilia.md`.
|
||||
|
||||
## Назначение
|
||||
matrix-migration
|
||||
|
||||
## Метрики
|
||||
Язык: **Markdown** · LOC: **0** · файлов: 15 · модулей: 2
|
||||
|
||||
## Архитектура (модули)
|
||||
```mermaid
|
||||
graph TD
|
||||
R[matrix-migration]
|
||||
R --> camellia_reference["camellia-reference"]
|
||||
R --> kz_deployed["kz-deployed"]
|
||||
```
|
||||
|
||||
## Entry-points / маршруты
|
||||
| Маршрут |
|
||||
|---|
|
||||
| _(маршрутов не найдено грепом)_ |
|
||||
|
||||
## Межсервисные связи (упоминания)
|
||||
_нет_
|
||||
|
||||
## Тех-долг (предположения — точность через codebase-memory-mcp)
|
||||
- Dead-code/дубли автоматически грепом не определяются надёжно → задача Лилии (MCP).
|
||||
|
||||
## TODO для Лилии (codebase-memory-mcp)
|
||||
- `index` репо через MCP; `get_architecture` (точные слои); dead-code detection; cross-service links (точные вызовы); снапшот `graph.db.zst` рядом с этим MAP.md.
|
||||
Submodule mcp-hikvision deleted from 906c863199
@@ -0,0 +1,44 @@
|
||||
# mcp-hikvision
|
||||
|
||||
> Структурная авто-карта (греп-анализ, без codebase-memory-mcp). Семантику (call-graph/dead-code) дополнит Лилия — см. `../HANDOFF-lilia.md`.
|
||||
|
||||
## Назначение
|
||||
MCP-сервер + веб-панель для управления NVR/камерами Hikvision через ISAPI.
|
||||
|
||||
## Метрики
|
||||
Язык: **Python** · LOC: **581** · файлов: 21 · модулей: 5
|
||||
|
||||
## Архитектура (модули)
|
||||
```mermaid
|
||||
graph TD
|
||||
R[mcp-hikvision]
|
||||
R --> deploy["deploy"]
|
||||
R --> hikvision_common["hikvision_common"]
|
||||
R --> panel["panel"]
|
||||
R --> scripts["scripts"]
|
||||
R --> server["server"]
|
||||
```
|
||||
|
||||
## Entry-points / маршруты
|
||||
| Маршрут |
|
||||
|---|
|
||||
| `/` |
|
||||
| `/api/auth/logout` |
|
||||
| `/api/auth/me` |
|
||||
| `/api/auth/yandex/callback` |
|
||||
| `/api/auth/yandex/login` |
|
||||
| `/api/devices` |
|
||||
| `/api/events/{device_id}` |
|
||||
| `/api/snapshot/{device_id}` |
|
||||
| `/api/status` |
|
||||
| `/health` |
|
||||
| `/login` |
|
||||
|
||||
## Межсервисные связи (упоминания)
|
||||
`gate`, `ru1`, `servaki-monitor`, `servaki.online`, `zabbix`
|
||||
|
||||
## Тех-долг (предположения — точность через codebase-memory-mcp)
|
||||
- Dead-code/дубли автоматически грепом не определяются надёжно → задача Лилии (MCP).
|
||||
|
||||
## TODO для Лилии (codebase-memory-mcp)
|
||||
- `index` репо через MCP; `get_architecture` (точные слои); dead-code detection; cross-service links (точные вызовы); снапшот `graph.db.zst` рядом с этим MAP.md.
|
||||
Submodule media-projects deleted from 6ca466f1b6
@@ -0,0 +1,30 @@
|
||||
# media-projects
|
||||
|
||||
> Структурная авто-карта (греп-анализ, без codebase-memory-mcp). Семантику (call-graph/dead-code) дополнит Лилия — см. `../HANDOFF-lilia.md`.
|
||||
|
||||
## Назначение
|
||||
Remotion video projects changelog (auto-doc)
|
||||
|
||||
## Метрики
|
||||
Язык: **Markdown** · LOC: **0** · файлов: 2 · модулей: 0
|
||||
|
||||
## Архитектура (модули)
|
||||
```mermaid
|
||||
graph TD
|
||||
R[media-projects]
|
||||
|
||||
```
|
||||
|
||||
## Entry-points / маршруты
|
||||
| Маршрут |
|
||||
|---|
|
||||
| _(маршрутов не найдено грепом)_ |
|
||||
|
||||
## Межсервисные связи (упоминания)
|
||||
_нет_
|
||||
|
||||
## Тех-долг (предположения — точность через codebase-memory-mcp)
|
||||
- Dead-code/дубли автоматически грепом не определяются надёжно → задача Лилии (MCP).
|
||||
|
||||
## TODO для Лилии (codebase-memory-mcp)
|
||||
- `index` репо через MCP; `get_architecture` (точные слои); dead-code detection; cross-service links (точные вызовы); снапшот `graph.db.zst` рядом с этим MAP.md.
|
||||
-1
Submodule mesh1-status deleted from 6dde065a23
@@ -0,0 +1,30 @@
|
||||
# mesh1-status
|
||||
|
||||
> Структурная авто-карта (греп-анализ, без codebase-memory-mcp). Семантику (call-graph/dead-code) дополнит Лилия — см. `../HANDOFF-lilia.md`.
|
||||
|
||||
## Назначение
|
||||
Репозиторий mesh1-status (Markdown), 2 файлов.
|
||||
|
||||
## Метрики
|
||||
Язык: **Markdown** · LOC: **0** · файлов: 2 · модулей: 0
|
||||
|
||||
## Архитектура (модули)
|
||||
```mermaid
|
||||
graph TD
|
||||
R[mesh1-status]
|
||||
|
||||
```
|
||||
|
||||
## Entry-points / маршруты
|
||||
| Маршрут |
|
||||
|---|
|
||||
| _(маршрутов не найдено грепом)_ |
|
||||
|
||||
## Межсервисные связи (упоминания)
|
||||
_нет_
|
||||
|
||||
## Тех-долг (предположения — точность через codebase-memory-mcp)
|
||||
- Dead-code/дубли автоматически грепом не определяются надёжно → задача Лилии (MCP).
|
||||
|
||||
## TODO для Лилии (codebase-memory-mcp)
|
||||
- `index` репо через MCP; `get_architecture` (точные слои); dead-code detection; cross-service links (точные вызовы); снапшот `graph.db.zst` рядом с этим MAP.md.
|
||||
-1
Submodule mesh2-status deleted from 239c4b98e9
@@ -0,0 +1,30 @@
|
||||
# mesh2-status
|
||||
|
||||
> Структурная авто-карта (греп-анализ, без codebase-memory-mcp). Семантику (call-graph/dead-code) дополнит Лилия — см. `../HANDOFF-lilia.md`.
|
||||
|
||||
## Назначение
|
||||
Репозиторий mesh2-status (Markdown), 4 файлов.
|
||||
|
||||
## Метрики
|
||||
Язык: **Markdown** · LOC: **0** · файлов: 4 · модулей: 0
|
||||
|
||||
## Архитектура (модули)
|
||||
```mermaid
|
||||
graph TD
|
||||
R[mesh2-status]
|
||||
|
||||
```
|
||||
|
||||
## Entry-points / маршруты
|
||||
| Маршрут |
|
||||
|---|
|
||||
| _(маршрутов не найдено грепом)_ |
|
||||
|
||||
## Межсервисные связи (упоминания)
|
||||
_нет_
|
||||
|
||||
## Тех-долг (предположения — точность через codebase-memory-mcp)
|
||||
- Dead-code/дубли автоматически грепом не определяются надёжно → задача Лилии (MCP).
|
||||
|
||||
## TODO для Лилии (codebase-memory-mcp)
|
||||
- `index` репо через MCP; `get_architecture` (точные слои); dead-code detection; cross-service links (точные вызовы); снапшот `graph.db.zst` рядом с этим MAP.md.
|
||||
Submodule mpo-design-system deleted from 40f99d11b8
@@ -0,0 +1,33 @@
|
||||
# mpo-design-system
|
||||
|
||||
> Структурная авто-карта (греп-анализ, без codebase-memory-mcp). Семантику (call-graph/dead-code) дополнит Лилия — см. `../HANDOFF-lilia.md`.
|
||||
|
||||
## Назначение
|
||||
Репозиторий mpo-design-system (Markdown), 68 файлов.
|
||||
|
||||
## Метрики
|
||||
Язык: **Markdown** · LOC: **2042** · файлов: 68 · модулей: 4
|
||||
|
||||
## Архитектура (модули)
|
||||
```mermaid
|
||||
graph TD
|
||||
R[mpo-design-system]
|
||||
R --> BBB["BBB"]
|
||||
R --> ops["ops"]
|
||||
R --> skills["skills"]
|
||||
R --> генерация["генерация"]
|
||||
```
|
||||
|
||||
## Entry-points / маршруты
|
||||
| Маршрут |
|
||||
|---|
|
||||
| _(маршрутов не найдено грепом)_ |
|
||||
|
||||
## Межсервисные связи (упоминания)
|
||||
`5.188`, `gate`, `ru1`, `servaki.online`
|
||||
|
||||
## Тех-долг (предположения — точность через codebase-memory-mcp)
|
||||
- Dead-code/дубли автоматически грепом не определяются надёжно → задача Лилии (MCP).
|
||||
|
||||
## TODO для Лилии (codebase-memory-mcp)
|
||||
- `index` репо через MCP; `get_architecture` (точные слои); dead-code detection; cross-service links (точные вызовы); снапшот `graph.db.zst` рядом с этим MAP.md.
|
||||
Submodule mpo-inform-site deleted from 02c7b022c2
@@ -0,0 +1,35 @@
|
||||
# mpo-inform-site
|
||||
|
||||
> Структурная авто-карта (греп-анализ, без codebase-memory-mcp). Семантику (call-graph/dead-code) дополнит Лилия — см. `../HANDOFF-lilia.md`.
|
||||
|
||||
## Назначение
|
||||
Репозиторий mpo-inform-site (JavaScript), 76 файлов.
|
||||
|
||||
## Метрики
|
||||
Язык: **JavaScript** · LOC: **983** · файлов: 76 · модулей: 6
|
||||
|
||||
## Архитектура (модули)
|
||||
```mermaid
|
||||
graph TD
|
||||
R[mpo-inform-site]
|
||||
R --> components["components"]
|
||||
R --> data["data"]
|
||||
R --> env_d_ts["env.d.ts"]
|
||||
R --> layouts["layouts"]
|
||||
R --> pages["pages"]
|
||||
R --> styles["styles"]
|
||||
```
|
||||
|
||||
## Entry-points / маршруты
|
||||
| Маршрут |
|
||||
|---|
|
||||
| _(маршрутов не найдено грепом)_ |
|
||||
|
||||
## Межсервисные связи (упоминания)
|
||||
`gate`, `servaki.online`
|
||||
|
||||
## Тех-долг (предположения — точность через codebase-memory-mcp)
|
||||
- Dead-code/дубли автоматически грепом не определяются надёжно → задача Лилии (MCP).
|
||||
|
||||
## TODO для Лилии (codebase-memory-mcp)
|
||||
- `index` репо через MCP; `get_architecture` (точные слои); dead-code detection; cross-service links (точные вызовы); снапшот `graph.db.zst` рядом с этим MAP.md.
|
||||
-1
Submodule ops-configs deleted from 115a95a4fc
@@ -0,0 +1,34 @@
|
||||
# ops-configs
|
||||
|
||||
> Структурная авто-карта (греп-анализ, без codebase-memory-mcp). Семантику (call-graph/dead-code) дополнит Лилия — см. `../HANDOFF-lilia.md`.
|
||||
|
||||
## Назначение
|
||||
Config backups by ops-agent
|
||||
|
||||
## Метрики
|
||||
Язык: **Markdown** · LOC: **981** · файлов: 78 · модулей: 5
|
||||
|
||||
## Архитектура (модули)
|
||||
```mermaid
|
||||
graph TD
|
||||
R[ops-configs]
|
||||
R --> briefs["briefs"]
|
||||
R --> galitsky["galitsky"]
|
||||
R --> nodes["nodes"]
|
||||
R --> ops_agent["ops-agent"]
|
||||
R --> ru1["ru1"]
|
||||
```
|
||||
|
||||
## Entry-points / маршруты
|
||||
| Маршрут |
|
||||
|---|
|
||||
| _(маршрутов не найдено грепом)_ |
|
||||
|
||||
## Межсервисные связи (упоминания)
|
||||
`5.188`, `78.17.64.57`, `cascade`, `finik`, `ru1`, `ru2`, `ru3`, `servaki.online`, `zabbix`
|
||||
|
||||
## Тех-долг (предположения — точность через codebase-memory-mcp)
|
||||
- Dead-code/дубли автоматически грепом не определяются надёжно → задача Лилии (MCP).
|
||||
|
||||
## TODO для Лилии (codebase-memory-mcp)
|
||||
- `index` репо через MCP; `get_architecture` (точные слои); dead-code detection; cross-service links (точные вызовы); снапшот `graph.db.zst` рядом с этим MAP.md.
|
||||
-1
Submodule orbit-bot deleted from 53749fe5b2
@@ -0,0 +1,30 @@
|
||||
# orbit-bot
|
||||
|
||||
> Структурная авто-карта (греп-анализ, без codebase-memory-mcp). Семантику (call-graph/dead-code) дополнит Лилия — см. `../HANDOFF-lilia.md`.
|
||||
|
||||
## Назначение
|
||||
Репозиторий orbit-bot (Markdown), 3 файлов.
|
||||
|
||||
## Метрики
|
||||
Язык: **Markdown** · LOC: **0** · файлов: 3 · модулей: 0
|
||||
|
||||
## Архитектура (модули)
|
||||
```mermaid
|
||||
graph TD
|
||||
R[orbit-bot]
|
||||
|
||||
```
|
||||
|
||||
## Entry-points / маршруты
|
||||
| Маршрут |
|
||||
|---|
|
||||
| _(маршрутов не найдено грепом)_ |
|
||||
|
||||
## Межсервисные связи (упоминания)
|
||||
_нет_
|
||||
|
||||
## Тех-долг (предположения — точность через codebase-memory-mcp)
|
||||
- Dead-code/дубли автоматически грепом не определяются надёжно → задача Лилии (MCP).
|
||||
|
||||
## TODO для Лилии (codebase-memory-mcp)
|
||||
- `index` репо через MCP; `get_architecture` (точные слои); dead-code detection; cross-service links (точные вызовы); снапшот `graph.db.zst` рядом с этим MAP.md.
|
||||
Submodule orbit-kameliya deleted from 0fee4af8d4
@@ -0,0 +1,30 @@
|
||||
# orbit-kameliya
|
||||
|
||||
> Структурная авто-карта (греп-анализ, без codebase-memory-mcp). Семантику (call-graph/dead-code) дополнит Лилия — см. `../HANDOFF-lilia.md`.
|
||||
|
||||
## Назначение
|
||||
ORBIT Studio Bot — база знаний и сборка
|
||||
|
||||
## Метрики
|
||||
Язык: **Markdown** · LOC: **0** · файлов: 14 · модулей: 0
|
||||
|
||||
## Архитектура (модули)
|
||||
```mermaid
|
||||
graph TD
|
||||
R[orbit-kameliya]
|
||||
|
||||
```
|
||||
|
||||
## Entry-points / маршруты
|
||||
| Маршрут |
|
||||
|---|
|
||||
| _(маршрутов не найдено грепом)_ |
|
||||
|
||||
## Межсервисные связи (упоминания)
|
||||
_нет_
|
||||
|
||||
## Тех-долг (предположения — точность через codebase-memory-mcp)
|
||||
- Dead-code/дубли автоматически грепом не определяются надёжно → задача Лилии (MCP).
|
||||
|
||||
## TODO для Лилии (codebase-memory-mcp)
|
||||
- `index` репо через MCP; `get_architecture` (точные слои); dead-code detection; cross-service links (точные вызовы); снапшот `graph.db.zst` рядом с этим MAP.md.
|
||||
-1
Submodule router-koval deleted from feffe582a4
@@ -0,0 +1,31 @@
|
||||
# router-koval
|
||||
|
||||
> Структурная авто-карта (греп-анализ, без codebase-memory-mcp). Семантику (call-graph/dead-code) дополнит Лилия — см. `../HANDOFF-lilia.md`.
|
||||
|
||||
## Назначение
|
||||
Репозиторий router-koval (Markdown), 10 файлов.
|
||||
|
||||
## Метрики
|
||||
Язык: **Markdown** · LOC: **0** · файлов: 10 · модулей: 2
|
||||
|
||||
## Архитектура (модули)
|
||||
```mermaid
|
||||
graph TD
|
||||
R[router-koval]
|
||||
R --> amnezia["amnezia"]
|
||||
R --> vless["vless"]
|
||||
```
|
||||
|
||||
## Entry-points / маршруты
|
||||
| Маршрут |
|
||||
|---|
|
||||
| _(маршрутов не найдено грепом)_ |
|
||||
|
||||
## Межсервисные связи (упоминания)
|
||||
_нет_
|
||||
|
||||
## Тех-долг (предположения — точность через codebase-memory-mcp)
|
||||
- Dead-code/дубли автоматически грепом не определяются надёжно → задача Лилии (MCP).
|
||||
|
||||
## TODO для Лилии (codebase-memory-mcp)
|
||||
- `index` репо через MCP; `get_architecture` (точные слои); dead-code detection; cross-service links (точные вызовы); снапшот `graph.db.zst` рядом с этим MAP.md.
|
||||
Submodule servaki-gps-monitoring deleted from 1bff4426aa
@@ -0,0 +1,31 @@
|
||||
# servaki-gps-monitoring
|
||||
|
||||
> Структурная авто-карта (греп-анализ, без codebase-memory-mcp). Семантику (call-graph/dead-code) дополнит Лилия — см. `../HANDOFF-lilia.md`.
|
||||
|
||||
## Назначение
|
||||
servaki-gps-monitoring
|
||||
|
||||
## Метрики
|
||||
Язык: **Markdown** · LOC: **606** · файлов: 23 · модулей: 2
|
||||
|
||||
## Архитектура (модули)
|
||||
```mermaid
|
||||
graph TD
|
||||
R[servaki-gps-monitoring]
|
||||
R --> analysis["analysis"]
|
||||
R --> ops["ops"]
|
||||
```
|
||||
|
||||
## Entry-points / маршруты
|
||||
| Маршрут |
|
||||
|---|
|
||||
| _(маршрутов не найдено грепом)_ |
|
||||
|
||||
## Межсервисные связи (упоминания)
|
||||
`servaki.online`, `traccar`
|
||||
|
||||
## Тех-долг (предположения — точность через codebase-memory-mcp)
|
||||
- Dead-code/дубли автоматически грепом не определяются надёжно → задача Лилии (MCP).
|
||||
|
||||
## TODO для Лилии (codebase-memory-mcp)
|
||||
- `index` репо через MCP; `get_architecture` (точные слои); dead-code detection; cross-service links (точные вызовы); снапшот `graph.db.zst` рядом с этим MAP.md.
|
||||
Submodule servaki-infra deleted from 3c6d8fcfc2
@@ -0,0 +1,36 @@
|
||||
# servaki-infra
|
||||
|
||||
> Структурная авто-карта (греп-анализ, без codebase-memory-mcp). Семантику (call-graph/dead-code) дополнит Лилия — см. `../HANDOFF-lilia.md`.
|
||||
|
||||
## Назначение
|
||||
Servaki.online Infrastructure
|
||||
|
||||
## Метрики
|
||||
Язык: **Markdown** · LOC: **0** · файлов: 23 · модулей: 7
|
||||
|
||||
## Архитектура (модули)
|
||||
```mermaid
|
||||
graph TD
|
||||
R[servaki-infra]
|
||||
R --> aspia["aspia"]
|
||||
R --> assets["assets"]
|
||||
R --> docs["docs"]
|
||||
R --> excalidraw["excalidraw"]
|
||||
R --> knowledge["knowledge"]
|
||||
R --> servaki_landing["servaki-landing"]
|
||||
R --> wireguard["wireguard"]
|
||||
```
|
||||
|
||||
## Entry-points / маршруты
|
||||
| Маршрут |
|
||||
|---|
|
||||
| _(маршрутов не найдено грепом)_ |
|
||||
|
||||
## Межсервисные связи (упоминания)
|
||||
_нет_
|
||||
|
||||
## Тех-долг (предположения — точность через codebase-memory-mcp)
|
||||
- Dead-code/дубли автоматически грепом не определяются надёжно → задача Лилии (MCP).
|
||||
|
||||
## TODO для Лилии (codebase-memory-mcp)
|
||||
- `index` репо через MCP; `get_architecture` (точные слои); dead-code detection; cross-service links (точные вызовы); снапшот `graph.db.zst` рядом с этим MAP.md.
|
||||
Submodule servaki-monitor deleted from 44ed11c332
@@ -0,0 +1,64 @@
|
||||
# servaki-monitor
|
||||
|
||||
> Структурная авто-карта (греп-анализ, без codebase-memory-mcp). Семантику (call-graph/dead-code) дополнит Лилия — см. `../HANDOFF-lilia.md`.
|
||||
|
||||
## Назначение
|
||||
Servaki Monitor — Смартпанель
|
||||
|
||||
## Метрики
|
||||
Язык: **TypeScript** · LOC: **8741** · файлов: 102 · модулей: 11
|
||||
|
||||
## Архитектура (модули)
|
||||
```mermaid
|
||||
graph TD
|
||||
R[servaki-monitor]
|
||||
R --> App_tsx["App.tsx"]
|
||||
R --> api["api"]
|
||||
R --> components["components"]
|
||||
R --> config["config"]
|
||||
R --> core["core"]
|
||||
R --> data["data"]
|
||||
R --> index_css["index.css"]
|
||||
R --> lib["lib"]
|
||||
R --> main_tsx["main.tsx"]
|
||||
R --> modules["modules"]
|
||||
R --> vite_env_d_ts["vite-env.d.ts"]
|
||||
```
|
||||
|
||||
## Entry-points / маршруты
|
||||
| Маршрут |
|
||||
|---|
|
||||
| `/api/admin/activity` |
|
||||
| `/api/admin/daily` |
|
||||
| `/api/admin/online` |
|
||||
| `/api/admin/stats` |
|
||||
| `/api/admin/users` |
|
||||
| `/api/admin/users/:id` |
|
||||
| `/api/admin/users/:id/block` |
|
||||
| `/api/admin/users/:id/unblock` |
|
||||
| `/api/auth/yandex/callback` |
|
||||
| `/api/auth/yandex/start` |
|
||||
| `/api/billing` |
|
||||
| `/api/billing/topup` |
|
||||
| `/api/cabinet/links` |
|
||||
| `/api/cabinet/links/:email` |
|
||||
| `/api/channels` |
|
||||
| `/api/devices` |
|
||||
| `/api/devices/:imei` |
|
||||
| `/api/devices/bind` |
|
||||
| `/api/energy/series` |
|
||||
| `/api/entities` |
|
||||
| `/api/events` |
|
||||
| `/api/health` |
|
||||
| `/api/login` |
|
||||
| `/api/me` |
|
||||
| `/api/tracks/:id` |
|
||||
|
||||
## Межсервисные связи (упоминания)
|
||||
`Afanasov-smart`, `Heritage`, `KPgenerator`, `agro-panel`, `banya-bot`, `cascade`, `cascade-de-ru`, `claude-memory`, `delodecor`, `finik`, `gate`, `gate-web-relay`, `home-router`, `homeassistant-backup`, `influx`, `lilia-ee-media-router`, `matrix-migration`, `media-projects`, `mesh1-status`, `mesh2-status`, `mosquitto`, `mpo-inform-site`, `ops-configs`, `orbit-bot`, `orbit-kameliya`, `router-koval`, `ru2`, `ru3`, `servaki-gps-monitoring`, `servaki-infra`, `servaki.online`, `smartlight-panel`, `tempelhoff-pbx`, `traccar`, `user-bitarov`, `user-mobile-wa`, `vm-mts`, `vpn-clients`, `vpn-vps-ruslan`
|
||||
|
||||
## Тех-долг (предположения — точность через codebase-memory-mcp)
|
||||
- Dead-code/дубли автоматически грепом не определяются надёжно → задача Лилии (MCP).
|
||||
|
||||
## TODO для Лилии (codebase-memory-mcp)
|
||||
- `index` репо через MCP; `get_architecture` (точные слои); dead-code detection; cross-service links (точные вызовы); снапшот `graph.db.zst` рядом с этим MAP.md.
|
||||
Submodule site-delodecor-ru deleted from 082d0d26d1
@@ -0,0 +1,30 @@
|
||||
# site-delodecor-ru
|
||||
|
||||
> Структурная авто-карта (греп-анализ, без codebase-memory-mcp). Семантику (call-graph/dead-code) дополнит Лилия — см. `../HANDOFF-lilia.md`.
|
||||
|
||||
## Назначение
|
||||
**Сайт:** https://delodecor.ru
|
||||
|
||||
## Метрики
|
||||
Язык: **Markdown** · LOC: **0** · файлов: 1 · модулей: 0
|
||||
|
||||
## Архитектура (модули)
|
||||
```mermaid
|
||||
graph TD
|
||||
R[site-delodecor-ru]
|
||||
|
||||
```
|
||||
|
||||
## Entry-points / маршруты
|
||||
| Маршрут |
|
||||
|---|
|
||||
| _(маршрутов не найдено грепом)_ |
|
||||
|
||||
## Межсервисные связи (упоминания)
|
||||
_нет_
|
||||
|
||||
## Тех-долг (предположения — точность через codebase-memory-mcp)
|
||||
- Dead-code/дубли автоматически грепом не определяются надёжно → задача Лилии (MCP).
|
||||
|
||||
## TODO для Лилии (codebase-memory-mcp)
|
||||
- `index` репо через MCP; `get_architecture` (точные слои); dead-code detection; cross-service links (точные вызовы); снапшот `graph.db.zst` рядом с этим MAP.md.
|
||||
Submodule site-eba-sh-ru deleted from 3dba769dad
@@ -0,0 +1,30 @@
|
||||
# site-eba-sh-ru
|
||||
|
||||
> Структурная авто-карта (греп-анализ, без codebase-memory-mcp). Семантику (call-graph/dead-code) дополнит Лилия — см. `../HANDOFF-lilia.md`.
|
||||
|
||||
## Назначение
|
||||
**Сайт:** https://eba-sh.ru
|
||||
|
||||
## Метрики
|
||||
Язык: **Markdown** · LOC: **0** · файлов: 1 · модулей: 0
|
||||
|
||||
## Архитектура (модули)
|
||||
```mermaid
|
||||
graph TD
|
||||
R[site-eba-sh-ru]
|
||||
|
||||
```
|
||||
|
||||
## Entry-points / маршруты
|
||||
| Маршрут |
|
||||
|---|
|
||||
| _(маршрутов не найдено грепом)_ |
|
||||
|
||||
## Межсервисные связи (упоминания)
|
||||
_нет_
|
||||
|
||||
## Тех-долг (предположения — точность через codebase-memory-mcp)
|
||||
- Dead-code/дубли автоматически грепом не определяются надёжно → задача Лилии (MCP).
|
||||
|
||||
## TODO для Лилии (codebase-memory-mcp)
|
||||
- `index` репо через MCP; `get_architecture` (точные слои); dead-code detection; cross-service links (точные вызовы); снапшот `graph.db.zst` рядом с этим MAP.md.
|
||||
Submodule site-egida1-ru deleted from bbcaaa7c44
@@ -0,0 +1,30 @@
|
||||
# site-egida1-ru
|
||||
|
||||
> Структурная авто-карта (греп-анализ, без codebase-memory-mcp). Семантику (call-graph/dead-code) дополнит Лилия — см. `../HANDOFF-lilia.md`.
|
||||
|
||||
## Назначение
|
||||
**Сайт:** https://egida1.ru
|
||||
|
||||
## Метрики
|
||||
Язык: **Markdown** · LOC: **0** · файлов: 1 · модулей: 0
|
||||
|
||||
## Архитектура (модули)
|
||||
```mermaid
|
||||
graph TD
|
||||
R[site-egida1-ru]
|
||||
|
||||
```
|
||||
|
||||
## Entry-points / маршруты
|
||||
| Маршрут |
|
||||
|---|
|
||||
| _(маршрутов не найдено грепом)_ |
|
||||
|
||||
## Межсервисные связи (упоминания)
|
||||
_нет_
|
||||
|
||||
## Тех-долг (предположения — точность через codebase-memory-mcp)
|
||||
- Dead-code/дубли автоматически грепом не определяются надёжно → задача Лилии (MCP).
|
||||
|
||||
## TODO для Лилии (codebase-memory-mcp)
|
||||
- `index` репо через MCP; `get_architecture` (точные слои); dead-code detection; cross-service links (точные вызовы); снапшот `graph.db.zst` рядом с этим MAP.md.
|
||||
Submodule site-ermashova26-ru deleted from fd638f7f56
@@ -0,0 +1,30 @@
|
||||
# site-ermashova26-ru
|
||||
|
||||
> Структурная авто-карта (греп-анализ, без codebase-memory-mcp). Семантику (call-graph/dead-code) дополнит Лилия — см. `../HANDOFF-lilia.md`.
|
||||
|
||||
## Назначение
|
||||
**Сайт:** https://ermashova26.ru
|
||||
|
||||
## Метрики
|
||||
Язык: **Markdown** · LOC: **0** · файлов: 1 · модулей: 0
|
||||
|
||||
## Архитектура (модули)
|
||||
```mermaid
|
||||
graph TD
|
||||
R[site-ermashova26-ru]
|
||||
|
||||
```
|
||||
|
||||
## Entry-points / маршруты
|
||||
| Маршрут |
|
||||
|---|
|
||||
| _(маршрутов не найдено грепом)_ |
|
||||
|
||||
## Межсервисные связи (упоминания)
|
||||
_нет_
|
||||
|
||||
## Тех-долг (предположения — точность через codebase-memory-mcp)
|
||||
- Dead-code/дубли автоматически грепом не определяются надёжно → задача Лилии (MCP).
|
||||
|
||||
## TODO для Лилии (codebase-memory-mcp)
|
||||
- `index` репо через MCP; `get_architecture` (точные слои); dead-code detection; cross-service links (точные вызовы); снапшот `graph.db.zst` рядом с этим MAP.md.
|
||||
Submodule site-idea-s-ru deleted from 2e2f382ea4
@@ -0,0 +1,30 @@
|
||||
# site-idea-s-ru
|
||||
|
||||
> Структурная авто-карта (греп-анализ, без codebase-memory-mcp). Семантику (call-graph/dead-code) дополнит Лилия — см. `../HANDOFF-lilia.md`.
|
||||
|
||||
## Назначение
|
||||
**Сайт:** https://idea-s.ru
|
||||
|
||||
## Метрики
|
||||
Язык: **Markdown** · LOC: **0** · файлов: 1 · модулей: 0
|
||||
|
||||
## Архитектура (модули)
|
||||
```mermaid
|
||||
graph TD
|
||||
R[site-idea-s-ru]
|
||||
|
||||
```
|
||||
|
||||
## Entry-points / маршруты
|
||||
| Маршрут |
|
||||
|---|
|
||||
| _(маршрутов не найдено грепом)_ |
|
||||
|
||||
## Межсервисные связи (упоминания)
|
||||
_нет_
|
||||
|
||||
## Тех-долг (предположения — точность через codebase-memory-mcp)
|
||||
- Dead-code/дубли автоматически грепом не определяются надёжно → задача Лилии (MCP).
|
||||
|
||||
## TODO для Лилии (codebase-memory-mcp)
|
||||
- `index` репо через MCP; `get_architecture` (точные слои); dead-code detection; cross-service links (точные вызовы); снапшот `graph.db.zst` рядом с этим MAP.md.
|
||||
Submodule site-mpo-inform-ru deleted from 12c623e13a
@@ -0,0 +1,30 @@
|
||||
# site-mpo-inform-ru
|
||||
|
||||
> Структурная авто-карта (греп-анализ, без codebase-memory-mcp). Семантику (call-graph/dead-code) дополнит Лилия — см. `../HANDOFF-lilia.md`.
|
||||
|
||||
## Назначение
|
||||
**Сайт:** https://mpo-inform.ru
|
||||
|
||||
## Метрики
|
||||
Язык: **Markdown** · LOC: **0** · файлов: 1 · модулей: 0
|
||||
|
||||
## Архитектура (модули)
|
||||
```mermaid
|
||||
graph TD
|
||||
R[site-mpo-inform-ru]
|
||||
|
||||
```
|
||||
|
||||
## Entry-points / маршруты
|
||||
| Маршрут |
|
||||
|---|
|
||||
| _(маршрутов не найдено грепом)_ |
|
||||
|
||||
## Межсервисные связи (упоминания)
|
||||
_нет_
|
||||
|
||||
## Тех-долг (предположения — точность через codebase-memory-mcp)
|
||||
- Dead-code/дубли автоматически грепом не определяются надёжно → задача Лилии (MCP).
|
||||
|
||||
## TODO для Лилии (codebase-memory-mcp)
|
||||
- `index` репо через MCP; `get_architecture` (точные слои); dead-code detection; cross-service links (точные вызовы); снапшот `graph.db.zst` рядом с этим MAP.md.
|
||||
Submodule site-mpoinform-ru deleted from ad73eaf37f
@@ -0,0 +1,30 @@
|
||||
# site-mpoinform-ru
|
||||
|
||||
> Структурная авто-карта (греп-анализ, без codebase-memory-mcp). Семантику (call-graph/dead-code) дополнит Лилия — см. `../HANDOFF-lilia.md`.
|
||||
|
||||
## Назначение
|
||||
**Сайт:** https://mpoinform.ru
|
||||
|
||||
## Метрики
|
||||
Язык: **Markdown** · LOC: **0** · файлов: 1 · модулей: 0
|
||||
|
||||
## Архитектура (модули)
|
||||
```mermaid
|
||||
graph TD
|
||||
R[site-mpoinform-ru]
|
||||
|
||||
```
|
||||
|
||||
## Entry-points / маршруты
|
||||
| Маршрут |
|
||||
|---|
|
||||
| _(маршрутов не найдено грепом)_ |
|
||||
|
||||
## Межсервисные связи (упоминания)
|
||||
_нет_
|
||||
|
||||
## Тех-долг (предположения — точность через codebase-memory-mcp)
|
||||
- Dead-code/дубли автоматически грепом не определяются надёжно → задача Лилии (MCP).
|
||||
|
||||
## TODO для Лилии (codebase-memory-mcp)
|
||||
- `index` репо через MCP; `get_architecture` (точные слои); dead-code detection; cross-service links (точные вызовы); снапшот `graph.db.zst` рядом с этим MAP.md.
|
||||
Submodule site-servaki-online deleted from bf6c5edcf1
@@ -0,0 +1,30 @@
|
||||
# site-servaki-online
|
||||
|
||||
> Структурная авто-карта (греп-анализ, без codebase-memory-mcp). Семантику (call-graph/dead-code) дополнит Лилия — см. `../HANDOFF-lilia.md`.
|
||||
|
||||
## Назначение
|
||||
**Сайт:** https://servaki.online
|
||||
|
||||
## Метрики
|
||||
Язык: **Markdown** · LOC: **0** · файлов: 1 · модулей: 0
|
||||
|
||||
## Архитектура (модули)
|
||||
```mermaid
|
||||
graph TD
|
||||
R[site-servaki-online]
|
||||
|
||||
```
|
||||
|
||||
## Entry-points / маршруты
|
||||
| Маршрут |
|
||||
|---|
|
||||
| _(маршрутов не найдено грепом)_ |
|
||||
|
||||
## Межсервисные связи (упоминания)
|
||||
_нет_
|
||||
|
||||
## Тех-долг (предположения — точность через codebase-memory-mcp)
|
||||
- Dead-code/дубли автоматически грепом не определяются надёжно → задача Лилии (MCP).
|
||||
|
||||
## TODO для Лилии (codebase-memory-mcp)
|
||||
- `index` репо через MCP; `get_architecture` (точные слои); dead-code detection; cross-service links (точные вызовы); снапшот `graph.db.zst` рядом с этим MAP.md.
|
||||
Submodule site-tempelhoff-ru deleted from 0303d03995
@@ -0,0 +1,30 @@
|
||||
# site-tempelhoff-ru
|
||||
|
||||
> Структурная авто-карта (греп-анализ, без codebase-memory-mcp). Семантику (call-graph/dead-code) дополнит Лилия — см. `../HANDOFF-lilia.md`.
|
||||
|
||||
## Назначение
|
||||
**Сайт:** https://tempelhoff.ru
|
||||
|
||||
## Метрики
|
||||
Язык: **Markdown** · LOC: **0** · файлов: 1 · модулей: 0
|
||||
|
||||
## Архитектура (модули)
|
||||
```mermaid
|
||||
graph TD
|
||||
R[site-tempelhoff-ru]
|
||||
|
||||
```
|
||||
|
||||
## Entry-points / маршруты
|
||||
| Маршрут |
|
||||
|---|
|
||||
| _(маршрутов не найдено грепом)_ |
|
||||
|
||||
## Межсервисные связи (упоминания)
|
||||
_нет_
|
||||
|
||||
## Тех-долг (предположения — точность через codebase-memory-mcp)
|
||||
- Dead-code/дубли автоматически грепом не определяются надёжно → задача Лилии (MCP).
|
||||
|
||||
## TODO для Лилии (codebase-memory-mcp)
|
||||
- `index` репо через MCP; `get_architecture` (точные слои); dead-code detection; cross-service links (точные вызовы); снапшот `graph.db.zst` рядом с этим MAP.md.
|
||||
Submodule smartlight-panel deleted from 61199ff442
@@ -0,0 +1,47 @@
|
||||
# smartlight-panel
|
||||
|
||||
> Структурная авто-карта (греп-анализ, без codebase-memory-mcp). Семантику (call-graph/dead-code) дополнит Лилия — см. `../HANDOFF-lilia.md`.
|
||||
|
||||
## Назначение
|
||||
SmartLight Panel v3.2.0
|
||||
|
||||
## Метрики
|
||||
Язык: **Markdown** · LOC: **1665** · файлов: 23 · модулей: 6
|
||||
|
||||
## Архитектура (модули)
|
||||
```mermaid
|
||||
graph TD
|
||||
R[smartlight-panel]
|
||||
R --> backend["backend"]
|
||||
R --> configs["configs"]
|
||||
R --> credentials["credentials"]
|
||||
R --> deploy_status["deploy-status"]
|
||||
R --> frontend["frontend"]
|
||||
R --> scripts["scripts"]
|
||||
```
|
||||
|
||||
## Entry-points / маршруты
|
||||
| Маршрут |
|
||||
|---|
|
||||
| `/api/auth/session` |
|
||||
| `/api/devices` |
|
||||
| `/api/devices/:id` |
|
||||
| `/api/devices/:id/ch/:ch/brightness` |
|
||||
| `/api/devices/:id/ch/:ch/mode` |
|
||||
| `/api/devices/:id/ch/:ch/timer` |
|
||||
| `/api/devices/:id/ch/:ch/toggle` |
|
||||
| `/api/devices/:id/rename` |
|
||||
| `/api/devices/:id/visibility` |
|
||||
| `/api/health` |
|
||||
| `/api/lines` |
|
||||
| `/api/sun-schedule` |
|
||||
| `/api/weather` |
|
||||
|
||||
## Межсервисные связи (упоминания)
|
||||
_нет_
|
||||
|
||||
## Тех-долг (предположения — точность через codebase-memory-mcp)
|
||||
- Dead-code/дубли автоматически грепом не определяются надёжно → задача Лилии (MCP).
|
||||
|
||||
## TODO для Лилии (codebase-memory-mcp)
|
||||
- `index` репо через MCP; `get_architecture` (точные слои); dead-code detection; cross-service links (точные вызовы); снапшот `graph.db.zst` рядом с этим MAP.md.
|
||||
Submodule tempelhoff-pbx deleted from 0d5f4230bc
@@ -0,0 +1,30 @@
|
||||
# tempelhoff-pbx
|
||||
|
||||
> Структурная авто-карта (греп-анализ, без codebase-memory-mcp). Семантику (call-graph/dead-code) дополнит Лилия — см. `../HANDOFF-lilia.md`.
|
||||
|
||||
## Назначение
|
||||
MikoPBX backup 2026-06-12T23:56:44Z | ver 2024.1.114
|
||||
|
||||
## Метрики
|
||||
Язык: **SQL** · LOC: **0** · файлов: 6 · модулей: 0
|
||||
|
||||
## Архитектура (модули)
|
||||
```mermaid
|
||||
graph TD
|
||||
R[tempelhoff-pbx]
|
||||
|
||||
```
|
||||
|
||||
## Entry-points / маршруты
|
||||
| Маршрут |
|
||||
|---|
|
||||
| _(маршрутов не найдено грепом)_ |
|
||||
|
||||
## Межсервисные связи (упоминания)
|
||||
_нет_
|
||||
|
||||
## Тех-долг (предположения — точность через codebase-memory-mcp)
|
||||
- Dead-code/дубли автоматически грепом не определяются надёжно → задача Лилии (MCP).
|
||||
|
||||
## TODO для Лилии (codebase-memory-mcp)
|
||||
- `index` репо через MCP; `get_architecture` (точные слои); dead-code detection; cross-service links (точные вызовы); снапшот `graph.db.zst` рядом с этим MAP.md.
|
||||
-1
Submodule user-bitarov deleted from 6d4300f1a1
@@ -0,0 +1,31 @@
|
||||
# user-bitarov
|
||||
|
||||
> Структурная авто-карта (греп-анализ, без codebase-memory-mcp). Семантику (call-graph/dead-code) дополнит Лилия — см. `../HANDOFF-lilia.md`.
|
||||
|
||||
## Назначение
|
||||
Николай Битаров — аккаунты прокси
|
||||
|
||||
## Метрики
|
||||
Язык: **Markdown** · LOC: **0** · файлов: 10 · модулей: 2
|
||||
|
||||
## Архитектура (модули)
|
||||
```mermaid
|
||||
graph TD
|
||||
R[user-bitarov]
|
||||
R --> AmneziaWG["AmneziaWG"]
|
||||
R --> VLESS["VLESS"]
|
||||
```
|
||||
|
||||
## Entry-points / маршруты
|
||||
| Маршрут |
|
||||
|---|
|
||||
| _(маршрутов не найдено грепом)_ |
|
||||
|
||||
## Межсервисные связи (упоминания)
|
||||
_нет_
|
||||
|
||||
## Тех-долг (предположения — точность через codebase-memory-mcp)
|
||||
- Dead-code/дубли автоматически грепом не определяются надёжно → задача Лилии (MCP).
|
||||
|
||||
## TODO для Лилии (codebase-memory-mcp)
|
||||
- `index` репо через MCP; `get_architecture` (точные слои); dead-code detection; cross-service links (точные вызовы); снапшот `graph.db.zst` рядом с этим MAP.md.
|
||||
Submodule user-mobile-wa deleted from 2249605e6f
@@ -0,0 +1,30 @@
|
||||
# user-mobile-wa
|
||||
|
||||
> Структурная авто-карта (греп-анализ, без codebase-memory-mcp). Семантику (call-graph/dead-code) дополнит Лилия — см. `../HANDOFF-lilia.md`.
|
||||
|
||||
## Назначение
|
||||
Мобильный WhatsApp — AmneziaWG (вход ru1 RU → выход FI)
|
||||
|
||||
## Метрики
|
||||
Язык: **Markdown** · LOC: **0** · файлов: 2 · модулей: 0
|
||||
|
||||
## Архитектура (модули)
|
||||
```mermaid
|
||||
graph TD
|
||||
R[user-mobile-wa]
|
||||
|
||||
```
|
||||
|
||||
## Entry-points / маршруты
|
||||
| Маршрут |
|
||||
|---|
|
||||
| _(маршрутов не найдено грепом)_ |
|
||||
|
||||
## Межсервисные связи (упоминания)
|
||||
_нет_
|
||||
|
||||
## Тех-долг (предположения — точность через codebase-memory-mcp)
|
||||
- Dead-code/дубли автоматически грепом не определяются надёжно → задача Лилии (MCP).
|
||||
|
||||
## TODO для Лилии (codebase-memory-mcp)
|
||||
- `index` репо через MCP; `get_architecture` (точные слои); dead-code detection; cross-service links (точные вызовы); снапшот `graph.db.zst` рядом с этим MAP.md.
|
||||
-1
Submodule vpn-clients deleted from b6c4e05cca
@@ -0,0 +1,30 @@
|
||||
# vpn-clients
|
||||
|
||||
> Структурная авто-карта (греп-анализ, без codebase-memory-mcp). Семантику (call-graph/dead-code) дополнит Лилия — см. `../HANDOFF-lilia.md`.
|
||||
|
||||
## Назначение
|
||||
Каталог клиентских приложений (VPN / Proxy)
|
||||
|
||||
## Метрики
|
||||
Язык: **Markdown** · LOC: **0** · файлов: 2 · модулей: 1
|
||||
|
||||
## Архитектура (модули)
|
||||
```mermaid
|
||||
graph TD
|
||||
R[vpn-clients]
|
||||
R --> docs["docs"]
|
||||
```
|
||||
|
||||
## Entry-points / маршруты
|
||||
| Маршрут |
|
||||
|---|
|
||||
| _(маршрутов не найдено грепом)_ |
|
||||
|
||||
## Межсервисные связи (упоминания)
|
||||
_нет_
|
||||
|
||||
## Тех-долг (предположения — точность через codebase-memory-mcp)
|
||||
- Dead-code/дубли автоматически грепом не определяются надёжно → задача Лилии (MCP).
|
||||
|
||||
## TODO для Лилии (codebase-memory-mcp)
|
||||
- `index` репо через MCP; `get_architecture` (точные слои); dead-code detection; cross-service links (точные вызовы); снапшот `graph.db.zst` рядом с этим MAP.md.
|
||||
Submodule vpn-vps-ruslan deleted from 5a4f011901
@@ -0,0 +1,30 @@
|
||||
# vpn-vps-ruslan
|
||||
|
||||
> Структурная авто-карта (греп-анализ, без codebase-memory-mcp). Семантику (call-graph/dead-code) дополнит Лилия — см. `../HANDOFF-lilia.md`.
|
||||
|
||||
## Назначение
|
||||
Репозиторий vpn-vps-ruslan (Markdown), 1 файлов.
|
||||
|
||||
## Метрики
|
||||
Язык: **Markdown** · LOC: **0** · файлов: 1 · модулей: 0
|
||||
|
||||
## Архитектура (модули)
|
||||
```mermaid
|
||||
graph TD
|
||||
R[vpn-vps-ruslan]
|
||||
|
||||
```
|
||||
|
||||
## Entry-points / маршруты
|
||||
| Маршрут |
|
||||
|---|
|
||||
| _(маршрутов не найдено грепом)_ |
|
||||
|
||||
## Межсервисные связи (упоминания)
|
||||
_нет_
|
||||
|
||||
## Тех-долг (предположения — точность через codebase-memory-mcp)
|
||||
- Dead-code/дубли автоматически грепом не определяются надёжно → задача Лилии (MCP).
|
||||
|
||||
## TODO для Лилии (codebase-memory-mcp)
|
||||
- `index` репо через MCP; `get_architecture` (точные слои); dead-code detection; cross-service links (точные вызовы); снапшот `graph.db.zst` рядом с этим MAP.md.
|
||||
Reference in New Issue
Block a user