111 lines
4.4 KiB
Markdown
111 lines
4.4 KiB
Markdown
# Internal web UI — local development (#426)
|
|
|
|
Read-only MVP skeleton for the MCP Control Plane operator console. Gitea,
|
|
MCP capability gates, and `skills/llm-project-workflow/` remain the source of
|
|
truth; this UI only provides route stubs and layout.
|
|
|
|
## Prerequisites
|
|
|
|
- Python 3.11+ with project dependencies installed (`pip install -r requirements.txt`)
|
|
- No secrets in repo, config, or client bundle
|
|
|
|
## Start the server
|
|
|
|
From the repository root (or an issue worktree):
|
|
|
|
```bash
|
|
./scripts/run-webui
|
|
```
|
|
|
|
Or directly:
|
|
|
|
```bash
|
|
python3 -m webui
|
|
```
|
|
|
|
Optional environment variables:
|
|
|
|
| Variable | Default | Purpose |
|
|
|----------|---------|---------|
|
|
| `WEBUI_HOST` | `127.0.0.1` | Bind address (keep local for MVP) |
|
|
| `WEBUI_PORT` | `8765` | Listen port |
|
|
| `WEBUI_REPO_ROOT` | repository root | Prompt library workflow hash root |
|
|
| `WEBUI_PROJECT_REGISTRY` | packaged JSON | Project registry path |
|
|
| `GITEA_MCP_CONFIG` | unset | Server-side MCP profile config (never sent to browser) |
|
|
| `GITEA_MCP_PROFILE` | unset | Active MCP profile name (server-side only) |
|
|
|
|
See [webui-deployment.md](webui-deployment.md) for internal-only serving,
|
|
Cloudflare Access/WARP/VPN guidance, and unsafe bind overrides (#435).
|
|
|
|
## Routes (MVP)
|
|
|
|
| Path | Description |
|
|
|------|-------------|
|
|
| `/` | Home / operator overview |
|
|
| `/health` | JSON liveness (`status`, `service`, `mode`, `timestamp`) |
|
|
| `/queue` | Live PR and issue queue dashboard (#429) |
|
|
| `/api/queue` | JSON queue export with pagination metadata |
|
|
| `/projects` | Project registry list (#427) |
|
|
| `/projects/{id}` | Project detail + onboarding checklist |
|
|
| `/api/projects` | JSON registry export |
|
|
| `/prompts` | Prompt library with per-prompt copy buttons (#428) |
|
|
| `/api/prompts` | JSON prompt export with workflow hashes |
|
|
| `/runtime` | Stub — MCP runtime health (#430) |
|
|
| `/audit` | Stub — report audit paste (#431) |
|
|
| `/worktrees` | Stub — hygiene dashboard (#432) |
|
|
| `/leases` | Lease and collision visibility (#433) |
|
|
| `/api/leases` | JSON lease/collision export |
|
|
|
|
All routes are GET-only. POST/PUT/PATCH/DELETE return `405` with
|
|
`read-only-mvp`.
|
|
|
|
## Project registry (#427)
|
|
|
|
Versioned registry file: `webui/data/projects.registry.json` (schema version `1`).
|
|
|
|
Override path with `WEBUI_PROJECT_REGISTRY` when operators keep a machine-local
|
|
copy outside git. The registry stores repo identity, remotes, profile names,
|
|
workflow/schema path references, and onboarding checklist steps — never tokens
|
|
or credentials.
|
|
|
|
Seed entry: **Gitea-Tools** on `https://gitea.prgs.cc` with `prgs-author`,
|
|
`prgs-reviewer`, and `prgs-reconciler` profiles.
|
|
|
|
## Prompt library (#428)
|
|
|
|
Prompts are generated at load time from canonical workflow files under
|
|
`skills/llm-project-workflow/workflows/`. SHA-256 hashes are computed from
|
|
`WEBUI_REPO_ROOT` (defaults to the repository root). Prompt bodies are short
|
|
copy/paste starters; canonical workflow files remain the only full policy
|
|
source.
|
|
|
|
## Live queue dashboard (#429)
|
|
|
|
`/queue` loads open PRs and issues for the default registry project (seed:
|
|
**Gitea-Tools** on `https://gitea.prgs.cc`) using existing `gitea_auth` read
|
|
credentials. The UI surfaces pagination proof (returned count, pages fetched,
|
|
`has_more`, `inventory_complete`) and classification badges (`claimed`,
|
|
`blocked`, `in-review`, `duplicate`) when evidence exists.
|
|
|
|
If credentials are missing or the fetch fails, the page shows an explicit error
|
|
instead of an empty queue (fail closed).
|
|
|
|
## Deployment boundary (#435)
|
|
|
|
MVP serves on loopback by default. Binding `0.0.0.0` or `::` is **refused**
|
|
unless `WEBUI_ALLOW_PUBLIC_BIND=1`. Non-loopback hosts log a warning unless
|
|
`WEBUI_ALLOW_REMOTE_BIND=1`. `GET /health` exposes `deployment` metadata.
|
|
## Lease visibility (#433)
|
|
|
|
`/leases` surfaces read-only lease and collision state: local issue lock file,
|
|
in-progress claim inventory (#268), reviewer PR lease comments when present
|
|
(`<!-- mcp-review-lease:v1 -->`, #407), duplicate open PRs per issue (#400),
|
|
and duplicate local branches per issue. Links to collision-history backend
|
|
issues (#267, #268, #400, #407) are included. No lease acquire/release from UI.
|
|
|
|
## Tests
|
|
|
|
```bash
|
|
pytest tests/test_webui_skeleton.py tests/test_webui_project_registry.py tests/test_webui_prompt_library.py tests/test_webui_queue_dashboard.py tests/test_webui_deployment_boundary.py -q
|
|
pytest tests/test_webui_skeleton.py tests/test_webui_project_registry.py tests/test_webui_prompt_library.py tests/test_webui_queue_dashboard.py tests/test_webui_lease_visibility.py -q
|
|
``` |