@adcp/sdk 9.0.0-beta.27 → 9.0.0-beta.28
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/dist/lib/core/AgentClient.d.ts.map +1 -1
- package/dist/lib/core/SingleAgentClient.d.ts +9 -0
- package/dist/lib/core/SingleAgentClient.d.ts.map +1 -1
- package/dist/lib/core/SingleAgentClient.js +48 -0
- package/dist/lib/core/SingleAgentClient.js.map +1 -1
- package/dist/lib/errors/index.d.ts +43 -3
- package/dist/lib/errors/index.d.ts.map +1 -1
- package/dist/lib/errors/index.js +49 -4
- package/dist/lib/errors/index.js.map +1 -1
- package/dist/lib/index.d.ts +3 -2
- package/dist/lib/index.d.ts.map +1 -1
- package/dist/lib/index.js +31 -23
- package/dist/lib/index.js.map +1 -1
- package/dist/lib/schemas-data/v2.5/_provenance.json +1 -1
- package/dist/lib/testing/compliance/comply.d.ts.map +1 -1
- package/dist/lib/testing/compliance/comply.js +1 -0
- package/dist/lib/testing/compliance/comply.js.map +1 -1
- package/dist/lib/testing/compliance/types.d.ts +1 -0
- package/dist/lib/testing/compliance/types.d.ts.map +1 -1
- package/dist/lib/testing/storyboard/compliance.d.ts.map +1 -1
- package/dist/lib/testing/storyboard/compliance.js +25 -8
- package/dist/lib/testing/storyboard/compliance.js.map +1 -1
- package/dist/lib/testing/storyboard/default-invariants.js +12 -7
- package/dist/lib/testing/storyboard/default-invariants.js.map +1 -1
- package/dist/lib/testing/storyboard/probes.d.ts +4 -12
- package/dist/lib/testing/storyboard/probes.d.ts.map +1 -1
- package/dist/lib/testing/storyboard/probes.js +216 -153
- package/dist/lib/testing/storyboard/probes.js.map +1 -1
- package/dist/lib/testing/storyboard/runner.d.ts.map +1 -1
- package/dist/lib/testing/storyboard/runner.js +81 -5
- package/dist/lib/testing/storyboard/runner.js.map +1 -1
- package/dist/lib/testing/storyboard/types.d.ts +4 -0
- package/dist/lib/testing/storyboard/types.d.ts.map +1 -1
- package/dist/lib/testing/storyboard/types.js.map +1 -1
- package/dist/lib/testing/storyboard/validations.d.ts.map +1 -1
- package/dist/lib/testing/storyboard/validations.js +11 -5
- package/dist/lib/testing/storyboard/validations.js.map +1 -1
- package/dist/lib/utils/capabilities.d.ts +2 -0
- package/dist/lib/utils/capabilities.d.ts.map +1 -1
- package/dist/lib/utils/capabilities.js +24 -3
- package/dist/lib/utils/capabilities.js.map +1 -1
- package/dist/lib/utils/index.d.ts +1 -1
- package/dist/lib/utils/index.d.ts.map +1 -1
- package/dist/lib/utils/index.js.map +1 -1
- package/dist/lib/utils/preview-utils.d.ts +36 -1
- package/dist/lib/utils/preview-utils.d.ts.map +1 -1
- package/dist/lib/utils/preview-utils.js +53 -16
- package/dist/lib/utils/preview-utils.js.map +1 -1
- package/dist/lib/version.d.ts +3 -3
- package/dist/lib/version.js +3 -3
- package/docs/guides/BUILD-AN-AGENT.md +1 -1
- package/docs/guides/PREVIEW-ASSET-DURABILITY.md +157 -0
- package/package.json +2 -1
- package/skills/build-creative-agent/SKILL.md +2 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAG/C,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,KAAK,QAAQ,EAAE,KAAK,YAAY,EAAE,MAAM,UAAU,CAAC;AAIlF,OAAO,EACL,oBAAoB,EACpB,mBAAmB,EACnB,iBAAiB,EACjB,KAAK,aAAa,EAClB,KAAK,mBAAmB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/utils/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/utils/index.ts"],"names":[],"mappings":";;;;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/utils/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -21,9 +21,44 @@ export interface BatchPreviewOptions {
|
|
|
21
21
|
cacheTtl?: number;
|
|
22
22
|
/** Whether to skip cache and force fresh previews (defaults to false) */
|
|
23
23
|
skipCache?: boolean;
|
|
24
|
+
/**
|
|
25
|
+
* Cache backend for preview results.
|
|
26
|
+
*
|
|
27
|
+
* The default backend is process-local memory. It is safe for tests,
|
|
28
|
+
* local development, and single-process CLIs, but it is not shared
|
|
29
|
+
* across pods and does not survive restarts. Production services that
|
|
30
|
+
* cache preview URLs should provide a shared backend such as Redis or
|
|
31
|
+
* Postgres, and the cached URL itself must still resolve to durable
|
|
32
|
+
* storage rather than process-local assets.
|
|
33
|
+
*/
|
|
34
|
+
cacheBackend?: PreviewCacheBackend;
|
|
24
35
|
}
|
|
25
36
|
/**
|
|
26
|
-
*
|
|
37
|
+
* Cache entry for preview results
|
|
38
|
+
*/
|
|
39
|
+
export interface PreviewCacheEntry {
|
|
40
|
+
previewUrl: string;
|
|
41
|
+
previewId: string;
|
|
42
|
+
timestamp: number;
|
|
43
|
+
/** ISO 8601 timestamp from `preview_creative.expires_at`, when provided. */
|
|
44
|
+
expiresAt?: string;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Pluggable cache backend for preview results.
|
|
48
|
+
*
|
|
49
|
+
* This cache stores references returned by `preview_creative`; it is not
|
|
50
|
+
* an asset store. Preview URLs placed in any cache must already be
|
|
51
|
+
* durable across load-balancer hops, pod restarts, and later refinement
|
|
52
|
+
* calls.
|
|
53
|
+
*/
|
|
54
|
+
export interface PreviewCacheBackend {
|
|
55
|
+
get(cacheKey: string): PreviewCacheEntry | null | undefined | Promise<PreviewCacheEntry | null | undefined>;
|
|
56
|
+
set(cacheKey: string, entry: PreviewCacheEntry): void | Promise<void>;
|
|
57
|
+
delete?(cacheKey: string): void | Promise<void>;
|
|
58
|
+
clear?(): void | Promise<void>;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Clear all previews from the default process-local cache.
|
|
27
62
|
*/
|
|
28
63
|
export declare function clearPreviewCache(): void;
|
|
29
64
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"preview-utils.d.ts","sourceRoot":"","sources":["../../../src/lib/utils/preview-utils.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,KAAK,EAAE,MAAM,EAAE,OAAO,EAA+C,MAAM,0BAA0B,CAAC;AAG7G;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,mDAAmD;IACnD,IAAI,EAAE,OAAO,GAAG,MAAM,CAAC;IACvB,wCAAwC;IACxC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,yCAAyC;IACzC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,sCAAsC;IACtC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,qDAAqD;IACrD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,yEAAyE;IACzE,SAAS,CAAC,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"preview-utils.d.ts","sourceRoot":"","sources":["../../../src/lib/utils/preview-utils.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,KAAK,EAAE,MAAM,EAAE,OAAO,EAA+C,MAAM,0BAA0B,CAAC;AAG7G;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,mDAAmD;IACnD,IAAI,EAAE,OAAO,GAAG,MAAM,CAAC;IACvB,wCAAwC;IACxC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,yCAAyC;IACzC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,sCAAsC;IACtC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,qDAAqD;IACrD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,yEAAyE;IACzE,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;;;;;;;;OASG;IACH,YAAY,CAAC,EAAE,mBAAmB,CAAC;CACpC;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,4EAA4E;IAC5E,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,mBAAmB;IAClC,GAAG,CAAC,QAAQ,EAAE,MAAM,GAAG,iBAAiB,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAAC,iBAAiB,GAAG,IAAI,GAAG,SAAS,CAAC,CAAC;IAC5G,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,iBAAiB,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACtE,MAAM,CAAC,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAChD,KAAK,CAAC,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAChC;AAqFD;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,IAAI,CAExC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AAEH,wBAAsB,oBAAoB,CACxC,QAAQ,EAAE,OAAO,EAAE,EACnB,oBAAoB,EAAE,iBAAiB,EACvC,QAAQ,GAAE,mBAAwB,GACjC,OAAO,CAAC,aAAa,EAAE,CAAC,CAQ1B;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,MAAM,EAAE,EACjB,mBAAmB,EAAE,iBAAiB,EACtC,OAAO,GAAE,mBAAwB,GAChC,OAAO,CAAC,aAAa,EAAE,CAAC,CA2I1B"}
|
|
@@ -5,10 +5,29 @@ exports.clearPreviewCache = clearPreviewCache;
|
|
|
5
5
|
exports.batchPreviewProducts = batchPreviewProducts;
|
|
6
6
|
exports.batchPreviewFormats = batchPreviewFormats;
|
|
7
7
|
/**
|
|
8
|
-
*
|
|
9
|
-
*
|
|
8
|
+
* Process-local in-memory cache for preview results.
|
|
9
|
+
*
|
|
10
|
+
* Development-only default: this map is not multi-pod-safe and does not
|
|
11
|
+
* survive process restarts. It must not be used as the backing store for
|
|
12
|
+
* MCPUI preview assets in production.
|
|
13
|
+
*
|
|
14
|
+
* Key format: `${formatId.agent_url}:${formatId.id}:${manifestHash}`
|
|
10
15
|
*/
|
|
11
16
|
const previewCache = new Map();
|
|
17
|
+
const defaultPreviewCacheBackend = {
|
|
18
|
+
get(cacheKey) {
|
|
19
|
+
return previewCache.get(cacheKey);
|
|
20
|
+
},
|
|
21
|
+
set(cacheKey, entry) {
|
|
22
|
+
previewCache.set(cacheKey, entry);
|
|
23
|
+
},
|
|
24
|
+
delete(cacheKey) {
|
|
25
|
+
previewCache.delete(cacheKey);
|
|
26
|
+
},
|
|
27
|
+
clear() {
|
|
28
|
+
previewCache.clear();
|
|
29
|
+
},
|
|
30
|
+
};
|
|
12
31
|
/**
|
|
13
32
|
* Generate a cache key for a preview request
|
|
14
33
|
*/
|
|
@@ -20,16 +39,22 @@ function getCacheKey(formatId, manifest) {
|
|
|
20
39
|
.toString(36);
|
|
21
40
|
return `${formatId.agent_url}:${formatId.id}:${manifestHash}`;
|
|
22
41
|
}
|
|
42
|
+
function hasExpiredAt(expiresAt, now) {
|
|
43
|
+
if (!expiresAt)
|
|
44
|
+
return false;
|
|
45
|
+
const expiresAtMs = Date.parse(expiresAt);
|
|
46
|
+
return Number.isNaN(expiresAtMs) ? false : expiresAtMs <= now;
|
|
47
|
+
}
|
|
23
48
|
/**
|
|
24
49
|
* Get cached preview if available and not expired
|
|
25
50
|
*/
|
|
26
|
-
function getCachedPreview(cacheKey, ttl) {
|
|
27
|
-
const entry =
|
|
51
|
+
async function getCachedPreview(cacheBackend, cacheKey, ttl) {
|
|
52
|
+
const entry = await cacheBackend.get(cacheKey);
|
|
28
53
|
if (!entry)
|
|
29
54
|
return null;
|
|
30
55
|
const now = Date.now();
|
|
31
|
-
if (now - entry.timestamp > ttl) {
|
|
32
|
-
|
|
56
|
+
if (now - entry.timestamp > ttl || hasExpiredAt(entry.expiresAt, now)) {
|
|
57
|
+
await cacheBackend.delete?.(cacheKey);
|
|
33
58
|
return null;
|
|
34
59
|
}
|
|
35
60
|
return entry;
|
|
@@ -37,18 +62,19 @@ function getCachedPreview(cacheKey, ttl) {
|
|
|
37
62
|
/**
|
|
38
63
|
* Set cached preview
|
|
39
64
|
*/
|
|
40
|
-
function setCachedPreview(cacheKey, previewUrl, previewId) {
|
|
41
|
-
|
|
65
|
+
async function setCachedPreview(cacheBackend, cacheKey, previewUrl, previewId, expiresAt) {
|
|
66
|
+
await cacheBackend.set(cacheKey, {
|
|
42
67
|
previewUrl,
|
|
43
68
|
previewId,
|
|
69
|
+
expiresAt,
|
|
44
70
|
timestamp: Date.now(),
|
|
45
71
|
});
|
|
46
72
|
}
|
|
47
73
|
/**
|
|
48
|
-
* Clear all
|
|
74
|
+
* Clear all previews from the default process-local cache.
|
|
49
75
|
*/
|
|
50
76
|
function clearPreviewCache() {
|
|
51
|
-
|
|
77
|
+
defaultPreviewCacheBackend.clear?.();
|
|
52
78
|
}
|
|
53
79
|
/**
|
|
54
80
|
* Extract preview URLs from products' `product_card` fields.
|
|
@@ -128,22 +154,29 @@ async function batchPreviewProducts(products, _creativeAgentClient, _options = {
|
|
|
128
154
|
async function batchPreviewFormats(formats, creativeAgentClient, options = {}) {
|
|
129
155
|
const cacheTtl = options.cacheTtl ?? 3600000; // 1 hour default
|
|
130
156
|
const skipCache = options.skipCache ?? false;
|
|
157
|
+
const cacheBackend = options.cacheBackend ?? defaultPreviewCacheBackend;
|
|
131
158
|
// Collect all formats that have format_card manifests
|
|
132
159
|
const previewRequests = [];
|
|
133
160
|
const results = [];
|
|
134
|
-
|
|
161
|
+
for (const format of formats) {
|
|
135
162
|
if (format.format_card) {
|
|
136
163
|
const cacheKey = getCacheKey(format.format_card.format_id, format.format_card.manifest);
|
|
137
164
|
// Check cache first
|
|
138
165
|
if (!skipCache) {
|
|
139
|
-
|
|
166
|
+
let cached = null;
|
|
167
|
+
try {
|
|
168
|
+
cached = await getCachedPreview(cacheBackend, cacheKey, cacheTtl);
|
|
169
|
+
}
|
|
170
|
+
catch {
|
|
171
|
+
cached = null;
|
|
172
|
+
}
|
|
140
173
|
if (cached) {
|
|
141
174
|
results.push({
|
|
142
175
|
item: format,
|
|
143
176
|
previewUrl: cached.previewUrl,
|
|
144
177
|
previewId: cached.previewId,
|
|
145
178
|
});
|
|
146
|
-
|
|
179
|
+
continue;
|
|
147
180
|
}
|
|
148
181
|
}
|
|
149
182
|
previewRequests.push({
|
|
@@ -160,7 +193,7 @@ async function batchPreviewFormats(formats, creativeAgentClient, options = {}) {
|
|
|
160
193
|
item: format,
|
|
161
194
|
});
|
|
162
195
|
}
|
|
163
|
-
}
|
|
196
|
+
}
|
|
164
197
|
// If all were cached or none have format_card, return early
|
|
165
198
|
if (previewRequests.length === 0) {
|
|
166
199
|
return results;
|
|
@@ -202,13 +235,17 @@ async function batchPreviewFormats(formats, creativeAgentClient, options = {}) {
|
|
|
202
235
|
const previewUrl = render.output_format === 'url' || render.output_format === 'both' ? render.preview_url : undefined;
|
|
203
236
|
const previewId = preview.preview_id;
|
|
204
237
|
if (previewUrl) {
|
|
205
|
-
// Cache the result
|
|
206
|
-
setCachedPreview(req.cacheKey, previewUrl, previewId);
|
|
207
238
|
results.push({
|
|
208
239
|
item: req.format,
|
|
209
240
|
previewUrl,
|
|
210
241
|
previewId,
|
|
211
242
|
});
|
|
243
|
+
try {
|
|
244
|
+
await setCachedPreview(cacheBackend, req.cacheKey, previewUrl, previewId, responseData.expires_at);
|
|
245
|
+
}
|
|
246
|
+
catch {
|
|
247
|
+
// Preview cache is an accelerator; successful previews should still return on cache write failures.
|
|
248
|
+
}
|
|
212
249
|
}
|
|
213
250
|
else {
|
|
214
251
|
results.push({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"preview-utils.js","sourceRoot":"","sources":["../../../src/lib/utils/preview-utils.ts"],"names":[],"mappings":";AAAA,2EAA2E;;
|
|
1
|
+
{"version":3,"file":"preview-utils.js","sourceRoot":"","sources":["../../../src/lib/utils/preview-utils.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/version.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* AdCP SDK library version
|
|
3
3
|
*/
|
|
4
|
-
export declare const LIBRARY_VERSION = "9.0.0-beta.
|
|
4
|
+
export declare const LIBRARY_VERSION = "9.0.0-beta.28";
|
|
5
5
|
/**
|
|
6
6
|
* AdCP specification version this library is built for
|
|
7
7
|
*/
|
|
@@ -33,10 +33,10 @@ export type AdcpVersion = (typeof COMPATIBLE_ADCP_VERSIONS)[number];
|
|
|
33
33
|
* Full version information
|
|
34
34
|
*/
|
|
35
35
|
export declare const VERSION_INFO: {
|
|
36
|
-
readonly library: "9.0.0-beta.
|
|
36
|
+
readonly library: "9.0.0-beta.28";
|
|
37
37
|
readonly adcp: "3.1.0-rc.10";
|
|
38
38
|
readonly compatibleVersions: readonly ["v2.5", "v2.6", "v3", "3.0.0-beta.1", "3.0-beta.1", "3.0-beta", "3.0.0-beta.3", "3.0-beta.3", "3.1.0-beta.1", "3.1-beta.1", "3.1-beta", "3.1.0-beta.2", "3.1-beta.2", "3.1.0-beta.3", "3.1-beta.3", "3.1.0-beta.5", "3.1-beta.5", "3.1.0-beta.7", "3.1-beta.7", "3.1.0-rc.1", "3.1-rc.1", "3.1-rc", "3.1.0-rc.2", "3.1-rc.2", "3.1.0-rc.3", "3.1-rc.3", "3.1.0-rc.4", "3.1-rc.4", "3.1.0-rc.6", "3.1-rc.6", "3.1.0-rc.7", "3.1-rc.7", "3.1.0-rc.8", "3.1-rc.8", "3.1.0-rc.9", "3.1-rc.9", "3.1.0-rc.10", "3.1-rc.10", "3.0.0", "3.0.1", "3.0.2", "3.0.3", "3.0.4", "3.0.5", "3.0.6", "3.0.7", "3.0.8", "3.0.9", "3.0.10", "3.0.11", "3.0.12"];
|
|
39
|
-
readonly generatedAt: "2026-06-
|
|
39
|
+
readonly generatedAt: "2026-06-10T18:40:37.777Z";
|
|
40
40
|
};
|
|
41
41
|
/**
|
|
42
42
|
* Get the AdCP specification version this library is built for
|
package/dist/lib/version.js
CHANGED
|
@@ -12,7 +12,7 @@ exports.toReleasePrecisionVersion = toReleasePrecisionVersion;
|
|
|
12
12
|
/**
|
|
13
13
|
* AdCP SDK library version
|
|
14
14
|
*/
|
|
15
|
-
exports.LIBRARY_VERSION = '9.0.0-beta.
|
|
15
|
+
exports.LIBRARY_VERSION = '9.0.0-beta.28';
|
|
16
16
|
/**
|
|
17
17
|
* AdCP specification version this library is built for
|
|
18
18
|
*/
|
|
@@ -87,10 +87,10 @@ exports.COMPATIBLE_ADCP_VERSIONS = [
|
|
|
87
87
|
* Full version information
|
|
88
88
|
*/
|
|
89
89
|
exports.VERSION_INFO = {
|
|
90
|
-
library: '9.0.0-beta.
|
|
90
|
+
library: '9.0.0-beta.28',
|
|
91
91
|
adcp: '3.1.0-rc.10',
|
|
92
92
|
compatibleVersions: exports.COMPATIBLE_ADCP_VERSIONS,
|
|
93
|
-
generatedAt: '2026-06-
|
|
93
|
+
generatedAt: '2026-06-10T18:40:37.777Z',
|
|
94
94
|
};
|
|
95
95
|
/**
|
|
96
96
|
* Get the AdCP specification version this library is built for
|
|
@@ -493,7 +493,7 @@ Modes per side: `'strict' | 'warn' | 'off'`. Default is `'off'` — enable expli
|
|
|
493
493
|
|
|
494
494
|
**Note on MCP `tools/list` introspection**: `@adcp/sdk` agents register framework tools with a passthrough input schema so the framework AJV validator is authoritative on both MCP and A2A (see [#909](https://github.com/adcontextprotocol/adcp-client/issues/909)). One visible consequence: MCP `tools/list` publishes `{ type: 'object', properties: {}, additionalProperties: {} }` for every framework tool — not the per-tool parameter schema. Generic MCP discovery clients that lean on `tools/list` inputSchema for field-level introspection will see an untyped surface. AdCP-native discovery via `get_adcp_capabilities` is unaffected; upstream [adcp#3057](https://github.com/adcontextprotocol/adcp/issues/3057) proposes a `get_schema` capability tool for per-tool shape discovery across transports.
|
|
495
495
|
|
|
496
|
-
The same validator runs on the `AdcpClient` side — storyboards and third-party clients configure it via `validation: { requests, responses }` on the client config. Request default is `warn` (so existing callers that send partial payloads still work); response default is `strict` in dev/test, `warn` in production. Set either side to `'off'` for zero overhead.
|
|
496
|
+
The same validator runs on the `AdcpClient` side — storyboards and third-party clients configure it via `validation: { requests, responses }` on the client config. Request default is `warn` (so existing callers that send partial payloads still work); response default is `strict` in dev/test, `warn` in production. Set either side to `'off'` for zero overhead. Protocol feature preflights are separate from schema validation; the client may still reject request controls that are known to be incompatible with the configured AdCP version before dispatch.
|
|
497
497
|
|
|
498
498
|
### Request Signing
|
|
499
499
|
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
# Preview asset durability
|
|
2
|
+
|
|
3
|
+
Creative workflows often return `preview_creative` renders as MCPUI preview
|
|
4
|
+
URLs while the buyer is still iterating. Those URLs are part of the workflow
|
|
5
|
+
contract: a browser, MCPUI host, later refinement call, or reviewer may fetch
|
|
6
|
+
them after the tool call has returned and after a load balancer has routed the
|
|
7
|
+
request to another process.
|
|
8
|
+
|
|
9
|
+
If a preview URL depends on process-local state, it will fail in multi-pod
|
|
10
|
+
deployments. A common failure mode is:
|
|
11
|
+
|
|
12
|
+
1. Pod A generates a draft creative and returns
|
|
13
|
+
`/creative-sessions/{sessionId}/variants/{variantId}/assets/{assetId}`.
|
|
14
|
+
2. The browser or MCPUI host fetches that URL through the load balancer.
|
|
15
|
+
3. Pod B receives the request but does not have Pod A's in-memory session map.
|
|
16
|
+
4. The preview 404s even though the original tool call succeeded.
|
|
17
|
+
|
|
18
|
+
## TL;DR
|
|
19
|
+
|
|
20
|
+
- `preview_url` values should resolve through durable storage in production.
|
|
21
|
+
- In-memory maps are fine for local development and single-process demos, but
|
|
22
|
+
not for multi-pod services.
|
|
23
|
+
- Treat draft bytes, hosted preview artifacts, and final campaign manifests as
|
|
24
|
+
separate lifecycle stages.
|
|
25
|
+
- A cache of preview metadata is not an asset store. Cache entries may point at
|
|
26
|
+
durable URLs; they must not be the only place the asset exists.
|
|
27
|
+
|
|
28
|
+
## Three lifecycle stages
|
|
29
|
+
|
|
30
|
+
### 1. Inline draft bytes
|
|
31
|
+
|
|
32
|
+
Use inline bytes only for small, immediate draft work: model output that has not
|
|
33
|
+
yet been accepted, transformed, or reviewed. Inline bytes are convenient inside
|
|
34
|
+
one request, but they should not be the only representation behind a URL that
|
|
35
|
+
will be fetched later.
|
|
36
|
+
|
|
37
|
+
Good uses:
|
|
38
|
+
|
|
39
|
+
- passing a just-generated image to a renderer in the same process
|
|
40
|
+
- holding a short-lived thumbnail while deciding whether to persist it
|
|
41
|
+
- returning `preview_html` with `bothRender` when the host also receives a
|
|
42
|
+
durable `preview_url`
|
|
43
|
+
|
|
44
|
+
Avoid:
|
|
45
|
+
|
|
46
|
+
- returning a URL that can only be resolved from an in-memory `Map`
|
|
47
|
+
- assuming sticky sessions will always route follow-up fetches to the creator
|
|
48
|
+
process
|
|
49
|
+
|
|
50
|
+
### 2. Hosted preview artifact
|
|
51
|
+
|
|
52
|
+
A hosted preview artifact is the durable resource behind `preview_url`. Store
|
|
53
|
+
the bytes in object storage, a database blob table, or another shared backing
|
|
54
|
+
service. Store the session and variant metadata in a durable index such as
|
|
55
|
+
Postgres so follow-up calls can resolve lineage, selection state, evaluator
|
|
56
|
+
notes, and current/final flags.
|
|
57
|
+
|
|
58
|
+
Recommended shape:
|
|
59
|
+
|
|
60
|
+
- object storage holds large asset bytes
|
|
61
|
+
- Postgres or another durable database holds session, variant, asset, and
|
|
62
|
+
review metadata
|
|
63
|
+
- preview routes resolve by opaque IDs and stream bytes from shared storage
|
|
64
|
+
- URLs remain valid long enough for review, refinement, and finalization
|
|
65
|
+
|
|
66
|
+
The URL can still be short-lived if it is re-mintable from durable metadata. For
|
|
67
|
+
example, a route may authenticate the caller and redirect to a signed object
|
|
68
|
+
storage URL. The critical property is that any pod can perform that lookup.
|
|
69
|
+
|
|
70
|
+
### 3. Final campaign creative manifest
|
|
71
|
+
|
|
72
|
+
The final creative manifest is the serving artifact that moves into the campaign
|
|
73
|
+
or ad server workflow. It should reference approved assets and serving tags, not
|
|
74
|
+
an arbitrary draft cache entry. Keep the draft/session lifecycle separate so a
|
|
75
|
+
buyer can iterate without accidentally promoting every preview asset into a
|
|
76
|
+
campaign creative.
|
|
77
|
+
|
|
78
|
+
## Preview cache vs asset store
|
|
79
|
+
|
|
80
|
+
`src/lib/utils/preview-utils.ts` includes a default process-local cache for
|
|
81
|
+
batch preview helpers. That cache stores the result of `preview_creative`; it is
|
|
82
|
+
not a durable asset store and is not shared across pods.
|
|
83
|
+
|
|
84
|
+
Production services that cache preview results should pass a shared
|
|
85
|
+
`PreviewCacheBackend`:
|
|
86
|
+
|
|
87
|
+
```ts
|
|
88
|
+
import { batchPreviewFormats, type PreviewCacheBackend } from '@adcp/sdk';
|
|
89
|
+
import type { RedisClientType } from 'redis';
|
|
90
|
+
|
|
91
|
+
function redisPreviewCache(redis: RedisClientType): PreviewCacheBackend {
|
|
92
|
+
return {
|
|
93
|
+
get: key => redis.get(key).then(raw => (raw ? JSON.parse(raw) : null)),
|
|
94
|
+
set: async (key, entry) => {
|
|
95
|
+
const ttlSeconds = entry.expiresAt
|
|
96
|
+
? Math.max(1, Math.floor((Date.parse(entry.expiresAt) - Date.now()) / 1000))
|
|
97
|
+
: 3600;
|
|
98
|
+
await redis.set(key, JSON.stringify(entry), { EX: ttlSeconds });
|
|
99
|
+
},
|
|
100
|
+
delete: async key => {
|
|
101
|
+
await redis.del(key);
|
|
102
|
+
},
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
const previews = await batchPreviewFormats(formats, creativeAgentClient, {
|
|
107
|
+
cacheBackend: redisPreviewCache(redis),
|
|
108
|
+
});
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
Only cache references that already resolve durably. If the cached `previewUrl`
|
|
112
|
+
points at process-local bytes, a shared cache only makes the broken reference
|
|
113
|
+
available to more callers.
|
|
114
|
+
|
|
115
|
+
## `preview_creative` response guidance
|
|
116
|
+
|
|
117
|
+
Return `urlRender` or `bothRender` when the preview needs to be opened by a
|
|
118
|
+
browser or MCPUI host. `htmlRender` alone is only appropriate when the caller can
|
|
119
|
+
use inline HTML directly and no later fetch is required.
|
|
120
|
+
|
|
121
|
+
For `urlRender` and `bothRender`, make sure `preview_url` is backed by a durable
|
|
122
|
+
route:
|
|
123
|
+
|
|
124
|
+
```ts
|
|
125
|
+
import { previewCreative, urlRender } from '@adcp/sdk';
|
|
126
|
+
|
|
127
|
+
return previewCreative.single({
|
|
128
|
+
previews: [
|
|
129
|
+
{
|
|
130
|
+
preview_id: variant.id,
|
|
131
|
+
renders: [
|
|
132
|
+
urlRender({
|
|
133
|
+
render_id: variant.primaryRenderId,
|
|
134
|
+
role: 'primary',
|
|
135
|
+
preview_url: `https://creative.example/previews/${variant.assetId}`,
|
|
136
|
+
}),
|
|
137
|
+
],
|
|
138
|
+
},
|
|
139
|
+
],
|
|
140
|
+
});
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
The route should be able to resolve `variant.assetId` from shared storage from
|
|
144
|
+
any pod. Do not require the serving process to have created the variant in the
|
|
145
|
+
same process lifetime.
|
|
146
|
+
|
|
147
|
+
## Checklist
|
|
148
|
+
|
|
149
|
+
- Store creative session metadata durably before returning a preview URL.
|
|
150
|
+
- Store large preview bytes in shared storage, or make them re-mintable from a
|
|
151
|
+
durable source of truth.
|
|
152
|
+
- Make preview asset IDs opaque; do not expose filesystem paths or internal
|
|
153
|
+
storage keys directly.
|
|
154
|
+
- Treat memory caches as accelerators only. A cache miss should rehydrate from
|
|
155
|
+
durable storage or return a real not-found/error state.
|
|
156
|
+
- Test with at least two app instances and route the fetch to a different
|
|
157
|
+
instance than the one that generated the preview.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@adcp/sdk",
|
|
3
|
-
"version": "9.0.0-beta.
|
|
3
|
+
"version": "9.0.0-beta.28",
|
|
4
4
|
"description": "AdCP SDK — client, server, and compliance harnesses for the AdContext Protocol (MCP + A2A)",
|
|
5
5
|
"workspaces": [
|
|
6
6
|
".",
|
|
@@ -274,6 +274,7 @@
|
|
|
274
274
|
"docs/llms.txt",
|
|
275
275
|
"docs/guides/BUILD-AN-AGENT.md",
|
|
276
276
|
"docs/guides/CANONICAL-REFERENCE-RESOLVER.md",
|
|
277
|
+
"docs/guides/PREVIEW-ASSET-DURABILITY.md",
|
|
277
278
|
"examples/**/*",
|
|
278
279
|
"AGENTS.md",
|
|
279
280
|
"README.md",
|
|
@@ -53,6 +53,8 @@ Both run with `NoAccountCtx<TCtxMeta>` — they don't carry an authenticated acc
|
|
|
53
53
|
|
|
54
54
|
`preview_creative` should return `urlRender` or `bothRender`, **not `htmlRender` alone**. The creative-template storyboard asserts `previews[0].renders[0].preview_url` is renderable. If your platform can host a preview URL, use `urlRender`. If you only have inline HTML, use `bothRender` (emit both `preview_url` and `preview_html`).
|
|
55
55
|
|
|
56
|
+
Preview URLs must resolve from durable storage in production; do not back MCPUI preview links with pod-local in-memory maps except in local demos. If you fork `hello_creative_adapter_template.ts`, replace the mock upstream `preview_url` plumbing with a route that reads preview bytes and session metadata from shared storage before shipping. See [`docs/guides/PREVIEW-ASSET-DURABILITY.md`](../../docs/guides/PREVIEW-ASSET-DURABILITY.md).
|
|
57
|
+
|
|
56
58
|
## Specialism deltas at a glance
|
|
57
59
|
|
|
58
60
|
The fork targets cover the baseline + specialism deltas. Quick reference for what each archetype needs that the others don't:
|