The front end is rebuilt on the design tokens the desktop app ships (surfaces, color-mix borders, alpha hovers, accent): a 30-icon inline SVG sprite, dark and light themes, layout switches as deep links (?side=0, ?panel=0, ?theme=light) resolved before the first paint. The empty page is one line and leaves with the first turn; the right rail keeps three cards - todo, file changes (+N -M) and context (tokens, prompt cache hit rate). Both rails animate in and out, and a collapsed rail widens its grid track to 0 instead of being removed, so the transcript never slides into a zero-width column. - src/webui.c: POST /api/workspace - re-root the agent at another directory (permission rules, metrics, AGENTS.md follow) and start a session there, as sessions live per directory; state also reports cached/cache_miss tokens - src/agent_loop.c: cst_agent_set_workspace(), rebuilt prompt and re-measured budget; the auto-compact threshold is 75% of the window (was 60%) - src/tui.c: /web forks a WebUI next to the TUI - separate process and a new session, because cst_webui_run() blocks and two writers corrupt one session - src/os_compat.c, src/os_win.c: run_shell runs without a time limit unless CST_SHELL_TIMEOUT asks for one, so builds and long clones finish - src/main.c, include/cst_webui.h: one CST_WEBUI_DEFAULT_PORT for --help, the docs and /web; Termux opens the browser through termux-open-url - README.md, docs/webui.md, docs/env_openai.md: /web, /api/workspace, the new state fields, the 75% threshold and the layout deep links tests/e2e_webui.sh green (permission round-trip, token paths, --web-dev); make check green.
45 lines
1.5 KiB
C
45 lines
1.5 KiB
C
#ifndef CST_WEBUI_H
|
|
#define CST_WEBUI_H
|
|
|
|
/* The built-in WebUI: an HTTP + SSE front end for one agent process.
|
|
*
|
|
* It is a second implementation of the same interface the TUI uses
|
|
* (cst_agent_hooks_t), which is why the engine needs no changes: the turn
|
|
* runs on a worker thread and every live event goes out as a Server-Sent
|
|
* Event. The protocol is documented in docs/webui.md and is meant to be
|
|
* the contract a dedicated client speaks later. */
|
|
|
|
#include "cst_agent.h"
|
|
|
|
#include <stddef.h>
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
/* What --web listens on when --web-port/CST_WEB_PORT says nothing (the
|
|
* README and --help quote this number, so keep them in sync). */
|
|
#define CST_WEBUI_DEFAULT_PORT 8787
|
|
|
|
typedef struct {
|
|
const char *host; /* NULL = 127.0.0.1; "0.0.0.0" = every interface */
|
|
int port; /* 0 = pick a free port */
|
|
const char *token; /* NULL = generate one when needed */
|
|
const char *root; /* serve the UI from this directory instead of the
|
|
copy embedded in the binary (development) */
|
|
int open_browser; /* best-effort xdg-open / open / start */
|
|
/* Prompt to run once at startup (--web -p ...); NULL = wait for the UI. */
|
|
const char *prompt;
|
|
int perm_timeout_s; /* how long a permission question waits (0 = 600) */
|
|
} cst_webui_opts_t;
|
|
|
|
/* Serve until interrupted (Ctrl+C) or the event stream asks to quit.
|
|
* Returns the process exit code. */
|
|
int cst_webui_run(cst_agent_t *agent, const cst_webui_opts_t *opts);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif /* CST_WEBUI_H */
|