Initial commit: OpenCode mobile app (extracted from opencode monorepo)
This commit is contained in:
59
AGENTS.md
Normal file
59
AGENTS.md
Normal file
@@ -0,0 +1,59 @@
|
||||
# Mobile App - AGENTS.md
|
||||
|
||||
## Overview
|
||||
|
||||
React Native / Expo mobile client for opencode. Connects to an opencode server instance via HTTP + SSE for real-time updates.
|
||||
|
||||
## Architecture
|
||||
|
||||
```
|
||||
packages/mobile/
|
||||
├── app/ # Expo Router file-based routing
|
||||
│ ├── (tabs)/ # Tab navigation (sessions, connections, settings)
|
||||
│ ├── session/[id].tsx # Chat screen
|
||||
│ └── connection/ # Add/edit connection screens
|
||||
├── src/
|
||||
│ ├── components/ # Reusable UI components
|
||||
│ │ ├── markdown/ # Markdown renderer (wraps react-native-marked)
|
||||
│ │ └── AuthGate.tsx # Biometric auth gate
|
||||
│ ├── lib/
|
||||
│ │ ├── sdk.ts # HTTP + SSE client for opencode server API
|
||||
│ │ └── types.ts # Re-exported types
|
||||
│ └── stores/ # Zustand state stores
|
||||
│ ├── sessions.ts # Session list, messages, parts
|
||||
│ ├── connections.ts # Server connections, client lifecycle
|
||||
│ ├── events.ts # SSE event stream, status tracking, permissions, questions
|
||||
│ └── auth.ts # Biometric auth
|
||||
```
|
||||
|
||||
## Key Patterns
|
||||
|
||||
- **SSE for real-time**: The `events.ts` store connects to `/global/event` and dispatches to other stores
|
||||
- **Fire-and-forget sends**: `sendMessage` posts to the API but doesn't await response; SSE events drive all UI updates
|
||||
- **Session status**: Derived from `session.status` events (`idle`/`busy`/`retry`) + last part type for status text
|
||||
- **Markdown**: `react-native-marked` wrapped in our own `Markdown` component with custom `CodeBlock` (copy button). Designed to be swappable/publishable later.
|
||||
|
||||
## Style Guide
|
||||
|
||||
Follow the root repo AGENTS.md style guide:
|
||||
|
||||
- Prefer `const` over `let`
|
||||
- Avoid `else` statements, use early returns
|
||||
- Prefer single-word variable names
|
||||
- Avoid `try/catch` where possible
|
||||
- Avoid `any` type
|
||||
- Use Bun APIs where applicable (for scripts, not in RN runtime)
|
||||
|
||||
## Running
|
||||
|
||||
```bash
|
||||
cd packages/mobile
|
||||
bun install
|
||||
bun start # Expo dev server
|
||||
bun run ios # iOS simulator
|
||||
bun run android # Android emulator
|
||||
```
|
||||
|
||||
## Connecting
|
||||
|
||||
Run `opencode serve --hostname 0.0.0.0 --port 4096` on your machine, then add a connection in the app with your machine's local IP and port 4096.
|
||||
Reference in New Issue
Block a user