diff --git a/database.py b/database.py index 8d9a99e..f22ec16 100644 --- a/database.py +++ b/database.py @@ -1151,6 +1151,23 @@ async def get_run_by_output(output_hash: str) -> Optional[dict]: return None +def _parse_inputs(inputs_value): + """Parse inputs from database - may be JSON string, list, or None.""" + if inputs_value is None: + return [] + if isinstance(inputs_value, list): + return inputs_value + if isinstance(inputs_value, str): + try: + parsed = json.loads(inputs_value) + if isinstance(parsed, list): + return parsed + return [] + except (json.JSONDecodeError, TypeError): + return [] + return [] + + async def list_runs_by_actor(actor_id: str, offset: int = 0, limit: int = 20) -> List[dict]: """List completed runs for a user, ordered by creation time (newest first).""" async with pool.acquire() as conn: @@ -1171,9 +1188,10 @@ async def list_runs_by_actor(actor_id: str, offset: int = 0, limit: int = 20) -> "ipfs_cid": row["ipfs_cid"], "provenance_cid": row["provenance_cid"], "recipe": row["recipe"], - "inputs": row["inputs"], + "inputs": _parse_inputs(row["inputs"]), "actor_id": row["actor_id"], "created_at": row["created_at"].isoformat() if row["created_at"] else None, + "status": "completed", } for row in rows ]