This document names the addon capability surfaces that are intentionally
available to host code. It complements docs/addon_lego_box_contract.md, which
describes the wider addon boundary.
Host code should reach addon-owned behavior through AddonManager:
invoke_capability(capability, payload)broadcasts to initialized addons and returns the first non-Noneresult.invoke_all_capabilities(capability, payload)broadcasts to initialized addons and returns every non-Noneresult.invoke_addon_capability(addon_id, capability, payload)targets one known addon.invoke_service_capability(service_id, capability, payload, **metadata_match)targets the initialized addon that declares a matching manifest service.
Payloads are plain dictionaries. Callers should pass only the host surfaces that
the capability needs, such as backend, bridge, runtime_config, settings,
args, or kwargs. Addons may normalize or copy payload data before using it.
Unsupported, disabled, or unavailable capabilities return None. Addons should
not raise for missing optional host surfaces; failures are logged by the manager
and treated as no result.
runtime.*: non-UI runtime requests, config snapshots, provider state, and backend delegation.real_ui.*: runtime-backed Qt Designer UI binding and dock/window behavior.legacy.*: compatibility builders for older Python-built shell surfaces.ui.*: addon-local widget event handlers or exported UI helper classes.dry_run.*: non-mutating or preview-only profile/tutorial helpers.tutorial.*: tutorial runtime state and safe-default application.shell.*: shell-preview service factories used by designer/shell mode.backend.*: backend host integration points that are not generic runtime methods.
Keep capability names stable. Add a new capability when behavior changes shape; do not silently change payload or return semantics for an existing name.
These service IDs are currently used as routing boundaries:
avatar_provider_registry: avatar provider addons such as MuseTalk, VaM, VSeeFace, and No Avatar. Match withprovider_id.tts_backend_service: TTS backend addons such as PocketTTS, Chatterbox, and Gemini preview. Match withbackend_id.chat_provider_registry: chat provider addons.sensory_registry: sensory source addons.sensory_prompt_contributor: sensory prompt contribution addons.service_registry: addon-published peer services.
Manifest metadata may include helper hints such as real_ui_bridge_module, but
host code should prefer service routing over static imports.
Common avatar-provider capabilities:
runtime.create_adapterruntime.estimate_overhead_gibruntime.collect_configruntime.update_config_from_widgetsruntime.status_snapshotruntime.restart_sensitive_widgetsruntime.refresh_resource_widgetsreal_ui.bind_runtime_controlsreal_ui.set_provider_controls_enabledreal_ui.apply_provider_selected_defaultsruntime.backend.<method>
MuseTalk owns the avatar-pack catalog, preview runtime, performance dry-run, and tutorial policy capabilities:
runtime.discover_avatar_packsruntime.get_avatar_packruntime.normalize_enabled_pack_emotionsruntime.enabled_pack_emotionsruntime.available_pack_emotion_namesruntime.pack_catalogruntime.select_packruntime.vram_moderuntime.chunk_limits_for_indexruntime.preview.stream_framesruntime.preview.stream_delegated_audio_progressruntime.preview.prime_frameruntime.preview.estimate_displayed_framesruntime.preview.current_source_indexruntime.preview.current_stateruntime.preview.set_stateruntime.preview.append_logruntime.pipeline_snapshotruntime.apply_settingsdry_run.performance_apply_keysdry_run.performance_summary_keysdry_run.performance_label_fragmentdry_run.performance_log_fragmentdry_run.add_performance_overridetutorial.runtime_statetutorial.apply_safe_defaultsui.apply_vram_mode_changeui.apply_loop_fade_changeui.apply_frame_cache_changeui.refresh_avatar_pack_listui.apply_avatar_pack_changeui.chunking_slider_specsui.preview_panel_exports
MuseTalk also owns preview/focus UI capabilities:
real_ui.build_preview_dockreal_ui.ensure_stage_windowreal_ui.attach_preview_to_hostreal_ui.sync_stage_window_geometry_from_previewreal_ui.bind_preview_controlsreal_ui.redirect_preview_runtime_surfacereal_ui.set_focus_button_textreal_ui.show_previewreal_ui.enter_avatar_focusreal_ui.exit_avatar_focusreal_ui.toggle_avatar_focusreal_ui.show_main_interface_from_focusreal_ui.stop_preview
VaM owns VaM bridge/runtime configuration capabilities:
runtime.vam_configreal_ui.sync_widget_namesreal_ui.mirror_runtime_widgetslegacy.build_runtime_widgetsruntime.backend.<method>
VSeeFace currently exposes:
runtime.create_adapterruntime.estimate_overhead_gibreal_ui.bind_runtime_controlsreal_ui.set_provider_controls_enabledui.hand_doctor_dialog_class
No Avatar currently exposes runtime.estimate_overhead_gib.
TTS backends register tts_backend_service with backend_id metadata.
Common TTS backend capabilities:
runtime.estimate_overhead_gibruntime.collect_configruntime.update_config_from_widgetsruntime.status_snapshotruntime.restart_sensitive_widgetsruntime.refresh_resource_widgets
PocketTTS also owns interpreter-setting UI actions:
ui.browse_pythonui.apply_python_changedui.ensure_python_pathui.reset_python_to_default
Chatterbox and Gemini preview currently expose runtime.estimate_overhead_gib
only.
Visual Reply owns its runtime state, shared-state bridge, UI dock, and shell service factory:
runtime.engine_bridgeruntime.apply_settingsruntime.status_snapshotruntime.generationruntime.current_stateruntime.set_stateruntime.output_baseruntime.clientruntime.apply_style_anchorruntime.story_style_guideruntime.story_promptruntime.normalize_promptruntime.write_image_from_responseruntime.backend.<method>real_ui.sync_widget_namesreal_ui.bind_runtime_controlsreal_ui.build_dockreal_ui.bind_show_buttonreal_ui.show_dockreal_ui.redirect_runtime_surfacelegacy.build_utility_buttonlegacy.build_settings_tablegacy.build_runtime_widgetsui.panel_classshell.create_visual_reply_service
Shell-preview mode should ask addon entrypoints for local service factories instead of importing addon UI modules directly:
shell.create_visual_reply_serviceshell.create_hotkey_serviceshell.create_chat_replay_service
Runtime-backed host services are provided through manifest host_services and
core.addons.qt_host_services. Addons that need Qt host services should declare
the service in addon.json; host startup builds those services and passes them
through addon context.
Designer-backed runtime UI capabilities should follow these rules:
- Use
real_ui.sync_widget_namesfor compatibility aliases that map Designer widgets back to legacy object names. - Use
real_ui.build_*only when the addon owns an optional dock/window/panel. - Use
real_ui.bind_*for signal-slot binding against already-created widgets. - Use
real_ui.redirect_*when an addon-owned runtime surface must replace a legacy host placeholder. - Keep
legacy.build_*capabilities as compatibility only; new runtime UI should use manifestuientries andreal_ui.*bindings.
- Core, engine, and shared UI runtime modules must not statically import addon implementations.
- Host code should route by manifest service metadata or a known addon ID.
- Addon compatibility facades may exist only to protect existing sessions, presets, external routes, or legacy UI object names.
- Compatibility facades should delegate lazily to addon-owned modules and should not grow new behavior.
- Addons should fail safely when disabled, absent, or partially configured.
- Runtime-visible config keys should remain stable unless an explicit migration is added.