4.0 KiB
4.0 KiB
Project: HermesControl Jetpack Compose Android App
Architecture
The HermesControl Jetpack Compose Android application communicates with the local Hermes agent instance via two communication channels:
- REST API (Port 9119): For status queries, listing sessions, and system configuration.
- WebSocket Gateway (
/api/ws?token=<TOKEN>): For real-time JSON-RPC messaging (chat, prompt submission, stream events, tool execution updates, etc.).
Package Boundaries
com.m57.hermescontrol.data.model— REST API data classes.com.m57.hermescontrol.data.remote— Retrofit ApiClient and HermesApiService.com.m57.hermescontrol.data.ws— JSON-RPC models, HermesWsClient, and EventParser.com.m57.hermescontrol.data.local— AuthManager (EncryptedSharedPreferences).com.m57.hermescontrol.ui.connect— ConnectScreen and ConnectViewModel.com.m57.hermescontrol.ui.chat— ChatScreen, ChatViewModel, and ChatBubble.com.m57.hermescontrol.ui.settings— SettingsScreen and SettingsViewModel.com.m57.hermescontrol.theme— Color, Theme, and Type.
Milestones
| # | Name | Scope | Dependencies | Status |
|---|---|---|---|---|
| M1 | Exploration & Setup | Explore codebase, identify dependencies and structure | None | DONE |
| M2 | Networking & Data Layer | Implement/Fix AuthManager, api clients, WS clients, EventParser | M1 | DONE |
| M3 | UI Screen Implementation | Implement ConnectScreen, ChatScreen, SettingsScreen, and Nav integration | M2 | DONE |
| M4 | Unit Testing | Implement unit tests for AuthManager, EventParser, Connect/Chat ViewModels | M2, M3 | DONE |
| M5 | Styling & Audit Validation | Perform ktlint formatting fixes, compiler error fixes, and run Forensic Audit | M4 | DONE |
| M6 | E2E Testing Track | Design and build comprehensive opaque-box integration tests (Tiers 1-4) | M5 | PLANNED |
| M7 | API Integration & Models | Add Retrofit endpoints and JSON serialization models for Skills & Cron Jobs | M5 | PLANNED |
| M8 | Skills Management UI | Implement Viewmodel and UI Screen for skills management | M7 | PLANNED |
| M9 | Cron Jobs Management UI | Implement Viewmodel and UI Screen for cron jobs control | M7 | PLANNED |
| M10 | Navigation Drawer | Integrate Material3 navigation drawer using Navigation3 keys | M8, M9 | PLANNED |
| M11 | E2E & Hardening Phase | Verify all E2E tests, perform adversarial coverage hardening (Tier 5) | M6, M10 | PLANNED |
Interface Contracts
REST API Service
getStatus(): ReturnsStatusResponse(version, gateway status, active sessions)getSessions(): ReturnsSessionListResponse(all sessions and metadata)getSessionMessages(sessionId: String): ReturnsSessionMessagesResponse(message history)getSystemStats(): ReturnsSystemStatsResponse(CPU, memory, etc.)getSkills(): Returns list of skills (GET api/skills)toggleSkill(payload): Toggles a skill's state (PUT api/skills/toggle)getCronJobs(): Returns list of cron jobs (GET api/cron/jobs)pauseCronJob(id): Pauses a job (POST api/cron/jobs/{id}/pause)resumeCronJob(id): Resumes a job (POST api/cron/jobs/{id}/resume)triggerCronJob(id): Triggers a job immediately (POST api/cron/jobs/{id}/trigger)deleteCronJob(id): Deletes a job (DELETE api/cron/jobs/{id})
WebSocket Client (HermesWsClient)
connect(): Establish connection to/api/ws?token=<TOKEN>disconnect(): Terminate connectionsendMessage(text: String): Submit prompt (prompt.submitJSON-RPC method)resumeSession(sessionId: String): Resume a session (session.resumeJSON-RPC method)- Callbacks:
onConnected(),onDisconnected(reason: String),onMessage(JsonRpcResponse)
Event Parser (EventParser)
- Parses incoming JSON messages from WebSocket and extracts event fields (
event,data,id,result,error). - Categorizes events:
message.complete,message.token,tool.start,tool.complete,clarify.request, etc.
Code Layout
app/src/main/java/com/m57/hermescontrol/(Main Source)app/src/test/java/com/m57/hermescontrol/(Unit Tests)