fffiloni commited on
Commit
92666f1
·
verified ·
1 Parent(s): 79010d8

Upload 4 files

Browse files
Files changed (2) hide show
  1. README.md +9 -1
  2. app.py +2 -1
README.md CHANGED
@@ -133,7 +133,15 @@ See `CHANGELOG_V194.md` for the Model Pre-scan Decision Card UI pass.
133
  See `CHANGELOG_V195.md` for the Runtime CSS Cleanup with Legacy Safety Net pass.
134
 
135
 
136
- Current release: Agentic Space Factory v198.26.124.
 
 
 
 
 
 
 
 
137
 
138
  ## v198.26.124 — Expert Validation UI Polish
139
 
 
133
  See `CHANGELOG_V195.md` for the Runtime CSS Cleanup with Legacy Safety Net pass.
134
 
135
 
136
+ Current release: Agentic Space Factory v198.26.125.
137
+
138
+ ## v198.26.125 — Multi-attempt Agent Recovery Tabs
139
+
140
+ - Active Run now shows structured `Agent recovery` tabs when a run chains multiple Pi repair attempts.
141
+ - Each attempt displays its own diagnosis, decision, patch/rebuild action, revalidation result, signatures, changed files and source links.
142
+ - The UI preserves the selected attempt during live polling and keeps the previous single recovery summary for older runs.
143
+
144
+ See `CHANGELOG_V198_26_125.md`.
145
 
146
  ## v198.26.124 — Expert Validation UI Polish
147
 
app.py CHANGED
@@ -1395,7 +1395,7 @@ def register_custom_routes(fastapi_app: FastAPI) -> None:
1395
  run_id = validate_run_id(run_id)
1396
  bucket_source = user_bucket_source(username=ctx["username"], bucket_name=bucket_name)
1397
  snapshot = _build_live_run_snapshot(run_id, bucket_source=bucket_source, token=ctx["token"], include_heavy=False)
1398
- return JSONResponse({**snapshot["view"], "summary": snapshot["summary"], "state": snapshot["state"], "events": snapshot["events"], "events_recent": snapshot["events"][-100:], "events_count": len(snapshot["events"]), "eval_publish": snapshot["eval_publish"], "final_status_reconciliation": snapshot["bundle"].get("final_status_reconciliation") or {}, "eval_record": snapshot["bundle"].get("eval_record") or {}, "validation_metrics": snapshot["view"].get("validation_metrics") or {}, "run_documents": snapshot["view"].get("run_documents") or snapshot["bundle"].get("run_documents") or [], "space_link_state": snapshot["view"].get("space_link_state") or {}, "runtime_stage_history": snapshot["view"].get("runtime_stage_history") or {}, "space_identity": snapshot["bundle"].get("space_identity") or {}, "links": snapshot["view"].get("links") or {}})
1399
 
1400
  @fastapi_app.post("/api/runs/{run_id}/cancel")
1401
  async def api_cancel_run(request: Request, run_id: str, bucket_name: str = settings.bucket_name): # type: ignore[no-untyped-def]
@@ -1624,6 +1624,7 @@ def register_custom_routes(fastapi_app: FastAPI) -> None:
1624
  "technical_blockers": bundle.get("technical_blockers") or {},
1625
  "repair_decision": bundle.get("repair_decision") or {},
1626
  "blockage": bundle.get("blockage") or {},
 
1627
  "run_documents": view.get("run_documents") or bundle.get("run_documents") or [],
1628
  "validation_metrics": view.get("validation_metrics") or {},
1629
  "post_build_validation_status": bundle.get("post_build_validation_status") or {},
 
1395
  run_id = validate_run_id(run_id)
1396
  bucket_source = user_bucket_source(username=ctx["username"], bucket_name=bucket_name)
1397
  snapshot = _build_live_run_snapshot(run_id, bucket_source=bucket_source, token=ctx["token"], include_heavy=False)
1398
+ return JSONResponse({**snapshot["view"], "summary": snapshot["summary"], "state": snapshot["state"], "events": snapshot["events"], "events_recent": snapshot["events"][-100:], "events_count": len(snapshot["events"]), "repair_attempts": snapshot["bundle"].get("repair_attempts") or {}, "eval_publish": snapshot["eval_publish"], "final_status_reconciliation": snapshot["bundle"].get("final_status_reconciliation") or {}, "eval_record": snapshot["bundle"].get("eval_record") or {}, "validation_metrics": snapshot["view"].get("validation_metrics") or {}, "run_documents": snapshot["view"].get("run_documents") or snapshot["bundle"].get("run_documents") or [], "space_link_state": snapshot["view"].get("space_link_state") or {}, "runtime_stage_history": snapshot["view"].get("runtime_stage_history") or {}, "space_identity": snapshot["bundle"].get("space_identity") or {}, "links": snapshot["view"].get("links") or {}})
1399
 
1400
  @fastapi_app.post("/api/runs/{run_id}/cancel")
1401
  async def api_cancel_run(request: Request, run_id: str, bucket_name: str = settings.bucket_name): # type: ignore[no-untyped-def]
 
1624
  "technical_blockers": bundle.get("technical_blockers") or {},
1625
  "repair_decision": bundle.get("repair_decision") or {},
1626
  "blockage": bundle.get("blockage") or {},
1627
+ "repair_attempts": bundle.get("repair_attempts") or {},
1628
  "run_documents": view.get("run_documents") or bundle.get("run_documents") or [],
1629
  "validation_metrics": view.get("validation_metrics") or {},
1630
  "post_build_validation_status": bundle.get("post_build_validation_status") or {},