@adcp/sdk 16.2.0 → 16.3.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 (97) hide show
  1. package/AGENTS.md +2 -0
  2. package/dist/lib/core/AgentClient.js +17 -1
  3. package/dist/lib/core/AgentClient.mjs +17 -1
  4. package/dist/lib/core/SingleAgentClient.js +13 -0
  5. package/dist/lib/core/SingleAgentClient.mjs +13 -0
  6. package/dist/lib/core/TaskExecutor.js +88 -13
  7. package/dist/lib/core/TaskExecutor.mjs +89 -14
  8. package/dist/lib/errors/index.d.mts +34 -0
  9. package/dist/lib/errors/index.d.ts +34 -0
  10. package/dist/lib/errors/index.js +11 -0
  11. package/dist/lib/errors/index.mjs +10 -0
  12. package/dist/lib/index.d.mts +1 -1
  13. package/dist/lib/index.d.ts +1 -1
  14. package/dist/lib/index.js +2 -0
  15. package/dist/lib/index.mjs +2 -0
  16. package/dist/lib/media-buy/compatibility.d.mts +1 -0
  17. package/dist/lib/media-buy/compatibility.d.ts +1 -0
  18. package/dist/lib/media-buy/compatibility.js +33 -10
  19. package/dist/lib/media-buy/compatibility.mjs +32 -14
  20. package/dist/lib/negotiation/buyer.js +11 -5
  21. package/dist/lib/negotiation/buyer.mjs +11 -5
  22. package/dist/lib/negotiation/types.d.mts +4 -2
  23. package/dist/lib/negotiation/types.d.ts +4 -2
  24. package/dist/lib/negotiation/verification.d.mts +15 -6
  25. package/dist/lib/negotiation/verification.d.ts +15 -6
  26. package/dist/lib/negotiation/verification.js +146 -27
  27. package/dist/lib/negotiation/verification.mjs +146 -28
  28. package/dist/lib/negotiation/version.d.mts +6 -0
  29. package/dist/lib/negotiation/version.d.ts +6 -0
  30. package/dist/lib/negotiation/version.js +60 -0
  31. package/dist/lib/negotiation/version.mjs +33 -0
  32. package/dist/lib/server/create-adcp-server.js +1 -1
  33. package/dist/lib/server/create-adcp-server.mjs +1 -1
  34. package/dist/lib/server/error-arm-tools.d.mts +10 -10
  35. package/dist/lib/server/error-arm-tools.d.ts +10 -10
  36. package/dist/lib/server/error-arm-tools.js +22 -58
  37. package/dist/lib/server/error-arm-tools.mjs +30 -65
  38. package/dist/lib/testing/compliance/comply.js +17 -0
  39. package/dist/lib/testing/compliance/comply.mjs +17 -0
  40. package/dist/lib/testing/index.d.mts +3 -0
  41. package/dist/lib/testing/index.d.ts +3 -0
  42. package/dist/lib/testing/index.js +44 -2
  43. package/dist/lib/testing/index.mjs +42 -0
  44. package/dist/lib/testing/storyboard/collection-selection.d.mts +259 -0
  45. package/dist/lib/testing/storyboard/collection-selection.d.ts +259 -0
  46. package/dist/lib/testing/storyboard/collection-selection.js +384 -0
  47. package/dist/lib/testing/storyboard/collection-selection.mjs +348 -0
  48. package/dist/lib/testing/storyboard/context.js +12 -6
  49. package/dist/lib/testing/storyboard/context.mjs +12 -6
  50. package/dist/lib/testing/storyboard/fixture-resolution.d.mts +39 -1
  51. package/dist/lib/testing/storyboard/fixture-resolution.d.ts +39 -1
  52. package/dist/lib/testing/storyboard/fixture-resolution.js +216 -12
  53. package/dist/lib/testing/storyboard/fixture-resolution.mjs +218 -12
  54. package/dist/lib/testing/storyboard/index.d.mts +9 -2
  55. package/dist/lib/testing/storyboard/index.d.ts +9 -2
  56. package/dist/lib/testing/storyboard/index.js +51 -2
  57. package/dist/lib/testing/storyboard/index.mjs +49 -1
  58. package/dist/lib/testing/storyboard/prepared-fixtures.d.mts +471 -0
  59. package/dist/lib/testing/storyboard/prepared-fixtures.d.ts +471 -0
  60. package/dist/lib/testing/storyboard/prepared-fixtures.js +434 -0
  61. package/dist/lib/testing/storyboard/prepared-fixtures.mjs +389 -0
  62. package/dist/lib/testing/storyboard/protected-context.d.mts +127 -0
  63. package/dist/lib/testing/storyboard/protected-context.d.ts +127 -0
  64. package/dist/lib/testing/storyboard/protected-context.js +301 -0
  65. package/dist/lib/testing/storyboard/protected-context.mjs +267 -0
  66. package/dist/lib/testing/storyboard/rejection-hints.js +13 -4
  67. package/dist/lib/testing/storyboard/rejection-hints.mjs +13 -4
  68. package/dist/lib/testing/storyboard/runner.d.mts +24 -0
  69. package/dist/lib/testing/storyboard/runner.d.ts +24 -0
  70. package/dist/lib/testing/storyboard/runner.js +1061 -105
  71. package/dist/lib/testing/storyboard/runner.mjs +1075 -106
  72. package/dist/lib/testing/storyboard/seeding.d.mts +15 -1
  73. package/dist/lib/testing/storyboard/seeding.d.ts +15 -1
  74. package/dist/lib/testing/storyboard/seeding.js +272 -12
  75. package/dist/lib/testing/storyboard/seeding.mjs +274 -13
  76. package/dist/lib/testing/storyboard/types.d.mts +207 -10
  77. package/dist/lib/testing/storyboard/types.d.ts +207 -10
  78. package/dist/lib/testing/storyboard/types.js +1 -1
  79. package/dist/lib/testing/storyboard/types.mjs +1 -1
  80. package/dist/lib/testing/storyboard/validations.d.mts +1 -1
  81. package/dist/lib/testing/storyboard/validations.d.ts +1 -1
  82. package/dist/lib/testing/storyboard/validations.js +95 -0
  83. package/dist/lib/testing/storyboard/validations.mjs +95 -0
  84. package/dist/lib/validation/bundled-schema-store.js +5 -0
  85. package/dist/lib/validation/bundled-schema-store.mjs +4 -0
  86. package/dist/lib/validation/schema-loader.js +19 -2
  87. package/dist/lib/validation/schema-loader.mjs +22 -3
  88. package/dist/lib/version.d.mts +3 -3
  89. package/dist/lib/version.d.ts +3 -3
  90. package/dist/lib/version.js +3 -3
  91. package/dist/lib/version.mjs +3 -3
  92. package/docs/TYPE-SUMMARY.md +1 -1
  93. package/docs/guides/COLLECTION-FIXTURE-FOUNDATION.md +850 -0
  94. package/docs/guides/PROPOSAL-TERMS-VERIFICATION.md +66 -0
  95. package/docs/llms.txt +3 -2
  96. package/docs/migration-14.x-rc-worksheet.md +4 -4
  97. package/package.json +1 -1
@@ -0,0 +1,60 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var version_exports = {};
20
+ __export(version_exports, {
21
+ applicableRefinementServedVersion: () => applicableRefinementServedVersion,
22
+ compareProposalRefinementVersions: () => compareProposalRefinementVersions,
23
+ describeRefinementVersion: () => describeRefinementVersion,
24
+ isProposalRefinementVersion: () => isProposalRefinementVersion
25
+ });
26
+ module.exports = __toCommonJS(version_exports);
27
+ var import_semver = require("semver");
28
+ var import_version = require('../version.js');
29
+ function isProposalRefinementVersion(value) {
30
+ if (typeof value !== "string" || !/^3\.[23](?:-[A-Za-z0-9]+(?:[.-][A-Za-z0-9]+)*)?$/.test(value)) return false;
31
+ const comparable = value.replace(/^(3\.[23])(?=-|$)/, "$1.0");
32
+ return (0, import_semver.valid)(comparable) === comparable;
33
+ }
34
+ function applicableRefinementServedVersion(served, ceiling, discoveryCeiling = ceiling) {
35
+ if (!isProposalRefinementVersion(discoveryCeiling)) return void 0;
36
+ if (!isProposalRefinementVersion(ceiling) || compareProposalRefinementVersions(ceiling, discoveryCeiling) > 0)
37
+ return void 0;
38
+ if (typeof served !== "string" || !isProposalRefinementVersion(ceiling)) return void 0;
39
+ if (!isProposalRefinementVersion(served) && (0, import_semver.valid)(served) !== served) return void 0;
40
+ const release = (0, import_version.toReleasePrecisionVersion)(served);
41
+ return isProposalRefinementVersion(release) && compareProposalRefinementVersions(release, ceiling) <= 0 ? served : void 0;
42
+ }
43
+ function compareProposalRefinementVersions(left, right) {
44
+ const semver = (value) => value.replace(/^(3\.[23])(?=-|$)/, "$1.0");
45
+ return (0, import_semver.compare)(semver(left), semver(right));
46
+ }
47
+ function describeRefinementVersion(value) {
48
+ try {
49
+ return (JSON.stringify(value) ?? String(value)).slice(0, 160);
50
+ } catch {
51
+ return "[unserializable version]";
52
+ }
53
+ }
54
+ // Annotate the CommonJS export names for ESM import in node:
55
+ 0 && (module.exports = {
56
+ applicableRefinementServedVersion,
57
+ compareProposalRefinementVersions,
58
+ describeRefinementVersion,
59
+ isProposalRefinementVersion
60
+ });
@@ -0,0 +1,33 @@
1
+ import { compare, valid } from "semver";
2
+ import { toReleasePrecisionVersion } from "../version.mjs";
3
+ function isProposalRefinementVersion(value) {
4
+ if (typeof value !== "string" || !/^3\.[23](?:-[A-Za-z0-9]+(?:[.-][A-Za-z0-9]+)*)?$/.test(value)) return false;
5
+ const comparable = value.replace(/^(3\.[23])(?=-|$)/, "$1.0");
6
+ return valid(comparable) === comparable;
7
+ }
8
+ function applicableRefinementServedVersion(served, ceiling, discoveryCeiling = ceiling) {
9
+ if (!isProposalRefinementVersion(discoveryCeiling)) return void 0;
10
+ if (!isProposalRefinementVersion(ceiling) || compareProposalRefinementVersions(ceiling, discoveryCeiling) > 0)
11
+ return void 0;
12
+ if (typeof served !== "string" || !isProposalRefinementVersion(ceiling)) return void 0;
13
+ if (!isProposalRefinementVersion(served) && valid(served) !== served) return void 0;
14
+ const release = toReleasePrecisionVersion(served);
15
+ return isProposalRefinementVersion(release) && compareProposalRefinementVersions(release, ceiling) <= 0 ? served : void 0;
16
+ }
17
+ function compareProposalRefinementVersions(left, right) {
18
+ const semver = (value) => value.replace(/^(3\.[23])(?=-|$)/, "$1.0");
19
+ return compare(semver(left), semver(right));
20
+ }
21
+ function describeRefinementVersion(value) {
22
+ try {
23
+ return (JSON.stringify(value) ?? String(value)).slice(0, 160);
24
+ } catch {
25
+ return "[unserializable version]";
26
+ }
27
+ }
28
+ export {
29
+ applicableRefinementServedVersion,
30
+ compareProposalRefinementVersions,
31
+ describeRefinementVersion,
32
+ isProposalRefinementVersion
33
+ };
@@ -726,7 +726,7 @@ function validateFrameworkPayload(toolName, direction, payload, version, proposa
726
726
  };
727
727
  }
728
728
  }
729
- const verification = (0, import_verification.validateRefineProposalsResponseShape)(payload);
729
+ const verification = (0, import_verification.validateRefineProposalsResponseShape)(payload, { adcpVersion: version });
730
730
  if (verification.ok) {
731
731
  return {
732
732
  valid: true,
@@ -817,7 +817,7 @@ function validateFrameworkPayload(toolName, direction, payload, version, proposa
817
817
  };
818
818
  }
819
819
  }
820
- const verification = validateRefineProposalsResponseShape(payload);
820
+ const verification = validateRefineProposalsResponseShape(payload, { adcpVersion: version });
821
821
  if (verification.ok) {
822
822
  return {
823
823
  valid: true,
@@ -10,10 +10,11 @@
10
10
  * response schema doesn't define it would add a key the schema
11
11
  * doesn't expect.
12
12
  *
13
- * Built lazily at first use from the bundled schema cache (the same
14
- * tree `schema-loader.ts` reads). The set is computed once per bundle
15
- * key (`resolveBundleKey('3.0.0')` → `'3.0'`) and memoised — the schema
16
- * tree is read-only at runtime, so a single scan is sufficient.
13
+ * Derived from the active schema-loader authority. Bundle inventories are
14
+ * memoised by bundle key and resolved root, with loader-epoch invalidation
15
+ * so scoped or re-registered candidate bundles cannot leak.
16
+ * Raw external roots use the loader's response index when no bundled
17
+ * store exists.
17
18
  *
18
19
  * Spec basis: `error-code.json#GOVERNANCE_DENIED` and
19
20
  * `#GOVERNANCE_UNAVAILABLE` both prescribe "populate `errors[].code` in
@@ -44,12 +45,11 @@ export interface ErrorArmDescriptor {
44
45
  * gate for two-layer auto-emission, plus the per-arm constants the
45
46
  * dispatcher needs to set when synthesising the wrap.
46
47
  *
47
- * Scans the bundled schema cache lazily on first call per bundle key
48
- * (one read per minor version per process). Returns a frozen, empty map
49
- * when no schema bundle is reachable — the dispatcher early-returns on
50
- * `map.size === 0`, so a missing bundle silently disables the wrap
51
- * rather than breaking server startup.
48
+ * Scans the active schema authority lazily. Missing roots return an empty map
49
+ * without caching, so later external registration takes effect. Re-registering
50
+ * or entering another schema scope invalidates cached inventories, including
51
+ * replacements of candidate bundles at the same path.
52
52
  */
53
53
  export declare function getToolsWithErrorArm(version?: string): ReadonlyMap<string, ErrorArmDescriptor>;
54
- /** Test hook: clear the per-bundle-key cache. */
54
+ /** Test hook: clear cached error-arm inventories. */
55
55
  export declare function _resetErrorArmToolsCache(): void;
@@ -10,10 +10,11 @@
10
10
  * response schema doesn't define it would add a key the schema
11
11
  * doesn't expect.
12
12
  *
13
- * Built lazily at first use from the bundled schema cache (the same
14
- * tree `schema-loader.ts` reads). The set is computed once per bundle
15
- * key (`resolveBundleKey('3.0.0')` → `'3.0'`) and memoised — the schema
16
- * tree is read-only at runtime, so a single scan is sufficient.
13
+ * Derived from the active schema-loader authority. Bundle inventories are
14
+ * memoised by bundle key and resolved root, with loader-epoch invalidation
15
+ * so scoped or re-registered candidate bundles cannot leak.
16
+ * Raw external roots use the loader's response index when no bundled
17
+ * store exists.
17
18
  *
18
19
  * Spec basis: `error-code.json#GOVERNANCE_DENIED` and
19
20
  * `#GOVERNANCE_UNAVAILABLE` both prescribe "populate `errors[].code` in
@@ -44,12 +45,11 @@ export interface ErrorArmDescriptor {
44
45
  * gate for two-layer auto-emission, plus the per-arm constants the
45
46
  * dispatcher needs to set when synthesising the wrap.
46
47
  *
47
- * Scans the bundled schema cache lazily on first call per bundle key
48
- * (one read per minor version per process). Returns a frozen, empty map
49
- * when no schema bundle is reachable — the dispatcher early-returns on
50
- * `map.size === 0`, so a missing bundle silently disables the wrap
51
- * rather than breaking server startup.
48
+ * Scans the active schema authority lazily. Missing roots return an empty map
49
+ * without caching, so later external registration takes effect. Re-registering
50
+ * or entering another schema scope invalidates cached inventories, including
51
+ * replacements of candidate bundles at the same path.
52
52
  */
53
53
  export declare function getToolsWithErrorArm(version?: string): ReadonlyMap<string, ErrorArmDescriptor>;
54
- /** Test hook: clear the per-bundle-key cache. */
54
+ /** Test hook: clear cached error-arm inventories. */
55
55
  export declare function _resetErrorArmToolsCache(): void;
@@ -37,49 +37,6 @@ var import_path = __toESM(require("path"));
37
37
  var import_version = require('../version.js');
38
38
  var import_schema_loader = require('../validation/schema-loader.js');
39
39
  var import_bundled_schema_store = require('../validation/bundled-schema-store.js');
40
- function findPrereleaseBundle(root, key) {
41
- if (!(0, import_fs.existsSync)(root)) return void 0;
42
- const candidates = (0, import_fs.readdirSync)(root, { withFileTypes: true }).filter((entry) => entry.isDirectory() && !entry.name.endsWith(".previous")).map((entry) => {
43
- try {
44
- return { name: entry.name, releasePrecision: (0, import_schema_loader.toReleasePrecisionWire)(entry.name) };
45
- } catch {
46
- return void 0;
47
- }
48
- }).filter(
49
- (entry) => entry !== void 0 && (entry.releasePrecision === key || entry.releasePrecision.startsWith(`${key}.`))
50
- ).sort((a, b) => b.name.localeCompare(a.name, void 0, { numeric: true, sensitivity: "base" }));
51
- return candidates[0] ? import_path.default.join(root, candidates[0].name) : void 0;
52
- }
53
- function resolveBundledRoot(version) {
54
- const key = (0, import_schema_loader.resolveBundleKey)(version);
55
- const distRoot = import_path.default.join(__dirname, "..", "schemas-data");
56
- const distCandidate = import_path.default.join(distRoot, key, "bundled");
57
- if ((0, import_bundled_schema_store.hasBundledSchemaStore)(distCandidate)) return distCandidate;
58
- const releasePrecisionMatch = /^\d+\.\d+-/.test(key);
59
- if (releasePrecisionMatch) {
60
- const distPrerelease = findPrereleaseBundle(distRoot, key);
61
- if (distPrerelease) return import_path.default.join(distPrerelease, "bundled");
62
- }
63
- const cacheRoot = import_path.default.join(__dirname, "..", "..", "..", "schemas", "cache");
64
- const exactCandidate = import_path.default.join(cacheRoot, version, "bundled");
65
- if ((0, import_bundled_schema_store.hasBundledSchemaStore)(exactCandidate)) return exactCandidate;
66
- const minorMatch = key.match(/^(\d+)\.(\d+)$/);
67
- if (minorMatch && (0, import_fs.existsSync)(cacheRoot)) {
68
- const [, major, minor] = minorMatch;
69
- const prefix = `${major}.${minor}.`;
70
- const cached = (0, import_fs.readdirSync)(cacheRoot, { withFileTypes: true }).filter(
71
- (e) => e.isDirectory() && e.name.startsWith(prefix) && !e.name.endsWith(".previous") && /^\d+\.\d+\.\d+$/.test(e.name)
72
- ).map((e) => ({ name: e.name, patch: parseInt(e.name.slice(prefix.length), 10) })).filter((c) => Number.isFinite(c.patch)).sort((a, b) => b.patch - a.patch);
73
- if (cached.length > 0) {
74
- return import_path.default.join(cacheRoot, cached[0].name, "bundled");
75
- }
76
- }
77
- if (releasePrecisionMatch) {
78
- const cachePrerelease = findPrereleaseBundle(cacheRoot, key);
79
- if (cachePrerelease) return import_path.default.join(cachePrerelease, "bundled");
80
- }
81
- return void 0;
82
- }
83
40
  function resolveBranch(branch, rootSchema) {
84
41
  if (!branch || typeof branch !== "object") return void 0;
85
42
  const obj = branch;
@@ -113,19 +70,21 @@ function describeErrorArm(branch, rootSchema) {
113
70
  }
114
71
  return { extraRequired: Object.freeze(extraRequired) };
115
72
  }
116
- function scanForErrorArmTools(bundledRoot) {
73
+ function scanForErrorArmTools(root, version) {
74
+ const bundledRoot = import_path.default.join(root, "bundled");
117
75
  const map = /* @__PURE__ */ new Map();
118
76
  let manifestTools;
119
77
  try {
120
- const manifest = JSON.parse((0, import_fs.readFileSync)(import_path.default.join(import_path.default.dirname(bundledRoot), "manifest.json"), "utf-8"));
78
+ const manifest = JSON.parse((0, import_fs.readFileSync)(import_path.default.join(root, "manifest.json"), "utf-8"));
121
79
  if (manifest.tools) manifestTools = new Set(Object.keys(manifest.tools));
122
80
  } catch {
123
81
  }
124
- const files = (0, import_bundled_schema_store.listBundledSchemaFiles)(bundledRoot).filter((file) => file.endsWith("-response.json"));
125
- for (const file of files) {
82
+ const bundled = (0, import_bundled_schema_store.hasBundledSchemaStore)(bundledRoot);
83
+ const responses = bundled ? (0, import_bundled_schema_store.listBundledSchemaFiles)(bundledRoot).filter((file) => file.endsWith("-response.json")).map((file) => ({ toolName: import_path.default.basename(file, "-response.json").replace(/-/g, "_"), file })) : (0, import_schema_loader.listValidatorKeys)(version).filter((key) => key.endsWith("::sync")).map((key) => ({ toolName: key.slice(0, -"::sync".length), file: void 0 }));
84
+ for (const { toolName, file } of responses) {
126
85
  let schema;
127
86
  try {
128
- const loaded = (0, import_bundled_schema_store.loadBundledSchemaFile)(file);
87
+ const loaded = file ? (0, import_bundled_schema_store.loadBundledSchemaFile)(file) : (0, import_schema_loader.getToolSchemaDocument)(toolName, "sync", version)?.schema;
129
88
  if (!loaded) continue;
130
89
  schema = loaded;
131
90
  } catch {
@@ -142,25 +101,30 @@ function scanForErrorArmTools(bundledRoot) {
142
101
  }
143
102
  }
144
103
  if (!descriptor) continue;
145
- const base = import_path.default.basename(file, "-response.json");
146
- const toolName = base.replace(/-/g, "_");
147
104
  if (manifestTools && !manifestTools.has(toolName)) continue;
148
105
  map.set(toolName, descriptor);
149
106
  }
150
107
  return map;
151
108
  }
109
+ let cachedGeneration = -1;
152
110
  const cachedMaps = /* @__PURE__ */ new Map();
153
111
  function getToolsWithErrorArm(version = import_version.ADCP_VERSION) {
154
- const key = (0, import_schema_loader.resolveBundleKey)(version);
112
+ const bundleKey = (0, import_schema_loader.resolveBundleKey)(version);
113
+ let root;
114
+ try {
115
+ root = (0, import_schema_loader.resolveSchemaRoot)(version);
116
+ } catch {
117
+ return /* @__PURE__ */ new Map();
118
+ }
119
+ const generation = (0, import_schema_loader.getSchemaLoaderGeneration)();
120
+ if (cachedGeneration !== generation) {
121
+ cachedMaps.clear();
122
+ cachedGeneration = generation;
123
+ }
124
+ const key = `${bundleKey}\0${import_path.default.resolve(root)}`;
155
125
  const cached = cachedMaps.get(key);
156
126
  if (cached) return cached;
157
- const root = resolveBundledRoot(version);
158
- if (!root) {
159
- const empty = /* @__PURE__ */ new Map();
160
- cachedMaps.set(key, empty);
161
- return empty;
162
- }
163
- const map = scanForErrorArmTools(root);
127
+ const map = scanForErrorArmTools(root, version);
164
128
  cachedMaps.set(key, map);
165
129
  return map;
166
130
  }
@@ -1,60 +1,18 @@
1
- import { fileURLToPath as __adcpFileURLToPath } from "node:url";
2
- import { dirname as __adcpDirname } from "node:path";
3
- import { createRequire as __adcpCreateRequire } from "node:module";
4
- const __dirname = __adcpDirname(__adcpFileURLToPath(import.meta.url));
5
- const require2 = __adcpCreateRequire(import.meta.url);
6
- import { readdirSync, readFileSync, existsSync } from "fs";
1
+ import { readFileSync } from "fs";
7
2
  import path from "path";
8
3
  import { ADCP_VERSION } from "../version.mjs";
9
- import { resolveBundleKey, toReleasePrecisionWire } from "../validation/schema-loader.mjs";
4
+ import {
5
+ getToolSchemaDocument,
6
+ getSchemaLoaderGeneration,
7
+ listValidatorKeys,
8
+ resolveBundleKey,
9
+ resolveSchemaRoot
10
+ } from "../validation/schema-loader.mjs";
10
11
  import {
11
12
  hasBundledSchemaStore,
12
13
  listBundledSchemaFiles,
13
14
  loadBundledSchemaFile
14
15
  } from "../validation/bundled-schema-store.mjs";
15
- function findPrereleaseBundle(root, key) {
16
- if (!existsSync(root)) return void 0;
17
- const candidates = readdirSync(root, { withFileTypes: true }).filter((entry) => entry.isDirectory() && !entry.name.endsWith(".previous")).map((entry) => {
18
- try {
19
- return { name: entry.name, releasePrecision: toReleasePrecisionWire(entry.name) };
20
- } catch {
21
- return void 0;
22
- }
23
- }).filter(
24
- (entry) => entry !== void 0 && (entry.releasePrecision === key || entry.releasePrecision.startsWith(`${key}.`))
25
- ).sort((a, b) => b.name.localeCompare(a.name, void 0, { numeric: true, sensitivity: "base" }));
26
- return candidates[0] ? path.join(root, candidates[0].name) : void 0;
27
- }
28
- function resolveBundledRoot(version) {
29
- const key = resolveBundleKey(version);
30
- const distRoot = path.join(__dirname, "..", "schemas-data");
31
- const distCandidate = path.join(distRoot, key, "bundled");
32
- if (hasBundledSchemaStore(distCandidate)) return distCandidate;
33
- const releasePrecisionMatch = /^\d+\.\d+-/.test(key);
34
- if (releasePrecisionMatch) {
35
- const distPrerelease = findPrereleaseBundle(distRoot, key);
36
- if (distPrerelease) return path.join(distPrerelease, "bundled");
37
- }
38
- const cacheRoot = path.join(__dirname, "..", "..", "..", "schemas", "cache");
39
- const exactCandidate = path.join(cacheRoot, version, "bundled");
40
- if (hasBundledSchemaStore(exactCandidate)) return exactCandidate;
41
- const minorMatch = key.match(/^(\d+)\.(\d+)$/);
42
- if (minorMatch && existsSync(cacheRoot)) {
43
- const [, major, minor] = minorMatch;
44
- const prefix = `${major}.${minor}.`;
45
- const cached = readdirSync(cacheRoot, { withFileTypes: true }).filter(
46
- (e) => e.isDirectory() && e.name.startsWith(prefix) && !e.name.endsWith(".previous") && /^\d+\.\d+\.\d+$/.test(e.name)
47
- ).map((e) => ({ name: e.name, patch: parseInt(e.name.slice(prefix.length), 10) })).filter((c) => Number.isFinite(c.patch)).sort((a, b) => b.patch - a.patch);
48
- if (cached.length > 0) {
49
- return path.join(cacheRoot, cached[0].name, "bundled");
50
- }
51
- }
52
- if (releasePrecisionMatch) {
53
- const cachePrerelease = findPrereleaseBundle(cacheRoot, key);
54
- if (cachePrerelease) return path.join(cachePrerelease, "bundled");
55
- }
56
- return void 0;
57
- }
58
16
  function resolveBranch(branch, rootSchema) {
59
17
  if (!branch || typeof branch !== "object") return void 0;
60
18
  const obj = branch;
@@ -88,19 +46,21 @@ function describeErrorArm(branch, rootSchema) {
88
46
  }
89
47
  return { extraRequired: Object.freeze(extraRequired) };
90
48
  }
91
- function scanForErrorArmTools(bundledRoot) {
49
+ function scanForErrorArmTools(root, version) {
50
+ const bundledRoot = path.join(root, "bundled");
92
51
  const map = /* @__PURE__ */ new Map();
93
52
  let manifestTools;
94
53
  try {
95
- const manifest = JSON.parse(readFileSync(path.join(path.dirname(bundledRoot), "manifest.json"), "utf-8"));
54
+ const manifest = JSON.parse(readFileSync(path.join(root, "manifest.json"), "utf-8"));
96
55
  if (manifest.tools) manifestTools = new Set(Object.keys(manifest.tools));
97
56
  } catch {
98
57
  }
99
- const files = listBundledSchemaFiles(bundledRoot).filter((file) => file.endsWith("-response.json"));
100
- for (const file of files) {
58
+ const bundled = hasBundledSchemaStore(bundledRoot);
59
+ const responses = bundled ? listBundledSchemaFiles(bundledRoot).filter((file) => file.endsWith("-response.json")).map((file) => ({ toolName: path.basename(file, "-response.json").replace(/-/g, "_"), file })) : listValidatorKeys(version).filter((key) => key.endsWith("::sync")).map((key) => ({ toolName: key.slice(0, -"::sync".length), file: void 0 }));
60
+ for (const { toolName, file } of responses) {
101
61
  let schema;
102
62
  try {
103
- const loaded = loadBundledSchemaFile(file);
63
+ const loaded = file ? loadBundledSchemaFile(file) : getToolSchemaDocument(toolName, "sync", version)?.schema;
104
64
  if (!loaded) continue;
105
65
  schema = loaded;
106
66
  } catch {
@@ -117,25 +77,30 @@ function scanForErrorArmTools(bundledRoot) {
117
77
  }
118
78
  }
119
79
  if (!descriptor) continue;
120
- const base = path.basename(file, "-response.json");
121
- const toolName = base.replace(/-/g, "_");
122
80
  if (manifestTools && !manifestTools.has(toolName)) continue;
123
81
  map.set(toolName, descriptor);
124
82
  }
125
83
  return map;
126
84
  }
85
+ let cachedGeneration = -1;
127
86
  const cachedMaps = /* @__PURE__ */ new Map();
128
87
  function getToolsWithErrorArm(version = ADCP_VERSION) {
129
- const key = resolveBundleKey(version);
88
+ const bundleKey = resolveBundleKey(version);
89
+ let root;
90
+ try {
91
+ root = resolveSchemaRoot(version);
92
+ } catch {
93
+ return /* @__PURE__ */ new Map();
94
+ }
95
+ const generation = getSchemaLoaderGeneration();
96
+ if (cachedGeneration !== generation) {
97
+ cachedMaps.clear();
98
+ cachedGeneration = generation;
99
+ }
100
+ const key = `${bundleKey}\0${path.resolve(root)}`;
130
101
  const cached = cachedMaps.get(key);
131
102
  if (cached) return cached;
132
- const root = resolveBundledRoot(version);
133
- if (!root) {
134
- const empty = /* @__PURE__ */ new Map();
135
- cachedMaps.set(key, empty);
136
- return empty;
137
- }
138
- const map = scanForErrorArmTools(root);
103
+ const map = scanForErrorArmTools(root, version);
139
104
  cachedMaps.set(key, map);
140
105
  return map;
141
106
  }
@@ -37,6 +37,7 @@ var import_storyboard_tracks = require('./storyboard-tracks.js');
37
37
  var import_runner = require('../storyboard/runner.js');
38
38
  var import_native_a2a_compliance = require('../storyboard/native-a2a-compliance.js');
39
39
  var import_test_kit = require('../storyboard/test-kit.js');
40
+ var import_protected_context = require('../storyboard/protected-context.js');
40
41
  var import_spec_conformance = require('./spec-conformance.js');
41
42
  var import_default_invariants = require('../storyboard/default-invariants.js');
42
43
  var import_agent_routing = require('../storyboard/agent-routing.js');
@@ -429,6 +430,12 @@ async function comply(agentUrl, options = {}) {
429
430
  `Refusing to run compliance against a non-HTTPS URL: ${agentUrl}. Production agents MUST terminate TLS. Pass { allow_http: true } (or --allow-http) for local development.`
430
431
  );
431
432
  }
433
+ const forced = options;
434
+ if (forced.prepared_fixtures !== void 0) {
435
+ throw new Error(
436
+ "comply() does not accept prepared_fixtures. Prepared state binds one storyboard digest, and comply selects its storyboard set from capability discovery at runtime \u2014 so there is no scope to authorize against before the agent is contacted. Call prepareStoryboardFixtures() and pass the state to runStoryboard() or runStoryboardStep() per storyboard instead. See docs/guides/COLLECTION-FIXTURE-FOUNDATION.md section 4."
437
+ );
438
+ }
432
439
  return (0, import_client.withTestClientScope)(
433
440
  () => (0, import_protocols.withMCPConnectionScope)(
434
441
  async () => {
@@ -1077,6 +1084,16 @@ function buildRoutedStoryboardRun(agentUrl, selected, runOptions, route) {
1077
1084
  const leak = testKitCredentialLeak(storyboard, agentUnderTestKeys);
1078
1085
  if (leak) return { refused: `${selected.id} cannot be routed: ${leak}` };
1079
1086
  const context = runOptions.context !== void 0 || route.context !== void 0 ? { ...runOptions.context, ...route.context } : void 0;
1087
+ if (context !== void 0) {
1088
+ const reserved = Object.keys(context).filter(
1089
+ (key) => (0, import_protected_context.isProtectedContextKey)(key) || key === "__proto__" || key === "constructor" || key === "prototype"
1090
+ );
1091
+ if (reserved.length > 0) {
1092
+ return {
1093
+ refused: `${selected.id} cannot be routed: route context declares reserved or prototype-sensitive key(s) ${reserved.join(", ")}; prepared state cannot be imported from route JSON`
1094
+ };
1095
+ }
1096
+ }
1080
1097
  const options = {
1081
1098
  ...runOptions,
1082
1099
  agents: isolated,
@@ -16,6 +16,7 @@ import {
16
16
  } from "../storyboard/runner.mjs";
17
17
  import { applyNativeA2AComplianceTransportOptions } from "../storyboard/native-a2a-compliance.mjs";
18
18
  import { validateTestKit } from "../storyboard/test-kit.mjs";
19
+ import { isProtectedContextKey } from "../storyboard/protected-context.mjs";
19
20
  import { checkAccountDiscoveryGate, isAccountBearingSpecialism } from "./spec-conformance.mjs";
20
21
  import { registerDefaultInvariants } from "../storyboard/default-invariants.mjs";
21
22
  import { hasAnyRequiredTool } from "../storyboard/agent-routing.mjs";
@@ -419,6 +420,12 @@ async function comply(agentUrl, options = {}) {
419
420
  `Refusing to run compliance against a non-HTTPS URL: ${agentUrl}. Production agents MUST terminate TLS. Pass { allow_http: true } (or --allow-http) for local development.`
420
421
  );
421
422
  }
423
+ const forced = options;
424
+ if (forced.prepared_fixtures !== void 0) {
425
+ throw new Error(
426
+ "comply() does not accept prepared_fixtures. Prepared state binds one storyboard digest, and comply selects its storyboard set from capability discovery at runtime \u2014 so there is no scope to authorize against before the agent is contacted. Call prepareStoryboardFixtures() and pass the state to runStoryboard() or runStoryboardStep() per storyboard instead. See docs/guides/COLLECTION-FIXTURE-FOUNDATION.md section 4."
427
+ );
428
+ }
422
429
  return withTestClientScope(
423
430
  () => withMCPConnectionScope(
424
431
  async () => {
@@ -1067,6 +1074,16 @@ function buildRoutedStoryboardRun(agentUrl, selected, runOptions, route) {
1067
1074
  const leak = testKitCredentialLeak(storyboard, agentUnderTestKeys);
1068
1075
  if (leak) return { refused: `${selected.id} cannot be routed: ${leak}` };
1069
1076
  const context = runOptions.context !== void 0 || route.context !== void 0 ? { ...runOptions.context, ...route.context } : void 0;
1077
+ if (context !== void 0) {
1078
+ const reserved = Object.keys(context).filter(
1079
+ (key) => isProtectedContextKey(key) || key === "__proto__" || key === "constructor" || key === "prototype"
1080
+ );
1081
+ if (reserved.length > 0) {
1082
+ return {
1083
+ refused: `${selected.id} cannot be routed: route context declares reserved or prototype-sensitive key(s) ${reserved.join(", ")}; prepared state cannot be imported from route JSON`
1084
+ };
1085
+ }
1086
+ }
1070
1087
  const options = {
1071
1088
  ...runOptions,
1072
1089
  agents: isolated,
@@ -1,4 +1,5 @@
1
1
  export { assertPendingWebFlowStoreRoundTrip, type PendingWebFlowStoreRoundTripOptions } from './pending-web-flow-store.mjs';
2
+ export { PreparedFixturesDeniedError } from '../errors/index.mjs';
2
3
  export { testAgent, testAgentA2A, testAgentClient, createTestAgent, TEST_AGENT_TOKEN, TEST_AGENT_MCP_CONFIG, TEST_AGENT_A2A_CONFIG, testAgentNoAuth, testAgentNoAuthA2A, TEST_AGENT_NO_AUTH_MCP_CONFIG, TEST_AGENT_NO_AUTH_A2A_CONFIG, creativeAgent, } from './test-helpers.mjs';
3
4
  export { testAgent as runAgentTests, formatTestResults, formatTestResultsJSON, formatTestResultsSummary, setAgentTesterLogger, getLogger, createTestClient, runStep, testHealthCheck, testDiscovery, testCreateMediaBuy, testFullSalesFlow, testReportingFlow, testCreativeSync, testCreativeInline, testCreativeFlow, testSignalsFlow, testErrorHandling, testValidation, testPricingEdgeCases, testTemporalValidation, testBehaviorAnalysis, testResponseConsistency, testGovernancePropertyLists, testGovernanceContentStandards, testPropertyListFilters, testSISessionLifecycle, testSIAvailability, testSIHandoff, testCapabilityDiscovery, testSyncAudiences, resolveAccountForMediaBuy, resolveAccountForAudiences, testSchemaCompliance, testMediaBuyLifecycle, testTerminalStateEnforcement, testPackageLifecycle, testCreativeStateMachine, testMediaBuyStateMachine, testAccountStateMachine, testSessionStateMachine, testDeliverySimulation, testBudgetSimulation, testControllerValidation, testBrandRightsFlow, hasBrandRightsTools, hasGovernanceTools, hasSITools, likelySupportsV3, testAllScenarios, getApplicableScenarios, SCENARIO_REQUIREMENTS, DEFAULT_SCENARIOS, formatSuiteResults, formatSuiteResultsJSON, type TestScenario, type TestOptions, type OrchestratorOptions, type TestResult, type SuiteResult, type TestStepResult, type AgentProfile, type TaskResult, type TestClient, type Logger, } from './agent-tester.mjs';
4
5
  export { comply, buildComplianceBundleResults, formatComplianceResults, formatComplianceResultsJSON, buildComplianceSummary, SAMPLE_BRIEFS, getBriefById, getBriefsByVertical, type ComplyOptions, type ComplianceBundleAssessmentOptions, type ComplyRouteStoryboardContext, type ComplyStoryboardRoute, type ComplyStoryboardRouting, type ComplyStoryboardSkip, type ComplianceTrack, type TrackResult, type TestedTrackEntry, type TrackStatus, type ComplianceBundleResult, type ComplianceBundleStatus, type ComplianceResult, type ComplianceSummary, type ComplianceSummaryArtifact, type BuildSummaryOptions, type AdvisoryObservation, type ObservationSource, type SampleBrief, } from './compliance/index.mjs';
@@ -18,5 +19,7 @@ export { runAgainstLocalAgent } from './local-agent-runner.mjs';
18
19
  export type { LocalAgentRunResult, PerStoryboardOverride, RunAgainstLocalAgentOptions } from './local-agent-runner.mjs';
19
20
  export { registerExternalSchemaRoot, unregisterExternalSchemaRoot, withExternalSchemaRoot, withServedReleaseSchemaRoots, } from '../validation/index.mjs';
20
21
  export { runStoryboard, runStoryboardStep, applyAdcpVersionRunOptions, applyStoryboardVersionOptions, getFirstStepPreview, parseStoryboard, loadStoryboardFile, normalizeValidationOnlyTasks, VALIDATION_ONLY_TASK, applyFixtureBindingsToRequest, buildFixtureResolutionSpecs, FixtureBindingRegistry, matchesFixtureRequirements, normalizeFixtureMatchExpression, validateFixtureResolutionDeclarations, getComplianceCacheDir, loadComplianceIndex, listBundles, loadBundleStoryboards, listAllComplianceStoryboards, getComplianceStoryboardById, findBundleById, resolveBundleOrStoryboard, resolveStoryboardsForCapabilities, isComplianceVersionSupported, CapabilityResolutionError, TASK_TO_METHOD, executeStoryboardTask, expandCreativeAssetDirectives, findUnresolvedCreativeAssetDirectives, extractContext, injectContext, runValidations, resolvePath, RateLimitTripObserver, RATE_LIMIT_TRIP_CONTRACT, RATE_LIMIT_TRIP_DEFAULT_REPLAY_MAX_WAIT_SECONDS, RATE_LIMIT_TRIP_MAX_ATTEMPTS_MAX, RATE_LIMIT_TRIP_MAX_ATTEMPTS_MIN, validateRateLimitTripSpec, getSandboxEntities, getSandboxBrands, getSandboxBrand, isSandboxDomain, clearSandboxCache, registerAssertion, getAssertion, listAssertions, listDefaultAssertions, clearAssertionRegistry, resolveAssertions, type AssertionSpec, type AssertionContext, type AssertionResult, type RegisterAssertionOptions, type Storyboard, type StoryboardFixtureResolution, type FixtureResolutionStrategy, type FixtureMatchOperator, type FixtureMatchClause, type FixtureResolutionDeclaration, type ProductFixtureResolutionDeclaration, type PricingOptionFixtureResolutionDeclaration, type FixtureResolutionStatus, type FixtureResolutionRecord, type FixtureResolutionAttempt, type FixtureResolutionEvidence, type FixtureResolutionCoverageGap, type StoryboardInvariants, type StoryboardInvariantsObject, type StepInvariantsObject, type StoryboardPhase, type StoryboardStep, type RateLimitTripSpec, type StoryboardValidation, type RateLimitTripClient, type RateLimitTripFailureCode, type RateLimitTripObservation, type RateLimitTripObserverOptions, type RateLimitTripResponseSnapshot, type RateLimitTripStructuredResult, type RateLimitTripTaskOptions, type StoryboardContext, type StoryboardRunOptions, type TrustedMatchContextProviderEndpoint, type TrustedMatchContextRegistrationContext, type TrustedMatchContextRouterRunnerOptions, type TrustedMatchPublisherAuthOperation, type TrustedMatchPublisherCredentialState, type TrustedMatchPublisherAuthTls, type TrustedMatchPublisherAuthProbeConfiguration, type TrustedMatchPublisherAuthRunner, type ValidationResult, type StoryboardStepPreview, type StoryboardStepResult, type StoryboardStepHint, type StoryboardStepHintBase, type ContextValueRejectedHint, type ShapeDriftHint, type MissingRequiredFieldHint, type FormatMismatchHint, type MonotonicViolationHint, type ContextProvenanceEntry, type StoryboardPhaseResult, type StoryboardResult, type RunnerNotice, type NoticeCode, type NoticeSeverity, type AgentCapabilities, type BundleKind, type BundleRef, type CapabilityResolutionCode, type ComplianceIndex, type ComplianceIndexProtocol, type ComplianceIndexSpecialism, type ResolveOptions, type ResolvedBundle, type ResolvedStoryboards, type SandboxBrand, type SandboxAgent, type SandboxEntities, type BrandJson, type AdagentsJson, gradeOAuthMetadataGraph, gradeOAuthMetadataGraphVector, loadOAuthMetadataGraphVectors, normalizeOAuthResourceForComparison, redactOAuthUrlForOutput, type GradeOAuthMetadataGraphOptions, type OAuthMetadataGraphErrorCode, type OAuthMetadataGraphFinding, type OAuthMetadataGraphGrade, type OAuthMetadataGraphObservation, type OAuthMetadataGraphVector, type OAuthMetadataGraphVectorCorpus, BrandJsonSchema, AdagentsJsonSchema, MCP_SESSION_PROBE_TASK, } from './storyboard/index.mjs';
22
+ export { COLLECTION_DIAGNOSTIC_LIMIT, COLLECTION_PAIR_LIMIT, COLLECTION_TARGETING_MODES, COLLECTION_WITNESS_KINDS, diffCollectionPairSets, evaluateCollectionSelection, formatCollectionPair, isProtectedContextKey, isTrustedPreparedFixtures, normalizeCollectionSelectors, prepareStoryboardFixtures, PREPARED_FIXTURES_CONTRACT_VERSION, PreparedStoryboardFixtures, productSatisfiesCollectionSelection, PROTECTED_CONTEXT_PREFIX, summarizeCollectionPairs, ProtectedContextViolation, readCollectionWitness, withPreparedFixtures, } from './storyboard/index.mjs';
23
+ export type { CollectionNormalizationCode, CollectionNormalizationFailure, CollectionNormalizationResult, CrossPublisherCollectionRelation, CollectionPair, CollectionSelectionEvaluation, CollectionSelectionSelector, CollectionSelectionWitness, CollectionSelectorObject, CollectionWitnessKind, CollectionWitnessReadResult, FixtureContextOutput, NormalizedCollectionSelectors, PreparedFixtureBinding, PreparedFixtureSelection, PreparedFixturesAuthorizer, PreparedFixturesDecision, PreparedFixturesDisposition, PreparedFixturesLookup, PreparedFixturesRefusal, PreparedFixturesRefusalCode, PreparedFixturesReference, PreparedSchemaArtifact, ProtectedContextViolationCode, ResolvedCollectionSelectionSelector, } from './storyboard/index.mjs';
21
24
  export { resolveCreativeBuildProbe, validateCreativeBuildProbeSpec } from './storyboard/index.mjs';
22
25
  export type { CreativeBuildProbeSpec, CreativeBuildProbeInputFixture, CreativeBuildProbeResolution, } from './storyboard/index.mjs';
@@ -1,4 +1,5 @@
1
1
  export { assertPendingWebFlowStoreRoundTrip, type PendingWebFlowStoreRoundTripOptions } from './pending-web-flow-store';
2
+ export { PreparedFixturesDeniedError } from '../errors';
2
3
  export { testAgent, testAgentA2A, testAgentClient, createTestAgent, TEST_AGENT_TOKEN, TEST_AGENT_MCP_CONFIG, TEST_AGENT_A2A_CONFIG, testAgentNoAuth, testAgentNoAuthA2A, TEST_AGENT_NO_AUTH_MCP_CONFIG, TEST_AGENT_NO_AUTH_A2A_CONFIG, creativeAgent, } from './test-helpers';
3
4
  export { testAgent as runAgentTests, formatTestResults, formatTestResultsJSON, formatTestResultsSummary, setAgentTesterLogger, getLogger, createTestClient, runStep, testHealthCheck, testDiscovery, testCreateMediaBuy, testFullSalesFlow, testReportingFlow, testCreativeSync, testCreativeInline, testCreativeFlow, testSignalsFlow, testErrorHandling, testValidation, testPricingEdgeCases, testTemporalValidation, testBehaviorAnalysis, testResponseConsistency, testGovernancePropertyLists, testGovernanceContentStandards, testPropertyListFilters, testSISessionLifecycle, testSIAvailability, testSIHandoff, testCapabilityDiscovery, testSyncAudiences, resolveAccountForMediaBuy, resolveAccountForAudiences, testSchemaCompliance, testMediaBuyLifecycle, testTerminalStateEnforcement, testPackageLifecycle, testCreativeStateMachine, testMediaBuyStateMachine, testAccountStateMachine, testSessionStateMachine, testDeliverySimulation, testBudgetSimulation, testControllerValidation, testBrandRightsFlow, hasBrandRightsTools, hasGovernanceTools, hasSITools, likelySupportsV3, testAllScenarios, getApplicableScenarios, SCENARIO_REQUIREMENTS, DEFAULT_SCENARIOS, formatSuiteResults, formatSuiteResultsJSON, type TestScenario, type TestOptions, type OrchestratorOptions, type TestResult, type SuiteResult, type TestStepResult, type AgentProfile, type TaskResult, type TestClient, type Logger, } from './agent-tester';
4
5
  export { comply, buildComplianceBundleResults, formatComplianceResults, formatComplianceResultsJSON, buildComplianceSummary, SAMPLE_BRIEFS, getBriefById, getBriefsByVertical, type ComplyOptions, type ComplianceBundleAssessmentOptions, type ComplyRouteStoryboardContext, type ComplyStoryboardRoute, type ComplyStoryboardRouting, type ComplyStoryboardSkip, type ComplianceTrack, type TrackResult, type TestedTrackEntry, type TrackStatus, type ComplianceBundleResult, type ComplianceBundleStatus, type ComplianceResult, type ComplianceSummary, type ComplianceSummaryArtifact, type BuildSummaryOptions, type AdvisoryObservation, type ObservationSource, type SampleBrief, } from './compliance';
@@ -18,5 +19,7 @@ export { runAgainstLocalAgent } from './local-agent-runner';
18
19
  export type { LocalAgentRunResult, PerStoryboardOverride, RunAgainstLocalAgentOptions } from './local-agent-runner';
19
20
  export { registerExternalSchemaRoot, unregisterExternalSchemaRoot, withExternalSchemaRoot, withServedReleaseSchemaRoots, } from '../validation';
20
21
  export { runStoryboard, runStoryboardStep, applyAdcpVersionRunOptions, applyStoryboardVersionOptions, getFirstStepPreview, parseStoryboard, loadStoryboardFile, normalizeValidationOnlyTasks, VALIDATION_ONLY_TASK, applyFixtureBindingsToRequest, buildFixtureResolutionSpecs, FixtureBindingRegistry, matchesFixtureRequirements, normalizeFixtureMatchExpression, validateFixtureResolutionDeclarations, getComplianceCacheDir, loadComplianceIndex, listBundles, loadBundleStoryboards, listAllComplianceStoryboards, getComplianceStoryboardById, findBundleById, resolveBundleOrStoryboard, resolveStoryboardsForCapabilities, isComplianceVersionSupported, CapabilityResolutionError, TASK_TO_METHOD, executeStoryboardTask, expandCreativeAssetDirectives, findUnresolvedCreativeAssetDirectives, extractContext, injectContext, runValidations, resolvePath, RateLimitTripObserver, RATE_LIMIT_TRIP_CONTRACT, RATE_LIMIT_TRIP_DEFAULT_REPLAY_MAX_WAIT_SECONDS, RATE_LIMIT_TRIP_MAX_ATTEMPTS_MAX, RATE_LIMIT_TRIP_MAX_ATTEMPTS_MIN, validateRateLimitTripSpec, getSandboxEntities, getSandboxBrands, getSandboxBrand, isSandboxDomain, clearSandboxCache, registerAssertion, getAssertion, listAssertions, listDefaultAssertions, clearAssertionRegistry, resolveAssertions, type AssertionSpec, type AssertionContext, type AssertionResult, type RegisterAssertionOptions, type Storyboard, type StoryboardFixtureResolution, type FixtureResolutionStrategy, type FixtureMatchOperator, type FixtureMatchClause, type FixtureResolutionDeclaration, type ProductFixtureResolutionDeclaration, type PricingOptionFixtureResolutionDeclaration, type FixtureResolutionStatus, type FixtureResolutionRecord, type FixtureResolutionAttempt, type FixtureResolutionEvidence, type FixtureResolutionCoverageGap, type StoryboardInvariants, type StoryboardInvariantsObject, type StepInvariantsObject, type StoryboardPhase, type StoryboardStep, type RateLimitTripSpec, type StoryboardValidation, type RateLimitTripClient, type RateLimitTripFailureCode, type RateLimitTripObservation, type RateLimitTripObserverOptions, type RateLimitTripResponseSnapshot, type RateLimitTripStructuredResult, type RateLimitTripTaskOptions, type StoryboardContext, type StoryboardRunOptions, type TrustedMatchContextProviderEndpoint, type TrustedMatchContextRegistrationContext, type TrustedMatchContextRouterRunnerOptions, type TrustedMatchPublisherAuthOperation, type TrustedMatchPublisherCredentialState, type TrustedMatchPublisherAuthTls, type TrustedMatchPublisherAuthProbeConfiguration, type TrustedMatchPublisherAuthRunner, type ValidationResult, type StoryboardStepPreview, type StoryboardStepResult, type StoryboardStepHint, type StoryboardStepHintBase, type ContextValueRejectedHint, type ShapeDriftHint, type MissingRequiredFieldHint, type FormatMismatchHint, type MonotonicViolationHint, type ContextProvenanceEntry, type StoryboardPhaseResult, type StoryboardResult, type RunnerNotice, type NoticeCode, type NoticeSeverity, type AgentCapabilities, type BundleKind, type BundleRef, type CapabilityResolutionCode, type ComplianceIndex, type ComplianceIndexProtocol, type ComplianceIndexSpecialism, type ResolveOptions, type ResolvedBundle, type ResolvedStoryboards, type SandboxBrand, type SandboxAgent, type SandboxEntities, type BrandJson, type AdagentsJson, gradeOAuthMetadataGraph, gradeOAuthMetadataGraphVector, loadOAuthMetadataGraphVectors, normalizeOAuthResourceForComparison, redactOAuthUrlForOutput, type GradeOAuthMetadataGraphOptions, type OAuthMetadataGraphErrorCode, type OAuthMetadataGraphFinding, type OAuthMetadataGraphGrade, type OAuthMetadataGraphObservation, type OAuthMetadataGraphVector, type OAuthMetadataGraphVectorCorpus, BrandJsonSchema, AdagentsJsonSchema, MCP_SESSION_PROBE_TASK, } from './storyboard';
22
+ export { COLLECTION_DIAGNOSTIC_LIMIT, COLLECTION_PAIR_LIMIT, COLLECTION_TARGETING_MODES, COLLECTION_WITNESS_KINDS, diffCollectionPairSets, evaluateCollectionSelection, formatCollectionPair, isProtectedContextKey, isTrustedPreparedFixtures, normalizeCollectionSelectors, prepareStoryboardFixtures, PREPARED_FIXTURES_CONTRACT_VERSION, PreparedStoryboardFixtures, productSatisfiesCollectionSelection, PROTECTED_CONTEXT_PREFIX, summarizeCollectionPairs, ProtectedContextViolation, readCollectionWitness, withPreparedFixtures, } from './storyboard';
23
+ export type { CollectionNormalizationCode, CollectionNormalizationFailure, CollectionNormalizationResult, CrossPublisherCollectionRelation, CollectionPair, CollectionSelectionEvaluation, CollectionSelectionSelector, CollectionSelectionWitness, CollectionSelectorObject, CollectionWitnessKind, CollectionWitnessReadResult, FixtureContextOutput, NormalizedCollectionSelectors, PreparedFixtureBinding, PreparedFixtureSelection, PreparedFixturesAuthorizer, PreparedFixturesDecision, PreparedFixturesDisposition, PreparedFixturesLookup, PreparedFixturesRefusal, PreparedFixturesRefusalCode, PreparedFixturesReference, PreparedSchemaArtifact, ProtectedContextViolationCode, ResolvedCollectionSelectionSelector, } from './storyboard';
21
24
  export { resolveCreativeBuildProbe, validateCreativeBuildProbeSpec } from './storyboard';
22
25
  export type { CreativeBuildProbeSpec, CreativeBuildProbeInputFixture, CreativeBuildProbeResolution, } from './storyboard';