adcp 2.18.0__py3-none-any.whl → 3.0.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (245) hide show
  1. adcp/ADCP_VERSION +1 -1
  2. adcp/__init__.py +6 -14
  3. adcp/__main__.py +94 -51
  4. adcp/adagents.py +91 -19
  5. adcp/client.py +865 -0
  6. adcp/protocols/a2a.py +84 -0
  7. adcp/protocols/base.py +101 -0
  8. adcp/protocols/mcp.py +87 -1
  9. adcp/server/__init__.py +49 -0
  10. adcp/server/base.py +368 -0
  11. adcp/server/content_standards.py +561 -0
  12. adcp/server/governance.py +491 -0
  13. adcp/server/mcp_tools.py +471 -0
  14. adcp/server/proposal.py +334 -0
  15. adcp/server/sponsored_intelligence.py +444 -0
  16. adcp/types/__init__.py +111 -23
  17. adcp/types/_ergonomic.py +35 -18
  18. adcp/types/_generated.py +419 -44
  19. adcp/types/aliases.py +13 -20
  20. adcp/types/base.py +1 -1
  21. adcp/types/generated_poc/adagents.py +103 -6
  22. adcp/types/generated_poc/content_standards/__init__.py +3 -0
  23. adcp/types/generated_poc/content_standards/artifact.py +208 -0
  24. adcp/types/generated_poc/content_standards/artifact_webhook_payload.py +64 -0
  25. adcp/types/generated_poc/content_standards/calibrate_content_request.py +17 -0
  26. adcp/types/generated_poc/content_standards/calibrate_content_response.py +74 -0
  27. adcp/types/generated_poc/content_standards/content_standards.py +66 -0
  28. adcp/types/generated_poc/content_standards/create_content_standards_request.py +97 -0
  29. adcp/types/generated_poc/content_standards/create_content_standards_response.py +52 -0
  30. adcp/types/generated_poc/content_standards/get_content_standards_request.py +21 -0
  31. adcp/types/generated_poc/content_standards/get_content_standards_response.py +43 -0
  32. adcp/types/generated_poc/content_standards/get_media_buy_artifacts_request.py +64 -0
  33. adcp/types/generated_poc/content_standards/get_media_buy_artifacts_response.py +117 -0
  34. adcp/types/generated_poc/content_standards/list_content_standards_request.py +31 -0
  35. adcp/types/generated_poc/content_standards/list_content_standards_response.py +48 -0
  36. adcp/types/generated_poc/content_standards/update_content_standards_request.py +101 -0
  37. adcp/types/generated_poc/content_standards/update_content_standards_response.py +34 -0
  38. adcp/types/generated_poc/content_standards/validate_content_delivery_request.py +59 -0
  39. adcp/types/generated_poc/content_standards/validate_content_delivery_response.py +85 -0
  40. adcp/types/generated_poc/core/activation_key.py +1 -1
  41. adcp/types/generated_poc/core/assets/audio_asset.py +1 -1
  42. adcp/types/generated_poc/core/assets/css_asset.py +1 -1
  43. adcp/types/generated_poc/core/assets/daast_asset.py +1 -1
  44. adcp/types/generated_poc/core/assets/html_asset.py +1 -1
  45. adcp/types/generated_poc/core/assets/image_asset.py +1 -1
  46. adcp/types/generated_poc/core/assets/javascript_asset.py +1 -1
  47. adcp/types/generated_poc/core/assets/text_asset.py +1 -1
  48. adcp/types/generated_poc/core/assets/url_asset.py +1 -1
  49. adcp/types/generated_poc/core/assets/vast_asset.py +1 -1
  50. adcp/types/generated_poc/core/assets/video_asset.py +1 -1
  51. adcp/types/generated_poc/core/assets/webhook_asset.py +1 -1
  52. adcp/types/generated_poc/core/async_response_data.py +1 -1
  53. adcp/types/generated_poc/core/brand_manifest.py +68 -5
  54. adcp/types/generated_poc/core/brand_manifest_ref.py +1 -1
  55. adcp/types/generated_poc/core/context.py +1 -1
  56. adcp/types/generated_poc/core/creative_asset.py +8 -7
  57. adcp/types/generated_poc/core/creative_assignment.py +1 -1
  58. adcp/types/generated_poc/core/creative_filters.py +4 -14
  59. adcp/types/generated_poc/core/creative_manifest.py +1 -1
  60. adcp/types/generated_poc/core/creative_policy.py +1 -1
  61. adcp/types/generated_poc/core/delivery_metrics.py +1 -1
  62. adcp/types/generated_poc/core/deployment.py +1 -1
  63. adcp/types/generated_poc/core/destination.py +1 -1
  64. adcp/types/generated_poc/core/error.py +1 -1
  65. adcp/types/generated_poc/core/ext.py +1 -1
  66. adcp/types/generated_poc/core/format.py +6 -5
  67. adcp/types/generated_poc/core/format_id.py +1 -1
  68. adcp/types/generated_poc/core/frequency_cap.py +1 -1
  69. adcp/types/generated_poc/core/identifier.py +27 -0
  70. adcp/types/generated_poc/core/mcp_webhook_payload.py +1 -1
  71. adcp/types/generated_poc/core/measurement.py +1 -1
  72. adcp/types/generated_poc/core/media_buy.py +1 -1
  73. adcp/types/generated_poc/core/media_buy_features.py +29 -0
  74. adcp/types/generated_poc/core/offering.py +80 -0
  75. adcp/types/generated_poc/core/package.py +1 -1
  76. adcp/types/generated_poc/core/performance_feedback.py +1 -1
  77. adcp/types/generated_poc/core/placement.py +1 -1
  78. adcp/types/generated_poc/core/pricing_option.py +8 -14
  79. adcp/types/generated_poc/core/product.py +1 -1
  80. adcp/types/generated_poc/core/product_allocation.py +48 -0
  81. adcp/types/generated_poc/core/product_filters.py +72 -7
  82. adcp/types/generated_poc/core/promoted_offerings.py +12 -21
  83. adcp/types/generated_poc/core/promoted_products.py +1 -1
  84. adcp/types/generated_poc/core/property.py +1 -1
  85. adcp/types/generated_poc/core/property_id.py +1 -1
  86. adcp/types/generated_poc/core/property_list_ref.py +26 -0
  87. adcp/types/generated_poc/core/property_tag.py +1 -1
  88. adcp/types/generated_poc/core/proposal.py +64 -0
  89. adcp/types/generated_poc/core/protocol_envelope.py +1 -1
  90. adcp/types/generated_poc/core/publisher_property_selector.py +1 -1
  91. adcp/types/generated_poc/core/push_notification_config.py +1 -1
  92. adcp/types/generated_poc/core/reporting_capabilities.py +1 -1
  93. adcp/types/generated_poc/core/reporting_webhook.py +70 -0
  94. adcp/types/generated_poc/core/response.py +1 -1
  95. adcp/types/generated_poc/core/signal_filters.py +1 -1
  96. adcp/types/generated_poc/core/start_timing.py +4 -4
  97. adcp/types/generated_poc/core/sub_asset.py +1 -1
  98. adcp/types/generated_poc/core/targeting.py +55 -14
  99. adcp/types/generated_poc/creative/list_creative_formats_request.py +1 -1
  100. adcp/types/generated_poc/creative/list_creative_formats_response.py +1 -1
  101. adcp/types/generated_poc/creative/preview_creative_request.py +1 -1
  102. adcp/types/generated_poc/creative/preview_creative_response.py +3 -2
  103. adcp/types/generated_poc/creative/preview_render.py +1 -1
  104. adcp/types/generated_poc/enums/adcp_domain.py +3 -1
  105. adcp/types/generated_poc/enums/asset_content_type.py +1 -1
  106. adcp/types/generated_poc/enums/auth_scheme.py +1 -1
  107. adcp/types/generated_poc/enums/available_metric.py +1 -1
  108. adcp/types/generated_poc/enums/channels.py +18 -8
  109. adcp/types/generated_poc/enums/co_branding_requirement.py +1 -1
  110. adcp/types/generated_poc/enums/creative_action.py +1 -1
  111. adcp/types/generated_poc/enums/creative_agent_capability.py +1 -1
  112. adcp/types/generated_poc/enums/creative_sort_field.py +1 -1
  113. adcp/types/generated_poc/enums/creative_status.py +2 -1
  114. adcp/types/generated_poc/enums/daast_tracking_event.py +1 -1
  115. adcp/types/generated_poc/enums/daast_version.py +1 -1
  116. adcp/types/generated_poc/enums/delivery_type.py +1 -1
  117. adcp/types/generated_poc/enums/dimension_unit.py +1 -1
  118. adcp/types/generated_poc/enums/feed_format.py +1 -1
  119. adcp/types/generated_poc/enums/feedback_source.py +1 -1
  120. adcp/types/generated_poc/enums/format_category.py +1 -1
  121. adcp/types/generated_poc/enums/format_id_parameter.py +1 -1
  122. adcp/types/generated_poc/enums/frequency_cap_scope.py +1 -1
  123. adcp/types/generated_poc/enums/geo_level.py +14 -0
  124. adcp/types/generated_poc/enums/history_entry_type.py +1 -1
  125. adcp/types/generated_poc/enums/http_method.py +1 -1
  126. adcp/types/generated_poc/enums/identifier_types.py +1 -1
  127. adcp/types/generated_poc/enums/javascript_module_type.py +1 -1
  128. adcp/types/generated_poc/enums/landing_page_requirement.py +1 -1
  129. adcp/types/generated_poc/enums/markdown_flavor.py +1 -1
  130. adcp/types/generated_poc/enums/media_buy_status.py +1 -1
  131. adcp/types/generated_poc/enums/metric_type.py +1 -1
  132. adcp/types/generated_poc/enums/metro_system.py +15 -0
  133. adcp/types/generated_poc/enums/notification_type.py +1 -1
  134. adcp/types/generated_poc/enums/pacing.py +1 -1
  135. adcp/types/generated_poc/enums/postal_system.py +19 -0
  136. adcp/types/generated_poc/enums/preview_output_format.py +1 -1
  137. adcp/types/generated_poc/enums/pricing_model.py +1 -1
  138. adcp/types/generated_poc/enums/property_type.py +2 -1
  139. adcp/types/generated_poc/enums/publisher_identifier_types.py +1 -1
  140. adcp/types/generated_poc/enums/reporting_frequency.py +1 -1
  141. adcp/types/generated_poc/enums/signal_catalog_type.py +1 -1
  142. adcp/types/generated_poc/enums/sort_direction.py +1 -1
  143. adcp/types/generated_poc/enums/task_status.py +1 -1
  144. adcp/types/generated_poc/enums/task_type.py +7 -1
  145. adcp/types/generated_poc/enums/update_frequency.py +1 -1
  146. adcp/types/generated_poc/enums/url_asset_type.py +1 -1
  147. adcp/types/generated_poc/enums/validation_mode.py +1 -1
  148. adcp/types/generated_poc/enums/vast_tracking_event.py +1 -1
  149. adcp/types/generated_poc/enums/vast_version.py +1 -1
  150. adcp/types/generated_poc/enums/webhook_response_type.py +1 -1
  151. adcp/types/generated_poc/enums/webhook_security_method.py +1 -1
  152. adcp/types/generated_poc/extensions/__init__.py +3 -0
  153. adcp/types/generated_poc/extensions/extension_meta.py +58 -0
  154. adcp/types/generated_poc/media_buy/build_creative_request.py +1 -1
  155. adcp/types/generated_poc/media_buy/build_creative_response.py +1 -1
  156. adcp/types/generated_poc/media_buy/create_media_buy_async_response_input_required.py +1 -1
  157. adcp/types/generated_poc/media_buy/create_media_buy_async_response_submitted.py +1 -1
  158. adcp/types/generated_poc/media_buy/create_media_buy_async_response_working.py +1 -1
  159. adcp/types/generated_poc/media_buy/create_media_buy_request.py +54 -26
  160. adcp/types/generated_poc/media_buy/create_media_buy_response.py +1 -1
  161. adcp/types/generated_poc/media_buy/get_media_buy_delivery_request.py +1 -1
  162. adcp/types/generated_poc/media_buy/get_media_buy_delivery_response.py +1 -1
  163. adcp/types/generated_poc/media_buy/get_products_async_response_input_required.py +1 -1
  164. adcp/types/generated_poc/media_buy/get_products_async_response_submitted.py +1 -1
  165. adcp/types/generated_poc/media_buy/get_products_async_response_working.py +1 -1
  166. adcp/types/generated_poc/media_buy/get_products_request.py +18 -3
  167. adcp/types/generated_poc/media_buy/get_products_response.py +14 -2
  168. adcp/types/generated_poc/media_buy/list_authorized_properties_request.py +1 -1
  169. adcp/types/generated_poc/media_buy/list_authorized_properties_response.py +2 -2
  170. adcp/types/generated_poc/media_buy/list_creative_formats_request.py +1 -1
  171. adcp/types/generated_poc/media_buy/list_creative_formats_response.py +1 -1
  172. adcp/types/generated_poc/media_buy/list_creatives_request.py +2 -2
  173. adcp/types/generated_poc/media_buy/list_creatives_response.py +7 -10
  174. adcp/types/generated_poc/media_buy/package_request.py +15 -6
  175. adcp/types/generated_poc/media_buy/package_update.py +119 -0
  176. adcp/types/generated_poc/media_buy/provide_performance_feedback_request.py +1 -1
  177. adcp/types/generated_poc/media_buy/provide_performance_feedback_response.py +1 -1
  178. adcp/types/generated_poc/media_buy/sync_creatives_async_response_input_required.py +1 -1
  179. adcp/types/generated_poc/media_buy/sync_creatives_async_response_submitted.py +1 -1
  180. adcp/types/generated_poc/media_buy/sync_creatives_async_response_working.py +1 -1
  181. adcp/types/generated_poc/media_buy/sync_creatives_request.py +1 -1
  182. adcp/types/generated_poc/media_buy/sync_creatives_response.py +1 -1
  183. adcp/types/generated_poc/media_buy/update_media_buy_async_response_input_required.py +1 -1
  184. adcp/types/generated_poc/media_buy/update_media_buy_async_response_submitted.py +1 -1
  185. adcp/types/generated_poc/media_buy/update_media_buy_async_response_working.py +1 -1
  186. adcp/types/generated_poc/media_buy/update_media_buy_request.py +20 -108
  187. adcp/types/generated_poc/media_buy/update_media_buy_response.py +1 -1
  188. adcp/types/generated_poc/pricing_options/cpc_option.py +35 -10
  189. adcp/types/generated_poc/pricing_options/cpcv_option.py +35 -10
  190. adcp/types/generated_poc/pricing_options/{cpm_auction_option.py → cpm_option.py} +23 -19
  191. adcp/types/generated_poc/pricing_options/cpp_option.py +39 -16
  192. adcp/types/generated_poc/pricing_options/cpv_option.py +37 -18
  193. adcp/types/generated_poc/pricing_options/flat_rate_option.py +45 -39
  194. adcp/types/generated_poc/pricing_options/{vcpm_auction_option.py → vcpm_option.py} +23 -14
  195. adcp/types/generated_poc/property/__init__.py +3 -0
  196. adcp/types/generated_poc/property/base_property_source.py +86 -0
  197. adcp/types/generated_poc/property/create_property_list_request.py +43 -0
  198. adcp/types/generated_poc/property/create_property_list_response.py +27 -0
  199. adcp/types/generated_poc/property/delete_property_list_request.py +22 -0
  200. adcp/types/generated_poc/property/delete_property_list_response.py +21 -0
  201. adcp/types/generated_poc/property/feature_requirement.py +42 -0
  202. adcp/types/generated_poc/property/get_property_list_request.py +34 -0
  203. adcp/types/generated_poc/property/get_property_list_response.py +61 -0
  204. adcp/types/generated_poc/property/list_property_lists_request.py +29 -0
  205. adcp/types/generated_poc/property/list_property_lists_response.py +39 -0
  206. adcp/types/generated_poc/property/property_error.py +33 -0
  207. adcp/types/generated_poc/property/property_feature.py +22 -0
  208. adcp/types/generated_poc/property/property_feature_definition.py +80 -0
  209. adcp/types/generated_poc/property/property_list.py +62 -0
  210. adcp/types/generated_poc/property/property_list_changed_webhook.py +51 -0
  211. adcp/types/generated_poc/property/property_list_filters.py +47 -0
  212. adcp/types/generated_poc/property/update_property_list_request.py +46 -0
  213. adcp/types/generated_poc/property/update_property_list_response.py +21 -0
  214. adcp/types/generated_poc/protocol/__init__.py +3 -0
  215. adcp/types/generated_poc/protocol/get_adcp_capabilities_request.py +34 -0
  216. adcp/types/generated_poc/protocol/get_adcp_capabilities_response.py +353 -0
  217. adcp/types/generated_poc/protocols/adcp_extension.py +18 -5
  218. adcp/types/generated_poc/signals/activate_signal_request.py +1 -1
  219. adcp/types/generated_poc/signals/activate_signal_response.py +1 -1
  220. adcp/types/generated_poc/signals/get_signals_request.py +1 -1
  221. adcp/types/generated_poc/signals/get_signals_response.py +1 -1
  222. adcp/types/generated_poc/sponsored_intelligence/__init__.py +3 -0
  223. adcp/types/generated_poc/sponsored_intelligence/si_capabilities.py +102 -0
  224. adcp/types/generated_poc/sponsored_intelligence/si_get_offering_request.py +34 -0
  225. adcp/types/generated_poc/sponsored_intelligence/si_get_offering_response.py +100 -0
  226. adcp/types/generated_poc/sponsored_intelligence/si_identity.py +78 -0
  227. adcp/types/generated_poc/sponsored_intelligence/si_initiate_session_request.py +46 -0
  228. adcp/types/generated_poc/sponsored_intelligence/si_initiate_session_response.py +44 -0
  229. adcp/types/generated_poc/sponsored_intelligence/si_send_message_request.py +58 -0
  230. adcp/types/generated_poc/sponsored_intelligence/si_send_message_response.py +101 -0
  231. adcp/types/generated_poc/sponsored_intelligence/si_terminate_session_request.py +60 -0
  232. adcp/types/generated_poc/sponsored_intelligence/si_terminate_session_response.py +54 -0
  233. adcp/types/generated_poc/sponsored_intelligence/si_ui_element.py +30 -0
  234. adcp/utils/format_assets.py +5 -5
  235. adcp/utils/preview_cache.py +2 -2
  236. {adcp-2.18.0.dist-info → adcp-3.0.0.dist-info}/METADATA +1 -1
  237. adcp-3.0.0.dist-info/RECORD +264 -0
  238. {adcp-2.18.0.dist-info → adcp-3.0.0.dist-info}/WHEEL +1 -1
  239. adcp/types/generated_poc/enums/standard_format_ids.py +0 -45
  240. adcp/types/generated_poc/pricing_options/cpm_fixed_option.py +0 -43
  241. adcp/types/generated_poc/pricing_options/vcpm_fixed_option.py +0 -47
  242. adcp-2.18.0.dist-info/RECORD +0 -195
  243. {adcp-2.18.0.dist-info → adcp-3.0.0.dist-info}/entry_points.txt +0 -0
  244. {adcp-2.18.0.dist-info → adcp-3.0.0.dist-info}/licenses/LICENSE +0 -0
  245. {adcp-2.18.0.dist-info → adcp-3.0.0.dist-info}/top_level.txt +0 -0
adcp/client.py CHANGED
@@ -55,7 +55,117 @@ from adcp.types.core import (
55
55
  TaskResult,
56
56
  TaskStatus,
57
57
  )
58
+ from adcp.types.generated_poc.content_standards.calibrate_content_request import (
59
+ CalibrateContentRequest,
60
+ )
61
+ from adcp.types.generated_poc.content_standards.calibrate_content_response import (
62
+ CalibrateContentResponse,
63
+ )
64
+
65
+ # V3 Content Standards types
66
+ from adcp.types.generated_poc.content_standards.create_content_standards_request import (
67
+ CreateContentStandardsRequest,
68
+ )
69
+ from adcp.types.generated_poc.content_standards.create_content_standards_response import (
70
+ CreateContentStandardsResponse,
71
+ )
72
+ from adcp.types.generated_poc.content_standards.get_content_standards_request import (
73
+ GetContentStandardsRequest,
74
+ )
75
+ from adcp.types.generated_poc.content_standards.get_content_standards_response import (
76
+ GetContentStandardsResponse,
77
+ )
78
+ from adcp.types.generated_poc.content_standards.get_media_buy_artifacts_request import (
79
+ GetMediaBuyArtifactsRequest,
80
+ )
81
+ from adcp.types.generated_poc.content_standards.get_media_buy_artifacts_response import (
82
+ GetMediaBuyArtifactsResponse,
83
+ )
84
+ from adcp.types.generated_poc.content_standards.list_content_standards_request import (
85
+ ListContentStandardsRequest,
86
+ )
87
+ from adcp.types.generated_poc.content_standards.list_content_standards_response import (
88
+ ListContentStandardsResponse,
89
+ )
90
+ from adcp.types.generated_poc.content_standards.update_content_standards_request import (
91
+ UpdateContentStandardsRequest,
92
+ )
93
+ from adcp.types.generated_poc.content_standards.update_content_standards_response import (
94
+ UpdateContentStandardsResponse,
95
+ )
96
+ from adcp.types.generated_poc.content_standards.validate_content_delivery_request import (
97
+ ValidateContentDeliveryRequest,
98
+ )
99
+ from adcp.types.generated_poc.content_standards.validate_content_delivery_response import (
100
+ ValidateContentDeliveryResponse,
101
+ )
58
102
  from adcp.types.generated_poc.core.async_response_data import AdcpAsyncResponseData
103
+
104
+ # V3 Governance (Property Lists) types
105
+ from adcp.types.generated_poc.property.create_property_list_request import (
106
+ CreatePropertyListRequest,
107
+ )
108
+ from adcp.types.generated_poc.property.create_property_list_response import (
109
+ CreatePropertyListResponse,
110
+ )
111
+ from adcp.types.generated_poc.property.delete_property_list_request import (
112
+ DeletePropertyListRequest,
113
+ )
114
+ from adcp.types.generated_poc.property.delete_property_list_response import (
115
+ DeletePropertyListResponse,
116
+ )
117
+ from adcp.types.generated_poc.property.get_property_list_request import (
118
+ GetPropertyListRequest,
119
+ )
120
+ from adcp.types.generated_poc.property.get_property_list_response import (
121
+ GetPropertyListResponse,
122
+ )
123
+ from adcp.types.generated_poc.property.list_property_lists_request import (
124
+ ListPropertyListsRequest,
125
+ )
126
+ from adcp.types.generated_poc.property.list_property_lists_response import (
127
+ ListPropertyListsResponse,
128
+ )
129
+ from adcp.types.generated_poc.property.update_property_list_request import (
130
+ UpdatePropertyListRequest,
131
+ )
132
+ from adcp.types.generated_poc.property.update_property_list_response import (
133
+ UpdatePropertyListResponse,
134
+ )
135
+
136
+ # V3 Protocol Discovery types
137
+ from adcp.types.generated_poc.protocol.get_adcp_capabilities_request import (
138
+ GetAdcpCapabilitiesRequest,
139
+ )
140
+ from adcp.types.generated_poc.protocol.get_adcp_capabilities_response import (
141
+ GetAdcpCapabilitiesResponse,
142
+ )
143
+
144
+ # V3 Sponsored Intelligence types
145
+ from adcp.types.generated_poc.sponsored_intelligence.si_get_offering_request import (
146
+ SiGetOfferingRequest,
147
+ )
148
+ from adcp.types.generated_poc.sponsored_intelligence.si_get_offering_response import (
149
+ SiGetOfferingResponse,
150
+ )
151
+ from adcp.types.generated_poc.sponsored_intelligence.si_initiate_session_request import (
152
+ SiInitiateSessionRequest,
153
+ )
154
+ from adcp.types.generated_poc.sponsored_intelligence.si_initiate_session_response import (
155
+ SiInitiateSessionResponse,
156
+ )
157
+ from adcp.types.generated_poc.sponsored_intelligence.si_send_message_request import (
158
+ SiSendMessageRequest,
159
+ )
160
+ from adcp.types.generated_poc.sponsored_intelligence.si_send_message_response import (
161
+ SiSendMessageResponse,
162
+ )
163
+ from adcp.types.generated_poc.sponsored_intelligence.si_terminate_session_request import (
164
+ SiTerminateSessionRequest,
165
+ )
166
+ from adcp.types.generated_poc.sponsored_intelligence.si_terminate_session_response import (
167
+ SiTerminateSessionResponse,
168
+ )
59
169
  from adcp.utils.operation_id import create_operation_id
60
170
 
61
171
  logger = logging.getLogger(__name__)
@@ -773,6 +883,761 @@ class ADCPClient:
773
883
 
774
884
  return self.adapter._parse_response(raw_result, BuildCreativeResponse)
775
885
 
886
+ # ========================================================================
887
+ # V3 Protocol Methods - Protocol Discovery
888
+ # ========================================================================
889
+
890
+ async def get_adcp_capabilities(
891
+ self,
892
+ request: GetAdcpCapabilitiesRequest,
893
+ ) -> TaskResult[GetAdcpCapabilitiesResponse]:
894
+ """
895
+ Get AdCP capabilities from the agent.
896
+
897
+ Queries the agent's supported AdCP features, protocol versions, and
898
+ domain-specific capabilities (media_buy, signals, sponsored_intelligence).
899
+
900
+ Args:
901
+ request: Request parameters including optional protocol filters
902
+
903
+ Returns:
904
+ TaskResult containing GetAdcpCapabilitiesResponse with:
905
+ - adcp: Core protocol version information
906
+ - supported_protocols: List of supported domain protocols
907
+ - media_buy: Media buy capabilities (if supported)
908
+ - sponsored_intelligence: SI capabilities (if supported)
909
+ - signals: Signals capabilities (if supported)
910
+ """
911
+ operation_id = create_operation_id()
912
+ params = request.model_dump(exclude_none=True)
913
+
914
+ self._emit_activity(
915
+ Activity(
916
+ type=ActivityType.PROTOCOL_REQUEST,
917
+ operation_id=operation_id,
918
+ agent_id=self.agent_config.id,
919
+ task_type="get_adcp_capabilities",
920
+ timestamp=datetime.now(timezone.utc).isoformat(),
921
+ )
922
+ )
923
+
924
+ raw_result = await self.adapter.get_adcp_capabilities(params)
925
+
926
+ self._emit_activity(
927
+ Activity(
928
+ type=ActivityType.PROTOCOL_RESPONSE,
929
+ operation_id=operation_id,
930
+ agent_id=self.agent_config.id,
931
+ task_type="get_adcp_capabilities",
932
+ status=raw_result.status,
933
+ timestamp=datetime.now(timezone.utc).isoformat(),
934
+ )
935
+ )
936
+
937
+ return self.adapter._parse_response(raw_result, GetAdcpCapabilitiesResponse)
938
+
939
+ # ========================================================================
940
+ # V3 Protocol Methods - Content Standards
941
+ # ========================================================================
942
+
943
+ async def create_content_standards(
944
+ self,
945
+ request: CreateContentStandardsRequest,
946
+ ) -> TaskResult[CreateContentStandardsResponse]:
947
+ """
948
+ Create a new content standards configuration.
949
+
950
+ Defines acceptable content contexts for ad placement using natural
951
+ language policy and optional calibration exemplars.
952
+
953
+ Args:
954
+ request: Request parameters including policy and scope
955
+
956
+ Returns:
957
+ TaskResult containing CreateContentStandardsResponse with standards_id
958
+ """
959
+ operation_id = create_operation_id()
960
+ params = request.model_dump(exclude_none=True)
961
+
962
+ self._emit_activity(
963
+ Activity(
964
+ type=ActivityType.PROTOCOL_REQUEST,
965
+ operation_id=operation_id,
966
+ agent_id=self.agent_config.id,
967
+ task_type="create_content_standards",
968
+ timestamp=datetime.now(timezone.utc).isoformat(),
969
+ )
970
+ )
971
+
972
+ raw_result = await self.adapter.create_content_standards(params)
973
+
974
+ self._emit_activity(
975
+ Activity(
976
+ type=ActivityType.PROTOCOL_RESPONSE,
977
+ operation_id=operation_id,
978
+ agent_id=self.agent_config.id,
979
+ task_type="create_content_standards",
980
+ status=raw_result.status,
981
+ timestamp=datetime.now(timezone.utc).isoformat(),
982
+ )
983
+ )
984
+
985
+ return self.adapter._parse_response(raw_result, CreateContentStandardsResponse)
986
+
987
+ async def get_content_standards(
988
+ self,
989
+ request: GetContentStandardsRequest,
990
+ ) -> TaskResult[GetContentStandardsResponse]:
991
+ """
992
+ Get a content standards configuration by ID.
993
+
994
+ Args:
995
+ request: Request parameters including standards_id
996
+
997
+ Returns:
998
+ TaskResult containing GetContentStandardsResponse
999
+ """
1000
+ operation_id = create_operation_id()
1001
+ params = request.model_dump(exclude_none=True)
1002
+
1003
+ self._emit_activity(
1004
+ Activity(
1005
+ type=ActivityType.PROTOCOL_REQUEST,
1006
+ operation_id=operation_id,
1007
+ agent_id=self.agent_config.id,
1008
+ task_type="get_content_standards",
1009
+ timestamp=datetime.now(timezone.utc).isoformat(),
1010
+ )
1011
+ )
1012
+
1013
+ raw_result = await self.adapter.get_content_standards(params)
1014
+
1015
+ self._emit_activity(
1016
+ Activity(
1017
+ type=ActivityType.PROTOCOL_RESPONSE,
1018
+ operation_id=operation_id,
1019
+ agent_id=self.agent_config.id,
1020
+ task_type="get_content_standards",
1021
+ status=raw_result.status,
1022
+ timestamp=datetime.now(timezone.utc).isoformat(),
1023
+ )
1024
+ )
1025
+
1026
+ return self.adapter._parse_response(raw_result, GetContentStandardsResponse)
1027
+
1028
+ async def list_content_standards(
1029
+ self,
1030
+ request: ListContentStandardsRequest,
1031
+ ) -> TaskResult[ListContentStandardsResponse]:
1032
+ """
1033
+ List content standards configurations.
1034
+
1035
+ Args:
1036
+ request: Request parameters including optional filters
1037
+
1038
+ Returns:
1039
+ TaskResult containing ListContentStandardsResponse
1040
+ """
1041
+ operation_id = create_operation_id()
1042
+ params = request.model_dump(exclude_none=True)
1043
+
1044
+ self._emit_activity(
1045
+ Activity(
1046
+ type=ActivityType.PROTOCOL_REQUEST,
1047
+ operation_id=operation_id,
1048
+ agent_id=self.agent_config.id,
1049
+ task_type="list_content_standards",
1050
+ timestamp=datetime.now(timezone.utc).isoformat(),
1051
+ )
1052
+ )
1053
+
1054
+ raw_result = await self.adapter.list_content_standards(params)
1055
+
1056
+ self._emit_activity(
1057
+ Activity(
1058
+ type=ActivityType.PROTOCOL_RESPONSE,
1059
+ operation_id=operation_id,
1060
+ agent_id=self.agent_config.id,
1061
+ task_type="list_content_standards",
1062
+ status=raw_result.status,
1063
+ timestamp=datetime.now(timezone.utc).isoformat(),
1064
+ )
1065
+ )
1066
+
1067
+ return self.adapter._parse_response(raw_result, ListContentStandardsResponse)
1068
+
1069
+ async def update_content_standards(
1070
+ self,
1071
+ request: UpdateContentStandardsRequest,
1072
+ ) -> TaskResult[UpdateContentStandardsResponse]:
1073
+ """
1074
+ Update a content standards configuration.
1075
+
1076
+ Args:
1077
+ request: Request parameters including standards_id and updates
1078
+
1079
+ Returns:
1080
+ TaskResult containing UpdateContentStandardsResponse
1081
+ """
1082
+ operation_id = create_operation_id()
1083
+ params = request.model_dump(exclude_none=True)
1084
+
1085
+ self._emit_activity(
1086
+ Activity(
1087
+ type=ActivityType.PROTOCOL_REQUEST,
1088
+ operation_id=operation_id,
1089
+ agent_id=self.agent_config.id,
1090
+ task_type="update_content_standards",
1091
+ timestamp=datetime.now(timezone.utc).isoformat(),
1092
+ )
1093
+ )
1094
+
1095
+ raw_result = await self.adapter.update_content_standards(params)
1096
+
1097
+ self._emit_activity(
1098
+ Activity(
1099
+ type=ActivityType.PROTOCOL_RESPONSE,
1100
+ operation_id=operation_id,
1101
+ agent_id=self.agent_config.id,
1102
+ task_type="update_content_standards",
1103
+ status=raw_result.status,
1104
+ timestamp=datetime.now(timezone.utc).isoformat(),
1105
+ )
1106
+ )
1107
+
1108
+ return self.adapter._parse_response(raw_result, UpdateContentStandardsResponse)
1109
+
1110
+ async def calibrate_content(
1111
+ self,
1112
+ request: CalibrateContentRequest,
1113
+ ) -> TaskResult[CalibrateContentResponse]:
1114
+ """
1115
+ Calibrate content against standards.
1116
+
1117
+ Evaluates content (artifact or URL) against configured standards to
1118
+ determine suitability for ad placement.
1119
+
1120
+ Args:
1121
+ request: Request parameters including content to evaluate
1122
+
1123
+ Returns:
1124
+ TaskResult containing CalibrateContentResponse with verdict
1125
+ """
1126
+ operation_id = create_operation_id()
1127
+ params = request.model_dump(exclude_none=True)
1128
+
1129
+ self._emit_activity(
1130
+ Activity(
1131
+ type=ActivityType.PROTOCOL_REQUEST,
1132
+ operation_id=operation_id,
1133
+ agent_id=self.agent_config.id,
1134
+ task_type="calibrate_content",
1135
+ timestamp=datetime.now(timezone.utc).isoformat(),
1136
+ )
1137
+ )
1138
+
1139
+ raw_result = await self.adapter.calibrate_content(params)
1140
+
1141
+ self._emit_activity(
1142
+ Activity(
1143
+ type=ActivityType.PROTOCOL_RESPONSE,
1144
+ operation_id=operation_id,
1145
+ agent_id=self.agent_config.id,
1146
+ task_type="calibrate_content",
1147
+ status=raw_result.status,
1148
+ timestamp=datetime.now(timezone.utc).isoformat(),
1149
+ )
1150
+ )
1151
+
1152
+ return self.adapter._parse_response(raw_result, CalibrateContentResponse)
1153
+
1154
+ async def validate_content_delivery(
1155
+ self,
1156
+ request: ValidateContentDeliveryRequest,
1157
+ ) -> TaskResult[ValidateContentDeliveryResponse]:
1158
+ """
1159
+ Validate content delivery against standards.
1160
+
1161
+ Validates that ad delivery records comply with content standards.
1162
+
1163
+ Args:
1164
+ request: Request parameters including delivery records
1165
+
1166
+ Returns:
1167
+ TaskResult containing ValidateContentDeliveryResponse
1168
+ """
1169
+ operation_id = create_operation_id()
1170
+ params = request.model_dump(exclude_none=True)
1171
+
1172
+ self._emit_activity(
1173
+ Activity(
1174
+ type=ActivityType.PROTOCOL_REQUEST,
1175
+ operation_id=operation_id,
1176
+ agent_id=self.agent_config.id,
1177
+ task_type="validate_content_delivery",
1178
+ timestamp=datetime.now(timezone.utc).isoformat(),
1179
+ )
1180
+ )
1181
+
1182
+ raw_result = await self.adapter.validate_content_delivery(params)
1183
+
1184
+ self._emit_activity(
1185
+ Activity(
1186
+ type=ActivityType.PROTOCOL_RESPONSE,
1187
+ operation_id=operation_id,
1188
+ agent_id=self.agent_config.id,
1189
+ task_type="validate_content_delivery",
1190
+ status=raw_result.status,
1191
+ timestamp=datetime.now(timezone.utc).isoformat(),
1192
+ )
1193
+ )
1194
+
1195
+ return self.adapter._parse_response(raw_result, ValidateContentDeliveryResponse)
1196
+
1197
+ async def get_media_buy_artifacts(
1198
+ self,
1199
+ request: GetMediaBuyArtifactsRequest,
1200
+ ) -> TaskResult[GetMediaBuyArtifactsResponse]:
1201
+ """
1202
+ Get artifacts associated with a media buy.
1203
+
1204
+ Retrieves content artifacts where ads were delivered for a media buy.
1205
+
1206
+ Args:
1207
+ request: Request parameters including media_buy_id
1208
+
1209
+ Returns:
1210
+ TaskResult containing GetMediaBuyArtifactsResponse
1211
+ """
1212
+ operation_id = create_operation_id()
1213
+ params = request.model_dump(exclude_none=True)
1214
+
1215
+ self._emit_activity(
1216
+ Activity(
1217
+ type=ActivityType.PROTOCOL_REQUEST,
1218
+ operation_id=operation_id,
1219
+ agent_id=self.agent_config.id,
1220
+ task_type="get_media_buy_artifacts",
1221
+ timestamp=datetime.now(timezone.utc).isoformat(),
1222
+ )
1223
+ )
1224
+
1225
+ raw_result = await self.adapter.get_media_buy_artifacts(params)
1226
+
1227
+ self._emit_activity(
1228
+ Activity(
1229
+ type=ActivityType.PROTOCOL_RESPONSE,
1230
+ operation_id=operation_id,
1231
+ agent_id=self.agent_config.id,
1232
+ task_type="get_media_buy_artifacts",
1233
+ status=raw_result.status,
1234
+ timestamp=datetime.now(timezone.utc).isoformat(),
1235
+ )
1236
+ )
1237
+
1238
+ return self.adapter._parse_response(raw_result, GetMediaBuyArtifactsResponse)
1239
+
1240
+ # ========================================================================
1241
+ # V3 Protocol Methods - Sponsored Intelligence
1242
+ # ========================================================================
1243
+
1244
+ async def si_get_offering(
1245
+ self,
1246
+ request: SiGetOfferingRequest,
1247
+ ) -> TaskResult[SiGetOfferingResponse]:
1248
+ """
1249
+ Get sponsored intelligence offering.
1250
+
1251
+ Retrieves product/service offerings that can be presented in a
1252
+ sponsored intelligence session.
1253
+
1254
+ Args:
1255
+ request: Request parameters including brand context
1256
+
1257
+ Returns:
1258
+ TaskResult containing SiGetOfferingResponse
1259
+ """
1260
+ operation_id = create_operation_id()
1261
+ params = request.model_dump(exclude_none=True)
1262
+
1263
+ self._emit_activity(
1264
+ Activity(
1265
+ type=ActivityType.PROTOCOL_REQUEST,
1266
+ operation_id=operation_id,
1267
+ agent_id=self.agent_config.id,
1268
+ task_type="si_get_offering",
1269
+ timestamp=datetime.now(timezone.utc).isoformat(),
1270
+ )
1271
+ )
1272
+
1273
+ raw_result = await self.adapter.si_get_offering(params)
1274
+
1275
+ self._emit_activity(
1276
+ Activity(
1277
+ type=ActivityType.PROTOCOL_RESPONSE,
1278
+ operation_id=operation_id,
1279
+ agent_id=self.agent_config.id,
1280
+ task_type="si_get_offering",
1281
+ status=raw_result.status,
1282
+ timestamp=datetime.now(timezone.utc).isoformat(),
1283
+ )
1284
+ )
1285
+
1286
+ return self.adapter._parse_response(raw_result, SiGetOfferingResponse)
1287
+
1288
+ async def si_initiate_session(
1289
+ self,
1290
+ request: SiInitiateSessionRequest,
1291
+ ) -> TaskResult[SiInitiateSessionResponse]:
1292
+ """
1293
+ Initiate a sponsored intelligence session.
1294
+
1295
+ Starts a conversational brand experience session with a user.
1296
+
1297
+ Args:
1298
+ request: Request parameters including identity and context
1299
+
1300
+ Returns:
1301
+ TaskResult containing SiInitiateSessionResponse with session_id
1302
+ """
1303
+ operation_id = create_operation_id()
1304
+ params = request.model_dump(exclude_none=True)
1305
+
1306
+ self._emit_activity(
1307
+ Activity(
1308
+ type=ActivityType.PROTOCOL_REQUEST,
1309
+ operation_id=operation_id,
1310
+ agent_id=self.agent_config.id,
1311
+ task_type="si_initiate_session",
1312
+ timestamp=datetime.now(timezone.utc).isoformat(),
1313
+ )
1314
+ )
1315
+
1316
+ raw_result = await self.adapter.si_initiate_session(params)
1317
+
1318
+ self._emit_activity(
1319
+ Activity(
1320
+ type=ActivityType.PROTOCOL_RESPONSE,
1321
+ operation_id=operation_id,
1322
+ agent_id=self.agent_config.id,
1323
+ task_type="si_initiate_session",
1324
+ status=raw_result.status,
1325
+ timestamp=datetime.now(timezone.utc).isoformat(),
1326
+ )
1327
+ )
1328
+
1329
+ return self.adapter._parse_response(raw_result, SiInitiateSessionResponse)
1330
+
1331
+ async def si_send_message(
1332
+ self,
1333
+ request: SiSendMessageRequest,
1334
+ ) -> TaskResult[SiSendMessageResponse]:
1335
+ """
1336
+ Send a message in a sponsored intelligence session.
1337
+
1338
+ Continues the conversation in an active SI session.
1339
+
1340
+ Args:
1341
+ request: Request parameters including session_id and message
1342
+
1343
+ Returns:
1344
+ TaskResult containing SiSendMessageResponse with brand response
1345
+ """
1346
+ operation_id = create_operation_id()
1347
+ params = request.model_dump(exclude_none=True)
1348
+
1349
+ self._emit_activity(
1350
+ Activity(
1351
+ type=ActivityType.PROTOCOL_REQUEST,
1352
+ operation_id=operation_id,
1353
+ agent_id=self.agent_config.id,
1354
+ task_type="si_send_message",
1355
+ timestamp=datetime.now(timezone.utc).isoformat(),
1356
+ )
1357
+ )
1358
+
1359
+ raw_result = await self.adapter.si_send_message(params)
1360
+
1361
+ self._emit_activity(
1362
+ Activity(
1363
+ type=ActivityType.PROTOCOL_RESPONSE,
1364
+ operation_id=operation_id,
1365
+ agent_id=self.agent_config.id,
1366
+ task_type="si_send_message",
1367
+ status=raw_result.status,
1368
+ timestamp=datetime.now(timezone.utc).isoformat(),
1369
+ )
1370
+ )
1371
+
1372
+ return self.adapter._parse_response(raw_result, SiSendMessageResponse)
1373
+
1374
+ async def si_terminate_session(
1375
+ self,
1376
+ request: SiTerminateSessionRequest,
1377
+ ) -> TaskResult[SiTerminateSessionResponse]:
1378
+ """
1379
+ Terminate a sponsored intelligence session.
1380
+
1381
+ Ends an active SI session, optionally with follow-up actions.
1382
+
1383
+ Args:
1384
+ request: Request parameters including session_id and termination context
1385
+
1386
+ Returns:
1387
+ TaskResult containing SiTerminateSessionResponse
1388
+ """
1389
+ operation_id = create_operation_id()
1390
+ params = request.model_dump(exclude_none=True)
1391
+
1392
+ self._emit_activity(
1393
+ Activity(
1394
+ type=ActivityType.PROTOCOL_REQUEST,
1395
+ operation_id=operation_id,
1396
+ agent_id=self.agent_config.id,
1397
+ task_type="si_terminate_session",
1398
+ timestamp=datetime.now(timezone.utc).isoformat(),
1399
+ )
1400
+ )
1401
+
1402
+ raw_result = await self.adapter.si_terminate_session(params)
1403
+
1404
+ self._emit_activity(
1405
+ Activity(
1406
+ type=ActivityType.PROTOCOL_RESPONSE,
1407
+ operation_id=operation_id,
1408
+ agent_id=self.agent_config.id,
1409
+ task_type="si_terminate_session",
1410
+ status=raw_result.status,
1411
+ timestamp=datetime.now(timezone.utc).isoformat(),
1412
+ )
1413
+ )
1414
+
1415
+ return self.adapter._parse_response(raw_result, SiTerminateSessionResponse)
1416
+
1417
+ # ========================================================================
1418
+ # V3 Governance (Property Lists) Methods
1419
+ # ========================================================================
1420
+
1421
+ async def create_property_list(
1422
+ self,
1423
+ request: CreatePropertyListRequest,
1424
+ ) -> TaskResult[CreatePropertyListResponse]:
1425
+ """
1426
+ Create a property list for governance filtering.
1427
+
1428
+ Property lists define dynamic sets of properties based on filters,
1429
+ brand manifests, and feature requirements.
1430
+
1431
+ Args:
1432
+ request: Request parameters for creating the property list
1433
+
1434
+ Returns:
1435
+ TaskResult containing CreatePropertyListResponse with list_id
1436
+ """
1437
+ operation_id = create_operation_id()
1438
+ params = request.model_dump(exclude_none=True)
1439
+
1440
+ self._emit_activity(
1441
+ Activity(
1442
+ type=ActivityType.PROTOCOL_REQUEST,
1443
+ operation_id=operation_id,
1444
+ agent_id=self.agent_config.id,
1445
+ task_type="create_property_list",
1446
+ timestamp=datetime.now(timezone.utc).isoformat(),
1447
+ )
1448
+ )
1449
+
1450
+ raw_result = await self.adapter.create_property_list(params)
1451
+
1452
+ self._emit_activity(
1453
+ Activity(
1454
+ type=ActivityType.PROTOCOL_RESPONSE,
1455
+ operation_id=operation_id,
1456
+ agent_id=self.agent_config.id,
1457
+ task_type="create_property_list",
1458
+ status=raw_result.status,
1459
+ timestamp=datetime.now(timezone.utc).isoformat(),
1460
+ )
1461
+ )
1462
+
1463
+ return self.adapter._parse_response(raw_result, CreatePropertyListResponse)
1464
+
1465
+ async def get_property_list(
1466
+ self,
1467
+ request: GetPropertyListRequest,
1468
+ ) -> TaskResult[GetPropertyListResponse]:
1469
+ """
1470
+ Get a property list with optional resolution.
1471
+
1472
+ When resolve=true, returns the list of resolved property identifiers.
1473
+ Use this to get the actual properties that match the list's filters.
1474
+
1475
+ Args:
1476
+ request: Request parameters including list_id and resolve flag
1477
+
1478
+ Returns:
1479
+ TaskResult containing GetPropertyListResponse with identifiers
1480
+ """
1481
+ operation_id = create_operation_id()
1482
+ params = request.model_dump(exclude_none=True)
1483
+
1484
+ self._emit_activity(
1485
+ Activity(
1486
+ type=ActivityType.PROTOCOL_REQUEST,
1487
+ operation_id=operation_id,
1488
+ agent_id=self.agent_config.id,
1489
+ task_type="get_property_list",
1490
+ timestamp=datetime.now(timezone.utc).isoformat(),
1491
+ )
1492
+ )
1493
+
1494
+ raw_result = await self.adapter.get_property_list(params)
1495
+
1496
+ self._emit_activity(
1497
+ Activity(
1498
+ type=ActivityType.PROTOCOL_RESPONSE,
1499
+ operation_id=operation_id,
1500
+ agent_id=self.agent_config.id,
1501
+ task_type="get_property_list",
1502
+ status=raw_result.status,
1503
+ timestamp=datetime.now(timezone.utc).isoformat(),
1504
+ )
1505
+ )
1506
+
1507
+ return self.adapter._parse_response(raw_result, GetPropertyListResponse)
1508
+
1509
+ async def list_property_lists(
1510
+ self,
1511
+ request: ListPropertyListsRequest,
1512
+ ) -> TaskResult[ListPropertyListsResponse]:
1513
+ """
1514
+ List property lists owned by a principal.
1515
+
1516
+ Retrieves metadata for all property lists, optionally filtered
1517
+ by principal or pagination parameters.
1518
+
1519
+ Args:
1520
+ request: Request parameters with optional filtering
1521
+
1522
+ Returns:
1523
+ TaskResult containing ListPropertyListsResponse
1524
+ """
1525
+ operation_id = create_operation_id()
1526
+ params = request.model_dump(exclude_none=True)
1527
+
1528
+ self._emit_activity(
1529
+ Activity(
1530
+ type=ActivityType.PROTOCOL_REQUEST,
1531
+ operation_id=operation_id,
1532
+ agent_id=self.agent_config.id,
1533
+ task_type="list_property_lists",
1534
+ timestamp=datetime.now(timezone.utc).isoformat(),
1535
+ )
1536
+ )
1537
+
1538
+ raw_result = await self.adapter.list_property_lists(params)
1539
+
1540
+ self._emit_activity(
1541
+ Activity(
1542
+ type=ActivityType.PROTOCOL_RESPONSE,
1543
+ operation_id=operation_id,
1544
+ agent_id=self.agent_config.id,
1545
+ task_type="list_property_lists",
1546
+ status=raw_result.status,
1547
+ timestamp=datetime.now(timezone.utc).isoformat(),
1548
+ )
1549
+ )
1550
+
1551
+ return self.adapter._parse_response(raw_result, ListPropertyListsResponse)
1552
+
1553
+ async def update_property_list(
1554
+ self,
1555
+ request: UpdatePropertyListRequest,
1556
+ ) -> TaskResult[UpdatePropertyListResponse]:
1557
+ """
1558
+ Update a property list.
1559
+
1560
+ Modifies the filters, brand manifest, or other parameters
1561
+ of an existing property list.
1562
+
1563
+ Args:
1564
+ request: Request parameters with list_id and updates
1565
+
1566
+ Returns:
1567
+ TaskResult containing UpdatePropertyListResponse
1568
+ """
1569
+ operation_id = create_operation_id()
1570
+ params = request.model_dump(exclude_none=True)
1571
+
1572
+ self._emit_activity(
1573
+ Activity(
1574
+ type=ActivityType.PROTOCOL_REQUEST,
1575
+ operation_id=operation_id,
1576
+ agent_id=self.agent_config.id,
1577
+ task_type="update_property_list",
1578
+ timestamp=datetime.now(timezone.utc).isoformat(),
1579
+ )
1580
+ )
1581
+
1582
+ raw_result = await self.adapter.update_property_list(params)
1583
+
1584
+ self._emit_activity(
1585
+ Activity(
1586
+ type=ActivityType.PROTOCOL_RESPONSE,
1587
+ operation_id=operation_id,
1588
+ agent_id=self.agent_config.id,
1589
+ task_type="update_property_list",
1590
+ status=raw_result.status,
1591
+ timestamp=datetime.now(timezone.utc).isoformat(),
1592
+ )
1593
+ )
1594
+
1595
+ return self.adapter._parse_response(raw_result, UpdatePropertyListResponse)
1596
+
1597
+ async def delete_property_list(
1598
+ self,
1599
+ request: DeletePropertyListRequest,
1600
+ ) -> TaskResult[DeletePropertyListResponse]:
1601
+ """
1602
+ Delete a property list.
1603
+
1604
+ Removes a property list. Any active subscriptions to this list
1605
+ will be terminated.
1606
+
1607
+ Args:
1608
+ request: Request parameters with list_id
1609
+
1610
+ Returns:
1611
+ TaskResult containing DeletePropertyListResponse
1612
+ """
1613
+ operation_id = create_operation_id()
1614
+ params = request.model_dump(exclude_none=True)
1615
+
1616
+ self._emit_activity(
1617
+ Activity(
1618
+ type=ActivityType.PROTOCOL_REQUEST,
1619
+ operation_id=operation_id,
1620
+ agent_id=self.agent_config.id,
1621
+ task_type="delete_property_list",
1622
+ timestamp=datetime.now(timezone.utc).isoformat(),
1623
+ )
1624
+ )
1625
+
1626
+ raw_result = await self.adapter.delete_property_list(params)
1627
+
1628
+ self._emit_activity(
1629
+ Activity(
1630
+ type=ActivityType.PROTOCOL_RESPONSE,
1631
+ operation_id=operation_id,
1632
+ agent_id=self.agent_config.id,
1633
+ task_type="delete_property_list",
1634
+ status=raw_result.status,
1635
+ timestamp=datetime.now(timezone.utc).isoformat(),
1636
+ )
1637
+ )
1638
+
1639
+ return self.adapter._parse_response(raw_result, DeletePropertyListResponse)
1640
+
776
1641
  async def list_tools(self) -> list[str]:
777
1642
  """
778
1643
  List available tools from the agent.