feat(gateway): add lead_only option for syncing board lead agents

This commit is contained in:
Abhimanyu Saharan
2026-02-15 01:23:36 +05:30
parent 0a2dc2dbc0
commit 6f465d32fa
5 changed files with 18 additions and 4 deletions

View File

@@ -41,6 +41,7 @@ INCLUDE_MAIN_QUERY = Query(default=True)
RESET_SESSIONS_QUERY = Query(default=False)
ROTATE_TOKENS_QUERY = Query(default=False)
FORCE_BOOTSTRAP_QUERY = Query(default=False)
LEAD_ONLY_QUERY = Query(default=False)
BOARD_ID_QUERY = Query(default=None)
_RUNTIME_TYPE_REFERENCES = (UUID,)
@@ -48,6 +49,7 @@ _RUNTIME_TYPE_REFERENCES = (UUID,)
def _template_sync_query(
*,
include_main: bool = INCLUDE_MAIN_QUERY,
lead_only: bool = LEAD_ONLY_QUERY,
reset_sessions: bool = RESET_SESSIONS_QUERY,
rotate_tokens: bool = ROTATE_TOKENS_QUERY,
force_bootstrap: bool = FORCE_BOOTSTRAP_QUERY,
@@ -55,6 +57,7 @@ def _template_sync_query(
) -> GatewayTemplateSyncQuery:
return GatewayTemplateSyncQuery(
include_main=include_main,
lead_only=lead_only,
reset_sessions=reset_sessions,
rotate_tokens=rotate_tokens,
force_bootstrap=force_bootstrap,

View File

@@ -343,6 +343,7 @@ class GatewayAdminLifecycleService(OpenClawDBService):
GatewayTemplateSyncOptions(
user=auth.user,
include_main=query.include_main,
lead_only=query.lead_only,
reset_sessions=query.reset_sessions,
rotate_tokens=query.rotate_tokens,
force_bootstrap=query.force_bootstrap,

View File

@@ -109,6 +109,7 @@ class GatewayTemplateSyncOptions:
user: User | None
include_main: bool = True
lead_only: bool = False
reset_sessions: bool = False
rotate_tokens: bool = False
force_bootstrap: bool = False
@@ -246,6 +247,7 @@ class OpenClawProvisioningService(OpenClawDBService):
options = GatewayTemplateSyncOptions(
user=template_user,
include_main=options.include_main,
lead_only=options.lead_only,
reset_sessions=options.reset_sessions,
rotate_tokens=options.rotate_tokens,
force_bootstrap=options.force_bootstrap,
@@ -288,11 +290,12 @@ class OpenClawProvisioningService(OpenClawDBService):
return result
paused_board_ids = await _paused_board_ids(self.session, list(boards_by_id.keys()))
if boards_by_id:
agents = await (
Agent.objects.by_field_in("board_id", list(boards_by_id.keys()))
.order_by(col(Agent.created_at).asc())
.all(self.session)
query = Agent.objects.by_field_in("board_id", list(boards_by_id.keys())).order_by(
col(Agent.created_at).asc(),
)
if options.lead_only:
query = query.filter(col(Agent.is_board_lead).is_(True))
agents = await query.all(self.session)
else:
agents = []

View File

@@ -44,6 +44,7 @@ class GatewayTemplateSyncQuery:
"""Sync options parsed from query args for gateway template operations."""
include_main: bool
lead_only: bool
reset_sessions: bool
rotate_tokens: bool
force_bootstrap: bool

View File

@@ -29,6 +29,11 @@ def _parse_args() -> argparse.Namespace:
default=True,
help="Also sync the gateway main agent (default: true)",
)
parser.add_argument(
"--lead-only",
action="store_true",
help="Sync only board lead agents",
)
parser.add_argument(
"--reset-sessions",
action="store_true",
@@ -72,6 +77,7 @@ async def _run() -> int:
GatewayTemplateSyncOptions(
user=None,
include_main=bool(args.include_main),
lead_only=bool(args.lead_only),
reset_sessions=bool(args.reset_sessions),
rotate_tokens=bool(args.rotate_tokens),
force_bootstrap=bool(args.force_bootstrap),