diff --git a/src/codegen/agents/agent.py b/src/codegen/agents/agent.py index 3f50bb87f..2bbee8e87 100644 --- a/src/codegen/agents/agent.py +++ b/src/codegen/agents/agent.py @@ -62,6 +62,17 @@ def __init__(self, token: str, org_id: Optional[int] = None, base_url: Optional[ # Current job self.current_job = None + @property + def web_url(self) -> Optional[str]: + """Get the URL for the current job. + + Returns: + str: The web URL for the current job, or None if no job has been run. + """ + if self.current_job: + return self.current_job.web_url + return None + def run(self, prompt: str) -> AgentTask: """Run an agent with the given prompt. diff --git a/tests/unit/codegen/agents/test_agent.py b/tests/unit/codegen/agents/test_agent.py index a41a9fea5..ae3a008e3 100644 --- a/tests/unit/codegen/agents/test_agent.py +++ b/tests/unit/codegen/agents/test_agent.py @@ -146,6 +146,21 @@ def test_init_with_custom_base_url(self, mock_api_client): agent = Agent(token="test-token", org_id=42, base_url=custom_url) mock_config.assert_called_once_with(host=custom_url, access_token="test-token") + def test_web_url_with_no_job(self, agent): + """Test web_url property when no job has been run""" + assert agent.web_url is None + + def test_web_url_with_job(self, agent): + """Test web_url property returns current job's web_url""" + # Setup mock job + mock_job = MagicMock(spec=AgentTask) + mock_job.web_url = "https://example.com/run/456" + + agent.current_job = mock_job + + # Check web_url + assert agent.web_url == "https://example.com/run/456" + def test_run(self, agent, mock_agents_api): """Test run method creates and returns job""" # Setup mock API response @@ -250,6 +265,9 @@ def test_full_workflow(self, mock_response, mock_updated_response): assert job.status == "running" assert job.result is None + # Verify web_url property + assert agent.web_url == "https://example.com/run/987" + # Check status status = agent.get_status()