@adcp/client 4.21.0 → 4.22.0

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 (160) hide show
  1. package/AGENTS.md +278 -0
  2. package/README.md +96 -61
  3. package/bin/adcp.js +342 -4
  4. package/dist/lib/agents/index.generated.d.ts +9 -1
  5. package/dist/lib/agents/index.generated.d.ts.map +1 -1
  6. package/dist/lib/agents/index.generated.js +12 -0
  7. package/dist/lib/agents/index.generated.js.map +1 -1
  8. package/dist/lib/core/AgentClient.d.ts.map +1 -1
  9. package/dist/lib/core/SingleAgentClient.d.ts +2 -1
  10. package/dist/lib/core/SingleAgentClient.d.ts.map +1 -1
  11. package/dist/lib/core/SingleAgentClient.js +10 -1
  12. package/dist/lib/core/SingleAgentClient.js.map +1 -1
  13. package/dist/lib/discovery/property-crawler.d.ts +4 -0
  14. package/dist/lib/discovery/property-crawler.d.ts.map +1 -1
  15. package/dist/lib/discovery/property-crawler.js +10 -2
  16. package/dist/lib/discovery/property-crawler.js.map +1 -1
  17. package/dist/lib/index.d.ts +4 -4
  18. package/dist/lib/index.d.ts.map +1 -1
  19. package/dist/lib/index.js +6 -4
  20. package/dist/lib/index.js.map +1 -1
  21. package/dist/lib/protocols/index.d.ts.map +1 -1
  22. package/dist/lib/protocols/index.js +8 -6
  23. package/dist/lib/protocols/index.js.map +1 -1
  24. package/dist/lib/protocols/mcp.d.ts.map +1 -1
  25. package/dist/lib/protocols/mcp.js +24 -11
  26. package/dist/lib/protocols/mcp.js.map +1 -1
  27. package/dist/lib/server/index.d.ts +2 -0
  28. package/dist/lib/server/index.d.ts.map +1 -1
  29. package/dist/lib/server/index.js +3 -1
  30. package/dist/lib/server/index.js.map +1 -1
  31. package/dist/lib/server/serve.d.ts +45 -0
  32. package/dist/lib/server/serve.d.ts.map +1 -0
  33. package/dist/lib/server/serve.js +86 -0
  34. package/dist/lib/server/serve.js.map +1 -0
  35. package/dist/lib/testing/client.d.ts.map +1 -1
  36. package/dist/lib/testing/client.js +1 -0
  37. package/dist/lib/testing/client.js.map +1 -1
  38. package/dist/lib/testing/compliance/comply.d.ts.map +1 -1
  39. package/dist/lib/testing/compliance/comply.js +48 -63
  40. package/dist/lib/testing/compliance/comply.js.map +1 -1
  41. package/dist/lib/testing/compliance/storyboard-tracks.d.ts +24 -0
  42. package/dist/lib/testing/compliance/storyboard-tracks.d.ts.map +1 -0
  43. package/dist/lib/testing/compliance/storyboard-tracks.js +157 -0
  44. package/dist/lib/testing/compliance/storyboard-tracks.js.map +1 -0
  45. package/dist/lib/testing/compliance/types.d.ts +1 -1
  46. package/dist/lib/testing/compliance/types.d.ts.map +1 -1
  47. package/dist/lib/testing/index.d.ts +1 -0
  48. package/dist/lib/testing/index.d.ts.map +1 -1
  49. package/dist/lib/testing/index.js +23 -1
  50. package/dist/lib/testing/index.js.map +1 -1
  51. package/dist/lib/testing/orchestrator.d.ts +8 -0
  52. package/dist/lib/testing/orchestrator.d.ts.map +1 -1
  53. package/dist/lib/testing/orchestrator.js +8 -0
  54. package/dist/lib/testing/orchestrator.js.map +1 -1
  55. package/dist/lib/testing/storyboard/context.d.ts +34 -0
  56. package/dist/lib/testing/storyboard/context.d.ts.map +1 -0
  57. package/dist/lib/testing/storyboard/context.js +257 -0
  58. package/dist/lib/testing/storyboard/context.js.map +1 -0
  59. package/dist/lib/testing/storyboard/index.d.ts +15 -0
  60. package/dist/lib/testing/storyboard/index.d.ts.map +1 -0
  61. package/dist/lib/testing/storyboard/index.js +48 -0
  62. package/dist/lib/testing/storyboard/index.js.map +1 -0
  63. package/dist/lib/testing/storyboard/loader.d.ts +53 -0
  64. package/dist/lib/testing/storyboard/loader.d.ts.map +1 -0
  65. package/dist/lib/testing/storyboard/loader.js +114 -0
  66. package/dist/lib/testing/storyboard/loader.js.map +1 -0
  67. package/dist/lib/testing/storyboard/path.d.ts +29 -0
  68. package/dist/lib/testing/storyboard/path.d.ts.map +1 -0
  69. package/dist/lib/testing/storyboard/path.js +121 -0
  70. package/dist/lib/testing/storyboard/path.js.map +1 -0
  71. package/dist/lib/testing/storyboard/request-builder.d.ts +28 -0
  72. package/dist/lib/testing/storyboard/request-builder.d.ts.map +1 -0
  73. package/dist/lib/testing/storyboard/request-builder.js +410 -0
  74. package/dist/lib/testing/storyboard/request-builder.js.map +1 -0
  75. package/dist/lib/testing/storyboard/runner.d.ts +24 -0
  76. package/dist/lib/testing/storyboard/runner.d.ts.map +1 -0
  77. package/dist/lib/testing/storyboard/runner.js +280 -0
  78. package/dist/lib/testing/storyboard/runner.js.map +1 -0
  79. package/dist/lib/testing/storyboard/task-map.d.ts +21 -0
  80. package/dist/lib/testing/storyboard/task-map.d.ts.map +1 -0
  81. package/dist/lib/testing/storyboard/task-map.js +84 -0
  82. package/dist/lib/testing/storyboard/task-map.js.map +1 -0
  83. package/dist/lib/testing/storyboard/types.d.ts +156 -0
  84. package/dist/lib/testing/storyboard/types.d.ts.map +1 -0
  85. package/dist/lib/testing/storyboard/types.js +10 -0
  86. package/dist/lib/testing/storyboard/types.js.map +1 -0
  87. package/dist/lib/testing/storyboard/validations.d.ts +17 -0
  88. package/dist/lib/testing/storyboard/validations.d.ts.map +1 -0
  89. package/dist/lib/testing/storyboard/validations.js +166 -0
  90. package/dist/lib/testing/storyboard/validations.js.map +1 -0
  91. package/dist/lib/testing/types.d.ts +2 -0
  92. package/dist/lib/testing/types.d.ts.map +1 -1
  93. package/dist/lib/types/core.generated.d.ts +2 -2
  94. package/dist/lib/types/core.generated.d.ts.map +1 -1
  95. package/dist/lib/types/core.generated.js +1 -1
  96. package/dist/lib/types/schemas.generated.d.ts +193 -34
  97. package/dist/lib/types/schemas.generated.d.ts.map +1 -1
  98. package/dist/lib/types/schemas.generated.js +87 -5
  99. package/dist/lib/types/schemas.generated.js.map +1 -1
  100. package/dist/lib/types/tools.generated.d.ts +280 -3
  101. package/dist/lib/types/tools.generated.d.ts.map +1 -1
  102. package/dist/lib/utils/response-schemas.d.ts.map +1 -1
  103. package/dist/lib/utils/response-schemas.js +34 -3
  104. package/dist/lib/utils/response-schemas.js.map +1 -1
  105. package/dist/lib/utils/validate-user-agent.d.ts +8 -0
  106. package/dist/lib/utils/validate-user-agent.d.ts.map +1 -0
  107. package/dist/lib/utils/validate-user-agent.js +15 -0
  108. package/dist/lib/utils/validate-user-agent.js.map +1 -0
  109. package/dist/lib/version.d.ts +6 -0
  110. package/dist/lib/version.d.ts.map +1 -1
  111. package/dist/lib/version.js +7 -1
  112. package/dist/lib/version.js.map +1 -1
  113. package/docs/README.md +42 -0
  114. package/docs/guides/BUILD-AN-AGENT.md +292 -0
  115. package/docs/llms.txt +634 -0
  116. package/examples/README.md +106 -0
  117. package/examples/adcp.config.json +30 -0
  118. package/examples/basic-a2a.ts +76 -0
  119. package/examples/basic-mcp.ts +50 -0
  120. package/examples/batch-preview-test.ts +266 -0
  121. package/examples/conversation-client.ts +291 -0
  122. package/examples/debug-preview-response.ts +73 -0
  123. package/examples/debug-preview-with-logging.ts +50 -0
  124. package/examples/easy-config-demo.ts +242 -0
  125. package/examples/env-config.ts +51 -0
  126. package/examples/error-compliant-server.ts +237 -0
  127. package/examples/generative-creative-demo.ts +205 -0
  128. package/examples/inspect-card-formats.ts +161 -0
  129. package/examples/logger-usage.ts +165 -0
  130. package/examples/oauth-cli-example.ts +154 -0
  131. package/examples/pr78-async-patterns-demo.ts +247 -0
  132. package/examples/signals-agent.ts +162 -0
  133. package/examples/simple-getting-started.ts +225 -0
  134. package/examples/simple-protocol-demo.ts +75 -0
  135. package/examples/test-helpers-demo.ts +239 -0
  136. package/examples/zod-validation-example.ts +126 -0
  137. package/package.json +12 -2
  138. package/skills/adcp/SKILL.md +13 -2
  139. package/storyboards/audience_sync.yaml +199 -0
  140. package/storyboards/behavioral_analysis.yaml +244 -0
  141. package/storyboards/brand_rights.yaml +131 -0
  142. package/storyboards/creative_ad_server.yaml +171 -0
  143. package/storyboards/creative_sales_agent.yaml +169 -0
  144. package/storyboards/creative_template.yaml +306 -0
  145. package/storyboards/deterministic_testing.yaml +925 -0
  146. package/storyboards/error_compliance.yaml +231 -0
  147. package/storyboards/governance_content_standards.yaml +213 -0
  148. package/storyboards/governance_property_lists.yaml +372 -0
  149. package/storyboards/media_buy_catalog_creative.yaml +457 -0
  150. package/storyboards/media_buy_governance_escalation.yaml +467 -0
  151. package/storyboards/media_buy_guaranteed_approval.yaml +396 -0
  152. package/storyboards/media_buy_non_guaranteed.yaml +288 -0
  153. package/storyboards/media_buy_proposal_mode.yaml +369 -0
  154. package/storyboards/media_buy_seller.yaml +560 -0
  155. package/storyboards/media_buy_state_machine.yaml +254 -0
  156. package/storyboards/schema.yaml +65 -0
  157. package/storyboards/schema_validation.yaml +166 -0
  158. package/storyboards/si_session.yaml +384 -0
  159. package/storyboards/signal_marketplace.yaml +283 -0
  160. package/storyboards/signal_owned.yaml +211 -0
@@ -0,0 +1,211 @@
1
+ id: signal_owned
2
+ version: "1.0.0"
3
+ title: "Owned signal agent"
4
+ category: signal_owned
5
+ summary: "Signal agent serving first-party or proprietary audience data without external catalog verification."
6
+ platform_types:
7
+ - retail_media
8
+ - social_platform
9
+ - pmax_platform
10
+
11
+ track: signals
12
+ required_tools:
13
+ - get_signals
14
+ narrative: |
15
+ You operate a first-party data platform — a retailer CDP, publisher contextual data
16
+ provider, or proprietary audience platform. Your signals are agent-native: they come
17
+ from your own data, not from third-party catalogs.
18
+
19
+ Buyers trust your agent directly. There's no external adagents.json to verify against —
20
+ provenance is the agent itself. This simplifies the flow: discovery and activation,
21
+ without the verification step that marketplace agents require.
22
+
23
+ Owned signal agents often have richer signal types. A retailer might expose purchase
24
+ frequency as a numeric signal (0-30 visits/month) or loyalty tier as categorical
25
+ (platinum/gold/silver/bronze). A publisher might expose content category, subscriber
26
+ tenure, or engagement scores.
27
+
28
+ This storyboard walks through discovery and both activation patterns.
29
+
30
+ agent:
31
+ interaction_model: owned_signals
32
+ capabilities: []
33
+ examples:
34
+ - "Retailer CDPs (e.g., loyalty and purchase data)"
35
+ - "Publisher contextual platforms (e.g., content category, subscriber data)"
36
+ - "First-party audience platforms (e.g., CRM-derived segments)"
37
+
38
+ caller:
39
+ role: buyer_agent
40
+ example: "Scope3 (DSP)"
41
+
42
+ prerequisites:
43
+ description: |
44
+ The buyer has a campaign brief with targeting objectives. The test kit provides
45
+ sample owned signal definitions with various value types (binary, categorical,
46
+ numeric) and pricing models.
47
+ test_kit: "test-kits/nova-motors.yaml"
48
+
49
+ phases:
50
+ - id: discovery
51
+ title: "Signal discovery"
52
+ narrative: |
53
+ The buyer describes targeting objectives and your agent returns matching signals
54
+ from your proprietary data. Unlike marketplace agents, these signals have
55
+ signal_type "owned" — provenance is the agent itself.
56
+
57
+ Owned signals often include richer value types. A retailer can expose loyalty
58
+ tiers as categorical signals and purchase frequency as numeric signals, giving
59
+ buyers more precise targeting than binary include/exclude.
60
+
61
+ steps:
62
+ - id: search_owned_signals
63
+ title: "Discover owned signals"
64
+ narrative: |
65
+ The buyer searches for audience segments using a natural language description.
66
+ Your agent returns signals from your proprietary data — loyalty tiers, purchase
67
+ history, engagement scores, contextual categories.
68
+ task: get_signals
69
+ schema_ref: "signals/get-signals-request.json"
70
+ response_schema_ref: "signals/get-signals-response.json"
71
+ doc_ref: "/signals/tasks/get_signals"
72
+ stateful: false
73
+ expected: |
74
+ Return matching signals from your proprietary data. Each signal must include:
75
+ - signal_agent_segment_id for activation
76
+ - signal_id with source: "agent_native"
77
+ - name, description, and value_type
78
+ - coverage_percentage
79
+ - pricing_options
80
+ - signal_type: "owned"
81
+
82
+ For categorical signals, include the allowed_values.
83
+ For numeric signals, include the range (min/max).
84
+
85
+ sample_request:
86
+ signal_spec: "High-value customers likely to purchase electronics, with loyalty program data"
87
+
88
+ validations:
89
+ - check: response_schema
90
+ description: "Response matches get-signals-response.json schema"
91
+ - check: field_present
92
+ path: "signals[0].signal_agent_segment_id"
93
+ description: "Each signal has a signal_agent_segment_id"
94
+ - check: field_present
95
+ path: "signals[0].pricing_options"
96
+ description: "Each signal has pricing options"
97
+
98
+ - id: filter_by_criteria
99
+ title: "Filter signals by criteria"
100
+ narrative: |
101
+ The buyer narrows the search using filters — maximum CPM, specific signal
102
+ types, or coverage thresholds. This tests that your agent handles filter
103
+ parameters correctly and returns only matching signals.
104
+ task: get_signals
105
+ schema_ref: "signals/get-signals-request.json"
106
+ response_schema_ref: "signals/get-signals-response.json"
107
+ doc_ref: "/signals/tasks/get_signals"
108
+ stateful: false
109
+ expected: |
110
+ Return only signals matching the filter criteria. If no signals match,
111
+ return an empty signals array — not an error.
112
+
113
+ sample_request:
114
+ signal_spec: "Purchase behavior signals"
115
+ filters:
116
+ max_cpm: 5.00
117
+
118
+ validations:
119
+ - check: response_schema
120
+ description: "Response matches schema"
121
+ - check: field_present
122
+ path: "signals"
123
+ description: "Response contains a signals array"
124
+
125
+ - id: platform_activation
126
+ title: "Activate on a DSP"
127
+ narrative: |
128
+ The buyer activates a signal directly on a DSP. Your agent pushes the segment
129
+ to the platform and returns a segment_id the buyer uses for campaign targeting.
130
+
131
+ Use platform destinations when the buyer manages DSP campaigns directly.
132
+
133
+ steps:
134
+ - id: activate_on_platform
135
+ title: "Activate owned signal on a DSP"
136
+ narrative: |
137
+ The buyer selects a signal and activates it on a DSP. For owned signals,
138
+ this means your platform pushes first-party segment data to the DSP. The
139
+ buyer gets back a segment_id for targeting.
140
+ task: activate_signal
141
+ schema_ref: "signals/activate-signal-request.json"
142
+ response_schema_ref: "signals/activate-signal-response.json"
143
+ doc_ref: "/signals/tasks/activate_signal"
144
+ stateful: true
145
+ expected: |
146
+ Return a deployment with:
147
+ - type: "platform"
148
+ - is_live status (may be async)
149
+ - activation_key with type: "segment_id" when live
150
+ - estimated_activation_duration_minutes if not immediately live
151
+
152
+ sample_request:
153
+ signal_agent_segment_id: "prism_high_ltv"
154
+ pricing_option_id: "po_prism_flat_monthly"
155
+ destinations:
156
+ - type: "platform"
157
+ platform: "the-trade-desk"
158
+ account: "agency-123-ttd"
159
+
160
+ validations:
161
+ - check: response_schema
162
+ description: "Response matches activate-signal-response.json schema"
163
+ - check: field_present
164
+ path: "deployments[0].type"
165
+ description: "Deployment includes type"
166
+
167
+ - id: agent_activation
168
+ title: "Activate on a sales agent"
169
+ narrative: |
170
+ The buyer activates a signal on a sales agent. The SA records the activation
171
+ and handles downstream DSP coordination — the buyer doesn't need to know which
172
+ platform the SA uses.
173
+
174
+ This is the right pattern when buying media through a sales agent.
175
+
176
+ steps:
177
+ - id: activate_on_agent
178
+ title: "Activate owned signal on a sales agent"
179
+ narrative: |
180
+ The buyer activates a signal with the SA's URL as the destination. The
181
+ activation is typically synchronous. The SA records it internally and
182
+ applies the targeting when the buyer later calls create_media_buy.
183
+ task: activate_signal
184
+ schema_ref: "signals/activate-signal-request.json"
185
+ response_schema_ref: "signals/activate-signal-response.json"
186
+ doc_ref: "/signals/tasks/activate_signal"
187
+ stateful: true
188
+ expected: |
189
+ Return a deployment with:
190
+ - type: "agent"
191
+ - agent_url matching the SA
192
+ - is_live: true (sync activation)
193
+ - activation_key with type: "key_value"
194
+ - deployed_at timestamp
195
+
196
+ sample_request:
197
+ signal_agent_segment_id: "prism_cart_abandoner"
198
+ pricing_option_id: "po_prism_abandoner_cpm"
199
+ destinations:
200
+ - type: "agent"
201
+ agent_url: "https://wonderstruck.salesagents.example"
202
+
203
+ validations:
204
+ - check: response_schema
205
+ description: "Response matches activate-signal-response.json schema"
206
+ - check: field_present
207
+ path: "deployments[0].activation_key"
208
+ description: "Deployment includes activation key"
209
+ - check: field_value
210
+ path: "deployments[0].type"
211
+ description: "Deployment type is 'agent'"