@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,280 @@
1
+ "use strict";
2
+ /**
3
+ * Storyboard execution engine.
4
+ *
5
+ * Two entry points:
6
+ * - runStoryboard(): run all phases/steps sequentially
7
+ * - runStoryboardStep(): run a single step (stateless, LLM-friendly)
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.runStoryboard = runStoryboard;
11
+ exports.runStoryboardStep = runStoryboardStep;
12
+ exports.getFirstStepPreview = getFirstStepPreview;
13
+ const client_1 = require("../client");
14
+ const mcp_1 = require("../../protocols/mcp");
15
+ const task_map_1 = require("./task-map");
16
+ const context_1 = require("./context");
17
+ const validations_1 = require("./validations");
18
+ const request_builder_1 = require("./request-builder");
19
+ // ────────────────────────────────────────────────────────────
20
+ // runStoryboard: execute all phases/steps
21
+ // ────────────────────────────────────────────────────────────
22
+ /**
23
+ * Run an entire storyboard against an agent.
24
+ */
25
+ async function runStoryboard(agentUrl, storyboard, options = {}) {
26
+ const start = Date.now();
27
+ const client = (0, client_1.getOrCreateClient)(agentUrl, options);
28
+ // Initialize MCP session — discovers agent profile, keeps the transport alive.
29
+ // Without this, Streamable HTTP degrades to SSE after a few calls.
30
+ if (!options._client) {
31
+ const { profile } = await (0, client_1.getOrDiscoverProfile)(client, options);
32
+ // Populate agentTools from discovered profile if not already set
33
+ if (!options.agentTools && profile?.tools) {
34
+ options = { ...options, agentTools: profile.tools };
35
+ }
36
+ }
37
+ let context = { ...options.context };
38
+ const phaseResults = [];
39
+ let passedCount = 0;
40
+ let failedCount = 0;
41
+ let skippedCount = 0;
42
+ // Flatten all steps for next-step preview lookups
43
+ const allSteps = flattenSteps(storyboard);
44
+ for (const phase of storyboard.phases) {
45
+ const phaseStart = Date.now();
46
+ const stepResults = [];
47
+ let phasePassed = true;
48
+ let statefulFailed = false;
49
+ for (const step of phase.steps) {
50
+ // Skip remaining steps if a stateful dependency failed
51
+ if (statefulFailed && step.stateful) {
52
+ stepResults.push({
53
+ step_id: step.id,
54
+ phase_id: phase.id,
55
+ title: step.title,
56
+ task: step.task,
57
+ passed: false,
58
+ duration_ms: 0,
59
+ validations: [],
60
+ context,
61
+ error: 'Skipped: prior stateful step failed',
62
+ });
63
+ skippedCount++;
64
+ phasePassed = false;
65
+ continue;
66
+ }
67
+ const result = await executeStep(client, step, phase.id, context, allSteps, options);
68
+ stepResults.push(result);
69
+ if (result.skipped) {
70
+ skippedCount++;
71
+ context = result.context;
72
+ }
73
+ else if (result.passed) {
74
+ context = result.context;
75
+ passedCount++;
76
+ }
77
+ else {
78
+ phasePassed = false;
79
+ failedCount++;
80
+ if (step.stateful)
81
+ statefulFailed = true;
82
+ }
83
+ }
84
+ phaseResults.push({
85
+ phase_id: phase.id,
86
+ phase_title: phase.title,
87
+ passed: phasePassed,
88
+ steps: stepResults,
89
+ duration_ms: Date.now() - phaseStart,
90
+ });
91
+ }
92
+ const result = {
93
+ storyboard_id: storyboard.id,
94
+ storyboard_title: storyboard.title,
95
+ agent_url: agentUrl,
96
+ overall_passed: failedCount === 0 && passedCount > 0,
97
+ phases: phaseResults,
98
+ context,
99
+ total_duration_ms: Date.now() - start,
100
+ passed_count: passedCount,
101
+ failed_count: failedCount,
102
+ skipped_count: skippedCount,
103
+ tested_at: new Date().toISOString(),
104
+ dry_run: options.dry_run !== false,
105
+ };
106
+ // Close MCP connections when the runner created its own client
107
+ if (!options._client) {
108
+ await (0, mcp_1.closeMCPConnections)();
109
+ }
110
+ return result;
111
+ }
112
+ // ────────────────────────────────────────────────────────────
113
+ // runStoryboardStep: execute a single step (stateless)
114
+ // ────────────────────────────────────────────────────────────
115
+ /**
116
+ * Run a single storyboard step.
117
+ *
118
+ * This is the core primitive for stateless, LLM-friendly execution.
119
+ * Context is passed in and returned, enabling step-by-step orchestration.
120
+ */
121
+ async function runStoryboardStep(agentUrl, storyboard, stepId, options = {}) {
122
+ const client = (0, client_1.getOrCreateClient)(agentUrl, options);
123
+ // Initialize MCP session for standalone step execution
124
+ if (!options._client) {
125
+ await (0, client_1.getOrDiscoverProfile)(client, options);
126
+ }
127
+ const context = { ...options.context };
128
+ // Find the step
129
+ const allSteps = flattenSteps(storyboard);
130
+ const found = allSteps.find(s => s.step.id === stepId);
131
+ if (!found) {
132
+ throw new Error(`Step "${stepId}" not found in storyboard "${storyboard.id}". ` +
133
+ `Available steps: ${allSteps.map(s => s.step.id).join(', ')}`);
134
+ }
135
+ const result = await executeStep(client, found.step, found.phaseId, context, allSteps, options);
136
+ if (!options._client) {
137
+ await (0, mcp_1.closeMCPConnections)();
138
+ }
139
+ return result;
140
+ }
141
+ // ────────────────────────────────────────────────────────────
142
+ // Internal: execute a single step
143
+ // ────────────────────────────────────────────────────────────
144
+ async function executeStep(
145
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any -- client type varies (TestClient)
146
+ client, step, phaseId, context, allSteps, options) {
147
+ // Check requires_tool — skip if agent doesn't have it
148
+ if (step.requires_tool && options.agentTools && !options.agentTools.includes(step.requires_tool)) {
149
+ const next = getNextStepPreview(step.id, allSteps, context);
150
+ return {
151
+ step_id: step.id,
152
+ phase_id: phaseId,
153
+ title: step.title,
154
+ task: step.task,
155
+ passed: true,
156
+ skipped: true,
157
+ duration_ms: 0,
158
+ validations: [],
159
+ context,
160
+ next,
161
+ };
162
+ }
163
+ // Build request — priority:
164
+ // 1. User-provided --request override
165
+ // 2. Request builder (builds from context + options, like hand-written scenarios)
166
+ // 3. sample_request from YAML with context injection (fallback)
167
+ let request;
168
+ if (options.request) {
169
+ request = { ...options.request };
170
+ }
171
+ else if ((0, request_builder_1.hasRequestBuilder)(step.task)) {
172
+ request = (0, request_builder_1.buildRequest)(step, context, options);
173
+ }
174
+ else if (step.sample_request) {
175
+ request = (0, context_1.injectContext)({ ...step.sample_request }, context);
176
+ }
177
+ else {
178
+ request = {};
179
+ }
180
+ // Apply explicit context_inputs on top of whatever request source was used
181
+ if (step.context_inputs?.length) {
182
+ request = (0, context_1.applyContextInputs)(request, step.context_inputs, context);
183
+ }
184
+ // Execute the task
185
+ const { result: taskResult, step: stepResult } = await (0, client_1.runStep)(step.title, step.task, () => (0, task_map_1.executeStoryboardTask)(client, step.task, request));
186
+ // Determine pass/fail — inverted when expect_error is set
187
+ let passed;
188
+ if (step.expect_error) {
189
+ // Step passes when the task fails (returns an error)
190
+ passed = !taskResult?.success || !!stepResult.error;
191
+ }
192
+ else {
193
+ passed = stepResult.passed && (taskResult?.success ?? false);
194
+ }
195
+ // Run validations
196
+ let validations = [];
197
+ if (taskResult && step.validations?.length) {
198
+ validations = (0, validations_1.runValidations)(step.validations, step.task, taskResult);
199
+ }
200
+ const allValidationsPassed = validations.every(v => v.passed);
201
+ // Extract context from responses
202
+ const updatedContext = { ...context };
203
+ const hasData = taskResult?.data !== undefined && taskResult?.data !== null;
204
+ // Convention-based extraction (for non-error steps, or when expect_error succeeded)
205
+ if (passed && hasData) {
206
+ const extracted = (0, context_1.extractContext)(step.task, taskResult.data);
207
+ Object.assign(updatedContext, extracted);
208
+ }
209
+ // Explicit context_outputs (always applied when data exists)
210
+ if (hasData && step.context_outputs?.length) {
211
+ const explicit = (0, context_1.applyContextOutputs)(taskResult.data, step.context_outputs);
212
+ Object.assign(updatedContext, explicit);
213
+ }
214
+ // Build next step preview
215
+ const next = getNextStepPreview(step.id, allSteps, updatedContext);
216
+ return {
217
+ step_id: step.id,
218
+ phase_id: phaseId,
219
+ title: step.title,
220
+ task: step.task,
221
+ passed: passed && allValidationsPassed,
222
+ expect_error: step.expect_error,
223
+ duration_ms: stepResult.duration_ms,
224
+ response: taskResult?.data,
225
+ validations,
226
+ context: updatedContext,
227
+ error: step.expect_error ? undefined : stepResult.error || taskResult?.error || undefined,
228
+ next,
229
+ };
230
+ }
231
+ function flattenSteps(storyboard) {
232
+ const result = [];
233
+ let index = 0;
234
+ for (const phase of storyboard.phases) {
235
+ for (const step of phase.steps) {
236
+ result.push({ step, phaseId: phase.id, globalIndex: index++ });
237
+ }
238
+ }
239
+ return result;
240
+ }
241
+ function getNextStepPreview(currentStepId, allSteps, context) {
242
+ const currentIdx = allSteps.findIndex(s => s.step.id === currentStepId);
243
+ if (currentIdx === -1 || currentIdx >= allSteps.length - 1)
244
+ return undefined;
245
+ const nextFlat = allSteps[currentIdx + 1];
246
+ if (!nextFlat)
247
+ return undefined;
248
+ const nextStep = nextFlat.step;
249
+ // Inject context into the next step's sample_request for preview
250
+ const previewRequest = nextStep.sample_request ? (0, context_1.injectContext)({ ...nextStep.sample_request }, context) : undefined;
251
+ return {
252
+ step_id: nextStep.id,
253
+ phase_id: nextFlat.phaseId,
254
+ title: nextStep.title,
255
+ task: nextStep.task,
256
+ narrative: nextStep.narrative,
257
+ expected: nextStep.expected,
258
+ sample_request: previewRequest,
259
+ };
260
+ }
261
+ /**
262
+ * Get a preview of the first step in a storyboard (for showing what will happen).
263
+ */
264
+ function getFirstStepPreview(storyboard, context = {}) {
265
+ const firstPhase = storyboard.phases[0];
266
+ if (!firstPhase?.steps[0])
267
+ return undefined;
268
+ const step = firstPhase.steps[0];
269
+ const previewRequest = step.sample_request ? (0, context_1.injectContext)({ ...step.sample_request }, context) : undefined;
270
+ return {
271
+ step_id: step.id,
272
+ phase_id: firstPhase.id,
273
+ title: step.title,
274
+ task: step.task,
275
+ narrative: step.narrative,
276
+ expected: step.expected,
277
+ sample_request: previewRequest,
278
+ };
279
+ }
280
+ //# sourceMappingURL=runner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runner.js","sourceRoot":"","sources":["../../../../src/lib/testing/storyboard/runner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Maps AdCP task names (from storyboard YAML) to SingleAgentClient method names.
3
+ *
4
+ * Each storyboard step has a `task` field like "sync_accounts" or "get_products".
5
+ * This map resolves those to the camelCase method on SingleAgentClient.
6
+ *
7
+ * Tasks without a dedicated method fall through to `executeTask()`.
8
+ */
9
+ import type { TaskResult } from '../types';
10
+ /**
11
+ * Map of AdCP task names to SingleAgentClient method names.
12
+ * Only includes tasks that have dedicated typed methods.
13
+ */
14
+ export declare const TASK_TO_METHOD: Record<string, string>;
15
+ /**
16
+ * Execute a storyboard task against a SingleAgentClient.
17
+ *
18
+ * Uses the typed method if one exists, otherwise falls back to executeTask().
19
+ */
20
+ export declare function executeStoryboardTask(client: any, taskName: string, params: Record<string, unknown>): Promise<TaskResult>;
21
+ //# sourceMappingURL=task-map.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-map.d.ts","sourceRoot":"","sources":["../../../../src/lib/testing/storyboard/task-map.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAE3C;;;GAGG;AACH,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CA8CjD,CAAC;AAEF;;;;GAIG;AACH,wBAAsB,qBAAqB,CAEzC,MAAM,EAAE,GAAG,EACX,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9B,OAAO,CAAC,UAAU,CAAC,CAoBrB"}
@@ -0,0 +1,84 @@
1
+ "use strict";
2
+ /**
3
+ * Maps AdCP task names (from storyboard YAML) to SingleAgentClient method names.
4
+ *
5
+ * Each storyboard step has a `task` field like "sync_accounts" or "get_products".
6
+ * This map resolves those to the camelCase method on SingleAgentClient.
7
+ *
8
+ * Tasks without a dedicated method fall through to `executeTask()`.
9
+ */
10
+ Object.defineProperty(exports, "__esModule", { value: true });
11
+ exports.TASK_TO_METHOD = void 0;
12
+ exports.executeStoryboardTask = executeStoryboardTask;
13
+ /**
14
+ * Map of AdCP task names to SingleAgentClient method names.
15
+ * Only includes tasks that have dedicated typed methods.
16
+ */
17
+ exports.TASK_TO_METHOD = {
18
+ // Account & audience
19
+ sync_accounts: 'syncAccounts',
20
+ list_accounts: 'listAccounts',
21
+ sync_audiences: 'syncAudiences',
22
+ // Product discovery & media buy
23
+ get_products: 'getProducts',
24
+ create_media_buy: 'createMediaBuy',
25
+ update_media_buy: 'updateMediaBuy',
26
+ get_media_buys: 'getMediaBuys',
27
+ get_media_buy_delivery: 'getMediaBuyDelivery',
28
+ provide_performance_feedback: 'providePerformanceFeedback',
29
+ // Creative
30
+ list_creative_formats: 'listCreativeFormats',
31
+ build_creative: 'buildCreative',
32
+ preview_creative: 'previewCreative',
33
+ sync_creatives: 'syncCreatives',
34
+ list_creatives: 'listCreatives',
35
+ // Signals
36
+ get_signals: 'getSignals',
37
+ activate_signal: 'activateSignal',
38
+ // Capabilities
39
+ get_adcp_capabilities: 'getAdcpCapabilities',
40
+ // Governance
41
+ sync_plans: 'syncPlans',
42
+ get_plan_audit_logs: 'getPlanAuditLogs',
43
+ create_property_list: 'createPropertyList',
44
+ get_property_list: 'getPropertyList',
45
+ update_property_list: 'updatePropertyList',
46
+ list_property_lists: 'listPropertyLists',
47
+ delete_property_list: 'deletePropertyList',
48
+ list_content_standards: 'listContentStandards',
49
+ get_content_standards: 'getContentStandards',
50
+ calibrate_content: 'calibrateContent',
51
+ validate_content_delivery: 'validateContentDelivery',
52
+ // Sponsored Intelligence
53
+ si_get_offering: 'siGetOffering',
54
+ si_initiate_session: 'siInitiateSession',
55
+ si_send_message: 'siSendMessage',
56
+ si_terminate_session: 'siTerminateSession',
57
+ };
58
+ /**
59
+ * Execute a storyboard task against a SingleAgentClient.
60
+ *
61
+ * Uses the typed method if one exists, otherwise falls back to executeTask().
62
+ */
63
+ async function executeStoryboardTask(
64
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any -- dynamic dispatch requires any
65
+ client, taskName, params) {
66
+ const methodName = Object.hasOwn(exports.TASK_TO_METHOD, taskName) ? exports.TASK_TO_METHOD[taskName] : undefined;
67
+ if (methodName && typeof client[methodName] === 'function') {
68
+ const result = await client[methodName](params);
69
+ return {
70
+ success: result.success ?? true,
71
+ data: result.data,
72
+ error: result.error,
73
+ };
74
+ }
75
+ // Fall back to generic executeTask for tasks without dedicated methods
76
+ // (e.g., sync_governance, future tasks)
77
+ const result = await client.executeTask(taskName, params);
78
+ return {
79
+ success: result.success ?? true,
80
+ data: result.data,
81
+ error: result.error,
82
+ };
83
+ }
84
+ //# sourceMappingURL=task-map.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-map.js","sourceRoot":"","sources":["../../../../src/lib/testing/storyboard/task-map.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG;;;AA6DH,sDAyBC;AAlFD;;;GAGG;AACU,QAAA,cAAc,GAA2B;IACpD,qBAAqB;IACrB,aAAa,EAAE,cAAc;IAC7B,aAAa,EAAE,cAAc;IAC7B,cAAc,EAAE,eAAe;IAE/B,gCAAgC;IAChC,YAAY,EAAE,aAAa;IAC3B,gBAAgB,EAAE,gBAAgB;IAClC,gBAAgB,EAAE,gBAAgB;IAClC,cAAc,EAAE,cAAc;IAC9B,sBAAsB,EAAE,qBAAqB;IAC7C,4BAA4B,EAAE,4BAA4B;IAE1D,WAAW;IACX,qBAAqB,EAAE,qBAAqB;IAC5C,cAAc,EAAE,eAAe;IAC/B,gBAAgB,EAAE,iBAAiB;IACnC,cAAc,EAAE,eAAe;IAC/B,cAAc,EAAE,eAAe;IAE/B,UAAU;IACV,WAAW,EAAE,YAAY;IACzB,eAAe,EAAE,gBAAgB;IAEjC,eAAe;IACf,qBAAqB,EAAE,qBAAqB;IAE5C,aAAa;IACb,UAAU,EAAE,WAAW;IACvB,mBAAmB,EAAE,kBAAkB;IACvC,oBAAoB,EAAE,oBAAoB;IAC1C,iBAAiB,EAAE,iBAAiB;IACpC,oBAAoB,EAAE,oBAAoB;IAC1C,mBAAmB,EAAE,mBAAmB;IACxC,oBAAoB,EAAE,oBAAoB;IAC1C,sBAAsB,EAAE,sBAAsB;IAC9C,qBAAqB,EAAE,qBAAqB;IAC5C,iBAAiB,EAAE,kBAAkB;IACrC,yBAAyB,EAAE,yBAAyB;IAEpD,yBAAyB;IACzB,eAAe,EAAE,eAAe;IAChC,mBAAmB,EAAE,mBAAmB;IACxC,eAAe,EAAE,eAAe;IAChC,oBAAoB,EAAE,oBAAoB;CAC3C,CAAC;AAEF;;;;GAIG;AACI,KAAK,UAAU,qBAAqB;AACzC,+FAA+F;AAC/F,MAAW,EACX,QAAgB,EAChB,MAA+B;IAE/B,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,sBAAc,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,sBAAc,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAElG,IAAI,UAAU,IAAI,OAAO,MAAM,CAAC,UAAU,CAAC,KAAK,UAAU,EAAE,CAAC;QAC3D,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC;QAChD,OAAO;YACL,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,IAAI;YAC/B,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,KAAK,EAAE,MAAM,CAAC,KAAK;SACpB,CAAC;IACJ,CAAC;IAED,uEAAuE;IACvE,wCAAwC;IACxC,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC1D,OAAO;QACL,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,IAAI;QAC/B,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,KAAK,EAAE,MAAM,CAAC,KAAK;KACpB,CAAC;AACJ,CAAC"}
@@ -0,0 +1,156 @@
1
+ /**
2
+ * Types for storyboard-driven testing.
3
+ *
4
+ * Storyboards are YAML-defined test workflows that walk through
5
+ * AdCP agent interactions step by step. Each step maps to a
6
+ * SingleAgentClient method and includes validations.
7
+ */
8
+ import type { TestOptions } from '../types';
9
+ export interface Storyboard {
10
+ id: string;
11
+ version: string;
12
+ title: string;
13
+ category: string;
14
+ summary: string;
15
+ narrative: string;
16
+ /** Platform types this storyboard applies to (for backwards compat with PlatformType) */
17
+ platform_types?: string[];
18
+ /** Maps to a ComplianceTrack for comply() integration */
19
+ track?: string;
20
+ /** Tools that make this storyboard applicable (at least one must be present) */
21
+ required_tools?: string[];
22
+ agent: {
23
+ interaction_model: string;
24
+ capabilities: string[];
25
+ examples?: string[];
26
+ };
27
+ caller: {
28
+ role: string;
29
+ example?: string;
30
+ };
31
+ prerequisites?: {
32
+ description: string;
33
+ test_kit?: string;
34
+ };
35
+ phases: StoryboardPhase[];
36
+ }
37
+ export interface StoryboardPhase {
38
+ id: string;
39
+ title: string;
40
+ narrative?: string;
41
+ steps: StoryboardStep[];
42
+ }
43
+ export interface ContextOutput {
44
+ /** JSON path to extract from the response */
45
+ path: string;
46
+ /** Key to store the extracted value under in context */
47
+ key: string;
48
+ }
49
+ export interface ContextInput {
50
+ /** Key to look up in context */
51
+ key: string;
52
+ /** JSON path in the request to inject the value at */
53
+ inject_at: string;
54
+ }
55
+ export interface StoryboardStep {
56
+ id: string;
57
+ title: string;
58
+ narrative?: string;
59
+ /** AdCP task name (snake_case), e.g. "sync_accounts", "get_products" */
60
+ task: string;
61
+ schema_ref?: string;
62
+ response_schema_ref?: string;
63
+ doc_ref?: string;
64
+ /** Maps to existing @adcp/client test scenario (legacy, partial coverage) */
65
+ comply_scenario?: string;
66
+ /** Whether this step depends on state from a previous step */
67
+ stateful?: boolean;
68
+ /** When true, the step passes if the task returns an error */
69
+ expect_error?: boolean;
70
+ /** Tool name required for this step to run. Skipped if agent lacks it. */
71
+ requires_tool?: string;
72
+ /** Explicit context extraction rules (supplements convention-based extractors) */
73
+ context_outputs?: ContextOutput[];
74
+ /** Explicit context injection rules (supplements $context.key placeholders) */
75
+ context_inputs?: ContextInput[];
76
+ expected?: string;
77
+ sample_request?: Record<string, unknown>;
78
+ sample_response?: Record<string, unknown>;
79
+ validations?: StoryboardValidation[];
80
+ }
81
+ export interface StoryboardValidation {
82
+ check: 'response_schema' | 'field_present' | 'field_value' | 'status_code' | 'error_code';
83
+ /** JSON path for field checks, e.g. "accounts[0].account_id" */
84
+ path?: string;
85
+ /** Expected value for field_value and error_code checks */
86
+ value?: unknown;
87
+ description: string;
88
+ }
89
+ export type StoryboardContext = Record<string, unknown>;
90
+ export interface StoryboardRunOptions extends TestOptions {
91
+ /** Initial context (e.g., from a previous step invocation) */
92
+ context?: StoryboardContext;
93
+ /** Override the step's sample_request with a custom request */
94
+ request?: Record<string, unknown>;
95
+ /** Agent's available tools (for requires_tool filtering) */
96
+ agentTools?: string[];
97
+ }
98
+ export interface ValidationResult {
99
+ check: string;
100
+ passed: boolean;
101
+ description: string;
102
+ path?: string;
103
+ error?: string;
104
+ }
105
+ export interface StoryboardStepPreview {
106
+ step_id: string;
107
+ phase_id: string;
108
+ title: string;
109
+ task: string;
110
+ narrative?: string;
111
+ expected?: string;
112
+ /** sample_request with context already injected */
113
+ sample_request?: Record<string, unknown>;
114
+ }
115
+ export interface StoryboardStepResult {
116
+ step_id: string;
117
+ phase_id: string;
118
+ title: string;
119
+ task: string;
120
+ passed: boolean;
121
+ /** True when the step was skipped due to requires_tool not being present */
122
+ skipped?: boolean;
123
+ /** True when the step expected an error (inverted pass/fail) */
124
+ expect_error?: boolean;
125
+ duration_ms: number;
126
+ response?: unknown;
127
+ validations: ValidationResult[];
128
+ /** Accumulated context after this step */
129
+ context: StoryboardContext;
130
+ error?: string;
131
+ /** Preview of the next step (for LLM consumption) */
132
+ next?: StoryboardStepPreview;
133
+ }
134
+ export interface StoryboardPhaseResult {
135
+ phase_id: string;
136
+ phase_title: string;
137
+ passed: boolean;
138
+ steps: StoryboardStepResult[];
139
+ duration_ms: number;
140
+ }
141
+ export interface StoryboardResult {
142
+ storyboard_id: string;
143
+ storyboard_title: string;
144
+ agent_url: string;
145
+ overall_passed: boolean;
146
+ phases: StoryboardPhaseResult[];
147
+ /** Final accumulated context */
148
+ context: StoryboardContext;
149
+ total_duration_ms: number;
150
+ passed_count: number;
151
+ failed_count: number;
152
+ skipped_count: number;
153
+ tested_at: string;
154
+ dry_run: boolean;
155
+ }
156
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/lib/testing/storyboard/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ /**
3
+ * Types for storyboard-driven testing.
4
+ *
5
+ * Storyboards are YAML-defined test workflows that walk through
6
+ * AdCP agent interactions step by step. Each step maps to a
7
+ * SingleAgentClient method and includes validations.
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/lib/testing/storyboard/types.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Per-step validation engine for storyboard testing.
3
+ *
4
+ * Supports four validation types defined in storyboard YAML:
5
+ * - response_schema: validate against Zod schemas
6
+ * - field_present: check a JSON path exists and is not null/undefined
7
+ * - field_value: check a JSON path equals an expected value
8
+ * - status_code: check the TaskResult status
9
+ */
10
+ import type { TaskResult } from '../types';
11
+ import type { StoryboardValidation, ValidationResult } from './types';
12
+ /**
13
+ * Run all validations for a storyboard step.
14
+ */
15
+ export declare function runValidations(validations: StoryboardValidation[], taskName: string, taskResult: TaskResult): ValidationResult[];
16
+ export { resolvePath } from './path';
17
+ //# sourceMappingURL=validations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validations.d.ts","sourceRoot":"","sources":["../../../../src/lib/testing/storyboard/validations.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAC3C,OAAO,KAAK,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAGtE;;GAEG;AACH,wBAAgB,cAAc,CAC5B,WAAW,EAAE,oBAAoB,EAAE,EACnC,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,UAAU,GACrB,gBAAgB,EAAE,CAEpB;AA2KD,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC"}