blob: 90e88778e85798f96ce0579599c2ff33c5998cd8 [file] [log] [blame] [view]
# Loop WebUI
A modern web interface for the CodingAgent loop.
The server in the sibling directory (../server) exposes an HTTP API for
the CodingAgent.
## Development
This module contains a TypeScript-based web UI for the Loop service. The TypeScript code is compiled into JavaScript using esbuild, and the resulting bundle is served by the Go server.
### Prerequisites
- Node.js and npm
- Go 1.20 or later
### Setup
```bash
# Install dependencies
make install
# Run tests
make check
```
### Development Mode
For development, you can use watch mode:
```bash
make dev
```
This will launch a local web server at http://127.0.0.1:5173/ that serves the demo pages for the web components. You can edit the TypeScript files, and the changes will be reflected in real-time.
To access the main app shell interface on the dev server (the primary UI component for Sketch):
1. Start the dev server as above
2. Navigate to http://127.0.0.1:5173/src/web-components/demo/sketch-app-shell.demo.html
or click on the "sketch-app-shell" link from the demo index page
### UI Component Demos
The development server provides access to individual component demos including:
- Main app shell: http://127.0.0.1:5173/src/web-components/demo/sketch-app-shell.demo.html
- Chat input: http://127.0.0.1:5173/src/web-components/demo/sketch-chat-input.demo.html
- Timeline: http://127.0.0.1:5173/src/web-components/demo/sketch-timeline.demo.html
- And more...
You can access these demos from the index page or navigate directly to the specific component demo URL.
#### VSCode
If you are using Visual Studio Code, you can use the `Launch Chrome against localhost` launch configuration to run the demo server. This configuration is set up to automatically open a sketch page with dummy data in Chrome when you start debugging, supporting hot module reloading and breakpoints.
## Integration with Go Server
The TypeScript code is bundled into JavaScript using esbuild and then served by the Go HTTP server. The integration happens through the `webui` package, which provides a function to retrieve the built bundle.
The server code accesses the built web UI through the `webui.GetBundle()` function, which returns a filesystem that can be used to serve the files.
## File Structure
- `src/`: TypeScript source files
- `dist/`: Generated JavaScript bundle
- `esbuild.go`: Go code for bundling TypeScript files
- `Makefile`: Build tasks
## Bundle Analysis
You can analyze the size and dependency structure of the TypeScript bundles:
```bash
# Generate bundle metafiles in a temporary directory
go run sketch.dev/cmd/bundle-analyzer
```
The tool generates metafiles that can be analyzed by dragging them onto the esbuild analyzer at https://esbuild.github.io/analyze/