@@ -372,6 +372,23 @@ def capabilities(
372372 return a2a_pb2 .AgentCapabilities (
373373 streaming = bool (capabilities .streaming ),
374374 push_notifications = bool (capabilities .push_notifications ),
375+ extensions = [
376+ cls .extension (x ) for x in capabilities .extensions or []
377+ ],
378+ )
379+
380+ @classmethod
381+ def extension (
382+ cls ,
383+ extension : types .AgentExtension ,
384+ ) -> a2a_pb2 .AgentExtension :
385+ return a2a_pb2 .AgentExtension (
386+ uri = extension .uri ,
387+ description = extension .description ,
388+ params = dict_to_struct (extension .params )
389+ if extension .params
390+ else None ,
391+ required = extension .required ,
375392 )
376393
377394 @classmethod
@@ -841,7 +858,7 @@ def task_query_params(
841858 if request .history_length
842859 else None ,
843860 id = m .group (1 ),
844- metadata = request . metadata ,
861+ metadata = None ,
845862 )
846863
847864 @classmethod
@@ -851,6 +868,21 @@ def capabilities(
851868 return types .AgentCapabilities (
852869 streaming = capabilities .streaming ,
853870 push_notifications = capabilities .push_notifications ,
871+ extensions = [
872+ cls .agent_extension (x ) for x in capabilities .extensions
873+ ],
874+ )
875+
876+ @classmethod
877+ def agent_extension (
878+ cls ,
879+ extension : a2a_pb2 .AgentExtension ,
880+ ) -> types .AgentExtension :
881+ return types .AgentExtension (
882+ uri = extension .uri ,
883+ description = extension .description ,
884+ params = json_format .MessageToDict (extension .params ),
885+ required = extension .required ,
854886 )
855887
856888 @classmethod
@@ -990,3 +1022,25 @@ def role(cls, role: a2a_pb2.Role) -> types.Role:
9901022 return types .Role .agent
9911023 case _:
9921024 return types .Role .agent
1025+
1026+
1027+ def dict_to_struct (dictionary : dict [str , Any ]) -> struct_pb2 .Struct :
1028+ """Converts a Python dict to a Struct proto.
1029+
1030+ Unfortunately, using `json_format.ParseDict` does not work because this
1031+ wants the dictionary to be an exact match of the Struct proto with fields
1032+ and keys and values, not the traditional Python dict structure.
1033+
1034+ Args:
1035+ dictionary: The Python dict to convert.
1036+
1037+ Returns:
1038+ The Struct proto.
1039+ """
1040+ struct = struct_pb2 .Struct ()
1041+ for key , val in dictionary .items ():
1042+ if isinstance (val , dict ):
1043+ struct [key ] = dict_to_struct (val )
1044+ else :
1045+ struct [key ] = val
1046+ return struct
0 commit comments