feat: finalize production cleanup with structured agent responses and project governance
This commit is contained in:
@@ -31,6 +31,7 @@ class HistoryDB:
|
||||
started_at TEXT,
|
||||
ended_at TEXT,
|
||||
result TEXT,
|
||||
response_json TEXT,
|
||||
error TEXT,
|
||||
steps INTEGER DEFAULT 0,
|
||||
cancelled INTEGER DEFAULT 0,
|
||||
@@ -65,6 +66,9 @@ class HistoryDB:
|
||||
conn.execute(
|
||||
"CREATE INDEX IF NOT EXISTS idx_job_events_job_id_id ON job_events(job_id, id)"
|
||||
)
|
||||
columns = {row[1] for row in conn.execute("PRAGMA table_info(jobs)").fetchall()}
|
||||
if "response_json" not in columns:
|
||||
conn.execute("ALTER TABLE jobs ADD COLUMN response_json TEXT")
|
||||
conn.commit()
|
||||
|
||||
def create_job(
|
||||
@@ -195,6 +199,7 @@ class HistoryDB:
|
||||
"started_at": row["started_at"],
|
||||
"ended_at": row["ended_at"],
|
||||
"result": row["result"],
|
||||
"response": self._parse_response_payload(row["response_json"], row["result"]),
|
||||
"error": row["error"],
|
||||
"steps": row["steps"],
|
||||
"cancelled": bool(row["cancelled"]),
|
||||
@@ -214,3 +219,17 @@ class HistoryDB:
|
||||
},
|
||||
}
|
||||
|
||||
def _parse_response_payload(self, response_json: str | None, result: str | None) -> dict[str, Any]:
|
||||
fallback_return = str(result or "").strip()
|
||||
if not response_json:
|
||||
return {"return": fallback_return, "data": None}
|
||||
try:
|
||||
payload = json.loads(response_json)
|
||||
if isinstance(payload, dict):
|
||||
return {
|
||||
"return": str(payload.get("return") or fallback_return),
|
||||
"data": payload.get("data"),
|
||||
}
|
||||
except Exception:
|
||||
pass
|
||||
return {"return": fallback_return, "data": None}
|
||||
|
||||
Reference in New Issue
Block a user