Bridge Coach memory brief with project metrics summaries.

Add Performance Summary block to memory brief, document metrics synthesis in
agent-coach, and add e2e and CLI tests for qualitative plus quantitative briefs.
This commit is contained in:
2026-06-16 01:46:51 +02:00
parent 2711a3ebcc
commit 04fdc249f5
7 changed files with 134 additions and 7 deletions

View File

@@ -21,6 +21,36 @@ def _parse_timestamp(value: str) -> datetime:
return datetime.fromisoformat(normalized)
_TREND_ARROWS = {"up": "", "down": "", "stable": "", "unknown": "?"}
def performance_summary_markdown(summary: Dict[str, Any]) -> str:
"""Format ADR-004 summary.json as a Coach brief markdown section."""
if not summary or summary.get("execution_count", 0) == 0:
return ""
trend = summary.get("trend", {})
success_trend = trend.get("success_rate", "unknown")
quality_trend = trend.get("quality_score", "unknown")
lines = [
"## Performance Summary",
"",
f"- Executions: {summary['execution_count']}",
(
f"- Success rate: {summary['success_rate']:.1%} "
f"({_TREND_ARROWS.get(success_trend, '?')} {success_trend})"
),
f"- Avg quality: {summary['avg_quality_score']:.2f} "
f"({_TREND_ARROWS.get(quality_trend, '?')} {quality_trend})",
f"- Avg execution time: {summary['avg_execution_time_s']:.1f}s",
]
if summary.get("last_execution"):
lines.append(f"- Last execution: {summary['last_execution']}")
lines.append("")
return "\n".join(lines)
def _trend_direction(recent: List[float], prior: List[float]) -> str:
if not recent:
return "unknown"