plugin-wl
| Version | 2026.243.1343 |
| Repo | box/github.com/opencharly/plugin-wl:v2026.243.1401 |
| Plugin | yes — see the plugin reference |
OUT-OF-TREE charly plugin serving the wl live-container check verb — a standalone
Go module (go.mod + main.go) that drives Wayland/sway desktop automation inside a
running deployment (input, windows, screenshots, sway IPC, overlay, atspi,
clipboard — the methods) over go-plugin gRPC via the charly plugin SDK
(github.com/opencharly/sdk). charly’s loader fetches this candy’s repo, go-builds the
provider binary on the HOST, and serves it OUT-OF-PROCESS via LocalTransport — so
the Wayland/sway driver lives HERE, out of charly’s core check surface. wl is the
LAST live-container verb to leave the core: after it, ZERO check verbs are
compiled-in. The wl-exclusive fields live in the plugin’s OWN #WlInput
(schema/wl.cue): the verb method enum (the former core #WlMethod, incl. the
overlay-/sway- nested methods) plus
x/y/x2/y2/button/direction/amount/target/text/key/combo/command/action/query and
the artifact validators — command (the exec / sway-msg argv) absorbed from the
former shared #Op command modifier; the plugin decodes them from the step’s
desugared plugin_input, and only the genuinely shared step matchers still ride
core #Op. It dispatches through the provider registry exactly like a built-in
(ResolveVerb → grpcProvider → invokeVerbProvider hands it the full #Op).
EXEC-based (the third, after record + dbus): the host attaches its live
DeployExecutor over the E3b reverse channel and this plugin dials back through the
SDK (sdk.ExecutorFromInvoke) to RunCapture the venue’s compositor tools
(screenshot pulls the PNG via GetFile) — it owns no podman / SSH machinery and no
CDP client (the CLI-only –from-cdp/–from-sway/–from-x11 coordinate translation
was dropped; the declarative click method uses X/Y directly). The R10 consumer is
a desktop pod bed whose check composes this plugin (the sway-browser-vnc bed’s wl
sway-tree + screenshot probes).
.
The hypr-* family covers Hyprland’s IPC the way sway-* covers sway’s, and
hypr-layers is the one method that does NOT simply forward hyprctl -j: it
correlates the layer-shell surfaces against the monitor geometry and emits a
tab-separated record per surface ending in onscreen/offscreen/unknown. Layer
surfaces are what a Quickshell/wlroots desktop’s bar, launcher, OSD, wallpaper
and lockscreen actually ARE — none of them is a toplevel, so hypr-clients,
toplevel and windows are all blind to them — and a hidden bar stays MAPPED,
parked outside the monitor, so presence alone cannot distinguish shown from
hidden. Computing the verdict in the plugin keeps that geometry (scale
division, odd-transform axis swap) in one tested place instead of in a jq
incantation in every consuming bed, and needs no jq in the guest.
Acceptance plan
Section titled “Acceptance plan”This candy’s plan: — the runnable spec charly check executes against a live deployment. check: steps are idempotent probes; run: steps change state.
| Intent | Step |
|---|---|
check |
the wl verb dispatches through the provider registry and reports the live compositor plus its capability matrix on a running desktop deployment (the out-of-process plugin verb drives the venue’s compositor over the executor reverse channel) |