32c7336bf6
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
51 lines
2.6 KiB
Markdown
51 lines
2.6 KiB
Markdown
---
|
|
name: notify_desktop
|
|
kind: function
|
|
lang: go
|
|
domain: infra
|
|
version: "1.0.0"
|
|
purity: impure
|
|
signature: "func NotifyDesktop(title, body string) error"
|
|
description: "Lanza una notificacion de escritorio en Linux via el binario notify-send (libnotify). Degradacion limpia: si notify-send no esta en el PATH devuelve nil sin error (no es fallo que la maquina no tenga servidor de notificaciones). Cuando existe ejecuta: notify-send --app-name=fleetview --urgency=normal -- <title> <body>, usando -- para que un texto que empiece por - no se interprete como flag. title vacio cae a un default; body puede ir vacio."
|
|
tags: [orchestration, notify, infra, desktop, libnotify]
|
|
uses_functions: []
|
|
uses_types: []
|
|
returns: []
|
|
returns_optional: false
|
|
error_type: "error_go_core"
|
|
imports: ["fmt", "os/exec"]
|
|
params:
|
|
- name: title
|
|
desc: "titulo de la notificacion; si es cadena vacia usa el default 'Notificación'"
|
|
- name: body
|
|
desc: "cuerpo de la notificacion; puede ir vacio (notify-send lo acepta)"
|
|
output: "error: nil si la notificacion se mostro o si notify-send no esta instalado (degradacion silenciosa); error envuelto con contexto solo si la ejecucion real de notify-send falla"
|
|
tested: false
|
|
tests: []
|
|
test_file_path: ""
|
|
file_path: "functions/infra/notify_desktop.go"
|
|
---
|
|
|
|
## Ejemplo
|
|
|
|
```go
|
|
// Avisar al usuario en el escritorio de que un agente termino.
|
|
err := infra.NotifyDesktop("✅ Agente terminó", "EDA dataset X — revísalo")
|
|
if err != nil {
|
|
// notify-send existe pero fallo al ejecutarse
|
|
log.Printf("no se pudo notificar: %v", err)
|
|
}
|
|
// En una maquina sin notify-send, err es nil y la notificacion se omite.
|
|
```
|
|
|
|
## Cuando usarla
|
|
|
|
Usala para avisar al usuario en el escritorio cuando un proceso largo o un agente termina su trabajo (fin de un EDA, build, deploy, o tarea desatendida del orquestador). Es el toque final tras una operacion que el humano no esta mirando en directo: dispara la notificacion y sigue, sin preocuparte de si la maquina destino tiene servidor de notificaciones.
|
|
|
|
## Gotchas
|
|
|
|
- **Solo Linux con servidor de notificaciones (libnotify).** Depende del binario `notify-send`; en otros SO no aplica.
|
|
- **Headless / sin DBUS no muestra nada pero NO falla.** Si `notify-send` no esta en el PATH, devuelve `nil` (degradacion silenciosa): el caller no se rompe por carecer de notificaciones.
|
|
- **Requiere sesion grafica activa.** Aunque `notify-send` exista, sin una sesion grafica con DBUS la notificacion puede no aparecer; en ese caso `Run()` puede devolver error real, que se devuelve envuelto.
|
|
- **`--` antes de los argumentos posicionales** evita que un `title`/`body` que empiece por `-` se interprete como flag. No lo quites.
|