# retoor from __future__ import annotations from devplacepy.services.manager import ServiceManager _SHELL_MANAGER: ServiceManager | None = None def _instantiate_all(): from devplacepy.services.audit import AuditService from devplacepy.services.backup.service import BackupService from devplacepy.services.bot.service import BotsService from devplacepy.services.containers.service import ContainerService from devplacepy.services.devii import DeviiService from devplacepy.services.gitea.service import IssueTrackerService from devplacepy.services.news import NewsService from devplacepy.services.openai_gateway import GatewayService from devplacepy.services.pubsub import PubSubService from devplacepy.services.telegram.outbox_service import TelegramOutboxService from devplacepy.services.telegram.service import TelegramService from devplacepy.services.xmlrpc import XmlrpcService return ( AuditService(), BackupService(), BotsService(), ContainerService(), DeviiService(), IssueTrackerService(), NewsService(), GatewayService(), PubSubService(), TelegramService(), TelegramOutboxService(), XmlrpcService(), ) def admin_shell_manager() -> ServiceManager: """Read-only ServiceManager holding one instance of every managed service. Never supervised (no set_lock_owner/supervise call) - used only for describe()/config metadata/key derivation, all of which read or write through db_client to the shared service_state / site_settings tables. The owning Tier 3 process is the only one that ever ticks these services. """ global _SHELL_MANAGER if _SHELL_MANAGER is None: manager = ServiceManager() for svc in _instantiate_all(): manager.register(svc) _SHELL_MANAGER = manager return _SHELL_MANAGER