How aspirant200715/neuromesh works
Purpose and runtime
NeuroMesh is an offline Android crisis-response mesh. Each Android 10+ phone senses possible emergencies, creates local assessments with on-device Gemma 4 inference or heuristic fallback, exchanges structured assessments with nearby phones, reaches consensus, and presents actionable alerts. It uses Kotlin, Coroutines/Flow, Hilt, Room, CameraX, MediaPipe LiteRT, and Android Nearby Connections; no cloud/server is required.
App bootstrap and Android entry points are app/src/main/java/com/neuromesh/crisis/NeuroMeshApplication.kt, app/src/main/java/com/neuromesh/crisis/presentation/MainActivity.kt, and app/src/main/AndroidManifest.xml. Critical alerts have a dedicated activity at app/src/main/java/com/neuromesh/crisis/presentation/CrisisAlertActivity.kt.
Presentation and orchestration
The UI follows MVVM. Activities and custom views render camera, mesh state, observations, and alerts; ViewModels own lifecycle-aware collection and state. MainViewModel is the control-plane coordinator for the detection loop, incoming mesh messages, consensus events, and active alert state.
Key paths:
• app/src/main/java/com/neuromesh/crisis/presentation/viewmodel/MainViewModel.kt
• app/src/main/java/com/neuromesh/crisis/presentation/viewmodel/MeshViewModel.kt
• app/src/main/java/com/neuromesh/crisis/presentation/viewmodel/CrisisViewModel.kt
Local sensing and observation
Infrastructure adapters isolate Android hardware. Camera, microphone, and environmental sensors produce textual/signal descriptors rather than raw media; this is a material boundary because the Gemma model is text-oriented. The observer combines those descriptors into an Observation, with heuristic detection available when model loading/inference cannot run.
Key paths:
• app/src/main/java/com/neuromesh/crisis/infrastructure/sensor/CameraSensorManager.kt
• app/src/main/java/com/neuromesh/crisis/infrastructure/sensor/AudioSensorManager.kt
• app/src/main/java/com/neuromesh/crisis/infrastructure/sensor/EnvironmentalSensorManager.kt
• app/src/main/java/com/neuromesh/crisis/domain/agent/ObserverAgent.kt
On-device multi-agent reasoning
The domain pipeline separates perception, assessment, and guidance: ObserverAgent yields observations; ReasonerAgent fuses recent local and received observations into a SituationAssessment plus explainable trace; ActionAgent produces a CrisisAlert. Use cases establish the principal workflow and prevent presentation from directly coordinating infrastructure.
Gemma integration is contained behind runner/loading/prompt/parser boundaries, allowing structured-output recovery and fallback behavior.
Key paths:
• app/src/main/java/com/neuromesh/crisis/domain/agent/ReasonerAgent.kt
• app/src/main/java/com/neuromesh/crisis/domain/agent/ActionAgent.kt
• app/src/main/java/com/neuromesh/crisis/domain/usecase/DetectCrisisUseCase.kt
• app/src/main/java/com/neuromesh/crisis/infrastructure/ml/Gemma4ModelRunner.kt
• app/src/main/java/com/neuromesh/crisis/infrastructure/ml/OutputParser.kt
Peer mesh transport
Nearby Connections is encapsulated so domain code remains SDK-agnostic. The network manager advertises/discovers peers, sends and receives serialized messages, and tracks peer connectivity. Structured observations/assessments—not images, audio, or raw LLM output—cross the network boundary. Transport is Bluetooth/Wi-Fi Direct P2P, using a Bluetooth-preferred Nearby strategy.
Key paths:
• app/src/main/java/com/neuromesh/crisis/infrastructure/network/NearbyConnectionsWrapper.kt
• app/src/main/java/com/neuromesh/crisis/infrastructure/network/MeshNetworkManager.kt
• app/src/main/java/com/neuromesh/crisis/infrastructure/network/MessageSerializer.kt
• app/src/main/java/com/neuromesh/crisis/data/repository/MeshRepository.kt
Gossip and consensus
Received assessments enter a TTL-bounded, deduplicated gossip flow and are evaluated over a time window. VotingStrategy applies confidence-weighted voting; ConsensusEngine emits reached/disputed/no-consensus events and builds a merged assessment. A reached result triggers alert generation, then UI presentation.
Key paths:
• app/src/main/java/com/neuromesh/crisis/domain/consensus/GossipProtocol.kt
• app/src/main/java/com/neuromesh/crisis/domain/consensus/ConsensusEngine.kt
• app/src/main/java/com/neuromesh/crisis/domain/consensus/VotingStrategy.kt
• app/src/main/java/com/neuromesh/crisis/domain/usecase/ShareObservationUseCase.kt
Persistence, models, and dependency boundaries
Typed domain/data models carry observations, assessments, traces, alerts, and peers. Room persists observations and alerts for local continuity; repositories shield callers from DAO/network details. Hilt modules compose runtime implementations. The intended boundary is Presentation → Domain, with infrastructure owning Android SDK, ML, network, and storage access.
Key paths:
• app/src/main/java/com/neuromesh/crisis/data/model/Observation.kt
• app/src/main/java/com/neuromesh/crisis/data/model/SituationAssessment.kt
• app/src/main/java/com/neuromesh/crisis/data/local/NeuroMeshDatabase.kt
• app/src/main/java/com/neuromesh/crisis/data/repository/ObservationRepository.kt
• app/src/main/java/com/neuromesh/crisis/di/AppModule.kt
Main entry points: MainViewModel.kt MainViewModel · AppModule.kt Hilt composition · DetectCrisisUseCase.kt DetectCrisisUseCase · MeshNetworkManager.kt MeshNetworkManager
Components 21
Presentation
- Android bootstrap · Initializes the offline app runtime and alert activity.
app/src/main/java/com/neuromesh/crisis/NeuroMeshApplication.kt - Activities & views · Renders camera, mesh state, observations, and alerts.
app/src/main/java/com/neuromesh/crisis/presentation/MainActivity.kt - MainViewModel · Coordinates detection, mesh input, consensus, and active alerts.
app/src/main/java/com/neuromesh/crisis/presentation/viewmodel/MainViewModel.kt - MeshViewModel
app/src/main/java/com/neuromesh/crisis/presentation/viewmodel/MeshViewModel.kt - CrisisViewModel
app/src/main/java/com/neuromesh/crisis/presentation/viewmodel/CrisisViewModel.kt
Local reasoning
- Sensor descriptors · Camera, audio, and environmental signals are converted to descriptors.
app/src/main/java/com/neuromesh/crisis/infrastructure/sensor/CameraSensorManager.kt - ObserverAgent · Combines local descriptors into observations.
app/src/main/java/com/neuromesh/crisis/domain/agent/ObserverAgent.kt - DetectCrisisUseCase · Runs the local observation-to-assessment workflow.
app/src/main/java/com/neuromesh/crisis/domain/usecase/DetectCrisisUseCase.kt - ReasonerAgent · Fuses recent local and received observations with an explainable trace.
app/src/main/java/com/neuromesh/crisis/domain/agent/ReasonerAgent.kt - Gemma inference boundary · Loads Gemma, prompts it, parses structured output, and permits fallback.
app/src/main/java/com/neuromesh/crisis/infrastructure/ml/Gemma4ModelRunner.kt - ActionAgent · Turns reached assessments into crisis alerts.
app/src/main/java/com/neuromesh/crisis/domain/agent/ActionAgent.kt
Peer mesh & consensus
- ShareObservationUseCase
app/src/main/java/com/neuromesh/crisis/domain/usecase/ShareObservationUseCase.kt - MeshRepository · Shields callers from mesh transport details.
app/src/main/java/com/neuromesh/crisis/data/repository/MeshRepository.kt - MeshNetworkManager · Advertises, discovers, sends, receives, and tracks peers.
app/src/main/java/com/neuromesh/crisis/infrastructure/network/MeshNetworkManager.kt - GossipProtocol · Bounds and deduplicates received assessments.
app/src/main/java/com/neuromesh/crisis/domain/consensus/GossipProtocol.kt - ConsensusEngine · Evaluates time-windowed assessments and emits consensus events.
app/src/main/java/com/neuromesh/crisis/domain/consensus/ConsensusEngine.kt - VotingStrategy
app/src/main/java/com/neuromesh/crisis/domain/consensus/VotingStrategy.kt
Platform adapters & data
- ObservationRepository · Provides local continuity for observations and alerts.
app/src/main/java/com/neuromesh/crisis/data/repository/ObservationRepository.kt - NeuroMeshDatabase · Persists observations and alerts on device.
app/src/main/java/com/neuromesh/crisis/data/local/NeuroMeshDatabase.kt - Structured models · Only structured observations and assessments cross peer boundaries.
app/src/main/java/com/neuromesh/crisis/data/model/Observation.kt - Hilt composition · Binds runtime implementations at application composition.
app/src/main/java/com/neuromesh/crisis/di/AppModule.kt
Connections 26
- Android bootstrap → Hilt composition: initializes
- Activities & views → MainViewModel: renders state from
- Activities & views → MeshViewModel: renders mesh state from
- Activities & views → CrisisViewModel: renders alert state from
- MainViewModel → DetectCrisisUseCase: starts detection
- MainViewModel → ShareObservationUseCase: shares observations
- MainViewModel → ConsensusEngine: handles events from
- Sensor descriptors → ObserverAgent: textual/signal descriptors
- ObserverAgent → DetectCrisisUseCase: Observation
- DetectCrisisUseCase → ReasonerAgent: local assessment
- ReasonerAgent → Gemma inference boundary: structured inference
- DetectCrisisUseCase → ObservationRepository: stores local results
- ShareObservationUseCase → MeshRepository: publishes structured data
- MeshRepository → MeshNetworkManager: uses
- MeshNetworkManager → GossipProtocol: received assessments
- GossipProtocol → ConsensusEngine: windowed candidates
- ConsensusEngine → VotingStrategy: evaluates with
- ConsensusEngine → ActionAgent: reached assessment
- ActionAgent → CrisisViewModel: CrisisAlert
- ObservationRepository → NeuroMeshDatabase: persists through
- ObserverAgent → Structured models: creates
- ReasonerAgent → Structured models: produces assessment
- MeshNetworkManager → Structured models: serialized structured messages
- Hilt composition → Sensor descriptors: binds
- Hilt composition → MeshNetworkManager: binds
- Hilt composition → Gemma inference boundary: binds