Files
weval-l99/archi-meeting-pipeline.sh
2026-04-13 12:43:21 +02:00

100 lines
3.6 KiB
Bash
Executable File

#!/bin/bash
# ARCHI→MEETING PIPELINE — feeds recommendations to meeting rooms
# Cron: */6h
TS=$(date -Iseconds)
ARCHI=/var/www/html/api/architecture-scanner.php
MEETING_DATA=/var/www/html/api/meeting-archi-agenda.json
LOG=/tmp/archi-meeting-pipeline.log
echo "$TS === ARCHI→MEETING ===" >> $LOG
# 1. Fetch fresh recommendations
RECS=$(curl -sk --max-time 30 'https://127.0.0.1/api/architecture-scanner.php' -H 'Host: weval-consulting.com' 2>/dev/null)
# 2. Parse and assign to squads
python3 << 'PYEND'
import json,sys,time
try:
data = json.loads(open("/dev/stdin").read() if False else "")
except:
import urllib.request,ssl
ctx=ssl._create_unverified_context()
req=urllib.request.Request("https://127.0.0.1/api/architecture-scanner.php",headers={"Host":"weval-consulting.com"})
data=json.loads(urllib.request.urlopen(req,context=ctx,timeout=30).read())
recs = data.get("recommendations", [])
ts = time.strftime("%Y-%m-%dT%H:%M:%S")
# Map categories to squads + agents
SQUAD_MAP = {
"INFRA": {"squad": "infra", "lead": "CORTEX", "agents": ["CORTEX", "Gap Detector"]},
"DOCKER": {"squad": "infra", "lead": "CORTEX", "agents": ["CORTEX"]},
"SECURITY": {"squad": "security", "lead": "Dark Tools", "agents": ["Dark Tools", "CrowdSec"]},
"OPTIMIZATION": {"squad": "ia", "lead": "WEVIA Master", "agents": ["WEVIA Master", "L99"]},
"SCALABILITY": {"squad": "dev", "lead": "NonReg", "agents": ["NonReg", "Evolution"]},
"KNOWLEDGE": {"squad": "ia", "lead": "DeerFlow", "agents": ["DeerFlow", "WEVIA Master"]},
"AI": {"squad": "ia", "lead": "OpenClaw", "agents": ["OpenClaw", "WEVIA Master"]},
}
agenda = {
"ts": ts,
"type": "archi-review",
"title": "Architecture Review — " + ts[:10],
"score": data.get("score", "?"),
"total_recs": len(recs),
"items": [],
"decisions": [],
"actions": []
}
for r in recs:
cat = r.get("category", "INFRA")
sev = r.get("severity", "info")
squad = SQUAD_MAP.get(cat, {"squad": "infra", "lead": "CORTEX", "agents": ["CORTEX"]})
item = {
"severity": sev,
"category": cat,
"title": r.get("title", ""),
"detail": r.get("detail", ""),
"squad": squad["squad"],
"lead": squad["lead"],
"agents": squad["agents"],
"action_type": r.get("action", "manual"),
"fix_cmd": r.get("fix_cmd", ""),
"status": "pending"
}
agenda["items"].append(item)
# Auto-generate decisions based on severity
if sev in ["critical", "warning"]:
agenda["decisions"].append({
"item": r.get("title", ""),
"decision": "FIX IMMEDIATE" if sev == "critical" else "PLANIFIER FIX",
"assigned_to": squad["lead"],
"squad": squad["squad"],
"deadline": "24h" if sev == "critical" else "7j"
})
agenda["actions"].append({
"action": r.get("title", ""),
"agent": squad["lead"],
"type": r.get("action", "manual"),
"cmd": r.get("fix_cmd", ""),
"status": "pending"
})
elif sev in ["info", "opportunity"]:
agenda["decisions"].append({
"item": r.get("title", ""),
"decision": "BACKLOG" if sev == "info" else "OPPORTUNITE",
"assigned_to": squad["lead"],
"squad": squad["squad"],
"deadline": "30j"
})
json.dump(agenda, open("/var/www/html/api/meeting-archi-agenda.json", "w"), indent=2, ensure_ascii=False)
print(f"AGENDA: {len(agenda['items'])} items, {len(agenda['decisions'])} decisions, {len(agenda['actions'])} actions")
PYEND
echo "$TS DONE" >> $LOG