# Mosis Virtual Smartphone Platform - Roadmap

## Vision

Mosis is a **virtual smartphone OS** for VR games and applications. It provides a phone-like device that users interact with inside VR environments, running virtual apps with real smartphone functionality.

### Key Use Cases

1. **In-Game Phone**: Players use a virtual phone in VR games for communication, utilities, entertainment
2. **Cross-Game Communication**: Phone identity persists across different games (unified contacts, messages)
3. **Real-World Bridge**: Connect to real smartphones via WebRTC for mixed-reality communication
4. **Virtual Hardware**: Game engine provides camera textures, audio, and other "hardware" to the phone OS
5. **Store Ecosystem**: Downloadable apps from a store, self-contained packages with isolation

### Integration Points

| Platform | Location | Status |
|----------|----------|--------|
| Unity Plugin | `D:\Dev\Mosis\Mosis Unity` | Binder client, raycast, viewport |
| Unreal Plugin | `D:\Dev\Mosis\Mosis Unreal` | WIP |
| Desktop Designer | `MosisService/designer/` | Complete |
| Designer Tests | `MosisService/designer-test/` | Mostly complete |

---

## Milestones Overview

| # | Milestone | Status | Description |
|---|-----------|--------|-------------|
| 1 | Cross-Platform Kernel | ✅ Complete | Desktop designer with shared kernel code |
| 2 | Testing Framework | ✅ Complete | Automated UI testing and inspection |
| 3 | Virtual Hardware | ✅ Complete | Camera, mic, speaker, filesystem APIs (via sandbox) |
| 4 | App Sandboxing | ✅ Complete | Lua runtime, package format, 149 security tests |
| 5 | WebRTC Bridge | ❌ Not started | Phone-to-phone communication |
| 6 | System Apps | 🔶 75% | Core phone apps |
| 7 | Game Integration | 🔶 In Progress | Unity/Unreal plugins (Vulkan working) |

---

## Milestone 1: Cross-Platform Kernel ✅ COMPLETE

**Goal**: Desktop designer with shared kernel code for rapid UI iteration.

### Completed Tasks

- [x] Platform abstraction layer (`src/main/kernel/include/`)
  - `platform.h` - IPlatform, IGraphicsContext, IRenderTarget
  - `service_interface.h` - IKernel, IServiceListener
  - `file_interface.h` - IFileInterface extending Rml::FileInterface
- [x] Desktop designer project (`designer/`)
  - GLFW + OpenGL 3.3 context
  - Hot-reload on RML/RCSS/Lua changes
  - Mouse input maps to touch events
- [x] UI designs imported from MosisDesigner
  - Theme and component stylesheets
  - Navigation system (Lua)
  - Fonts and icons
- [x] Android build unchanged and working

---

## Milestone 2: Testing Automation ✅ COMPLETE

**Goal**: Automated UI testing for rapid iteration and AI agent verification.

### Completed Tasks

- [x] UI hierarchy dumping to JSON
- [x] PNG screenshot capture (F12 key)
- [x] Agent-compatible JSON test results
- [x] `designer-test` executable
  - WindowController (Windows SendInput API)
  - HierarchyReader (element lookup by ID/class)
  - LogParser (navigation event verification)
- [x] All 5 navigation tests passing
- [x] Android event injection via ADB broadcast
- [x] **Action Recording** - Capture tap, swipe, long_press to JSON with timestamps
- [x] **Action Playback** - Load recorded JSON and replay with timing
- [x] **Screenshot Diff** - Pixel-level PNG comparison with configurable tolerance
- [x] **GLFW Input Hooks** - Automatic mouse/key recording via forked backend

### Test Recording Format

```json
{
  "name": "Navigate to contacts and back",
  "recorded_at": "2024-01-16T12:00:00Z",
  "resolution": {"width": 677, "height": 1202},
  "actions": [
    {"type": "tap", "x": 413, "y": 1174, "timestamp": 0},
    {"type": "wait", "duration": 1000, "timestamp": 100},
    {"type": "tap", "x": 40, "y": 28, "timestamp": 1100},
    {"type": "wait", "duration": 500, "timestamp": 1200}
  ],
  "assertions": [
    {"after_action": 0, "type": "screen_is", "expected": "contacts"},
    {"after_action": 2, "type": "screen_is", "expected": "home"}
  ]
}
```

---

## Milestone 3: Virtual Hardware ✅ COMPLETE

**Goal**: Hardware-like APIs backed by game engine or real devices.

Implemented as part of the Lua Sandbox system. See [SANDBOX_MILESTONES.md](SANDBOX_MILESTONES.md) for details.

### Completed Components

| Component | Sandbox Milestone | Location |
|-----------|------------------|----------|
| Camera | Milestone 11 | `sandbox/camera_interface.cpp` |
| Microphone | Milestone 12 | `sandbox/microphone_interface.cpp` |
| Audio Output | Milestone 13 | `sandbox/audio_output.cpp` |
| Location/GPS | Milestone 14 | `sandbox/location_interface.cpp` |
| Sensors | Milestone 15 | `sandbox/sensor_interface.cpp` |
| Bluetooth | Milestone 16 | `sandbox/bluetooth_interface.cpp` |
| Filesystem | Milestone 7 | `sandbox/virtual_fs.cpp` |
| Network/HTTP | Milestone 9 | `sandbox/network_manager.cpp` |
| WebSocket | Milestone 10 | `sandbox/websocket_manager.cpp` |

---

## Milestone 4: App Sandboxing ✅ COMPLETE

**Goal**: Secure app runtime with defined package format.

Implemented with 20 sub-milestones covering security, APIs, and hardware interfaces. 149 security tests passing.

See:
- [SANDBOX_MILESTONES.md](SANDBOX_MILESTONES.md) - Implementation milestones
- [LUA-SANDBOX.md](LUA-SANDBOX.md) - Security features, permissions, APIs
- [APP-MANAGEMENT.md](APP-MANAGEMENT.md) - Package format, manifest, lifecycle

### Key Features

- **Lua Runtime**: Isolated `lua_State` per app with dangerous globals removed
- **Resource Limits**: Memory (16MB), CPU (instruction hooks), timers (100 max)
- **Permission System**: Normal/Dangerous/Signature categories with user gesture requirements
- **Virtual Filesystem**: Per-app storage with 50MB quota
- **SQLite Database**: Per-app with authorizer blocking dangerous operations
- **Network Security**: HTTPS required, private IP blocking, domain whitelists
- **Hardware Interfaces**: Camera, mic, location, sensors with mandatory indicators

---

## Milestone 5: WebRTC Bridge ❌ NOT STARTED

**Goal**: Cross-device communication via WebRTC.

### 5.1 Dependencies

- libdatachannel (add to vcpkg)

### 5.2 Communication Protocol

```json
{
  "type": "call" | "message" | "file" | "screen_share",
  "from": "phone_id",
  "to": "phone_id",
  "payload": { ... }
}
```

### 5.3 Use Cases

- Voice/video calls between virtual phones
- Text messaging across games
- File sharing
- Screen sharing

### 5.4 Components

- **WebRTCBridge** class for data channels
- **Signaling Server** (WebSocket-based)
- **Real Smartphone Bridge** (companion app)

---

## Milestone 6: System Apps 🔶 75% COMPLETE

### Completed Apps

| App | Features | Status |
|-----|----------|--------|
| Home | App grid, dock, navigation | ✅ Complete |
| Dialer | Keypad, call UI (mock) | ✅ Complete |
| Messages | Conversation list, chat view | ✅ Complete |
| Contacts | Contact list, search, detail | ✅ Complete |
| Settings | Display, sound, about | ✅ Complete |
| Browser | URL bar, placeholder | ✅ Complete |

### Remaining Apps

| App | Features | Status |
|-----|----------|--------|
| Store | Browse apps, install packages | ❌ UI only |
| Camera | Viewfinder, capture, gallery | ❌ UI only |
| Music/Audio | Playback, playlists | ❌ Outline only |

### App Data Persistence (Future)

- Contacts: JSON or SQLite storage
- Messages: Conversation history
- Settings: Preferences file
- Photos: Virtual filesystem

---

## Milestone 7: Game Integration ❌ NOT STARTED

**Goal**: Production-ready game engine plugins.

### 7.1 Unity Package

- [ ] Improved raycast interaction
- [ ] Hardware button simulation (volume, power)
- [ ] Virtual camera provider (RenderTexture → phone)
- [ ] Virtual microphone provider
- [ ] Virtual speaker provider

### 7.2 Unreal Plugin

- [ ] Full Binder client implementation
- [ ] Blueprint integration
- [ ] Same features as Unity

### 7.3 Documentation

- [ ] How to embed phone in game scene
- [ ] How to provide virtual hardware
- [ ] How to handle phone events

---

## Extended Features (Future)

| Feature | Description |
|---------|-------------|
| Notifications | System notification center, per-app channels |
| Widgets | Home screen widgets, live data |
| Gestures | Swipe up for home, swipe down for notifications |
| Themes | Dark/light mode, custom colors |
| Accessibility | Font size, high contrast, TTS |
| Multi-Window | Split-screen, picture-in-picture |
| Clipboard | Copy/paste between apps and game |
| Voice Assistant | Wake word, voice commands |
| Virtual Location | GPS from game, map integration |

---

## Architecture

```
┌─────────────────────────────────────────────────────────────────────┐
│                        VR Game (Unity/Unreal)                        │
│  ┌──────────────┐  ┌──────────────┐  ┌──────────────────────────┐  │
│  │ Phone Render │  │ Touch/Button │  │ Virtual Hardware Provider │  │
│  │   Viewport   │  │    Input     │  │ (Camera, Mic, Speakers)   │  │
│  └──────┬───────┘  └──────┬───────┘  └────────────┬─────────────┘  │
└─────────┼─────────────────┼────────────────────────┼────────────────┘
          │ Binder IPC      │ Binder IPC             │ Binder IPC
          ▼                 ▼                        ▼
┌─────────────────────────────────────────────────────────────────────┐
│                          Mosis Service                               │
│  ┌─────────────────────────────────────────────────────────────┐    │
│  │                         Kernel                               │    │
│  │  ┌─────────────┐  ┌─────────────┐  ┌─────────────────────┐  │    │
│  │  │   RmlUi     │  │ App Runtime │  │   Virtual Hardware  │  │    │
│  │  │  Renderer   │  │   (Lua)     │  │      Abstraction    │  │    │
│  │  └─────────────┘  └─────────────┘  └─────────────────────┘  │    │
│  │  ┌─────────────┐  ┌─────────────┐  ┌─────────────────────┐  │    │
│  │  │   App       │  │   IPC       │  │   libdatachannel    │  │    │
│  │  │  Manager    │  │  Router     │  │   (WebRTC Bridge)   │  │    │
│  │  └─────────────┘  └─────────────┘  └─────────────────────┘  │    │
│  └─────────────────────────────────────────────────────────────┘    │
└─────────────────────────────────────────────────────────────────────┘
          │
          │ WebRTC (libdatachannel)
          ▼
┌─────────────────────────────────────────────────────────────────────┐
│                    Real Smartphone / Other Devices                   │
└─────────────────────────────────────────────────────────────────────┘
```

---

## Folder Structure

```
MosisService/
├── src/main/
│   ├── kernel/                    # Shared cross-platform kernel
│   │   ├── include/               # Platform abstractions
│   │   └── src/                   # Shared implementation
│   ├── cpp/                       # Android-specific native code
│   ├── java/                      # Kotlin/Java code
│   └── assets/                    # Shared UI assets
│       ├── apps/                  # System apps
│       │   ├── home/
│       │   ├── dialer/
│       │   ├── messages/
│       │   ├── contacts/
│       │   ├── settings/
│       │   ├── browser/
│       │   ├── store/             # TODO
│       │   └── camera/            # TODO
│       ├── ui/                    # Shared stylesheets
│       ├── scripts/               # Lua scripts
│       ├── icons/                 # TGA icons
│       └── fonts/                 # TTF fonts
│
├── designer/                      # Desktop designer
│   ├── src/
│   │   ├── testing/               # UI inspection, capture
│   │   └── ...
│   └── build/
│
├── designer-test/                 # Automated UI tests
│   ├── src/
│   └── build/
│
└── docs/                          # Documentation (future)
```

---

## Build Commands

```bash
# Android
./gradlew assembleDebug
./gradlew installDebug

# Desktop Designer
cd designer
cmake -B build -DCMAKE_TOOLCHAIN_FILE=%VCPKG_ROOT%/scripts/buildsystems/vcpkg.cmake
cmake --build build --config Debug
./build/Debug/mosis-designer.exe ../src/main/assets/apps/home/home.rml

# Designer Tests
cd designer-test
cmake -B build -DCMAKE_TOOLCHAIN_FILE=%VCPKG_ROOT%/scripts/buildsystems/vcpkg.cmake
cmake --build build --config Debug
./build/Debug/designer-test.exe
```

---

## Current Sprint: Next Steps

### Priority 1: System Apps Completion
- [ ] Store app (UI only - browse, install)
- [ ] Camera app (UI + game engine texture)
- [ ] Music app (UI outline only)

### Priority 2: Game Engine Integration
- [x] MosisUnreal - Vulkan texture import working
- [ ] MosisUnreal - Blueprint API polish
- [ ] MosisVR (Unity) - Vulkan backend

### Priority 3: WebRTC Bridge (Milestone 5)
- [ ] libdatachannel integration
- [ ] Phone-to-phone communication
- [ ] Real smartphone bridge app

---

## Resources

### Material Design

- **Icons**: `D:\Dev\Mosis\MosisDesigner\material-design-icons`
  - 20 categories, SVG/PNG/Font formats
  - Browse at https://fonts.google.com/icons

- **Components**: `D:\Dev\Mosis\MosisDesigner\material-design-lite`
  - Reference implementation for design patterns

### Documentation

All documentation is in `docs/`:
- `CLAUDE.md` - Development guide
- `SANDBOX_MILESTONES.md` - Sandbox implementation details
- `ROADMAP.md` - This file

---

*Last updated: 2026-01-19*
