From bed34f9d6954480c5a3309108af642f79f0d4d7c Mon Sep 17 00:00:00 2001 From: zhixian Date: Thu, 19 Feb 2026 16:00:40 +0900 Subject: [PATCH] fix: chat scroll, add sidebar logo, WSL2 docs - Fix chat panel not scrolling by adding overflow-hidden to ScrollArea - Add 36x36 app logo next to "ClawPal" title in sidebar - Add WSL2 SSH setup guide to README Generated with [Claude Code](https://claude.ai/code) via [Happy](https://happy.engineering) Co-Authored-By: Claude Co-Authored-By: Happy --- README.md | 95 ++++++++++++++++++++++++++++++---------- src/App.tsx | 6 ++- src/assets/logo.png | Bin 0 -> 14956 bytes src/components/Chat.tsx | 2 +- 4 files changed, 78 insertions(+), 25 deletions(-) create mode 100644 src/assets/logo.png diff --git a/README.md b/README.md index fe74d5d..23a46eb 100644 --- a/README.md +++ b/README.md @@ -1,42 +1,91 @@ -# ClawPal MVP (Tauri) +# ClawPal -ClawPal is a local helper for OpenClaw configuration: -- install scenarios via Recipes -- one-click rollback for every config change -- local doctor checks with basic auto-fixes +A desktop companion app for [OpenClaw](https://github.com/openclaw/openclaw) — manage your AI agents, models, and configurations with a visual interface instead of editing JSON by hand. -## Quick start +## Features + +- **Recipes** — Browse and apply pre-built configuration templates with parameter forms, live diffs, and automatic rollback on failure +- **Agent Management** — Create, configure, and monitor your OpenClaw agents at a glance +- **Model Profiles** — Set up API keys, browse the model catalog, and switch the global default model in one click +- **Channel Bindings** — Connect Discord channels to agents with per-channel model overrides +- **Doctor** — Run diagnostics, auto-fix common issues, and clean up stale sessions +- **History & Rollback** — Every config change is snapshotted; roll back to any point in time +- **Remote Management** — Connect to remote OpenClaw instances over SSH and manage them the same way +- **Auto-Update** — ClawPal checks for new versions and updates itself in-app + +## Install + +Download the latest release for your platform from [GitHub Releases](https://github.com/zhixianio/clawpal/releases): + +| Platform | Format | +|----------|--------| +| macOS (Apple Silicon) | `.dmg` | +| macOS (Intel) | `.dmg` | +| Windows | `.exe` installer or portable | +| Linux | `.deb` / `.AppImage` | + +## Development + +Prerequisites: [Node.js](https://nodejs.org/) 20+, [Rust](https://www.rust-lang.org/tools/install), and [Tauri CLI](https://v2.tauri.app/start/prerequisites/) ```bash npm install -npm run dev +npm run dev # Vite dev server + Tauri window ``` -### Override folders outside `~/.openclaw` - -You can place ClawPal-managed files outside `~/.openclaw` with env vars: - -```bash -export CLAWPAL_OPENCLAW_DIR="$HOME/.openclaw" # OpenClaw 配置来源目录(默认) -export CLAWPAL_DATA_DIR="$HOME/.clawpal" # ClawPal 元数据目录(默认: $CLAWPAL_OPENCLAW_DIR/.clawpal) -``` - -## Build +### Build ```bash npm run build cd src-tauri && cargo build ``` -## Release +### Release ```bash -npm run release:dry-run -npm run release +npm run release:dry-run # Preview version bump + tag +npm run release # Tag and push (triggers CI) ``` +### Environment overrides + +```bash +export CLAWPAL_OPENCLAW_DIR="$HOME/.openclaw" # OpenClaw config directory (default) +export CLAWPAL_DATA_DIR="$HOME/.clawpal" # ClawPal metadata directory +``` + +## WSL2 (Windows Subsystem for Linux) + +If you have OpenClaw installed inside WSL2, you can manage it from ClawPal using the built-in SSH Remote feature: + +1. Enable SSH inside your WSL2 distro: + ```bash + sudo apt install openssh-server + sudo systemctl enable ssh + sudo systemctl start ssh + ``` + +2. In ClawPal, add a new SSH host: + - **Host**: `localhost` + - **Port**: the SSH port (default `22`, or check with `ss -tlnp | grep ssh`) + - **User**: your WSL2 username + +3. Connect — ClawPal will manage the WSL2 OpenClaw instance the same as any remote server. + +## Tech stack + +- **Frontend** — React, TypeScript, Tailwind CSS, Radix UI +- **Backend** — Rust, Tauri 2 +- **Remote** — russh (SSH/SFTP) + ## Project layout -- `src/` React + TypeScript UI -- `src-tauri/` Rust + Tauri host and command APIs -- `docs/plans/` design and implementation plan +``` +src/ React + TypeScript UI +src-tauri/ Rust + Tauri backend +docs/plans/ Design and implementation plans +``` + +## License + +Proprietary. All rights reserved. diff --git a/src/App.tsx b/src/App.tsx index f80a71e..d9b87fe 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -7,6 +7,7 @@ import { Settings } from "./pages/Settings"; import { Doctor } from "./pages/Doctor"; import { Channels } from "./pages/Channels"; import { Chat } from "./components/Chat"; +import logoUrl from "./assets/logo.png"; import { DiffViewer } from "./components/DiffViewer"; import { InstanceTabBar } from "./components/InstanceTabBar"; import { InstanceContext } from "./lib/instance-context"; @@ -218,7 +219,10 @@ export function App() { />
- + {messages.map((msg, i) => (