# Infrastructure This document describes the physical and logical infrastructure supporting the AITBC development environment. ## Host Environment ### Development Hosts - Primary host: `aitbc1` machine (this workspace) - Sibling host: `aitbc` machine (remote) - Both run Linux (x64) - SSH access configured for repository access ### Repository (Gitea) - URL: `https://gitea.bubuit.net/oib/aitbc` - Worktree: `/root/.openclaw/workspace` - Primary branch: `main` - Feature branches: `/-` or `infrastructure-*` - Issue labels: `task`, `bug`, `feature`, `refactor`, `security`, `good-first-task-for-agent` - Protected branches: `main` requires PR and CI passing (ideally) ## Service Architecture ### Coordinator API - Path: `apps/coordinator-api/` - Runtime: Uvicorn/FastAPI - Port: 8000 - Database: SQLite (`data/coordinator.db`) - Startup: `python -m app.main` within venv - Responsibilities: job marketplace, provider registry, job lifecycle ### Blockchain Node (Brother Chain) - Path: `apps/blockchain-node/` - Runtime: Uvicorn/FastAPI + custom consensus - Port: 8006 (RPC), 8005 (P2P gossip) - Database: SQLite (`data/chain.db`) - Wallet daemon port: 8015 - Startup: `scripts/devnet_up.sh` or systemd service - Responsibilities: ledger, transactions, consensus, wallet management ### AI Provider Daemon - Path: (provided by agents; CLI `aitbc ai serve`) - Runtime: FastAPI + Ollama - Port: 8008 (configurable) - Model: `qwen3:8b` (default) - Responsibilities: serve inference, accept payment, report results ### Redis - Package: `redis-server` - Used for: broadcast/pub-sub messaging (dev only) - Configuration: default local instance - Not production hardened (no auth/TLS by default) ## Build & Package Infrastructure ### Monorepo Layout ``` /root/.openclaw/workspace/ ├── packages/py/ # Python packages (aitbc-core, aitbc-crypto, etc.) ├── apps/ # Service applications │ ├── coordinator-api/ │ └── blockchain-node/ ├── cli/ # Main CLI tool ├── scripts/ # Automation scripts (claim-task, monitor-prs) ├── memory/ # Legacy per-agent hourly logs (migrating to ai-memory/) ├── ai-memory/ # Structured memory (canonical) └── MEMORY.md # Curated long-term notes (to be migrated) ``` ### Build Tools - **Poetry**: for package dependency management (`pyproject.toml`) - **pip (editable)**: `pip install -e ./package` - **pytest**: test runner - **Gitea Actions**: CI pipeline (runs tests on PRs) ### Python Dependencies (Key) - FastAPI, Uvicorn (services) - SQLAlchemy/SQLModel (ORM) - aiosqlite (async SQLite) - aiohttp, websockets, pydantic - Redis client (development) - See `pyproject.toml` files for exact versions ## Automation & Coordination Scripts ### scripts/claim-task.py - Polls unassigned issues with eligible labels - Uses atomic Git branch creation as distributed lock - Creates work branch `/-` - Runs every 5 minutes (cron) ### scripts/monitor-prs.py - Monitors open PRs - Auto-requests review from sibling on own PRs - For sibling's PRs: validates syntax, auto-approves if valid per Ring rules - Monitors CI status; reports failures - Cleans up claim branches on merge/close - Runs every 10 minutes (cron) ### Cron Configuration ``` */5 * * * * cd /root/.openclaw/workspace && /usr/bin/python scripts/claim-task.py */10 * * * * cd /root/.openclaw/workspace && /usr/bin/python scripts/monitor-prs.py ``` ## Configuration Management ### Port Allocations (Standard) - Coordinator API: 8000 - Blockchain RPC: 8006 - Blockchain P2P: 8005 - Wallet Daemon: 8015 - AI Provider: 8008 ### Environment Variables Services may use: - `DATABASE_URL` (default: `sqlite+aiosqlite:///data/app.db`) - `REDIS_URL` (default: `redis://localhost`) - `LOG_LEVEL` (default: `INFO`) - `HOST`, `PORT` (per-service) ### Secrets - Gitea tokens stored in environment (not in repo) - Wallet keys stored in encrypted wallet files (user-managed) - No hardcoded credentials in code ## CI/CD Pipeline 1. PR opened → Gitea Actions trigger 2. Install dependencies (cached) 3. Run linters (if configured) 4. Run test suites for affected packages 5. Report status to PR 6. Block merge if CI failing ## Monitoring & Diagnostics - Health endpoints: `GET /health` on each service - Coordinator jobs: `GET /v1/jobs` for active jobs - Blockchain status: `GET /status` for chain info - Logs: stdout/stderr captured by systemd or Docker ## Network Considerations - Development: all services on localhost or local network - Future production: need TLS for Redis, firewall rules, authentication - P2P gossip over internet requires hole-packing or relay servers - Port mapping must be configured on routers for external access ## Backup & Resilience - SQLite databases stored under `data/`; should be backed up periodically - Git repository serves as code backup; push to remote Gitea - Wallet keys: user responsibility to back up mnemonic/private keys ## Known Issues - Docker Compose detection: some systems only have `docker compose` (v2) not `docker-compose` (v1) - Absolute paths in test scripts (need correction to project-relative) - Starlette Broadcast removed in 0.38 → must pin <0.38 - Redis pub/sub not suitable for internet without auth/TLS (dev-only solution)