128 lines
4.5 KiB
Python
128 lines
4.5 KiB
Python
"""Board onboarding gateway messaging service."""
|
|
|
|
from __future__ import annotations
|
|
|
|
from app.models.board_onboarding import BoardOnboardingSession
|
|
from app.models.boards import Board
|
|
from app.services.openclaw.coordination_service import AbstractGatewayMessagingService
|
|
from app.services.openclaw.exceptions import GatewayOperation, map_gateway_error_to_http_exception
|
|
from app.services.openclaw.gateway_rpc import OpenClawGatewayError
|
|
from app.services.openclaw.shared import (
|
|
GatewayAgentIdentity,
|
|
require_gateway_config_for_board,
|
|
resolve_trace_id,
|
|
)
|
|
|
|
|
|
class BoardOnboardingMessagingService(AbstractGatewayMessagingService):
|
|
"""Gateway message dispatch helpers for onboarding routes."""
|
|
|
|
async def dispatch_start_prompt(
|
|
self,
|
|
*,
|
|
board: Board,
|
|
prompt: str,
|
|
correlation_id: str | None = None,
|
|
) -> str:
|
|
trace_id = resolve_trace_id(correlation_id, prefix="onboarding.start")
|
|
self.logger.log(
|
|
5,
|
|
"gateway.onboarding.start_dispatch.start trace_id=%s board_id=%s",
|
|
trace_id,
|
|
board.id,
|
|
)
|
|
gateway, config = await require_gateway_config_for_board(self.session, board)
|
|
session_key = GatewayAgentIdentity.session_key(gateway)
|
|
try:
|
|
await self._dispatch_gateway_message(
|
|
session_key=session_key,
|
|
config=config,
|
|
agent_name="Gateway Agent",
|
|
message=prompt,
|
|
deliver=False,
|
|
)
|
|
except (OpenClawGatewayError, TimeoutError) as exc:
|
|
self.logger.error(
|
|
"gateway.onboarding.start_dispatch.failed trace_id=%s board_id=%s error=%s",
|
|
trace_id,
|
|
board.id,
|
|
str(exc),
|
|
)
|
|
raise map_gateway_error_to_http_exception(
|
|
GatewayOperation.ONBOARDING_START_DISPATCH,
|
|
exc,
|
|
) from exc
|
|
except Exception as exc: # pragma: no cover - defensive guard
|
|
self.logger.critical(
|
|
"gateway.onboarding.start_dispatch.failed_unexpected trace_id=%s board_id=%s "
|
|
"error_type=%s error=%s",
|
|
trace_id,
|
|
board.id,
|
|
exc.__class__.__name__,
|
|
str(exc),
|
|
)
|
|
raise
|
|
self.logger.info(
|
|
"gateway.onboarding.start_dispatch.success trace_id=%s board_id=%s session_key=%s",
|
|
trace_id,
|
|
board.id,
|
|
session_key,
|
|
)
|
|
return session_key
|
|
|
|
async def dispatch_answer(
|
|
self,
|
|
*,
|
|
board: Board,
|
|
onboarding: BoardOnboardingSession,
|
|
answer_text: str,
|
|
correlation_id: str | None = None,
|
|
) -> None:
|
|
trace_id = resolve_trace_id(correlation_id, prefix="onboarding.answer")
|
|
self.logger.log(
|
|
5,
|
|
"gateway.onboarding.answer_dispatch.start trace_id=%s board_id=%s onboarding_id=%s",
|
|
trace_id,
|
|
board.id,
|
|
onboarding.id,
|
|
)
|
|
_gateway, config = await require_gateway_config_for_board(self.session, board)
|
|
try:
|
|
await self._dispatch_gateway_message(
|
|
session_key=onboarding.session_key,
|
|
config=config,
|
|
agent_name="Gateway Agent",
|
|
message=answer_text,
|
|
deliver=False,
|
|
)
|
|
except (OpenClawGatewayError, TimeoutError) as exc:
|
|
self.logger.error(
|
|
"gateway.onboarding.answer_dispatch.failed trace_id=%s board_id=%s "
|
|
"onboarding_id=%s error=%s",
|
|
trace_id,
|
|
board.id,
|
|
onboarding.id,
|
|
str(exc),
|
|
)
|
|
raise map_gateway_error_to_http_exception(
|
|
GatewayOperation.ONBOARDING_ANSWER_DISPATCH,
|
|
exc,
|
|
) from exc
|
|
except Exception as exc: # pragma: no cover - defensive guard
|
|
self.logger.critical(
|
|
"gateway.onboarding.answer_dispatch.failed_unexpected trace_id=%s board_id=%s "
|
|
"onboarding_id=%s error_type=%s error=%s",
|
|
trace_id,
|
|
board.id,
|
|
onboarding.id,
|
|
exc.__class__.__name__,
|
|
str(exc),
|
|
)
|
|
raise
|
|
self.logger.info(
|
|
"gateway.onboarding.answer_dispatch.success trace_id=%s board_id=%s onboarding_id=%s",
|
|
trace_id,
|
|
board.id,
|
|
onboarding.id,
|
|
)
|