[docs]asyncdefload_persona_data(persona_name:str)->dict:"""Load persona data from local or shared directory"""try:persona_path=Path('personas/local')/persona_name/'persona.json'ifnotpersona_path.exists():persona_path=Path('personas/shared')/persona_name/'persona.json'ifnotpersona_path.exists():return{}withopen(persona_path,'r')asf:returnjson.load(f)exceptjson.JSONDecodeError:raiseHTTPException(status_code=500,detail=f"Invalid JSON in persona file: {persona_name}")
[docs]asyncdefload_agent_data(agent_name:str)->dict:"""Load agent data from local or shared directory"""try:agent_path=Path('data/agents/local')/agent_name/'agent.json'ifnotagent_path.exists():agent_path=Path('data/agents/shared')/agent_name/'agent.json'ifnotagent_path.exists():raiseFileNotFoundError(f'Agent {agent_name} not found')withopen(agent_path,'r')asf:agent_data=json.load(f)# Validate required fieldsif'name'notinagent_data:raiseValueError(f'Agent {agent_name} missing required field: name')# Get the persona data if specifiedif'persona'inagent_data:persona_data=awaitload_persona_data(agent_data['persona'])agent_data['persona']=persona_datareturnagent_dataexceptjson.JSONDecodeError:raiseHTTPException(status_code=500,detail=f"Invalid JSON in agent file: {agent_name}")
[docs]defensure_index_structure(index_dir:Path)->None:"""Ensure index directory has the required structure"""(index_dir/'personas').mkdir(exist_ok=True)
[docs]definstall_persona(source_dir:Path,persona_name:str)->None:"""Install a persona directory to the correct location"""target_dir=Path('personas/local')/persona_nameiftarget_dir.exists():shutil.rmtree(target_dir)target_dir.parent.mkdir(parents=True,exist_ok=True)shutil.copytree(source_dir,target_dir)