"""AI PMO kernel runtime composition.""" from __future__ import annotations from . import ai_pmo_kernel_common as _common for _name, _value in vars(_common).items(): if not _name.startswith("__"): globals()[_name] = _value from .ai_pmo_kernel_mixins_closure import KernelClosureMixin from .ai_pmo_kernel_mixins_followup import KernelFollowupMixin from .ai_pmo_kernel_mixins_ingress import KernelIngressMixin from .ai_pmo_kernel_mixins_intent import KernelIntentMixin from .ai_pmo_kernel_mixins_world_model import KernelWorldModelMixin class AIPMOKernelService( KernelIngressMixin, KernelWorldModelMixin, KernelIntentMixin, KernelFollowupMixin, KernelClosureMixin, ): """AI PMO kernel,作为新的统一事实链。""" def __init__(self, db: AsyncSession, tenant_id: int = 1) -> None: self.db = db self.tenant_id = int(tenant_id) self._background_session_factory = self._build_background_session_factory(db) self.context_cache = ContextCacheService() self.intent_resolver = IntentResolver() self.route_resolver = RouteResolver() self.decision_engine = DecisionEngine(policy_gate_rules=POLICY_GATE_RULES) self.reply_renderer = ReplyRenderer( state_waiting_manual=STATE_WAITING_MANUAL, state_failed=STATE_FAILED, receipt_phase_action=RECEIPT_PHASE_ACTION, receipt_phase_pending=RECEIPT_PHASE_PENDING, receipt_phase_error=RECEIPT_PHASE_ERROR, ) self.executor = TypedExecutor(db, tenant_id=self.tenant_id) self.context_assembler = ContextAssembler(self) self.workflow_registry = WorkflowRegistry(self) self.review_service = AIPMOReviewService(db, tenant_id=self.tenant_id) self.cadence_service = AIPMOCadenceService(db, tenant_id=self.tenant_id) @staticmethod def _build_background_session_factory(db: AsyncSession) -> Optional[async_sessionmaker[AsyncSession]]: bind = getattr(db, "bind", None) if bind is None: return None try: return async_sessionmaker(bind=bind, expire_on_commit=False, class_=AsyncSession) except Exception: return None