c57d6942364d5779bd09be02063419c331617438
## What's implemented
### Go Gateway — New /api/swarm/* endpoints (handlers.go + docker/client.go + db.go)
- GET /api/swarm/info — swarm state, manager address, join tokens
- GET /api/swarm/nodes — live node list (hostname, IP, CPU, RAM, role, labels)
- POST /api/swarm/nodes/{id}/label — add/update node label
- POST /api/swarm/nodes/{id}/availability — set node availability (active|pause|drain)
- GET /api/swarm/services — all swarm services with replica counts
- POST /api/swarm/services/create — deploy a new agent as a swarm service
- GET /api/swarm/services/{id}/tasks — tasks per service (which node runs which replica)
- POST /api/swarm/services/{id}/scale — scale replicas
- GET /api/swarm/join-token — worker/manager join command with token + manager addr
- POST /api/swarm/shell — execute commands on the HOST via nsenter PID 1
### Docker client (client.go)
- ListServices, GetService, ScaleService, ListServiceTasks, CreateAgentService
- AddNodeLabel, UpdateNodeAvailability (patch node spec via Docker API)
- ExecOnHost (nsenter -t 1 → falls back to container scope)
### DB persistence (db.go)
- UpsertSwarmNodes — stores live node state to swarmNodes table
- UpsertSwarmTokens / GetSwarmTokens — persist join tokens
- Startup goroutine in main.go syncs tokens to DB on gateway start
### Node.js tRPC wrappers (routers.ts + gateway-proxy.ts)
- nodes.swarmInfo, nodes.list, nodes.services, nodes.serviceTasks
- nodes.scaleService, nodes.joinToken, nodes.execShell
- nodes.addNodeLabel, nodes.setAvailability, nodes.deployAgentService
### Frontend — Nodes.tsx (complete rewrite)
- Real swarm overview cards (nodes, managers, services, running tasks)
- Join token cards with copy button for worker & manager tokens
- Node cards with inline availability selector (active/pause/drain) + add-label form
- Services table with Scale dialog + Tasks drawer (replica → node mapping)
- Deploy Agent dialog (image, replicas, env vars, published port)
- Host Shell tab with command history and quick-command buttons
### docker-compose.yml
- gateway now runs with privileged: true + pid: host
→ nsenter can access the host PID namespace for real host-level shell execution
## Verified end-to-end
- GET /api/swarm/info returns manager addr + join tokens ✓
- GET /api/swarm/nodes returns node wsm (2 cores, 3.9 GB) ✓
- POST /api/swarm/services/create → deployed goclaw-test-agent (2 replicas) ✓
- GET /api/swarm/services/{id}/tasks returns task list with nodeId ✓
- POST /api/swarm/services/{id}/scale → scale to 0 ✓
- POST /api/swarm/shell {command:'docker node ls'} → real host output ✓
- tRPC chain: browser → control-center → gateway → docker.sock ✓
GoClaw Control Center
Mission Control для вашего AI-агентского кластера. Веб-интерфейс для мониторинга Docker Swarm, управления AI-агентами и общения с оркестратором через реальный LLM (Ollama Cloud API).
Запуск одной командой
curl -fsSL https://git.softuniq.eu/UniqAI/GoClaw/raw/branch/main/install.sh | bash
Или вручную через Docker Compose:
git clone https://git.softuniq.eu/UniqAI/GoClaw.git && cd GoClaw && cp .env.example .env && docker compose up -d
После запуска откройте: http://localhost:3000
Быстрый старт (без Docker)
# 1. Клонировать репозиторий
git clone https://git.softuniq.eu/UniqAI/GoClaw.git
cd GoClaw
# 2. Установить зависимости
pnpm install
# 3. Настроить переменные окружения
cp .env.example .env
# Отредактируйте .env — укажите OLLAMA_BASE_URL и OLLAMA_API_KEY
# 4. Запустить базу данных
pnpm db:push
# 5. Запустить dev-сервер
pnpm dev
Архитектура
GoClaw Control Center
├── client/ # React 19 + Tailwind 4 + shadcn/ui (фронтенд)
│ └── src/
│ ├── pages/ # Dashboard, Agents, Nodes, Chat, Settings
│ └── components/ # DashboardLayout, UI-компоненты
├── server/ # Express 4 + tRPC 11 (бэкенд)
│ ├── ollama.ts # Прокси-клиент для Ollama API
│ ├── routers.ts # tRPC роуты (ollama.health, models, chat)
│ └── _core/ # Auth, DB, LLM, Storage хелперы
├── drizzle/ # Схема БД и миграции (MySQL/TiDB)
├── docker/ # Docker Stack для Swarm-деплоя
│ ├── docker-stack.yml # Полный стек: Gateway + Agents + Control Center
│ ├── Dockerfile.gateway # Образ основного шлюза GoClaw
│ ├── Dockerfile.agent # Образ AI-агента
│ └── Dockerfile.control-center # Образ веб-интерфейса (nginx)
└── docs/ # Документация и спецификации
├── swarm_architecture.md
└── goclaw_swarm_cloud_guide.md
Возможности
| Раздел | Что умеет |
|---|---|
| Dashboard | Мониторинг Swarm-нод, статус агентов, лента активности, live-статус Ollama API |
| Agents | Просмотр всех AI-агентов с их ролями, моделями и текущими задачами |
| Nodes | Мониторинг Docker Swarm нод: CPU, RAM, контейнеры, статус |
| Chat | Терминальный чат с оркестратором через реальный LLM (34 модели Ollama) |
| Settings | Управление API-провайдерами, сканирование доступных моделей, настройки Telegram |
Переменные окружения
Скопируйте .env.example в .env и заполните:
# Ollama API (обязательно)
OLLAMA_BASE_URL=https://ollama.com/v1
OLLAMA_API_KEY=your_api_key_here
# База данных (обязательно для production)
DATABASE_URL=mysql://user:password@host:3306/goclaw
# JWT (сгенерируйте случайную строку)
JWT_SECRET=your_random_secret_here
# Telegram Bot (опционально)
TELEGRAM_BOT_TOKEN=your_bot_token
Docker Swarm деплой
# Инициализировать Swarm (если ещё не сделано)
docker swarm init
# Задать секреты
export OLLAMA_API_KEY=your_key
export DATABASE_URL=mysql://...
export JWT_SECRET=your_secret
# Развернуть стек
docker stack deploy -c docker/docker-stack.yml goclaw
# Проверить статус
docker stack services goclaw
Добавление новой ноды в кластер:
# На manager-ноде получить токен
docker swarm join-token worker
# На новой ноде выполнить команду из вывода выше
docker swarm join --token SWMTKN-... manager-ip:2377
Технологический стек
| Слой | Технологии |
|---|---|
| Фронтенд | React 19, Tailwind CSS 4, shadcn/ui, Framer Motion, tRPC Client |
| Бэкенд | Node.js, Express 4, tRPC 11, Drizzle ORM, Zod |
| База данных | MySQL / TiDB (через Drizzle) |
| LLM | Ollama Cloud API (OpenAI-совместимый, 34+ модели) |
| Оркестрация | Docker Swarm, Overlay Network |
| Агенты (Go) | gRPC, Docker SDK, Goroutines, Channels |
| Тесты | Vitest |
Структура GoClaw Swarm
┌─────────────────────────────────┐
│ goclaw-net (Overlay Network) │
└─────────────────────────────────┘
│
┌─────────────────────┼─────────────────────┐
│ │ │
┌─────────▼──────┐ ┌──────────▼──────┐ ┌─────────▼──────┐
│ Control Center │ │ Gateway │ │ Agents │
│ (Web UI :3000) │ │ (Orchestrator) │ │ (Docker Svc) │
│ React + tRPC │ │ Go + gRPC │ │ Coder/Browser │
└────────────────┘ └─────────────────┘ │ Mail/Monitor │
│ └─────────────────┘
┌───────────▼──────────┐
│ Ollama Cloud API │
│ (34 LLM Models) │
└──────────────────────┘
Разработка
# Запустить тесты
pnpm test
# Проверить типы
pnpm check
# Форматировать код
pnpm format
# Применить миграции БД
pnpm db:push
Дорожная карта
- Dashboard с мониторингом кластера
- Реальная интеграция Ollama API (34 модели)
- Терминальный чат с LLM
- Docker Swarm Stack
- gRPC API для агентов (Go)
- Стриминг ответов LLM в чате
- CRUD агентов через UI
- Подключение реального Docker API для нод
- Telegram-коннектор
- Система скиллов (Self-Evolution)
- Аутентификация и RBAC
Лицензия
MIT — используйте свободно для личных и коммерческих проектов.
Разработано в рамках проекта GoClaw — распределённой системы AI-агентов на Go + Docker Swarm.
Description
Languages
TypeScript
86.7%
Go
6.7%
JavaScript
5%
Shell
0.9%
CSS
0.6%