Add UI to ACRYL (web and desktop)
First read {{pack}}/docs/maps/mount-points.md to choose the mount point and check the surface: Web and Desktop use client
slots (header actions, sidebar tab, settings, composer, tool and message renderers, and on Desktop the desktop.main frame); the
CLI has only terminal overlays (tuiCommands, see {{pack}}/docs/extending/tui-command.md), so a UI request from a terminal user
means an overlay, not a slot. Then read {{pack}}/docs/extending/ui-components.md (build from the app's own Button, Modal, Input, Switch, Tag via require, not hand styles) and {{pack}}/docs/extending/client-slot.md completely, then the example
{{pack}}/example-plugins/packages/client-slot-header-action/ (index.js and client.js).
Key facts: the package has a host half (empty apply) and a browser half client.js exported as "./client" with "dsh.client" in package.json. There is no build step: write client.js by hand inside the window.ModuleLoader.load wrapper, use React.createElement (no JSX, no import), and pick a slot from the table in the doc. Decide where state lives first ({{pack}}/docs/extending/state-and-persistence.md): localStorage is per browser and per surface (Web and Desktop never share it), so when the data must be the same in both, or survive clearing the browser, keep it on the host behind an RPC channel (example state-host-store); tell the user which you chose. Deliver with acryl_install_plugin and tell the user to reload the page or window.