plugin-record
| Version | 2026.182.1805 |
| Repo | box/github.com/opencharly/plugin-record:v2026.246.1624 |
| Plugin | yes — see the plugin reference |
OUT-OF-TREE charly plugin serving the record live-container check verb — a
standalone Go module (go.mod + main.go) that manages recording sessions inside a
running deployment (list, start, stop, cmd, gif) 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 asciinema/wf-recorder/pixelflux recording driver lives
HERE, out of charly’s core check surface (the first live-verb dep-shed of the
EXEC-based kind, after the PORT-based candy/plugin-mcp/spice/kube). Since the
schema-compaction cutover an authored record: step desugars to the internal
plugin/plugin_input envelope, and every record-exclusive modifier
(method/record_name/record_mode/record_fps/record_audio/text/artifact/settle_ms — record: run
sends a command into the recording and waits for its output to settle) lives
in the plugin’s OWN #RecordInput (schema/record.cue); the verb dispatches
through the provider registry exactly
like a built-in (ResolveVerb → grpcProvider → invokeVerbProvider hands it the
full #Op). FIRST consumer of the executor reverse channel: record is EXEC-based,
so the host attaches its live DeployExecutor over the E3b reverse channel and
this plugin dials back through the SDK (sdk.ExecutorFromInvoke) to RunCapture the
asciinema/wf-recorder commands in-container via tmux and GetFile the produced
.cast/.mp4 artifact back to the host — it owns no podman / SSH machinery. The R10
consumer is a desktop pod bed whose check composes this plugin (the
sway-browser-vnc bed’s record: start). Desktop (wf-recorder) recording on a
VM/desktop venue needs the compositor session env: author record_env: (a
string map, e.g. record_env: {XDG_RUNTIME_DIR: /run/user/1000, WAYLAND_DISPLAY: wayland-1}) to override the container defaults (/tmp + wayland-0); record: start verifies the recorder process is alive after spawn (no false-positive
starts), and record: stop pulls the artifact host-side before the provider’s
artifact validators run. record: gif renders a STOPPED terminal recording
(.cast) to an animated GIF with agg (asciinema/agg — installed by the asciinema
candy, which also ships a monospace font) and pulls the .gif to the artifact
path; the agg options (theme/font_size/speed/idle_time_limit/fps_cap/select/
cols/rows/no_loop/last_frame_duration/renderer) map 1:1 to agg’s CLI flags.
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 record verb dispatches through the provider registry and lists the active recording sessions on a live deployment (the out-of-process plugin verb drives the venue over the executor reverse channel) |