Uploading files

Co-authored-by: Claude <noreply@anthropic.com>
This commit is contained in:
RuiFPBandClaude Bot committed 2026-10-05 00:46:26 +01:00
1 parent 110b0da328
commit 097074a4a6
3 files changed
+399 -4

No files matched your search

+111
View File
@@ -0,0 +1,111 @@
# 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).