playbook/antigravity-awesome-skills/skills/skill-sentinel/scripts/governance.py

59 lines
1.8 KiB
Python

"""
Auto-governanca do Sentinel.
Registra todas as acoes do sentinel em audit log proprio.
Padrao leve — sem rate limiting (operacoes locais apenas).
"""
from __future__ import annotations
import json
from datetime import datetime, timezone
from typing import Any, Dict, Optional
from db import Database
class SentinelGovernance:
"""Registra acoes do sentinel para auditabilidade."""
def __init__(self, db: Optional[Database] = None):
self.db = db or Database()
self.db.init()
def log_action(self, action: str, params: Optional[Dict] = None, result: Optional[Dict] = None) -> None:
"""Registra uma acao no audit log."""
self.db.log_action(action, params, result)
def log_audit_start(self, skills: list) -> None:
self.log_action("audit_start", {"skills": skills})
def log_audit_complete(self, run_id: int, score: float, findings_count: int) -> None:
self.log_action("audit_complete", {
"run_id": run_id,
"overall_score": score,
"findings_count": findings_count,
})
def log_recommendation(self, suggested_name: str, priority: str) -> None:
self.log_action("recommendation", {
"suggested_name": suggested_name,
"priority": priority,
})
def get_recent_actions(self, limit: int = 20) -> list:
return self.db.get_recent_actions(limit)
# -- CLI -----------------------------------------------------------------------
if __name__ == "__main__":
gov = SentinelGovernance()
actions = gov.get_recent_actions(10)
if not actions:
print("Nenhuma acao registrada.")
else:
print("Ultimas acoes do Sentinel:")
for a in actions:
print(f" [{a['created_at']}] {a['action']}")
if a.get("params"):
print(f" Params: {a['params']}")