Extra links supported for operators coming from third-party packages:

airflow.serialization.serialized_objects.BUILTIN_OPERATOR_EXTRA_LINKS

airflow/serialization/serialized_objects.py
"""A JSON serializable representation of TaskGroup."""
    @classmethod
    def serialize_task_group(cls, task_group: TaskGroup) -> Optional[Union[Dict[str, Any]]]:
        """Serializes TaskGroup into a JSON object."""
        if not task_group:
            return None
        serialize_group = {
            "_group_id": task_group._group_id,  
            "prefix_group_id": task_group.prefix_group_id,
            "tooltip": task_group.tooltip,
            "ui_color": task_group.ui_color,
            "ui_fgcolor": task_group.ui_fgcolor,
            "children": {
                label: (DAT.OP, child.task_id)
                if isinstance(child, BaseOperator)
                else (DAT.TASK_GROUP, SerializedTaskGroup.serialize_task_group(child))
                for label, child in task_group.children.items()
            },
            "upstream_group_ids": cls._serialize(list(task_group.upstream_group_ids)),
            "downstream_group_ids": cls._serialize(list(task_group.downstream_group_ids)),
            "upstream_task_ids": cls._serialize(list(task_group.upstream_task_ids)),
            "downstream_task_ids": cls._serialize(list(task_group.downstream_task_ids)),
        }
        return serialize_group
    @classmethod
    def deserialize_task_group(