feat(gateway): add lead_only option for syncing board lead agents
This commit is contained in:
@@ -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,
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
@@ -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 = []
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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),
|
||||||
|
|||||||
Reference in New Issue
Block a user