execMetadata's return shape. This is the real, verified-against-every-converted-plugin
contract: every one of this repo's 21 converted Metadata/*.pm plugins (and every legacy .pm
source they came from) returns exactly (tags => ..., title => ...) from its own get_tags
sub, and lanrurugi-api::plugins::use_plugin_sync/use_plugin_async currently forward a
plugin's JSON response to the API's own data field completely unchanged — no field renaming
happens on the host side today. (Legacy's own ~/LANraragi/lib/LANraragi/Model/Plugins.pm does
rename a plugin's tags to new_tags before its real HTTP API sees it, matching
~/LANraragi/tools/openapi.yaml's documented response shape — this repo deliberately doesn't
mirror that rename, since nothing on the host or frontend side depends on the new_tags name;
crates/lanrurugi-plugin/samples/sample-metadata-plugin.ts and every real call site use tags
to match.)
tags: string
title: string
error: PluginError
Present instead of tags/title on failure (e.g. a filename plugin whose regex didn't
match) — a structured PluginError, not thrown, so the host can report it without
the whole use_plugin call failing.