@chicowall/capacitor-appfunctions
v0.1.2
Published
Plugin Capacitor que expoe acoes do agendaAI como Android AppFunctions para o Gemini
Readme
@agendaai/capacitor-appfunctions
Plugin Capacitor que expoe acoes do agendaAI como Android AppFunctions chamáveis pelo Gemini.
Status: alpha. Depende de
androidx.appfunctions1.0.0-alphaXX, que esta em rollout.
O que esta dentro do plugin
- TokenStore — persiste o JWT em SharedPreferences pro background access.
- AgendaAIClient — wrapper HTTP sobre OkHttp + kotlinx.serialization que cobre todos os endpoints do back.
- DTOs —
@AppFunctionSerializable+@kotlinx.serialization.Serializable(compartilhaveis entre Gemini e backend). - Plugin Capacitor — bridge JS para chamar as mesmas operacoes em foreground.
O que esta no app consumidor
As anotacoes @AppFunction ficam no app consumidor (frontend-capacitor) porque o KSP roda em build-time sobre o codigo do app, nao do plugin. Esse plugin entrega tudo pronto para o app criar uma classe simples com 10 metodos @AppFunction que delegam pro AgendaAIClient.
// no app consumidor (agendaAI):
class AgendaAIFunctions(context: Context) {
private val client = AgendaAIClient(context)
@AppFunction
suspend fun listarPacientes(): List<PacienteDto> = client.listarPacientes()
@AppFunction
suspend fun criarAgendamento(
pacienteId: String,
profissionalId: String,
servicoId: String,
dataHoraInicio: String,
): AgendamentoDto = client.criarAgendamento(
CriarAgendamentoBody(pacienteId, profissionalId, servicoId, dataHoraInicio)
)
// ... outras 8 funcoes
}Funcoes expostas
listarPacientescriarPacienteremoverPaciente(soft-delete)listarProfissionaislistarServicosverHorariosDisponiveiscriarAgendamentolistarProximosAgendamentoscancelarAgendamentoagendaDoDia
Setup
1. Instalar no app
npm install ../plugins/capacitor-appfunctions
npx cap sync android2. Empurrar o token apos login
import { AgendaAIAppFunctions } from '@agendaai/capacitor-appfunctions';
// em algum momento apos login bem-sucedido:
await AgendaAIAppFunctions.setAuthToken({
token: jwt,
apiBaseUrl: 'https://agendaai-backend-qw6w.onrender.com',
});
// no logout:
await AgendaAIAppFunctions.clearAuthToken();3. Adicionar KSP no android/app/build.gradle do app consumidor
plugins {
id 'com.google.devtools.ksp' version '2.0.21-1.0.28' apply false
}
apply plugin: 'com.google.devtools.ksp'
dependencies {
implementation 'androidx.appfunctions:appfunctions:1.0.0-alpha07'
implementation 'androidx.appfunctions:appfunctions-service:1.0.0-alpha07'
ksp 'androidx.appfunctions:appfunctions-compiler:1.0.0-alpha07'
}4. Declarar o servico no AndroidManifest
<application>
<meta-data
android:name="android.app.appfunctions"
android:resource="@xml/app_functions" />
</application>(O KSP gera o app_functions.xml.)
Como testar
Foreground (JS calls)
const { pacientes } = await AgendaAIAppFunctions.listarPacientes();Background (Gemini)
- Build APK e instalar.
adb shell dumpsys appfunctions→ verifica catalogo.- Em device com Gemini ativo, falar: "marca uma consulta amanha as 10h pro Joao com a Dra. Marina".
Limitacoes
- iOS: o equivalente sao App Intents em Swift; este plugin nao cobre iOS ainda.
- Web: stub que so persiste token em localStorage; chamadas de dominio nao funcionam.
- Devices sem Gemini/AICore: funcoes ficam registradas mas ninguem invoca. #� �c�a�p�a�c�i�t�o�r�-�a�p�p�f�u�n�c�t�i�o�n�s� � �
