# DAGI Stack **Decentralized Agentic Gateway Infrastructure** Production-ready AI router with multi-agent orchestration, microDAO governance, and bot gateway integration. [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) [![Docker](https://img.shields.io/badge/docker-ready-blue.svg)](https://www.docker.com/) [![Python 3.11+](https://img.shields.io/badge/python-3.11+-blue.svg)](https://www.python.org/) --- ## πŸ—οΈ Architecture ``` β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ Bot Gateway β”‚ β”‚ (Telegram/Discord) β”‚ β”‚ Port: 9300 β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ ↓ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ DAGI Router β”‚ β”‚ (Dynamic Rule-Based Routing) β”‚ β”‚ Port: 9102 β”‚ β””β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”‚ β”‚ ↓ ↓ ↓ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ LLM β”‚ β”‚ DevTools β”‚ β”‚ CrewAI β”‚ β”‚Provider β”‚ β”‚ Backend β”‚ β”‚ Orchestrator β”‚ β”‚ β”‚ β”‚ Port: 8008 β”‚ β”‚ Port: 9010 β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ↑ β”‚ RBAC Context Injection β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ RBAC Service β”‚ β”‚ (Role-Based Access Control) β”‚ β”‚ Port: 9200 β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` ### Core Components | Component | Port | Description | |-----------|------|-------------| | **DAGI Router** | 9102 | Main routing engine with rule-based dispatch | | **Bot Gateway** | 9300 | Telegram/Discord webhook receiver | | **DevTools Backend** | 8008 | File operations, test execution, notebooks | | **CrewAI Orchestrator** | 9010 | Multi-agent workflow execution | | **RBAC Service** | 9200 | Role resolution and access control | | **Ollama** | 11434 | Local LLM (optional) | --- ## πŸš€ Quick Start ### Prerequisites - Docker 20.10+ - Docker Compose 2.0+ - 4GB+ RAM - 10GB+ disk space ### 1. Clone Repository ```bash git clone https://github.com/daarion/dagi-stack.git cd dagi-stack ``` ### 2. Configure Environment ```bash cp .env.example .env # Edit .env with your tokens and settings nano .env ``` **Required variables:** - `TELEGRAM_BOT_TOKEN` - Get from @BotFather - `OLLAMA_BASE_URL` - Local Ollama URL (or use remote LLM) ### 3. Start Services ```bash docker-compose up -d ``` ### 4. Verify Health ```bash ./smoke.sh ``` Or manually: ```bash curl http://localhost:9102/health # Router curl http://localhost:8008/health # DevTools curl http://localhost:9010/health # CrewAI curl http://localhost:9200/health # RBAC curl http://localhost:9300/health # Gateway ``` ### 5. Test Basic Routing ```bash curl -X POST http://localhost:9102/route \ -H "Content-Type: application/json" \ -d '{ "prompt": "Hello from DAGI!", "mode": "chat", "metadata": {} }' ``` --- ## πŸ“¦ Services Overview ### DAGI Router Central routing engine that dispatches requests based on configurable rules: - **Rule-based routing**: Priority-ordered rules match requests to providers - **Multi-provider support**: Ollama, DeepSeek, OpenAI, custom agents - **Metadata enrichment**: Injects context (dao_id, user_id, RBAC roles) - **Timeout handling**: Configurable timeouts with fallback strategies **Key files:** - `main_v2.py` - Entry point - `routing_engine.py` - Core routing logic - `router-config.yml` - Routing rules configuration ### Bot Gateway HTTP server for bot platforms: - **Telegram webhooks**: `/telegram/webhook` - **Discord webhooks**: `/discord/webhook` - **Chat normalization**: Converts platform-specific messages to unified format - **RBAC integration**: Enriches requests with user roles before routing **Key files:** - `gateway-bot/main.py` - `gateway-bot/http_api.py` - `gateway-bot/router_client.py` ### DevTools Backend Tool execution service for development tasks: - **File operations**: Read/write files in workspace - **Test execution**: Run pytest/jest/etc - **Notebook execution**: Jupyter notebook support - **Security**: Path validation, size limits **Endpoints:** - `POST /fs/read` - Read file - `POST /fs/write` - Write file - `POST /ci/run-tests` - Execute tests - `POST /notebook/execute` - Run notebook ### CrewAI Orchestrator Multi-agent workflow execution: - **4 workflows**: - `microdao_onboarding` - Welcome new members - `code_review` - Code quality analysis - `proposal_review` - Governance proposal assessment - `task_decomposition` - Break down complex tasks **Endpoints:** - `POST /workflow/run` - Execute workflow - `GET /workflow/list` - List available workflows ### RBAC Service Role-based access control: - **Roles**: admin, member, contributor, guest - **Entitlements**: Granular permissions per role - **DAO isolation**: Multi-tenancy support **Endpoints:** - `POST /rbac/resolve` - Resolve user role and permissions - `GET /roles` - List all roles --- ## πŸ”§ Configuration ### Routing Rules Edit `router-config.yml` to customize routing behavior: ```yaml routing_rules: - name: "microdao_orchestrator" priority: 5 conditions: mode: "crew" use_provider: "microdao_orchestrator" timeout_ms: 60000 ``` **Rule fields:** - `priority` - Lower = higher priority - `conditions` - Match criteria (mode, prompt patterns, metadata) - `use_provider` - Target provider name - `timeout_ms` - Request timeout ### Environment Variables See `.env.example` for full list. Key variables: ```bash # LLM Configuration OLLAMA_BASE_URL=http://localhost:11434 OLLAMA_MODEL=qwen3:8b # Service Ports ROUTER_PORT=9102 GATEWAY_PORT=9300 # Security RBAC_SECRET_KEY=your-secret-here # Logging LOG_LEVEL=INFO LOG_FORMAT=json ``` --- ## πŸ§ͺ Testing ### Smoke Tests Run basic health checks: ```bash ./smoke.sh ``` ### E2E Tests Test individual components: ```bash ./test-devtools.sh # DevTools integration ./test-crewai.sh # CrewAI workflows ./test-gateway.sh # Gateway + RBAC ``` ### Manual Testing ```bash # Test LLM routing curl -X POST http://localhost:9102/route \ -H "Content-Type: application/json" \ -d '{"prompt": "Test", "mode": "chat", "metadata": {}}' # Test DevTools curl -X POST http://localhost:8008/fs/read \ -H "Content-Type: application/json" \ -d '{"path": "README.md"}' # Test CrewAI curl -X POST http://localhost:9010/workflow/run \ -H "Content-Type: application/json" \ -d '{"workflow_name": "code_review", "inputs": {}}' # Test RBAC curl -X POST http://localhost:9200/rbac/resolve \ -H "Content-Type: application/json" \ -d '{"dao_id": "greenfood-dao", "user_id": "tg:12345"}' ``` --- ## πŸ“Š Monitoring & Logs ### View Logs ```bash # All services docker-compose logs -f # Specific service docker-compose logs -f router docker-compose logs -f gateway ``` ### Structured JSON Logs All services use structured logging: ```json { "timestamp": "2024-11-15T12:00:00Z", "level": "INFO", "service": "router", "message": "Request routed successfully", "request_id": "123e4567-e89b-12d3-a456-426614174000", "user_id": "tg:12345", "dao_id": "greenfood-dao", "duration_ms": 125.5 } ``` ### Health Checks All services expose `/health` endpoint: ```bash curl http://localhost:9102/health ``` --- ## 🚒 Deployment ### Docker Compose (Recommended) ```bash docker-compose up -d ``` ### Kubernetes See [docs/DEPLOYMENT.md](docs/DEPLOYMENT.md) for Kubernetes manifests and Helm charts. ### Systemd For production servers without containers: ```bash sudo cp deploy/systemd/dagi-router.service /etc/systemd/system/ sudo systemctl enable dagi-router sudo systemctl start dagi-router ``` Full deployment guide: [docs/DEPLOYMENT.md](docs/DEPLOYMENT.md) --- ## πŸ›£οΈ Roadmap ### Phase 1: Core Router βœ… - [x] Multi-provider LLM support - [x] Rule-based routing engine - [x] YAML configuration - [x] Basic health checks ### Phase 2: Orchestration βœ… - [x] DevTools integration - [x] CrewAI workflows - [x] Bot gateway (Telegram/Discord) - [x] RBAC service ### Phase 3: Production (Current) - [x] Docker deployment - [x] Structured logging - [x] Smoke test suite - [ ] Prometheus metrics - [ ] CI/CD pipelines ### Phase 4: Governance (Planned) - [ ] On-chain voting integration - [ ] Token-weighted decisions - [ ] Proposal lifecycle management - [ ] Treasury operations ### Phase 5: Scale (Future) - [ ] Horizontal scaling - [ ] Load balancing - [ ] Distributed tracing - [ ] Performance optimization --- ## πŸ“š Documentation - [Architecture Overview](docs/DEPLOYMENT.md#architecture) - [Deployment Guide](docs/DEPLOYMENT.md) - [API Reference](docs/api/) - [Development Guide](docs/development/) --- ## 🀝 Contributing We welcome contributions! Please see [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines. 1. Fork the repository 2. Create feature branch (`git checkout -b feature/amazing-feature`) 3. Commit changes (`git commit -m 'Add amazing feature'`) 4. Push to branch (`git push origin feature/amazing-feature`) 5. Open Pull Request --- ## πŸ“„ License This project is licensed under the MIT License - see [LICENSE](LICENSE) file for details. --- ## πŸ”— Links - **Website**: https://daarion.city - **Documentation**: https://docs.daarion.city - **GitHub**: https://github.com/daarion/dagi-stack - **Discord**: https://discord.gg/daarion --- ## πŸ’¬ Support - **Issues**: https://github.com/daarion/dagi-stack/issues - **Discussions**: https://github.com/daarion/dagi-stack/discussions - **Email**: dev@daarion.city --- **Built with ❀️ by the DAARION Community** --- ## 🎯 First Deployment Ready to deploy? Follow our step-by-step guide: πŸ“– **[First Deployment Guide](FIRST-DEPLOY.md)** - Complete walkthrough for first live deployment **5-step process (15 minutes):** 1. Initial Setup - Configure `.env`, generate secrets 2. Pre-flight Checks - Verify Docker, disk, memory 3. Service Startup - `docker-compose up -d` 4. Health Verification - Run `./smoke.sh` 5. First Real Dialog - Test Telegram bot or curl **Includes:** - Pre-deployment checklist - Troubleshooting guide - Post-deployment verification - Success confirmation criteria --- ## πŸ§ͺ Golden Scenarios After deployment, validate your stack with production scenarios: πŸ“– **[Golden Scenarios Guide](SCENARIOS.md)** - 5 end-to-end test scenarios **Scenarios:** 1. **Basic Chat** - Telegram β†’ Gateway β†’ Router β†’ LLM (5s) 2. **microDAO Onboarding** - CrewAI 3-agent workflow (60s) 3. **DevTools File Operation** - Read/write files (1s) 4. **Code Review** - Multi-agent code analysis (90s) 5. **RBAC Permission Check** - Access control validation (100ms) Each scenario includes: - Setup requirements - Expected flow diagram - Verification commands - Success criteria - Troubleshooting tips