# dedy45/gososmed-mobile-agent architecture

> Architecture diagram of the GitHub repository dedy45/gososmed-mobile-agent, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-10). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/dedy45/gososmed-mobile-agent
- Repository: https://github.com/dedy45/gososmed-mobile-agent

## Overview

GoSosmed Mobile Agent connects a physical Android device to an automation server and executes remote commands through accessibility and integrated local ADB. The main workflow is WebSocket command dispatch → command interpretation → UI observation/action and verification → response; other documented capabilities include batch flows, media handling, device diagnostics, pairing, and local live video/control. Edges are limited to relationships supported by the README or shown source references and excerpts; unsampled subsystem links are omitted where their caller is not evidenced.

Main entry points: [`app/src/main/java/com/gososmed/agent/AgentCommand.kt`](https://github.com/dedy45/gososmed-mobile-agent/blob/main/app/src/main/java/com/gososmed/agent/AgentCommand.kt) (Command Dispatcher), [`app/src/main/java/com/gososmed/agent/batch/BatchFlowExecutor.kt`](https://github.com/dedy45/gososmed-mobile-agent/blob/main/app/src/main/java/com/gososmed/agent/batch/BatchFlowExecutor.kt) (Batch Flows), [`app/src/main/java/com/gososmed/agent/AgentWsClient.kt`](https://github.com/dedy45/gososmed-mobile-agent/blob/main/app/src/main/java/com/gososmed/agent/AgentWsClient.kt) (WebSocket Client), [`app/src/main/java/com/gososmed/agent/capture/LocalWebServer.kt`](https://github.com/dedy45/gososmed-mobile-agent/blob/main/app/src/main/java/com/gososmed/agent/capture/LocalWebServer.kt) (LAN Web Server)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_connect["Connection &amp; Lifecycle"]
  node_foreground["Foreground Service"]
  node_ws["WebSocket Client<br/>[AgentWsClient.kt]"]
end

subgraph group_automation["UI Automation"]
  node_command["Command Dispatcher<br/>[AgentCommand.kt]"]
  node_a11y["Accessibility Engine"]
  node_snapshot["UI Snapshots"]
  node_resolver["Deterministic Resolver"]
  node_action["Action Executor"]
  node_verify["Transition Verification"]
  node_batch["Batch Flows"]
  node_protocol["Protocol v2<br/>[ProtocolV2.kt]"]
end

subgraph group_device["Device Services"]
  node_adbpair["ADB Pairing"]
  node_shell["Privileged Shell<br/>[PrivilegedShell.kt]"]
  node_media["Media Staging<br/>[MediaStager.kt]"]
  node_health["Device Diagnostics<br/>[HealthReport.kt]"]
  node_telemetry["Device Telemetry"]
end

subgraph group_stream["Live Capture &amp; Control"]
  node_capture["Screen Capture<br/>[CaptureService.kt]"]
  node_localserver["LAN Web Server<br/>[LocalWebServer.kt]"]
  node_remote["Remote Control"]
  node_browser["LAN Browser Viewer<br/>[app.js]"]
end

node_operator(("Automation Client"))
node_screenuser(("Local Browser User"))

node_operator -->|"sends commands"| node_ws
node_ws -->|"dispatches"| node_command
node_command -->|"uses"| node_a11y
node_command -->|"collects"| node_snapshot
node_command -->|"resolves"| node_resolver
node_command -->|"executes"| node_action
node_command -->|"verifies"| node_verify
node_command -->|"formats"| node_protocol
node_batch -->|"executes"| node_action
node_batch -->|"resolves"| node_resolver
node_batch -->|"verifies"| node_verify
node_foreground -->|"starts"| node_ws
node_foreground -->|"bootstraps"| node_adbpair
node_adbpair -->|"configures"| node_shell
node_command -->|"stages media"| node_media
node_command -.->|"reports health"| node_health
node_health -.->|"includes"| node_telemetry
node_capture -->|"broadcasts frames"| node_localserver
node_localserver -->|"routes input"| node_remote
node_screenuser -->|"views stream"| node_browser
node_browser -.->|"connects locally"| node_localserver

click node_foreground "https://github.com/dedy45/gososmed-mobile-agent/blob/main/app/src/main/java/com/gososmed/agent/AgentForegroundService.kt"
click node_ws "https://github.com/dedy45/gososmed-mobile-agent/blob/main/app/src/main/java/com/gososmed/agent/AgentWsClient.kt"
click node_command "https://github.com/dedy45/gososmed-mobile-agent/blob/main/app/src/main/java/com/gososmed/agent/AgentCommand.kt"
click node_a11y "https://github.com/dedy45/gososmed-mobile-agent/blob/main/app/src/main/java/com/gososmed/agent/AgentAccessibilityService.kt"
click node_snapshot "https://github.com/dedy45/gososmed-mobile-agent/blob/main/app/src/main/java/com/gososmed/agent/SnapshotCollector.kt"
click node_resolver "https://github.com/dedy45/gososmed-mobile-agent/blob/main/app/src/main/java/com/gososmed/agent/DeterministicResolver.kt"
click node_action "https://github.com/dedy45/gososmed-mobile-agent/blob/main/app/src/main/java/com/gososmed/agent/NodeActionExecutor.kt"
click node_verify "https://github.com/dedy45/gososmed-mobile-agent/blob/main/app/src/main/java/com/gososmed/agent/ScreenTransitionVerifier.kt"
click node_batch "https://github.com/dedy45/gososmed-mobile-agent/blob/main/app/src/main/java/com/gososmed/agent/batch/BatchFlowExecutor.kt"
click node_protocol "https://github.com/dedy45/gososmed-mobile-agent/blob/main/app/src/main/java/com/gososmed/agent/ProtocolV2.kt"
click node_adbpair "https://github.com/dedy45/gososmed-mobile-agent/blob/main/app/src/main/java/com/gososmed/agent/privileged/AdbPairingController.kt"
click node_shell "https://github.com/dedy45/gososmed-mobile-agent/blob/main/app/src/main/java/com/gososmed/agent/privileged/PrivilegedShell.kt"
click node_media "https://github.com/dedy45/gososmed-mobile-agent/blob/main/app/src/main/java/com/gososmed/agent/MediaStager.kt"
click node_health "https://github.com/dedy45/gososmed-mobile-agent/blob/main/app/src/main/java/com/gososmed/agent/HealthReport.kt"
click node_telemetry "https://github.com/dedy45/gososmed-mobile-agent/blob/main/app/src/main/java/com/gososmed/agent/DeviceTelemetryHelper.kt"
click node_capture "https://github.com/dedy45/gososmed-mobile-agent/blob/main/app/src/main/java/com/gososmed/agent/capture/CaptureService.kt"
click node_localserver "https://github.com/dedy45/gososmed-mobile-agent/blob/main/app/src/main/java/com/gososmed/agent/capture/LocalWebServer.kt"
click node_remote "https://github.com/dedy45/gososmed-mobile-agent/blob/main/app/src/main/java/com/gososmed/agent/control/RemoteControlManager.kt"
click node_browser "https://github.com/dedy45/gososmed-mobile-agent/blob/main/tools/browser-viewer/js/app.js"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_foreground,node_ws,node_operator,node_screenuser toneBlue
class node_command,node_a11y,node_snapshot,node_resolver,node_action,node_verify,node_batch,node_protocol toneAmber
class node_adbpair,node_shell,node_media,node_health,node_telemetry toneMint
class node_capture,node_localserver,node_remote,node_browser toneRose
```

## Components

### Connection & Lifecycle

- [Foreground Service](https://github.com/dedy45/gososmed-mobile-agent/blob/main/app/src/main/java/com/gososmed/agent/AgentForegroundService.kt): `app/src/main/java/com/gososmed/agent/AgentForegroundService.kt`
- [WebSocket Client](https://github.com/dedy45/gososmed-mobile-agent/blob/main/app/src/main/java/com/gososmed/agent/AgentWsClient.kt): `app/src/main/java/com/gososmed/agent/AgentWsClient.kt`

### UI Automation

- [Command Dispatcher](https://github.com/dedy45/gososmed-mobile-agent/blob/main/app/src/main/java/com/gososmed/agent/AgentCommand.kt): `app/src/main/java/com/gososmed/agent/AgentCommand.kt`
- [Accessibility Engine](https://github.com/dedy45/gososmed-mobile-agent/blob/main/app/src/main/java/com/gososmed/agent/AgentAccessibilityService.kt): `app/src/main/java/com/gososmed/agent/AgentAccessibilityService.kt`
- [UI Snapshots](https://github.com/dedy45/gososmed-mobile-agent/blob/main/app/src/main/java/com/gososmed/agent/SnapshotCollector.kt): `app/src/main/java/com/gososmed/agent/SnapshotCollector.kt`
- [Deterministic Resolver](https://github.com/dedy45/gososmed-mobile-agent/blob/main/app/src/main/java/com/gososmed/agent/DeterministicResolver.kt): `app/src/main/java/com/gososmed/agent/DeterministicResolver.kt`
- [Action Executor](https://github.com/dedy45/gososmed-mobile-agent/blob/main/app/src/main/java/com/gososmed/agent/NodeActionExecutor.kt): `app/src/main/java/com/gososmed/agent/NodeActionExecutor.kt`
- [Transition Verification](https://github.com/dedy45/gososmed-mobile-agent/blob/main/app/src/main/java/com/gososmed/agent/ScreenTransitionVerifier.kt): `app/src/main/java/com/gososmed/agent/ScreenTransitionVerifier.kt`
- [Batch Flows](https://github.com/dedy45/gososmed-mobile-agent/blob/main/app/src/main/java/com/gososmed/agent/batch/BatchFlowExecutor.kt): `app/src/main/java/com/gososmed/agent/batch/BatchFlowExecutor.kt`
- [Protocol v2](https://github.com/dedy45/gososmed-mobile-agent/blob/main/app/src/main/java/com/gososmed/agent/ProtocolV2.kt): `app/src/main/java/com/gososmed/agent/ProtocolV2.kt`

### Device Services

- [ADB Pairing](https://github.com/dedy45/gososmed-mobile-agent/blob/main/app/src/main/java/com/gososmed/agent/privileged/AdbPairingController.kt): `app/src/main/java/com/gososmed/agent/privileged/AdbPairingController.kt`
- [Privileged Shell](https://github.com/dedy45/gososmed-mobile-agent/blob/main/app/src/main/java/com/gososmed/agent/privileged/PrivilegedShell.kt): `app/src/main/java/com/gososmed/agent/privileged/PrivilegedShell.kt`
- [Media Staging](https://github.com/dedy45/gososmed-mobile-agent/blob/main/app/src/main/java/com/gososmed/agent/MediaStager.kt): `app/src/main/java/com/gososmed/agent/MediaStager.kt`
- [Device Diagnostics](https://github.com/dedy45/gososmed-mobile-agent/blob/main/app/src/main/java/com/gososmed/agent/HealthReport.kt): `app/src/main/java/com/gososmed/agent/HealthReport.kt`
- [Device Telemetry](https://github.com/dedy45/gososmed-mobile-agent/blob/main/app/src/main/java/com/gososmed/agent/DeviceTelemetryHelper.kt): `app/src/main/java/com/gososmed/agent/DeviceTelemetryHelper.kt`

### Live Capture & Control

- [Screen Capture](https://github.com/dedy45/gososmed-mobile-agent/blob/main/app/src/main/java/com/gososmed/agent/capture/CaptureService.kt): `app/src/main/java/com/gososmed/agent/capture/CaptureService.kt`
- [LAN Web Server](https://github.com/dedy45/gososmed-mobile-agent/blob/main/app/src/main/java/com/gososmed/agent/capture/LocalWebServer.kt): `app/src/main/java/com/gososmed/agent/capture/LocalWebServer.kt`
- [Remote Control](https://github.com/dedy45/gososmed-mobile-agent/blob/main/app/src/main/java/com/gososmed/agent/control/RemoteControlManager.kt): `app/src/main/java/com/gososmed/agent/control/RemoteControlManager.kt`
- [LAN Browser Viewer](https://github.com/dedy45/gososmed-mobile-agent/blob/main/tools/browser-viewer/js/app.js): `tools/browser-viewer/js/app.js`

### Other components

- **Automation Client**
- **Local Browser User**

## Connections

- Automation Client → WebSocket Client: sends commands (evidence: `README.md`)
- WebSocket Client → Command Dispatcher: dispatches (evidence: `app/src/main/java/com/gososmed/agent/AgentWsClient.kt`)
- Command Dispatcher → Accessibility Engine: uses (evidence: `app/src/main/java/com/gososmed/agent/AgentCommand.kt`)
- Command Dispatcher → UI Snapshots: collects (evidence: `app/src/main/java/com/gososmed/agent/AgentCommand.kt`)
- Command Dispatcher → Deterministic Resolver: resolves (evidence: `app/src/main/java/com/gososmed/agent/AgentCommand.kt`)
- Command Dispatcher → Action Executor: executes (evidence: `app/src/main/java/com/gososmed/agent/AgentCommand.kt`)
- Command Dispatcher → Transition Verification: verifies (evidence: `app/src/main/java/com/gososmed/agent/AgentCommand.kt`)
- Command Dispatcher → Protocol v2: formats (evidence: `app/src/main/java/com/gososmed/agent/AgentCommand.kt`)
- Batch Flows → Action Executor: executes (evidence: `app/src/main/java/com/gososmed/agent/batch/BatchFlowExecutor.kt`)
- Batch Flows → Deterministic Resolver: resolves (evidence: `app/src/main/java/com/gososmed/agent/batch/BatchFlowExecutor.kt`)
- Batch Flows → Transition Verification: verifies (evidence: `app/src/main/java/com/gososmed/agent/batch/BatchFlowExecutor.kt`)
- Foreground Service → WebSocket Client: starts (evidence: `app/src/main/java/com/gososmed/agent/AgentForegroundService.kt`)
- Foreground Service → ADB Pairing: bootstraps (evidence: `app/src/main/java/com/gososmed/agent/AgentForegroundService.kt`)
- ADB Pairing → Privileged Shell: configures (evidence: `app/src/main/java/com/gososmed/agent/privileged/AdbPairingController.kt`)
- Command Dispatcher → Media Staging: stages media (evidence: `app/src/main/java/com/gososmed/agent/AgentCommand.kt`)
- Command Dispatcher → Device Diagnostics: reports health
- Device Diagnostics → Device Telemetry: includes
- Screen Capture → LAN Web Server: broadcasts frames (evidence: `app/src/main/java/com/gososmed/agent/capture/CaptureService.kt`)
- LAN Web Server → Remote Control: routes input (evidence: `app/src/main/java/com/gososmed/agent/capture/LocalWebServer.kt`)
- Local Browser User → LAN Browser Viewer: views stream (evidence: `README.md`)
- LAN Browser Viewer → LAN Web Server: connects locally
