A launcher masks the icon it puts on the home screen, and the install manifest advertised the bare whale favicon: an SVG mark drawn edge to edge on a transparent canvas, with no tile and no background of its own. Handed to a mask it loses its fins, and iOS reads no manifest icon at all, so an installed Web App showed a generic tile. Ship four rasters rendered from the desktop application tile: 192px and 512px `any`, a 512px `maskable` whose artwork is scaled into the circle a platform mask is guaranteed to show, and a 180px `apple-touch-icon`. Request `display: standalone` so the phone keeps its status bar, and declare `png` in the static MIME table so a launcher receives an image. Agent Note: .agents/notes/implemented/feature/2026-10-13-web-install-icons-and-launch-display.md
description, kind
| description | kind |
|---|---|
| Package map for the web GUI host half: the HTTP and SPA servers, workspace-directory picking implementations, the open-in-app launch routes, the plugin inventory projection, and explicit product event reporting. | package-group |
host/ — web-GUI host half
English | 中文
Summary
The host/ group provides the web GUI's HTTP(S) server, the SPA dist server that serves the built Web shell, the workspace-directory picking seam with its native, browse, and adaptive composition packages, the open-in-app application probe and launch routes, the read-only plugin inventory projection, and explicit product event reporting. These packages are product packages; the browser transport lives in client/, and the composed application is apps/cli booting the dsh-base bundle that serves the web app under apps/web/. The picker backends replace one another behind the shared seam.
Table of Contents
Packages
The packages play the host roles; each package README owns its contract and configuration.
| Package | Role | ctx key |
|---|---|---|
webserver/ |
Browser HTTP server: named routes, upgrades, index taps, and the fallback seat | ctx.webServer |
frontend-static/ |
SPA dist server on the webserver fallback seat | consumes ctx.webServer |
directory-picker/ |
Workspace-directory picking seam: capability contract and error vocabulary | ctx.directoryPicker |
directory-picker-native/ |
Native-OS-chooser backend for operators at the host display | registers ctx.directoryPicker |
directory-picker-browse/ |
In-app directory-browser backend, including for remote clients | registers ctx.directoryPicker |
directory-picker-auto/ |
Host-adaptive chooser that mounts the matching backend at boot | mounts a backend |
open-in-app/ |
Application probe, icon, and launch routes opening the workspace directory in an installed application | consumes ctx.webServer |
plugin-inventory/ |
Read-only projection of current Loader entries | Remote pluginInventory/list |
product-telemetry-otel/ |
Explicit product usage events over OTLP/HTTP | ctx.productTelemetry |
Related documentation
Start with the subsystem references for the transport and the workspace records, then the layering decision behind the Web client.
- HTTP server subsystem — the webserver's routes, matching order, and config.
- Workspace subsystem — the workspace records the directory picker feeds.
- Web config-tree boot and transport layering — ownership of the Web transport layers.
- Product telemetry — explicit analytics event submission.
Dev Note
Working context for maintainers — click to expand
None.