220 lines
6.0 KiB
Markdown
220 lines
6.0 KiB
Markdown
# CodeNomad
|
|
|
|
A cross-platform desktop application for interacting with OpenCode servers, built with Electron and SolidJS.
|
|
|
|
## Overview
|
|
|
|
CodeNomad provides a multi-instance, multi-session interface for working with AI-powered coding assistants. It manages OpenCode server processes, handles real-time message streaming, and provides an intuitive UI for coding with AI.
|
|
|
|
**🎯 MVP Focus:** This project prioritizes functionality over performance. Performance optimization is intentionally deferred to post-MVP phases. See [docs/MVP-PRINCIPLES.md](docs/MVP-PRINCIPLES.md) for details.
|
|
|
|
## Features
|
|
|
|
### Core Capabilities
|
|
|
|
- **Multi-Instance Management**: Work on multiple projects simultaneously
|
|
- **Session Persistence**: Resume conversations across app restarts
|
|
- **Real-time Streaming**: Live message updates via Server-Sent Events
|
|
- **Tool Execution Visibility**: See bash commands, file edits, and other tool calls
|
|
- **Agent & Model Switching**: Easily switch between different AI agents and models
|
|
- **Markdown Rendering**: Beautiful code highlighting and formatting
|
|
|
|
### Advanced Features (Planned)
|
|
|
|
- Virtual scrolling for large conversations
|
|
- Full-text search across sessions
|
|
- Workspace management
|
|
- Custom themes
|
|
- Plugin system
|
|
|
|
## Architecture
|
|
|
|
See [docs/architecture.md](docs/architecture.md) for detailed architecture documentation.
|
|
|
|
### High-Level Overview
|
|
|
|
```
|
|
Electron App
|
|
├── Main Process (Node.js)
|
|
│ ├── Window management
|
|
│ ├── OpenCode server spawning
|
|
│ └── IPC communication
|
|
├── Renderer Process (SolidJS)
|
|
│ ├── UI components
|
|
│ ├── State management (stores)
|
|
│ └── SDK client communication
|
|
└── Multiple OpenCode Servers
|
|
└── One per instance/project folder
|
|
```
|
|
|
|
## Prerequisites
|
|
|
|
- Node.js 18+
|
|
- Bun package manager
|
|
- OpenCode CLI installed and in PATH
|
|
|
|
## Installation
|
|
|
|
```bash
|
|
# Install dependencies
|
|
bun install
|
|
|
|
# Run in development mode
|
|
bun run dev
|
|
|
|
# Build for production
|
|
bun run build
|
|
|
|
# Build distributable binaries
|
|
bun run build:mac # macOS (Universal)
|
|
bun run build:win # Windows (x64)
|
|
bun run build:linux # Linux (x64)
|
|
bun run build:all # All platforms
|
|
|
|
# See BUILD.md for more build options
|
|
```
|
|
|
|
## Development
|
|
|
|
### Project Structure
|
|
|
|
```
|
|
packages/opencode-client/
|
|
├── docs/ # Documentation
|
|
├── tasks/ # Task management
|
|
│ ├── todo/ # Pending tasks
|
|
│ └── done/ # Completed tasks
|
|
├── electron/ # Electron main process
|
|
│ ├── main/ # Main process code
|
|
│ ├── preload/ # Preload scripts
|
|
│ └── resources/ # App icons, etc.
|
|
└── src/ # Renderer (UI) code
|
|
├── components/ # UI components
|
|
├── stores/ # State management
|
|
├── lib/ # Utilities
|
|
├── hooks/ # SolidJS hooks
|
|
└── types/ # TypeScript types
|
|
```
|
|
|
|
### Tech Stack
|
|
|
|
- **Electron** - Desktop wrapper
|
|
- **SolidJS** - Reactive UI framework
|
|
- **TypeScript** - Type safety
|
|
- **Vite** - Build tool
|
|
- **TailwindCSS** - Styling
|
|
- **Kobalte** - Accessible UI primitives
|
|
- **OpenCode SDK** - API client
|
|
|
|
### Scripts
|
|
|
|
```bash
|
|
bun run dev # Start dev server with hot reload
|
|
bun run build # Build for production
|
|
bun run typecheck # Run TypeScript type checking
|
|
bun run preview # Preview production build
|
|
```
|
|
|
|
## Usage
|
|
|
|
### Starting an Instance
|
|
|
|
1. Launch the app
|
|
2. Click "Select Folder" or press Cmd/Ctrl+N
|
|
3. Choose a project folder
|
|
4. Wait for OpenCode server to start
|
|
5. Select an existing session or create new one
|
|
|
|
### Working with Sessions
|
|
|
|
- **Switch sessions**: Click session tab at bottom
|
|
- **Create session**: Click "+" button or Cmd/Ctrl+T
|
|
- **Change agent**: Use agent dropdown
|
|
- **Change model**: Use model dropdown
|
|
|
|
### Sending Messages
|
|
|
|
- Type in the input box at bottom
|
|
- Press Enter for new line (Cmd+Enter on macOS, Ctrl+Enter on Windows/Linux)
|
|
- Use `/` for commands
|
|
- Use `@` to mention files
|
|
|
|
## Documentation
|
|
|
|
- [Architecture](docs/architecture.md) - System design and structure
|
|
- [User Interface](docs/user-interface.md) - UI specifications
|
|
- [Technical Implementation](docs/technical-implementation.md) - Implementation details
|
|
- [Build Roadmap](docs/build-roadmap.md) - Development plan and phases
|
|
- [Tasks](tasks/README.md) - Task breakdown and tracking
|
|
|
|
## Build Phases
|
|
|
|
The project is built in phases:
|
|
|
|
1. **Phase 1**: Foundation (Tasks 001-005)
|
|
2. **Phase 2**: Core Chat (Tasks 006-010)
|
|
3. **Phase 3**: Essential Features (Tasks 011-015)
|
|
4. **Phase 4**: Multi-Instance (Tasks 016-020)
|
|
5. **Phase 5**: Advanced Input (Tasks 021-025)
|
|
6. **Phase 6**: Polish & UX (Tasks 026-030)
|
|
7. **Phase 7**: System Integration (Tasks 031-035)
|
|
8. **Phase 8**: Advanced Features (Tasks 036-040)
|
|
|
|
See [docs/build-roadmap.md](docs/build-roadmap.md) for detailed phase information.
|
|
|
|
## Contributing
|
|
|
|
### Getting Started
|
|
|
|
1. Read the documentation in `docs/`
|
|
2. Check `tasks/todo/` for available tasks
|
|
3. Pick a task and create a feature branch
|
|
4. Follow the task steps
|
|
5. Submit PR when complete
|
|
|
|
### Code Style
|
|
|
|
- Use TypeScript for all code
|
|
- Follow existing patterns and conventions
|
|
- Write clear, descriptive commit messages
|
|
- Add comments for complex logic
|
|
- Keep components small and focused
|
|
|
|
### Testing
|
|
|
|
- Test manually at minimum window size (800x600)
|
|
- Test on multiple platforms (macOS, Windows, Linux)
|
|
- Verify keyboard navigation works
|
|
- Check accessibility with screen readers
|
|
|
|
## Troubleshooting
|
|
|
|
### Server Won't Start
|
|
|
|
- Verify `opencode` is in PATH: `which opencode`
|
|
- Check folder permissions
|
|
- Review server logs in Logs tab
|
|
- Try restarting the instance
|
|
|
|
### Connection Issues
|
|
|
|
- Check if server is running: `ps aux | grep opencode`
|
|
- Verify port is correct in instance metadata
|
|
- Check for firewall blocking localhost
|
|
- Try killing and restarting server
|
|
|
|
### Performance Issues
|
|
|
|
- Check number of messages in session
|
|
- Monitor memory usage in Activity Monitor
|
|
- Consider enabling virtual scrolling (Phase 8)
|
|
- Close unused instances
|
|
|
|
## License
|
|
|
|
[License TBD]
|
|
|
|
## Credits
|
|
|
|
Built with ❤️ for the OpenCode project.
|