From 6bbec7178b345898e5e76f3fdf5b23f1c67749a4 Mon Sep 17 00:00:00 2001 From: serhiimosiiash Date: Fri, 19 Dec 2025 19:45:34 +0200 Subject: [PATCH] System: Integrate Dispatcher and Update Workflow --- .gitea/workflows/agile-squad.yaml | 79 ++++++++++++++++--------------- main.py | 75 +++++++++++++++++------------ 2 files changed, 84 insertions(+), 70 deletions(-) diff --git a/.gitea/workflows/agile-squad.yaml b/.gitea/workflows/agile-squad.yaml index 69c0850..2eec1a9 100644 --- a/.gitea/workflows/agile-squad.yaml +++ b/.gitea/workflows/agile-squad.yaml @@ -8,23 +8,32 @@ on: workflow_dispatch: jobs: - # === АГЕНТ 1: РАНКОВИЙ ЗБІР === + # === АГЕНТ 1: РАНКОВИЙ ЗБІР (STEWARDSHIP) === standup-check: runs-on: ubuntu-latest - container: node:16-bullseye + container: + image: node:16-bullseye steps: - - name: 📞 Check Connectivity - run: | - apt-get update && apt-get install -y curl - curl -f -I https://git.smagentsconsulting.uk/ || exit 1 - echo "✅ Gitea is Alive. Starting the day..." + - name: 📥 Check out repository + uses: actions/checkout@v3 - # === АГЕНТ 2: ОСНОВНА РОБОТА === + - name: 🛠️ Setup Docker Tools + run: | + apt-get update && apt-get install -y curl tar + curl -fsSL https://download.docker.com/linux/static/stable/x86_64/docker-26.1.3.tgz -o docker.tgz + tar xzvf docker.tgz && mv docker/docker /usr/local/bin/ && chmod +x /usr/local/bin/docker + + - name: 🌅 Run Standup Logic + run: | + # Запускаємо Python-код з аргументом --task standup + # Він перевірить диск, змінні оточення і запише статус у JSON + docker compose run --rm antigravity_core python main.py --task standup + + # === АГЕНТ 2: ОСНОВНА РОБОТА (VALUE) === heavy-worker: needs: standup-check runs-on: ubuntu-latest container: - # ВАЖЛИВО: Тільки image, ніяких volumes! image: node:16-bullseye steps: - name: 📥 Check out repository @@ -38,17 +47,14 @@ jobs: - name: 🔨 Run Main Task run: | - # Запускаємо Python-код (поки що просто версію, щоб перевірити запуск) - # Якщо main.py ще не готовий, це не впаде - echo "Starting Agent Core..." - docker compose run --rm antigravity_core python --version + # Запускаємо Worker. Він перевірить, чи успішним був стендап (через JSON) + docker compose run --rm antigravity_core python main.py --task worker - # === АГЕНТ 3: АУДИТОР === + # === АГЕНТ 3: АУДИТОР (QUALITY) === qa-auditor: needs: heavy-worker runs-on: ubuntu-latest container: - # ВАЖЛИВО: Тільки image, ніяких volumes! image: node:16-bullseye steps: - name: 📥 Check out repository @@ -56,38 +62,33 @@ jobs: - name: 🛠️ Setup Docker Tools run: | - apt-get update && apt-get install -y curl tar python3 + apt-get update && apt-get install -y curl tar curl -fsSL https://download.docker.com/linux/static/stable/x86_64/docker-26.1.3.tgz -o docker.tgz tar xzvf docker.tgz && mv docker/docker /usr/local/bin/ && chmod +x /usr/local/bin/docker - - name: 🛡️ Infrastructure Audit + - name: 🛡️ Run QA Audit run: | - if [ -f audit.py ]; then - python3 audit.py - else - echo "Audit script not found, checking docker ps..." - docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Image}}" - fi + # Запускаємо аудит через main.py + docker compose run --rm antigravity_core python main.py --task audit - # === АГЕНТ 4: РЕПОРТЕР === + # === АГЕНТ 4: РЕПОРТЕР (TRANSPARENCY) === scrum-report: if: always() needs: [standup-check, heavy-worker, qa-auditor] runs-on: ubuntu-latest + container: + image: node:16-bullseye steps: - - name: 📢 Daily Report + - name: 📥 Check out repository + uses: actions/checkout@v3 + + - name: 🛠️ Setup Docker Tools run: | - echo "=========================" - echo "📊 SPRINT REPORT" - echo "=========================" - echo "Standup Check: ${{ needs.standup-check.result }}" - echo "Heavy Worker: ${{ needs.heavy-worker.result }}" - echo "QA Audit: ${{ needs.qa-auditor.result }}" - echo "=========================" - - if [ "${{ needs.heavy-worker.result }}" == "success" ]; then - echo "✅ Day Successful. System Stable." - else - echo "❌ Issues Detected! Check logs above." - exit 1 - fi + apt-get update && apt-get install -y curl tar + curl -fsSL https://download.docker.com/linux/static/stable/x86_64/docker-26.1.3.tgz -o docker.tgz + tar xzvf docker.tgz && mv docker/docker /usr/local/bin/ && chmod +x /usr/local/bin/docker + + - name: 📢 Generate Report + run: | + # Репортер збере всі статуси з JSON і виведе звіт + docker compose run --rm antigravity_core python main.py --task report diff --git a/main.py b/main.py index c035037..154b9e9 100644 --- a/main.py +++ b/main.py @@ -1,39 +1,52 @@ -import os -import time -import psycopg2 -import requests +import argparse +import sys +import logging +from modules.squad_logic import MorningStandup, HeavyWorker, QAAuditor, ScrumReport -# Налаштування (беруться з Environment Variables) -DB_HOST = os.getenv("DB_HOST", "postgres") -DB_USER = os.getenv("DB_USER", "postgres") -DB_PASS = os.getenv("DB_PASS", "password") -GRAPHITI_URL = os.getenv("GRAPHITI_URL", "http://graphiti:8000") +# Налаштування логування +logging.basicConfig( + level=logging.INFO, + format='%(asctime)s - [ANTIGRAVITY] - %(levelname)s - %(message)s', + datefmt='%H:%M:%S', + handlers=[logging.StreamHandler(sys.stdout)] +) +logger = logging.getLogger(__name__) -def check_connections(): - print("🕵️ Antigravity Agent: Starting Diagnostics...") +def main(): + parser = argparse.ArgumentParser(description="Antigravity Squad Dispatcher") + parser.add_argument( + "--task", + choices=["standup", "worker", "audit", "report"], + help="Phase of the day to execute" + ) + # Опція для перевірки версії + parser.add_argument("--version", action="store_true", help="Show version") - # 1. Перевірка Graphiti (Пам'ять) - try: - r = requests.get(f"{GRAPHITI_URL}/health", timeout=3) - if r.status_code == 200: - print(f"✅ Graphiti Memory is ONLINE at {GRAPHITI_URL}") - else: - print(f"⚠️ Graphiti returned status {r.status_code}") - except Exception as e: - print(f"❌ Graphiti Connection Failed: {e}") + args = parser.parse_args() + + if args.version: + print("Antigravity Agent v0.3.0 (Squad Architecture)") + sys.exit(0) + + # Якщо аргумент не передано, за замовчуванням запускаємо worker + # (це забезпечує сумісність, якщо ми випадково запустимо без прапорців) + task = args.task if args.task else "worker" + + logger.info(f"🚀 Starting Antigravity Core. Task: {task.upper()}") - # 2. Перевірка Postgres (База Знань) try: - conn = psycopg2.connect( - host=DB_HOST, user=DB_USER, password=DB_PASS, dbname="postgres" - ) - print("✅ Postgres Database is CONNECTED") - conn.close() + if task == "standup": + MorningStandup().run() + elif task == "worker": + HeavyWorker().run() + elif task == "audit": + QAAuditor().run() + elif task == "report": + ScrumReport().run() + except Exception as e: - print(f"❌ Postgres Connection Failed: {e}") + logger.error(f"❌ CRITICAL FAILURE in {task}: {e}") + sys.exit(1) if __name__ == "__main__": - while True: - check_connections() - print("💤 Sleeping for 60 seconds...") - time.sleep(60) \ No newline at end of file + main() \ No newline at end of file