What plugin management does now lives in `dsh-plugin-manager`, a boot-group package beside `app-boot`: `PluginInstaller` runs pnpm, probes, and judges new packages over the profile on disk, and `PluginManager` adds every operation over the booted tree, each refusal a `PluginOperationError` with a `plugins/*` code and no Remote protocol attached. The manager reads the profile runtime, the preset roster, and the running-agent count through per-call readers, and the roster only as `PresetLayers`, so the package depends on neither the roster nor the agent registry. `dsh-host-plugin-manager` keeps `pluginManager` and the `plugins` Remote as a relay: one Remote method per manager method, and one exhaustive switch turning a failure into the Remote error of the same code (`plugins/bad-request` into `gateway/bad-request`). Its `./types` re-exports the manager's types, so `api-remotes` and the client import one vocabulary unchanged. `dsh plugin add` and `remove` now run the installer instead of a bare pnpm forwarder: every new package is probed, a package that declares neither a bundle nor a plugin module is removed again with its reason, and newly installed bundles are enabled as before. Other pnpm verbs still forward.
description, kind
| description | kind |
|---|---|
| Package map for the web GUI host half: the HTTP and SPA servers, workspace-directory picking implementations, and the plugin inventory projection. | package-group |
host/ — web-GUI host half
English | 中文
Summary
The host/ group provides the web GUI's plain HTTP 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 read-only plugin inventory projection, and the plugins Remote over the shared plugin manager. All eight 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
Eight 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 |
plugin-inventory/ |
Read-only projection of current Loader entries | Remote pluginInventory/list |
plugin-manager/ |
The plugins Remote: a relay onto the shared plugin manager, mapping its failures onto Remote error codes |
ctx.pluginManager, Remote plugins/* |
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.
Dev Note
Working context for maintainers — click to expand
None.