112 lines
5.5 KiB
Markdown
112 lines
5.5 KiB
Markdown
# AGENTS.md: Epifah
|
|
|
|
Contexto do projeto para qualquer LLM/agente (Claude, ChatGPT, Cursor, etc.) ou pessoa nova.
|
|
Lê isto primeiro. Plano completo em `docs/PROJECT.md`.
|
|
|
|
## Resumo em 3 linhas
|
|
|
|
**Epifah** é o nome do projeto (slug `epifah`, package id `pt.ruifpb.epifah`, domínio `ruifpb.pt`).
|
|
|
|
Projeto de reverse engineering de interoperabilidade: perceber como a app **Aha Radio**
|
|
(Harman, serviço cloud morto) comunica com o **MediaNav Evolution** de um **Renault Clio IV**
|
|
e escrever uma app Android moderna que fale o mesmo protocolo, para mostrar e controlar
|
|
conteúdo atual (rádios web, podcasts, biblioteca local, etc.) no ecrã do carro.
|
|
|
|
## Ambiente do dono (preencher/atualizar)
|
|
|
|
- Carro: Renault Clio IV, MediaNav Evolution, sem Android Auto/CarPlay na unidade
|
|
- Versão hardware/software do MediaNav: `TODO`
|
|
- Telemóvel / versão Android: `TODO`
|
|
- Versão do APK Aha Radio (instalado à força): `TODO`
|
|
- Ligação testada: Bluetooth. USB: nunca testado
|
|
- Sistema de trabalho (SO, ferramentas instaladas): `TODO`
|
|
- Gitea self-hosted: `TODO url` (domínio do dono: `ruifpb.pt`)
|
|
|
|
## Estado atual
|
|
|
|
Fase 0 (ver `docs/PROJECT.md`). Atualizar esta secção no fim de cada sessão de trabalho.
|
|
|
|
- Descobertas confirmadas: nenhuma ainda
|
|
- Em curso: `TODO`
|
|
- Próximo passo: análise do manifest e strings do APK (UUIDs RFCOMM, classes de comunicação)
|
|
|
|
## Hipóteses de trabalho (NÃO são factos)
|
|
|
|
1. Controlo via Bluetooth RFCOMM/SPP com UUID próprio; áudio via A2DP separado.
|
|
(Baseado em manuais Kenwood e Kia da plataforma Aha, não no MediaNav em si.)
|
|
2. O carro mostra um template fixo (estações, now playing, presets).
|
|
3. Protocolo binário com framing; autenticação desconhecida.
|
|
|
|
## Regras para o agente
|
|
|
|
1. **Não inventes detalhes de protocolo.** Se não há evidência (captura, hook, código lido),
|
|
diz "não sei" e propõe como descobrir. Distingue sempre *confirmado*, *hipótese* e *desconhecido*.
|
|
2. **Toda a afirmação sobre o protocolo** deve apontar para evidência: ficheiro de captura + offset/frame,
|
|
ou classe/método do APK. Sem evidência, entra como hipótese.
|
|
3. **Legal:** nunca pedir nem produzir cópias do APK/código da Harman nem texto descompilado extenso.
|
|
Escrever implementação de raiz e documentação nas nossas palavras. Não ajudar a contornar
|
|
DRM de conteúdo nem a aceder a serviços de terceiros sem autorização.
|
|
4. **Privacidade:** capturas e logs têm de ser sanitizados (MAC, tokens, credenciais, localização) antes de commit.
|
|
5. **Âmbito:** só equipamento do próprio dono, só interoperabilidade. Sem alterar firmware/ECUs do carro.
|
|
6. Prefere o caminho mais simples que dê resultado (ex.: confirmar se AVRCP browsing resolve parte do problema
|
|
antes de investir em reimplementar o protocolo).
|
|
7. Não dar passos destrutivos sem avisar (flash, `adb` com root, alterações ao carro).
|
|
8. Se uma informação for sobre versões, preços ou estado atual de serviços/SDKs, verificar online
|
|
em vez de confiar na memória.
|
|
|
|
## Marca e nomes
|
|
|
|
- Nome: Epifah. Descrição oficial: "Reimplementação independente do protocolo da app legada Aha Radio.
|
|
Não afiliada à Harman nem à Renault."
|
|
- Nunca usar Aha, Harman, Renault, Clio, MediaNav, R-Link em nomes de pacotes, classes
|
|
públicas, app, ícone ou repo. Só em documentação, de forma descritiva.
|
|
- Sem logótipos nem cores que lembrem essas marcas.
|
|
|
|
## Convenções
|
|
|
|
- Idioma: **português de Portugal** em docs, issues e commits. Código e identificadores em inglês.
|
|
- Commits: Conventional Commits (`feat:`, `fix:`, `docs:`, `chore:`).
|
|
- Descobertas: uma nota por tema em `docs/findings/` (modelo em `docs/PROJECT.md`, secção 9).
|
|
- Decisões importantes: ADR curto em `docs/decisions/`.
|
|
- Android: Kotlin, `minSdk` a definir com base no telemóvel do dono.
|
|
- Protótipos de protocolo em Python (`prototype/`), com testes sobre capturas reais.
|
|
|
|
## Estrutura do repo
|
|
|
|
```
|
|
docs/PROJECT.md plano, riscos, fases
|
|
docs/findings/ notas de descobertas
|
|
docs/protocol/ especificação do protocolo (SPEC.md, handshake.md)
|
|
docs/captures/ capturas SANITIZADAS + README de cenários
|
|
docs/decisions/ ADRs
|
|
tools/ scripts Frida e helpers de análise
|
|
prototype/ PoC Python
|
|
app/ app Android
|
|
```
|
|
|
|
Nunca commitar: `*.apk`, `jadx-out/`, `apktool-out/`, capturas não sanitizadas.
|
|
|
|
## Contexto técnico útil
|
|
|
|
- Ferramentas previstas: jadx, apktool, Wireshark (RFCOMM/SDP), Frida (hook de `BluetoothSocket`
|
|
input/output streams), mitmproxy (dependências de rede), adb.
|
|
- Captura BT em Android: ativar *Bluetooth HCI snoop log* nas opções de programador e extrair `btsnoop_hci.log`.
|
|
- Fonte de conteúdo gratuita para testes: radio-browser.info (rádios web).
|
|
- Projetos relacionados (inspiração, não resolvem este problema): `ddt4all`, projetos Hackaday sobre o
|
|
protocolo CAN do display Renault. Não existe, até à data da pesquisa, nenhum projeto público que
|
|
documente o protocolo Aha.
|
|
|
|
## Perguntas em aberto
|
|
|
|
- O carro inicia a ligação RFCOMM ou é o telemóvel?
|
|
- Há autenticação/assinatura no handshake?
|
|
- Há código nativo (`.so`) no caminho do protocolo?
|
|
- O MediaNav suporta AVRCP 1.4 com browsing?
|
|
- Existe atualização de firmware oficial que ative Android Auto nesta unidade?
|
|
- A app Aha precisa da cloud para o carro funcionar (login, listas de estações)?
|
|
|
|
## Como retomar uma sessão
|
|
|
|
Ao começar uma nova conversa: lê este ficheiro e `docs/PROJECT.md`, resume o estado em 5 linhas,
|
|
confirma o próximo passo comigo e pede-me só o que falta (ficheiros, outputs de comandos, capturas).
|