retro_color_rgb() and retro_color_rgba()
now parse each color with grDevices::col2rgb() and
re-format it with grDevices::rgb(), instead of slicing and
concatenating the string. magick::image_raster() returns
color specifications rather than guaranteed hex, and for a fully
transparent pixel it returns the name "transparent", which
the old string handling turned into the invalid "transpa"
and "transpaff". The 0.0.8 fix addressed this by flattening
at the entry point, but several internal steps build images from
character matrices and never pass through
retro_image_png(), so the error persisted on platforms
whose ImageMagick build retains an alpha channel. Fixing
the helpers themselves covers every path. Output is unchanged for hex
input.retro_image_png() that flattening onto white
is what makes a partially transparent source image tractable: the blend
a reader sees is the color to digitize, so compositing is not
interchangeable with discarding the alpha channel.retro_image_png() now flattens the source image onto an
opaque white background, and retro_agent_class$register()
routes every format through it instead of copying PNG files verbatim.
magick::image_raster() reports a fully transparent pixel as
the color name "transparent" rather than as hex, which
retro_color_rgb() truncated to "transpa" and
retro_color_rgba() extended to "transpaff",
both invalid color names that stopped the pipeline. Removing the alpha
channel once at the entry point means no later step encounters a non-hex
pixel value.retro_app() by default
instead of expanding them.retro_app() instead of centering it vertically.retro_app(): the chat turn now
runs in a shiny::ExtendedTask, so a cancel click can
actually reach stream_controller() and stop the stream
instead of being processed only after the response already finished.
Since the tools now run outside a reactive context, they read
state via shiny::isolate().retro_chat_replay_simulation()$stream_async() now
returns a promise instead of the finished text. A finished string is not
a stream, so retro_app() rendered the replay as an
already-complete message and the stop button never appeared.retro_app() a theme argument for
bslib theming, and put a light/dark mode toggle in the top
right of the main panel.shinychat’s JS and CSS bundle in
retro_app(), so the browser starts fetching it in parallel
with other blocking <script> tags instead of only
after they finish, and the greeting renders sooner.move to shinychat 0.5.0.
retro_tool_label(). Mostly this is a workaround to avoid https://github.com/tidyverse/ellmer/issues/1136, but it
also somewhat declutters the context window.type argument to quantiles()
("survival" default, or "incidence")
controlling how probabilities is interpreted, default
probabilities to descending
(c(0.75, 0.5, 0.25)), and always report both
survival and incidence columns in the output,
sorted chronologically regardless of input order or
type.probabilities() and
counts() to the agent class.retro_app(), a Shiny app interface for
retroglyph.retro_data_path() more robust to poorly classified
anti-aliasing debris: before choosing a curve’s rightmost pixel, drop
connected components of the target color smaller than 8 times the line
width.