diff --git a/.cursor/rules/noda1-operations.mdc b/.cursor/rules/noda1-operations.mdc index b0ed6a82..003d48eb 100644 --- a/.cursor/rules/noda1-operations.mdc +++ b/.cursor/rules/noda1-operations.mdc @@ -1,7 +1,7 @@ --- description: NODA1 (node1-daarion) — контекст, порти, перевірка агентів, типові виправлення globs: "**/docs/NODA1*.md,**/scripts/node1/**/*.sh,gateway-bot/**/*.py,infra/**/*.yml,NODA1*.md,PROJECT-MASTER-INDEX.md,config/README.md" -alwaysApply: false +alwaysApply: true --- # NODA1 — Операції та контекст @@ -29,7 +29,7 @@ alwaysApply: false | RAG | 9500 | `/health` | | Swapper | 8890 | `/health` | -Контейнери: `dagi-gateway-node1`, `dagi-staging-router` (або `dagi-*-router`), `dagi-memory-service-node1`, `dagi-qdrant-node1`. +Контейнери: `dagi-gateway-node1`, `dagi-router-node1`, `dagi-memory-service-node1`, `dagi-qdrant-node1`, `swapper-service-node1`, `ollama`. ## Перевірка агентів @@ -41,7 +41,7 @@ alwaysApply: false ## Типові виправлення -1. **Router unhealthy** — перезапуск: `docker restart dagi-staging-router` (або актуальна назва контейнера router). +1. **Router unhealthy** — перезапуск: `docker restart dagi-router-node1`. 2. **Gateway не відповідає** — `docker logs dagi-gateway-node1 --tail 100`; при потребі `docker restart dagi-gateway-node1`. 3. **Агент без prompt/token** — перевірити `gateway-bot/http_api.py` (AGENT_REGISTRY) і наявність `*_prompt.txt` та env з токенами на сервері. 4. **Зміни в коді** — задеплоїти на NODA1 (git pull, rebuild, restart відповідних контейнерів згідно з проектом). diff --git a/.cursor/rules/project-context.mdc b/.cursor/rules/project-context.mdc new file mode 100644 index 00000000..5d37d5be --- /dev/null +++ b/.cursor/rules/project-context.mdc @@ -0,0 +1,67 @@ +--- +description: MicroDAO DAARION — головний контекст проєкту (завжди активний) +globs: +alwaysApply: true +--- + +# MicroDAO DAARION — Контекст проєкту + +## Про що цей проєкт + +Платформа DAARION.city — мережа AI-агентів для децентралізованих спільнот (DAO). +13 агентів працюють у Telegram через єдиний стек: Gateway → Router → LLM (DeepSeek API + Ollama/Swapper). + +## Поточний стан + +- **Production сервер**: НОДА1 (Hetzner GEX44, 144.76.224.179) +- **Робоча гілка**: `node1-production-snapshot-2026-02-09` — актуальний production код +- **Стара гілка `main`**: застаріла, НЕ відповідає production +- **GitHub**: github.com/IvanTytar/microdao-daarion + +## Агенти (13 шт.) + +DAARWIZZ, Helion, NUTRA, DRUID, GREENFOOD, AgroMatrix, Alateya, CLAN, EONARCH, Senpai, Sofiia, Soul/Athena, Yaromir + +## Критичні файли + +| Файл | Що це | +|------|-------| +| `PROJECT-MASTER-INDEX.md` | Єдина точка входу до всієї документації | +| `config/agent_registry.yml` | Single Source of Truth для конфігурації агентів | +| `gateway-bot/http_api.py` | Головний код Gateway (164KB, обробка Telegram) | +| `gateway-bot/behavior_policy.py` | SOWA v2.2 — політика відповідей агентів | +| `gateway-bot/*_prompt.txt` | Системні промпти агентів | +| `services/router/main.py` | Router з vision + DeepSeek routing | +| `docker-compose.node1.yml` | Docker Compose для НОДА1 | + +## Як працювати з НОДА1 + +- **SSH**: `sshpass -p '<пароль з .cursor/noda1-credentials.local.mdc>' ssh root@144.76.224.179` +- **Credentials**: `.cursor/noda1-credentials.local.mdc` (НЕ комітити!) +- **Проект на сервері**: `/opt/microdao-daarion/` +- **Детальна інструкція**: `.cursor/rules/noda1-operations.mdc` + +## Контейнери на НОДА1 + +| Контейнер | Сервіс | Порт | +|-----------|--------|------| +| `dagi-gateway-node1` | Telegram Gateway | 9300 | +| `dagi-router-node1` | LLM Router | 9102 (ext) → 8000 (int) | +| `swapper-service-node1` | Model Swapper | 8890 | +| `dagi-memory-service-node1` | Memory Service | 8000 | +| `dagi-qdrant-node1` | Vector DB | 6333 | +| `ollama` | LLM Runtime | 11434 | + +## LLM моделі + +- **DeepSeek API** — основна модель для всіх агентів (deepseek-chat) +- **qwen3-vl-8b** — vision модель (через Swapper /vision) +- **qwen3:8b** — локальна текстова модель (Ollama через Swapper) + +## Правила для AI + +1. **Мова**: відповідай українською +2. **Обережність**: перед змінами на НОДА1 — завжди робити бекап +3. **Не ламати**: ніколи не видаляти контейнери без розуміння наслідків +4. **Документація**: `PROJECT-MASTER-INDEX.md` — головний документ, читай його при потребі +5. **Git**: працюємо на гілці `node1-production-snapshot-*`, не на main diff --git a/.github/workflows/python-services-ci.yml b/.github/workflows/python-services-ci.yml index 2b91e949..15d6ed8c 100644 --- a/.github/workflows/python-services-ci.yml +++ b/.github/workflows/python-services-ci.yml @@ -2,11 +2,13 @@ name: python-services-ci on: push: + branches: [main] paths: - "services/**" - "gateway-bot/**" - ".github/workflows/python-services-ci.yml" pull_request: + branches: [main] paths: - "services/**" - "gateway-bot/**" @@ -33,11 +35,16 @@ jobs: python-version: "3.11" cache: "pip" - - name: Install deps (locked) + - name: Install deps working-directory: ${{ matrix.service }} run: | python -m pip install --upgrade pip - python -m pip install -r requirements.txt -c requirements.lock + if [ -f requirements.lock ]; then + python -m pip install -r requirements.txt -c requirements.lock || \ + python -m pip install -r requirements.txt + else + python -m pip install -r requirements.txt + fi - name: Pip check working-directory: ${{ matrix.service }} diff --git a/.gitignore b/.gitignore index af1e7300..f49e80c7 100644 --- a/.gitignore +++ b/.gitignore @@ -67,3 +67,4 @@ Thumbs.db .cursor/noda1-credentials.local.mdc ._* **/._* +logs/