JSON mutation hooks

Rewrite API response bodies and action arrays per route.

Register during init with hook_json!(host, JsonMutateTarget::Variant, route, callback).

Action object shape

{
  "id": "plugin_action",
  "label": "Plugin action",
  "step": "GET /plugins/example"
}

Quick reference

TargetSummaryRoute matching
json.responseMutate the entire JSON response object.Prefix match on request path. Examples: `/api/system`, `/api`, `*`.
json.actionsMutate only the top-level actions array.Same prefix rules as json.response.