adcp 2.19.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 (247) 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 +84 -0
  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 -14
  18. adcp/types/_generated.py +346 -52
  19. adcp/types/aliases.py +13 -20
  20. adcp/types/base.py +1 -1
  21. adcp/types/generated_poc/adagents.py +196 -189
  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 +9 -9
  41. adcp/types/generated_poc/core/assets/audio_asset.py +6 -6
  42. adcp/types/generated_poc/core/assets/css_asset.py +3 -3
  43. adcp/types/generated_poc/core/assets/daast_asset.py +19 -19
  44. adcp/types/generated_poc/core/assets/html_asset.py +3 -3
  45. adcp/types/generated_poc/core/assets/image_asset.py +7 -7
  46. adcp/types/generated_poc/core/assets/javascript_asset.py +4 -4
  47. adcp/types/generated_poc/core/assets/text_asset.py +3 -3
  48. adcp/types/generated_poc/core/assets/url_asset.py +4 -4
  49. adcp/types/generated_poc/core/assets/vast_asset.py +19 -19
  50. adcp/types/generated_poc/core/assets/video_asset.py +8 -8
  51. adcp/types/generated_poc/core/assets/webhook_asset.py +10 -10
  52. adcp/types/generated_poc/core/async_response_data.py +3 -3
  53. adcp/types/generated_poc/core/brand_manifest.py +122 -59
  54. adcp/types/generated_poc/core/brand_manifest_ref.py +10 -10
  55. adcp/types/generated_poc/core/context.py +2 -2
  56. adcp/types/generated_poc/core/creative_asset.py +20 -19
  57. adcp/types/generated_poc/core/creative_assignment.py +4 -4
  58. adcp/types/generated_poc/core/creative_filters.py +18 -28
  59. adcp/types/generated_poc/core/creative_manifest.py +3 -3
  60. adcp/types/generated_poc/core/creative_policy.py +5 -5
  61. adcp/types/generated_poc/core/delivery_metrics.py +33 -33
  62. adcp/types/generated_poc/core/deployment.py +21 -21
  63. adcp/types/generated_poc/core/destination.py +12 -12
  64. adcp/types/generated_poc/core/error.py +7 -7
  65. adcp/types/generated_poc/core/ext.py +2 -2
  66. adcp/types/generated_poc/core/format.py +66 -66
  67. adcp/types/generated_poc/core/format_id.py +6 -6
  68. adcp/types/generated_poc/core/frequency_cap.py +3 -3
  69. adcp/types/generated_poc/core/identifier.py +3 -3
  70. adcp/types/generated_poc/core/mcp_webhook_payload.py +11 -11
  71. adcp/types/generated_poc/core/measurement.py +9 -9
  72. adcp/types/generated_poc/core/media_buy.py +8 -8
  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 +9 -9
  76. adcp/types/generated_poc/core/performance_feedback.py +19 -19
  77. adcp/types/generated_poc/core/placement.py +5 -5
  78. adcp/types/generated_poc/core/pricing_option.py +9 -15
  79. adcp/types/generated_poc/core/product.py +21 -21
  80. adcp/types/generated_poc/core/product_allocation.py +48 -0
  81. adcp/types/generated_poc/core/product_filters.py +89 -24
  82. adcp/types/generated_poc/core/promoted_offerings.py +29 -38
  83. adcp/types/generated_poc/core/promoted_products.py +3 -3
  84. adcp/types/generated_poc/core/property.py +10 -10
  85. adcp/types/generated_poc/core/property_id.py +5 -5
  86. adcp/types/generated_poc/core/property_list_ref.py +5 -5
  87. adcp/types/generated_poc/core/property_tag.py +5 -5
  88. adcp/types/generated_poc/core/proposal.py +64 -0
  89. adcp/types/generated_poc/core/protocol_envelope.py +9 -9
  90. adcp/types/generated_poc/core/publisher_property_selector.py +14 -14
  91. adcp/types/generated_poc/core/push_notification_config.py +6 -6
  92. adcp/types/generated_poc/core/reporting_capabilities.py +9 -9
  93. adcp/types/generated_poc/core/reporting_webhook.py +70 -0
  94. adcp/types/generated_poc/core/response.py +5 -5
  95. adcp/types/generated_poc/core/signal_filters.py +6 -6
  96. adcp/types/generated_poc/core/start_timing.py +4 -4
  97. adcp/types/generated_poc/core/sub_asset.py +15 -15
  98. adcp/types/generated_poc/core/targeting.py +59 -18
  99. adcp/types/generated_poc/creative/list_creative_formats_request.py +21 -21
  100. adcp/types/generated_poc/creative/list_creative_formats_response.py +6 -6
  101. adcp/types/generated_poc/creative/preview_creative_request.py +25 -25
  102. adcp/types/generated_poc/creative/preview_creative_response.py +29 -29
  103. adcp/types/generated_poc/creative/preview_render.py +26 -26
  104. adcp/types/generated_poc/enums/adcp_domain.py +5 -5
  105. adcp/types/generated_poc/enums/asset_content_type.py +14 -14
  106. adcp/types/generated_poc/enums/auth_scheme.py +3 -3
  107. adcp/types/generated_poc/enums/available_metric.py +10 -10
  108. adcp/types/generated_poc/enums/channels.py +21 -11
  109. adcp/types/generated_poc/enums/co_branding_requirement.py +4 -4
  110. adcp/types/generated_poc/enums/creative_action.py +6 -6
  111. adcp/types/generated_poc/enums/creative_agent_capability.py +5 -5
  112. adcp/types/generated_poc/enums/creative_sort_field.py +7 -7
  113. adcp/types/generated_poc/enums/creative_status.py +6 -5
  114. adcp/types/generated_poc/enums/daast_tracking_event.py +12 -12
  115. adcp/types/generated_poc/enums/daast_version.py +3 -3
  116. adcp/types/generated_poc/enums/delivery_type.py +3 -3
  117. adcp/types/generated_poc/enums/dimension_unit.py +5 -5
  118. adcp/types/generated_poc/enums/feed_format.py +4 -4
  119. adcp/types/generated_poc/enums/feedback_source.py +5 -5
  120. adcp/types/generated_poc/enums/format_category.py +8 -8
  121. adcp/types/generated_poc/enums/format_id_parameter.py +3 -3
  122. adcp/types/generated_poc/enums/frequency_cap_scope.py +4 -4
  123. adcp/types/generated_poc/enums/geo_level.py +14 -0
  124. adcp/types/generated_poc/enums/history_entry_type.py +3 -3
  125. adcp/types/generated_poc/enums/http_method.py +3 -3
  126. adcp/types/generated_poc/enums/identifier_types.py +20 -20
  127. adcp/types/generated_poc/enums/javascript_module_type.py +4 -4
  128. adcp/types/generated_poc/enums/landing_page_requirement.py +4 -4
  129. adcp/types/generated_poc/enums/markdown_flavor.py +3 -3
  130. adcp/types/generated_poc/enums/media_buy_status.py +5 -5
  131. adcp/types/generated_poc/enums/metric_type.py +9 -9
  132. adcp/types/generated_poc/enums/metro_system.py +15 -0
  133. adcp/types/generated_poc/enums/notification_type.py +5 -5
  134. adcp/types/generated_poc/enums/pacing.py +4 -4
  135. adcp/types/generated_poc/enums/postal_system.py +19 -0
  136. adcp/types/generated_poc/enums/preview_output_format.py +3 -3
  137. adcp/types/generated_poc/enums/pricing_model.py +8 -8
  138. adcp/types/generated_poc/enums/property_type.py +9 -8
  139. adcp/types/generated_poc/enums/publisher_identifier_types.py +6 -6
  140. adcp/types/generated_poc/enums/reporting_frequency.py +4 -4
  141. adcp/types/generated_poc/enums/signal_catalog_type.py +4 -4
  142. adcp/types/generated_poc/enums/sort_direction.py +3 -3
  143. adcp/types/generated_poc/enums/task_status.py +10 -10
  144. adcp/types/generated_poc/enums/task_type.py +12 -12
  145. adcp/types/generated_poc/enums/update_frequency.py +5 -5
  146. adcp/types/generated_poc/enums/url_asset_type.py +4 -4
  147. adcp/types/generated_poc/enums/validation_mode.py +3 -3
  148. adcp/types/generated_poc/enums/vast_tracking_event.py +17 -17
  149. adcp/types/generated_poc/enums/vast_version.py +6 -6
  150. adcp/types/generated_poc/enums/webhook_response_type.py +5 -5
  151. adcp/types/generated_poc/enums/webhook_security_method.py +4 -4
  152. adcp/types/generated_poc/extensions/extension_meta.py +20 -12
  153. adcp/types/generated_poc/media_buy/build_creative_request.py +5 -5
  154. adcp/types/generated_poc/media_buy/build_creative_response.py +7 -7
  155. adcp/types/generated_poc/media_buy/create_media_buy_async_response_input_required.py +6 -6
  156. adcp/types/generated_poc/media_buy/create_media_buy_async_response_submitted.py +2 -2
  157. adcp/types/generated_poc/media_buy/create_media_buy_async_response_working.py +6 -6
  158. adcp/types/generated_poc/media_buy/create_media_buy_request.py +65 -37
  159. adcp/types/generated_poc/media_buy/create_media_buy_response.py +8 -8
  160. adcp/types/generated_poc/media_buy/get_media_buy_delivery_request.py +9 -9
  161. adcp/types/generated_poc/media_buy/get_media_buy_delivery_response.py +52 -52
  162. adcp/types/generated_poc/media_buy/get_products_async_response_input_required.py +7 -7
  163. adcp/types/generated_poc/media_buy/get_products_async_response_submitted.py +3 -3
  164. adcp/types/generated_poc/media_buy/get_products_async_response_working.py +5 -5
  165. adcp/types/generated_poc/media_buy/get_products_request.py +14 -5
  166. adcp/types/generated_poc/media_buy/get_products_response.py +12 -6
  167. adcp/types/generated_poc/media_buy/list_authorized_properties_request.py +4 -4
  168. adcp/types/generated_poc/media_buy/list_authorized_properties_response.py +9 -9
  169. adcp/types/generated_poc/media_buy/list_creative_formats_request.py +10 -10
  170. adcp/types/generated_poc/media_buy/list_creative_formats_response.py +6 -6
  171. adcp/types/generated_poc/media_buy/list_creatives_request.py +24 -24
  172. adcp/types/generated_poc/media_buy/list_creatives_response.py +54 -57
  173. adcp/types/generated_poc/media_buy/package_request.py +12 -12
  174. adcp/types/generated_poc/media_buy/package_update.py +119 -0
  175. adcp/types/generated_poc/media_buy/provide_performance_feedback_request.py +20 -20
  176. adcp/types/generated_poc/media_buy/provide_performance_feedback_response.py +7 -7
  177. adcp/types/generated_poc/media_buy/sync_creatives_async_response_input_required.py +6 -6
  178. adcp/types/generated_poc/media_buy/sync_creatives_async_response_submitted.py +2 -2
  179. adcp/types/generated_poc/media_buy/sync_creatives_async_response_working.py +8 -8
  180. adcp/types/generated_poc/media_buy/sync_creatives_request.py +8 -8
  181. adcp/types/generated_poc/media_buy/sync_creatives_response.py +16 -16
  182. adcp/types/generated_poc/media_buy/update_media_buy_async_response_input_required.py +5 -5
  183. adcp/types/generated_poc/media_buy/update_media_buy_async_response_submitted.py +2 -2
  184. adcp/types/generated_poc/media_buy/update_media_buy_async_response_working.py +6 -6
  185. adcp/types/generated_poc/media_buy/update_media_buy_request.py +28 -124
  186. adcp/types/generated_poc/media_buy/update_media_buy_response.py +8 -8
  187. adcp/types/generated_poc/pricing_options/cpc_option.py +40 -15
  188. adcp/types/generated_poc/pricing_options/cpcv_option.py +41 -16
  189. adcp/types/generated_poc/pricing_options/cpm_option.py +62 -0
  190. adcp/types/generated_poc/pricing_options/cpp_option.py +46 -23
  191. adcp/types/generated_poc/pricing_options/cpv_option.py +45 -26
  192. adcp/types/generated_poc/pricing_options/flat_rate_option.py +53 -47
  193. adcp/types/generated_poc/pricing_options/vcpm_option.py +70 -0
  194. adcp/types/generated_poc/property/base_property_source.py +16 -16
  195. adcp/types/generated_poc/property/create_property_list_request.py +5 -5
  196. adcp/types/generated_poc/property/create_property_list_response.py +4 -4
  197. adcp/types/generated_poc/property/delete_property_list_request.py +3 -3
  198. adcp/types/generated_poc/property/delete_property_list_response.py +4 -4
  199. adcp/types/generated_poc/property/feature_requirement.py +8 -8
  200. adcp/types/generated_poc/property/get_property_list_request.py +6 -6
  201. adcp/types/generated_poc/property/get_property_list_response.py +12 -12
  202. adcp/types/generated_poc/property/list_property_lists_request.py +6 -6
  203. adcp/types/generated_poc/property/list_property_lists_response.py +9 -9
  204. adcp/types/generated_poc/property/property_error.py +11 -11
  205. adcp/types/generated_poc/property/property_feature.py +5 -5
  206. adcp/types/generated_poc/property/property_feature_definition.py +19 -19
  207. adcp/types/generated_poc/property/property_list.py +12 -12
  208. adcp/types/generated_poc/property/property_list_changed_webhook.py +12 -12
  209. adcp/types/generated_poc/property/property_list_filters.py +9 -9
  210. adcp/types/generated_poc/property/update_property_list_request.py +9 -9
  211. adcp/types/generated_poc/property/update_property_list_response.py +3 -3
  212. adcp/types/generated_poc/protocol/__init__.py +3 -0
  213. adcp/types/generated_poc/protocol/get_adcp_capabilities_request.py +34 -0
  214. adcp/types/generated_poc/protocol/get_adcp_capabilities_response.py +353 -0
  215. adcp/types/generated_poc/protocols/adcp_extension.py +14 -17
  216. adcp/types/generated_poc/signals/activate_signal_request.py +4 -4
  217. adcp/types/generated_poc/signals/activate_signal_response.py +7 -7
  218. adcp/types/generated_poc/signals/get_signals_request.py +9 -9
  219. adcp/types/generated_poc/signals/get_signals_response.py +16 -16
  220. adcp/types/generated_poc/sponsored_intelligence/__init__.py +3 -0
  221. adcp/types/generated_poc/sponsored_intelligence/si_capabilities.py +102 -0
  222. adcp/types/generated_poc/sponsored_intelligence/si_get_offering_request.py +34 -0
  223. adcp/types/generated_poc/sponsored_intelligence/si_get_offering_response.py +100 -0
  224. adcp/types/generated_poc/sponsored_intelligence/si_identity.py +78 -0
  225. adcp/types/generated_poc/sponsored_intelligence/si_initiate_session_request.py +46 -0
  226. adcp/types/generated_poc/sponsored_intelligence/si_initiate_session_response.py +44 -0
  227. adcp/types/generated_poc/sponsored_intelligence/si_send_message_request.py +58 -0
  228. adcp/types/generated_poc/sponsored_intelligence/si_send_message_response.py +101 -0
  229. adcp/types/generated_poc/sponsored_intelligence/si_terminate_session_request.py +60 -0
  230. adcp/types/generated_poc/sponsored_intelligence/si_terminate_session_response.py +54 -0
  231. adcp/types/generated_poc/sponsored_intelligence/si_ui_element.py +30 -0
  232. adcp/utils/format_assets.py +5 -5
  233. adcp/utils/preview_cache.py +2 -2
  234. {adcp-2.19.0.dist-info → adcp-3.0.0.dist-info}/METADATA +1 -1
  235. adcp-3.0.0.dist-info/RECORD +264 -0
  236. {adcp-2.19.0.dist-info → adcp-3.0.0.dist-info}/WHEEL +1 -1
  237. adcp/types/generated_poc/enums/standard_format_ids.py +0 -45
  238. adcp/types/generated_poc/pricing_options/cpm_auction_option.py +0 -58
  239. adcp/types/generated_poc/pricing_options/cpm_fixed_option.py +0 -43
  240. adcp/types/generated_poc/pricing_options/vcpm_auction_option.py +0 -61
  241. adcp/types/generated_poc/pricing_options/vcpm_fixed_option.py +0 -47
  242. adcp/types/generated_poc/property/list_property_features_request.py +0 -25
  243. adcp/types/generated_poc/property/list_property_features_response.py +0 -24
  244. adcp-2.19.0.dist-info/RECORD +0 -220
  245. {adcp-2.19.0.dist-info → adcp-3.0.0.dist-info}/entry_points.txt +0 -0
  246. {adcp-2.19.0.dist-info → adcp-3.0.0.dist-info}/licenses/LICENSE +0 -0
  247. {adcp-2.19.0.dist-info → adcp-3.0.0.dist-info}/top_level.txt +0 -0
adcp/server/base.py ADDED
@@ -0,0 +1,368 @@
1
+ """Base classes for ADCP server implementations.
2
+
3
+ Defines the ADCPHandler base class and utilities for building ADCP-compliant agents.
4
+ """
5
+
6
+ from __future__ import annotations
7
+
8
+ from abc import ABC
9
+ from dataclasses import dataclass, field
10
+ from typing import Any
11
+
12
+ from pydantic import BaseModel
13
+
14
+ from adcp.types import Error
15
+
16
+
17
+ @dataclass
18
+ class ToolContext:
19
+ """Context passed to tool handlers.
20
+
21
+ Contains metadata about the current request that may be useful
22
+ for logging, authorization, or other cross-cutting concerns.
23
+ """
24
+
25
+ request_id: str | None = None
26
+ caller_identity: str | None = None
27
+ metadata: dict[str, Any] = field(default_factory=dict)
28
+
29
+
30
+ class NotImplementedResponse(BaseModel):
31
+ """Standard response for operations not supported by this handler."""
32
+
33
+ supported: bool = False
34
+ reason: str = "This operation is not supported by this agent"
35
+ error: Error | None = None
36
+
37
+
38
+ def not_supported(
39
+ reason: str = "This operation is not supported by this agent",
40
+ ) -> NotImplementedResponse:
41
+ """Create a standard 'not supported' response.
42
+
43
+ Use this to return from operations that your agent does not implement.
44
+
45
+ Args:
46
+ reason: Human-readable explanation of why the operation is not supported
47
+
48
+ Returns:
49
+ NotImplementedResponse with supported=False
50
+ """
51
+ return NotImplementedResponse(
52
+ supported=False,
53
+ reason=reason,
54
+ error=Error(
55
+ code="NOT_SUPPORTED",
56
+ message=reason,
57
+ ),
58
+ )
59
+
60
+
61
+ class ADCPHandler(ABC):
62
+ """Base class for ADCP operation handlers.
63
+
64
+ Subclass this to implement ADCP operations. All operations have default
65
+ implementations that return 'not supported', allowing you to implement
66
+ only the operations your agent supports.
67
+
68
+ For protocol-specific handlers, use:
69
+ - ContentStandardsHandler: For content standards agents
70
+ - SponsoredIntelligenceHandler: For sponsored intelligence agents
71
+ """
72
+
73
+ # ========================================================================
74
+ # Core Catalog Operations
75
+ # ========================================================================
76
+
77
+ async def get_products(
78
+ self, params: dict[str, Any], context: ToolContext | None = None
79
+ ) -> Any:
80
+ """Get advertising products.
81
+
82
+ Override this to provide product catalog functionality.
83
+ """
84
+ return not_supported("get_products is not implemented by this agent")
85
+
86
+ async def list_creative_formats(
87
+ self, params: dict[str, Any], context: ToolContext | None = None
88
+ ) -> Any:
89
+ """List supported creative formats.
90
+
91
+ Override this to provide creative format information.
92
+ """
93
+ return not_supported("list_creative_formats is not implemented by this agent")
94
+
95
+ async def list_authorized_properties(
96
+ self, params: dict[str, Any], context: ToolContext | None = None
97
+ ) -> Any:
98
+ """List authorized properties.
99
+
100
+ Override this to provide property authorization information.
101
+ """
102
+ return not_supported("list_authorized_properties is not implemented by this agent")
103
+
104
+ # ========================================================================
105
+ # Creative Operations
106
+ # ========================================================================
107
+
108
+ async def sync_creatives(
109
+ self, params: dict[str, Any], context: ToolContext | None = None
110
+ ) -> Any:
111
+ """Sync creatives.
112
+
113
+ Override this to handle creative synchronization.
114
+ """
115
+ return not_supported("sync_creatives is not implemented by this agent")
116
+
117
+ async def list_creatives(
118
+ self, params: dict[str, Any], context: ToolContext | None = None
119
+ ) -> Any:
120
+ """List creatives.
121
+
122
+ Override this to list synced creatives.
123
+ """
124
+ return not_supported("list_creatives is not implemented by this agent")
125
+
126
+ async def build_creative(
127
+ self, params: dict[str, Any], context: ToolContext | None = None
128
+ ) -> Any:
129
+ """Build a creative.
130
+
131
+ Override this to build creatives from assets.
132
+ """
133
+ return not_supported("build_creative is not implemented by this agent")
134
+
135
+ # ========================================================================
136
+ # Media Buy Operations
137
+ # ========================================================================
138
+
139
+ async def create_media_buy(
140
+ self, params: dict[str, Any], context: ToolContext | None = None
141
+ ) -> Any:
142
+ """Create a media buy.
143
+
144
+ Override this to handle media buy creation.
145
+ """
146
+ return not_supported("create_media_buy is not implemented by this agent")
147
+
148
+ async def update_media_buy(
149
+ self, params: dict[str, Any], context: ToolContext | None = None
150
+ ) -> Any:
151
+ """Update a media buy.
152
+
153
+ Override this to handle media buy updates.
154
+ """
155
+ return not_supported("update_media_buy is not implemented by this agent")
156
+
157
+ async def get_media_buy_delivery(
158
+ self, params: dict[str, Any], context: ToolContext | None = None
159
+ ) -> Any:
160
+ """Get media buy delivery metrics.
161
+
162
+ Override this to provide delivery reporting.
163
+ """
164
+ return not_supported("get_media_buy_delivery is not implemented by this agent")
165
+
166
+ # ========================================================================
167
+ # Signal Operations
168
+ # ========================================================================
169
+
170
+ async def get_signals(
171
+ self, params: dict[str, Any], context: ToolContext | None = None
172
+ ) -> Any:
173
+ """Get available signals.
174
+
175
+ Override this to provide signal catalog.
176
+ """
177
+ return not_supported("get_signals is not implemented by this agent")
178
+
179
+ async def activate_signal(
180
+ self, params: dict[str, Any], context: ToolContext | None = None
181
+ ) -> Any:
182
+ """Activate a signal.
183
+
184
+ Override this to handle signal activation.
185
+ """
186
+ return not_supported("activate_signal is not implemented by this agent")
187
+
188
+ # ========================================================================
189
+ # Feedback Operations
190
+ # ========================================================================
191
+
192
+ async def provide_performance_feedback(
193
+ self, params: dict[str, Any], context: ToolContext | None = None
194
+ ) -> Any:
195
+ """Provide performance feedback.
196
+
197
+ Override this to handle performance feedback ingestion.
198
+ """
199
+ return not_supported("provide_performance_feedback is not implemented by this agent")
200
+
201
+ # ========================================================================
202
+ # V3 Protocol Discovery
203
+ # ========================================================================
204
+
205
+ async def get_adcp_capabilities(
206
+ self, params: dict[str, Any], context: ToolContext | None = None
207
+ ) -> Any:
208
+ """Get ADCP capabilities.
209
+
210
+ Override this to advertise your agent's capabilities.
211
+ """
212
+ return not_supported("get_adcp_capabilities is not implemented by this agent")
213
+
214
+ # ========================================================================
215
+ # V3 Content Standards Operations
216
+ # ========================================================================
217
+
218
+ async def create_content_standards(
219
+ self, params: dict[str, Any], context: ToolContext | None = None
220
+ ) -> Any:
221
+ """Create content standards configuration.
222
+
223
+ Override this in ContentStandardsHandler subclasses.
224
+ """
225
+ return not_supported("create_content_standards is not implemented by this agent")
226
+
227
+ async def get_content_standards(
228
+ self, params: dict[str, Any], context: ToolContext | None = None
229
+ ) -> Any:
230
+ """Get content standards configuration.
231
+
232
+ Override this in ContentStandardsHandler subclasses.
233
+ """
234
+ return not_supported("get_content_standards is not implemented by this agent")
235
+
236
+ async def list_content_standards(
237
+ self, params: dict[str, Any], context: ToolContext | None = None
238
+ ) -> Any:
239
+ """List content standards configurations.
240
+
241
+ Override this in ContentStandardsHandler subclasses.
242
+ """
243
+ return not_supported("list_content_standards is not implemented by this agent")
244
+
245
+ async def update_content_standards(
246
+ self, params: dict[str, Any], context: ToolContext | None = None
247
+ ) -> Any:
248
+ """Update content standards configuration.
249
+
250
+ Override this in ContentStandardsHandler subclasses.
251
+ """
252
+ return not_supported("update_content_standards is not implemented by this agent")
253
+
254
+ async def calibrate_content(
255
+ self, params: dict[str, Any], context: ToolContext | None = None
256
+ ) -> Any:
257
+ """Calibrate content against standards.
258
+
259
+ Override this in ContentStandardsHandler subclasses.
260
+ """
261
+ return not_supported("calibrate_content is not implemented by this agent")
262
+
263
+ async def validate_content_delivery(
264
+ self, params: dict[str, Any], context: ToolContext | None = None
265
+ ) -> Any:
266
+ """Validate content delivery against standards.
267
+
268
+ Override this in ContentStandardsHandler subclasses.
269
+ """
270
+ return not_supported("validate_content_delivery is not implemented by this agent")
271
+
272
+ async def get_media_buy_artifacts(
273
+ self, params: dict[str, Any], context: ToolContext | None = None
274
+ ) -> Any:
275
+ """Get artifacts associated with a media buy.
276
+
277
+ Override this in ContentStandardsHandler subclasses.
278
+ """
279
+ return not_supported("get_media_buy_artifacts is not implemented by this agent")
280
+
281
+ # ========================================================================
282
+ # V3 Sponsored Intelligence Operations
283
+ # ========================================================================
284
+
285
+ async def si_get_offering(
286
+ self, params: dict[str, Any], context: ToolContext | None = None
287
+ ) -> Any:
288
+ """Get sponsored intelligence offering.
289
+
290
+ Override this in SponsoredIntelligenceHandler subclasses.
291
+ """
292
+ return not_supported("si_get_offering is not implemented by this agent")
293
+
294
+ async def si_initiate_session(
295
+ self, params: dict[str, Any], context: ToolContext | None = None
296
+ ) -> Any:
297
+ """Initiate sponsored intelligence session.
298
+
299
+ Override this in SponsoredIntelligenceHandler subclasses.
300
+ """
301
+ return not_supported("si_initiate_session is not implemented by this agent")
302
+
303
+ async def si_send_message(
304
+ self, params: dict[str, Any], context: ToolContext | None = None
305
+ ) -> Any:
306
+ """Send message in sponsored intelligence session.
307
+
308
+ Override this in SponsoredIntelligenceHandler subclasses.
309
+ """
310
+ return not_supported("si_send_message is not implemented by this agent")
311
+
312
+ async def si_terminate_session(
313
+ self, params: dict[str, Any], context: ToolContext | None = None
314
+ ) -> Any:
315
+ """Terminate sponsored intelligence session.
316
+
317
+ Override this in SponsoredIntelligenceHandler subclasses.
318
+ """
319
+ return not_supported("si_terminate_session is not implemented by this agent")
320
+
321
+ # ========================================================================
322
+ # V3 Governance (Property Lists) Operations
323
+ # ========================================================================
324
+
325
+ async def create_property_list(
326
+ self, params: dict[str, Any], context: ToolContext | None = None
327
+ ) -> Any:
328
+ """Create a property list for governance filtering.
329
+
330
+ Override this in GovernanceHandler subclasses.
331
+ """
332
+ return not_supported("create_property_list is not implemented by this agent")
333
+
334
+ async def get_property_list(
335
+ self, params: dict[str, Any], context: ToolContext | None = None
336
+ ) -> Any:
337
+ """Get a property list with optional resolution.
338
+
339
+ Override this in GovernanceHandler subclasses.
340
+ """
341
+ return not_supported("get_property_list is not implemented by this agent")
342
+
343
+ async def list_property_lists(
344
+ self, params: dict[str, Any], context: ToolContext | None = None
345
+ ) -> Any:
346
+ """List property lists.
347
+
348
+ Override this in GovernanceHandler subclasses.
349
+ """
350
+ return not_supported("list_property_lists is not implemented by this agent")
351
+
352
+ async def update_property_list(
353
+ self, params: dict[str, Any], context: ToolContext | None = None
354
+ ) -> Any:
355
+ """Update a property list.
356
+
357
+ Override this in GovernanceHandler subclasses.
358
+ """
359
+ return not_supported("update_property_list is not implemented by this agent")
360
+
361
+ async def delete_property_list(
362
+ self, params: dict[str, Any], context: ToolContext | None = None
363
+ ) -> Any:
364
+ """Delete a property list.
365
+
366
+ Override this in GovernanceHandler subclasses.
367
+ """
368
+ return not_supported("delete_property_list is not implemented by this agent")