@adcp/client 4.20.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 (210) 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 +9 -9
  18. package/dist/lib/index.d.ts.map +1 -1
  19. package/dist/lib/index.js +13 -5
  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/registry/cursor-store.d.ts +19 -0
  28. package/dist/lib/registry/cursor-store.d.ts.map +1 -0
  29. package/dist/lib/registry/cursor-store.js +44 -0
  30. package/dist/lib/registry/cursor-store.js.map +1 -0
  31. package/dist/lib/registry/index.d.ts +21 -3
  32. package/dist/lib/registry/index.d.ts.map +1 -1
  33. package/dist/lib/registry/index.js +94 -1
  34. package/dist/lib/registry/index.js.map +1 -1
  35. package/dist/lib/registry/property-registry.d.ts +57 -0
  36. package/dist/lib/registry/property-registry.d.ts.map +1 -0
  37. package/dist/lib/registry/property-registry.js +92 -0
  38. package/dist/lib/registry/property-registry.js.map +1 -0
  39. package/dist/lib/registry/sync.d.ts +4 -0
  40. package/dist/lib/registry/sync.d.ts.map +1 -1
  41. package/dist/lib/registry/sync.js +14 -0
  42. package/dist/lib/registry/sync.js.map +1 -1
  43. package/dist/lib/registry/types.d.ts +35 -2
  44. package/dist/lib/registry/types.d.ts.map +1 -1
  45. package/dist/lib/registry/types.generated.d.ts +349 -321
  46. package/dist/lib/registry/types.generated.d.ts.map +1 -1
  47. package/dist/lib/registry/types.generated.js +1 -1
  48. package/dist/lib/server/index.d.ts +2 -0
  49. package/dist/lib/server/index.d.ts.map +1 -1
  50. package/dist/lib/server/index.js +3 -1
  51. package/dist/lib/server/index.js.map +1 -1
  52. package/dist/lib/server/serve.d.ts +45 -0
  53. package/dist/lib/server/serve.d.ts.map +1 -0
  54. package/dist/lib/server/serve.js +86 -0
  55. package/dist/lib/server/serve.js.map +1 -0
  56. package/dist/lib/testing/agent-tester.d.ts +1 -1
  57. package/dist/lib/testing/agent-tester.d.ts.map +1 -1
  58. package/dist/lib/testing/agent-tester.js +10 -1
  59. package/dist/lib/testing/agent-tester.js.map +1 -1
  60. package/dist/lib/testing/client.d.ts.map +1 -1
  61. package/dist/lib/testing/client.js +3 -0
  62. package/dist/lib/testing/client.js.map +1 -1
  63. package/dist/lib/testing/compliance/comply.d.ts.map +1 -1
  64. package/dist/lib/testing/compliance/comply.js +158 -203
  65. package/dist/lib/testing/compliance/comply.js.map +1 -1
  66. package/dist/lib/testing/compliance/storyboard-tracks.d.ts +24 -0
  67. package/dist/lib/testing/compliance/storyboard-tracks.d.ts.map +1 -0
  68. package/dist/lib/testing/compliance/storyboard-tracks.js +157 -0
  69. package/dist/lib/testing/compliance/storyboard-tracks.js.map +1 -0
  70. package/dist/lib/testing/compliance/types.d.ts +1 -1
  71. package/dist/lib/testing/compliance/types.d.ts.map +1 -1
  72. package/dist/lib/testing/index.d.ts +2 -1
  73. package/dist/lib/testing/index.d.ts.map +1 -1
  74. package/dist/lib/testing/index.js +26 -1
  75. package/dist/lib/testing/index.js.map +1 -1
  76. package/dist/lib/testing/orchestrator.d.ts +8 -0
  77. package/dist/lib/testing/orchestrator.d.ts.map +1 -1
  78. package/dist/lib/testing/orchestrator.js +11 -0
  79. package/dist/lib/testing/orchestrator.js.map +1 -1
  80. package/dist/lib/testing/scenarios/brand-rights.d.ts +23 -0
  81. package/dist/lib/testing/scenarios/brand-rights.d.ts.map +1 -0
  82. package/dist/lib/testing/scenarios/brand-rights.js +144 -0
  83. package/dist/lib/testing/scenarios/brand-rights.js.map +1 -0
  84. package/dist/lib/testing/scenarios/capabilities.d.ts.map +1 -1
  85. package/dist/lib/testing/scenarios/capabilities.js +11 -2
  86. package/dist/lib/testing/scenarios/capabilities.js.map +1 -1
  87. package/dist/lib/testing/scenarios/governance.d.ts.map +1 -1
  88. package/dist/lib/testing/scenarios/governance.js +5 -0
  89. package/dist/lib/testing/scenarios/governance.js.map +1 -1
  90. package/dist/lib/testing/scenarios/index.d.ts +2 -0
  91. package/dist/lib/testing/scenarios/index.d.ts.map +1 -1
  92. package/dist/lib/testing/scenarios/index.js +10 -2
  93. package/dist/lib/testing/scenarios/index.js.map +1 -1
  94. package/dist/lib/testing/scenarios/media-buy.d.ts.map +1 -1
  95. package/dist/lib/testing/scenarios/media-buy.js +22 -3
  96. package/dist/lib/testing/scenarios/media-buy.js.map +1 -1
  97. package/dist/lib/testing/scenarios/trusted-match.d.ts +22 -0
  98. package/dist/lib/testing/scenarios/trusted-match.d.ts.map +1 -0
  99. package/dist/lib/testing/scenarios/trusted-match.js +128 -0
  100. package/dist/lib/testing/scenarios/trusted-match.js.map +1 -0
  101. package/dist/lib/testing/storyboard/context.d.ts +34 -0
  102. package/dist/lib/testing/storyboard/context.d.ts.map +1 -0
  103. package/dist/lib/testing/storyboard/context.js +257 -0
  104. package/dist/lib/testing/storyboard/context.js.map +1 -0
  105. package/dist/lib/testing/storyboard/index.d.ts +15 -0
  106. package/dist/lib/testing/storyboard/index.d.ts.map +1 -0
  107. package/dist/lib/testing/storyboard/index.js +48 -0
  108. package/dist/lib/testing/storyboard/index.js.map +1 -0
  109. package/dist/lib/testing/storyboard/loader.d.ts +53 -0
  110. package/dist/lib/testing/storyboard/loader.d.ts.map +1 -0
  111. package/dist/lib/testing/storyboard/loader.js +114 -0
  112. package/dist/lib/testing/storyboard/loader.js.map +1 -0
  113. package/dist/lib/testing/storyboard/path.d.ts +29 -0
  114. package/dist/lib/testing/storyboard/path.d.ts.map +1 -0
  115. package/dist/lib/testing/storyboard/path.js +121 -0
  116. package/dist/lib/testing/storyboard/path.js.map +1 -0
  117. package/dist/lib/testing/storyboard/request-builder.d.ts +28 -0
  118. package/dist/lib/testing/storyboard/request-builder.d.ts.map +1 -0
  119. package/dist/lib/testing/storyboard/request-builder.js +410 -0
  120. package/dist/lib/testing/storyboard/request-builder.js.map +1 -0
  121. package/dist/lib/testing/storyboard/runner.d.ts +24 -0
  122. package/dist/lib/testing/storyboard/runner.d.ts.map +1 -0
  123. package/dist/lib/testing/storyboard/runner.js +280 -0
  124. package/dist/lib/testing/storyboard/runner.js.map +1 -0
  125. package/dist/lib/testing/storyboard/task-map.d.ts +21 -0
  126. package/dist/lib/testing/storyboard/task-map.d.ts.map +1 -0
  127. package/dist/lib/testing/storyboard/task-map.js +84 -0
  128. package/dist/lib/testing/storyboard/task-map.js.map +1 -0
  129. package/dist/lib/testing/storyboard/types.d.ts +156 -0
  130. package/dist/lib/testing/storyboard/types.d.ts.map +1 -0
  131. package/dist/lib/testing/storyboard/types.js +10 -0
  132. package/dist/lib/testing/storyboard/types.js.map +1 -0
  133. package/dist/lib/testing/storyboard/validations.d.ts +17 -0
  134. package/dist/lib/testing/storyboard/validations.d.ts.map +1 -0
  135. package/dist/lib/testing/storyboard/validations.js +166 -0
  136. package/dist/lib/testing/storyboard/validations.js.map +1 -0
  137. package/dist/lib/testing/types.d.ts +4 -1
  138. package/dist/lib/testing/types.d.ts.map +1 -1
  139. package/dist/lib/types/core.generated.d.ts +36 -23
  140. package/dist/lib/types/core.generated.d.ts.map +1 -1
  141. package/dist/lib/types/core.generated.js +1 -1
  142. package/dist/lib/types/schemas.generated.d.ts +1098 -770
  143. package/dist/lib/types/schemas.generated.d.ts.map +1 -1
  144. package/dist/lib/types/schemas.generated.js +163 -76
  145. package/dist/lib/types/schemas.generated.js.map +1 -1
  146. package/dist/lib/types/tools.generated.d.ts +314 -24
  147. package/dist/lib/types/tools.generated.d.ts.map +1 -1
  148. package/dist/lib/utils/capabilities.d.ts +4 -1
  149. package/dist/lib/utils/capabilities.d.ts.map +1 -1
  150. package/dist/lib/utils/capabilities.js +25 -1
  151. package/dist/lib/utils/capabilities.js.map +1 -1
  152. package/dist/lib/utils/response-schemas.d.ts.map +1 -1
  153. package/dist/lib/utils/response-schemas.js +34 -3
  154. package/dist/lib/utils/response-schemas.js.map +1 -1
  155. package/dist/lib/utils/validate-user-agent.d.ts +8 -0
  156. package/dist/lib/utils/validate-user-agent.d.ts.map +1 -0
  157. package/dist/lib/utils/validate-user-agent.js +15 -0
  158. package/dist/lib/utils/validate-user-agent.js.map +1 -0
  159. package/dist/lib/version.d.ts +9 -3
  160. package/dist/lib/version.d.ts.map +1 -1
  161. package/dist/lib/version.js +10 -4
  162. package/dist/lib/version.js.map +1 -1
  163. package/docs/README.md +42 -0
  164. package/docs/guides/BUILD-AN-AGENT.md +292 -0
  165. package/docs/llms.txt +634 -0
  166. package/examples/README.md +106 -0
  167. package/examples/adcp.config.json +30 -0
  168. package/examples/basic-a2a.ts +76 -0
  169. package/examples/basic-mcp.ts +50 -0
  170. package/examples/batch-preview-test.ts +266 -0
  171. package/examples/conversation-client.ts +291 -0
  172. package/examples/debug-preview-response.ts +73 -0
  173. package/examples/debug-preview-with-logging.ts +50 -0
  174. package/examples/easy-config-demo.ts +242 -0
  175. package/examples/env-config.ts +51 -0
  176. package/examples/error-compliant-server.ts +237 -0
  177. package/examples/generative-creative-demo.ts +205 -0
  178. package/examples/inspect-card-formats.ts +161 -0
  179. package/examples/logger-usage.ts +165 -0
  180. package/examples/oauth-cli-example.ts +154 -0
  181. package/examples/pr78-async-patterns-demo.ts +247 -0
  182. package/examples/signals-agent.ts +162 -0
  183. package/examples/simple-getting-started.ts +225 -0
  184. package/examples/simple-protocol-demo.ts +75 -0
  185. package/examples/test-helpers-demo.ts +239 -0
  186. package/examples/zod-validation-example.ts +126 -0
  187. package/package.json +12 -2
  188. package/skills/adcp/SKILL.md +13 -2
  189. package/storyboards/audience_sync.yaml +199 -0
  190. package/storyboards/behavioral_analysis.yaml +244 -0
  191. package/storyboards/brand_rights.yaml +131 -0
  192. package/storyboards/creative_ad_server.yaml +171 -0
  193. package/storyboards/creative_sales_agent.yaml +169 -0
  194. package/storyboards/creative_template.yaml +306 -0
  195. package/storyboards/deterministic_testing.yaml +925 -0
  196. package/storyboards/error_compliance.yaml +231 -0
  197. package/storyboards/governance_content_standards.yaml +213 -0
  198. package/storyboards/governance_property_lists.yaml +372 -0
  199. package/storyboards/media_buy_catalog_creative.yaml +457 -0
  200. package/storyboards/media_buy_governance_escalation.yaml +467 -0
  201. package/storyboards/media_buy_guaranteed_approval.yaml +396 -0
  202. package/storyboards/media_buy_non_guaranteed.yaml +288 -0
  203. package/storyboards/media_buy_proposal_mode.yaml +369 -0
  204. package/storyboards/media_buy_seller.yaml +560 -0
  205. package/storyboards/media_buy_state_machine.yaml +254 -0
  206. package/storyboards/schema.yaml +65 -0
  207. package/storyboards/schema_validation.yaml +166 -0
  208. package/storyboards/si_session.yaml +384 -0
  209. package/storyboards/signal_marketplace.yaml +283 -0
  210. package/storyboards/signal_owned.yaml +211 -0
@@ -0,0 +1,121 @@
1
+ "use strict";
2
+ /**
3
+ * Shared JSON path utilities for storyboard context and validations.
4
+ *
5
+ * Parses dot-notation paths with array indexing (e.g., "accounts[0].account_id")
6
+ * into segment arrays, and resolves/sets values at those paths.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.parsePath = parsePath;
10
+ exports.resolvePath = resolvePath;
11
+ exports.setPath = setPath;
12
+ /**
13
+ * Parse a path string into segments.
14
+ * "accounts[0].account_id" → ["accounts", 0, "account_id"]
15
+ */
16
+ function parsePath(path) {
17
+ const segments = [];
18
+ const re = /([^.\[\]]+)|\[(\d+)\]/g;
19
+ let match;
20
+ while ((match = re.exec(path)) !== null) {
21
+ if (match[2] !== undefined) {
22
+ segments.push(parseInt(match[2], 10));
23
+ }
24
+ else if (match[1] !== undefined) {
25
+ segments.push(match[1]);
26
+ }
27
+ }
28
+ return segments;
29
+ }
30
+ /**
31
+ * Resolve a dot-path with array indexing against an object.
32
+ *
33
+ * Examples:
34
+ * "accounts[0].account_id" → obj.accounts[0].account_id
35
+ * "formats[0].format_id.id" → obj.formats[0].format_id.id
36
+ * "status" → obj.status
37
+ */
38
+ function resolvePath(obj, path) {
39
+ if (obj === null || obj === undefined)
40
+ return undefined;
41
+ const segments = parsePath(path);
42
+ let current = obj;
43
+ for (const segment of segments) {
44
+ if (current === null || current === undefined)
45
+ return undefined;
46
+ if (typeof segment === 'number') {
47
+ if (!Array.isArray(current))
48
+ return undefined;
49
+ current = current[segment];
50
+ }
51
+ else {
52
+ if (typeof current !== 'object')
53
+ return undefined;
54
+ current = current[segment];
55
+ }
56
+ }
57
+ return current;
58
+ }
59
+ const FORBIDDEN_KEYS = new Set(['__proto__', 'constructor', 'prototype']);
60
+ function isPlainObject(value) {
61
+ return value !== null && typeof value === 'object' && !Array.isArray(value);
62
+ }
63
+ /**
64
+ * Set a value at a dot-path with array indexing.
65
+ * Creates intermediate objects/arrays as needed.
66
+ * Guards against prototype pollution.
67
+ *
68
+ * "media_buy_ids[0]" → obj.media_buy_ids[0] = value
69
+ */
70
+ function setPath(obj, path, value) {
71
+ const segments = parsePath(path);
72
+ let current = obj;
73
+ for (let i = 0; i < segments.length - 1; i++) {
74
+ const segment = segments[i];
75
+ const nextSegment = segments[i + 1];
76
+ if (typeof segment === 'number') {
77
+ if (!Array.isArray(current))
78
+ return;
79
+ if (current[segment] === undefined || current[segment] === null) {
80
+ current[segment] = typeof nextSegment === 'number' ? [] : {};
81
+ }
82
+ current = current[segment];
83
+ }
84
+ else {
85
+ if (FORBIDDEN_KEYS.has(segment))
86
+ return;
87
+ if (!isPlainObject(current))
88
+ return;
89
+ if (!Object.prototype.hasOwnProperty.call(current, segment) || current[segment] == null) {
90
+ Object.defineProperty(current, segment, {
91
+ value: typeof nextSegment === 'number' ? [] : {},
92
+ writable: true,
93
+ enumerable: true,
94
+ configurable: true,
95
+ });
96
+ }
97
+ current = current[segment];
98
+ }
99
+ }
100
+ const lastSegment = segments[segments.length - 1];
101
+ if (lastSegment === undefined)
102
+ return;
103
+ if (typeof lastSegment === 'number') {
104
+ if (Array.isArray(current)) {
105
+ current[lastSegment] = value;
106
+ }
107
+ }
108
+ else {
109
+ if (FORBIDDEN_KEYS.has(lastSegment))
110
+ return;
111
+ if (!isPlainObject(current))
112
+ return;
113
+ Object.defineProperty(current, lastSegment, {
114
+ value,
115
+ writable: true,
116
+ enumerable: true,
117
+ configurable: true,
118
+ });
119
+ }
120
+ }
121
+ //# sourceMappingURL=path.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"path.js","sourceRoot":"","sources":["../../../../src/lib/testing/storyboard/path.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Request builder for storyboard steps.
3
+ *
4
+ * Builds valid requests from discovered context rather than using
5
+ * raw sample_request YAML payloads. Each task has a builder that
6
+ * constructs a minimal valid request from the accumulated context
7
+ * (discovered products, accounts, formats, etc.) and TestOptions.
8
+ *
9
+ * sample_request from YAML is used only as documentation and as a
10
+ * fallback when no builder exists for a task.
11
+ */
12
+ import type { TestOptions } from '../types';
13
+ import type { StoryboardContext, StoryboardStep } from './types';
14
+ /**
15
+ * Build a request for a storyboard step.
16
+ *
17
+ * Priority:
18
+ * 1. User-provided --request override (from StoryboardRunOptions)
19
+ * 2. Request builder for the task (builds from context + options)
20
+ * 3. sample_request from YAML with context injection (fallback)
21
+ * 4. Empty object
22
+ */
23
+ export declare function buildRequest(step: StoryboardStep, context: StoryboardContext, options: TestOptions): Record<string, unknown>;
24
+ /**
25
+ * Check if a request builder exists for a task.
26
+ */
27
+ export declare function hasRequestBuilder(taskName: string): boolean;
28
+ //# sourceMappingURL=request-builder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"request-builder.d.ts","sourceRoot":"","sources":["../../../../src/lib/testing/storyboard/request-builder.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,KAAK,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAoYjE;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAC1B,IAAI,EAAE,cAAc,EACpB,OAAO,EAAE,iBAAiB,EAC1B,OAAO,EAAE,WAAW,GACnB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAQzB;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAE3D"}
@@ -0,0 +1,410 @@
1
+ "use strict";
2
+ /**
3
+ * Request builder for storyboard steps.
4
+ *
5
+ * Builds valid requests from discovered context rather than using
6
+ * raw sample_request YAML payloads. Each task has a builder that
7
+ * constructs a minimal valid request from the accumulated context
8
+ * (discovered products, accounts, formats, etc.) and TestOptions.
9
+ *
10
+ * sample_request from YAML is used only as documentation and as a
11
+ * fallback when no builder exists for a task.
12
+ */
13
+ Object.defineProperty(exports, "__esModule", { value: true });
14
+ exports.buildRequest = buildRequest;
15
+ exports.hasRequestBuilder = hasRequestBuilder;
16
+ const client_1 = require("../client");
17
+ const REQUEST_BUILDERS = {
18
+ // ── Account & Audience ─────────────────────────────────
19
+ sync_accounts(_step, _context, options) {
20
+ return {
21
+ accounts: [
22
+ {
23
+ brand: (0, client_1.resolveBrand)(options),
24
+ operator: (0, client_1.resolveBrand)(options).domain,
25
+ billing: 'operator',
26
+ payment_terms: 'net_30',
27
+ },
28
+ ],
29
+ };
30
+ },
31
+ list_accounts(_step, _context, options) {
32
+ return {
33
+ brand: (0, client_1.resolveBrand)(options),
34
+ };
35
+ },
36
+ sync_audiences(_step, context, options) {
37
+ return {
38
+ account: context.account ?? (0, client_1.resolveAccount)(options),
39
+ audiences: [
40
+ {
41
+ audience_id: `test-audience-${Date.now()}`,
42
+ name: 'E2E Test Audience',
43
+ identifiers: [
44
+ {
45
+ type: 'hashed_email',
46
+ value: 'e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855',
47
+ },
48
+ ],
49
+ },
50
+ ],
51
+ };
52
+ },
53
+ // ── Product Discovery ──────────────────────────────────
54
+ get_products(step, context, options) {
55
+ // If the step is a "refine" step, build a refine request
56
+ if (step.sample_request?.buying_mode === 'refine' && context.products) {
57
+ return {
58
+ buying_mode: 'refine',
59
+ refine: [
60
+ {
61
+ scope: 'request',
62
+ ask: 'Only guaranteed packages with premium placement.',
63
+ },
64
+ ],
65
+ brand: (0, client_1.resolveBrand)(options),
66
+ account: context.account ?? (0, client_1.resolveAccount)(options),
67
+ };
68
+ }
69
+ return {
70
+ buying_mode: 'brief',
71
+ brief: options.brief || 'Show me all available advertising products across all channels',
72
+ brand: (0, client_1.resolveBrand)(options),
73
+ };
74
+ },
75
+ // ── Media Buy ──────────────────────────────────────────
76
+ create_media_buy(_step, context, options) {
77
+ const product = selectProduct(context);
78
+ const pricingOption = selectPricingOption(product);
79
+ const now = Date.now();
80
+ const startTime = new Date(now + 24 * 60 * 60 * 1000).toISOString();
81
+ const endTime = new Date(now + 8 * 24 * 60 * 60 * 1000).toISOString();
82
+ const pkg = {
83
+ product_id: product?.product_id ?? context.product_id ?? 'test-product',
84
+ budget: options.budget ?? Math.max(1000, pricingOption?.min_spend_per_package ?? 1000),
85
+ };
86
+ if (pricingOption?.pricing_option_id) {
87
+ pkg.pricing_option_id = pricingOption.pricing_option_id;
88
+ }
89
+ // Add bid_price for auction-based pricing
90
+ if (pricingOption?.pricing_model === 'auction' || pricingOption?.pricing_model === 'cpm') {
91
+ const floor = pricingOption?.floor_price ?? 5;
92
+ pkg.bid_price = Math.round(floor * 1.5 * 100) / 100;
93
+ }
94
+ return {
95
+ account: context.account ?? (0, client_1.resolveAccount)(options),
96
+ brand: (0, client_1.resolveBrand)(options),
97
+ start_time: startTime,
98
+ end_time: endTime,
99
+ packages: [pkg],
100
+ };
101
+ },
102
+ update_media_buy(step, context, _options) {
103
+ const request = {
104
+ media_buy_id: context.media_buy_id ?? 'unknown',
105
+ };
106
+ // Detect the intent from sample_request or step ID
107
+ if (step.sample_request?.action) {
108
+ request.action = step.sample_request.action;
109
+ }
110
+ else if (step.id.includes('pause')) {
111
+ request.action = 'pause';
112
+ }
113
+ else if (step.id.includes('resume')) {
114
+ request.action = 'resume';
115
+ }
116
+ else if (step.id.includes('cancel')) {
117
+ request.action = 'cancel';
118
+ }
119
+ else {
120
+ // Default: update budget
121
+ request.packages = [
122
+ {
123
+ package_id: context.package_id,
124
+ budget: 2000,
125
+ },
126
+ ];
127
+ }
128
+ return request;
129
+ },
130
+ get_media_buys(_step, context, _options) {
131
+ return {
132
+ media_buy_ids: [context.media_buy_id ?? 'unknown'],
133
+ };
134
+ },
135
+ get_media_buy_delivery(_step, context, _options) {
136
+ return {
137
+ media_buy_ids: [context.media_buy_id ?? 'unknown'],
138
+ };
139
+ },
140
+ provide_performance_feedback(_step, context, _options) {
141
+ return {
142
+ media_buy_id: context.media_buy_id ?? 'unknown',
143
+ feedback: {
144
+ satisfaction: 'positive',
145
+ notes: 'E2E test feedback',
146
+ },
147
+ };
148
+ },
149
+ // ── Creative ───────────────────────────────────────────
150
+ list_creative_formats() {
151
+ return {};
152
+ },
153
+ build_creative(_step, context, options) {
154
+ const format = selectFormat(context);
155
+ return {
156
+ target_format_id: format?.format_id ?? context.format_id ?? { agent_url: 'unknown', id: 'unknown' },
157
+ brand: (0, client_1.resolveBrand)(options),
158
+ message: 'Create a test advertisement for an e-commerce brand promoting a summer sale.',
159
+ quality: 'draft',
160
+ include_preview: true,
161
+ };
162
+ },
163
+ preview_creative(_step, context, _options) {
164
+ const format = selectFormat(context);
165
+ return {
166
+ request_type: 'single',
167
+ creative_manifest: {
168
+ format_id: format?.format_id ?? context.format_id ?? { agent_url: 'unknown', id: 'unknown' },
169
+ name: 'E2E Test Creative',
170
+ assets: {},
171
+ },
172
+ };
173
+ },
174
+ sync_creatives(_step, context, options) {
175
+ const format = selectFormat(context);
176
+ const formatId = format?.format_id ?? context.format_id ?? { agent_url: 'unknown', id: 'unknown' };
177
+ // Build assets as a record (not array) — keyed by asset role
178
+ const assets = {
179
+ primary: {
180
+ url: 'https://test-assets.adcontextprotocol.org/acme-outdoor/hero-master.jpg',
181
+ width: 1200,
182
+ height: 628,
183
+ format: 'image/jpeg',
184
+ },
185
+ };
186
+ return {
187
+ account: context.account ?? (0, client_1.resolveAccount)(options),
188
+ creatives: [
189
+ {
190
+ creative_id: `test-creative-${Date.now()}`,
191
+ name: 'E2E Test Creative',
192
+ format_id: formatId,
193
+ assets,
194
+ },
195
+ ],
196
+ };
197
+ },
198
+ list_creatives(_step, context, options) {
199
+ return {
200
+ account: context.account ?? (0, client_1.resolveAccount)(options),
201
+ };
202
+ },
203
+ // ── Signals ────────────────────────────────────────────
204
+ get_signals(_step, _context, options) {
205
+ return {
206
+ signal_spec: options.brief || 'Show me all available audience signals and segments',
207
+ };
208
+ },
209
+ activate_signal(_step, context, _options) {
210
+ const signal = selectSignal(context);
211
+ return {
212
+ signal_agent_segment_id: signal?.signal_agent_segment_id ?? context.signal_id ?? 'test-signal',
213
+ destinations: [
214
+ { type: 'platform', platform: 'dv360', account: 'test-dv360-account' },
215
+ { type: 'platform', platform: 'trade-desk', account: 'test-ttd-account' },
216
+ ],
217
+ };
218
+ },
219
+ // ── Capabilities ───────────────────────────────────────
220
+ get_adcp_capabilities() {
221
+ return {};
222
+ },
223
+ // ── Governance ─────────────────────────────────────────
224
+ sync_governance(_step, context, options) {
225
+ return {
226
+ accounts: [
227
+ {
228
+ account: context.account ?? (0, client_1.resolveAccount)(options),
229
+ governance_agents: [
230
+ {
231
+ url: 'https://governance.test.example.com',
232
+ authentication: {
233
+ schemes: ['Bearer'],
234
+ credentials: 'test-governance-token',
235
+ },
236
+ categories: ['budget_authority', 'brand_policy'],
237
+ },
238
+ ],
239
+ },
240
+ ],
241
+ };
242
+ },
243
+ create_property_list(_step, _context, options) {
244
+ return {
245
+ name: options.property_list_name ?? `E2E Test List ${Date.now()}`,
246
+ description: 'Property list created by storyboard testing',
247
+ base_properties: {
248
+ include: [{ identifier_type: 'domain', identifier_value: 'test.example.com' }],
249
+ },
250
+ filters: {
251
+ garm_categories: { exclude: ['adult', 'arms'] },
252
+ },
253
+ brand_manifest: { name: (0, client_1.resolveBrand)(options).domain, url: `https://${(0, client_1.resolveBrand)(options).domain}` },
254
+ };
255
+ },
256
+ get_property_list(_step, context, _options) {
257
+ return {
258
+ list_id: context.property_list_id ?? 'unknown',
259
+ resolve: true,
260
+ };
261
+ },
262
+ update_property_list(_step, context, _options) {
263
+ return {
264
+ list_id: context.property_list_id ?? 'unknown',
265
+ description: 'Updated by storyboard testing',
266
+ base_properties: {
267
+ include: [
268
+ { identifier_type: 'domain', identifier_value: 'test.example.com' },
269
+ { identifier_type: 'domain', identifier_value: 'updated.example.com' },
270
+ ],
271
+ },
272
+ };
273
+ },
274
+ list_property_lists() {
275
+ return {};
276
+ },
277
+ delete_property_list(_step, context, _options) {
278
+ return {
279
+ list_id: context.property_list_id ?? 'unknown',
280
+ };
281
+ },
282
+ list_content_standards() {
283
+ return {};
284
+ },
285
+ get_content_standards(_step, context, _options) {
286
+ return {
287
+ content_standards_id: context.content_standards_id ?? 'unknown',
288
+ };
289
+ },
290
+ sync_plans(_step, context, options) {
291
+ return {
292
+ account: context.account ?? (0, client_1.resolveAccount)(options),
293
+ plans: [
294
+ {
295
+ plan_id: `test-plan-${Date.now()}`,
296
+ name: 'E2E Test Plan',
297
+ budget: { total: options.budget ?? 10000, currency: 'USD' },
298
+ },
299
+ ],
300
+ };
301
+ },
302
+ // ── Sponsored Intelligence ─────────────────────────────
303
+ si_get_offering(_step, _context, options) {
304
+ return {
305
+ offering_id: options.si_offering_id ?? 'e2e-test-offering',
306
+ context: options.si_context ?? 'E2E testing - checking SI offering availability',
307
+ identity: {
308
+ principal: (0, client_1.resolveAuthPrincipal)(options) ?? 'e2e-test-principal',
309
+ device_id: 'e2e-test-device',
310
+ },
311
+ };
312
+ },
313
+ si_initiate_session(_step, context, options) {
314
+ return {
315
+ offering_id: context.offering_id ?? options.si_offering_id ?? 'e2e-test-offering',
316
+ offering_token: context.offering_token,
317
+ identity: {
318
+ principal: (0, client_1.resolveAuthPrincipal)(options) ?? 'e2e-test-principal',
319
+ device_id: 'e2e-test-device',
320
+ },
321
+ context: options.si_context ?? 'E2E test session',
322
+ placement: 'e2e-test',
323
+ supported_capabilities: {
324
+ modalities: { conversational: true, rich_media: true },
325
+ },
326
+ };
327
+ },
328
+ si_send_message(_step, context, _options) {
329
+ return {
330
+ session_id: context.session_id ?? 'unknown',
331
+ message: 'Tell me more about this product.',
332
+ };
333
+ },
334
+ si_terminate_session(_step, context, _options) {
335
+ return {
336
+ session_id: context.session_id ?? 'unknown',
337
+ };
338
+ },
339
+ // ── Test Controller ────────────────────────────────────
340
+ comply_test_controller(step, context, _options) {
341
+ // The test controller request is highly step-specific.
342
+ // Use sample_request from YAML since it defines the exact scenario/state.
343
+ if (step.sample_request) {
344
+ return { ...step.sample_request };
345
+ }
346
+ return {
347
+ scenario: context.controller_scenario ?? 'list_scenarios',
348
+ };
349
+ },
350
+ };
351
+ /**
352
+ * Build a request for a storyboard step.
353
+ *
354
+ * Priority:
355
+ * 1. User-provided --request override (from StoryboardRunOptions)
356
+ * 2. Request builder for the task (builds from context + options)
357
+ * 3. sample_request from YAML with context injection (fallback)
358
+ * 4. Empty object
359
+ */
360
+ function buildRequest(step, context, options) {
361
+ const builder = REQUEST_BUILDERS[step.task];
362
+ if (builder) {
363
+ return builder(step, context, options);
364
+ }
365
+ // No builder — fall through to sample_request (handled by runner)
366
+ return {};
367
+ }
368
+ /**
369
+ * Check if a request builder exists for a task.
370
+ */
371
+ function hasRequestBuilder(taskName) {
372
+ return taskName in REQUEST_BUILDERS;
373
+ }
374
+ // ────────────────────────────────────────────────────────────
375
+ // Selection helpers: pick the best item from discovered data
376
+ // ────────────────────────────────────────────────────────────
377
+ function selectProduct(context) {
378
+ const products = context.products;
379
+ if (!products?.length)
380
+ return undefined;
381
+ // Prefer products with guaranteed delivery and pricing options
382
+ const withPricing = products.filter(p => {
383
+ const opts = p.pricing_options;
384
+ return opts && opts.length > 0;
385
+ });
386
+ return withPricing[0] ?? products[0];
387
+ }
388
+ function selectPricingOption(product) {
389
+ if (!product)
390
+ return undefined;
391
+ const options = product.pricing_options;
392
+ if (!options?.length)
393
+ return undefined;
394
+ // Prefer fixed pricing (cpm, flat) over auction
395
+ const fixed = options.filter(o => o.pricing_model === 'cpm' || o.pricing_model === 'flat');
396
+ return fixed[0] ?? options[0];
397
+ }
398
+ function selectFormat(context) {
399
+ const formats = context.formats;
400
+ if (!formats?.length)
401
+ return undefined;
402
+ return formats[0];
403
+ }
404
+ function selectSignal(context) {
405
+ const signals = context.signals;
406
+ if (!signals?.length)
407
+ return undefined;
408
+ return signals[0];
409
+ }
410
+ //# sourceMappingURL=request-builder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"request-builder.js","sourceRoot":"","sources":["../../../../src/lib/testing/storyboard/request-builder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Storyboard execution engine.
3
+ *
4
+ * Two entry points:
5
+ * - runStoryboard(): run all phases/steps sequentially
6
+ * - runStoryboardStep(): run a single step (stateless, LLM-friendly)
7
+ */
8
+ import type { Storyboard, StoryboardContext, StoryboardRunOptions, StoryboardResult, StoryboardStepResult, StoryboardStepPreview } from './types';
9
+ /**
10
+ * Run an entire storyboard against an agent.
11
+ */
12
+ export declare function runStoryboard(agentUrl: string, storyboard: Storyboard, options?: StoryboardRunOptions): Promise<StoryboardResult>;
13
+ /**
14
+ * Run a single storyboard step.
15
+ *
16
+ * This is the core primitive for stateless, LLM-friendly execution.
17
+ * Context is passed in and returned, enabling step-by-step orchestration.
18
+ */
19
+ export declare function runStoryboardStep(agentUrl: string, storyboard: Storyboard, stepId: string, options?: StoryboardRunOptions): Promise<StoryboardStepResult>;
20
+ /**
21
+ * Get a preview of the first step in a storyboard (for showing what will happen).
22
+ */
23
+ export declare function getFirstStepPreview(storyboard: Storyboard, context?: StoryboardContext): StoryboardStepPreview | undefined;
24
+ //# sourceMappingURL=runner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../../../src/lib/testing/storyboard/runner.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAQH,OAAO,KAAK,EACV,UAAU,EAEV,iBAAiB,EACjB,oBAAoB,EACpB,gBAAgB,EAEhB,oBAAoB,EACpB,qBAAqB,EAEtB,MAAM,SAAS,CAAC;AAMjB;;GAEG;AACH,wBAAsB,aAAa,CACjC,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,UAAU,EACtB,OAAO,GAAE,oBAAyB,GACjC,OAAO,CAAC,gBAAgB,CAAC,CA8F3B;AAMD;;;;;GAKG;AACH,wBAAsB,iBAAiB,CACrC,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,UAAU,EACtB,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,oBAAyB,GACjC,OAAO,CAAC,oBAAoB,CAAC,CA2B/B;AA4JD;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,UAAU,EAAE,UAAU,EACtB,OAAO,GAAE,iBAAsB,GAC9B,qBAAqB,GAAG,SAAS,CAgBnC"}