from typing import Any from sqlmodel import Session, select from api.dashboard_router import build_dashboard_router from models.bot import NanobotImage from services.image_service import ImageService from services.speech_transcription_service import SpeechTranscriptionService from services.system_service import SystemService def reconcile_image_registry(session: Session, *, docker_manager: Any) -> None: db_images = session.exec(select(NanobotImage)).all() for image in db_images: if docker_manager.has_image(image.tag): try: docker_image = docker_manager.client.images.get(image.tag) if docker_manager.client else None image.image_id = docker_image.id if docker_image else image.image_id except Exception: pass image.status = "READY" else: image.status = "UNKNOWN" session.add(image) session.commit() def register_provider_runtime( *, app: Any, provider_registry: Any, local_provider_target: Any, local_provision_provider: Any, local_runtime_provider: Any, local_workspace_provider: Any, edge_provision_provider: Any, edge_runtime_provider: Any, edge_workspace_provider: Any, resolve_bot_provider_target_for_instance: Any, resolve_edge_client: Any, ) -> None: provider_registry.register_bundle( key=local_provider_target.key, runtime_provider=local_runtime_provider, workspace_provider=local_workspace_provider, provision_provider=local_provision_provider, ) provider_registry.register_bundle( key=type(local_provider_target)( node_id="local", transport_kind="edge", runtime_kind="docker", core_adapter="nanobot", ).key, runtime_provider=edge_runtime_provider, workspace_provider=edge_workspace_provider, provision_provider=edge_provision_provider, ) provider_registry.register_bundle( key=type(local_provider_target)( node_id="local", transport_kind="edge", runtime_kind="native", core_adapter="nanobot", ).key, runtime_provider=edge_runtime_provider, workspace_provider=edge_workspace_provider, provision_provider=edge_provision_provider, ) app.state.provider_default_node_id = local_provider_target.node_id app.state.provider_default_transport_kind = local_provider_target.transport_kind app.state.provider_default_runtime_kind = local_provider_target.runtime_kind app.state.provider_default_core_adapter = local_provider_target.core_adapter app.state.provider_registry = provider_registry app.state.resolve_bot_provider_target = resolve_bot_provider_target_for_instance app.state.resolve_edge_client = resolve_edge_client app.state.edge_provision_provider = edge_provision_provider app.state.edge_runtime_provider = edge_runtime_provider app.state.edge_workspace_provider = edge_workspace_provider app.state.provision_provider = local_provision_provider app.state.runtime_provider = local_runtime_provider app.state.workspace_provider = local_workspace_provider def build_speech_transcription_runtime_service( *, data_root: str, speech_service: Any, get_speech_runtime_settings: Any, logger: Any, ) -> SpeechTranscriptionService: return SpeechTranscriptionService( data_root=data_root, speech_service=speech_service, get_speech_runtime_settings=get_speech_runtime_settings, logger=logger, ) def build_image_runtime_service( *, cache: Any, cache_key_images: Any, invalidate_images_cache: Any, docker_manager: Any, reconcile_image_registry_fn: Any, ) -> ImageService: return ImageService( cache=cache, cache_key_images=cache_key_images, invalidate_images_cache=invalidate_images_cache, reconcile_image_registry=reconcile_image_registry_fn, docker_manager=docker_manager, ) def build_system_runtime_service( *, engine: Any, cache: Any, database_engine: str, redis_enabled: bool, redis_url: str, redis_prefix: str, agent_md_templates_file: str, topic_presets_templates_file: str, default_soul_md: str, default_agents_md: str, default_user_md: str, default_tools_md: str, default_identity_md: str, topic_preset_templates: Any, get_default_system_timezone: Any, load_agent_md_templates: Any, load_topic_presets_template: Any, get_platform_settings_snapshot: Any, get_speech_runtime_settings: Any, ) -> SystemService: return SystemService( engine=engine, cache=cache, database_engine=database_engine, redis_enabled=redis_enabled, redis_url=redis_url, redis_prefix=redis_prefix, agent_md_templates_file=agent_md_templates_file, topic_presets_templates_file=topic_presets_templates_file, default_soul_md=default_soul_md, default_agents_md=default_agents_md, default_user_md=default_user_md, default_tools_md=default_tools_md, default_identity_md=default_identity_md, topic_preset_templates=topic_preset_templates, get_default_system_timezone=get_default_system_timezone, load_agent_md_templates=load_agent_md_templates, load_topic_presets_template=load_topic_presets_template, get_platform_settings_snapshot=get_platform_settings_snapshot, get_speech_runtime_settings=get_speech_runtime_settings, ) def attach_runtime_services( *, app: Any, bot_command_service: Any, bot_lifecycle_service: Any, app_lifecycle_service: Any, bot_query_service: Any, bot_channel_service: Any, bot_message_service: Any, bot_runtime_snapshot_service: Any, image_service: Any, provider_test_service: Any, runtime_event_service: Any, speech_transcription_service: Any, system_service: Any, workspace_service: Any, runtime_service: Any, ) -> None: app.state.bot_command_service = bot_command_service app.state.bot_lifecycle_service = bot_lifecycle_service app.state.app_lifecycle_service = app_lifecycle_service app.state.bot_query_service = bot_query_service app.state.bot_channel_service = bot_channel_service app.state.bot_message_service = bot_message_service app.state.bot_runtime_snapshot_service = bot_runtime_snapshot_service app.state.image_service = image_service app.state.provider_test_service = provider_test_service app.state.runtime_event_service = runtime_event_service app.state.speech_transcription_service = speech_transcription_service app.state.system_service = system_service app.state.workspace_service = workspace_service app.state.runtime_service = runtime_service def include_dashboard_api( *, app: Any, image_service: Any, provider_test_service: Any, bot_lifecycle_service: Any, bot_query_service: Any, bot_channel_service: Any, skill_service: Any, bot_config_state_service: Any, runtime_service: Any, bot_message_service: Any, workspace_service: Any, speech_transcription_service: Any, app_lifecycle_service: Any, resolve_edge_state_context: Any, logger: Any, ) -> None: app.include_router( build_dashboard_router( image_service=image_service, provider_test_service=provider_test_service, bot_lifecycle_service=bot_lifecycle_service, bot_query_service=bot_query_service, bot_channel_service=bot_channel_service, skill_service=skill_service, bot_config_state_service=bot_config_state_service, runtime_service=runtime_service, bot_message_service=bot_message_service, workspace_service=workspace_service, speech_transcription_service=speech_transcription_service, app_lifecycle_service=app_lifecycle_service, resolve_edge_state_context=resolve_edge_state_context, logger=logger, ) )