Comando de ubicación (nodos)
TL;DR
location.getes un comando de nodo (víanode.invoke).- Desactivado por defecto.
- La configuración usa un selector: Desactivado / Mientras se usa / Siempre.
- Alternador separado: Ubicación precisa.
Por qué un selector (no solo un interruptor)
Los permisos del SO son multinivel. Podemos exponer un selector en la app, pero el SO sigue decidiendo la concesión real.- iOS/macOS: el usuario puede elegir Mientras se usa o Siempre en los avisos/Configuración del sistema. La app puede solicitar una actualización, pero el SO puede requerir Configuración.
- Android: la ubicación en segundo plano es un permiso separado; en Android 10+ a menudo requiere un flujo de Configuración.
- La ubicación precisa es una concesión separada (iOS 14+ “Precisa”, Android “fina” vs “aproximada”).
Modelo de configuración
Por dispositivo de nodo:location.enabledMode:off | whileUsing | alwayslocation.preciseEnabled: bool
- Seleccionar
whileUsingsolicita permiso en primer plano. - Seleccionar
alwaysprimero garantizawhileUsing, luego solicita segundo plano (o envía al usuario a Configuración si es necesario). - Si el SO niega el nivel solicitado, volver al nivel más alto concedido y mostrar el estado.
Mapeo de permisos (node.permissions)
Opcional. El nodo de macOS reportalocation mediante el mapa de permisos; iOS/Android pueden omitirlo.
Comando: location.get
Se llama vía node.invoke.
Parámetros (sugeridos):
LOCATION_DISABLED: el selector está desactivado.LOCATION_PERMISSION_REQUIRED: falta permiso para el modo solicitado.LOCATION_BACKGROUND_UNAVAILABLE: la app está en segundo plano pero solo se permite Mientras se usa.LOCATION_TIMEOUT: no hubo fijación a tiempo.LOCATION_UNAVAILABLE: falla del sistema / sin proveedores.
Comportamiento en segundo plano (futuro)
Objetivo: el modelo puede solicitar ubicación incluso cuando el nodo está en segundo plano, pero solo cuando:- El usuario seleccionó Siempre.
- El sistema operativo proporciona una ubicación en segundo plano.
- La app puede ejecutarse en segundo plano para ubicación (modo de fondo de iOS / servicio en primer plano de Android o permiso especial).
- El Gateway envía un push al nodo (push silencioso o datos FCM).
- El nodo se despierta brevemente y solicita la ubicación al dispositivo.
- El nodo reenvía la carga al Gateway.
- iOS: se requiere permiso Siempre + modo de ubicación en segundo plano. El push silencioso puede ser limitado; espere fallas intermitentes.
- Android: la ubicación en segundo plano puede requerir un servicio en primer plano; de lo contrario, espere denegación.
Integración con modelo/herramientas
- Superficie de herramientas: la herramienta
nodesagrega la acciónlocation_get(nodo requerido). - CLI:
openclaw nodes location get --node <id>. - Guías del Agente: llamar solo cuando el usuario habilitó la ubicación y comprende el alcance.
Copia de UX (sugerida)
- Desactivado: “El uso compartido de ubicación está deshabilitado.”
- Mientras se usa: “Solo cuando OpenClaw está abierto.”
- Siempre: “Permitir ubicación en segundo plano. Requiere permiso del sistema.”
- Precisa: “Usar ubicación GPS precisa. Desactive para compartir ubicación aproximada.”