@adcp/sdk 13.0.0-rc.10 → 13.0.0-rc.13

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 (116) hide show
  1. package/dist/lib/core/AgentClient.d.mts +12 -3
  2. package/dist/lib/core/AgentClient.d.ts +12 -3
  3. package/dist/lib/core/AgentClient.d.ts.map +1 -1
  4. package/dist/lib/core/AgentClient.js +12 -3
  5. package/dist/lib/core/AgentClient.js.map +1 -1
  6. package/dist/lib/core/AgentClient.mjs +12 -3
  7. package/dist/lib/core/AgentClient.mjs.map +1 -1
  8. package/dist/lib/core/SingleAgentClient.d.mts +13 -3
  9. package/dist/lib/core/SingleAgentClient.d.ts +13 -3
  10. package/dist/lib/core/SingleAgentClient.d.ts.map +1 -1
  11. package/dist/lib/core/SingleAgentClient.js +52 -31
  12. package/dist/lib/core/SingleAgentClient.js.map +1 -1
  13. package/dist/lib/core/SingleAgentClient.mjs +52 -31
  14. package/dist/lib/core/SingleAgentClient.mjs.map +1 -1
  15. package/dist/lib/index.d.mts +1 -1
  16. package/dist/lib/index.d.ts +1 -1
  17. package/dist/lib/index.d.ts.map +1 -1
  18. package/dist/lib/index.js +8 -0
  19. package/dist/lib/index.js.map +1 -1
  20. package/dist/lib/index.mjs +8 -0
  21. package/dist/lib/index.mjs.map +1 -1
  22. package/dist/lib/registry/types.generated.d.mts +48 -1
  23. package/dist/lib/registry/types.generated.d.ts +48 -1
  24. package/dist/lib/registry/types.generated.d.ts.map +1 -1
  25. package/dist/lib/registry/types.generated.js.map +1 -1
  26. package/dist/lib/schemas-data/v2.5/_provenance.json +1 -1
  27. package/dist/lib/server/decisioning/runtime/from-platform.d.mts +1 -1
  28. package/dist/lib/server/decisioning/runtime/from-platform.d.ts +1 -1
  29. package/dist/lib/server/decisioning/runtime/from-platform.d.ts.map +1 -1
  30. package/dist/lib/server/decisioning/runtime/from-platform.js +389 -65
  31. package/dist/lib/server/decisioning/runtime/from-platform.js.map +1 -1
  32. package/dist/lib/server/decisioning/runtime/from-platform.mjs +389 -65
  33. package/dist/lib/server/decisioning/runtime/from-platform.mjs.map +1 -1
  34. package/dist/lib/testing/compliance/comply.d.ts.map +1 -1
  35. package/dist/lib/testing/compliance/comply.js +8 -2
  36. package/dist/lib/testing/compliance/comply.js.map +1 -1
  37. package/dist/lib/testing/compliance/comply.mjs +8 -2
  38. package/dist/lib/testing/compliance/comply.mjs.map +1 -1
  39. package/dist/lib/testing/compliance/spec-conformance.d.ts.map +1 -1
  40. package/dist/lib/testing/compliance/spec-conformance.js +2 -0
  41. package/dist/lib/testing/compliance/spec-conformance.js.map +1 -1
  42. package/dist/lib/testing/compliance/spec-conformance.mjs +2 -0
  43. package/dist/lib/testing/compliance/spec-conformance.mjs.map +1 -1
  44. package/dist/lib/testing/compliance/summary.d.mts +2 -0
  45. package/dist/lib/testing/compliance/summary.d.ts +2 -0
  46. package/dist/lib/testing/compliance/summary.d.ts.map +1 -1
  47. package/dist/lib/testing/compliance/summary.js +3 -2
  48. package/dist/lib/testing/compliance/summary.js.map +1 -1
  49. package/dist/lib/testing/compliance/summary.mjs +3 -2
  50. package/dist/lib/testing/compliance/summary.mjs.map +1 -1
  51. package/dist/lib/testing/compliance/types.d.mts +4 -0
  52. package/dist/lib/testing/compliance/types.d.ts +4 -0
  53. package/dist/lib/testing/compliance/types.d.ts.map +1 -1
  54. package/dist/lib/testing/compliance/types.js.map +1 -1
  55. package/dist/lib/testing/storyboard/junit.js +49 -32
  56. package/dist/lib/testing/storyboard/junit.js.map +1 -1
  57. package/dist/lib/testing/storyboard/junit.mjs +49 -32
  58. package/dist/lib/testing/storyboard/junit.mjs.map +1 -1
  59. package/dist/lib/testing/storyboard/loader.d.ts.map +1 -1
  60. package/dist/lib/testing/storyboard/loader.js +26 -0
  61. package/dist/lib/testing/storyboard/loader.js.map +1 -1
  62. package/dist/lib/testing/storyboard/loader.mjs +26 -0
  63. package/dist/lib/testing/storyboard/loader.mjs.map +1 -1
  64. package/dist/lib/testing/storyboard/runner.d.ts.map +1 -1
  65. package/dist/lib/testing/storyboard/runner.js +66 -15
  66. package/dist/lib/testing/storyboard/runner.js.map +1 -1
  67. package/dist/lib/testing/storyboard/runner.mjs +70 -16
  68. package/dist/lib/testing/storyboard/runner.mjs.map +1 -1
  69. package/dist/lib/testing/storyboard/types.d.mts +26 -1
  70. package/dist/lib/testing/storyboard/types.d.ts +26 -1
  71. package/dist/lib/testing/storyboard/types.d.ts.map +1 -1
  72. package/dist/lib/testing/storyboard/types.js.map +1 -1
  73. package/dist/lib/testing/storyboard/types.mjs.map +1 -1
  74. package/dist/lib/testing/storyboard/validations.d.mts +11 -0
  75. package/dist/lib/testing/storyboard/validations.d.ts +11 -0
  76. package/dist/lib/testing/storyboard/validations.d.ts.map +1 -1
  77. package/dist/lib/testing/storyboard/validations.js +30 -13
  78. package/dist/lib/testing/storyboard/validations.js.map +1 -1
  79. package/dist/lib/testing/storyboard/validations.mjs +27 -13
  80. package/dist/lib/testing/storyboard/validations.mjs.map +1 -1
  81. package/dist/lib/v2/projection/augment-response.d.mts +45 -0
  82. package/dist/lib/v2/projection/augment-response.d.ts +45 -0
  83. package/dist/lib/v2/projection/augment-response.d.ts.map +1 -1
  84. package/dist/lib/v2/projection/augment-response.js +54 -0
  85. package/dist/lib/v2/projection/augment-response.js.map +1 -1
  86. package/dist/lib/v2/projection/augment-response.mjs +52 -0
  87. package/dist/lib/v2/projection/augment-response.mjs.map +1 -1
  88. package/dist/lib/v2/projection/index.d.mts +7 -1
  89. package/dist/lib/v2/projection/index.d.ts +7 -1
  90. package/dist/lib/v2/projection/index.d.ts.map +1 -1
  91. package/dist/lib/v2/projection/index.js +9 -0
  92. package/dist/lib/v2/projection/index.js.map +1 -1
  93. package/dist/lib/v2/projection/index.mjs +10 -0
  94. package/dist/lib/v2/projection/index.mjs.map +1 -1
  95. package/dist/lib/v2/projection/legacy-routes.d.mts +24 -0
  96. package/dist/lib/v2/projection/legacy-routes.d.ts +25 -0
  97. package/dist/lib/v2/projection/legacy-routes.d.ts.map +1 -0
  98. package/dist/lib/v2/projection/legacy-routes.js +163 -0
  99. package/dist/lib/v2/projection/legacy-routes.js.map +1 -0
  100. package/dist/lib/v2/projection/legacy-routes.mjs +138 -0
  101. package/dist/lib/v2/projection/legacy-routes.mjs.map +1 -0
  102. package/dist/lib/v2/projection/v1-to-v2.d.mts +3 -0
  103. package/dist/lib/v2/projection/v1-to-v2.d.ts +3 -0
  104. package/dist/lib/v2/projection/v1-to-v2.d.ts.map +1 -1
  105. package/dist/lib/v2/projection/v1-to-v2.js +2 -1
  106. package/dist/lib/v2/projection/v1-to-v2.js.map +1 -1
  107. package/dist/lib/v2/projection/v1-to-v2.mjs +2 -1
  108. package/dist/lib/v2/projection/v1-to-v2.mjs.map +1 -1
  109. package/dist/lib/version.d.mts +3 -3
  110. package/dist/lib/version.d.ts +3 -3
  111. package/dist/lib/version.js +3 -3
  112. package/dist/lib/version.js.map +1 -1
  113. package/dist/lib/version.mjs +3 -3
  114. package/dist/lib/version.mjs.map +1 -1
  115. package/docs/migration-12-to-13.md +56 -2
  116. package/package.json +3 -1
@@ -17,7 +17,10 @@ import { detectContextRejectionHints } from "./rejection-hints.mjs";
17
17
  import { detectShapeDriftHints } from "./shape-drift-hints.mjs";
18
18
  import { detectStrictValidationHints } from "./strict-validation-hints.mjs";
19
19
  import {
20
- runValidations
20
+ runValidations,
21
+ decorateValidationResult,
22
+ validationFailsStep,
23
+ RUNNER_CAPABILITY_VERSION
21
24
  } from "./validations.mjs";
22
25
  import { PARALLEL_DISPATCH_CONTRACT, runParallelDispatches, validateParallelDispatchSpec } from "./parallel-dispatch.mjs";
23
26
  import { resolvePath, resolvePortableIdentifierPathAll, toJsonPointer, validatePortableIdentifierPath } from "./path.mjs";
@@ -703,6 +706,7 @@ function buildCapabilityUnsupportedResult(agentUrls, storyboard, detail) {
703
706
  passed_count: 0,
704
707
  failed_count: 0,
705
708
  skipped_count: 1,
709
+ runner_capability_version: RUNNER_CAPABILITY_VERSION,
706
710
  tested_at: (/* @__PURE__ */ new Date()).toISOString(),
707
711
  strict_validation_summary: {
708
712
  observable: false,
@@ -785,6 +789,7 @@ function buildRequirementUnmetResult(agentUrls, storyboard, requirement, detail)
785
789
  passed_count: 0,
786
790
  failed_count: 0,
787
791
  skipped_count: 1,
792
+ runner_capability_version: RUNNER_CAPABILITY_VERSION,
788
793
  tested_at: (/* @__PURE__ */ new Date()).toISOString(),
789
794
  strict_validation_summary: {
790
795
  observable: false,
@@ -832,6 +837,7 @@ function buildRequiredAnyOfToolsMissingResult(agentUrls, storyboard, detail) {
832
837
  passed_count: 0,
833
838
  failed_count: 0,
834
839
  skipped_count: 1,
840
+ runner_capability_version: RUNNER_CAPABILITY_VERSION,
835
841
  tested_at: (/* @__PURE__ */ new Date()).toISOString(),
836
842
  strict_validation_summary: {
837
843
  observable: false,
@@ -1040,6 +1046,7 @@ function buildDiscoveryFailedResult(agentUrls, storyboard, discoveryStep) {
1040
1046
  passed_count: 0,
1041
1047
  failed_count: 1,
1042
1048
  skipped_count: 0,
1049
+ runner_capability_version: RUNNER_CAPABILITY_VERSION,
1043
1050
  tested_at: (/* @__PURE__ */ new Date()).toISOString(),
1044
1051
  strict_validation_summary: {
1045
1052
  observable: false,
@@ -1088,6 +1095,7 @@ function buildRequiredToolsMissingResult(agentUrls, storyboard, detail) {
1088
1095
  passed_count: 0,
1089
1096
  failed_count: 0,
1090
1097
  skipped_count: 1,
1098
+ runner_capability_version: RUNNER_CAPABILITY_VERSION,
1091
1099
  tested_at: (/* @__PURE__ */ new Date()).toISOString(),
1092
1100
  strict_validation_summary: {
1093
1101
  observable: false,
@@ -1809,7 +1817,9 @@ async function executeStoryboardPass(agentUrls, storyboard, options, dispatchOff
1809
1817
  }
1810
1818
  stepResults.push(result2);
1811
1819
  priorStepResults.set(step.id, result2);
1812
- const schemaInvalidResponse = result2.validations.some((v) => v.check === "response_schema" && !v.passed);
1820
+ const schemaInvalidResponse = result2.validations.some(
1821
+ (v) => v.check === "response_schema" && validationFailsStep(v)
1822
+ );
1813
1823
  for (const spec of assertions) {
1814
1824
  if (!spec.onStep) continue;
1815
1825
  if (stepDisablesAssertion(step.invariants, spec.id)) continue;
@@ -2039,6 +2049,7 @@ async function executeStoryboardPass(agentUrls, storyboard, options, dispatchOff
2039
2049
  const schemasUsed = collectSchemasUsed(phaseResults);
2040
2050
  const strictSummary = summarizeStrictValidation(phaseResults);
2041
2051
  const validationsNotApplicable = countValidationsNotApplicable(phaseResults);
2052
+ const validationsAdvisoryFailed = countValidationsAdvisoryFailed(phaseResults);
2042
2053
  const notices = mergeRunnerNotices([
2043
2054
  ...collectCapabilityNotices(storyboard, profile ?? options._profile),
2044
2055
  ...collectStepNotices(phaseResults)
@@ -2064,7 +2075,9 @@ async function executeStoryboardPass(agentUrls, storyboard, options, dispatchOff
2064
2075
  passed_count: passedCount,
2065
2076
  failed_count: failedCount,
2066
2077
  skipped_count: skippedCount,
2078
+ ...validationsAdvisoryFailed > 0 ? { validations_advisory_failed: validationsAdvisoryFailed } : {},
2067
2079
  ...validationsNotApplicable > 0 ? { validations_not_applicable: validationsNotApplicable } : {},
2080
+ runner_capability_version: RUNNER_CAPABILITY_VERSION,
2068
2081
  tested_at: (/* @__PURE__ */ new Date()).toISOString(),
2069
2082
  ...schemasUsed.length > 0 ? { schemas_used: schemasUsed } : {},
2070
2083
  ...assertionResults.length > 0 ? { assertions: assertionResults } : {},
@@ -2146,6 +2159,7 @@ async function runMultiPass(agentUrls, storyboard, options) {
2146
2159
  passed_count: result.passed_count,
2147
2160
  failed_count: result.failed_count,
2148
2161
  skipped_count: result.skipped_count,
2162
+ ...result.validations_advisory_failed ? { validations_advisory_failed: result.validations_advisory_failed } : {},
2149
2163
  ...result.validations_not_applicable ? { validations_not_applicable: result.validations_not_applicable } : {},
2150
2164
  duration_ms: result.total_duration_ms
2151
2165
  });
@@ -2155,6 +2169,7 @@ async function runMultiPass(agentUrls, storyboard, options) {
2155
2169
  const passed = passes.reduce((sum, p) => sum + p.passed_count, 0);
2156
2170
  const failed = passes.reduce((sum, p) => sum + p.failed_count, 0);
2157
2171
  const skipped = passes.reduce((sum, p) => sum + p.skipped_count, 0);
2172
+ const advisoryFailed = passes.reduce((sum, p) => sum + (p.validations_advisory_failed ?? 0), 0);
2158
2173
  const notApplicable = passes.reduce((sum, p) => sum + (p.validations_not_applicable ?? 0), 0);
2159
2174
  const schemasUsed = passResults.flatMap((r) => r.schemas_used ?? []);
2160
2175
  const schemasDedup = [...new Map(schemasUsed.map((s) => [s.schema_id, s])).values()];
@@ -2174,7 +2189,9 @@ async function runMultiPass(agentUrls, storyboard, options) {
2174
2189
  passed_count: passed,
2175
2190
  failed_count: failed,
2176
2191
  skipped_count: skipped,
2192
+ ...advisoryFailed > 0 ? { validations_advisory_failed: advisoryFailed } : {},
2177
2193
  ...notApplicable > 0 ? { validations_not_applicable: notApplicable } : {},
2194
+ runner_capability_version: RUNNER_CAPABILITY_VERSION,
2178
2195
  tested_at: (/* @__PURE__ */ new Date()).toISOString(),
2179
2196
  ...schemasDedup.length > 0 ? { schemas_used: schemasDedup } : {},
2180
2197
  ...assertionsAgg.length > 0 ? { assertions: assertionsAgg } : {},
@@ -2194,6 +2211,17 @@ function countValidationsNotApplicable(phases) {
2194
2211
  }
2195
2212
  return n;
2196
2213
  }
2214
+ function countValidationsAdvisoryFailed(phases) {
2215
+ let n = 0;
2216
+ for (const phase of phases) {
2217
+ for (const step of phase.steps) {
2218
+ for (const validation of step.validations) {
2219
+ if (!validation.passed && validation.severity === "advisory") n++;
2220
+ }
2221
+ }
2222
+ }
2223
+ return n;
2224
+ }
2197
2225
  function collectSchemasUsed(phases) {
2198
2226
  const seen = /* @__PURE__ */ new Set();
2199
2227
  const out = [];
@@ -2898,8 +2926,16 @@ async function executeStep(client, step, storyboardId, phaseId, context, allStep
2898
2926
  } else {
2899
2927
  passed = stepResult.passed && (taskResult?.success ?? false);
2900
2928
  }
2929
+ const schemaValidationError = caughtError instanceof ResponseSchemaValidationError ? caughtError : void 0;
2930
+ const validationTaskResult = taskResult ?? (schemaValidationError ? {
2931
+ // ResponseSchemaValidationError is thrown while validating a
2932
+ // successful response arm. Preserve that terminal state so
2933
+ // status_code/error_code checks retain their authored semantics.
2934
+ success: true,
2935
+ data: schemaValidationError.data
2936
+ } : void 0);
2901
2937
  let validations = [];
2902
- if (step.validations?.length && (taskResult || httpResult)) {
2938
+ if (step.validations?.length && (validationTaskResult || httpResult)) {
2903
2939
  const resolvedValidations = step.validations.map((v) => {
2904
2940
  const resolved = { ...v };
2905
2941
  if (resolved.value !== void 0) {
@@ -2926,7 +2962,7 @@ async function executeStep(client, step, storyboardId, phaseId, context, allStep
2926
2962
  taskName: effectiveStep.task,
2927
2963
  ...options.adcpVersion && { adcpVersion: options.adcpVersion },
2928
2964
  ...options._serverAdcpVersion && { responseAdcpVersion: options._serverAdcpVersion },
2929
- ...taskResult && { taskResult },
2965
+ ...validationTaskResult && { taskResult: validationTaskResult },
2930
2966
  ...httpResult && { httpResult },
2931
2967
  agentUrl: runState.agentUrl,
2932
2968
  contributions: runState.contributions,
@@ -2983,20 +3019,38 @@ async function executeStep(client, step, storyboardId, phaseId, context, allStep
2983
3019
  }
2984
3020
  }
2985
3021
  }
2986
- if (caughtError instanceof ResponseSchemaValidationError) {
2987
- const issues = caughtError.issues.slice(0, 5).map((i) => `${i.path.join(".") || "(root)"}: ${i.message}`).join("; ");
2988
- const firstIssue = caughtError.issues[0];
3022
+ let schemaRejectionIsAdvisory = false;
3023
+ if (schemaValidationError) {
3024
+ const issues = schemaValidationError.issues.slice(0, 5).map((i) => `${i.path.join(".") || "(root)"}: ${i.message}`).join("; ");
3025
+ const firstIssue = schemaValidationError.issues[0];
2989
3026
  const jsonPointer = firstIssue ? "/" + firstIssue.path.map((s) => String(s)).join("/") : null;
2990
- const synthSchemaResult = {
3027
+ const baseSchemaResult = {
2991
3028
  check: "response_schema",
2992
3029
  passed: false,
2993
- description: `Response schema validation for ${caughtError.toolName}`,
3030
+ description: `Response schema validation for ${schemaValidationError.toolName}`,
2994
3031
  error: issues,
2995
3032
  json_pointer: jsonPointer,
2996
- expected: `response schema for ${caughtError.toolName}`,
2997
- actual: caughtError.issues
3033
+ expected: `response schema for ${schemaValidationError.toolName}`,
3034
+ actual: schemaValidationError.issues
2998
3035
  };
2999
- validations = [synthSchemaResult, ...validations];
3036
+ const authoredSchemaValidations = (step.validations ?? []).filter((v) => v.check === "response_schema");
3037
+ const schemaValidationContext = {
3038
+ taskName: effectiveStep.task,
3039
+ ...options.adcpVersion && { adcpVersion: options.adcpVersion },
3040
+ ...options._serverAdcpVersion && { responseAdcpVersion: options._serverAdcpVersion },
3041
+ ...validationTaskResult && { taskResult: validationTaskResult },
3042
+ agentUrl: runState.agentUrl,
3043
+ contributions: runState.contributions,
3044
+ request: requestRecord,
3045
+ ...responseRecord && { response: responseRecord }
3046
+ };
3047
+ const decoratedCandidates = authoredSchemaValidations.map(
3048
+ (validation) => decorateValidationResult(baseSchemaResult, schemaValidationContext, validation)
3049
+ );
3050
+ const schemaResults = decoratedCandidates.length ? decoratedCandidates : [{ ...baseSchemaResult, severity: "required" }];
3051
+ schemaRejectionIsAdvisory = schemaResults.every((result) => !validationFailsStep(result));
3052
+ if (schemaRejectionIsAdvisory && !step.expect_error) passed = true;
3053
+ validations = [...schemaResults, ...validations.filter((result) => result.check !== "response_schema")];
3000
3054
  }
3001
3055
  if (a2aEnvelope && runState.priorA2aEnvelopes) {
3002
3056
  runState.priorA2aEnvelopes.set(step.id, a2aEnvelope);
@@ -3081,7 +3135,7 @@ async function executeStep(client, step, storyboardId, phaseId, context, allStep
3081
3135
  }
3082
3136
  }
3083
3137
  }
3084
- const allValidationsPassedFinal = validations.every((v) => v.passed);
3138
+ const allValidationsPassedFinal = validations.every((v) => !validationFailsStep(v));
3085
3139
  const stepFailed = !(passed && allValidationsPassedFinal);
3086
3140
  const contextRejectionHints = stepFailed && runState.contextProvenance ? detectContextRejectionHints(taskResult, request, context, runState.contextProvenance, effectiveStep.task) : [];
3087
3141
  const driftPayload = (() => {
@@ -3116,7 +3170,7 @@ async function executeStep(client, step, storyboardId, phaseId, context, allStep
3116
3170
  context_provenance: Object.fromEntries(runState.contextProvenance)
3117
3171
  },
3118
3172
  ...responseDerivedContextResult(runState),
3119
- error: step.expect_error ? void 0 : truncateError(stepResult.error || taskResult?.error),
3173
+ error: step.expect_error || schemaRejectionIsAdvisory ? void 0 : truncateError(stepResult.error || taskResult?.error),
3120
3174
  ...!step.expect_error && taskResult?.adcp_error && { adcp_error: taskResult.adcp_error },
3121
3175
  next,
3122
3176
  request: requestRecord,
@@ -3422,7 +3476,7 @@ async function executeProbeStep(client, step, phaseId, context, allSteps, option
3422
3476
  ...oauthMetadataGraph && { oauthMetadataGraph }
3423
3477
  };
3424
3478
  const validations = step.validations?.length ? runValidations(step.validations, vctx) : [];
3425
- const allValidationsPassed = validations.every((v) => v.passed);
3479
+ const allValidationsPassed = validations.every((v) => !validationFailsStep(v));
3426
3480
  const fetchOk = httpResult ? !httpResult.error : true;
3427
3481
  const passed = fetchOk && allValidationsPassed;
3428
3482
  const extraction = httpResult ? httpResult.error ? { path: "error" } : { path: "structured_content", note: "http-probe body parsed as JSON" } : { path: "none" };
@@ -3630,7 +3684,7 @@ async function executeReplayWebhookVectorStep(step, phaseId, context, allSteps,
3630
3684
  body: redactSecrets(httpResult.body)
3631
3685
  };
3632
3686
  const validations = buildWebhookReplayValidations(step, vector, allSteps, options, requestRecord, responseRecord);
3633
- const allValidationsPassed = validations.every((v) => v.passed);
3687
+ const allValidationsPassed = validations.every((v) => !validationFailsStep(v));
3634
3688
  const fetchOk = !httpResult.error;
3635
3689
  const passed = fetchOk && allValidationsPassed;
3636
3690
  return {