Initial
This commit is contained in:
+115
@@ -0,0 +1,115 @@
|
||||
# Contributing to EvoScientist WebUI
|
||||
|
||||
We appreciate your interest and the time you spend helping improve the EvoScientist WebUI. Please read the following guidelines before contributing.
|
||||
|
||||
## How you can contribute
|
||||
|
||||
- **Report bugs and request features:** open an issue describing the problem, steps to reproduce, and your environment (Node version, backend version).
|
||||
- **Propose design changes:** use issues to outline the problem, alternatives, and trade-offs before implementing.
|
||||
- **Contribute code or docs:** submit PRs that address an open issue, with a clear rationale.
|
||||
|
||||
## The zero-touch-backend principle
|
||||
|
||||
> [!IMPORTANT]
|
||||
> The WebUI is a **runtime client only**. It must work against an unmodified EvoScientist backend — it talks to a running deployment over the LangGraph SDK and thin same-origin `/api/` routes, and never requires changes to the EvoScientist repo. Keep all new features within this constraint (the one sanctioned exception, the `webui` launch mode, already lives in EvoScientist).
|
||||
|
||||
## Prerequisites
|
||||
|
||||
- **Node.js 20+**.
|
||||
- A running **EvoScientist backend** (the LangGraph deployment). From your EvoScientist install:
|
||||
```bash
|
||||
EvoSci deploy # serves the LangGraph API at http://127.0.0.1:6174
|
||||
```
|
||||
Keep it running in its own terminal.
|
||||
|
||||
## Development setup
|
||||
|
||||
1. **Fork and clone** the repository:
|
||||
```bash
|
||||
git clone https://github.com/<your-username>/EvoScientist-WebUI.git
|
||||
cd EvoScientist-WebUI
|
||||
```
|
||||
|
||||
2. **Install dependencies** (package manager is **npm**):
|
||||
```bash
|
||||
npm install
|
||||
```
|
||||
|
||||
3. **Start the dev server:**
|
||||
```bash
|
||||
npm run dev
|
||||
```
|
||||
Open <http://localhost:4716>. In the configuration dialog, enter your **Deployment URL** (default `http://127.0.0.1:6174`) and click **Save**.
|
||||
|
||||
> You need two things running: the EvoScientist backend (`EvoSci deploy`, port `6174`) and this UI (`npm run dev`, port `4716`).
|
||||
|
||||
## Scripts
|
||||
|
||||
| Command | Description |
|
||||
| ---------------------- | --------------------------------------- |
|
||||
| `npm run dev` | Start the dev server on port 4716 |
|
||||
| `npm run build` | Production build + assemble `dist/` |
|
||||
| `npm start` | Serve the production build on port 4716 |
|
||||
| `npm run start:dist` | Run the assembled standalone `dist/` |
|
||||
| `npm run lint` | Lint with ESLint |
|
||||
| `npm run lint:fix` | Lint and auto-fix |
|
||||
| `npm run format` | Format with Prettier |
|
||||
| `npm run format:check` | Check formatting (used in CI) |
|
||||
|
||||
## Production build
|
||||
|
||||
```bash
|
||||
npm run build # next build + assemble standalone into dist/
|
||||
npm start # serves the production build on http://localhost:4716
|
||||
```
|
||||
|
||||
## Project structure
|
||||
|
||||
```txt
|
||||
EvoScientist-WebUI/
|
||||
bin/ # npx launcher (evoscientist-webui.mjs → dist/server.js)
|
||||
scripts/ # assemble-standalone.mjs (packs dist/, strips *.map)
|
||||
src/
|
||||
app/
|
||||
api/ # thin same-origin server routes
|
||||
evosci-config/ # detect backend port
|
||||
skills/ # install / list / remove skills
|
||||
memory/ # read / edit global memory
|
||||
workspace/ # browse / edit / download files
|
||||
components/ # React components (chat, panels, dialogs)
|
||||
hooks/ # useChat, useThreads, useAsyncAgents, …
|
||||
page.tsx # multi-view shell (routes via nuqs)
|
||||
components/ # shared UI primitives
|
||||
lib/ # client + server helpers (asyncAgents, memory, …)
|
||||
server/ # server-only fs helpers with path guards
|
||||
providers/ # Theme / Client providers
|
||||
```
|
||||
|
||||
## Architecture & connection contract
|
||||
|
||||
Three independent layers:
|
||||
|
||||
1. **Frontend** (Next.js standalone, port `4716`) — browser connects directly to the LangGraph backend; pure client-side chat + streaming.
|
||||
2. **Next `/api/` routes** (server tool layer, same-origin) — the reason distribution is `output: "standalone"` rather than a static export.
|
||||
3. **Backend** (EvoScientist's `langgraph dev`, default port `6174`) — the anchor process: runs async agents, holds state, serves the SDK.
|
||||
|
||||
The backend exposes graphs `EvoScientist` (main, UI-locked), `writing-agent`, `data-analysis-agent`, and the `evomemory` workers. The UI filters thread lists by `metadata.graph_id == "EvoScientist"` so worker/sub-agent threads stay hidden.
|
||||
|
||||
## Code style
|
||||
|
||||
- **TypeScript** — keep `npm run lint` (ESLint) clean and run `tsc --noEmit` before pushing.
|
||||
- **Formatting** — `prettier --check .` must pass (run `npm run format` to fix).
|
||||
- **Tailwind gotcha:** this project's `tailwind.config.mjs` overrides named tokens like `bg-primary`/`text-primary` to undefined LangSmith vars, so those classes render transparent. Use arbitrary values such as `bg-[var(--brand-solid)]` instead, and never apply a `/NN` opacity modifier to a `var()`-based color (it silently drops the declaration).
|
||||
- Follow the existing patterns and conventions in the area you're modifying; keep changes minimal and focused.
|
||||
|
||||
## Submitting a pull request
|
||||
|
||||
1. Create a branch from `main` with a descriptive name (e.g. `fix/stream-tail`, `feat/command-palette`).
|
||||
2. Make your changes, keeping commits focused. Use semantic prefixes: `fix:`, `feat:`, `docs:`, `chore:`, `refactor:`.
|
||||
3. Ensure `npm run lint`, `tsc --noEmit`, and `npm run format:check` pass locally — these also run in CI.
|
||||
4. Open a PR against `main` describing what changed and why. Include screenshots or screen recordings for any UI change.
|
||||
5. A maintainer will review your PR. Please be responsive to feedback.
|
||||
|
||||
## Need help?
|
||||
|
||||
Open an [issue](https://github.com/EvoScientist/EvoScientist-WebUI/issues) if you have a question or run into a problem.
|
||||
@@ -1,66 +1,150 @@
|
||||
# EvoScientist WebUI
|
||||
# 🌐 EvoScientist WebUI
|
||||
|
||||
Web UI for **EvoScientist** — a self-evolving AI scientist built on DeepAgents/LangGraph.
|
||||
**The desktop-level browser workspace for [EvoScientist](https://github.com/EvoScientist/EvoScientist), designed to make Vibe Research feel natural. By bringing evolving memory, research skills, multi-agent workflows, and workspace management together in one place, it helps researchers spend less time managing information and more time exploring ideas — so scientific discovery can move faster.**
|
||||
|
||||
The browser connects directly to a running EvoScientist deployment and gives you a
|
||||
chat interface with streaming responses, tool calls, sub-agent activity, files, and tasks.
|
||||
<div align="center">
|
||||
|
||||
## Prerequisites
|
||||
<a href="https://www.npmjs.com/package/@evoscientist/webui"><img alt="npm" src="https://img.shields.io/npm/v/@evoscientist/webui?color=00BCD4&label=npm" height="28"></a>
|
||||
<a href="https://github.com/EvoScientist/EvoScientist"><img alt="Powered by EvoScientist" src="https://img.shields.io/badge/powered%20by-EvoScientist-066679" height="28"></a>
|
||||
<a href="https://nextjs.org/"><img alt="Next.js 16" src="https://img.shields.io/badge/Next.js-16-black" height="28"></a>
|
||||
<a href="./LICENSE"><img alt="License Apache 2.0" src="https://img.shields.io/badge/license-Apache%202.0-blue" height="28"></a>
|
||||
|
||||
- **Node.js 20+**
|
||||
- A running **EvoScientist backend** (the LangGraph deployment). From your EvoScientist
|
||||
install, start it with:
|
||||
</div>
|
||||
|
||||
```bash
|
||||
EvoSci deploy # serves the LangGraph API at http://127.0.0.1:6174
|
||||
```
|
||||
---
|
||||
|
||||
Keep this running in its own terminal.
|
||||
<table>
|
||||
<tr>
|
||||
<td align="center">
|
||||
<video src="https://github.com/user-attachments/assets/b977f2d5-488a-428d-9c02-b6b27c1521f8" autoplay loop muted playsinline width="100%">
|
||||
<a href="https://github.com/user-attachments/assets/b977f2d5-488a-428d-9c02-b6b27c1521f8">View WebUI demo</a>
|
||||
</video>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
## Quick start (development)
|
||||
> [!TIP]
|
||||
> Looking for the engine behind this UI? Check out [**EvoScientist**](https://github.com/EvoScientist/EvoScientist) — the multi-agent AI scientist — and [**EvoSkills**](https://github.com/EvoScientist/EvoSkills), its ready-to-use research skill packs. This WebUI is a thin, zero-touch client: it talks to a running EvoScientist deployment over the LangGraph SDK and adds **nothing** to your backend.
|
||||
|
||||
## ✨ Features
|
||||
|
||||
- **💬 Streaming Chat** — Real-time responses with Markdown, GFM tables, code highlighting, and collapsible thinking/reasoning blocks.
|
||||
- **👋 Human-in-the-Loop** — Approve / reject / edit tool calls, and answer the agent's structured questions (text + multiple-choice) inline.
|
||||
- **⚡ Per-Thread Auto-Approve** — Persisted per conversation; survives view and thread switches and reloads.
|
||||
- **🤖 Sub-Agent Activity** — Live step tracking for sub-agents, rendered exactly like the main agent (tool calls + paired results + tables).
|
||||
- **🗂️ Workspace Browser** — Tree and by-type (Papers / Figures / Data / Code) views with preview, edit, download, and zip-all.
|
||||
- **🧠 Memory Browser** — View, edit, and manage EvoScientist's global cross-session memory, with "recently updated" highlights and a nav badge.
|
||||
- **🔌 Skills Marketplace** — Install, update, and uninstall the official [EvoSkills](https://github.com/EvoScientist/EvoSkills) catalog with version detection and a detail dialog.
|
||||
- **📡 Agents Monitor Board** — Watch async background agents (writing / data-analysis) with real run status, live duration, and a side-chat for direct worker debugging.
|
||||
- **🔁 Async Agent Communication** — Optional per-thread auto-report loops finished background results back to the main agent.
|
||||
- **🪄 Compaction Summary** — When the backend compacts a long conversation, the summary is shown as a clean collapsible block instead of flashing by.
|
||||
- **🩺 Connection Health & Resilience** — Health light, stale-URL one-click reconnect, and refresh-resumable streams.
|
||||
- **🎨 Themed & Responsive** — Light/dark warm "paper" theme with EvoScientist cyan accent; desktop split panes and mobile drawers.
|
||||
|
||||
## 📖 Table of Contents
|
||||
|
||||
- [📦 Prerequisites](#-prerequisites)
|
||||
- [⚡ Quick Start](#-quick-start)
|
||||
- [🔑 Configuration](#-configuration)
|
||||
- [🎨 Designed By](#-designed-by)
|
||||
- [🤝 Contributing](#-contributing)
|
||||
- [📚 Acknowledgments](#-acknowledgments)
|
||||
- [📜 License](#-license)
|
||||
|
||||
## 📦 Prerequisites
|
||||
|
||||
- [**EvoScientist**](https://github.com/EvoScientist/EvoScientist) installed and configured (`EvoSci onboard`).
|
||||
- **Node.js 20+** — the WebUI mode launches the front-end for you.
|
||||
|
||||
## ⚡ Quick Start
|
||||
|
||||
### Option A — via EvoScientist (recommended)
|
||||
|
||||
The WebUI ships with EvoScientist — just pick it during setup. Run the onboarding wizard and choose **WebUI** as your UI mode:
|
||||
|
||||
```bash
|
||||
npm install
|
||||
npm run dev
|
||||
EvoSci onboard # select "WebUI" when asked for the UI mode
|
||||
```
|
||||
|
||||
Open <http://localhost:4716>. In the configuration dialog, enter your **Deployment URL**
|
||||
(default `http://127.0.0.1:6174`) and click **Save**. That's it — start chatting.
|
||||
|
||||
> You need two things running: the EvoScientist backend (`EvoSci deploy`, port 6174)
|
||||
> and this UI (`npm run dev`, port 4716).
|
||||
|
||||
## Production build
|
||||
Then launch EvoScientist as usual — it starts the backend and the WebUI together and opens your browser:
|
||||
|
||||
```bash
|
||||
npm run build # outputs the optimized app
|
||||
npm start # serves it on http://localhost:4716
|
||||
EvoSci # opens http://localhost:4716
|
||||
```
|
||||
|
||||
## Configuration
|
||||
That's it — start chatting.
|
||||
|
||||
- **Deployment URL** — the EvoScientist LangGraph endpoint (default `http://127.0.0.1:6174`,
|
||||
the `EvoSci deploy` default port). Saved in your browser's local storage.
|
||||
- The UI always talks to the **EvoScientist** main agent; its sub-agents
|
||||
(`writing-agent`, `data-analysis-agent`) are internal and not user-selectable.
|
||||
- _(Optional, advanced)_ Set `NEXT_PUBLIC_LANGSMITH_API_KEY` if you connect to a
|
||||
deployment that requires LangSmith authentication.
|
||||
### Option B — standalone
|
||||
|
||||
## Scripts
|
||||
Start the EvoScientist backend in one terminal:
|
||||
|
||||
| Command | Description |
|
||||
| ---------------------- | --------------------------------------- |
|
||||
| `npm run dev` | Start the dev server on port 4716 |
|
||||
| `npm run build` | Production build |
|
||||
| `npm start` | Serve the production build on port 4716 |
|
||||
| `npm run lint` | Lint with ESLint |
|
||||
| `npm run format` | Format with Prettier |
|
||||
| `npm run format:check` | Check formatting (used in CI) |
|
||||
```bash
|
||||
EvoSci deploy # serves the LangGraph API at http://127.0.0.1:6174
|
||||
```
|
||||
|
||||
## Tech stack
|
||||
Then launch the WebUI in another (no install required):
|
||||
|
||||
Next.js 16 · React 19 · TypeScript · Tailwind CSS · `@langchain/langgraph-sdk`.
|
||||
```bash
|
||||
npx @evoscientist/webui@latest # opens http://localhost:4716
|
||||
npx @evoscientist/webui@latest --port 5000 # or pick a custom front-end port
|
||||
```
|
||||
|
||||
## License
|
||||
Open the URL, confirm the prefilled **Deployment URL** (auto-detected, default `http://127.0.0.1:6174`), click **Save**, and start chatting.
|
||||
|
||||
Apache-2.0 — see [LICENSE](LICENSE).
|
||||
<p align="right"><a href="#top">🔝Back to top</a></p>
|
||||
|
||||
## 🔑 Configuration
|
||||
|
||||
- **Deployment URL** — the EvoScientist LangGraph endpoint (default `http://127.0.0.1:6174`, the `EvoSci deploy` default port). Saved in your browser's local storage.
|
||||
- The UI always talks to the **EvoScientist** main agent; its sub-agents (`writing-agent`, `data-analysis-agent`) are internal and not user-selectable.
|
||||
- _(Optional, advanced)_ Set `NEXT_PUBLIC_LANGSMITH_API_KEY` if you connect to a deployment that requires LangSmith authentication.
|
||||
|
||||
> [!TIP]
|
||||
> If the backend changes ports, the health light detects the dead connection and offers a one-click **Reconnect** to the newly detected port.
|
||||
|
||||
<p align="right"><a href="#top">🔝Back to top</a></p>
|
||||
|
||||
## 🎨 Designed By
|
||||
|
||||
<table>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td align="center">
|
||||
<a href="https://x-izhang.github.io/">
|
||||
<img src="https://x-izhang.github.io/author/xi-zhang/avatar_hu13660783057866068725.jpg"
|
||||
width="100" height="100"
|
||||
style="object-fit: cover; border-radius: 20%;" alt="Xi Zhang"/>
|
||||
<br />
|
||||
<sub><b>Xi Zhang</b></sub>
|
||||
</a>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<p align="right"><a href="#top">🔝Back to top</a></p>
|
||||
|
||||
## 🤝 Contributing
|
||||
|
||||
We welcome contributions! See the [Contributing Guidelines](./CONTRIBUTING.md) for development setup, project structure, the zero-touch-backend principle, scripts, and the release flow.
|
||||
|
||||
Every contribution brings us one step closer to a future where AI accelerates scientific breakthroughs for all of humanity.
|
||||
|
||||
<p align="right"><a href="#top">🔝Back to top</a></p>
|
||||
|
||||
## 📚 Acknowledgments
|
||||
|
||||
This project builds upon the following outstanding open-source work:
|
||||
|
||||
- [**LangGraph**](https://github.com/langchain-ai/langgraph) — A low-level orchestration framework for building, managing, and deploying long-running, stateful agents.
|
||||
- [**deep-agents-ui**](https://github.com/langchain-ai/deep-agents-ui) — The LangChain reference UI for deep agents, which this project builds upon.
|
||||
|
||||
We thank the authors for their valuable contributions to the open-source community.
|
||||
|
||||
<p align="right"><a href="#top">🔝Back to top</a></p>
|
||||
|
||||
## 📜 License
|
||||
|
||||
This project is licensed under the Apache License 2.0 - see the [LICENSE](./LICENSE) file for details.
|
||||
|
||||
<p align="right"><a href="#top">🔝Back to top</a></p>
|
||||
|
||||
Reference in New Issue
Block a user