Comando de localização (nós)
TL;DR
location.geté um comando de nó (vianode.invoke).- Desativado por padrão.
- As configurações usam um seletor: Desativado / Enquanto em uso / Sempre.
- Alternância separada: Localização precisa.
Por que um seletor (não apenas um interruptor)
As permissões do SO são multinível. Podemos expor um seletor no app, mas o SO ainda decide a concessão real.- iOS/macOS: o usuário pode escolher Enquanto em uso ou Sempre nos prompts/Configurações do sistema. O app pode solicitar upgrade, mas o SO pode exigir as Configurações.
- Android: localização em segundo plano é uma permissão separada; no Android 10+ geralmente requer um fluxo nas Configurações.
- Localização precisa é uma concessão separada (iOS 14+ “Precise”, Android “fine” vs “coarse”).
Modelo de configurações
Por dispositivo de nó:location.enabledMode:off | whileUsing | alwayslocation.preciseEnabled: bool
- Selecionar
whileUsingsolicita permissão em primeiro plano. - Selecionar
alwaysprimeiro garantewhileUsing, depois solicita segundo plano (ou envia o usuário às Configurações, se necessário). - Se o SO negar o nível solicitado, reverter para o nível mais alto concedido e mostrar o status.
Mapeamento de permissões (node.permissions)
Opcional. O nó macOS reportalocation via o mapa de permissões; iOS/Android podem omitir.
Comando: location.get
Chamado via node.invoke.
Parâmetros (sugeridos):
LOCATION_DISABLED: seletor está desativado.LOCATION_PERMISSION_REQUIRED: permissão ausente para o modo solicitado.LOCATION_BACKGROUND_UNAVAILABLE: app está em segundo plano, mas apenas Enquanto em uso é permitido.LOCATION_TIMEOUT: sem fix a tempo.LOCATION_UNAVAILABLE: falha do sistema / sem provedores.
Comportamento em segundo plano (futuro)
Objetivo: o modelo pode solicitar localização mesmo quando o nó está em segundo plano, mas apenas quando:- O usuário selecionou Sempre.
- O sistema concede localização em segundo plano.
- O app tem permissão para rodar em segundo plano para localização (modo de segundo plano do iOS / serviço em primeiro plano do Android ou permissão especial).
- O Gateway envia um push para o nó (push silencioso ou dados FCM).
- O nó desperta brevemente e solicita a localização do dispositivo.
- O nó encaminha o payload ao Gateway.
- iOS: permissão Sempre + modo de localização em segundo plano são necessários. Push silencioso pode ser limitado; espere falhas intermitentes.
- Android: localização em segundo plano pode exigir um serviço em primeiro plano; caso contrário, espere negação.
Integração com modelo/ferramentas
- Superfície de ferramentas: a ferramenta
nodesadiciona a açãolocation_get(nó obrigatório). - CLI:
openclaw nodes location get --node <id>. - Diretrizes do agente: chame apenas quando o usuário tiver habilitado a localização e entender o escopo.
Cópia de UX (sugerida)
- Desativado: “O compartilhamento de localização está desativado.”
- Enquanto em uso: “Somente quando o OpenClaw estiver aberto.”
- Sempre: “Permitir localização em segundo plano. Requer permissão do sistema.”
- Precisa: “Usar localização GPS precisa. Desative para compartilhar localização aproximada.”