| 1 | from helpers.api import ApiHandler, Input, Output, Request, Response |
| 2 | from helpers import subagents |
| 3 | from typing import TYPE_CHECKING |
| 4 | |
| 5 | if TYPE_CHECKING: |
| 6 | from helpers import projects |
| 7 | |
| 8 | class Subagents(ApiHandler): |
| 9 | async def process(self, input: Input, request: Request) -> Output: |
| 10 | action = input.get("action", "") |
| 11 | ctxid = input.get("context_id", None) |
| 12 | |
| 13 | if ctxid: |
| 14 | _context = self.use_context(ctxid) |
| 15 | |
| 16 | try: |
| 17 | if action == "list": |
| 18 | data = self.get_subagents_list() |
| 19 | elif action == "load": |
| 20 | data = self.load_agent(input.get("name", None)) |
| 21 | elif action == "save": |
| 22 | data = self.save_agent(input.get("name", None), input.get("data", None)) |
| 23 | elif action == "delete": |
| 24 | data = self.delete_agent(input.get("name", None)) |
| 25 | else: |
| 26 | raise Exception("Invalid action") |
| 27 | |
| 28 | return { |
| 29 | "ok": True, |
| 30 | "data": data, |
| 31 | } |
| 32 | except Exception as e: |
| 33 | return { |
| 34 | "ok": False, |
| 35 | "error": str(e), |
| 36 | } |
| 37 | |
| 38 | def get_subagents_list(self): |
| 39 | return subagents.get_agents_list() |
| 40 | |
| 41 | def load_agent(self, name: str|None): |
| 42 | if name is None: |
| 43 | raise Exception("Subagent name is required") |
| 44 | return subagents.load_agent_data(name) |
| 45 | |
| 46 | def save_agent(self, name:str|None, data: dict|None): |
| 47 | if name is None: |
| 48 | raise Exception("Subagent name is required") |
| 49 | if data is None: |
| 50 | raise Exception("Subagent data is required") |
| 51 | subagent = subagents.SubAgent(**data) |
| 52 | subagents.save_agent_data(name, subagent) |
| 53 | return subagents.load_agent_data(name) |
| 54 | |
| 55 | def delete_agent(self, name: str|None): |
| 56 | if name is None: |
| 57 | raise Exception("Subagent name is required") |
| 58 | subagents.delete_agent_data(name) |