@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.
- package/AGENTS.md +278 -0
- package/README.md +96 -61
- package/bin/adcp.js +342 -4
- package/dist/lib/agents/index.generated.d.ts +9 -1
- package/dist/lib/agents/index.generated.d.ts.map +1 -1
- package/dist/lib/agents/index.generated.js +12 -0
- package/dist/lib/agents/index.generated.js.map +1 -1
- package/dist/lib/core/AgentClient.d.ts.map +1 -1
- package/dist/lib/core/SingleAgentClient.d.ts +2 -1
- package/dist/lib/core/SingleAgentClient.d.ts.map +1 -1
- package/dist/lib/core/SingleAgentClient.js +10 -1
- package/dist/lib/core/SingleAgentClient.js.map +1 -1
- package/dist/lib/discovery/property-crawler.d.ts +4 -0
- package/dist/lib/discovery/property-crawler.d.ts.map +1 -1
- package/dist/lib/discovery/property-crawler.js +10 -2
- package/dist/lib/discovery/property-crawler.js.map +1 -1
- package/dist/lib/index.d.ts +4 -4
- package/dist/lib/index.d.ts.map +1 -1
- package/dist/lib/index.js +6 -4
- package/dist/lib/index.js.map +1 -1
- package/dist/lib/protocols/index.d.ts.map +1 -1
- package/dist/lib/protocols/index.js +8 -6
- package/dist/lib/protocols/index.js.map +1 -1
- package/dist/lib/protocols/mcp.d.ts.map +1 -1
- package/dist/lib/protocols/mcp.js +24 -11
- package/dist/lib/protocols/mcp.js.map +1 -1
- package/dist/lib/server/index.d.ts +2 -0
- package/dist/lib/server/index.d.ts.map +1 -1
- package/dist/lib/server/index.js +3 -1
- package/dist/lib/server/index.js.map +1 -1
- package/dist/lib/server/serve.d.ts +45 -0
- package/dist/lib/server/serve.d.ts.map +1 -0
- package/dist/lib/server/serve.js +86 -0
- package/dist/lib/server/serve.js.map +1 -0
- package/dist/lib/testing/client.d.ts.map +1 -1
- package/dist/lib/testing/client.js +1 -0
- package/dist/lib/testing/client.js.map +1 -1
- package/dist/lib/testing/compliance/comply.d.ts.map +1 -1
- package/dist/lib/testing/compliance/comply.js +48 -63
- package/dist/lib/testing/compliance/comply.js.map +1 -1
- package/dist/lib/testing/compliance/storyboard-tracks.d.ts +24 -0
- package/dist/lib/testing/compliance/storyboard-tracks.d.ts.map +1 -0
- package/dist/lib/testing/compliance/storyboard-tracks.js +157 -0
- package/dist/lib/testing/compliance/storyboard-tracks.js.map +1 -0
- package/dist/lib/testing/compliance/types.d.ts +1 -1
- package/dist/lib/testing/compliance/types.d.ts.map +1 -1
- package/dist/lib/testing/index.d.ts +1 -0
- package/dist/lib/testing/index.d.ts.map +1 -1
- package/dist/lib/testing/index.js +23 -1
- package/dist/lib/testing/index.js.map +1 -1
- package/dist/lib/testing/orchestrator.d.ts +8 -0
- package/dist/lib/testing/orchestrator.d.ts.map +1 -1
- package/dist/lib/testing/orchestrator.js +8 -0
- package/dist/lib/testing/orchestrator.js.map +1 -1
- package/dist/lib/testing/storyboard/context.d.ts +34 -0
- package/dist/lib/testing/storyboard/context.d.ts.map +1 -0
- package/dist/lib/testing/storyboard/context.js +257 -0
- package/dist/lib/testing/storyboard/context.js.map +1 -0
- package/dist/lib/testing/storyboard/index.d.ts +15 -0
- package/dist/lib/testing/storyboard/index.d.ts.map +1 -0
- package/dist/lib/testing/storyboard/index.js +48 -0
- package/dist/lib/testing/storyboard/index.js.map +1 -0
- package/dist/lib/testing/storyboard/loader.d.ts +53 -0
- package/dist/lib/testing/storyboard/loader.d.ts.map +1 -0
- package/dist/lib/testing/storyboard/loader.js +114 -0
- package/dist/lib/testing/storyboard/loader.js.map +1 -0
- package/dist/lib/testing/storyboard/path.d.ts +29 -0
- package/dist/lib/testing/storyboard/path.d.ts.map +1 -0
- package/dist/lib/testing/storyboard/path.js +121 -0
- package/dist/lib/testing/storyboard/path.js.map +1 -0
- package/dist/lib/testing/storyboard/request-builder.d.ts +28 -0
- package/dist/lib/testing/storyboard/request-builder.d.ts.map +1 -0
- package/dist/lib/testing/storyboard/request-builder.js +410 -0
- package/dist/lib/testing/storyboard/request-builder.js.map +1 -0
- package/dist/lib/testing/storyboard/runner.d.ts +24 -0
- package/dist/lib/testing/storyboard/runner.d.ts.map +1 -0
- package/dist/lib/testing/storyboard/runner.js +280 -0
- package/dist/lib/testing/storyboard/runner.js.map +1 -0
- package/dist/lib/testing/storyboard/task-map.d.ts +21 -0
- package/dist/lib/testing/storyboard/task-map.d.ts.map +1 -0
- package/dist/lib/testing/storyboard/task-map.js +84 -0
- package/dist/lib/testing/storyboard/task-map.js.map +1 -0
- package/dist/lib/testing/storyboard/types.d.ts +156 -0
- package/dist/lib/testing/storyboard/types.d.ts.map +1 -0
- package/dist/lib/testing/storyboard/types.js +10 -0
- package/dist/lib/testing/storyboard/types.js.map +1 -0
- package/dist/lib/testing/storyboard/validations.d.ts +17 -0
- package/dist/lib/testing/storyboard/validations.d.ts.map +1 -0
- package/dist/lib/testing/storyboard/validations.js +166 -0
- package/dist/lib/testing/storyboard/validations.js.map +1 -0
- package/dist/lib/testing/types.d.ts +2 -0
- package/dist/lib/testing/types.d.ts.map +1 -1
- package/dist/lib/types/core.generated.d.ts +2 -2
- package/dist/lib/types/core.generated.d.ts.map +1 -1
- package/dist/lib/types/core.generated.js +1 -1
- package/dist/lib/types/schemas.generated.d.ts +193 -34
- package/dist/lib/types/schemas.generated.d.ts.map +1 -1
- package/dist/lib/types/schemas.generated.js +87 -5
- package/dist/lib/types/schemas.generated.js.map +1 -1
- package/dist/lib/types/tools.generated.d.ts +280 -3
- package/dist/lib/types/tools.generated.d.ts.map +1 -1
- package/dist/lib/utils/response-schemas.d.ts.map +1 -1
- package/dist/lib/utils/response-schemas.js +34 -3
- package/dist/lib/utils/response-schemas.js.map +1 -1
- package/dist/lib/utils/validate-user-agent.d.ts +8 -0
- package/dist/lib/utils/validate-user-agent.d.ts.map +1 -0
- package/dist/lib/utils/validate-user-agent.js +15 -0
- package/dist/lib/utils/validate-user-agent.js.map +1 -0
- package/dist/lib/version.d.ts +6 -0
- package/dist/lib/version.d.ts.map +1 -1
- package/dist/lib/version.js +7 -1
- package/dist/lib/version.js.map +1 -1
- package/docs/README.md +42 -0
- package/docs/guides/BUILD-AN-AGENT.md +292 -0
- package/docs/llms.txt +634 -0
- package/examples/README.md +106 -0
- package/examples/adcp.config.json +30 -0
- package/examples/basic-a2a.ts +76 -0
- package/examples/basic-mcp.ts +50 -0
- package/examples/batch-preview-test.ts +266 -0
- package/examples/conversation-client.ts +291 -0
- package/examples/debug-preview-response.ts +73 -0
- package/examples/debug-preview-with-logging.ts +50 -0
- package/examples/easy-config-demo.ts +242 -0
- package/examples/env-config.ts +51 -0
- package/examples/error-compliant-server.ts +237 -0
- package/examples/generative-creative-demo.ts +205 -0
- package/examples/inspect-card-formats.ts +161 -0
- package/examples/logger-usage.ts +165 -0
- package/examples/oauth-cli-example.ts +154 -0
- package/examples/pr78-async-patterns-demo.ts +247 -0
- package/examples/signals-agent.ts +162 -0
- package/examples/simple-getting-started.ts +225 -0
- package/examples/simple-protocol-demo.ts +75 -0
- package/examples/test-helpers-demo.ts +239 -0
- package/examples/zod-validation-example.ts +126 -0
- package/package.json +12 -2
- package/skills/adcp/SKILL.md +13 -2
- package/storyboards/audience_sync.yaml +199 -0
- package/storyboards/behavioral_analysis.yaml +244 -0
- package/storyboards/brand_rights.yaml +131 -0
- package/storyboards/creative_ad_server.yaml +171 -0
- package/storyboards/creative_sales_agent.yaml +169 -0
- package/storyboards/creative_template.yaml +306 -0
- package/storyboards/deterministic_testing.yaml +925 -0
- package/storyboards/error_compliance.yaml +231 -0
- package/storyboards/governance_content_standards.yaml +213 -0
- package/storyboards/governance_property_lists.yaml +372 -0
- package/storyboards/media_buy_catalog_creative.yaml +457 -0
- package/storyboards/media_buy_governance_escalation.yaml +467 -0
- package/storyboards/media_buy_guaranteed_approval.yaml +396 -0
- package/storyboards/media_buy_non_guaranteed.yaml +288 -0
- package/storyboards/media_buy_proposal_mode.yaml +369 -0
- package/storyboards/media_buy_seller.yaml +560 -0
- package/storyboards/media_buy_state_machine.yaml +254 -0
- package/storyboards/schema.yaml +65 -0
- package/storyboards/schema_validation.yaml +166 -0
- package/storyboards/si_session.yaml +384 -0
- package/storyboards/signal_marketplace.yaml +283 -0
- 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"}
|