mirror of
https://github.com/zhayujie/chatgpt-on-wechat.git
synced 2026-07-17 19:27:11 +08:00
82 lines
1.9 KiB
Markdown
82 lines
1.9 KiB
Markdown
# CowAgent Desktop
|
|
|
|
Cross-platform desktop client for CowAgent, built with Electron + React + TypeScript.
|
|
|
|
## Development
|
|
|
|
### Prerequisites
|
|
|
|
- Node.js 18+
|
|
- npm or yarn
|
|
- Python 3.7+ (for the backend)
|
|
|
|
### Setup
|
|
|
|
```bash
|
|
cd desktop
|
|
npm install
|
|
```
|
|
|
|
### Run in Development
|
|
|
|
Start the renderer dev server and Electron together:
|
|
|
|
```bash
|
|
npm run dev
|
|
```
|
|
|
|
Or run them separately:
|
|
|
|
```bash
|
|
# Terminal 1: Start Vite dev server
|
|
npm run dev:renderer
|
|
|
|
# Terminal 2: Start Electron (after renderer is ready)
|
|
npm run dev:main
|
|
```
|
|
|
|
The app will automatically start the Python backend from the parent directory.
|
|
|
|
### Build
|
|
|
|
```bash
|
|
# Build for current platform
|
|
npm run dist
|
|
|
|
# Build for macOS only
|
|
npm run dist:mac
|
|
|
|
# Build for Windows only
|
|
npm run dist:win
|
|
```
|
|
|
|
Build outputs are placed in the `release/` directory.
|
|
|
|
## Architecture
|
|
|
|
```
|
|
desktop/
|
|
├── src/
|
|
│ ├── main/ # Electron main process
|
|
│ │ ├── index.ts # Window management, IPC
|
|
│ │ ├── python-manager.ts # Python backend lifecycle
|
|
│ │ └── preload.ts # Context bridge for renderer
|
|
│ └── renderer/ # React UI (Vite)
|
|
│ └── src/
|
|
│ ├── api/ # HTTP client for backend APIs
|
|
│ ├── components/ # Reusable UI components
|
|
│ ├── hooks/ # React hooks
|
|
│ ├── pages/ # Page components
|
|
│ └── types.ts # TypeScript types
|
|
├── resources/ # App icons
|
|
├── package.json # Dependencies and build config
|
|
└── vite.config.ts # Vite config
|
|
```
|
|
|
|
### How it Works
|
|
|
|
1. Electron main process starts and creates the app window
|
|
2. It spawns the Python backend (`app.py`) as a child process
|
|
3. The React UI communicates with the Python backend via HTTP APIs
|
|
4. SSE (Server-Sent Events) is used for streaming chat responses and live logs
|