diff --git a/backend/agents/workspace_manager.py b/backend/agents/workspace_manager.py index 57509fc..8a36d4c 100644 --- a/backend/agents/workspace_manager.py +++ b/backend/agents/workspace_manager.py @@ -129,6 +129,33 @@ class RunWorkspaceManager: ) return asset_dir + def load_agent_file( + self, + *, + config_name: str, + agent_id: str, + filename: str, + ) -> str: + """Load one run-scoped agent workspace file.""" + path = self.get_agent_asset_dir(config_name, agent_id) / filename + if not path.exists(): + raise FileNotFoundError(f"File not found: {filename}") + return path.read_text(encoding="utf-8") + + def update_agent_file( + self, + *, + config_name: str, + agent_id: str, + filename: str, + content: str, + ) -> None: + """Write one run-scoped agent workspace file.""" + asset_dir = self.get_agent_asset_dir(config_name, agent_id) + asset_dir.mkdir(parents=True, exist_ok=True) + path = asset_dir / filename + path.write_text(content, encoding="utf-8") + def initialize_default_assets( self, config_name: str, diff --git a/backend/api/agents.py b/backend/api/agents.py index 2633f5c..07a7209 100644 --- a/backend/api/agents.py +++ b/backend/api/agents.py @@ -13,7 +13,8 @@ from typing import Any, Dict, List, Optional from fastapi import APIRouter, HTTPException, Depends, Body, UploadFile, File, Form from pydantic import BaseModel, Field -from backend.agents import AgentFactory, WorkspaceManager, get_registry +from backend.agents import AgentFactory, get_registry +from backend.agents.workspace_manager import RunWorkspaceManager from backend.agents.agent_workspace import load_agent_workspace_config from backend.agents.skills_manager import SkillsManager from backend.agents.toolkit_factory import load_agent_profiles @@ -100,8 +101,8 @@ def get_agent_factory(): def get_workspace_manager(): - """Get WorkspaceManager instance.""" - return WorkspaceManager() + """Get run-scoped workspace manager instance.""" + return RunWorkspaceManager() def get_skills_manager(): @@ -652,7 +653,7 @@ async def get_agent_file( workspace_id: str, agent_id: str, filename: str, - workspace_manager: WorkspaceManager = Depends(get_workspace_manager), + workspace_manager: RunWorkspaceManager = Depends(get_workspace_manager), ): """ Read an agent's workspace file. @@ -682,7 +683,7 @@ async def update_agent_file( agent_id: str, filename: str, content: str = Body(..., media_type="text/plain"), - workspace_manager: WorkspaceManager = Depends(get_workspace_manager), + workspace_manager: RunWorkspaceManager = Depends(get_workspace_manager), ): """ Update an agent's workspace file.