Skip to content

Index

desktop

Desktop helpers for Diapason (welcome sequence, monitors, voice commands).

Functions:

run_welcome_sequence

run_welcome_sequence(
    settings: WelcomeClapSettings | None = None,
    *,
    skip_tts: bool = False,
    skip_chrome: bool = False,
    skip_cursor: bool = False,
) -> Mapping[str, Any]

Execute welcome actions via registered tools. Returns step results.

Source code in src/diapason/desktop/welcome_runner.py
def run_welcome_sequence(
    settings: WelcomeClapSettings | None = None,
    *,
    skip_tts: bool = False,
    skip_chrome: bool = False,
    skip_cursor: bool = False,
) -> Mapping[str, Any]:
    """Execute welcome actions via registered tools. Returns step results."""
    import diapason.speech  # noqa: F401 — register TTS
    import diapason.tools  # noqa: F401 — register tools
    from diapason.tools.desktop_tools import (
        FocusAppTool,
        OpenBrowserOnMonitorTool,
        OpenUriTool,
        PlayAudioFileTool,
    )
    from diapason.tools.text_to_speech import TextToSpeechTool

    cfg = settings or load_welcome_settings()
    results: dict[str, Any] = {}

    logger.info("Welcome sequence: opening song")
    results["song"] = OpenUriTool().execute(uri=cfg.song_uri)

    if not skip_chrome:
        if cfg.open_claude:
            results["claude"] = OpenBrowserOnMonitorTool().execute(
                url=cfg.claude_url,
                monitor=cfg.claude_monitor,
                fullscreen=cfg.fullscreen,
                label="Claude",
            )
        if cfg.open_binance:
            results["binance"] = OpenBrowserOnMonitorTool().execute(
                url=cfg.binance_url,
                monitor=cfg.binance_monitor,
                fullscreen=cfg.fullscreen,
                label="Binance",
            )

    delay = max(0.0, cfg.after_song_delay_s)
    if delay:
        time.sleep(delay)

    if not skip_tts and cfg.welcome_phrase.strip():
        tts = TextToSpeechTool().execute(
            text=cfg.welcome_phrase.strip(),
            backend="elevenlabs",
            voice_id=cfg.elevenlabs_voice_id,
        )
        results["tts"] = tts
        if tts.success and tts.content:
            results["play"] = PlayAudioFileTool().execute(path=tts.content)

    if not skip_cursor:
        results["cursor"] = FocusAppTool().execute(
            app_name=cfg.focus_app_name,
            fullscreen=cfg.fullscreen,
        )

    ok = all(getattr(r, "success", False) for r in results.values() if r is not None)
    logger.info("Welcome sequence finished (all_ok=%s)", ok)
    return results