Skip to main content
Pre-release

This release is a pre-release and may not be stable for production use.

ovos-PHAL-plugin-app-launcher

This PHAL plugin for OpenVoiceOS manages OS-level desktop applications for ovos-skill-application-launcher or any other bus client. It scans .desktop files, launches and closes processes, and reports application state over the OVOS messagebus.


Why a split architecture?

In a single-box OVOS install, the skill and the OS run on the same machine, so subprocess.Popen calls from the skill work directly. A split between skill and plugin becomes necessary in these cases:

  • ovos-core runs on a server or NUC while the desktop runs on a different device.
  • The device OS changes (for example X11 desktop, Wayland, or a headless kiosk). Only the PHAL plugin needs to change; the skill stays the same.
  • HiveMind multi-room setups: the skill runs on the ovos-core satellite, and the PHAL plugin runs on the satellite device where apps must open. Bus messages cross HiveMind transparently.
┌──────────────── ovos-core machine ─────────────────┐
│  ovos-skill-application-launcher                    │
│    • understands speech / intents                   │
│    • emits ovos.phal.app_launcher.* requests        │
│    • waits for responses, speaks result / error     │
└────────────────────┬───────────────────────────────┘
                     │  messagebus  (local or HiveMind)
┌────────────────── device machine ──────────────────┐
│  ovos-PHAL-plugin-app-launcher  (this repo)         │
│    • scans .desktop files                           │
│    • launches / closes processes via subprocess     │
│    • manages windows via wmctrl (optional)          │
│    • replies success / error                        │
└────────────────────────────────────────────────────┘

Bus event API

Each request and response pair uses the standard message.response() convention, so bus.wait_for_response works across HiveMind sessions.

Request event Request payload Response event Response payload
ovos.phal.app_launcher.list (none) .response {apps: [{name, exec}]}
ovos.phal.app_launcher.launch {name: str} .response {name, success: true} or {name, error: str}
ovos.phal.app_launcher.close {name: str} .response {name, success: true} or {name, error: str}
ovos.phal.app_launcher.is_running {name: str} .response {name, running: bool}

Matching

launch, close, and is_running resolve the spoken name against the built application list (and, for close/is_running, against open window titles) with a fuzzy match. A name that scores below match_threshold is reported back as not found ({name, error: "No application matched '...'"} for launch, or excluded from window candidates for close) rather than being fuzzy-matched to some other, unrelated application.

Response and timeout guarantees

Every request gets exactly one response. When process enumeration fails mid-scan (a process exits while the plugin is looking at it, or access is denied), the handler answers with {name, error: str} instead of staying silent, so a wait_for_response caller never hangs on a race. Calls to wmctrl (window listing and window close) time out after 3 seconds; a hung window manager makes close fall back to the process-based path rather than blocking the handler.

Configuration

Add to ovos.conf under the PHAL section or plugin settings:

{
  "ovos-phal-plugin-app-launcher": {
    "skip_categories": ["Settings", "ConsoleOnly", "Building"],
    "skip_keywords": [],
    "target_categories": [],
    "target_keywords": [],
    "blacklist": [],
    "aliases": {"kcalc": ["calculator"]},
    "user_commands": {},
    "require_icon": true,
    "require_categories": true,
    "match_threshold": 0.85,
    "terminate_all": false,
    "disable_window_manager": false
  }
}
Key Type Default Description
skip_categories list[str] ["Settings","ConsoleOnly","Building"] Desktop categories to exclude
skip_keywords list[str] [] Desktop keywords to exclude
target_categories list[str] [] Only include apps in these categories (empty = all)
target_keywords list[str] [] Only include apps with these keywords (empty = all)
blacklist list[str] [] App names or .desktop filenames to skip
aliases dict {"kcalc":["calculator"]} Map desktop-name → speech aliases
user_commands dict {} Map voice name → shell command
require_icon bool true Skip apps without an Icon field
require_categories bool true Skip apps without a Categories field
match_threshold float 0.85 Fuzzy-match threshold (0–1)
terminate_all bool false Kill every matching process, not just the first
disable_window_manager bool false Skip wmctrl-based window management

Installation

pip install ovos-PHAL-plugin-app-launcher
# optional: for window management
sudo apt install wmctrl


Credits

Developed by TigreGótico for OpenVoiceOS.

NGI0 Commons Fund

This project was funded through the NGI0 Commons Fund, a fund established by NLnet with financial support from the European Commission's Next Generation Internet programme, under the aegis of DG Communications Networks, Content and Technology under grant agreement No 101135429.

Metadata

Release files for ovos-PHAL-plugin-app-launcher 0.0.1a4

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for ovos-PHAL-plugin-app-launcher 0.0.1a4
File Size Uploaded
ovos_phal_plugin_app_launcher-0.0.1a4.tar.gz 14.4 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for ovos-PHAL-plugin-app-launcher 0.0.1a4
File Interpreter ABI Platform
ovos_phal_plugin_app_launcher-0.0.1a4-py3-none-any.whl Python 3 none any Details

Total release size: 24.8 kB

Release files / ovos_phal_plugin_app_launcher-0.0.1a4.tar.gz

Download URL ovos_phal_plugin_app_launcher-0.0.1a4.tar.gz
Size 14.4 kB
Tags Source
SHA-256 checksum
How to use checksums
ac6a1d52b7f3219b4b008dc98e6b7ef1f9f2e9ff2163d21ec532804d624fac0a
BLAKE2b-256 checksum
How to use checksums
db80f671022283d9e0387b520a1420b90f9caabd503cc91de4c6c32b76ec5111
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / ovos_phal_plugin_app_launcher-0.0.1a4-py3-none-any.whl

Download URL ovos_phal_plugin_app_launcher-0.0.1a4-py3-none-any.whl
Size 10.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
78b66007a27f366532341a1fa679ea9d0bb5a686f11201b354f6f5145b317575
BLAKE2b-256 checksum
How to use checksums
8ce17b487d6e417b1be2eb4074e502b693da1d90eaa05ece5f15b35eca5637c7
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release history Release notifications | RSS feed

This release

0.0.1a4 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page