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