# retoor <retoor@molodetz.nl>
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