You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: AGENTS.md
+38-11Lines changed: 38 additions & 11 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -68,7 +68,7 @@ Quando terminar as tarefas solicitadas faça as seguintes etapas:
68
68
## 2. Identidade do Projeto
69
69
70
70
-**Nome**: Crossbar (Universal Plugin System)
71
-
-**Versão Atual**: `1.4.1+11` (atualize ao final de cada sessão).
71
+
-**Versão Atual**: `1.4.2+12` (atualize ao final de cada sessão).
72
72
-**Stack**: Flutter `3.38.3` (CI), Dart `3.10+`.
73
73
-**Objetivo**: Sistema de plugins compatível com BitBar/Argos para Linux, Windows, macOS, Android e iOS.
74
74
-**Status**: Estável (v1.0+). Todas as fases do `MASTER_PLAN.md` concluídas.
@@ -422,17 +422,19 @@ Se a context7 não estiver disponível no sistema, faça o seguinte:
422
422
- Simplifica a escrita de plugins universais.
423
423
- Trade-off: Chamadas bloqueantes no LuaRunner bloqueiam o Isolate Dart.
424
424
425
-
### ADR-007: Android System Info via /proc (2024-12-07)
425
+
### ADR-007: Android System Info via /proc (2024-12-07) ⚠️ SUPERSEDED
426
426
427
-
**Status**: ✅ Accepted
428
-
**Context**: Plugins Lua precisam de dados de CPU, memória e bateria no Android. A abordagem inicial tentou usar Method Channels nativos (BatteryManager, ActivityManager), mas isso introduziu dependência de `package:flutter` no `SystemApi`, quebrando a compilação AOT do CLI (`dart compile exe`).
429
-
**Decision**: Usar `/proc/stat`, `/proc/meminfo` e `/sys/class/power_supply` no Android, assim como no Linux. Aceitar que CPU pode retornar 0% em Android 8+ devido a restrições de segurança do `/proc/stat`.
427
+
**Status**: ⚠️ Deprecated (Superseded by ADR-010)
428
+
**Context**: Plugins Lua precisam de dados de CPU, memória e bateria no Android. A abordagem inicial tentou usar Method Channels nativos (BatteryManager, ActivityManager), mas isso introduziu dependência de `package:flutter` no `SystemApi`, quebrando a compilação AOT do CLI (`dart compile exe`).
429
+
**Decision**: Usar `/proc/stat`, `/proc/meminfo` e `/sys/class/power_supply` no Android, assim como no Linux. Aceitar que CPU pode retornar 0% em Android 8+ devido a restrições de segurança do `/proc/stat`.
430
430
**Consequences**:
431
431
432
432
- CLI compila corretamente como binário nativo
433
-
- Memória e bateria funcionam no Android via `/proc` e `/sys`
434
-
- CPU pode não funcionar em Android moderno (limitação do OS)
@@ -453,15 +455,40 @@ Se a context7 não estiver disponível no sistema, faça o seguinte:
453
455
454
456
### ADR-009: Unified Refresh Behavior via RefreshService (2025-12-21)
455
457
456
-
**Status**: ✅ Accepted
457
-
**Context**: Originalmente, a lógica de atualização (refresh) estava espalhada entre `SchedulerService` (para plugins), widgets individuais e comandos CLI. Isso causava inconsistências: clicar em "Refresh" na UI nem sempre atualizava o tray imediatamente, e diferentes tipos de plugins (Lua vs Nativo) eram tratados de formas distintas no ciclo de vida.
458
-
**Decision**: Criar um `RefreshService` centralizado que gerencia todas as solicitações de atualização. O `SchedulerService` agora apenas agenda os gatilhos, delegando a execução e notificação ao `RefreshService`. Adicionado suporte a `RefreshSource` para identificar de onde veio o gatilho (timer, manual, boot).
458
+
**Status**: ✅ Accepted
459
+
**Context**: Originalmente, a lógica de atualização (refresh) estava espalhada entre `SchedulerService` (para plugins), widgets individuais e comandos CLI. Isso causava inconsistências: clicar em "Refresh" na UI nem sempre atualizava o tray imediatamente, e diferentes tipos de plugins (Lua vs Nativo) eram tratados de formas distintas no ciclo de vida.
460
+
**Decision**: Criar um `RefreshService` centralizado que gerencia todas as solicitações de atualização. O `SchedulerService` agora apenas agenda os gatilhos, delegando a execução e notificação ao `RefreshService`. Adicionado suporte a `RefreshSource` para identificar de onde veio o gatilho (timer, manual, boot).
459
461
**Consequences**:
460
462
- Comportamento idêntico entre UI, Tray e Background.
461
463
- Eliminação de bugs de race condition no rastreamento de IDs de plugins.
462
464
- Melhor observabilidade do ciclo de vida de atualização.
463
465
- Facilidade para implementar novos gatilhos (ex: sensores de hardware).
464
466
467
+
### ADR-010: Android Native APIs via Method Channel (2025-12-21)
468
+
469
+
**Status**: ✅ Accepted
470
+
**Context**: Android 8+ bloqueia `/proc/stat` (CPU) e Android 16 bloqueia `/sys/class/power_supply` (bateria) via SELinux. A abordagem de ler diretamente arquivos sysfs (ADR-007) não funciona mais. Plugins retornavam "No battery detected" e CPU sempre 0%.
471
+
**Decision**: Criar `AndroidNativeBridge` que usa Method Channel para chamar APIs nativas do Android (BatteryManager, ActivityManager) implementadas em Kotlin no `MainActivity.kt`. Usar sistema de cache para compatibilidade com chamadas síncronas do Lua.
0 commit comments