feat(ui): add browser console served by the daemon
Introduce a minimal operations console reachable on a dedicated UI port (default 8081), kept separate from the OpenAI-compatible API port. - ts_web/ holds the SPA shell (index.html, app.css, vanilla app.js) with sidebar navigation for all views from readme.ui.md and a working Overview page backed by a new /_ui/overview JSON endpoint. - scripts/bundle-ui.ts walks ts_web/ and emits ts_bundled/bundle.ts, a single generated module exporting every asset as base64. Mirrors the @stack.gallery/registry pattern so deno compile binaries embed the entire UI with no external filesystem dependency at runtime. - ts/ui/server.ts (UiServer) serves assets from either the bundled map (default, prod) or directly from ts_web/ on disk (dev). The source is chosen per-config and can be overridden by UI_ASSET_SOURCE=disk|bundle. SPA fallback routes unknown extensionless paths to index.html. - IModelGridConfig.ui block with enabled/port/host/assetSource defaults; config init writes the block, the normalizer fills in defaults on load, and the daemon starts/stops the UI server alongside the API. - deno.json gains a bundle:ui task; compile:all now depends on it so released binaries always contain an up-to-date bundle. dev task sets UI_ASSET_SOURCE=disk for hot edits. - ts_bundled/ is gitignored (generated on build). - test/ui-server.smoke.ts exercises bundle and disk modes end to end (index, app.js, SPA fallback, /_ui/overview, 404).
This commit is contained in:
@@ -60,6 +60,28 @@ export interface IModelConfig {
|
||||
autoLoad: string[];
|
||||
}
|
||||
|
||||
/**
|
||||
* Browser-based operations console (UI) configuration.
|
||||
* The UI is served on its own port, distinct from the OpenAI API port,
|
||||
* so that the data plane stays clean.
|
||||
*/
|
||||
export interface IUiConfig {
|
||||
/** Whether to start the UI server alongside the API */
|
||||
enabled: boolean;
|
||||
/** Port to bind the UI server to (default: 8081) */
|
||||
port: number;
|
||||
/** Host to bind the UI server to (default: '0.0.0.0') */
|
||||
host: string;
|
||||
/**
|
||||
* Where UI assets come from.
|
||||
* - 'bundle': from the compiled-in `ts_bundled/bundle.ts` (default, required
|
||||
* for `deno compile` single-binary builds)
|
||||
* - 'disk': read on demand from `ts_web/` for the dev loop
|
||||
* Overridden at runtime by the `UI_ASSET_SOURCE` env var.
|
||||
*/
|
||||
assetSource: 'bundle' | 'disk';
|
||||
}
|
||||
|
||||
/**
|
||||
* Main ModelGrid configuration interface
|
||||
*/
|
||||
@@ -68,6 +90,8 @@ export interface IModelGridConfig {
|
||||
version: string;
|
||||
/** API server configuration */
|
||||
api: IApiConfig;
|
||||
/** UI server configuration */
|
||||
ui: IUiConfig;
|
||||
/** Docker configuration */
|
||||
docker: IDockerConfig;
|
||||
/** GPU configuration */
|
||||
|
||||
Reference in New Issue
Block a user