176 lines
4.3 KiB
Markdown
176 lines
4.3 KiB
Markdown
|
|
# GUI Application
|
||
|
|
|
||
|
|
The Core GUI (`cmd/core-gui`) is a Wails v3 desktop application that demonstrates the Core framework capabilities with integrated MCP support.
|
||
|
|
|
||
|
|
## Features
|
||
|
|
|
||
|
|
- Angular frontend with Wails bindings
|
||
|
|
- MCP HTTP server for AI tool integration
|
||
|
|
- WebView automation capabilities
|
||
|
|
- Real-time WebSocket communication
|
||
|
|
- System tray support
|
||
|
|
- Multi-window management
|
||
|
|
|
||
|
|
## Architecture
|
||
|
|
|
||
|
|
```
|
||
|
|
┌─────────────────────────────────────────┐
|
||
|
|
│ Angular Frontend │
|
||
|
|
│ (TypeScript + Wails Bindings) │
|
||
|
|
└─────────────────┬───────────────────────┘
|
||
|
|
│ IPC
|
||
|
|
┌─────────────────┴───────────────────────┐
|
||
|
|
│ Wails Runtime │
|
||
|
|
│ (Window, Events, Bindings) │
|
||
|
|
└─────────────────┬───────────────────────┘
|
||
|
|
│
|
||
|
|
┌─────────────────┴───────────────────────┐
|
||
|
|
│ MCP Bridge │
|
||
|
|
│ ┌─────────┬──────────┬─────────────┐ │
|
||
|
|
│ │ Display │ WebView │ WebSocket │ │
|
||
|
|
│ │ Service │ Service │ Hub │ │
|
||
|
|
│ └─────────┴──────────┴─────────────┘ │
|
||
|
|
└─────────────────────────────────────────┘
|
||
|
|
```
|
||
|
|
|
||
|
|
## Running the GUI
|
||
|
|
|
||
|
|
### Development Mode
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# From project root
|
||
|
|
task gui:dev
|
||
|
|
|
||
|
|
# Or directly
|
||
|
|
cd cmd/core-gui
|
||
|
|
wails3 dev
|
||
|
|
```
|
||
|
|
|
||
|
|
### Production Build
|
||
|
|
|
||
|
|
```bash
|
||
|
|
task gui:build
|
||
|
|
```
|
||
|
|
|
||
|
|
## Directory Structure
|
||
|
|
|
||
|
|
```
|
||
|
|
cmd/core-gui/
|
||
|
|
├── main.go # Application entry point
|
||
|
|
├── mcp_bridge.go # MCP HTTP server and tool handler
|
||
|
|
├── claude_bridge.go # Claude MCP client (optional)
|
||
|
|
├── frontend/ # Angular application
|
||
|
|
│ ├── src/
|
||
|
|
│ │ ├── app/ # Angular components
|
||
|
|
│ │ └── lib/ # Shared utilities
|
||
|
|
│ └── bindings/ # Generated Wails bindings
|
||
|
|
└── public/ # Static assets
|
||
|
|
```
|
||
|
|
|
||
|
|
## Services Integrated
|
||
|
|
|
||
|
|
The GUI integrates several Core services:
|
||
|
|
|
||
|
|
| Service | Purpose |
|
||
|
|
|---------|---------|
|
||
|
|
| Display | Window management, dialogs, tray |
|
||
|
|
| WebView | JavaScript execution, DOM interaction |
|
||
|
|
| MCP | AI tool protocol server |
|
||
|
|
| WebSocket | Real-time communication |
|
||
|
|
|
||
|
|
## Configuration
|
||
|
|
|
||
|
|
The application uses the Config service for settings:
|
||
|
|
|
||
|
|
```go
|
||
|
|
// Default settings
|
||
|
|
DefaultRoute: "/"
|
||
|
|
Language: "en"
|
||
|
|
Features: []
|
||
|
|
```
|
||
|
|
|
||
|
|
## Frontend Bindings
|
||
|
|
|
||
|
|
Wails generates TypeScript bindings for Go services:
|
||
|
|
|
||
|
|
```typescript
|
||
|
|
import { CreateWindow, ShowNotification } from '@bindings/display/service';
|
||
|
|
import { Translate, SetLanguage } from '@bindings/i18n/service';
|
||
|
|
|
||
|
|
// Create a new window
|
||
|
|
await CreateWindow({
|
||
|
|
name: "settings",
|
||
|
|
title: "Settings",
|
||
|
|
width: 800,
|
||
|
|
height: 600
|
||
|
|
});
|
||
|
|
|
||
|
|
// Show notification
|
||
|
|
await ShowNotification({
|
||
|
|
title: "Success",
|
||
|
|
message: "Operation completed!"
|
||
|
|
});
|
||
|
|
```
|
||
|
|
|
||
|
|
## WebSocket Communication
|
||
|
|
|
||
|
|
Connect to the WebSocket endpoint for real-time updates:
|
||
|
|
|
||
|
|
```typescript
|
||
|
|
const ws = new WebSocket('ws://localhost:9877/ws');
|
||
|
|
|
||
|
|
ws.onmessage = (event) => {
|
||
|
|
const data = JSON.parse(event.data);
|
||
|
|
console.log('Received:', data);
|
||
|
|
};
|
||
|
|
|
||
|
|
ws.send(JSON.stringify({
|
||
|
|
type: 'ping',
|
||
|
|
data: {}
|
||
|
|
}));
|
||
|
|
```
|
||
|
|
|
||
|
|
## System Tray
|
||
|
|
|
||
|
|
The application includes system tray support:
|
||
|
|
|
||
|
|
```go
|
||
|
|
// Set tray menu
|
||
|
|
display.SetTrayMenu([]display.TrayMenuItem{
|
||
|
|
{Label: "Open", ActionID: "open"},
|
||
|
|
{Label: "Settings", ActionID: "settings"},
|
||
|
|
{IsSeparator: true},
|
||
|
|
{Label: "Quit", ActionID: "quit"},
|
||
|
|
})
|
||
|
|
```
|
||
|
|
|
||
|
|
## Building for Distribution
|
||
|
|
|
||
|
|
### macOS
|
||
|
|
|
||
|
|
```bash
|
||
|
|
task gui:build
|
||
|
|
# Creates: build/bin/core-gui.app
|
||
|
|
```
|
||
|
|
|
||
|
|
### Windows
|
||
|
|
|
||
|
|
```bash
|
||
|
|
task gui:build
|
||
|
|
# Creates: build/bin/core-gui.exe
|
||
|
|
```
|
||
|
|
|
||
|
|
### Linux
|
||
|
|
|
||
|
|
```bash
|
||
|
|
task gui:build
|
||
|
|
# Creates: build/bin/core-gui
|
||
|
|
```
|
||
|
|
|
||
|
|
## Environment Variables
|
||
|
|
|
||
|
|
| Variable | Description |
|
||
|
|
|----------|-------------|
|
||
|
|
| `MCP_PORT` | MCP server port (default: 9877) |
|
||
|
|
| `DEBUG` | Enable debug logging |
|