From cd68446c42896de15b22c1eba0bd9f625c1e796f Mon Sep 17 00:00:00 2001 From: Abhimanyu Saharan Date: Mon, 16 Feb 2026 00:21:21 +0530 Subject: [PATCH] feat: add BoardWebhook updates on agent deletion --- backend/app/services/openclaw/admin_service.py | 9 +++++++++ backend/app/services/openclaw/provisioning_db.py | 9 +++++++++ backend/tests/test_agent_delete_lead_agent.py | 7 ++++++- 3 files changed, 24 insertions(+), 1 deletion(-) diff --git a/backend/app/services/openclaw/admin_service.py b/backend/app/services/openclaw/admin_service.py index 11d63cb7..dfc0c2b6 100644 --- a/backend/app/services/openclaw/admin_service.py +++ b/backend/app/services/openclaw/admin_service.py @@ -16,6 +16,7 @@ from app.db import crud from app.models.activity_events import ActivityEvent from app.models.agents import Agent from app.models.approvals import Approval +from app.models.board_webhooks import BoardWebhook from app.models.gateways import Gateway from app.models.tasks import Task from app.schemas.gateways import GatewayTemplatesSyncResult @@ -340,6 +341,14 @@ class GatewayAdminLifecycleService(OpenClawDBService): agent_id=None, commit=False, ) + await crud.update_where( + self.session, + BoardWebhook, + col(BoardWebhook.agent_id) == agent_id, + agent_id=None, + updated_at=now, + commit=False, + ) async def sync_templates( self, diff --git a/backend/app/services/openclaw/provisioning_db.py b/backend/app/services/openclaw/provisioning_db.py index 6618b64c..97fcb8f6 100644 --- a/backend/app/services/openclaw/provisioning_db.py +++ b/backend/app/services/openclaw/provisioning_db.py @@ -31,6 +31,7 @@ from app.models.activity_events import ActivityEvent from app.models.agents import Agent from app.models.approvals import Approval from app.models.board_memory import BoardMemory +from app.models.board_webhooks import BoardWebhook from app.models.boards import Board from app.models.gateways import Gateway from app.models.organizations import Organization @@ -1849,6 +1850,14 @@ class AgentLifecycleService(OpenClawDBService): agent_id=None, commit=False, ) + await crud.update_where( + self.session, + BoardWebhook, + col(BoardWebhook.agent_id) == agent.id, + agent_id=None, + updated_at=now, + commit=False, + ) await self.session.delete(agent) await self.session.commit() diff --git a/backend/tests/test_agent_delete_lead_agent.py b/backend/tests/test_agent_delete_lead_agent.py index b1bcf3de..0713b8da 100644 --- a/backend/tests/test_agent_delete_lead_agent.py +++ b/backend/tests/test_agent_delete_lead_agent.py @@ -11,6 +11,7 @@ import pytest from fastapi import HTTPException, status import app.services.openclaw.provisioning_db as agent_service +from app.models.board_webhooks import BoardWebhook from app.services.openclaw.gateway_rpc import GatewayConfig as GatewayClientConfig @@ -110,7 +111,10 @@ async def test_delete_agent_as_lead_removes_board_agent( _ = (_self, agent, gateway, delete_files, delete_session) return None - async def _fake_update_where(*_args, **_kwargs) -> None: + update_models: list[type[object]] = [] + + async def _fake_update_where(_session, model, *_args, **_kwargs) -> None: + update_models.append(model) return None monkeypatch.setattr(service, "require_board", _fake_require_board) @@ -130,6 +134,7 @@ async def test_delete_agent_as_lead_removes_board_agent( assert result.ok is True assert session.deleted and session.deleted[0] == target + assert BoardWebhook in update_models @pytest.mark.asyncio