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

View File

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

View File

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

View File

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

View File

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