# Copyright (c) 2026 Roman Shaban. All rights reserved.
# Licensed under the Apache License 2.0.
# Part of the CIOS / Onto-Protocol Ecosystem.
import json
import os
from datetime import datetime
from typing import Optional
from onto_models import OntoTask
STORAGE_DIR = "storage"
TASKS_FILE = os.path.join(STORAGE_DIR, "tasks.json")
RUNS_FILE = os.path.join(STORAGE_DIR, "runs.json")
def _ensure_storage():
if not os.path.exists(STORAGE_DIR):
os.makedirs(STORAGE_DIR)
if not os.path.exists(TASKS_FILE):
with open(TASKS_FILE, "w") as f:
json.dump({}, f)
if not os.path.exists(RUNS_FILE):
with open(RUNS_FILE, "w") as f:
json.dump({}, f)
def _load_json(path):
with open(path, "r") as f:
return json.load(f)
def _save_json(path, data):
with open(path, "w") as f:
json.dump(data, f, indent=2)
def save_task(task: OntoTask):
_ensure_storage()
tasks = _load_json(TASKS_FILE)
tasks[task.task_id] = {
"task_id": task.task_id,
"parent_task_id": task.parent_task_id,
"agent": task.agent.name,
"intent": task.intent.action,
"input": task.input,
"expected_output": task.expected_output,
"status": task.result.status,
"output": task.result.output,
"depth": task.depth,
"run_id": task.run_id,
"human_approved": getattr(task, "human_approved", False),
"timestamp": datetime.utcnow().isoformat()
}
_save_json(TASKS_FILE, tasks)
def save_run(run_id: str):
_ensure_storage()
runs = _load_json(RUNS_FILE)
runs[run_id] = {
"run_id": run_id,
"timestamp": datetime.utcnow().isoformat()
}
_save_json(RUNS_FILE, runs)
def get_task(task_id: str) -> Optional[dict]:
_ensure_storage()
tasks = _load_json(TASKS_FILE)
return tasks.get(task_id)
def get_all_tasks():
_ensure_storage()
return _load_json(TASKS_FILE)
def get_all_runs():
_ensure_storage()
return _load_json(RUNS_FILE)